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