• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 static com.android.managedprovisioning.TestUtils.createTestAdminExtras;
19 
20 import android.accounts.Account;
21 import android.app.admin.DevicePolicyManager;
22 import android.content.ComponentName;
23 import android.os.Bundle;
24 import android.os.Parcel;
25 import android.os.PersistableBundle;
26 import android.test.AndroidTestCase;
27 import android.test.MoreAsserts;
28 import android.test.suitebuilder.annotation.SmallTest;
29 
30 import com.android.managedprovisioning.model.WifiInfo;
31 import com.android.managedprovisioning.model.PackageDownloadInfo;
32 
33 import java.lang.Exception;
34 import java.util.Locale;
35 
36 /** Tests for {@link ProvisioningParams} */
37 public class ProvisioningParamsTest extends AndroidTestCase {
38     private static final String TEST_PROVISIONING_ACTION =
39             DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
40 
41     private static final String TEST_PACKAGE_NAME = "com.afwsamples.testdpc";
42     private static final ComponentName TEST_COMPONENT_NAME =
43             ComponentName.unflattenFromString(
44                     "com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver");
45     private static final long TEST_LOCAL_TIME = 1456939524713L;
46     private static final Locale TEST_LOCALE = Locale.UK;
47     private static final String TEST_TIME_ZONE = "GMT";
48     private static final Integer TEST_MAIN_COLOR = 65280;
49     private static final boolean TEST_STARTED_BY_TRUSTED_SOURCE = true;
50     private static final boolean TEST_LEAVE_ALL_SYSTEM_APP_ENABLED = true;
51     private static final boolean TEST_SKIP_ENCRYPTION = true;
52     private static final boolean TEST_SKIP_USER_SETUP = true;
53     private static final Account TEST_ACCOUNT_TO_MIGRATE =
54             new Account("user@gmail.com", "com.google");
55 
56     // Wifi info
57     private static final String TEST_SSID = "TestWifi";
58     private static final boolean TEST_HIDDEN = true;
59     private static final String TEST_SECURITY_TYPE = "WPA2";
60     private static final String TEST_PASSWORD = "GoogleRock";
61     private static final String TEST_PROXY_HOST = "testhost.com";
62     private static final int TEST_PROXY_PORT = 7689;
63     private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
64     private static final String TEST_PAC_URL = "pac.test.com";
65     private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder()
66             .setSsid(TEST_SSID)
67             .setHidden(TEST_HIDDEN)
68             .setSecurityType(TEST_SECURITY_TYPE)
69             .setPassword(TEST_PASSWORD)
70             .setProxyHost(TEST_PROXY_HOST)
71             .setProxyPort(TEST_PROXY_PORT)
72             .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
73             .setPacUrl(TEST_PAC_URL)
74             .build();
75 
76     // Device admin package download info
77     private static final String TEST_DOWNLOAD_LOCATION =
78             "http://example/dpc.apk";
79     private static final String TEST_COOKIE_HEADER =
80             "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT";
81     private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' };
82     private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' };
83     private static final int TEST_MIN_SUPPORT_VERSION = 17689;
84     private static final PackageDownloadInfo TEST_DOWNLOAD_INFO =
85             PackageDownloadInfo.Builder.builder()
86                     .setLocation(TEST_DOWNLOAD_LOCATION)
87                     .setCookieHeader(TEST_COOKIE_HEADER)
88                     .setPackageChecksum(TEST_PACKAGE_CHECKSUM)
89                     .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM)
90                     .setMinVersion(TEST_MIN_SUPPORT_VERSION)
91                     .build();
92 
93     @SmallTest
testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName()94     public void testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName() {
95         // WHEN the ProvisioningParams is constructed by with neither a package name nor a component
96         // name
97         try {
98             ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder()
99                     .setProvisioningAction(TEST_PROVISIONING_ACTION)
100                     .build();
101             fail("Package name or component name is mandatory.");
102         } catch (IllegalArgumentException e) {
103             // THEN the ProvisioningParams fails to construct.
104         }
105     }
106 
107     @SmallTest
testFailToConstructProvisioningParamsWithoutProvisioningAction()108     public void testFailToConstructProvisioningParamsWithoutProvisioningAction() {
109         // WHEN the ProvisioningParams is constructed by without a provisioning action.
110         try {
111             ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder()
112                     .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
113                     .build();
114             fail("Provisioning action is mandatory");
115         } catch (NullPointerException e) {
116             // THEN the ProvisioningParams fails to construct.
117         }
118     }
119 
120     @SmallTest
testEquals()121     public void testEquals() {
122         // GIVEN 2 ProvisioningParams objects created by the same set of parameters
123         ProvisioningParams provisioningParams1 = ProvisioningParams.Builder.builder()
124                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
125                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
126                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
127                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
128                 .setLocalTime(TEST_LOCAL_TIME)
129                 .setLocale(TEST_LOCALE)
130                 .setTimeZone(TEST_TIME_ZONE)
131                 .setMainColor(TEST_MAIN_COLOR)
132                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
133                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
134                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
135                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
136                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
137                 .setWifiInfo(TEST_WIFI_INFO)
138                 .setAdminExtrasBundle(createTestAdminExtras())
139                 .build();
140         ProvisioningParams provisioningParams2 = ProvisioningParams.Builder.builder()
141                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
142                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
143                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
144                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
145                 .setLocalTime(TEST_LOCAL_TIME)
146                 .setLocale(TEST_LOCALE)
147                 .setTimeZone(TEST_TIME_ZONE)
148                 .setMainColor(TEST_MAIN_COLOR)
149                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
150                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
151                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
152                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
153                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
154                 .setWifiInfo(TEST_WIFI_INFO)
155                 .setAdminExtrasBundle(createTestAdminExtras())
156                 .build();
157 
158         // WHEN these two objects compare.
159         // THEN they are the same.
160         assertEquals(provisioningParams1, provisioningParams2);
161     }
162 
163     @SmallTest
testNotEquals()164     public void testNotEquals() {
165         // GIVEN 2 ProvisioningParams objects created by different sets of parameters
166         ProvisioningParams provisioningParams1 = ProvisioningParams.Builder.builder()
167                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
168                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
169                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
170                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
171                 .setLocalTime(TEST_LOCAL_TIME)
172                 .setLocale(TEST_LOCALE)
173                 .setTimeZone(TEST_TIME_ZONE)
174                 .setMainColor(TEST_MAIN_COLOR)
175                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
176                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
177                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
178                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
179                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
180                 .setWifiInfo(TEST_WIFI_INFO)
181                 .setAdminExtrasBundle(createTestAdminExtras())
182                 .build();
183         ProvisioningParams provisioningParams2 = ProvisioningParams.Builder.builder()
184                 .setProvisioningAction("different.action")
185                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
186                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
187                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
188                 .setLocalTime(TEST_LOCAL_TIME)
189                 .setLocale(TEST_LOCALE)
190                 .setTimeZone(TEST_TIME_ZONE)
191                 .setMainColor(TEST_MAIN_COLOR)
192                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
193                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
194                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
195                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
196                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
197                 .setWifiInfo(TEST_WIFI_INFO)
198                 .setAdminExtrasBundle(createTestAdminExtras())
199                 .build();
200 
201         // WHEN these two objects compare.
202         // THEN they are not the same.
203         MoreAsserts.assertNotEqual(provisioningParams1, provisioningParams2);
204     }
205 
206     @SmallTest
testParceable()207     public void testParceable() {
208         // GIVEN a ProvisioningParams object.
209         ProvisioningParams expectedProvisioningParams = ProvisioningParams.Builder.builder()
210                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
211                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
212                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
213                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
214                 .setLocalTime(TEST_LOCAL_TIME)
215                 .setLocale(TEST_LOCALE)
216                 .setTimeZone(TEST_TIME_ZONE)
217                 .setMainColor(TEST_MAIN_COLOR)
218                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
219                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
220                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
221                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
222                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
223                 .setWifiInfo(TEST_WIFI_INFO)
224                 .setAdminExtrasBundle(createTestAdminExtras())
225                 .build();
226 
227         // WHEN the ProvisioningParams is written to parcel and then read back.
228         Parcel parcel = Parcel.obtain();
229         expectedProvisioningParams.writeToParcel(parcel, 0);
230         parcel.setDataPosition(0);
231         ProvisioningParams actualProvisioningParams =
232                 ProvisioningParams.CREATOR.createFromParcel(parcel);
233 
234         // THEN the same ProvisioningParams is obtained.
235         assertEquals(expectedProvisioningParams, actualProvisioningParams);
236     }
237 }
238