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