• 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.parser;
17 
18 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_FINANCED_DEVICE;
19 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE;
20 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE;
21 import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
22 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE;
23 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE;
24 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
25 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE;
26 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM;
27 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER;
28 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION;
29 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME;
30 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM;
31 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DISCLAIMERS;
32 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DISCLAIMER_CONTENT;
33 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DISCLAIMER_HEADER;
34 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION;
35 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED;
36 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCALE;
37 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOCAL_TIME;
38 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI;
39 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ORGANIZATION_NAME;
40 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE;
41 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_COOKIE_HEADER;
42 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_LOCATION;
43 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT;
44 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS;
45 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_ENCRYPTION;
46 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER;
47 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SUPPORTED_MODES;
48 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_SUPPORT_URL;
49 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TIME_ZONE;
50 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TRIGGER;
51 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_USE_MOBILE_DATA;
52 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY;
53 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE;
54 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_DOMAIN;
55 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_EAP_METHOD;
56 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_HIDDEN;
57 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_IDENTITY;
58 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PAC_URL;
59 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PASSWORD;
60 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PHASE2_AUTH;
61 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_BYPASS;
62 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_HOST;
63 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_PROXY_PORT;
64 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SECURITY_TYPE;
65 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_SSID;
66 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE;
67 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_DEVICE_OWNER;
68 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED;
69 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_PERSONALLY_OWNED;
70 import static android.app.admin.DevicePolicyManager.PROVISIONING_MODE_FULLY_MANAGED_DEVICE;
71 import static android.app.admin.DevicePolicyManager.PROVISIONING_MODE_MANAGED_PROFILE;
72 import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_MANAGED_ACCOUNT;
73 import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_QR_CODE;
74 import static android.content.pm.PackageManager.FEATURE_MANAGED_USERS;
75 import static android.nfc.NfcAdapter.ACTION_NDEF_DISCOVERED;
76 
77 import static com.android.managedprovisioning.TestUtils.createTestAdminExtras;
78 import static com.android.managedprovisioning.model.ProvisioningParams.DEFAULT_EXTRA_PROVISIONING_SUPPORTED_MODES;
79 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE_SHORT;
80 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE_SHORT;
81 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME_SHORT;
82 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE_SHORT;
83 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM_SHORT;
84 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER_SHORT;
85 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION_SHORT;
86 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME_SHORT;
87 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM_SHORT;
88 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DISCLAIMERS_SHORT;
89 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DISCLAIMER_CONTENT_SHORT;
90 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_DISCLAIMER_HEADER_SHORT;
91 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION_SHORT;
92 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED_SHORT;
93 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_LOCALE_SHORT;
94 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_LOCAL_TIME_SHORT;
95 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_ORGANIZATION_NAME_SHORT;
96 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT_SHORT;
97 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_SKIP_ENCRYPTION_SHORT;
98 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_SUPPORT_URL_SHORT;
99 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_TIME_ZONE_SHORT;
100 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_USE_MOBILE_DATA_SHORT;
101 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY_SHORT;
102 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE_SHORT;
103 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_DOMAIN_SHORT;
104 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_EAP_METHOD_SHORT;
105 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_HIDDEN_SHORT;
106 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_IDENTITY_SHORT;
107 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_PAC_URL_SHORT;
108 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_PASSWORD_SHORT;
109 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_PHASE2_AUTH_SHORT;
110 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_PROXY_BYPASS_SHORT;
111 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_PROXY_HOST_SHORT;
112 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_PROXY_PORT_SHORT;
113 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_SECURITY_TYPE_SHORT;
114 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_SSID_SHORT;
115 import static com.android.managedprovisioning.parser.ExtrasProvisioningDataParser.EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE_SHORT;
116 
117 import static com.google.common.truth.Truth.assertThat;
118 
119 import static org.mockito.ArgumentMatchers.eq;
120 import static org.mockito.Mockito.doReturn;
121 import static org.mockito.Mockito.spy;
122 import static org.mockito.Mockito.when;
123 import static org.testng.Assert.assertThrows;
124 
125 import android.accounts.Account;
126 import android.app.admin.DevicePolicyManager;
127 import android.content.ComponentName;
128 import android.content.Context;
129 import android.content.Intent;
130 import android.content.pm.PackageManager;
131 import android.net.Uri;
132 import android.os.Bundle;
133 import android.os.Parcelable;
134 import android.os.UserHandle;
135 import android.test.AndroidTestCase;
136 import android.test.suitebuilder.annotation.SmallTest;
137 import android.util.Base64;
138 
139 import com.android.managedprovisioning.common.Globals;
140 import com.android.managedprovisioning.common.IllegalProvisioningArgumentException;
141 import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences;
142 import com.android.managedprovisioning.common.SettingsFacade;
143 import com.android.managedprovisioning.common.StoreUtils;
144 import com.android.managedprovisioning.common.Utils;
145 import com.android.managedprovisioning.model.PackageDownloadInfo;
146 import com.android.managedprovisioning.model.ProvisioningParams;
147 import com.android.managedprovisioning.model.WifiInfo;
148 
149 import org.mockito.Mock;
150 import org.mockito.MockitoAnnotations;
151 
152 import java.lang.reflect.Field;
153 import java.util.ArrayList;
154 import java.util.Arrays;
155 import java.util.List;
156 import java.util.Locale;
157 import java.util.stream.Stream;
158 
159 /** Tests for {@link ExtrasProvisioningDataParser}. */
160 @SmallTest
161 public class ExtrasProvisioningDataParserTest extends AndroidTestCase {
162     private static final String TEST_PACKAGE_NAME = "com.afwsamples.testdpc";
163     private static final ComponentName TEST_COMPONENT_NAME =
164             ComponentName.unflattenFromString(
165                     "com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver");
166     private static final ComponentName TEST_COMPONENT_NAME_2 =
167             ComponentName.unflattenFromString(
168                     "com.afwsamples.testdpc2/com.afwsamples.testdpc.DeviceAdminReceiver");
169     private static final long TEST_LOCAL_TIME = 1456939524713L;
170     private static final Locale TEST_LOCALE = Locale.UK;
171     private static final String TEST_TIME_ZONE = "GMT";
172     private static final boolean TEST_LEAVE_ALL_SYSTEM_APP_ENABLED = true;
173     private static final boolean TEST_SKIP_ENCRYPTION = true;
174     private static final boolean TEST_KEEP_ACCOUNT_MIGRATED = true;
175     private static final long TEST_PROVISIONING_ID = 1000L;
176     private static final Account TEST_ACCOUNT_TO_MIGRATE =
177             new Account("user@gmail.com", "com.google");
178     private static final String TEST_ORGANIZATION_NAME = "TestOrganizationName";
179     private static final String TEST_SUPPORT_URL = "https://www.support.url/";
180     private static final String TEST_ILL_FORMED_LOCALE = "aaa_";
181 
182     // Wifi info
183     private static final String TEST_SSID = "\"TestWifi\"";
184     private static final boolean TEST_HIDDEN = true;
185     private static final String TEST_SECURITY_TYPE = "WPA2";
186     private static final String TEST_SECURITY_TYPE_EAP = "EAP";
187     private static final String TEST_PASSWORD = "GoogleRock";
188     private static final String TEST_PROXY_HOST = "testhost.com";
189     private static final int TEST_PROXY_PORT = 7689;
190     private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
191     private static final String TEST_PAC_URL = "pac.test.com";
192     private static final String TEST_EAP_METHOD = "TTLS";
193     private static final String TEST_PHASE2_AUTH = "PAP";
194     private static final String TEST_CA_CERT = "certificate";
195     private static final String TEST_USER_CERT = "certificate";
196     private static final String TEST_IDENTITY = "TestUser";
197     private static final String TEST_ANONYMOUS_IDENTITY = "TestAUser";
198     private static final String TEST_DOMAIN = "google.com";
199     private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder()
200             .setSsid(TEST_SSID)
201             .setHidden(TEST_HIDDEN)
202             .setSecurityType(TEST_SECURITY_TYPE)
203             .setPassword(TEST_PASSWORD)
204             .setProxyHost(TEST_PROXY_HOST)
205             .setProxyPort(TEST_PROXY_PORT)
206             .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
207             .setPacUrl(TEST_PAC_URL)
208             .build();
209 
210     // Device admin package download info
211     private static final String TEST_DOWNLOAD_LOCATION =
212             "http://example/dpc.apk";
213     private static final String TEST_COOKIE_HEADER =
214             "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT";
215     private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' };
216     private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' };
217     private static final String TEST_SIGNATURE_CHECKSUM_STRING = buildTestSignatureChecksum();
218     private static final int TEST_MIN_SUPPORT_VERSION = 17689;
219     private static final PackageDownloadInfo TEST_DOWNLOAD_INFO =
220             PackageDownloadInfo.Builder.builder()
221                     .setLocation(TEST_DOWNLOAD_LOCATION)
222                     .setCookieHeader(TEST_COOKIE_HEADER)
223                     .setPackageChecksum(TEST_PACKAGE_CHECKSUM)
224                     .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM)
225                     .setMinVersion(TEST_MIN_SUPPORT_VERSION)
226                     .build();
227     private static final boolean TEST_USE_MOBILE_DATA = true;
228     private static final Uri TEST_URI = Uri.parse("https://www.google.com/");
229     private static final String TEST_DISCLAMER_HEADER = "Google";
230     private static final int INVALID_SUPPORTED_MODES = 123;
231 
232     @Mock
233     private Context mContext;
234 
235     @Mock
236     private DevicePolicyManager mDpm;
237 
238     @Mock
239     private ManagedProvisioningSharedPreferences mSharedPreferences;
240 
241     @Mock
242     private SettingsFacade mSettingsFacade;
243 
244     @Mock
245     private PackageManager mPackageManager;
246 
247     private ExtrasProvisioningDataParser mExtrasProvisioningDataParser;
248 
249     private Utils mUtils;
250 
251     @Override
setUp()252     public void setUp() {
253         // this is necessary for mockito to work
254         System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString());
255 
256         MockitoAnnotations.initMocks(this);
257         when(mContext.getSystemServiceName(DevicePolicyManager.class))
258                 .thenReturn(Context.DEVICE_POLICY_SERVICE);
259         when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE)).thenReturn(mDpm);
260         when(mContext.getContentResolver()).thenReturn(getContext().getContentResolver());
261         when(mContext.getFilesDir()).thenReturn(getContext().getFilesDir());
262         when(mSharedPreferences.incrementAndGetProvisioningId()).thenReturn(TEST_PROVISIONING_ID);
263         when(mPackageManager.hasSystemFeature(eq(FEATURE_MANAGED_USERS))).thenReturn(true);
264         when(mContext.getPackageManager()).thenReturn(mPackageManager);
265         mUtils = spy(new Utils());
266         mExtrasProvisioningDataParser = new ExtrasProvisioningDataParser(mContext, mUtils,
267                 new ParserUtils(), mSettingsFacade, mSharedPreferences);
268     }
269 
testParse_trustedSourceProvisioningIntent()270     public void testParse_trustedSourceProvisioningIntent() throws Exception {
271         // GIVEN parsing happens during the setup wizard
272         when(mSettingsFacade.isDuringSetupWizard(mContext)).thenReturn(true);
273         // GIVEN a ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE intent and other extras.
274         Intent intent = new Intent(ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE)
275                 // GIVEN a device admin package name and component name
276                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
277                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
278                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
279                 .putExtras(getTestWifiInfoExtras())
280                 .putExtras(getTestDeviceAdminDownloadExtras())
281                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
282                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
283                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED)
284                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
285                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
286                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE)
287                 .putExtra(EXTRA_PROVISIONING_ORGANIZATION_NAME, TEST_ORGANIZATION_NAME)
288                 .putExtra(EXTRA_PROVISIONING_SUPPORT_URL, TEST_SUPPORT_URL);
289 
290         // WHEN the intent is parsed by the parser.
291         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
292 
293         // THEN ProvisionParams is constructed as expected.
294         assertThat(
295                 ProvisioningParams.Builder.builder()
296                         // THEN ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE is translated to
297                         // ACTION_PROVISION_MANAGED_DEVICE
298                         .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE)
299                         .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
300                         .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
301                         .setProvisioningId(TEST_PROVISIONING_ID)
302                         .setLocalTime(TEST_LOCAL_TIME)
303                         .setLocale(TEST_LOCALE)
304                         .setTimeZone(TEST_TIME_ZONE)
305                         // THEN the trusted source is set to true.
306                         .setStartedByTrustedSource(true)
307                         .setSkipEncryption(TEST_SKIP_ENCRYPTION)
308                         // THEN keep account migrated flag is ignored
309                         .setKeepAccountMigrated(false)
310                         .setLeaveAllSystemAppsEnabled(true)
311                         .setWifiInfo(TEST_WIFI_INFO)
312                         .setAdminExtrasBundle(createTestAdminExtras())
313                         .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
314                         .setOrganizationName(TEST_ORGANIZATION_NAME)
315                         .setSupportUrl(TEST_SUPPORT_URL)
316                         .setInitiatorRequestedProvisioningModes(
317                                 FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED)
318                         .setAllowedProvisioningModes(new ArrayList<>(List.of(
319                                 PROVISIONING_MODE_MANAGED_PROFILE,
320                                 PROVISIONING_MODE_FULLY_MANAGED_DEVICE
321                         )))
322                         .setReturnBeforePolicyCompliance(true)
323                         .build())
324                 .isEqualTo(params);
325     }
326 
testParse_financedDeviceProvisioningIntent()327     public void testParse_financedDeviceProvisioningIntent() throws Exception {
328         // GIVEN a ACTION_PROVISION_FINANCED_DEVICE intent and other extras.
329         Intent intent = new Intent(ACTION_PROVISION_FINANCED_DEVICE)
330                 // GIVEN a device admin package name and component name
331                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
332                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
333                 .putExtras(getTestDeviceAdminDownloadExtras())
334                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
335                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED)
336                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
337                     TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
338                 .putExtra(EXTRA_PROVISIONING_ORGANIZATION_NAME, TEST_ORGANIZATION_NAME)
339                 .putExtra(EXTRA_PROVISIONING_SUPPORT_URL, TEST_SUPPORT_URL);
340 
341         // WHEN the intent is parsed by the parser.
342         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
343 
344         // THEN ProvisionParams is constructed as expected.
345         assertThat(
346                 ProvisioningParams.Builder.builder()
347                         .setProvisioningAction(ACTION_PROVISION_FINANCED_DEVICE)
348                         .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
349                         .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
350                         .setProvisioningId(TEST_PROVISIONING_ID)
351                         // THEN keep account migrated flag is ignored
352                         .setKeepAccountMigrated(false)
353                         // THEN leave all system apps is always true
354                         .setLeaveAllSystemAppsEnabled(true)
355                         .setAdminExtrasBundle(createTestAdminExtras())
356                         .setOrganizationName(TEST_ORGANIZATION_NAME)
357                         .setSupportUrl(TEST_SUPPORT_URL)
358                         .setReturnBeforePolicyCompliance(true)
359                         .build())
360                 .isEqualTo(params);
361     }
362 
testParse_resumeProvisioningIntent()363     public void testParse_resumeProvisioningIntent() throws Exception {
364         // GIVEN a ProvisioningParams stored in an intent
365         ProvisioningParams expected = ProvisioningParams.Builder.builder()
366                 .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE)
367                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
368                 .build();
369         Intent intent = new Intent(Globals.ACTION_RESUME_PROVISIONING)
370                 .putExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS, expected);
371         // WHEN the intent is parsed by the parser
372         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
373         // THEN we get back the original ProvisioningParams.
374         assertThat(expected).isEqualTo(params);
375     }
376 
testParse_managedProfileIntent()377     public void testParse_managedProfileIntent() throws Exception {
378         // GIVEN a managed profile provisioning intent and other extras.
379         Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE)
380                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
381                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
382                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
383                 .putExtras(getTestWifiInfoExtras())
384                 .putExtras(getTestDeviceAdminDownloadExtras())
385                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
386                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
387                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED)
388                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
389                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
390                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE);
391 
392         // GIVEN the device admin is installed.
393         mockInstalledDeviceAdminForTestPackageName();
394 
395         // WHEN the intent is parsed by the parser.
396         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
397 
398         // THEN ProvisionParams is constructed as expected.
399         assertThat(
400                 ProvisioningParams.Builder.builder()
401                         // THEN provisioning action is ACTION_PROVISION_MANAGED_PROFILE
402                         .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
403                         .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
404                         .setProvisioningId(TEST_PROVISIONING_ID)
405                         // THEN device admin package name is not supported.
406                         .setDeviceAdminPackageName(null)
407                         // THEN device admin download info is not supported.
408                         .setDeviceAdminDownloadInfo(null)
409                         // THEN wifi info is not supported.
410                         .setWifiInfo(null)
411                         .setSkipEncryption(TEST_SKIP_ENCRYPTION)
412                         // THEN leave all system apps flag is ignored
413                         .setLeaveAllSystemAppsEnabled(false)
414                         .setKeepAccountMigrated(TEST_KEEP_ACCOUNT_MIGRATED)
415                         .setAdminExtrasBundle(createTestAdminExtras())
416                         .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
417                         .build())
418                 .isEqualTo(params);
419     }
420 
testParse_managedProfileIntent_CompProvisioning()421     public void testParse_managedProfileIntent_CompProvisioning() throws Exception {
422         // GIVEN a managed profile provisioning intent and other extras.
423         Intent intent = buildTestManagedProfileIntent();
424 
425         // GIVEN the device admin is installed.
426         mockInstalledDeviceAdminForTestPackageName();
427 
428         // GIVEN the device admin is also device owner in primary user.
429         when(mDpm.getDeviceOwnerComponentOnCallingUser()).thenReturn(TEST_COMPONENT_NAME);
430 
431         // WHEN the intent is parsed by the parser.
432         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
433 
434         // THEN ProvisionParams is constructed as expected.
435         assertThat(
436                 ProvisioningParams.Builder.builder()
437                         // THEN provisioning action is ACTION_PROVISION_MANAGED_PROFILE
438                         .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
439                         .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
440                         .setProvisioningId(TEST_PROVISIONING_ID)
441                         // THEN device admin package name is not supported.
442                         .setDeviceAdminPackageName(null)
443                         // THEN device admin download info is not supported.
444                         .setDeviceAdminDownloadInfo(null)
445                         // THEN wifi info is not supported.
446                         .setWifiInfo(null)
447                         .setSkipEncryption(TEST_SKIP_ENCRYPTION)
448                         .setKeepAccountMigrated(TEST_KEEP_ACCOUNT_MIGRATED)
449                         .setAdminExtrasBundle(createTestAdminExtras())
450                         .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
451                         .build())
452                 .isEqualTo(params);
453     }
454 
testParse_managedProfileIntent_DeviceOwnerWithByodProvisioning()455     public void testParse_managedProfileIntent_DeviceOwnerWithByodProvisioning() throws Exception {
456         // GIVEN a managed profile provisioning intent and other extras.
457         Intent intent = new Intent(ACTION_PROVISION_MANAGED_PROFILE)
458                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
459                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED);
460 
461         // GIVEN the device admin is installed.
462         mockInstalledDeviceAdminForNullPackageName();
463 
464         // GIVEN a different device admin is a device owner in primary user.
465         when(mDpm.getDeviceOwnerComponentOnCallingUser()).thenReturn(TEST_COMPONENT_NAME_2);
466 
467         // WHEN the intent is parsed by the parser.
468         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
469 
470         // THEN ProvisionParams is constructed as expected.
471         assertThat(
472                 ProvisioningParams.Builder.builder()
473                         .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE)
474                         .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
475                         .setProvisioningId(TEST_PROVISIONING_ID)
476                         .setKeepAccountMigrated(TEST_KEEP_ACCOUNT_MIGRATED)
477                         .build())
478                 .isEqualTo(params);
479     }
480 
testParse_shortExtras_sameAsLongExtras()481     public void testParse_shortExtras_sameAsLongExtras() throws Exception {
482         assertThat(mExtrasProvisioningDataParser.parse(buildIntentWithAllLongExtras()))
483             .isEqualTo(mExtrasProvisioningDataParser.parse(buildIntentWithAllShortExtras()));
484     }
485 
testParse_managedDeviceIntent()486     public void testParse_managedDeviceIntent() throws Exception {
487         // GIVEN a managed device provisioning intent and other extras.
488         Intent intent = new Intent(ACTION_PROVISION_MANAGED_DEVICE)
489                 // GIVEN a device admin package name and component name
490                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
491                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
492                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
493                 .putExtras(getTestWifiInfoExtras())
494                 .putExtras(getTestDeviceAdminDownloadExtras())
495                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
496                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
497                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
498                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
499                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE);
500 
501         // WHEN the intent is parsed by the parser.
502         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
503 
504         // THEN ProvisionParams is constructed as expected.
505         assertThat(
506                 ProvisioningParams.Builder.builder()
507                         // THEN provisioning action is ACTION_PROVISION_MANAGED_DEVICE
508                         .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE)
509                         .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
510                         .setProvisioningId(TEST_PROVISIONING_ID)
511                         // THEN device admin package name is not supported in Device Owner
512                         // provisioning.
513                         .setDeviceAdminPackageName(null)
514                         // THEN Device Admin download info is not supported.
515                         .setDeviceAdminDownloadInfo(null)
516                         .setSkipEncryption(TEST_SKIP_ENCRYPTION)
517                         .setLeaveAllSystemAppsEnabled(true)
518                         // THEN wifi configuration is not supported.
519                         .setWifiInfo(null)
520                         .setAdminExtrasBundle(createTestAdminExtras())
521                         .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
522                         .setReturnBeforePolicyCompliance(true)
523                         .build())
524                 .isEqualTo(params);
525     }
526 
testParse_nfcProvisioningIntentThrowsException()527     public void testParse_nfcProvisioningIntentThrowsException() {
528         // GIVEN a NFC provisioning intent and other extras.
529         Intent intent = new Intent(ACTION_NDEF_DISCOVERED)
530                 // GIVEN a device admin package name and component name
531                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
532                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
533                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
534                 .putExtras(getTestWifiInfoExtras())
535                 .putExtras(getTestDeviceAdminDownloadExtras())
536                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
537                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
538                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE);
539 
540         try {
541             // WHEN the intent is parsed by the parser.
542             ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
543             fail("ExtrasProvisioningDataParser doesn't support NFC intent. "
544                     + "IllegalProvisioningArgumentException should be thrown");
545         } catch (IllegalProvisioningArgumentException e) {
546             // THEN IllegalProvisioningArgumentException is thrown.
547         }
548     }
549 
testParse_illFormedLocaleThrowsException()550     public void testParse_illFormedLocaleThrowsException() throws Exception {
551         // GIVEN parsing happens during the setup wizard
552         when(mSettingsFacade.isDuringSetupWizard(mContext)).thenReturn(true);
553 
554         // GIVEN a managed device provisioning intent and other extras.
555         Intent intent = new Intent(ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE)
556                 // GIVEN a device admin package name and component name
557                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
558                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
559                 // GIVEN a ill formed locale string.
560                 .putExtras(getTestTimeTimeZoneAndLocaleExtras(TEST_ILL_FORMED_LOCALE))
561                 .putExtras(getTestWifiInfoExtras())
562                 .putExtras(getTestDeviceAdminDownloadExtras())
563                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
564                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
565                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE);
566 
567         try {
568             // WHEN the intent is parsed by the parser.
569             ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
570             fail("ExtrasProvisioningDataParser parsing an ill formed locale string. "
571                     + "IllegalProvisioningArgumentException should be thrown");
572         } catch (IllegalProvisioningArgumentException e) {
573             // THEN IllegalProvisioningArgumentException is thrown.
574         }
575     }
576 
testSetUseMobileData_forManagedProfile_alwaysFalse()577     public void testSetUseMobileData_forManagedProfile_alwaysFalse() throws Exception {
578         Intent intent =
579                 buildTestManagedProfileIntent().putExtra(EXTRA_PROVISIONING_USE_MOBILE_DATA, true);
580         mockInstalledDeviceAdminForTestPackageName();
581 
582         assertThat(mExtrasProvisioningDataParser.parse(intent).useMobileData).isFalse();
583     }
584 
testSetUseMobileData_fromTrustedSource_toFalse()585     public void testSetUseMobileData_fromTrustedSource_toFalse() throws Exception {
586         Intent intent =
587                 buildTestTrustedSourceIntent().putExtra(EXTRA_PROVISIONING_USE_MOBILE_DATA, true);
588         mockInstalledDeviceAdminForTestPackageName();
589 
590         assertThat(mExtrasProvisioningDataParser.parse(intent).useMobileData).isTrue();
591     }
592 
testSetUseMobileData_fromTrustedSource_toTrue()593     public void testSetUseMobileData_fromTrustedSource_toTrue() throws Exception {
594         Intent intent =
595                 buildTestTrustedSourceIntent().putExtra(EXTRA_PROVISIONING_USE_MOBILE_DATA, true);
596         mockInstalledDeviceAdminForTestPackageName();
597 
598         assertThat(mExtrasProvisioningDataParser.parse(intent).useMobileData).isTrue();
599     }
600 
testSetUseMobileData_fromTrustedSource_defaultsToFalse()601     public void testSetUseMobileData_fromTrustedSource_defaultsToFalse() throws Exception {
602         Intent intent = buildTestTrustedSourceIntent();
603         intent.removeExtra(EXTRA_PROVISIONING_USE_MOBILE_DATA);
604         mockInstalledDeviceAdminForTestPackageName();
605 
606         assertThat(mExtrasProvisioningDataParser.parse(intent).useMobileData).isFalse();
607     }
608 
testParse_WifiInfoWithCertificates()609     public void testParse_WifiInfoWithCertificates() throws Exception {
610         when(mSettingsFacade.isDuringSetupWizard(mContext)).thenReturn(true);
611         Intent intent = new Intent(ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE)
612                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
613                 .putExtra(EXTRA_PROVISIONING_WIFI_SSID, TEST_SSID)
614                 .putExtra(EXTRA_PROVISIONING_WIFI_HIDDEN, TEST_HIDDEN)
615                 .putExtra(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, TEST_SECURITY_TYPE_EAP)
616                 .putExtra(EXTRA_PROVISIONING_WIFI_PASSWORD, TEST_PASSWORD)
617                 .putExtra(EXTRA_PROVISIONING_WIFI_EAP_METHOD, TEST_EAP_METHOD)
618                 .putExtra(EXTRA_PROVISIONING_WIFI_PHASE2_AUTH, TEST_PHASE2_AUTH)
619                 .putExtra(EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE, TEST_CA_CERT)
620                 .putExtra(EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE, TEST_USER_CERT)
621                 .putExtra(EXTRA_PROVISIONING_WIFI_IDENTITY, TEST_IDENTITY)
622                 .putExtra(EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY, TEST_ANONYMOUS_IDENTITY)
623                 .putExtra(EXTRA_PROVISIONING_WIFI_DOMAIN, TEST_DOMAIN)
624                 .putExtra(EXTRA_PROVISIONING_WIFI_PROXY_HOST, TEST_PROXY_HOST)
625                 .putExtra(EXTRA_PROVISIONING_WIFI_PROXY_PORT, TEST_PROXY_PORT)
626                 .putExtra(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, TEST_PROXY_BYPASS_HOSTS)
627                 .putExtra(EXTRA_PROVISIONING_WIFI_PAC_URL, TEST_PAC_URL);
628 
629         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
630 
631         assertThat(params).isEqualTo(createTestProvisioningParamsBuilder()
632                 .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE)
633                 .setStartedByTrustedSource(true)
634                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
635                 .setInitiatorRequestedProvisioningModes(FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED)
636                 .setAllowedProvisioningModes(new ArrayList<>(List.of(
637                         PROVISIONING_MODE_MANAGED_PROFILE,
638                         PROVISIONING_MODE_FULLY_MANAGED_DEVICE)))
639                 .setReturnBeforePolicyCompliance(true)
640                 .setWifiInfo(WifiInfo.Builder.builder()
641                         .setSsid(TEST_SSID)
642                         .setHidden(TEST_HIDDEN)
643                         .setSecurityType(TEST_SECURITY_TYPE_EAP)
644                         .setPassword(TEST_PASSWORD)
645                         .setEapMethod(TEST_EAP_METHOD)
646                         .setPhase2Auth(TEST_PHASE2_AUTH)
647                         .setCaCertificate(TEST_CA_CERT)
648                         .setUserCertificate(TEST_USER_CERT)
649                         .setIdentity(TEST_IDENTITY)
650                         .setAnonymousIdentity(TEST_ANONYMOUS_IDENTITY)
651                         .setDomain(TEST_DOMAIN)
652                         .setProxyHost(TEST_PROXY_HOST)
653                         .setProxyPort(TEST_PROXY_PORT)
654                         .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
655                         .setPacUrl(TEST_PAC_URL)
656                         .build())
657                 .build());
658     }
659 
testParse_PermissionGrantOptOut()660     public void testParse_PermissionGrantOptOut() throws IllegalProvisioningArgumentException {
661         Intent provisionIntent = new Intent(ACTION_PROVISION_MANAGED_PROFILE)
662                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
663                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
664                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT,
665                         true);
666         mockInstalledDeviceAdminForTestPackageName();
667 
668         ProvisioningParams params = mExtrasProvisioningDataParser.parse(provisionIntent);
669         assertThat(params.deviceOwnerPermissionGrantOptOut).isEqualTo(true);
670     }
671 
testShortNamesOfExtrasAreUnique()672     public void testShortNamesOfExtrasAreUnique() {
673         assertEquals(buildAllShortExtras().distinct().count(), buildAllShortExtras().count());
674     }
675 
testParse_organizationOwnedIsFalse()676     public void testParse_organizationOwnedIsFalse() throws Exception {
677         Intent intent = buildTestIntent();
678         mockInstalledDeviceAdminForTestPackageName();
679 
680         assertThat(mExtrasProvisioningDataParser.parse(intent)
681                 .isOrganizationOwnedProvisioning).isFalse();
682     }
683 
684 
685     public void
testParse_managedAccountProvisioningWithSkipEduExtra_skipEdu()686             testParse_managedAccountProvisioningWithSkipEduExtra_skipEdu() throws Exception {
687         Intent intent = buildTestProvisionManagedAccountIntent()
688                 .putExtra(EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS, true);
689         mockInstalledDeviceAdminForTestPackageName();
690 
691         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
692 
693         assertThat(params.skipEducationScreens).isTrue();
694     }
695 
696     public void
testParse_managedAccountProvisioningWithoutSkipEduExtra_noSkipEdu()697             testParse_managedAccountProvisioningWithoutSkipEduExtra_noSkipEdu() throws Exception {
698         Intent intent = buildTestProvisionManagedAccountIntent();
699         mockInstalledDeviceAdminForTestPackageName();
700 
701         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
702 
703         assertThat(params.skipEducationScreens).isFalse();
704     }
705 
706     public void
testParse_qrProvisioningWithSkipEduExtra_noSkipEdu()707             testParse_qrProvisioningWithSkipEduExtra_noSkipEdu() throws Exception {
708         Intent intent = buildTestQrCodeIntent()
709                 .putExtra(EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS, true);
710         mockInstalledDeviceAdminForTestPackageName();
711 
712         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
713 
714         assertThat(params.skipEducationScreens).isFalse();
715     }
716 
717     public void
testParse_managedProfileProvisioningWithSkipEduExtra_noSkipEdu()718             testParse_managedProfileProvisioningWithSkipEduExtra_noSkipEdu() throws Exception {
719         Intent intent = buildTestManagedProfileIntent()
720                 .putExtra(EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS, true);
721         mockInstalledDeviceAdminForTestPackageName();
722 
723         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
724 
725         assertThat(params.skipEducationScreens).isFalse();
726     }
727 
728     public void
testParse_trustedSourceWithPersonallyOwnedSupportedModes_areEqual()729             testParse_trustedSourceWithPersonallyOwnedSupportedModes_areEqual() throws Exception {
730         Intent intent = buildTestTrustedSourceIntent()
731                 .putExtra(EXTRA_PROVISIONING_SUPPORTED_MODES,
732                         FLAG_SUPPORTED_MODES_PERSONALLY_OWNED);
733         mockInstalledDeviceAdminForTestPackageName();
734 
735         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
736 
737         assertThat(params.initiatorRequestedProvisioningModes)
738                 .isEqualTo(FLAG_SUPPORTED_MODES_PERSONALLY_OWNED);
739     }
740 
741     public void
testParse_trustedSourceWithOrganizationOwnedSupportedModes_areEqual()742             testParse_trustedSourceWithOrganizationOwnedSupportedModes_areEqual() throws Exception {
743         Intent intent = buildTestTrustedSourceIntent()
744                 .putExtra(EXTRA_PROVISIONING_SUPPORTED_MODES,
745                         FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED);
746         mockInstalledDeviceAdminForTestPackageName();
747 
748         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
749 
750         assertThat(params.initiatorRequestedProvisioningModes)
751                 .isEqualTo(FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED);
752     }
753 
testParse_trustedSourceWithOrganizationAndPersonallyOwnedSupportedModes_areEqual()754     public void testParse_trustedSourceWithOrganizationAndPersonallyOwnedSupportedModes_areEqual()
755             throws Exception {
756         Intent intent = buildTestTrustedSourceIntent()
757                 .putExtra(EXTRA_PROVISIONING_SUPPORTED_MODES,
758                         FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED
759                                 | FLAG_SUPPORTED_MODES_PERSONALLY_OWNED);
760         mockInstalledDeviceAdminForTestPackageName();
761 
762         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
763 
764         assertThat(params.initiatorRequestedProvisioningModes)
765                 .isEqualTo(FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED
766                         | FLAG_SUPPORTED_MODES_PERSONALLY_OWNED);
767     }
768 
testParse_trustedSourceWithDeviceOwnerSupportedMode_areEqual()769     public void testParse_trustedSourceWithDeviceOwnerSupportedMode_areEqual()
770             throws Exception {
771         Intent intent = buildTestTrustedSourceIntent()
772                 .putExtra(EXTRA_PROVISIONING_SUPPORTED_MODES, FLAG_SUPPORTED_MODES_DEVICE_OWNER);
773         mockInstalledDeviceAdminForTestPackageName();
774 
775         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
776 
777         assertThat(params.initiatorRequestedProvisioningModes)
778                 .isEqualTo(FLAG_SUPPORTED_MODES_DEVICE_OWNER);
779     }
780 
781     public void
testParse_nonTrustedSourceIntentWithOrganizationOwnedSupportedModes_hasDefaultValue()782     testParse_nonTrustedSourceIntentWithOrganizationOwnedSupportedModes_hasDefaultValue()
783             throws Exception {
784         Intent intent = bildTestNonTrustedSourceIntent()
785                 .putExtra(EXTRA_PROVISIONING_SUPPORTED_MODES,
786                         FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED);
787         mockInstalledDeviceAdminForTestPackageName();
788 
789         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
790 
791         assertThat(params.initiatorRequestedProvisioningModes)
792                 .isEqualTo(DEFAULT_EXTRA_PROVISIONING_SUPPORTED_MODES);
793     }
794 
testParse_trustedSourceWithoutSupportedModes_defaultsToOrganizationOwned()795     public void testParse_trustedSourceWithoutSupportedModes_defaultsToOrganizationOwned()
796             throws Exception {
797         Intent intent = buildTestTrustedSourceIntent();
798         mockInstalledDeviceAdminForTestPackageName();
799 
800         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
801 
802         assertThat(params.initiatorRequestedProvisioningModes)
803                 .isEqualTo(FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED);
804     }
805 
testParse_trustedSourceWithInvalidSupportedModes_throwsException()806     public void testParse_trustedSourceWithInvalidSupportedModes_throwsException()
807             throws IllegalProvisioningArgumentException {
808         Intent intent = buildTestTrustedSourceIntent()
809                 .putExtra(EXTRA_PROVISIONING_SUPPORTED_MODES, INVALID_SUPPORTED_MODES);
810         mockInstalledDeviceAdminForTestPackageName();
811 
812         assertThrows(
813                 IllegalProvisioningArgumentException.class,
814                 () -> mExtrasProvisioningDataParser.parse(intent));
815     }
816 
testParse_trustedSourceWithSkipOwnershipDisclaimerTrue_areEqual()817     public void testParse_trustedSourceWithSkipOwnershipDisclaimerTrue_areEqual()
818             throws IllegalProvisioningArgumentException {
819         Intent intent = buildTestTrustedSourceIntent()
820                 .putExtra(EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER, true);
821         mockInstalledDeviceAdminForTestPackageName();
822 
823         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
824 
825         assertThat(params.skipOwnershipDisclaimer).isTrue();
826     }
827 
testParse_trustedSourceWithSkipOwnershipDisclaimerFalse_areEqual()828     public void testParse_trustedSourceWithSkipOwnershipDisclaimerFalse_areEqual()
829             throws IllegalProvisioningArgumentException {
830         Intent intent = buildTestTrustedSourceIntent()
831                 .putExtra(EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER, false);
832         mockInstalledDeviceAdminForTestPackageName();
833 
834         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
835 
836         assertThat(params.skipOwnershipDisclaimer).isFalse();
837     }
838 
testParse_trustedSourceWithoutSkipOwnershipDisclaimer_isFalse()839     public void testParse_trustedSourceWithoutSkipOwnershipDisclaimer_isFalse()
840             throws IllegalProvisioningArgumentException {
841         Intent intent = buildTestTrustedSourceIntent();
842         mockInstalledDeviceAdminForTestPackageName();
843 
844         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
845 
846         assertThat(params.skipOwnershipDisclaimer).isFalse();
847     }
848 
testParse_managedProfileWithSkipOwnershipDisclaimerTrue_isFalse()849     public void testParse_managedProfileWithSkipOwnershipDisclaimerTrue_isFalse()
850             throws IllegalProvisioningArgumentException {
851         Intent intent = buildTestManagedProfileIntent()
852                 .putExtra(EXTRA_PROVISIONING_SKIP_OWNERSHIP_DISCLAIMER, true);
853         mockInstalledDeviceAdminForTestPackageName();
854 
855         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
856 
857         assertThat(params.skipOwnershipDisclaimer).isFalse();
858     }
859 
testParse_trustedSourceWithReturnBeforePolicyComplianceTrue_isTrue()860     public void testParse_trustedSourceWithReturnBeforePolicyComplianceTrue_isTrue()
861             throws IllegalProvisioningArgumentException {
862         Intent intent = buildTestTrustedSourceIntent()
863                 .putExtra(EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE, true);
864         mockInstalledDeviceAdminForTestPackageName();
865 
866         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
867 
868         assertThat(params.returnBeforePolicyCompliance).isTrue();
869     }
870 
testParse_trustedSourceWithReturnBeforePolicyComplianceFalse_isFalse()871     public void testParse_trustedSourceWithReturnBeforePolicyComplianceFalse_isFalse()
872             throws IllegalProvisioningArgumentException {
873         Intent intent = buildTestTrustedSourceIntent()
874                 .putExtra(EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE, false);
875         mockInstalledDeviceAdminForTestPackageName();
876 
877         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
878 
879         assertThat(params.returnBeforePolicyCompliance).isFalse();
880     }
881 
testParse_trustedSourceWithReturnBeforePolicyComplianceNotSet_isTrue()882     public void testParse_trustedSourceWithReturnBeforePolicyComplianceNotSet_isTrue()
883             throws IllegalProvisioningArgumentException {
884         Intent intent = buildTestTrustedSourceIntent();
885         mockInstalledDeviceAdminForTestPackageName();
886 
887         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
888 
889         assertThat(params.returnBeforePolicyCompliance).isTrue();
890     }
891 
testParse_managedProfileWithReturnBeforePolicyComplianceTrue_afterSetupWizard_isFalse()892     public void testParse_managedProfileWithReturnBeforePolicyComplianceTrue_afterSetupWizard_isFalse()
893             throws IllegalProvisioningArgumentException {
894         when(mSettingsFacade.isDuringSetupWizard(mContext)).thenReturn(false);
895         Intent intent = buildTestManagedProfileIntent()
896                 .putExtra(EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE, true);
897         mockInstalledDeviceAdminForTestPackageName();
898 
899         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
900 
901         assertThat(params.returnBeforePolicyCompliance).isFalse();
902     }
903 
testParse_managedProfileWithReturnBeforePolicyComplianceTrue_duringSetupWizard_isTrue()904     public void testParse_managedProfileWithReturnBeforePolicyComplianceTrue_duringSetupWizard_isTrue()
905             throws IllegalProvisioningArgumentException {
906         when(mSettingsFacade.isDuringSetupWizard(mContext)).thenReturn(true);
907         Intent intent = buildTestManagedProfileIntent()
908                 .putExtra(EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE, true);
909         mockInstalledDeviceAdminForTestPackageName();
910 
911         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
912 
913         assertThat(params.returnBeforePolicyCompliance).isTrue();
914     }
915 
testParse_managedProfileWithReturnBeforePolicyComplianceNotSet_isFalse()916     public void testParse_managedProfileWithReturnBeforePolicyComplianceNotSet_isFalse()
917             throws IllegalProvisioningArgumentException {
918         Intent intent = buildTestManagedProfileIntent();
919         mockInstalledDeviceAdminForTestPackageName();
920 
921         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
922 
923         assertThat(params.returnBeforePolicyCompliance).isFalse();
924     }
925 
testParse_financedDeviceProvisioningWithReturnBeforePolicyComplianceTrue_isTrue()926     public void testParse_financedDeviceProvisioningWithReturnBeforePolicyComplianceTrue_isTrue()
927             throws IllegalProvisioningArgumentException {
928         Intent intent = buildTestFinancedDeviceIntent()
929                 .putExtra(EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE, true);
930         mockInstalledDeviceAdminForTestPackageName();
931 
932         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
933 
934         assertThat(params.returnBeforePolicyCompliance).isTrue();
935     }
936 
testParse_financedDeviceProvisioningWithReturnBeforePolicyComplianceFalse_isTrue()937     public void testParse_financedDeviceProvisioningWithReturnBeforePolicyComplianceFalse_isTrue()
938             throws IllegalProvisioningArgumentException {
939         Intent intent = buildTestFinancedDeviceIntent()
940                 .putExtra(EXTRA_PROVISIONING_RETURN_BEFORE_POLICY_COMPLIANCE, false);
941         mockInstalledDeviceAdminForTestPackageName();
942 
943         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
944 
945         assertThat(params.returnBeforePolicyCompliance).isTrue();
946     }
947 
testParse_financedDeviceProvisioningWithReturnBeforePolicyComplianceNotSet_isTrue()948     public void testParse_financedDeviceProvisioningWithReturnBeforePolicyComplianceNotSet_isTrue()
949             throws IllegalProvisioningArgumentException {
950         Intent intent = buildTestFinancedDeviceIntent();
951         mockInstalledDeviceAdminForTestPackageName();
952 
953         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
954 
955         assertThat(params.returnBeforePolicyCompliance).isTrue();
956     }
957 
testParse_trustedSourceProvisioningWithAllowOfflineTrue_isTrue()958     public void testParse_trustedSourceProvisioningWithAllowOfflineTrue_isTrue()
959             throws IllegalProvisioningArgumentException {
960         Intent intent = buildTestTrustedSourceIntent()
961                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ALLOW_OFFLINE,
962                         /* value= */ true);
963         mockInstalledDeviceAdminForTestPackageName();
964 
965         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
966 
967         assertThat(params.allowOffline).isTrue();
968     }
969 
testParse_trustedSourceProvisioningWithAllowOfflineFalse_isFalse()970     public void testParse_trustedSourceProvisioningWithAllowOfflineFalse_isFalse()
971             throws IllegalProvisioningArgumentException {
972         Intent intent = buildTestTrustedSourceIntent()
973                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ALLOW_OFFLINE,
974                         /* value= */ false);
975         mockInstalledDeviceAdminForTestPackageName();
976 
977         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
978 
979         assertThat(params.allowOffline).isFalse();
980     }
981 
testParse_trustedSourceProvisioningWithAllowOfflineNotSet_isFalse()982     public void testParse_trustedSourceProvisioningWithAllowOfflineNotSet_isFalse()
983             throws IllegalProvisioningArgumentException {
984         Intent intent = buildTestTrustedSourceIntent();
985         mockInstalledDeviceAdminForTestPackageName();
986 
987         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
988 
989         assertThat(params.allowOffline).isFalse();
990     }
991 
testParse_managedProfileProvisioningWithAllowOfflineTrue_isTrue()992     public void testParse_managedProfileProvisioningWithAllowOfflineTrue_isTrue()
993             throws IllegalProvisioningArgumentException {
994         Intent intent = buildTestManagedProfileIntent()
995                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ALLOW_OFFLINE, /* value= */ true);
996         mockInstalledDeviceAdminForTestPackageName();
997 
998         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
999 
1000         assertThat(params.allowOffline).isTrue();
1001     }
1002 
testParse_financedDeviceProvisioningWithAllowOfflineTrue_isTrue()1003     public void testParse_financedDeviceProvisioningWithAllowOfflineTrue_isTrue()
1004             throws IllegalProvisioningArgumentException {
1005         Intent intent = buildTestFinancedDeviceIntent()
1006                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ALLOW_OFFLINE, /* value= */ true);
1007         mockInstalledDeviceAdminForTestPackageName();
1008 
1009         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1010 
1011         assertThat(params.allowOffline).isTrue();
1012     }
1013 
testParse_trustedSourceProvisioningWithProvisioningShouldLaunchResultIntentTrue_isTrue()1014     public void testParse_trustedSourceProvisioningWithProvisioningShouldLaunchResultIntentTrue_isTrue()
1015             throws IllegalProvisioningArgumentException {
1016         Intent intent = buildTestTrustedSourceIntent()
1017                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT,
1018                         /* value= */ true);
1019         mockInstalledDeviceAdminForTestPackageName();
1020 
1021         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1022 
1023         assertThat(params.provisioningShouldLaunchResultIntent).isTrue();
1024     }
1025 
testParse_trustedSourceProvisioningWithProvisioningShouldLaunchResultIntentFalse_isFalse()1026     public void testParse_trustedSourceProvisioningWithProvisioningShouldLaunchResultIntentFalse_isFalse()
1027             throws IllegalProvisioningArgumentException {
1028         Intent intent = buildTestTrustedSourceIntent()
1029                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT,
1030                         /* value= */ false);
1031         mockInstalledDeviceAdminForTestPackageName();
1032 
1033         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1034 
1035         assertThat(params.provisioningShouldLaunchResultIntent).isFalse();
1036     }
1037 
testParse_trustedSourceProvisioningWithProvisioningShouldLaunchResultIntentNotSet_isFalse()1038     public void testParse_trustedSourceProvisioningWithProvisioningShouldLaunchResultIntentNotSet_isFalse()
1039             throws IllegalProvisioningArgumentException {
1040         Intent intent = buildTestTrustedSourceIntent();
1041         mockInstalledDeviceAdminForTestPackageName();
1042 
1043         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1044 
1045         assertThat(params.provisioningShouldLaunchResultIntent).isFalse();
1046     }
1047 
testParse_managedProfileProvisioningWithProvisioningShouldLaunchResultIntentTrue_isTrue()1048     public void testParse_managedProfileProvisioningWithProvisioningShouldLaunchResultIntentTrue_isTrue()
1049             throws IllegalProvisioningArgumentException {
1050         Intent intent = buildTestManagedProfileIntent()
1051                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT,
1052                         /* value= */ true);
1053         mockInstalledDeviceAdminForTestPackageName();
1054 
1055         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1056 
1057         assertThat(params.provisioningShouldLaunchResultIntent).isTrue();
1058     }
1059 
testDoesNotParse_financedDeviceProvisioningWithProvisioningShouldLaunchResultIntentTrue_isFalse()1060     public void testDoesNotParse_financedDeviceProvisioningWithProvisioningShouldLaunchResultIntentTrue_isFalse()
1061             throws IllegalProvisioningArgumentException {
1062         Intent intent = buildTestFinancedDeviceIntent()
1063                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT,
1064                         /* value= */ true);
1065         mockInstalledDeviceAdminForTestPackageName();
1066 
1067         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1068 
1069         assertThat(params.provisioningShouldLaunchResultIntent).isFalse();
1070     }
1071 
testDoesNotParse_financedDeviceProvisioningWithProvisioningShouldLaunchResultIntentFalse_isFalse()1072     public void testDoesNotParse_financedDeviceProvisioningWithProvisioningShouldLaunchResultIntentFalse_isFalse()
1073             throws IllegalProvisioningArgumentException {
1074         Intent intent = buildTestFinancedDeviceIntent()
1075                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_SHOULD_LAUNCH_RESULT_INTENT,
1076                         /* value= */ false);
1077         mockInstalledDeviceAdminForTestPackageName();
1078 
1079         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1080 
1081         assertThat(params.provisioningShouldLaunchResultIntent).isFalse();
1082     }
1083 
testParse_trustedSourceProvisioningWithRoleHolderDownloadInfo_works()1084     public void testParse_trustedSourceProvisioningWithRoleHolderDownloadInfo_works()
1085             throws IllegalProvisioningArgumentException {
1086         Intent intent = buildTestTrustedSourceIntent()
1087                 .putExtra(EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_LOCATION,
1088                         TEST_DOWNLOAD_LOCATION)
1089                 .putExtra(EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_COOKIE_HEADER,
1090                         TEST_COOKIE_HEADER)
1091                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ROLE_HOLDER_SIGNATURE_CHECKSUM,
1092                         TEST_SIGNATURE_CHECKSUM_STRING);
1093         mockInstalledDeviceAdminForTestPackageName();
1094 
1095         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1096 
1097         assertThat(params.roleHolderDownloadInfo).isNotNull();
1098         assertThat(params.roleHolderDownloadInfo.location).isEqualTo(TEST_DOWNLOAD_LOCATION);
1099         assertThat(params.roleHolderDownloadInfo.signatureChecksum)
1100                 .isEqualTo(TEST_SIGNATURE_CHECKSUM);
1101         assertThat(params.roleHolderDownloadInfo.cookieHeader).isEqualTo(TEST_COOKIE_HEADER);
1102     }
1103 
testParse_managedProfileProvisioningWithRoleHolderDownloadInfo_notParsed()1104     public void testParse_managedProfileProvisioningWithRoleHolderDownloadInfo_notParsed()
1105             throws IllegalProvisioningArgumentException {
1106         Intent intent = buildTestManagedProfileIntent()
1107                 .putExtra(EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_LOCATION,
1108                         TEST_DOWNLOAD_LOCATION)
1109                 .putExtra(EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_COOKIE_HEADER,
1110                         TEST_COOKIE_HEADER)
1111                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ROLE_HOLDER_SIGNATURE_CHECKSUM,
1112                         TEST_SIGNATURE_CHECKSUM_STRING);
1113         mockInstalledDeviceAdminForTestPackageName();
1114 
1115         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1116 
1117         assertThat(params.roleHolderDownloadInfo).isNull();
1118     }
1119 
testParse_financedDeviceProvisioningWithRoleHolderDownloadInfo_notParsed()1120     public void testParse_financedDeviceProvisioningWithRoleHolderDownloadInfo_notParsed()
1121             throws IllegalProvisioningArgumentException {
1122         Intent intent = buildTestFinancedDeviceIntent()
1123                 .putExtra(EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_LOCATION,
1124                         TEST_DOWNLOAD_LOCATION)
1125                 .putExtra(EXTRA_PROVISIONING_ROLE_HOLDER_PACKAGE_DOWNLOAD_COOKIE_HEADER,
1126                         TEST_COOKIE_HEADER)
1127                 .putExtra(DevicePolicyManager.EXTRA_PROVISIONING_ROLE_HOLDER_SIGNATURE_CHECKSUM,
1128                         TEST_SIGNATURE_CHECKSUM_STRING);
1129         mockInstalledDeviceAdminForTestPackageName();
1130 
1131         ProvisioningParams params = mExtrasProvisioningDataParser.parse(intent);
1132 
1133         assertThat(params.roleHolderDownloadInfo).isNull();
1134     }
1135 
buildAllShortExtras()1136     private Stream<Field> buildAllShortExtras() {
1137         Field[] fields = ExtrasProvisioningDataParser.class.getDeclaredFields();
1138         return Arrays.stream(fields)
1139                 .filter(field -> field.getName().startsWith("EXTRA_")
1140                         && field.getName().endsWith("_SHORT"));
1141     }
1142 
createTestProvisioningParamsBuilder()1143     private ProvisioningParams.Builder createTestProvisioningParamsBuilder() {
1144         return ProvisioningParams.Builder.builder().setProvisioningId(TEST_PROVISIONING_ID);
1145     }
1146 
buildIntentWithAllShortExtras()1147     private Intent buildIntentWithAllShortExtras() {
1148         Bundle bundleShort = new Bundle();
1149         bundleShort.putString(
1150                 EXTRA_PROVISIONING_DISCLAIMER_HEADER_SHORT, TEST_DISCLAMER_HEADER);
1151         bundleShort.putParcelable(EXTRA_PROVISIONING_DISCLAIMER_CONTENT_SHORT, TEST_URI);
1152         Parcelable[] parcelablesShort = {bundleShort};
1153         return new Intent(ACTION_PROVISION_MANAGED_DEVICE)
1154                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME_SHORT,
1155                         TEST_PACKAGE_NAME)
1156                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME_SHORT,
1157                         TEST_COMPONENT_NAME)
1158                 .putExtras(getShortTestTimeTimeZoneAndLocaleExtras())
1159                 .putExtras(getAllShortTestWifiInfoExtras())
1160                 .putExtras(getShortTestDeviceAdminDownloadExtras())
1161                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE_SHORT,
1162                         createTestAdminExtras())
1163                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION_SHORT, TEST_SKIP_ENCRYPTION)
1164                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED_SHORT,
1165                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
1166                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE_SHORT, TEST_ACCOUNT_TO_MIGRATE)
1167                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION_SHORT,
1168                         TEST_KEEP_ACCOUNT_MIGRATED)
1169                 .putExtra(EXTRA_PROVISIONING_ORGANIZATION_NAME_SHORT,
1170                         TEST_ORGANIZATION_NAME)
1171                 .putExtra(EXTRA_PROVISIONING_SUPPORT_URL_SHORT, TEST_SUPPORT_URL)
1172                 .putExtra(EXTRA_PROVISIONING_USE_MOBILE_DATA_SHORT,
1173                         TEST_USE_MOBILE_DATA)
1174                 .putExtra(EXTRA_PROVISIONING_DISCLAIMERS_SHORT, parcelablesShort)
1175                 .putExtra(EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT_SHORT, true);
1176     }
1177 
buildIntentWithAllLongExtras()1178     private Intent buildIntentWithAllLongExtras() {
1179         Bundle bundleLong = new Bundle();
1180         bundleLong.putString(EXTRA_PROVISIONING_DISCLAIMER_HEADER, TEST_DISCLAMER_HEADER);
1181         bundleLong.putParcelable(EXTRA_PROVISIONING_DISCLAIMER_CONTENT, TEST_URI);
1182         Parcelable[] parcelablesLong = {bundleLong};
1183         return new Intent(ACTION_PROVISION_MANAGED_DEVICE)
1184                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
1185                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
1186                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
1187                 .putExtras(getAllTestWifiInfoExtras())
1188                 .putExtras(getTestDeviceAdminDownloadExtras())
1189                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
1190                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
1191                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
1192                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
1193                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE)
1194                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED)
1195                 .putExtra(EXTRA_PROVISIONING_ORGANIZATION_NAME, TEST_ORGANIZATION_NAME)
1196                 .putExtra(EXTRA_PROVISIONING_SUPPORT_URL, TEST_SUPPORT_URL)
1197                 .putExtra(EXTRA_PROVISIONING_USE_MOBILE_DATA, TEST_USE_MOBILE_DATA)
1198                 .putExtra(EXTRA_PROVISIONING_LOGO_URI, TEST_URI)
1199                 .putExtra(EXTRA_PROVISIONING_DISCLAIMERS, parcelablesLong)
1200                 .putExtra(EXTRA_PROVISIONING_SENSORS_PERMISSION_GRANT_OPT_OUT, true);
1201     }
1202 
buildTestManagedProfileIntent()1203     private static Intent buildTestManagedProfileIntent() {
1204         return new Intent(ACTION_PROVISION_MANAGED_PROFILE)
1205                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
1206                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
1207                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
1208                 .putExtras(getTestWifiInfoExtras())
1209                 .putExtras(getTestDeviceAdminDownloadExtras())
1210                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
1211                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
1212                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED)
1213                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
1214                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
1215                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE);
1216     }
1217 
buildTestFinancedDeviceIntent()1218     private static Intent buildTestFinancedDeviceIntent() {
1219         return new Intent(ACTION_PROVISION_FINANCED_DEVICE)
1220                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
1221                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME);
1222     }
1223 
bildTestNonTrustedSourceIntent()1224     private static Intent bildTestNonTrustedSourceIntent() {
1225         return buildTestManagedProfileIntent();
1226     }
1227 
buildTestIntent()1228     private static Intent buildTestIntent() {
1229         return buildTestTrustedSourceIntent();
1230     }
1231 
buildTestTrustedSourceIntent()1232     private static Intent buildTestTrustedSourceIntent() {
1233         return  new Intent(ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE)
1234                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME, TEST_PACKAGE_NAME)
1235                 .putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, TEST_COMPONENT_NAME)
1236                 .putExtras(getTestTimeTimeZoneAndLocaleExtras())
1237                 .putExtras(getTestWifiInfoExtras())
1238                 .putExtras(getTestDeviceAdminDownloadExtras())
1239                 .putExtra(EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE, createTestAdminExtras())
1240                 .putExtra(EXTRA_PROVISIONING_SKIP_ENCRYPTION, TEST_SKIP_ENCRYPTION)
1241                 .putExtra(EXTRA_PROVISIONING_KEEP_ACCOUNT_ON_MIGRATION, TEST_KEEP_ACCOUNT_MIGRATED)
1242                 .putExtra(EXTRA_PROVISIONING_LEAVE_ALL_SYSTEM_APPS_ENABLED,
1243                         TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
1244                 .putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, TEST_ACCOUNT_TO_MIGRATE)
1245                 .putExtra(EXTRA_PROVISIONING_ORGANIZATION_NAME, TEST_ORGANIZATION_NAME)
1246                 .putExtra(EXTRA_PROVISIONING_SUPPORT_URL, TEST_SUPPORT_URL);
1247     }
1248 
buildTestQrCodeIntent()1249     private Intent buildTestQrCodeIntent() {
1250         return buildTestTrustedSourceIntent()
1251                 .putExtra(EXTRA_PROVISIONING_TRIGGER, PROVISIONING_TRIGGER_QR_CODE);
1252     }
1253 
buildTestProvisionManagedAccountIntent()1254     private Intent buildTestProvisionManagedAccountIntent() {
1255         return buildTestTrustedSourceIntent()
1256                 .putExtra(EXTRA_PROVISIONING_TRIGGER, PROVISIONING_TRIGGER_MANAGED_ACCOUNT);
1257     }
1258 
getTestWifiInfoExtras()1259     private static Bundle getTestWifiInfoExtras() {
1260         Bundle wifiInfoExtras = new Bundle();
1261         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SSID, TEST_SSID);
1262         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, TEST_SECURITY_TYPE);
1263         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PASSWORD, TEST_PASSWORD);
1264         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST, TEST_PROXY_HOST);
1265         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, TEST_PROXY_BYPASS_HOSTS);
1266         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PAC_URL, TEST_PAC_URL);
1267         wifiInfoExtras.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, TEST_PROXY_PORT);
1268         wifiInfoExtras.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, TEST_HIDDEN);
1269         return wifiInfoExtras;
1270     }
1271 
getAllTestWifiInfoExtras()1272     private static Bundle getAllTestWifiInfoExtras() {
1273         Bundle wifiInfoExtras = new Bundle();
1274         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SSID, TEST_SSID);
1275         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SECURITY_TYPE, TEST_SECURITY_TYPE);
1276         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PASSWORD, TEST_PASSWORD);
1277         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_EAP_METHOD, TEST_EAP_METHOD);
1278         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PHASE2_AUTH, TEST_PHASE2_AUTH);
1279         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE, TEST_CA_CERT);
1280         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE, TEST_USER_CERT);
1281         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_IDENTITY, TEST_IDENTITY);
1282         wifiInfoExtras.putString(
1283                 EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY, TEST_ANONYMOUS_IDENTITY);
1284         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_DOMAIN, TEST_DOMAIN);
1285         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST, TEST_PROXY_HOST);
1286         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_BYPASS, TEST_PROXY_BYPASS_HOSTS);
1287         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PAC_URL, TEST_PAC_URL);
1288         wifiInfoExtras.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT, TEST_PROXY_PORT);
1289         wifiInfoExtras.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN, TEST_HIDDEN);
1290         return wifiInfoExtras;
1291     }
1292 
getAllShortTestWifiInfoExtras()1293     private static Bundle getAllShortTestWifiInfoExtras() {
1294         Bundle wifiInfoExtras = new Bundle();
1295         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_SSID_SHORT, TEST_SSID);
1296         wifiInfoExtras.putString(
1297                 EXTRA_PROVISIONING_WIFI_SECURITY_TYPE_SHORT, TEST_SECURITY_TYPE);
1298         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PASSWORD_SHORT, TEST_PASSWORD);
1299         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_EAP_METHOD_SHORT, TEST_EAP_METHOD);
1300         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PHASE2_AUTH_SHORT, TEST_PHASE2_AUTH);
1301         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE_SHORT, TEST_CA_CERT);
1302         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE_SHORT, TEST_USER_CERT);
1303         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_IDENTITY_SHORT, TEST_IDENTITY);
1304         wifiInfoExtras.putString(
1305                 EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY_SHORT, TEST_ANONYMOUS_IDENTITY);
1306         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_DOMAIN_SHORT, TEST_DOMAIN);
1307         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PROXY_HOST_SHORT, TEST_PROXY_HOST);
1308         wifiInfoExtras.putString(
1309                 EXTRA_PROVISIONING_WIFI_PROXY_BYPASS_SHORT, TEST_PROXY_BYPASS_HOSTS);
1310         wifiInfoExtras.putString(EXTRA_PROVISIONING_WIFI_PAC_URL_SHORT, TEST_PAC_URL);
1311         wifiInfoExtras.putInt(EXTRA_PROVISIONING_WIFI_PROXY_PORT_SHORT, TEST_PROXY_PORT);
1312         wifiInfoExtras.putBoolean(EXTRA_PROVISIONING_WIFI_HIDDEN_SHORT, TEST_HIDDEN);
1313         return wifiInfoExtras;
1314     }
1315 
mockInstalledDeviceAdminForTestPackageName()1316     private void mockInstalledDeviceAdminForTestPackageName()
1317             throws IllegalProvisioningArgumentException {
1318         mockInstalledDeviceAdmin(TEST_PACKAGE_NAME);
1319     }
1320 
mockInstalledDeviceAdminForNullPackageName()1321     private void mockInstalledDeviceAdminForNullPackageName()
1322             throws IllegalProvisioningArgumentException {
1323         mockInstalledDeviceAdmin(null);
1324     }
1325 
mockInstalledDeviceAdmin(String packageName)1326     private void mockInstalledDeviceAdmin(String packageName)
1327             throws IllegalProvisioningArgumentException {
1328         doReturn(TEST_COMPONENT_NAME)
1329                 .when(mUtils)
1330                 .findDeviceAdmin(packageName, TEST_COMPONENT_NAME, mContext, UserHandle.myUserId());
1331     }
1332 
buildTestLocaleString()1333     private static String buildTestLocaleString() {
1334         return StoreUtils.localeToString(TEST_LOCALE);
1335     }
1336 
getTestTimeTimeZoneAndLocaleExtras()1337     private static Bundle getTestTimeTimeZoneAndLocaleExtras() {
1338         return getTestTimeTimeZoneAndLocaleExtrasInternal(buildTestLocaleString());
1339     }
1340 
getShortTestTimeTimeZoneAndLocaleExtras()1341     private static Bundle getShortTestTimeTimeZoneAndLocaleExtras() {
1342         return getShortTestTimeTimeZoneAndLocaleExtrasInternal(buildTestLocaleString());
1343     }
1344 
getTestTimeTimeZoneAndLocaleExtras(String locale)1345     private static Bundle getTestTimeTimeZoneAndLocaleExtras(String locale) {
1346         return getTestTimeTimeZoneAndLocaleExtrasInternal(locale);
1347     }
1348 
getTestTimeTimeZoneAndLocaleExtrasInternal(String locale)1349     private static Bundle getTestTimeTimeZoneAndLocaleExtrasInternal(String locale){
1350         Bundle timeTimezoneAndLocaleExtras = new Bundle();
1351         timeTimezoneAndLocaleExtras.putLong(EXTRA_PROVISIONING_LOCAL_TIME, TEST_LOCAL_TIME);
1352         timeTimezoneAndLocaleExtras.putString(EXTRA_PROVISIONING_TIME_ZONE, TEST_TIME_ZONE);
1353         timeTimezoneAndLocaleExtras.putString(EXTRA_PROVISIONING_LOCALE, locale);
1354         return timeTimezoneAndLocaleExtras;
1355     }
1356 
getShortTestTimeTimeZoneAndLocaleExtrasInternal(String locale)1357     private static Bundle getShortTestTimeTimeZoneAndLocaleExtrasInternal(String locale){
1358         Bundle timeTimezoneAndLocaleExtras = new Bundle();
1359         timeTimezoneAndLocaleExtras.putLong(
1360                 EXTRA_PROVISIONING_LOCAL_TIME_SHORT, TEST_LOCAL_TIME);
1361         timeTimezoneAndLocaleExtras.putString(
1362                 EXTRA_PROVISIONING_TIME_ZONE_SHORT, TEST_TIME_ZONE);
1363         timeTimezoneAndLocaleExtras.putString(
1364                 EXTRA_PROVISIONING_LOCALE_SHORT, locale);
1365         return timeTimezoneAndLocaleExtras;
1366     }
1367 
getTestDeviceAdminDownloadExtras()1368     private static Bundle getTestDeviceAdminDownloadExtras() {
1369         Bundle downloadInfoExtras = new Bundle();
1370         downloadInfoExtras.putInt(
1371                 EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE, TEST_MIN_SUPPORT_VERSION);
1372         downloadInfoExtras.putString(
1373                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION, TEST_DOWNLOAD_LOCATION);
1374         downloadInfoExtras.putString(
1375                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER, TEST_COOKIE_HEADER);
1376         downloadInfoExtras.putString(
1377                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM,
1378                 buildTestPackageChecksum());
1379         downloadInfoExtras.putString(
1380                 EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM,
1381                 buildTestSignatureChecksum());
1382         return downloadInfoExtras;
1383     }
1384 
buildTestPackageChecksum()1385     private static String buildTestPackageChecksum() {
1386         return Base64.encodeToString(TEST_PACKAGE_CHECKSUM,
1387                 Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
1388     }
1389 
getShortTestDeviceAdminDownloadExtras()1390     private static Bundle getShortTestDeviceAdminDownloadExtras() {
1391         Bundle downloadInfoExtras = new Bundle();
1392         downloadInfoExtras.putInt(
1393                 EXTRA_PROVISIONING_DEVICE_ADMIN_MINIMUM_VERSION_CODE_SHORT,
1394                 TEST_MIN_SUPPORT_VERSION);
1395         downloadInfoExtras.putString(
1396                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION_SHORT,
1397                 TEST_DOWNLOAD_LOCATION);
1398         downloadInfoExtras.putString(
1399                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_COOKIE_HEADER_SHORT,
1400                 TEST_COOKIE_HEADER);
1401         downloadInfoExtras.putString(
1402                 EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM_SHORT,
1403                 buildTestPackageChecksum());
1404         downloadInfoExtras.putString(
1405                 EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM_SHORT,
1406                 buildTestSignatureChecksum());
1407         return downloadInfoExtras;
1408     }
1409 
buildTestSignatureChecksum()1410     private static String buildTestSignatureChecksum() {
1411         return Base64.encodeToString(TEST_SIGNATURE_CHECKSUM,
1412                 Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
1413     }
1414 }
1415