11271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz/* 21271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * Copyright (C) 2016 The Android Open Source Project 31271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * 41271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * Licensed under the Apache License, Version 2.0 (the "License"); 51271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * you may not use this file except in compliance with the License. 61271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * You may obtain a copy of the License at 71271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * 81271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * http://www.apache.org/licenses/LICENSE-2.0 91271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * 101271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * Unless required by applicable law or agreed to in writing, software 111271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * distributed under the License is distributed on an "AS IS" BASIS, 121271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * See the License for the specific language governing permissions and 141271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * limitations under the License. 151271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz */ 161271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 171271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzpackage com.android.managedprovisioning.task; 181271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 191271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport static android.app.admin.DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; 201271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport static org.mockito.Mockito.verify; 211271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport static org.mockito.Mockito.verifyNoMoreInteractions; 221271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport static org.mockito.Mockito.when; 231271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 241271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport android.content.ComponentName; 251271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport android.content.Context; 261271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport android.content.pm.PackageManager; 27f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franzimport android.support.test.filters.SmallTest; 281271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 291271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport com.android.managedprovisioning.model.ProvisioningParams; 301271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 31f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franzimport org.junit.Before; 32f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franzimport org.junit.Test; 331271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport org.mockito.Mock; 341271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franzimport org.mockito.MockitoAnnotations; 351271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 361271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz/** 371271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz * Unit tests for {@link InstallExistingPackageTask}. 381271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz */ 39f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz@SmallTest 40f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franzpublic class InstallExistingPackageTaskTest { 411271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz private static final String ADMIN_PACKAGE_NAME = "com.admin.test"; 421271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz private static final String ADMIN_RECEIVER_NAME = ADMIN_PACKAGE_NAME + ".AdminReceiver"; 431271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz private static final ComponentName ADMIN_COMPONENT_NAME = new ComponentName(ADMIN_PACKAGE_NAME, 441271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz ADMIN_RECEIVER_NAME); 45f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz private static final String INSTALL_PACKAGE_NAME = "com.install.package"; 461271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz private static final int TEST_USER_ID = 123; 471271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz private final ProvisioningParams TEST_PARAMS = new ProvisioningParams.Builder() 481271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz .setProvisioningAction(ACTION_PROVISION_MANAGED_PROFILE) 491271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz .setDeviceAdminComponentName(ADMIN_COMPONENT_NAME) 501271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz .build(); 511271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 521271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz @Mock private Context mContext; 531271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz @Mock private PackageManager mPackageManager; 541271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz @Mock private AbstractProvisioningTask.Callback mCallback; 551271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz private InstallExistingPackageTask mTask; 561271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 57f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz @Before 58f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz public void setUp() throws Exception { 591271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz MockitoAnnotations.initMocks(this); 601271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 611271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz when(mContext.getPackageManager()).thenReturn(mPackageManager); 621271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 63f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz mTask = new InstallExistingPackageTask(INSTALL_PACKAGE_NAME, mContext, TEST_PARAMS, 64f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz mCallback); 651271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz } 661271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 67f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz @Test 681271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz public void testSuccess() throws Exception { 691271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // GIVEN that installing the existing package succeeds 70f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz when(mPackageManager.installExistingPackageAsUser(INSTALL_PACKAGE_NAME, TEST_USER_ID)) 711271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz .thenReturn(PackageManager.INSTALL_SUCCEEDED); 721271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 731271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // WHEN running the task 741271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz mTask.run(TEST_USER_ID); 751271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 761271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // THEN the existing package should have been installed 77f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz verify(mPackageManager).installExistingPackageAsUser(INSTALL_PACKAGE_NAME, TEST_USER_ID); 781271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz verify(mCallback).onSuccess(mTask); 791271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz verifyNoMoreInteractions(mCallback); 801271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz } 811271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 82f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz @Test 831271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz public void testPackageNotFound() throws Exception { 841271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // GIVEN that the package is not present on the device 85f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz when(mPackageManager.installExistingPackageAsUser(INSTALL_PACKAGE_NAME, TEST_USER_ID)) 861271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz .thenThrow(new PackageManager.NameNotFoundException()); 871271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 881271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // WHEN running the task 891271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz mTask.run(TEST_USER_ID); 901271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 911271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // THEN an error should be returned 921271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz verify(mCallback).onError(mTask, 0); 931271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz verifyNoMoreInteractions(mCallback); 941271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz } 951271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 96f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz @Test 971271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz public void testInstallFailed() throws Exception { 981271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // GIVEN that the package is not present on the device 99f6ad3d45cebb79174325f7457546c9ae382aa441Benjamin Franz when(mPackageManager.installExistingPackageAsUser(INSTALL_PACKAGE_NAME, TEST_USER_ID)) 1001271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz .thenReturn(PackageManager.INSTALL_FAILED_INVALID_APK); 1011271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 1021271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // WHEN running the task 1031271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz mTask.run(TEST_USER_ID); 1041271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz 1051271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz // THEN an error should be returned 1061271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz verify(mCallback).onError(mTask, 0); 1071271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz verifyNoMoreInteractions(mCallback); 1081271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz } 1091271a28bc8016a7b92f4fd9cb9970499cf0382b7Benjamin Franz} 110