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.parser; 17 18 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE; 19 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE; 20 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_USER; 21 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; 22 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_SHAREABLE_DEVICE; 23 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE; 24 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE; 25 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME; 26 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE; 27 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM; 28 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER; 29 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION; 30 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME; 31 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM; 32 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED; 33 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCALE; 34 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCAL_TIME; 35 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR; 36 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_ENCRYPTION; 37 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TIME_ZONE; 38 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_HIDDEN; 39 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PAC_URL; 40 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PASSWORD; 41 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_BYPASS; 42 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_HOST; 43 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_PORT; 44 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SECURITY_TYPE; 45 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SSID; 46 import static android.nfc.NfcAdapter.ACTION_NDEF_DISCOVERED; 47 import static com.android.managedprovisioning.TestUtils.createTestAdminExtras; 48 import static com.android.managedprovisioning.parser.MessageParser.EXTRA_PROVISIONING_ACTION; 49 import static com.android.managedprovisioning.parser.MessageParser.EXTRA_PROVISIONING_DEVICE_ADMIN_SUPPORT_SHA1_PACKAGE_CHECKSUM; 50 import static com.android.managedprovisioning.parser.MessageParser.EXTRA_PROVISIONING_STARTED_BY_TRUSTED_SOURCE; 51 import static org.mockito.Mockito.doReturn; 52 import static org.mockito.Mockito.spy; 53 54 import android.accounts.Account; 55 import android.app.admin.DevicePolicyManager; 56 import android.content.ComponentName; 57 import android.content.Context; 58 import android.content.Intent; 59 import android.os.Bundle; 60 import android.os.PersistableBundle; 61 import android.test.AndroidTestCase; 62 import android.test.suitebuilder.annotation.SmallTest; 63 import android.util.Base64; 64 65 import com.android.managedprovisioning.common.Globals; 66 import com.android.managedprovisioning.common.IllegalProvisioningArgumentException; 67 import com.android.managedprovisioning.common.Utils; 68 import com.android.managedprovisioning.model.PackageDownloadInfo; 69 import com.android.managedprovisioning.model.ProvisioningParams; 70 import com.android.managedprovisioning.model.WifiInfo; 71 72 import org.mockito.Mock; 73 import org.mockito.MockitoAnnotations; 74 75 import java.util.Locale; 76 77 /** Tests for {@link ExtrasProvisioningDataParser}. */ 78 @SmallTest 79 public class ExtrasProvisioningDataParserTest extends AndroidTestCase { 80 private static final String TEST_PACKAGE_NAME = "com.afwsamples.testdpc"; 81 private static final ComponentName TEST_COMPONENT_NAME = 82 ComponentName.unflattenFromString( 83 "com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver"); 84 private static final long TEST_LOCAL_TIME = 1456939524713L; 85 private static final Locale TEST_LOCALE = Locale.UK; 86 private static final String TEST_TIME_ZONE = "GMT"; 87 private static final Integer TEST_MAIN_COLOR = 65280; 88 private static final boolean TEST_STARTED_BY_TRUSTED_SOURCE = true; 89 private static final boolean TEST_LEAVE_ALL_SYSTEM_APP_ENABLED = true; 90 private static final boolean TEST_SKIP_ENCRYPTION = true; 91 private static final boolean TEST_SKIP_USER_SETUP = true; 92 private static final Account TEST_ACCOUNT_TO_MIGRATE = 93 new Account("user (at) gmail.com", "com.google"); 94 95 // Wifi info 96 private static final String TEST_SSID = "TestWifi"; 97 private static final boolean TEST_HIDDEN = true; 98 private static final String TEST_SECURITY_TYPE = "WPA2"; 99 private static final String TEST_PASSWORD = "GoogleRock"; 100 private static final String TEST_PROXY_HOST = "testhost.com"; 101 private static final int TEST_PROXY_PORT = 7689; 102 private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com"; 103 private static final String TEST_PAC_URL = "pac.test.com"; 104 private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder() 105 .setSsid(TEST_SSID) 106 .setHidden(TEST_HIDDEN) 107 .setSecurityType(TEST_SECURITY_TYPE) 108 .setPassword(TEST_PASSWORD) 109 .setProxyHost(TEST_PROXY_HOST) 110 .setProxyPort(TEST_PROXY_PORT) 111 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS) 112 .setPacUrl(TEST_PAC_URL) 113 .build(); 114 115 // Device admin package download info 116 private static final String TEST_DOWNLOAD_LOCATION = 117 "http://example/dpc.apk"; 118 private static final String TEST_COOKIE_HEADER = 119 "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT"; 120 private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' }; 121 private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' }; 122 private static final int TEST_MIN_SUPPORT_VERSION = 17689; 123 private static final PackageDownloadInfo TEST_DOWNLOAD_INFO = 124 PackageDownloadInfo.Builder.builder() 125 .setLocation(TEST_DOWNLOAD_LOCATION) 126 .setCookieHeader(TEST_COOKIE_HEADER) 127 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 128 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 129 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 130 .build(); 131 @Mock 132 private Context mContext; 133 134 private ExtrasProvisioningDataParser mExtrasProvisioningDataParser; 135 136 private Utils mUtils; 137 138 @Override 139 public void setUp() { 140 // this is necessary for mockito to work 141 System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString()); 142 143 MockitoAnnotations.initMocks(this); 144 145 mExtrasProvisioningDataParser = new ExtrasProvisioningDataParser(mUtils = spy(new Utils())); 146 } 147 148 public void testParse_trustedSourceProvisioningIntent() throws Exception { 149 // GIVEN a ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE intent and other extras. 150 Intent intent = new Intent(ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE) 151 // GIVEN a device admin package name and component name 152 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 153 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 154 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 155 .putExtras(getTestWifiInfoExtras()) 156 .putExtras(getTestDeviceAdminDownloadExtras()) 157 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 158 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 159 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 160 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE); 161 162 // WHEN the intent is parsed by the parser. 163 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 164 165 // THEN ProvisionParams is constructed as expected. 166 assertEquals( 167 ProvisioningParams.Builder.builder() 168 // THEN ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE is translated to 169 // ACTION_PROVISION_MANAGED_DEVICE 170 .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE) 171 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 172 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO) 173 .setLocalTime(TEST_LOCAL_TIME) 174 .setLocale(TEST_LOCALE) 175 .setTimeZone(TEST_TIME_ZONE) 176 // THEN customizable color is not supported. 177 .setMainColor(ProvisioningParams.DEFAULT_MAIN_COLOR) 178 // THEN the trusted source is set to true. 179 .setStartedByTrustedSource(true) 180 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 181 .setWifiInfo(TEST_WIFI_INFO) 182 .setAdminExtrasBundle(createTestAdminExtras()) 183 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 184 .build(), 185 params); 186 } 187 188 public void testParse_resumeProvisioningIntent() throws Exception { 189 // GIVEN a resume provisioning intent which stores a device provisioning intent and other 190 // extras. 191 Intent intent = new Intent(Globals.ACTION_RESUME_PROVISIONING) 192 .putExtra(EXTRA_PROVISIONING_ACTION, ACTION_PROVISION_MANAGED_DEVICE) 193 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 194 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 195 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 196 .putExtras(getTestWifiInfoExtras()) 197 .putExtras(getTestDeviceAdminDownloadExtras()) 198 // GIVEN the package checksum support sha1 is set to true. 199 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_SUPPORT_SHA1_PACKAGE_CHECKSUM, true) 200 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 201 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 202 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 203 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE) 204 // GIVEN this original provisioning intent was started by a trusted source. 205 .putExtra(EXTRA_PROVISIONING_STARTED_BY_TRUSTED_SOURCE, true); 206 207 // WHEN the intent is parsed by the parser. 208 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 209 210 // THEN ProvisionParams is constructed as expected. 211 assertEquals( 212 ProvisioningParams.Builder.builder() 213 // THEN provisioning action is restored to ACTION_PROVISION_MANAGED_DEVICE 214 .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE) 215 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 216 // THEN device admin package name is supported for resume intents 217 .setDeviceAdminPackageName(TEST_PACKAGE_NAME) 218 .setDeviceAdminDownloadInfo( 219 PackageDownloadInfo.Builder.builder() 220 .setLocation(TEST_DOWNLOAD_LOCATION) 221 .setCookieHeader(TEST_COOKIE_HEADER) 222 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 223 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 224 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 225 // THEN the package checksum support sha1 is set to true. 226 .setPackageChecksumSupportsSha1(true) 227 .build()) 228 .setLocalTime(TEST_LOCAL_TIME) 229 .setLocale(TEST_LOCALE) 230 .setTimeZone(TEST_TIME_ZONE) 231 .setMainColor(TEST_MAIN_COLOR) 232 // THEN the trusted source is set to true. 233 .setStartedByTrustedSource(true) 234 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 235 .setWifiInfo(TEST_WIFI_INFO) 236 .setAdminExtrasBundle(createTestAdminExtras()) 237 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 238 .build(), 239 params); 240 } 241 242 public void testParse_managedProfileIntent() throws Exception { 243 // GIVEN a managed profile provisioning intent and other extras. 244 Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE) 245 // GIVEN a device admin package name and component name 246 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 247 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 248 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 249 .putExtras(getTestWifiInfoExtras()) 250 .putExtras(getTestDeviceAdminDownloadExtras()) 251 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 252 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 253 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 254 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE); 255 256 // GIVEN the device admin is installed. 257 doReturn(TEST_COMPONENT_NAME) 258 .when(mUtils) 259 .findDeviceAdmin(TEST_PACKAGE_NAME, TEST_COMPONENT_NAME, mContext); 260 261 // WHEN the intent is parsed by the parser. 262 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 263 264 // THEN ProvisionParams is constructed as expected. 265 assertEquals( 266 ProvisioningParams.Builder.builder() 267 // THEN provisioning action is ACTION_PROVISION_MANAGED_PROFILE 268 .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE) 269 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 270 // THEN device admin package name is not supported. 271 .setDeviceAdminPackageName(null) 272 // THEN device admin download info is not supported. 273 .setDeviceAdminDownloadInfo(null) 274 // THEN wifi info is not supported. 275 .setWifiInfo(null) 276 .setMainColor(TEST_MAIN_COLOR) 277 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 278 .setAdminExtrasBundle(createTestAdminExtras()) 279 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 280 .build(), 281 params); 282 } 283 284 public void testParse_managedUserIntent() throws Exception { 285 // GIVEN a managed user provisioning intent and other extras. 286 Intent intent = new Intent(ACTION_PROVISION_MANAGED_USER) 287 // GIVEN a device admin package name and component name 288 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 289 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 290 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 291 .putExtras(getTestWifiInfoExtras()) 292 .putExtras(getTestDeviceAdminDownloadExtras()) 293 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 294 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 295 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 296 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE); 297 298 // WHEN the intent is parsed by the parser. 299 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 300 301 // THEN ProvisionParams is constructed as expected. 302 assertEquals( 303 ProvisioningParams.Builder.builder() 304 // THEN provisioning action is ACTION_PROVISION_MANAGED_USER 305 .setProvisioningAction(ACTION_PROVISION_MANAGED_USER) 306 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 307 // THEN device admin package name is not supported in Managed User 308 // provisioning. 309 .setDeviceAdminPackageName(null) 310 // THEN device admin download info is not supported. 311 .setDeviceAdminDownloadInfo(null) 312 // THEN wifi info is not supported. 313 .setWifiInfo(null) 314 .setMainColor(TEST_MAIN_COLOR) 315 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 316 .setAdminExtrasBundle(createTestAdminExtras()) 317 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 318 .build(), 319 params); 320 } 321 322 public void testParse_managedDeviceIntent() throws Exception { 323 // GIVEN a managed device provisioning intent and other extras. 324 Intent intent = new Intent(ACTION_PROVISION_MANAGED_DEVICE) 325 // GIVEN a device admin package name and component name 326 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 327 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 328 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 329 .putExtras(getTestWifiInfoExtras()) 330 .putExtras(getTestDeviceAdminDownloadExtras()) 331 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 332 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 333 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 334 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE); 335 336 // WHEN the intent is parsed by the parser. 337 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 338 339 // THEN ProvisionParams is constructed as expected. 340 assertEquals( 341 ProvisioningParams.Builder.builder() 342 // THEN provisioning action is ACTION_PROVISION_MANAGED_DEVICE 343 .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE) 344 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 345 // THEN device admin package name is not supported in Device Owner 346 // provisioning. 347 .setDeviceAdminPackageName(null) 348 // THEN Device Admin download info is not supported. 349 .setDeviceAdminDownloadInfo(null) 350 // THEN time, time zone and locale are not supported. 351 .setMainColor(TEST_MAIN_COLOR) 352 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 353 // THEN wifi configuration is not supported. 354 .setWifiInfo(null) 355 .setAdminExtrasBundle(createTestAdminExtras()) 356 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 357 .build(), 358 params); 359 } 360 361 public void testParse_managedSharableDeviceIntent() throws Exception { 362 // GIVEN a managed device provisioning intent and other extras. 363 Intent intent = new Intent(ACTION_PROVISION_MANAGED_SHAREABLE_DEVICE) 364 // GIVEN a device admin package name and component name 365 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 366 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 367 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 368 .putExtras(getTestWifiInfoExtras()) 369 .putExtras(getTestDeviceAdminDownloadExtras()) 370 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 371 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 372 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 373 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE); 374 375 // WHEN the intent is parsed by the parser. 376 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 377 378 // THEN ProvisionParams is constructed as expected. 379 assertEquals( 380 ProvisioningParams.Builder.builder() 381 // THEN provisioning action is ACTION_PROVISION_MANAGED_SHAREABLE_DEVICE 382 .setProvisioningAction(ACTION_PROVISION_MANAGED_SHAREABLE_DEVICE) 383 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 384 // THEN device admin package name is not supported in Device Owner 385 // provisioning. 386 .setDeviceAdminPackageName(null) 387 // THEN Device Admin download info is not supported. 388 .setDeviceAdminDownloadInfo(null) 389 // THEN time, time zone and locale are not supported. 390 .setMainColor(TEST_MAIN_COLOR) 391 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 392 // THEN wifi configuration is not supported. 393 .setWifiInfo(null) 394 .setAdminExtrasBundle(createTestAdminExtras()) 395 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 396 .build(), 397 params); 398 } 399 400 public void testParse_nfcProvisioningIntentThrowsException() { 401 // GIVEN a NFC provisioning intent and other extras. 402 Intent intent = new Intent(ACTION_NDEF_DISCOVERED) 403 // GIVEN a device admin package name and component name 404 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME) 405 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME) 406 .putExtras(getTestTimeTimeZoneAndLocaleExtras()) 407 .putExtras(getTestWifiInfoExtras()) 408 .putExtras(getTestDeviceAdminDownloadExtras()) 409 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras()) 410 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION) 411 .putExtra(EXTRA_PROVISIONING_MAIN_COLOR, TEST_MAIN_COLOR) 412 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE); 413 414 try { 415 // WHEN the intent is parsed by the parser. 416 ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent, mContext); 417 fail("ExtrasProvisioningDataParser doesn't support NFC intent. " 418 + "IllegalProvisioningArgumentException should be thrown"); 419 } catch (IllegalProvisioningArgumentException e) { 420 // THEN IllegalProvisioningArgumentException is thrown. 421 } 422 } 423 424 private static Bundle getTestWifiInfoExtras() { 425 Bundle wifiInfoExtras = new Bundle(); 426 wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SSID, TEST_SSID); 427 wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, TEST_SECURITY_TYPE); 428 wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PASSWORD, TEST_PASSWORD); 429 wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST, TEST_PROXY_HOST); 430 wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, TEST_PROXY_BYPASS_HOSTS); 431 wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PAC_URL, TEST_PAC_URL); 432 wifiInfoExtras.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, TEST_PROXY_PORT); 433 wifiInfoExtras.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, TEST_HIDDEN); 434 return wifiInfoExtras; 435 } 436 437 private static Bundle getTestTimeTimeZoneAndLocaleExtras() { 438 Bundle timeTimezoneAndLocaleExtras = new Bundle(); 439 timeTimezoneAndLocaleExtras.putLong(EXTRA_PROVISIONING_LOCAL_TIME, TEST_LOCAL_TIME); 440 timeTimezoneAndLocaleExtras.putString(EXTRA_PROVISIONING_TIME_ZONE, TEST_TIME_ZONE); 441 timeTimezoneAndLocaleExtras.putString( 442 EXTRA_PROVISIONING_LOCALE, MessageParser.localeToString(TEST_LOCALE)); 443 return timeTimezoneAndLocaleExtras; 444 } 445 446 private static Bundle getTestDeviceAdminDownloadExtras() { 447 Bundle downloadInfoExtras = new Bundle(); 448 downloadInfoExtras.putInt( 449 EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE, TEST_MIN_SUPPORT_VERSION); 450 downloadInfoExtras.putString( 451 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, TEST_DOWNLOAD_LOCATION); 452 downloadInfoExtras.putString( 453 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER, TEST_COOKIE_HEADER); 454 downloadInfoExtras.putString( 455 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM, 456 Base64.encodeToString(TEST_PACKAGE_CHECKSUM, 457 Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP)); 458 downloadInfoExtras.putString( 459 EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM, 460 Base64.encodeToString(TEST_SIGNATURE_CHECKSUM, 461 Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP)); 462 return downloadInfoExtras; 463 } 464 } 465