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