blob: 0e918db321e38c7c02bdf4b97912b4fb44fb3de8 [file] [log] [blame]
Robert Berryc31a8392017-07-14 14:19:21 +01001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License
15 */
16
17package com.android.server.backup;
18
19import static com.google.common.truth.Truth.assertThat;
20
Ruslan Tkhakokhovd1b4b812019-11-29 14:44:37 +000021import static org.mockito.Mockito.when;
22import static org.testng.Assert.assertEquals;
23
Robert Berryc31a8392017-07-14 14:19:21 +010024import android.platform.test.annotations.Presubmit;
Brett Chabota26eda92018-07-23 13:08:30 -070025
26import androidx.test.filters.SmallTest;
27import androidx.test.runner.AndroidJUnit4;
Robert Berryc31a8392017-07-14 14:19:21 +010028
29import org.junit.Before;
30import org.junit.Rule;
31import org.junit.Test;
32import org.junit.rules.TemporaryFolder;
33import org.junit.runner.RunWith;
34import org.mockito.InOrder;
35import org.mockito.Mock;
36import org.mockito.Mockito;
37import org.mockito.MockitoAnnotations;
38
39import java.io.DataInputStream;
40import java.io.File;
41import java.io.FileInputStream;
42import java.util.ArrayList;
Bernardo Rufinofd1d7292018-07-10 12:54:05 +010043import java.util.function.Consumer;
Robert Berryc31a8392017-07-14 14:19:21 +010044
45@SmallTest
46@Presubmit
47@RunWith(AndroidJUnit4.class)
48public class DataChangedJournalTest {
49 private static final String GMAIL = "com.google.gmail";
50 private static final String DOCS = "com.google.docs";
51 private static final String GOOGLE_PLUS = "com.google.plus";
52
53 @Rule public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
54
Bernardo Rufinofd1d7292018-07-10 12:54:05 +010055 @Mock private Consumer<String> mConsumer;
Ruslan Tkhakokhovd1b4b812019-11-29 14:44:37 +000056 @Mock private File invalidFile;
Robert Berryc31a8392017-07-14 14:19:21 +010057
58 private File mFile;
59 private DataChangedJournal mJournal;
60
61 @Before
62 public void setUp() throws Exception {
63 MockitoAnnotations.initMocks(this);
64 mFile = mTemporaryFolder.newFile();
65 mJournal = new DataChangedJournal(mFile);
66 }
67
68 @Test
69 public void addPackage_addsPackagesToEndOfFile() throws Exception {
70 mJournal.addPackage(GMAIL);
71 mJournal.addPackage(DOCS);
72 mJournal.addPackage(GOOGLE_PLUS);
73
74 FileInputStream fos = new FileInputStream(mFile);
75 DataInputStream dos = new DataInputStream(fos);
76 assertThat(dos.readUTF()).isEqualTo(GMAIL);
77 assertThat(dos.readUTF()).isEqualTo(DOCS);
78 assertThat(dos.readUTF()).isEqualTo(GOOGLE_PLUS);
79 assertThat(dos.available()).isEqualTo(0);
80 }
81
82 @Test
83 public void delete_deletesTheFile() throws Exception {
84 mJournal.addPackage(GMAIL);
85
86 mJournal.delete();
87
88 assertThat(mFile.exists()).isFalse();
89 }
90
91 @Test
92 public void equals_isTrueForTheSameFile() throws Exception {
93 assertThat(mJournal.equals(new DataChangedJournal(mFile))).isTrue();
94 }
95
96 @Test
97 public void equals_isFalseForDifferentFiles() throws Exception {
98 assertThat(mJournal.equals(new DataChangedJournal(mTemporaryFolder.newFile()))).isFalse();
99 }
100
101 @Test
102 public void forEach_iteratesThroughPackagesInFileInOrder() throws Exception {
103 mJournal.addPackage(GMAIL);
104 mJournal.addPackage(DOCS);
105
106 mJournal.forEach(mConsumer);
107
108 InOrder inOrder = Mockito.inOrder(mConsumer);
109 inOrder.verify(mConsumer).accept(GMAIL);
110 inOrder.verify(mConsumer).accept(DOCS);
111 inOrder.verifyNoMoreInteractions();
112 }
113
114 @Test
115 public void listJournals_returnsJournalsForEveryFileInDirectory() throws Exception {
116 File folder = mTemporaryFolder.newFolder();
117 DataChangedJournal.newJournal(folder);
118 DataChangedJournal.newJournal(folder);
119
120 ArrayList<DataChangedJournal> journals = DataChangedJournal.listJournals(folder);
121
122 assertThat(journals).hasSize(2);
123 }
124
125 @Test
126 public void newJournal_createsANewTemporaryFile() throws Exception {
127 File folder = mTemporaryFolder.newFolder();
128
129 DataChangedJournal.newJournal(folder);
130
131 assertThat(folder.listFiles()).hasLength(1);
132 }
133
134 @Test
135 public void toString_isSameAsFileToString() throws Exception {
136 assertThat(mJournal.toString()).isEqualTo(mFile.toString());
137 }
Ruslan Tkhakokhovd1b4b812019-11-29 14:44:37 +0000138
Colin Cross5ea7fb72019-12-18 17:16:36 -0800139 @Test
Ruslan Tkhakokhovd1b4b812019-11-29 14:44:37 +0000140 public void listJournals_invalidJournalFile_returnsEmptyList() throws Exception {
141 when(invalidFile.listFiles()).thenReturn(null);
142
143 assertEquals(0, DataChangedJournal.listJournals(invalidFile).size());
144 }
Robert Berryc31a8392017-07-14 14:19:21 +0100145}