xref: /aosp_15_r20/cts/hostsidetests/backup/FullBackupOnly/src/FullBackupOnlyTest.java (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
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