summaryrefslogtreecommitdiff
path: root/services/robotests/src/android/app/backup/BackupUtilsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'services/robotests/src/android/app/backup/BackupUtilsTest.java')
-rw-r--r--services/robotests/src/android/app/backup/BackupUtilsTest.java195
1 files changed, 195 insertions, 0 deletions
diff --git a/services/robotests/src/android/app/backup/BackupUtilsTest.java b/services/robotests/src/android/app/backup/BackupUtilsTest.java
new file mode 100644
index 000000000000..04a2a14b50e9
--- /dev/null
+++ b/services/robotests/src/android/app/backup/BackupUtilsTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.app.backup;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.backup.FullBackup.BackupScheme.PathWithRequiredFlags;
+import android.content.Context;
+import android.platform.test.annotations.Presubmit;
+
+import com.android.server.testing.FrameworkRobolectricTestRunner;
+import com.android.server.testing.SystemLoaderPackages;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.internal.DoNotInstrument;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+@RunWith(FrameworkRobolectricTestRunner.class)
+@Config(manifest = Config.NONE, sdk = 26)
+@SystemLoaderPackages({"android.app.backup"})
+@Presubmit
+@DoNotInstrument
+public class BackupUtilsTest {
+ private Context mContext;
+
+ @Before
+ public void setUp() throws Exception {
+ mContext = RuntimeEnvironment.application;
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListHasIt() throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(file("a/b.txt"), paths(file("a/b.txt")));
+
+ assertThat(isSpecified).isTrue();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListHasItsDirectory()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(file("a/b.txt"), paths(directory("a")));
+
+ assertThat(isSpecified).isTrue();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListHasOtherFile() throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(file("a/b.txt"), paths(file("a/c.txt")));
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListEmpty() throws Exception {
+ boolean isSpecified = BackupUtils.isFileSpecifiedInPathList(file("a/b.txt"), paths());
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenDirectoryAndPathListHasIt() throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(directory("a"), paths(directory("a")));
+
+ assertThat(isSpecified).isTrue();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenDirectoryAndPathListEmpty() throws Exception {
+ boolean isSpecified = BackupUtils.isFileSpecifiedInPathList(directory("a"), paths());
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenDirectoryAndPathListHasParent() throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(directory("a/b"), paths(directory("a")));
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListDoesntContainDirectory()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(file("a/b.txt"), paths(directory("c")));
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListHasDirectoryWhoseNameIsPrefix()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(file("a/b.txt"), paths(directory("a/b")));
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void testIsFileSpecifiedInPathList_whenFileAndPathListHasDirectoryWhoseNameIsPrefix2()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(
+ file("name/subname.txt"), paths(directory("nam")));
+
+ assertThat(isSpecified).isFalse();
+ }
+
+ @Test
+ public void
+ testIsFileSpecifiedInPathList_whenFileAndPathListContainsFirstNotRelatedAndSecondContainingDirectory()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(
+ file("a/b.txt"), paths(directory("b"), directory("a")));
+
+ assertThat(isSpecified).isTrue();
+ }
+
+ @Test
+ public void
+ testIsFileSpecifiedInPathList_whenDirectoryAndPathListContainsFirstNotRelatedAndSecondSameDirectory()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(
+ directory("a/b"), paths(directory("b"), directory("a/b")));
+
+ assertThat(isSpecified).isTrue();
+ }
+
+ @Test
+ public void
+ testIsFileSpecifiedInPathList_whenFileAndPathListContainsFirstNotRelatedFileAndSecondSameFile()
+ throws Exception {
+ boolean isSpecified =
+ BackupUtils.isFileSpecifiedInPathList(
+ file("a/b.txt"), paths(directory("b"), file("a/b.txt")));
+
+ assertThat(isSpecified).isTrue();
+ }
+
+ private File file(String path) throws IOException {
+ File file = new File(mContext.getDataDir(), path);
+ File parent = file.getParentFile();
+ parent.mkdirs();
+ file.createNewFile();
+ if (!file.isFile()) {
+ throw new IOException("Couldn't create file");
+ }
+ return file;
+ }
+
+ private File directory(String path) throws IOException {
+ File directory = new File(mContext.getDataDir(), path);
+ directory.mkdirs();
+ if (!directory.isDirectory()) {
+ throw new IOException("Couldn't create directory");
+ }
+ return directory;
+ }
+
+ private Collection<PathWithRequiredFlags> paths(File... files) {
+ return Stream.of(files)
+ .map(file -> new PathWithRequiredFlags(file.getPath(), 0))
+ .collect(Collectors.toList());
+ }
+}