1 /* 2 * Copyright 2016, 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 com.android.managedprovisioning.model; 17 18 import android.os.Parcel; 19 import android.test.AndroidTestCase; 20 import android.test.MoreAsserts; 21 22 import androidx.test.filters.SmallTest; 23 24 /** Tests for {@link PackageDownloadInfo} */ 25 public class PackageDownloadInfoTest extends AndroidTestCase { 26 private static final String TEST_DOWNLOAD_LOCATION = 27 "http://example/dpc.apk"; 28 private static final String TEST_COOKIE_HEADER = 29 "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT"; 30 private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' }; 31 private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' }; 32 private static final int TEST_MIN_SUPPORT_VERSION = 7689; 33 34 @SmallTest testBuilderWriteAndReadBack()35 public void testBuilderWriteAndReadBack() { 36 // WHEN a PackageDownloadInfo object is constructed with some test parameters. 37 PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 38 .setLocation(TEST_DOWNLOAD_LOCATION) 39 .setCookieHeader(TEST_COOKIE_HEADER) 40 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 41 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 42 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 43 .build(); 44 // THEN the same set of values are obtained in the object. 45 assertEquals(TEST_DOWNLOAD_LOCATION, downloadInfo.location); 46 assertEquals(TEST_COOKIE_HEADER, downloadInfo.cookieHeader); 47 assertEquals(TEST_PACKAGE_CHECKSUM, downloadInfo.packageChecksum); 48 assertEquals(TEST_SIGNATURE_CHECKSUM, downloadInfo.signatureChecksum); 49 assertEquals(TEST_MIN_SUPPORT_VERSION, downloadInfo.minVersion); 50 } 51 52 @SmallTest testFailToConstructPackageInfoWithDownloadLocationWithoutChecksum()53 public void testFailToConstructPackageInfoWithDownloadLocationWithoutChecksum() { 54 // WHEN the PackageDownloadInfo is constructed with a download location but without any 55 // checksum. 56 try { 57 PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 58 .setLocation(TEST_DOWNLOAD_LOCATION) 59 .build(); 60 fail("Checksum is mandatory."); 61 } catch (IllegalArgumentException e) { 62 // THEN PackageDownloadInfo is failed to construct due to the missing checksum. 63 } 64 } 65 66 @SmallTest testFailToConstructPackageInfoWithoutDownloadLocation()67 public void testFailToConstructPackageInfoWithoutDownloadLocation() { 68 // WHEN the PackageDownloadInfo is constructed without any download location. 69 try { 70 PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 71 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 72 .build(); 73 fail("Download location is mandatory."); 74 } catch (IllegalArgumentException e) { 75 // THEN PackageDownloadInfo fails to construct due to the missing download location. 76 } 77 } 78 79 @SmallTest testConstructPackageInfoWithDownloadLocationAndPackageChecksum()80 public void testConstructPackageInfoWithDownloadLocationAndPackageChecksum() { 81 // WHEN the PackageDownloadInfo is constructed with a download location and a package 82 // checksum. 83 PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 84 .setLocation(TEST_DOWNLOAD_LOCATION) 85 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 86 .build(); 87 // THEN the PackageDownloadInfo is constructed with the following values. 88 assertEquals(TEST_DOWNLOAD_LOCATION, downloadInfo.location); 89 assertEquals(TEST_PACKAGE_CHECKSUM, downloadInfo.packageChecksum); 90 } 91 92 @SmallTest testConstructPackageInfoWithDownloadLocationAndSignatureChecksum()93 public void testConstructPackageInfoWithDownloadLocationAndSignatureChecksum() { 94 // WHEN the PackageDownloadInfo is constructed with a download location and a signature 95 // checksum. 96 PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 97 .setLocation(TEST_DOWNLOAD_LOCATION) 98 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 99 .build(); 100 // THEN the PackageDownloadInfo is constructed with the following values. 101 assertEquals(TEST_DOWNLOAD_LOCATION, downloadInfo.location); 102 assertEquals(TEST_SIGNATURE_CHECKSUM, downloadInfo.signatureChecksum); 103 } 104 105 @SmallTest testEquals()106 public void testEquals() { 107 // GIVEN 2 PackageDownloadInfo objects are constructed with the same set of parameters. 108 PackageDownloadInfo downloadInfo1 = PackageDownloadInfo.Builder.builder() 109 .setLocation(TEST_DOWNLOAD_LOCATION) 110 .setCookieHeader(TEST_COOKIE_HEADER) 111 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 112 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 113 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 114 .build(); 115 PackageDownloadInfo downloadInfo2 = PackageDownloadInfo.Builder.builder() 116 .setLocation(TEST_DOWNLOAD_LOCATION) 117 .setCookieHeader(TEST_COOKIE_HEADER) 118 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 119 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 120 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 121 .build(); 122 // WHEN comparing these two objects. 123 // THEN they are equal. 124 assertEquals(downloadInfo1, downloadInfo2); 125 } 126 127 @SmallTest testNotEquals()128 public void testNotEquals() { 129 // GIVEN 2 PackageDownloadInfo objects are constructed with the different set of parameters. 130 PackageDownloadInfo downloadInfo1 = PackageDownloadInfo.Builder.builder() 131 .setLocation(TEST_DOWNLOAD_LOCATION) 132 .setCookieHeader(TEST_COOKIE_HEADER) 133 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 134 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 135 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 136 .build(); 137 PackageDownloadInfo downloadInfo2 = PackageDownloadInfo.Builder.builder() 138 .setLocation("http://a/b/") 139 .setCookieHeader(TEST_COOKIE_HEADER) 140 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 141 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 142 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 143 .build(); 144 // WHEN comparing these two objects. 145 // THEN they are not equal. 146 MoreAsserts.assertNotEqual(downloadInfo1, downloadInfo2); 147 } 148 149 @SmallTest testParceable()150 public void testParceable() { 151 // GIVEN a PackageDownloadInfo object. 152 PackageDownloadInfo expectedDownloadInfo = PackageDownloadInfo.Builder.builder() 153 .setLocation(TEST_DOWNLOAD_LOCATION) 154 .setCookieHeader(TEST_COOKIE_HEADER) 155 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 156 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 157 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 158 .build(); 159 160 // WHEN the PackageDownloadInfo is written to parcel and then read back. 161 Parcel parcel = Parcel.obtain(); 162 expectedDownloadInfo.writeToParcel(parcel, 0); 163 parcel.setDataPosition(0); 164 PackageDownloadInfo actualDownloadInfo = 165 PackageDownloadInfo.CREATOR.createFromParcel(parcel); 166 167 // THEN the same PackageDownloadInfo is obtained. 168 assertEquals(expectedDownloadInfo, actualDownloadInfo); 169 } 170 } 171