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