1d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng/* 2d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * Copyright 2016, The Android Open Source Project 3d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * 4d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * Licensed under the Apache License, Version 2.0 (the "License"); 5d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * you may not use this file except in compliance with the License. 6d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * You may obtain a copy of the License at 7d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * 8d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * http://www.apache.org/licenses/LICENSE-2.0 9d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * 10d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * Unless required by applicable law or agreed to in writing, software 11d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * distributed under the License is distributed on an "AS IS" BASIS, 12d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * See the License for the specific language governing permissions and 14d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng * limitations under the License. 15d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng */ 16d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngpackage com.android.managedprovisioning.model; 17d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 18d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport android.os.Bundle; 19d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport android.os.Parcel; 20d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport android.test.AndroidTestCase; 21d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport android.test.MoreAsserts; 22d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport android.test.suitebuilder.annotation.SmallTest; 23d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 24d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport com.android.managedprovisioning.model.PackageDownloadInfo; 25d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 26d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport junit.framework.Assert; 27d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 28d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngimport java.lang.Exception; 29d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 30d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng/** Tests for {@link PackageDownloadInfo} */ 31d1784bd4d917bb36125e6faf125a2425c343838bSteven Ngpublic class PackageDownloadInfoTest extends AndroidTestCase { 32d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng private static final String TEST_DOWNLOAD_LOCATION = 33d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng "http://example/dpc.apk"; 34d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng private static final String TEST_COOKIE_HEADER = 35d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT"; 36d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' }; 37d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' }; 38d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng private static final int TEST_MIN_SUPPORT_VERSION = 7689; 39d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng private static final boolean TEST_CHECKSUM_SUPPORT_SHA1 = true; 40d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 41d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng @SmallTest 42d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng public void testBuilderWriteAndReadBack() { 43d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // WHEN a PackageDownloadInfo object is constructed with some test parameters. 44d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 45d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 46d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setCookieHeader(TEST_COOKIE_HEADER) 47d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 48d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 49d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setMinVersion(TEST_MIN_SUPPORT_VERSION) 50d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 51d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // THEN the same set of values are obtained in the object. 52d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(TEST_DOWNLOAD_LOCATION, downloadInfo.location); 53d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(TEST_COOKIE_HEADER, downloadInfo.cookieHeader); 54d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(TEST_PACKAGE_CHECKSUM, downloadInfo.packageChecksum); 55d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(TEST_SIGNATURE_CHECKSUM, downloadInfo.signatureChecksum); 56d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(TEST_MIN_SUPPORT_VERSION, downloadInfo.minVersion); 57d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } 58d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 59d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng @SmallTest 60d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng public void testFailToConstructPackageInfoWithDownloadLocationWithoutChecksum() { 6177bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // WHEN the PackageDownloadInfo is constructed with a download location but without any 62d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // checksum. 63d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng try { 64d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 65d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 66d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 67d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng fail("Checksum is mandatory."); 68d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } catch (IllegalArgumentException e) { 69d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // THEN PackageDownloadInfo is failed to construct due to the missing checksum. 70d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } 71d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } 72d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 73d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng @SmallTest 7477bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng public void testFailToConstructPackageInfoWithoutDownloadLocation() { 7577bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // WHEN the PackageDownloadInfo is constructed without any download location. 7677bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng try { 7777bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 7877bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 7977bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .build(); 8077bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng fail("Download location is mandatory."); 8177bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng } catch (IllegalArgumentException e) { 8277bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // THEN PackageDownloadInfo fails to construct due to the missing download location. 8377bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng } 8477bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng } 8577bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng 8677bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng @SmallTest 8777bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng public void testConstructPackageInfoWithDownloadLocationAndPackageChecksum() { 8877bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // WHEN the PackageDownloadInfo is constructed with a download location and a package 8977bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // checksum. 9077bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 9177bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 9277bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 9377bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .build(); 9477bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // THEN the PackageDownloadInfo is constructed with the following values. 9577bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng assertEquals(TEST_DOWNLOAD_LOCATION, downloadInfo.location); 9677bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng assertEquals(TEST_PACKAGE_CHECKSUM, downloadInfo.packageChecksum); 9777bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng } 9877bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng 9977bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng @SmallTest 10077bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng public void testConstructPackageInfoWithDownloadLocationAndSignatureChecksum() { 10177bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // WHEN the PackageDownloadInfo is constructed with a download location and a signature 10277bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // checksum. 10377bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng PackageDownloadInfo downloadInfo = PackageDownloadInfo.Builder.builder() 10477bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 10577bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 10677bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng .build(); 10777bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng // THEN the PackageDownloadInfo is constructed with the following values. 10877bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng assertEquals(TEST_DOWNLOAD_LOCATION, downloadInfo.location); 10977bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng assertEquals(TEST_SIGNATURE_CHECKSUM, downloadInfo.signatureChecksum); 11077bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng } 11177bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng 11277bac595693aa1aa6e4832f278d5b3b35a3ffd53Steven Ng @SmallTest 113d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng public void testEquals() { 114d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // GIVEN 2 PackageDownloadInfo objects are constructed with the same set of parameters. 115d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo downloadInfo1 = PackageDownloadInfo.Builder.builder() 116d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 117d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setCookieHeader(TEST_COOKIE_HEADER) 118d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 119d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 120d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setMinVersion(TEST_MIN_SUPPORT_VERSION) 121d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 122d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo downloadInfo2 = PackageDownloadInfo.Builder.builder() 123d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 124d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setCookieHeader(TEST_COOKIE_HEADER) 125d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 126d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 127d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setMinVersion(TEST_MIN_SUPPORT_VERSION) 128d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 129d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // WHEN comparing these two objects. 130d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // THEN they are equal. 131d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(downloadInfo1, downloadInfo2); 132d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } 133d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 134d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng @SmallTest 135d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng public void testNotEquals() { 136d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // GIVEN 2 PackageDownloadInfo objects are constructed with the different set of parameters. 137d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo downloadInfo1 = PackageDownloadInfo.Builder.builder() 138d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 139d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setCookieHeader(TEST_COOKIE_HEADER) 140d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 141d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 142d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setMinVersion(TEST_MIN_SUPPORT_VERSION) 143d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 144d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo downloadInfo2 = PackageDownloadInfo.Builder.builder() 145d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation("http://a/b/") 146d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setCookieHeader(TEST_COOKIE_HEADER) 147d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 148d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 149d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setMinVersion(TEST_MIN_SUPPORT_VERSION) 150d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 151d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // WHEN comparing these two objects. 152d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // THEN they are not equal. 153d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng MoreAsserts.assertNotEqual(downloadInfo1, downloadInfo2); 154d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } 155d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 156d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng @SmallTest 157d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng public void testParceable() { 158d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // GIVEN a PackageDownloadInfo object. 159d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo expectedDownloadInfo = PackageDownloadInfo.Builder.builder() 160d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setLocation(TEST_DOWNLOAD_LOCATION) 161d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setCookieHeader(TEST_COOKIE_HEADER) 162d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 163d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 164d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .setMinVersion(TEST_MIN_SUPPORT_VERSION) 165d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng .build(); 166d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 167d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // WHEN the PackageDownloadInfo is written to parcel and then read back. 168d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng Parcel parcel = Parcel.obtain(); 169d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng expectedDownloadInfo.writeToParcel(parcel, 0); 170d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng parcel.setDataPosition(0); 171d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo actualDownloadInfo = 172d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng PackageDownloadInfo.CREATOR.createFromParcel(parcel); 173d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng 174d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng // THEN the same PackageDownloadInfo is obtained. 175d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng assertEquals(expectedDownloadInfo, actualDownloadInfo); 176d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng } 177d1784bd4d917bb36125e6faf125a2425c343838bSteven Ng} 178