• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 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 package android.app.backup;
17 
18 import static com.google.common.truth.Truth.assertWithMessage;
19 
20 import android.app.backup.BackupRestoreEventLogger.DataTypeResult;
21 import android.os.Bundle;
22 import android.os.Parcel;
23 
24 import com.google.common.truth.Expect;
25 
26 import org.junit.Rule;
27 import org.junit.Test;
28 
29 import java.util.Map;
30 
31 public final class DataTypeResultTest {
32 
33     @Rule
34     public final Expect expect = Expect.create();
35 
36     @Test
testGetters_defaultConstructorFields()37     public void testGetters_defaultConstructorFields() {
38         var result = new DataTypeResult("The Type is Bond, James Bond!");
39 
40         expect.withMessage("getDataType()").that(result.getDataType())
41                 .isEqualTo("The Type is Bond, James Bond!");
42         expect.withMessage("getSuccessCount()").that(result.getSuccessCount()).isEqualTo(0);
43         expect.withMessage("getFailCount()").that(result.getFailCount()).isEqualTo(0);
44         expect.withMessage("getErrorsCount()").that(result.getErrors()).isEmpty();
45         expect.withMessage("getMetadataHash()").that(result.getMetadataHash()).isNull();
46         expect.withMessage("describeContents()").that(result.describeContents()).isEqualTo(0);
47     }
48 
49     @Test
testGetters_allFields()50     public void testGetters_allFields() {
51         DataTypeResult result = createDataTypeResult("The Type is Bond, James Bond!",
52                 /* successCount= */ 42, /* failCount= */ 108, Map.of("D'OH!", 666),
53                 new byte[] { 4, 8, 15, 16, 23, 42 });
54 
55         expect.withMessage("getDataType()").that(result.getDataType())
56                 .isEqualTo("The Type is Bond, James Bond!");
57         expect.withMessage("getSuccessCount()").that(result.getSuccessCount()).isEqualTo(42);
58         expect.withMessage("getFailCount()").that(result.getFailCount()).isEqualTo(108);
59         expect.withMessage("getErrorsCount()").that(result.getErrors()).containsExactly("D'OH!",
60                 666);
61         expect.withMessage("getMetadataHash()").that(result.getMetadataHash()).asList()
62                 .containsExactly((byte) 4, (byte) 8, (byte) 15, (byte) 16, (byte) 23, (byte) 42)
63                 .inOrder();
64         expect.withMessage("describeContents()").that(result.describeContents()).isEqualTo(0);
65     }
66 
67     @Test
testParcelMethods()68     public void testParcelMethods() {
69         DataTypeResult original = createDataTypeResult("The Type is Bond, James Bond!",
70                 /* successCount= */ 42, /* failCount= */ 108, Map.of("D'OH!", 666),
71                 new byte[] { 4, 8, 15, 16, 23, 42 });
72         Parcel parcel = Parcel.obtain();
73         try {
74             original.writeToParcel(parcel, /* flags= */ 0);
75 
76             parcel.setDataPosition(0);
77             var clone = DataTypeResult.CREATOR.createFromParcel(parcel);
78             assertWithMessage("createFromParcel()").that(clone).isNotNull();
79 
80             expect.withMessage("getDataType()").that(clone.getDataType())
81                     .isEqualTo(original.getDataType());
82             expect.withMessage("getSuccessCount()").that(clone.getSuccessCount())
83                     .isEqualTo(original.getSuccessCount());
84             expect.withMessage("getFailCount()").that(clone.getFailCount())
85                     .isEqualTo(original.getFailCount());
86             expect.withMessage("getErrorsCount()").that(clone.getErrors())
87                     .containsExactlyEntriesIn(original.getErrors()).inOrder();
88             expect.withMessage("getMetadataHash()").that(clone.getMetadataHash())
89                     .isEqualTo(original.getMetadataHash());
90             expect.withMessage("describeContents()").that(clone.describeContents()).isEqualTo(0);
91         } finally {
92             parcel.recycle();
93         }
94     }
95 
createDataTypeResult(String dataType, int successCount, int failCount, Map<String, Integer> errors, byte... metadataHash)96     static DataTypeResult createDataTypeResult(String dataType, int successCount, int failCount,
97             Map<String, Integer> errors, byte... metadataHash) {
98         Parcel parcel = Parcel.obtain();
99         try {
100             parcel.writeString(dataType);
101             parcel.writeInt(successCount);
102             parcel.writeInt(failCount);
103             Bundle errorsBundle = new Bundle();
104             errors.entrySet()
105                     .forEach(entry -> errorsBundle.putInt(entry.getKey(), entry.getValue()));
106             parcel.writeBundle(errorsBundle);
107             parcel.writeByteArray(metadataHash);
108 
109             parcel.setDataPosition(0);
110             var result = DataTypeResult.CREATOR.createFromParcel(parcel);
111             assertWithMessage("createFromParcel()").that(result).isNotNull();
112             return result;
113         } finally {
114             parcel.recycle();
115         }
116     }
117 }
118