| /* |
| * Copyright (C) 2021 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.managedprovisioning.common; |
| |
| import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_TRIGGER; |
| |
| import static com.android.managedprovisioning.TestUtils.assertIntentsEqual; |
| |
| import static com.google.common.truth.Truth.assertThat; |
| |
| import static org.junit.Assert.assertThrows; |
| |
| import android.app.admin.DevicePolicyManager; |
| import android.content.ComponentName; |
| import android.content.Context; |
| import android.content.Intent; |
| |
| import androidx.test.core.app.ApplicationProvider; |
| import androidx.test.filters.SmallTest; |
| |
| import com.android.managedprovisioning.model.PackageDownloadInfo; |
| import com.android.managedprovisioning.model.ProvisioningParams; |
| |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.JUnit4; |
| |
| |
| @SmallTest |
| @RunWith(JUnit4.class) |
| public class DeviceManagementRoleHolderUpdaterHelperTest { |
| |
| private static final String ROLE_HOLDER_UPDATER_PACKAGE_NAME = "com.test.updater.package"; |
| private static final String ROLE_HOLDER_PACKAGE_NAME = "com.test.roleholder.package"; |
| private static final String ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME = ""; |
| private static final String ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME = null; |
| private static final String ROLE_HOLDER_EMPTY_PACKAGE_NAME = ""; |
| private static final String ROLE_HOLDER_NULL_PACKAGE_NAME = null; |
| private static final int TEST_PROVISIONING_TRIGGER = |
| DevicePolicyManager.PROVISIONING_TRIGGER_QR_CODE; |
| private static final Intent ROLE_HOLDER_UPDATER_INTENT = |
| new Intent(DevicePolicyManager.ACTION_UPDATE_DEVICE_POLICY_MANAGEMENT_ROLE_HOLDER) |
| .setPackage(ROLE_HOLDER_UPDATER_PACKAGE_NAME) |
| .putExtra(EXTRA_PROVISIONING_TRIGGER, TEST_PROVISIONING_TRIGGER); |
| public static final String TEST_EXTRA_KEY = "test_extra_key"; |
| public static final String TEST_EXTRA_VALUE = "test_extra_value"; |
| private static final Intent MANAGED_PROFILE_INTENT = |
| new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) |
| .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE); |
| private static final Intent FINANCED_DEVICE_INTENT = |
| new Intent(DevicePolicyManager.ACTION_PROVISION_FINANCED_DEVICE) |
| .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE); |
| private static final Intent PROVISION_TRUSTED_SOURCE_INTENT = |
| new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE) |
| .putExtra(TEST_EXTRA_KEY, TEST_EXTRA_VALUE); |
| private static final Intent MANAGED_PROVISIONING_INTENT = MANAGED_PROFILE_INTENT; |
| private static final ComponentName ADMIN = new ComponentName("com.test.admin", ".Receiver"); |
| private static final ProvisioningParams PARAMS = ProvisioningParams.Builder.builder() |
| .setProvisioningAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) |
| .setDeviceAdminComponentName(ADMIN) |
| .build(); |
| private static final String TEST_DOWNLOAD_LOCATION = |
| "http://example/dpc.apk"; |
| private static final String TEST_COOKIE_HEADER = |
| "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT"; |
| private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' }; |
| private static final PackageDownloadInfo ROLE_HOLDER_DOWNLOAD_INFO = |
| PackageDownloadInfo.Builder.builder() |
| .setLocation(TEST_DOWNLOAD_LOCATION) |
| .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) |
| .setCookieHeader(TEST_COOKIE_HEADER) |
| .build(); |
| private static final ProvisioningParams PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO = |
| ProvisioningParams.Builder.builder() |
| .setProvisioningAction(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE) |
| .setDeviceAdminComponentName(ADMIN) |
| .setRoleHolderDownloadInfo(ROLE_HOLDER_DOWNLOAD_INFO) |
| .build(); |
| |
| private final Context mContext = ApplicationProvider.getApplicationContext(); |
| private boolean mCanDelegateProvisioningToRoleHolder; |
| |
| @Before |
| public void setUp() { |
| enableRoleHolderDelegation(); |
| } |
| |
| @Test |
| public void roleHolderHelperConstructor_roleHolderPackageNameNull_noExceptionThrown() { |
| createRoleHolderUpdaterHelperWithUpdaterPackageName(ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME); |
| } |
| |
| @Test |
| public void roleHolderHelperConstructor_roleHolderPackageNameEmpty_noExceptionThrown() { |
| createRoleHolderUpdaterHelperWithUpdaterPackageName(ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_works() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isTrue(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_managedProfileIntent_works() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROFILE_INTENT, PARAMS)).isTrue(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_trustedSourceIntent_works() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, PROVISION_TRUSTED_SOURCE_INTENT, PARAMS)).isTrue(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_financedDeviceIntent_returnsFalse() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, FINANCED_DEVICE_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_nullRoleHolderPackageName_returnsFalse() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithRoleHolderPackageName( |
| ROLE_HOLDER_NULL_PACKAGE_NAME); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_emptyRoleHolderPackageName_returnsFalse() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithRoleHolderPackageName( |
| ROLE_HOLDER_EMPTY_PACKAGE_NAME); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_nullRoleHolderUpdaterPackageName_returnsFalse() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithUpdaterPackageName( |
| ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_emptyRoleHolderUpdaterPackageName_returnsFalse() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithUpdaterPackageName( |
| ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_roleHolderDelegationDisabled_returnsFalse() { |
| disableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_roleHolderUpdaterNotInstalled_returnsFalse() { |
| disableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithUpdaterNotInstalled(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, MANAGED_PROVISIONING_INTENT, PARAMS)).isFalse(); |
| } |
| |
| @Test |
| public void shouldStartRoleHolderUpdater_withRoleHolderDownloadInfo_returnsFalse() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper.shouldStartRoleHolderUpdater( |
| mContext, PROVISION_TRUSTED_SOURCE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse(); |
| } |
| |
| @Test |
| public void createRoleHolderUpdaterIntent_works() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertIntentsEqual( |
| roleHolderUpdaterHelper.createRoleHolderUpdaterIntent( |
| /* parentActivityIntent= */ null, |
| TEST_PROVISIONING_TRIGGER), |
| ROLE_HOLDER_UPDATER_INTENT); |
| } |
| |
| @Test |
| public void createRoleHolderUpdaterIntent_nullRoleHolderUpdaterPackageName_throwsException() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithUpdaterPackageName( |
| ROLE_HOLDER_UPDATER_NULL_PACKAGE_NAME); |
| |
| assertThrows(IllegalStateException.class, |
| () -> roleHolderUpdaterHelper.createRoleHolderUpdaterIntent( |
| /* parentActivityIntent= */ null, |
| TEST_PROVISIONING_TRIGGER)); |
| } |
| |
| @Test |
| public void createRoleHolderUpdaterIntent_emptyRoleHolderUpdaterPackageName_throwsException() { |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithUpdaterPackageName( |
| ROLE_HOLDER_UPDATER_EMPTY_PACKAGE_NAME); |
| |
| assertThrows(IllegalStateException.class, |
| () -> roleHolderUpdaterHelper.createRoleHolderUpdaterIntent( |
| /* parentActivityIntent= */ null, |
| TEST_PROVISIONING_TRIGGER)); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_works() { |
| enableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder( |
| PROVISION_TRUSTED_SOURCE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isTrue(); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_noRoleHolderDownloadInfoSupplied_returnsFalse() { |
| enableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder(PROVISION_TRUSTED_SOURCE_INTENT, PARAMS)) |
| .isFalse(); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_managedProfileIntent_returnsFalse() { |
| enableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder( |
| MANAGED_PROFILE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse(); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_financedDeviceIntent_returnsFalse() { |
| enableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder( |
| FINANCED_DEVICE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse(); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_featureFlagDisabled_returnsFalse() { |
| disableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelper(); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder( |
| PROVISION_TRUSTED_SOURCE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse(); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_emptyRoleHolderPackage_returnsFalse() { |
| disableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithRoleHolderPackageName( |
| ROLE_HOLDER_EMPTY_PACKAGE_NAME); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder( |
| PROVISION_TRUSTED_SOURCE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse(); |
| } |
| |
| @Test |
| public void shouldPlatformDownloadRoleHolder_nullRoleHolderPackage_returnsFalse() { |
| disableRoleHolderDelegation(); |
| DeviceManagementRoleHolderUpdaterHelper roleHolderUpdaterHelper = |
| createRoleHolderUpdaterHelperWithRoleHolderPackageName( |
| ROLE_HOLDER_NULL_PACKAGE_NAME); |
| |
| assertThat(roleHolderUpdaterHelper |
| .shouldPlatformDownloadRoleHolder( |
| PROVISION_TRUSTED_SOURCE_INTENT, |
| PARAMS_WITH_ROLE_HOLDER_DOWNLOAD_INFO)).isFalse(); |
| } |
| |
| private FeatureFlagChecker createFeatureFlagChecker() { |
| return () -> mCanDelegateProvisioningToRoleHolder; |
| } |
| |
| private DeviceManagementRoleHolderUpdaterHelper |
| createRoleHolderUpdaterHelperWithUpdaterPackageName( |
| String packageName) { |
| return new DeviceManagementRoleHolderUpdaterHelper( |
| packageName, |
| ROLE_HOLDER_PACKAGE_NAME, |
| /* packageInstallChecker= */ (roleHolderPackageName, packageManager) -> true, |
| createFeatureFlagChecker()); |
| } |
| |
| private DeviceManagementRoleHolderUpdaterHelper |
| createRoleHolderUpdaterHelperWithRoleHolderPackageName( |
| String roleHolderPackageName) { |
| return new DeviceManagementRoleHolderUpdaterHelper( |
| ROLE_HOLDER_UPDATER_PACKAGE_NAME, |
| roleHolderPackageName, |
| /* packageInstallChecker= */ (packageName, packageManager) -> true, |
| createFeatureFlagChecker()); |
| } |
| |
| private DeviceManagementRoleHolderUpdaterHelper createRoleHolderUpdaterHelper() { |
| return new DeviceManagementRoleHolderUpdaterHelper( |
| ROLE_HOLDER_UPDATER_PACKAGE_NAME, |
| ROLE_HOLDER_PACKAGE_NAME, |
| /* packageInstallChecker= */ (roleHolderPackageName, packageManager) -> true, |
| createFeatureFlagChecker()); |
| } |
| |
| private DeviceManagementRoleHolderUpdaterHelper |
| createRoleHolderUpdaterHelperWithUpdaterNotInstalled() { |
| return new DeviceManagementRoleHolderUpdaterHelper( |
| ROLE_HOLDER_UPDATER_PACKAGE_NAME, |
| ROLE_HOLDER_PACKAGE_NAME, |
| /* packageInstallChecker= */ (roleHolderPackageName, packageManager) -> false, |
| createFeatureFlagChecker()); |
| } |
| |
| private void enableRoleHolderDelegation() { |
| mCanDelegateProvisioningToRoleHolder = true; |
| } |
| |
| private void disableRoleHolderDelegation() { |
| mCanDelegateProvisioningToRoleHolder = false; |
| } |
| } |