• 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 import java.io.File;
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 boolean TEST_SKIP_USER_CONSENT = true;
54     private static final Account TEST_ACCOUNT_TO_MIGRATE =
55             new Account("user@gmail.com", "com.google");
56 
57     // Wifi info
58     private static final String TEST_SSID = "TestWifi";
59     private static final boolean TEST_HIDDEN = true;
60     private static final String TEST_SECURITY_TYPE = "WPA2";
61     private static final String TEST_PASSWORD = "GoogleRock";
62     private static final String TEST_PROXY_HOST = "testhost.com";
63     private static final int TEST_PROXY_PORT = 7689;
64     private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
65     private static final String TEST_PAC_URL = "pac.test.com";
66     private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder()
67             .setSsid(TEST_SSID)
68             .setHidden(TEST_HIDDEN)
69             .setSecurityType(TEST_SECURITY_TYPE)
70             .setPassword(TEST_PASSWORD)
71             .setProxyHost(TEST_PROXY_HOST)
72             .setProxyPort(TEST_PROXY_PORT)
73             .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
74             .setPacUrl(TEST_PAC_URL)
75             .build();
76 
77     // Device admin package download info
78     private static final String TEST_DOWNLOAD_LOCATION =
79             "http://example/dpc.apk";
80     private static final String TEST_COOKIE_HEADER =
81             "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT";
82     private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' };
83     private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' };
84     private static final int TEST_MIN_SUPPORT_VERSION = 17689;
85     private static final PackageDownloadInfo TEST_DOWNLOAD_INFO =
86             PackageDownloadInfo.Builder.builder()
87                     .setLocation(TEST_DOWNLOAD_LOCATION)
88                     .setCookieHeader(TEST_COOKIE_HEADER)
89                     .setPackageChecksum(TEST_PACKAGE_CHECKSUM)
90                     .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM)
91                     .setMinVersion(TEST_MIN_SUPPORT_VERSION)
92                     .build();
93 
94     @SmallTest
testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName()95     public void testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName() {
96         // WHEN the ProvisioningParams is constructed by with neither a package name nor a component
97         // name
98         try {
99             ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder()
100                     .setProvisioningAction(TEST_PROVISIONING_ACTION)
101                     .build();
102             fail("Package name or component name is mandatory.");
103         } catch (IllegalArgumentException e) {
104             // THEN the ProvisioningParams fails to construct.
105         }
106     }
107 
108     @SmallTest
testFailToConstructProvisioningParamsWithoutProvisioningAction()109     public void testFailToConstructProvisioningParamsWithoutProvisioningAction() {
110         // WHEN the ProvisioningParams is constructed by without a provisioning action.
111         try {
112             ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder()
113                     .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
114                     .build();
115             fail("Provisioning action is mandatory");
116         } catch (NullPointerException e) {
117             // THEN the ProvisioningParams fails to construct.
118         }
119     }
120 
121     @SmallTest
testEquals()122     public void testEquals() {
123         // GIVEN 2 ProvisioningParams objects created by the same set of parameters
124         ProvisioningParams provisioningParams1 = getCompleteProvisioningParams();
125         ProvisioningParams provisioningParams2 = getCompleteProvisioningParams();
126 
127         // WHEN these two objects compare.
128         // THEN they are the same.
129         assertEquals(provisioningParams1, provisioningParams2);
130     }
131 
132     @SmallTest
testNotEquals()133     public void testNotEquals() {
134         // GIVEN 2 ProvisioningParams objects created by different sets of parameters
135         ProvisioningParams provisioningParams1 = ProvisioningParams.Builder.builder()
136                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
137                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
138                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
139                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
140                 .setLocalTime(TEST_LOCAL_TIME)
141                 .setLocale(TEST_LOCALE)
142                 .setTimeZone(TEST_TIME_ZONE)
143                 .setMainColor(TEST_MAIN_COLOR)
144                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
145                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
146                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
147                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
148                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
149                 .setWifiInfo(TEST_WIFI_INFO)
150                 .setAdminExtrasBundle(createTestAdminExtras())
151                 .build();
152         ProvisioningParams provisioningParams2 = ProvisioningParams.Builder.builder()
153                 .setProvisioningAction("different.action")
154                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
155                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
156                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
157                 .setLocalTime(TEST_LOCAL_TIME)
158                 .setLocale(TEST_LOCALE)
159                 .setTimeZone(TEST_TIME_ZONE)
160                 .setMainColor(TEST_MAIN_COLOR)
161                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
162                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
163                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
164                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
165                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
166                 .setWifiInfo(TEST_WIFI_INFO)
167                 .setAdminExtrasBundle(createTestAdminExtras())
168                 .build();
169 
170         // WHEN these two objects compare.
171         // THEN they are not the same.
172         MoreAsserts.assertNotEqual(provisioningParams1, provisioningParams2);
173     }
174 
175     @SmallTest
testSaveAndRestoreComplete()176     public void testSaveAndRestoreComplete() throws Exception {
177         testSaveAndRestore(getCompleteProvisioningParams());
178     }
179 
180     // Testing with a minimum set of parameters to cover all null use cases.
181     @SmallTest
testSaveAndRestoreMinimalist()182     public void testSaveAndRestoreMinimalist() throws Exception {
183         testSaveAndRestore(ProvisioningParams.Builder.builder()
184                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
185                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
186                 .build());
187     }
188 
testSaveAndRestore(ProvisioningParams original)189     private void testSaveAndRestore(ProvisioningParams original) {
190         // GIVEN a ProvisioningParams object
191         // WHEN the ProvisioningParams is written to xml and then read back
192         File file = new File(mContext.getFilesDir(), "test_store.xml");
193         original.save(file);
194         ProvisioningParams copy = ProvisioningParams.load(file);
195         // THEN the same ProvisioningParams is obtained
196         assertEquals(original, copy);
197     }
198 
199     @SmallTest
testParceable()200     public void testParceable() {
201         // GIVEN a ProvisioningParams object.
202         ProvisioningParams expectedProvisioningParams = getCompleteProvisioningParams();
203 
204         // WHEN the ProvisioningParams is written to parcel and then read back.
205         Parcel parcel = Parcel.obtain();
206         expectedProvisioningParams.writeToParcel(parcel, 0);
207         parcel.setDataPosition(0);
208         ProvisioningParams actualProvisioningParams =
209                 ProvisioningParams.CREATOR.createFromParcel(parcel);
210 
211         // THEN the same ProvisioningParams is obtained.
212         assertEquals(expectedProvisioningParams, actualProvisioningParams);
213     }
214 
getCompleteProvisioningParams()215     private ProvisioningParams getCompleteProvisioningParams() {
216         return ProvisioningParams.Builder.builder()
217                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
218                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
219                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
220                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
221                 .setLocalTime(TEST_LOCAL_TIME)
222                 .setLocale(TEST_LOCALE)
223                 .setTimeZone(TEST_TIME_ZONE)
224                 .setMainColor(TEST_MAIN_COLOR)
225                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
226                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
227                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
228                 .setSkipUserSetup(TEST_SKIP_USER_SETUP)
229                 .setSkipUserConsent(TEST_SKIP_USER_CONSENT)
230                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
231                 .setWifiInfo(TEST_WIFI_INFO)
232                 .setAdminExtrasBundle(createTestAdminExtras())
233                 .build();
234     }
235 }
236