1 /*
2  * Copyright 2016, The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.managedprovisioning.model;
17 
18 import static android.app.admin.DevicePolicyManager.PROVISIONING_MODE_FULLY_MANAGED_DEVICE;
19 import static android.app.admin.DevicePolicyManager.PROVISIONING_MODE_MANAGED_PROFILE;
20 import static android.app.admin.DevicePolicyManager.PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE;
21 import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_CLOUD_ENROLLMENT;
22 import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_PERSISTENT_DEVICE_OWNER;
23 import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_QR_CODE;
24 import static android.app.admin.DevicePolicyManager.PROVISIONING_TRIGGER_UNSPECIFIED;
25 
26 import static com.android.managedprovisioning.TestUtils.createTestAdminExtras;
27 import static com.android.managedprovisioning.model.ProvisioningParams.FLOW_TYPE_ADMIN_INTEGRATED;
28 import static com.android.managedprovisioning.model.ProvisioningParams.FLOW_TYPE_LEGACY;
29 import static com.android.managedprovisioning.model.ProvisioningParams.FLOW_TYPE_UNSPECIFIED;
30 
31 import static com.google.common.truth.Truth.assertThat;
32 
33 import static org.mockito.ArgumentMatchers.eq;
34 import static org.mockito.ArgumentMatchers.nullable;
35 import static org.mockito.Mockito.when;
36 
37 import android.accounts.Account;
38 import android.app.admin.DevicePolicyManager;
39 import android.content.ComponentName;
40 import android.os.Parcel;
41 import android.os.UserHandle;
42 import android.test.AndroidTestCase;
43 
44 import androidx.test.filters.SmallTest;
45 
46 import com.android.managedprovisioning.common.IllegalProvisioningArgumentException;
47 import com.android.managedprovisioning.common.Utils;
48 
49 import org.mockito.Mock;
50 import org.mockito.MockitoAnnotations;
51 
52 import java.io.File;
53 import java.util.ArrayList;
54 import java.util.List;
55 import java.util.Locale;
56 
57 /** Tests for {@link ProvisioningParams} */
58 public class ProvisioningParamsTest extends AndroidTestCase {
59     private static final String TEST_PROVISIONING_ACTION =
60             DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE;
61 
62     private static final String TEST_PACKAGE_NAME = "com.afwsamples.testdpc";
63     private static final ComponentName TEST_COMPONENT_NAME =
64             ComponentName.unflattenFromString(
65                     "com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver");
66     private static final long TEST_LOCAL_TIME = 1456939524713L;
67     private static final Locale TEST_LOCALE = Locale.UK;
68     private static final String TEST_TIME_ZONE = "GMT";
69     private static final boolean TEST_STARTED_BY_TRUSTED_SOURCE = true;
70     private static final boolean TEST_IS_NFC = true;
71     private static final boolean TEST_LEAVE_ALL_SYSTEM_APP_ENABLED = true;
72     private static final boolean TEST_SKIP_ENCRYPTION = true;
73     private static final Account TEST_ACCOUNT_TO_MIGRATE =
74             new Account("user@gmail.com", "com.google");
75     private static final boolean TEST_USE_MOBILE_DATA = true;
76 
77     // Wifi info
78     private static final String TEST_SSID = "TestWifi";
79     private static final boolean TEST_HIDDEN = true;
80     private static final String TEST_SECURITY_TYPE = "WPA2";
81     private static final String TEST_PASSWORD = "GoogleRock";
82     private static final String TEST_PROXY_HOST = "testhost.com";
83     private static final int TEST_PROXY_PORT = 7689;
84     private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com";
85     private static final String TEST_PAC_URL = "pac.test.com";
86     private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder()
87             .setSsid(TEST_SSID)
88             .setHidden(TEST_HIDDEN)
89             .setSecurityType(TEST_SECURITY_TYPE)
90             .setPassword(TEST_PASSWORD)
91             .setProxyHost(TEST_PROXY_HOST)
92             .setProxyPort(TEST_PROXY_PORT)
93             .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS)
94             .setPacUrl(TEST_PAC_URL)
95             .build();
96 
97     // Device admin package download info
98     private static final String TEST_DOWNLOAD_LOCATION =
99             "http://example/dpc.apk";
100     private static final String TEST_COOKIE_HEADER =
101             "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT";
102     private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' };
103     private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' };
104     private static final int TEST_MIN_SUPPORT_VERSION = 17689;
105     private static final PackageDownloadInfo TEST_DOWNLOAD_INFO =
106             PackageDownloadInfo.Builder.builder()
107                     .setLocation(TEST_DOWNLOAD_LOCATION)
108                     .setCookieHeader(TEST_COOKIE_HEADER)
109                     .setPackageChecksum(TEST_PACKAGE_CHECKSUM)
110                     .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM)
111                     .setMinVersion(TEST_MIN_SUPPORT_VERSION)
112                     .build();
113 
114     @Mock
115     private Utils mUtils;
116 
117     @Override
setUp()118     protected void setUp() throws Exception {
119         super.setUp();
120         MockitoAnnotations.initMocks(this);
121     }
122 
123     @SmallTest
testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName()124     public void testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName() {
125         // WHEN the ProvisioningParams is constructed by with neither a package name nor a component
126         // name
127         try {
128             ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder()
129                     .setProvisioningAction(TEST_PROVISIONING_ACTION)
130                     .build();
131             fail("Package name or component name is mandatory.");
132         } catch (IllegalArgumentException e) {
133             // THEN the ProvisioningParams fails to construct.
134         }
135     }
136 
137     @SmallTest
testFailToConstructProvisioningParamsWithoutProvisioningAction()138     public void testFailToConstructProvisioningParamsWithoutProvisioningAction() {
139         // WHEN the ProvisioningParams is constructed by without a provisioning action.
140         try {
141             ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder()
142                     .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
143                     .build();
144             fail("Provisioning action is mandatory");
145         } catch (NullPointerException e) {
146             // THEN the ProvisioningParams fails to construct.
147         }
148     }
149 
150     @SmallTest
testEquals()151     public void testEquals() {
152         // GIVEN 2 ProvisioningParams objects created by the same set of parameters
153         ProvisioningParams provisioningParams1 = getCompleteProvisioningParams();
154         ProvisioningParams provisioningParams2 = getCompleteProvisioningParams();
155 
156         // WHEN these two objects compare.
157         // THEN they are the same.
158         assertThat(provisioningParams1).isEqualTo(provisioningParams2);
159     }
160 
161     @SmallTest
testNotEquals()162     public void testNotEquals() {
163         // GIVEN 2 ProvisioningParams objects created by different sets of parameters
164         ProvisioningParams provisioningParams1 = ProvisioningParams.Builder.builder()
165                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
166                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
167                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
168                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
169                 .setLocalTime(TEST_LOCAL_TIME)
170                 .setLocale(TEST_LOCALE)
171                 .setTimeZone(TEST_TIME_ZONE)
172                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
173                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
174                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
175                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
176                 .setWifiInfo(TEST_WIFI_INFO)
177                 .setUseMobileData(TEST_USE_MOBILE_DATA)
178                 .setAdminExtrasBundle(createTestAdminExtras())
179                 .build();
180         ProvisioningParams provisioningParams2 = ProvisioningParams.Builder.builder()
181                 .setProvisioningAction("different.action")
182                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
183                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
184                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
185                 .setLocalTime(TEST_LOCAL_TIME)
186                 .setLocale(TEST_LOCALE)
187                 .setTimeZone(TEST_TIME_ZONE)
188                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
189                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
190                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
191                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
192                 .setWifiInfo(TEST_WIFI_INFO)
193                 .setUseMobileData(TEST_USE_MOBILE_DATA)
194                 .setAdminExtrasBundle(createTestAdminExtras())
195                 .build();
196 
197         // WHEN these two objects compare.
198         // THEN they are not the same.
199         assertThat(provisioningParams1).isNotEqualTo(provisioningParams2);
200     }
201 
202     @SmallTest
testSaveAndRestoreComplete()203     public void testSaveAndRestoreComplete() throws Exception {
204         testSaveAndRestore(getCompleteProvisioningParams());
205     }
206 
207     // Testing with a minimum set of parameters to cover all null use cases.
208     @SmallTest
testSaveAndRestoreMinimalist()209     public void testSaveAndRestoreMinimalist() throws Exception {
210         testSaveAndRestore(ProvisioningParams.Builder.builder()
211                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
212                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
213                 .build());
214     }
215 
testSaveAndRestore(ProvisioningParams original)216     private void testSaveAndRestore(ProvisioningParams original) {
217         // GIVEN a ProvisioningParams object
218         // WHEN the ProvisioningParams is written to xml and then read back
219         File file = new File(mContext.getFilesDir(), "test_store.xml");
220         original.save(file);
221         ProvisioningParams copy = ProvisioningParams.load(file);
222         // THEN the same ProvisioningParams is obtained
223         assertThat(original).isEqualTo(copy);
224     }
225 
226     @SmallTest
testParceable()227     public void testParceable() {
228         // GIVEN a ProvisioningParams object.
229         ProvisioningParams expectedProvisioningParams = getCompleteProvisioningParams();
230 
231         // WHEN the ProvisioningParams is written to parcel and then read back.
232         Parcel parcel = Parcel.obtain();
233         expectedProvisioningParams.writeToParcel(parcel, 0);
234         parcel.setDataPosition(0);
235         ProvisioningParams actualProvisioningParams =
236                 ProvisioningParams.CREATOR.createFromParcel(parcel);
237 
238         // THEN the same ProvisioningParams is obtained.
239         assertThat(expectedProvisioningParams).isEqualTo(actualProvisioningParams);
240     }
241 
242     @SmallTest
testInferDeviceAdminComponentName_componentNameIsGiven()243     public void testInferDeviceAdminComponentName_componentNameIsGiven()
244             throws IllegalProvisioningArgumentException {
245         ProvisioningParams provisioningParams = new
246                 ProvisioningParams.Builder()
247                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
248                 .setProvisioningAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)
249                 .build();
250 
251         assertThat(TEST_COMPONENT_NAME)
252                 .isEqualTo(provisioningParams.inferDeviceAdminComponentName(
253                         mUtils, mContext, UserHandle.myUserId()));
254     }
255 
256     @SmallTest
testInferDeviceAdminComponentName_componentNameIsNotGiven()257     public void testInferDeviceAdminComponentName_componentNameIsNotGiven()
258             throws IllegalProvisioningArgumentException {
259         ProvisioningParams provisioningParams = new
260                 ProvisioningParams.Builder()
261                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
262                 .setProvisioningAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE)
263                 .build();
264 
265         when(mUtils.findDeviceAdmin(eq(TEST_PACKAGE_NAME), nullable(ComponentName.class),
266                 eq(mContext), eq(UserHandle.myUserId()))).thenReturn(TEST_COMPONENT_NAME);
267 
268         assertThat(TEST_COMPONENT_NAME)
269                 .isEqualTo(provisioningParams.inferDeviceAdminComponentName(
270                         mUtils, mContext, UserHandle.myUserId()));
271     }
272 
273     @SmallTest
testSetUseMobileData_true()274     public void testSetUseMobileData_true() {
275         ProvisioningParams provisioningParams =
276                 createDefaultProvisioningParamsBuilder().setUseMobileData(true).build();
277         assertThat(provisioningParams.useMobileData).isTrue();
278     }
279 
280     @SmallTest
testSetUseMobileData_false()281     public void testSetUseMobileData_false() {
282         ProvisioningParams provisioningParams =
283                 createDefaultProvisioningParamsBuilder().setUseMobileData(false).build();
284         assertThat(provisioningParams.useMobileData).isFalse();
285     }
286 
287     @SmallTest
testSetUseMobileData_defaultsToFalse()288     public void testSetUseMobileData_defaultsToFalse() {
289         assertThat(createDefaultProvisioningParamsBuilder().build().useMobileData).isFalse();
290     }
291 
292     @SmallTest
testSetFlowType_legacy_areEqual()293     public void testSetFlowType_legacy_areEqual() {
294         ProvisioningParams provisioningParams =
295                 createDefaultProvisioningParamsBuilder()
296                         .setFlowType(FLOW_TYPE_LEGACY).build();
297 
298         assertThat(provisioningParams.flowType).isEqualTo(FLOW_TYPE_LEGACY);
299     }
300 
301     @SmallTest
testSetFlowType_adminIntegrated_areEqual()302     public void testSetFlowType_adminIntegrated_areEqual() {
303         ProvisioningParams provisioningParams =
304                 createDefaultProvisioningParamsBuilder()
305                         .setFlowType(FLOW_TYPE_ADMIN_INTEGRATED).build();
306 
307         assertThat(provisioningParams.flowType).isEqualTo(FLOW_TYPE_ADMIN_INTEGRATED);
308     }
309 
310     @SmallTest
testSetFlowType_defaultsToUnspecified()311     public void testSetFlowType_defaultsToUnspecified() {
312         assertThat(createDefaultProvisioningParamsBuilder().build().flowType)
313                 .isEqualTo(FLOW_TYPE_UNSPECIFIED);
314     }
315 
316     @SmallTest
testSetProvisioningTrigger_cloudEnrollment_areEqual()317     public void testSetProvisioningTrigger_cloudEnrollment_areEqual() {
318         ProvisioningParams provisioningParams =
319                 createDefaultProvisioningParamsBuilder()
320                         .setProvisioningTrigger(PROVISIONING_TRIGGER_CLOUD_ENROLLMENT).build();
321 
322         assertThat(provisioningParams.provisioningTrigger)
323                 .isEqualTo(PROVISIONING_TRIGGER_CLOUD_ENROLLMENT);
324     }
325 
326     @SmallTest
testSetProvisioningTrigger_qrCode_areEqual()327     public void testSetProvisioningTrigger_qrCode_areEqual() {
328         ProvisioningParams provisioningParams =
329                 createDefaultProvisioningParamsBuilder()
330                         .setProvisioningTrigger(PROVISIONING_TRIGGER_QR_CODE).build();
331 
332         assertThat(provisioningParams.provisioningTrigger).isEqualTo(PROVISIONING_TRIGGER_QR_CODE);
333     }
334 
335     @SmallTest
testSetProvisioningTrigger_persistentDeviceOwner_areEqual()336     public void testSetProvisioningTrigger_persistentDeviceOwner_areEqual() {
337         ProvisioningParams provisioningParams =
338                 createDefaultProvisioningParamsBuilder()
339                         .setProvisioningTrigger(PROVISIONING_TRIGGER_PERSISTENT_DEVICE_OWNER)
340                         .build();
341 
342         assertThat(provisioningParams.provisioningTrigger)
343                 .isEqualTo(PROVISIONING_TRIGGER_PERSISTENT_DEVICE_OWNER);
344     }
345 
346     @SmallTest
testSetProvisioningTrigger_defaultsToUnspecified()347     public void testSetProvisioningTrigger_defaultsToUnspecified() {
348         assertThat(createDefaultProvisioningParamsBuilder().build().provisioningTrigger)
349                 .isEqualTo(PROVISIONING_TRIGGER_UNSPECIFIED);
350     }
351 
352     @SmallTest
testSetAllowedProvisioningModes_defaultsToEmptyArray()353     public void testSetAllowedProvisioningModes_defaultsToEmptyArray() {
354         assertThat(createDefaultProvisioningParamsBuilder().build().allowedProvisioningModes)
355                 .isEmpty();
356     }
357 
358     @SmallTest
testSetAllowedProvisioningModes_personallyOwned_areEqual()359     public void testSetAllowedProvisioningModes_personallyOwned_areEqual() {
360         ProvisioningParams params =
361                 createDefaultProvisioningParamsBuilder()
362                         .setAllowedProvisioningModes(new ArrayList<>(List.of(
363                                 PROVISIONING_MODE_MANAGED_PROFILE)))
364                         .build();
365 
366         assertThat(params.allowedProvisioningModes)
367                 .containsExactly(PROVISIONING_MODE_MANAGED_PROFILE);
368     }
369 
370     @SmallTest
testSetAllowedProvisioningModes_organizationOwned_areEqual()371     public void testSetAllowedProvisioningModes_organizationOwned_areEqual() {
372         ProvisioningParams params =
373                 createDefaultProvisioningParamsBuilder()
374                         .setAllowedProvisioningModes(new ArrayList<>(List.of(
375                                 PROVISIONING_MODE_MANAGED_PROFILE,
376                                 PROVISIONING_MODE_FULLY_MANAGED_DEVICE)))
377                         .build();
378 
379         assertThat(params.allowedProvisioningModes).containsExactly(
380                 PROVISIONING_MODE_MANAGED_PROFILE,
381                 PROVISIONING_MODE_FULLY_MANAGED_DEVICE);
382     }
383 
384     @SmallTest
testSetAllowedProvisioningModes_organizationAndPersonallyOwned_areEqual()385     public void testSetAllowedProvisioningModes_organizationAndPersonallyOwned_areEqual() {
386         ProvisioningParams params =
387                 createDefaultProvisioningParamsBuilder()
388                         .setAllowedProvisioningModes(new ArrayList<>(List.of(
389                                 PROVISIONING_MODE_MANAGED_PROFILE,
390                                 PROVISIONING_MODE_FULLY_MANAGED_DEVICE,
391                                 PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE)))
392                         .build();
393 
394         assertThat(params.allowedProvisioningModes).containsExactly(
395                 PROVISIONING_MODE_MANAGED_PROFILE,
396                 PROVISIONING_MODE_FULLY_MANAGED_DEVICE,
397                 PROVISIONING_MODE_MANAGED_PROFILE_ON_PERSONAL_DEVICE);
398     }
399 
400     @SmallTest
testSetSkipOwnershipDisclaimer_setTrue_isTrue()401     public void testSetSkipOwnershipDisclaimer_setTrue_isTrue() {
402         ProvisioningParams provisioningParams =
403                 createDefaultProvisioningParamsBuilder()
404                         .setSkipOwnershipDisclaimer(true)
405                         .build();
406 
407         assertThat(provisioningParams.skipOwnershipDisclaimer).isTrue();
408     }
409 
410     @SmallTest
testSetSkipOwnershipDisclaimer_setFalse_isFalse()411     public void testSetSkipOwnershipDisclaimer_setFalse_isFalse() {
412         ProvisioningParams provisioningParams =
413                 createDefaultProvisioningParamsBuilder()
414                         .setSkipOwnershipDisclaimer(false)
415                         .build();
416 
417         assertThat(provisioningParams.skipOwnershipDisclaimer).isFalse();
418     }
419 
420     @SmallTest
testSetSkipOwnershipDisclaimer_notSet_isFalse()421     public void testSetSkipOwnershipDisclaimer_notSet_isFalse() {
422         ProvisioningParams provisioningParams =
423                 createDefaultProvisioningParamsBuilder()
424                         .build();
425 
426         assertThat(provisioningParams.skipOwnershipDisclaimer).isFalse();
427     }
428 
429     @SmallTest
testSetReturnBeforePolicyCompliance_setTrue_isTrue()430     public void testSetReturnBeforePolicyCompliance_setTrue_isTrue() {
431         ProvisioningParams provisioningParams =
432                 createDefaultProvisioningParamsBuilder()
433                         .setReturnBeforePolicyCompliance(true)
434                         .build();
435 
436         assertThat(provisioningParams.returnBeforePolicyCompliance).isTrue();
437     }
438 
439     @SmallTest
testSetReturnBeforePolicyCompliance_setFalse_isFalse()440     public void testSetReturnBeforePolicyCompliance_setFalse_isFalse() {
441         ProvisioningParams provisioningParams =
442                 createDefaultProvisioningParamsBuilder()
443                         .setReturnBeforePolicyCompliance(false)
444                         .build();
445 
446         assertThat(provisioningParams.returnBeforePolicyCompliance).isFalse();
447     }
448 
449     @SmallTest
testSetReturnBeforePolicyCompliance_notSet_isFalse()450     public void testSetReturnBeforePolicyCompliance_notSet_isFalse() {
451         ProvisioningParams provisioningParams =
452                 createDefaultProvisioningParamsBuilder()
453                         .build();
454 
455         assertThat(provisioningParams.returnBeforePolicyCompliance).isFalse();
456     }
457 
458     @SmallTest
testDeviceOwnerDoesNotOptOutOfSensorsPermissionGrantsByDefault()459     public void testDeviceOwnerDoesNotOptOutOfSensorsPermissionGrantsByDefault() {
460         ProvisioningParams params = createDefaultProvisioningParamsBuilder().build();
461         assertThat(params.deviceOwnerPermissionGrantOptOut).isFalse();
462     }
463 
464     @SmallTest
testDeviceOwnerCanOptOutOfSensorsPermissionGrants()465     public void testDeviceOwnerCanOptOutOfSensorsPermissionGrants() {
466         ProvisioningParams params = createDefaultProvisioningParamsBuilder()
467                 .setDeviceOwnerPermissionGrantOptOut(true).build();
468         assertThat(params.deviceOwnerPermissionGrantOptOut).isTrue();
469     }
470 
471     @SmallTest
testSetAllowProvisioningAfterUserSetupComplete_setTrue_isTrue()472     public void testSetAllowProvisioningAfterUserSetupComplete_setTrue_isTrue() {
473         ProvisioningParams provisioningParams =
474                 createDefaultProvisioningParamsBuilder()
475                         .setAllowProvisioningAfterUserSetupComplete(true)
476                         .build();
477 
478         assertThat(provisioningParams.allowProvisioningAfterUserSetupComplete).isTrue();
479     }
480 
481     @SmallTest
testSetAllowProvisioningAfterUserSetupComplete_setFalse_isFalse()482     public void testSetAllowProvisioningAfterUserSetupComplete_setFalse_isFalse() {
483         ProvisioningParams provisioningParams =
484                 createDefaultProvisioningParamsBuilder()
485                         .setAllowProvisioningAfterUserSetupComplete(false)
486                         .build();
487 
488         assertThat(provisioningParams.allowProvisioningAfterUserSetupComplete).isFalse();
489     }
490 
491     @SmallTest
testSetAllowProvisioningAfterUserSetupComplete_notSet_isFalse()492     public void testSetAllowProvisioningAfterUserSetupComplete_notSet_isFalse() {
493         ProvisioningParams provisioningParams =
494                 createDefaultProvisioningParamsBuilder()
495                         .build();
496 
497         assertThat(provisioningParams.allowProvisioningAfterUserSetupComplete).isFalse();
498     }
499 
createDefaultProvisioningParamsBuilder()500     private ProvisioningParams.Builder createDefaultProvisioningParamsBuilder() {
501         return ProvisioningParams.Builder
502                 .builder()
503                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
504                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME);
505     }
506 
getCompleteProvisioningParams()507     private ProvisioningParams getCompleteProvisioningParams() {
508         return ProvisioningParams.Builder.builder()
509                 .setProvisioningAction(TEST_PROVISIONING_ACTION)
510                 .setDeviceAdminPackageName(TEST_PACKAGE_NAME)
511                 .setDeviceAdminComponentName(TEST_COMPONENT_NAME)
512                 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO)
513                 .setLocalTime(TEST_LOCAL_TIME)
514                 .setLocale(TEST_LOCALE)
515                 .setTimeZone(TEST_TIME_ZONE)
516                 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE)
517                 .setIsNfc(TEST_IS_NFC)
518                 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED)
519                 .setSkipEncryption(TEST_SKIP_ENCRYPTION)
520                 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE)
521                 .setWifiInfo(TEST_WIFI_INFO)
522                 .setUseMobileData(TEST_USE_MOBILE_DATA)
523                 .setAdminExtrasBundle(createTestAdminExtras())
524                 .setIsOrganizationOwnedProvisioning(true)
525                 .setFlowType(FLOW_TYPE_ADMIN_INTEGRATED)
526                 .setProvisioningTrigger(DevicePolicyManager.PROVISIONING_TRIGGER_QR_CODE)
527                 .setAllowProvisioningAfterUserSetupComplete(true)
528                 .build();
529     }
530 }
531