149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz/* 249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * Copyright 2016, The Android Open Source Project 349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * 449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * Licensed under the Apache License, Version 2.0 (the "License"); 549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * you may not use this file except in compliance with the License. 649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * You may obtain a copy of the License at 749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * 849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * http://www.apache.org/licenses/LICENSE-2.0 949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * 1049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * Unless required by applicable law or agreed to in writing, software 1149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * distributed under the License is distributed on an "AS IS" BASIS, 1249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * See the License for the specific language governing permissions and 1449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * limitations under the License. 1549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz */ 1649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 1749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzpackage com.android.managedprovisioning.preprovisioning; 1849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 1949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_DEVICE; 2049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; 2149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.app.admin.DevicePolicyManager.ACTION_START_ENCRYPTION; 2249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.support.test.espresso.Espresso.onView; 2349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.support.test.espresso.action.ViewActions.click; 2449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.support.test.espresso.assertion.ViewAssertions.matches; 2549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.support.test.espresso.matcher.ViewMatchers.withId; 2649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static android.support.test.espresso.matcher.ViewMatchers.withText; 27a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franzimport static org.junit.Assert.assertEquals; 2849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static org.junit.Assert.assertTrue; 2949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport static org.mockito.Mockito.verify; 3049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 31b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzakimport android.app.Activity; 3249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport android.content.ComponentName; 3349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport android.content.Context; 3449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport android.content.Intent; 35b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzakimport android.graphics.Color; 3649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport android.provider.Settings; 3749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport android.support.test.InstrumentationRegistry; 3849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport android.support.test.filters.SmallTest; 39a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franzimport android.support.test.rule.ActivityTestRule; 4049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 4149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport com.android.managedprovisioning.R; 4249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport com.android.managedprovisioning.TestInstrumentationRunner; 43b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzakimport com.android.managedprovisioning.common.CustomizationVerifier; 4449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams; 4549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 4680ae370242ebd15119d1a6e9e5026e036bfe1cf7Victor Changimport org.junit.After; 4749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.junit.AfterClass; 4849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.junit.Before; 4949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.junit.BeforeClass; 5049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.junit.Rule; 5149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.junit.Test; 5249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.mockito.Mock; 5349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzimport org.mockito.MockitoAnnotations; 5449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 5549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz/** 5649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz * Unit tests for {@link EncryptDeviceActivity}. 5749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz */ 5849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz@SmallTest 5949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franzpublic class EncryptDeviceActivityTest { 6049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 6149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz private static final ComponentName ADMIN = new ComponentName("com.test.admin", ".Receiver"); 62b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak private static final int SAMPLE_COLOR = Color.parseColor("#d40000"); 6349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz private static final ProvisioningParams PROFILE_OWNER_PARAMS = new ProvisioningParams.Builder() 6449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE) 65b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak .setMainColor(SAMPLE_COLOR) 6649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .setDeviceAdminComponentName(ADMIN) 6749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .build(); 6849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz private static final ProvisioningParams DEVICE_OWNER_PARAMS = new ProvisioningParams.Builder() 6949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .setProvisioningAction(ACTION_PROVISION_MANAGED_DEVICE) 70b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak .setMainColor(SAMPLE_COLOR) 7149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .setDeviceAdminComponentName(ADMIN) 7249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .build(); 7349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz private static final Intent PROFILE_OWNER_INTENT = new Intent() 7449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .putExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS, PROFILE_OWNER_PARAMS); 7549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz private static final Intent DEVICE_OWNER_INTENT = new Intent() 7649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .putExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS, DEVICE_OWNER_PARAMS); 7749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 7849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @Rule 79a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz public ActivityTestRule<EncryptDeviceActivity> mActivityRule = new ActivityTestRule<>( 8049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz EncryptDeviceActivity.class, true /* Initial touch mode */, 8149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz false /* Lazily launch activity */); 8249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 8349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @Mock EncryptionController mController; 8449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz private static int sRotationLocked; 8549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 8649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @BeforeClass 8749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz public static void setUpClass() { 8849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // Stop the activity from rotating in order to keep hold of the context 8949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Context context = InstrumentationRegistry.getTargetContext(); 9049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 9149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz sRotationLocked = Settings.System.getInt(context.getContentResolver(), 9249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Settings.System.ACCELEROMETER_ROTATION, 0); 9349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Settings.System.putInt(context.getContentResolver(), 9449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Settings.System.ACCELEROMETER_ROTATION, 0); 9549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz } 9649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 9749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @AfterClass 9849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz public static void tearDownClass() { 9949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // Reset the rotation value back to what it was before the test 10049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Context context = InstrumentationRegistry.getTargetContext(); 10149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 10249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Settings.System.putInt(context.getContentResolver(), 10349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz Settings.System.ACCELEROMETER_ROTATION, sRotationLocked); 10449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz } 10549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 10649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @Before 10749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz public void setUp() { 10849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz MockitoAnnotations.initMocks(this); 10949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 11049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz TestEncryptionActivity.sController = mController; 111a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz TestEncryptionActivity.sLastLaunchedIntent = null; 11249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 11349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz TestInstrumentationRunner.registerReplacedActivity(EncryptDeviceActivity.class, 11449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz TestEncryptionActivity.class); 11549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz } 11649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 11780ae370242ebd15119d1a6e9e5026e036bfe1cf7Victor Chang @After 11880ae370242ebd15119d1a6e9e5026e036bfe1cf7Victor Chang public void tearDown() { 11980ae370242ebd15119d1a6e9e5026e036bfe1cf7Victor Chang TestInstrumentationRunner.unregisterReplacedActivity(EncryptDeviceActivity.class); 12080ae370242ebd15119d1a6e9e5026e036bfe1cf7Victor Chang } 12180ae370242ebd15119d1a6e9e5026e036bfe1cf7Victor Chang 12249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @Test 12349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz public void testProfileOwner() { 12449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // WHEN launching EncryptDeviceActivity with a profile owner intent 125b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak Activity activity = mActivityRule.launchActivity(PROFILE_OWNER_INTENT); 12649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 12749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // THEN the profile owner description should be present 12849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz onView(withId(R.id.encrypt_main_text)) 12949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .check(matches(withText(R.string.encrypt_device_text_for_profile_owner_setup))); 13049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 131b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak // status bar color matches the one from intent parameters 132b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak new CustomizationVerifier(activity).assertStatusBarColorCorrect(SAMPLE_COLOR); 133b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak 13449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // WHEN pressing the encrypt button 13549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz onView(withId(R.id.encrypt_button)).perform(click()); 13649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 13749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // THEN encryption reminder should be set 13849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz verify(mController).setEncryptionReminder(PROFILE_OWNER_PARAMS); 13949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 14049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // THEN encryption activity should be started 141a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz assertEquals(ACTION_START_ENCRYPTION, 142a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz TestEncryptionActivity.sLastLaunchedIntent.getAction()); 14349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz } 14449dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 14549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz @Test 14649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz public void testDeviceOwner() { 14749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // WHEN launching EncryptDeviceActivity with a profile owner intent 148b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak Activity activity = mActivityRule.launchActivity(DEVICE_OWNER_INTENT); 14949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 15049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // THEN the profile owner description should be present 15149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz onView(withId(R.id.encrypt_main_text)) 15249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz .check(matches(withText(R.string.encrypt_device_text_for_device_owner_setup))); 15349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 154b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak // status bar color matches the one from intent parameters 155b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak new CustomizationVerifier(activity).assertStatusBarColorCorrect(SAMPLE_COLOR); 156b0e275f0511cfe10c698d6a260fcfdb194e7c810Jakub Gielzak 15749dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // WHEN pressing the encrypt button 15849dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz onView(withId(R.id.encrypt_button)).perform(click()); 15949dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 16049dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // THEN encryption reminder should be set 16149dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz verify(mController).setEncryptionReminder(DEVICE_OWNER_PARAMS); 16249dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz 16349dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz // THEN encryption activity should be started 164a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz assertEquals(ACTION_START_ENCRYPTION, 165a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz TestEncryptionActivity.sLastLaunchedIntent.getAction()); 166a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz } 167a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz 168a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz @Test 169a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz public void testNoParams() { 170a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz // WHEN launching EncryptDeviceActivity without a params object 171a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz mActivityRule.launchActivity(new Intent()); 172a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz 173a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz // THEN the activity should finish immediately 174a9cf45028e89c62c9d6d7a71e81ec2dcf45cf7f5Benjamin Franz assertTrue(mActivityRule.getActivity().isFinishing()); 17549dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz } 17649dbaa804b8fd5d1845f6ace366b93c0c5e3bd44Benjamin Franz} 177