1*b7c941bbSAndroid Build Coastguard Worker /* 2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2017 The Android Open Source Project 3*b7c941bbSAndroid Build Coastguard Worker * 4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*b7c941bbSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*b7c941bbSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*b7c941bbSAndroid Build Coastguard Worker * 8*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*b7c941bbSAndroid Build Coastguard Worker * 10*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*b7c941bbSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*b7c941bbSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b7c941bbSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*b7c941bbSAndroid Build Coastguard Worker * limitations under the License 15*b7c941bbSAndroid Build Coastguard Worker */ 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Worker package android.cts.backup.fullbackuponlyapp; 18*b7c941bbSAndroid Build Coastguard Worker 19*b7c941bbSAndroid Build Coastguard Worker import static androidx.test.InstrumentationRegistry.getTargetContext; 20*b7c941bbSAndroid Build Coastguard Worker 21*b7c941bbSAndroid Build Coastguard Worker import static org.junit.Assert.assertFalse; 22*b7c941bbSAndroid Build Coastguard Worker import static org.junit.Assert.assertTrue; 23*b7c941bbSAndroid Build Coastguard Worker 24*b7c941bbSAndroid Build Coastguard Worker import android.content.Context; 25*b7c941bbSAndroid Build Coastguard Worker import android.platform.test.annotations.AppModeFull; 26*b7c941bbSAndroid Build Coastguard Worker import android.util.Log; 27*b7c941bbSAndroid Build Coastguard Worker 28*b7c941bbSAndroid Build Coastguard Worker import androidx.test.runner.AndroidJUnit4; 29*b7c941bbSAndroid Build Coastguard Worker 30*b7c941bbSAndroid Build Coastguard Worker import org.junit.Before; 31*b7c941bbSAndroid Build Coastguard Worker import org.junit.Test; 32*b7c941bbSAndroid Build Coastguard Worker import org.junit.runner.RunWith; 33*b7c941bbSAndroid Build Coastguard Worker 34*b7c941bbSAndroid Build Coastguard Worker import java.io.BufferedOutputStream; 35*b7c941bbSAndroid Build Coastguard Worker import java.io.File; 36*b7c941bbSAndroid Build Coastguard Worker import java.io.FileOutputStream; 37*b7c941bbSAndroid Build Coastguard Worker import java.io.IOException; 38*b7c941bbSAndroid Build Coastguard Worker import java.util.Random; 39*b7c941bbSAndroid Build Coastguard Worker 40*b7c941bbSAndroid Build Coastguard Worker /** 41*b7c941bbSAndroid Build Coastguard Worker * Device side routines to be invoked by the host side FullBackupOnlyHostSideTest. These 42*b7c941bbSAndroid Build Coastguard Worker * are not designed to be called in any other way, as they rely on state set up by the host side 43*b7c941bbSAndroid Build Coastguard Worker * test. 44*b7c941bbSAndroid Build Coastguard Worker */ 45*b7c941bbSAndroid Build Coastguard Worker @RunWith(AndroidJUnit4.class) 46*b7c941bbSAndroid Build Coastguard Worker @AppModeFull 47*b7c941bbSAndroid Build Coastguard Worker public class FullBackupOnlyTest { 48*b7c941bbSAndroid Build Coastguard Worker private static final String TAG = "FullBackupOnlyTest"; 49*b7c941bbSAndroid Build Coastguard Worker 50*b7c941bbSAndroid Build Coastguard Worker private static final int FILE_SIZE_BYTES = 1024 * 1024; 51*b7c941bbSAndroid Build Coastguard Worker 52*b7c941bbSAndroid Build Coastguard Worker private File mKeyValueBackupFile; 53*b7c941bbSAndroid Build Coastguard Worker private File mDoBackupFile; 54*b7c941bbSAndroid Build Coastguard Worker private File mDoBackupFile2; 55*b7c941bbSAndroid Build Coastguard Worker 56*b7c941bbSAndroid Build Coastguard Worker private Context mContext; 57*b7c941bbSAndroid Build Coastguard Worker 58*b7c941bbSAndroid Build Coastguard Worker @Before setUp()59*b7c941bbSAndroid Build Coastguard Worker public void setUp() { 60*b7c941bbSAndroid Build Coastguard Worker Log.i(TAG, "set up"); 61*b7c941bbSAndroid Build Coastguard Worker mContext = getTargetContext(); 62*b7c941bbSAndroid Build Coastguard Worker setupFiles(); 63*b7c941bbSAndroid Build Coastguard Worker } 64*b7c941bbSAndroid Build Coastguard Worker setupFiles()65*b7c941bbSAndroid Build Coastguard Worker private void setupFiles() { 66*b7c941bbSAndroid Build Coastguard Worker mKeyValueBackupFile = getKeyValueBackupFile(mContext); 67*b7c941bbSAndroid Build Coastguard Worker 68*b7c941bbSAndroid Build Coastguard Worker // Files to be backed up with Dolly 69*b7c941bbSAndroid Build Coastguard Worker File filesDir = mContext.getFilesDir(); 70*b7c941bbSAndroid Build Coastguard Worker File normalFolder = new File(filesDir, "normal_folder"); 71*b7c941bbSAndroid Build Coastguard Worker 72*b7c941bbSAndroid Build Coastguard Worker mDoBackupFile = new File(filesDir, "file_to_backup"); 73*b7c941bbSAndroid Build Coastguard Worker mDoBackupFile2 = new File(normalFolder, "file_to_backup2"); 74*b7c941bbSAndroid Build Coastguard Worker } 75*b7c941bbSAndroid Build Coastguard Worker 76*b7c941bbSAndroid Build Coastguard Worker @Test createFiles()77*b7c941bbSAndroid Build Coastguard Worker public void createFiles() throws Exception { 78*b7c941bbSAndroid Build Coastguard Worker // Make sure the data does not exist from before 79*b7c941bbSAndroid Build Coastguard Worker deleteAllFiles(); 80*b7c941bbSAndroid Build Coastguard Worker assertNoFilesExist(); 81*b7c941bbSAndroid Build Coastguard Worker 82*b7c941bbSAndroid Build Coastguard Worker // Create test data 83*b7c941bbSAndroid Build Coastguard Worker generateFiles(); 84*b7c941bbSAndroid Build Coastguard Worker assertAllFilesExist(); 85*b7c941bbSAndroid Build Coastguard Worker 86*b7c941bbSAndroid Build Coastguard Worker Log.d(TAG, "Test files created: \n" 87*b7c941bbSAndroid Build Coastguard Worker + mKeyValueBackupFile.getAbsolutePath() + "\n" 88*b7c941bbSAndroid Build Coastguard Worker + mDoBackupFile.getAbsolutePath() + "\n" 89*b7c941bbSAndroid Build Coastguard Worker + mDoBackupFile2.getAbsolutePath()); 90*b7c941bbSAndroid Build Coastguard Worker } 91*b7c941bbSAndroid Build Coastguard Worker 92*b7c941bbSAndroid Build Coastguard Worker @Test checkKeyValueFileDoesntExist()93*b7c941bbSAndroid Build Coastguard Worker public void checkKeyValueFileDoesntExist() throws Exception { 94*b7c941bbSAndroid Build Coastguard Worker assertKeyValueFileDoesntExist(); 95*b7c941bbSAndroid Build Coastguard Worker } 96*b7c941bbSAndroid Build Coastguard Worker 97*b7c941bbSAndroid Build Coastguard Worker @Test checkKeyValueFileExists()98*b7c941bbSAndroid Build Coastguard Worker public void checkKeyValueFileExists() throws Exception { 99*b7c941bbSAndroid Build Coastguard Worker assertKeyValueFileExists(); 100*b7c941bbSAndroid Build Coastguard Worker } 101*b7c941bbSAndroid Build Coastguard Worker 102*b7c941bbSAndroid Build Coastguard Worker @Test checkDollyFilesExist()103*b7c941bbSAndroid Build Coastguard Worker public void checkDollyFilesExist() throws Exception { 104*b7c941bbSAndroid Build Coastguard Worker assertDollyFilesExist(); 105*b7c941bbSAndroid Build Coastguard Worker } 106*b7c941bbSAndroid Build Coastguard Worker 107*b7c941bbSAndroid Build Coastguard Worker @Test checkDollyFilesDontExist()108*b7c941bbSAndroid Build Coastguard Worker public void checkDollyFilesDontExist() throws Exception { 109*b7c941bbSAndroid Build Coastguard Worker assertDollyFilesDontExist(); 110*b7c941bbSAndroid Build Coastguard Worker } 111*b7c941bbSAndroid Build Coastguard Worker getKeyValueBackupFile(Context context)112*b7c941bbSAndroid Build Coastguard Worker protected static File getKeyValueBackupFile(Context context) { 113*b7c941bbSAndroid Build Coastguard Worker // Files in the 'no_backup' directory are not backed up with Dolly. 114*b7c941bbSAndroid Build Coastguard Worker // We're going to use it to store a file the contents of which are backed up via key/value. 115*b7c941bbSAndroid Build Coastguard Worker File noBackupDir = context.getNoBackupFilesDir(); 116*b7c941bbSAndroid Build Coastguard Worker return new File(noBackupDir, "key_value_backup_file"); 117*b7c941bbSAndroid Build Coastguard Worker } 118*b7c941bbSAndroid Build Coastguard Worker generateFiles()119*b7c941bbSAndroid Build Coastguard Worker private void generateFiles() { 120*b7c941bbSAndroid Build Coastguard Worker try { 121*b7c941bbSAndroid Build Coastguard Worker // Add data to all the files we created 122*b7c941bbSAndroid Build Coastguard Worker addData(mKeyValueBackupFile); 123*b7c941bbSAndroid Build Coastguard Worker addData(mDoBackupFile); 124*b7c941bbSAndroid Build Coastguard Worker addData(mDoBackupFile2); 125*b7c941bbSAndroid Build Coastguard Worker Log.d(TAG, "Files generated!"); 126*b7c941bbSAndroid Build Coastguard Worker } catch (IOException e) { 127*b7c941bbSAndroid Build Coastguard Worker Log.e(TAG, "Unable to generate files", e); 128*b7c941bbSAndroid Build Coastguard Worker } 129*b7c941bbSAndroid Build Coastguard Worker } 130*b7c941bbSAndroid Build Coastguard Worker deleteAllFiles()131*b7c941bbSAndroid Build Coastguard Worker private void deleteAllFiles() { 132*b7c941bbSAndroid Build Coastguard Worker mKeyValueBackupFile.delete(); 133*b7c941bbSAndroid Build Coastguard Worker mDoBackupFile.delete(); 134*b7c941bbSAndroid Build Coastguard Worker mDoBackupFile2.delete(); 135*b7c941bbSAndroid Build Coastguard Worker Log.d(TAG, "Files deleted!"); 136*b7c941bbSAndroid Build Coastguard Worker } 137*b7c941bbSAndroid Build Coastguard Worker addData(File file)138*b7c941bbSAndroid Build Coastguard Worker private void addData(File file) throws IOException { 139*b7c941bbSAndroid Build Coastguard Worker file.getParentFile().mkdirs(); 140*b7c941bbSAndroid Build Coastguard Worker byte[] bytes = new byte[FILE_SIZE_BYTES]; 141*b7c941bbSAndroid Build Coastguard Worker new Random().nextBytes(bytes); 142*b7c941bbSAndroid Build Coastguard Worker 143*b7c941bbSAndroid Build Coastguard Worker try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file))) { 144*b7c941bbSAndroid Build Coastguard Worker bos.write(bytes, 0, bytes.length); 145*b7c941bbSAndroid Build Coastguard Worker } 146*b7c941bbSAndroid Build Coastguard Worker } 147*b7c941bbSAndroid Build Coastguard Worker assertAllFilesExist()148*b7c941bbSAndroid Build Coastguard Worker private void assertAllFilesExist() { 149*b7c941bbSAndroid Build Coastguard Worker assertKeyValueFileExists(); 150*b7c941bbSAndroid Build Coastguard Worker assertDollyFilesExist(); 151*b7c941bbSAndroid Build Coastguard Worker } 152*b7c941bbSAndroid Build Coastguard Worker assertNoFilesExist()153*b7c941bbSAndroid Build Coastguard Worker private void assertNoFilesExist() { 154*b7c941bbSAndroid Build Coastguard Worker assertKeyValueFileDoesntExist(); 155*b7c941bbSAndroid Build Coastguard Worker assertDollyFilesDontExist(); 156*b7c941bbSAndroid Build Coastguard Worker } 157*b7c941bbSAndroid Build Coastguard Worker assertKeyValueFileExists()158*b7c941bbSAndroid Build Coastguard Worker private void assertKeyValueFileExists() { 159*b7c941bbSAndroid Build Coastguard Worker assertTrue("Key/value file did not exist!", mKeyValueBackupFile.exists()); 160*b7c941bbSAndroid Build Coastguard Worker } 161*b7c941bbSAndroid Build Coastguard Worker assertKeyValueFileDoesntExist()162*b7c941bbSAndroid Build Coastguard Worker private void assertKeyValueFileDoesntExist() { 163*b7c941bbSAndroid Build Coastguard Worker assertFalse("Key/value file did exist!", mKeyValueBackupFile.exists()); 164*b7c941bbSAndroid Build Coastguard Worker } 165*b7c941bbSAndroid Build Coastguard Worker assertDollyFilesExist()166*b7c941bbSAndroid Build Coastguard Worker private void assertDollyFilesExist() { 167*b7c941bbSAndroid Build Coastguard Worker assertTrue("File in 'files' did not exist!", mDoBackupFile.exists()); 168*b7c941bbSAndroid Build Coastguard Worker assertTrue("File in folder inside 'files' did not exist!", mDoBackupFile2.exists()); 169*b7c941bbSAndroid Build Coastguard Worker } 170*b7c941bbSAndroid Build Coastguard Worker assertDollyFilesDontExist()171*b7c941bbSAndroid Build Coastguard Worker private void assertDollyFilesDontExist() { 172*b7c941bbSAndroid Build Coastguard Worker assertFalse("File in 'files' did exist!", mDoBackupFile.exists()); 173*b7c941bbSAndroid Build Coastguard Worker assertFalse("File in folder inside 'files' did exist!", mDoBackupFile2.exists()); 174*b7c941bbSAndroid Build Coastguard Worker } 175*b7c941bbSAndroid Build Coastguard Worker } 176