/* * Copyright (C) 2020 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.ACTION_GET_PROVISIONING_MODE; import static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; import static com.google.common.truth.Truth.assertThat; import static org.robolectric.Shadows.shadowOf; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.os.Bundle; import androidx.test.core.app.ApplicationProvider; import com.android.managedprovisioning.model.ProvisioningParams; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.Robolectric; import org.robolectric.RobolectricTestRunner; /** * Tests for {@link GetProvisioningModeUtils}. */ @RunWith(RobolectricTestRunner.class) public class GetProvisioningModeUtilsTest { private static final String TEST_MDM_PACKAGE_NAME = "mdm.package.name"; private static final String TEST_MDM_ADMIN_RECEIVER = TEST_MDM_PACKAGE_NAME + ".AdminReceiver"; private static final ComponentName TEST_MDM_ADMIN = new ComponentName(TEST_MDM_PACKAGE_NAME, TEST_MDM_ADMIN_RECEIVER); private static final ProvisioningParams PARAMS = ProvisioningParams.Builder.builder() .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE) .setDeviceAdminComponentName(TEST_MDM_ADMIN) .build(); private static final String STRING_EXTRA_KEY = "myStringExtra"; private static final String STRING_EXTRA_VALUE = "some string"; private static final String INT_EXTRA_KEY = "myIntExtra"; private static final int INT_EXTRA_VALUE = 2; private final Context mContext = ApplicationProvider.getApplicationContext(); private final GetProvisioningModeUtils mProvisioningModeUtils = new GetProvisioningModeUtils(); private final TransitionHelper mTransitionHelper = new TransitionHelper(); @Test public void isGetProvisioningModeActivityResolvable_resolvableActivity_returnsTrue() { Intent intentGetMode = new Intent(ACTION_GET_PROVISIONING_MODE); intentGetMode.setPackage(TEST_MDM_PACKAGE_NAME); ResolveInfo info = createFakeResolveInfo(); shadowOf(mContext.getPackageManager()).addResolveInfoForIntent(intentGetMode, info); assertThat(mProvisioningModeUtils .isGetProvisioningModeActivityResolvable(mContext, PARAMS)).isTrue(); } @Test public void isGetProvisioningModeActivityResolvable_notResolvableActivity_returnsFalse() { Intent intentGetMode = new Intent(ACTION_GET_PROVISIONING_MODE); intentGetMode.setPackage(TEST_MDM_PACKAGE_NAME); assertThat(mProvisioningModeUtils .isGetProvisioningModeActivityResolvable(mContext, PARAMS)).isFalse(); } @Test public void startGetProvisioningModeActivityIfResolved_resolvableActivity_returnsTrue() { Intent intentGetMode = new Intent(ACTION_GET_PROVISIONING_MODE); intentGetMode.setPackage(TEST_MDM_PACKAGE_NAME); ResolveInfo info = createFakeResolveInfo(); shadowOf(mContext.getPackageManager()).addResolveInfoForIntent(intentGetMode, info); int requestCode = 1; Activity parentActivity = Robolectric.buildActivity(Activity.class).create().get(); assertThat(mProvisioningModeUtils .startGetProvisioningModeActivityIfResolved( parentActivity, PARAMS, new Bundle(), requestCode, mTransitionHelper)).isTrue(); } @Test public void startGetProvisioningModeActivityIfResolved_resolvableActivity_startsGetProvisioningModeIntent() { Intent intentGetMode = new Intent(ACTION_GET_PROVISIONING_MODE); intentGetMode.setPackage(TEST_MDM_PACKAGE_NAME); ResolveInfo info = createFakeResolveInfo(); shadowOf(mContext.getPackageManager()).addResolveInfoForIntent(intentGetMode, info); int requestCode = 1; Activity parentActivity = Robolectric.buildActivity(Activity.class).create().get(); mProvisioningModeUtils.startGetProvisioningModeActivityIfResolved( parentActivity, PARAMS, new Bundle(), requestCode, mTransitionHelper); Intent startedIntent = shadowOf(parentActivity).peekNextStartedActivity(); assertThat(startedIntent.getAction()) .isEqualTo(ACTION_GET_PROVISIONING_MODE); assertThat(startedIntent.getPackage()) .isEqualTo(TEST_MDM_PACKAGE_NAME); } @Test public void startGetProvisioningModeActivityIfResolved_resolvableActivity_includesAdditionalExtras() { Intent intentGetMode = new Intent(ACTION_GET_PROVISIONING_MODE); intentGetMode.setPackage(TEST_MDM_PACKAGE_NAME); ResolveInfo info = createFakeResolveInfo(); shadowOf(mContext.getPackageManager()).addResolveInfoForIntent(intentGetMode, info); int requestCode = 1; Activity parentActivity = Robolectric.buildActivity(Activity.class).create().get(); Bundle additionalExtras = new Bundle(); additionalExtras.putInt(INT_EXTRA_KEY, INT_EXTRA_VALUE); additionalExtras.putString(STRING_EXTRA_KEY, STRING_EXTRA_VALUE); mProvisioningModeUtils.startGetProvisioningModeActivityIfResolved( parentActivity, PARAMS, additionalExtras, requestCode, mTransitionHelper); Bundle extras = shadowOf(parentActivity).peekNextStartedActivity().getExtras(); assertThat(extras.getInt(INT_EXTRA_KEY)).isEqualTo(INT_EXTRA_VALUE); assertThat(extras.getString(STRING_EXTRA_KEY)).isEqualTo(STRING_EXTRA_VALUE); } private ResolveInfo createFakeResolveInfo() { ResolveInfo info = new ResolveInfo(); ApplicationInfo applicationInfo = new ApplicationInfo(); applicationInfo.packageName = TEST_MDM_PACKAGE_NAME; ActivityInfo activityInfo = new ActivityInfo(); activityInfo.applicationInfo = applicationInfo; activityInfo.name = "SomeClassName"; info.activityInfo = activityInfo; return info; } }