Home | History | Annotate | Download | only in task
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.managedprovisioning.task;
     18 
     19 import static org.mockito.Mockito.anyInt;
     20 import static org.mockito.Mockito.times;
     21 import static org.mockito.Mockito.verify;
     22 import static org.mockito.Mockito.when;
     23 import static org.mockito.MockitoAnnotations.Mock;
     24 
     25 import android.app.admin.DevicePolicyManager;
     26 import android.content.ComponentName;
     27 import android.content.Context;
     28 import android.content.pm.PackageManager;
     29 import android.test.AndroidTestCase;
     30 import android.test.suitebuilder.annotation.SmallTest;
     31 
     32 import org.mockito.MockitoAnnotations;
     33 
     34 public class SetDevicePolicyTaskTest extends AndroidTestCase {
     35     private static final String ADMIN_PACKAGE_NAME = "com.admin.test";
     36     private static final String ADMIN_RECEIVER_NAME = ADMIN_PACKAGE_NAME + ".AdminReceiver";
     37     private static final ComponentName ADMIN_COMPONENT_NAME = new ComponentName(ADMIN_PACKAGE_NAME,
     38             ADMIN_RECEIVER_NAME);
     39     private static final String OWNER_NAME = "Test Owner";
     40     private static final int TEST_USER_ID = 123;
     41 
     42     @Mock private Context mContext;
     43     @Mock private PackageManager mPackageManager;
     44     @Mock private DevicePolicyManager mDevicePolicyManager;
     45     @Mock private SetDevicePolicyTask.Callback mCallback;
     46 
     47     private SetDevicePolicyTask mTask;
     48 
     49     @Override
     50     protected void setUp() throws Exception {
     51         super.setUp();
     52         // This is necessary for mockito to work
     53         System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString());
     54         MockitoAnnotations.initMocks(this);
     55 
     56         when(mContext.getPackageManager()).thenReturn(mPackageManager);
     57         when(mContext.getSystemService(Context.DEVICE_POLICY_SERVICE))
     58                 .thenReturn(mDevicePolicyManager);
     59         when(mPackageManager.getApplicationEnabledSetting(ADMIN_PACKAGE_NAME))
     60                 .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
     61         when(mDevicePolicyManager.getDeviceOwnerComponentOnCallingUser()).thenReturn(null);
     62         when(mDevicePolicyManager.setDeviceOwner(ADMIN_COMPONENT_NAME, OWNER_NAME, TEST_USER_ID))
     63                 .thenReturn(true);
     64 
     65         mTask = new SetDevicePolicyTask(mContext, OWNER_NAME, mCallback, TEST_USER_ID);
     66     }
     67 
     68     @SmallTest
     69     public void testEnableDevicePolicyApp() {
     70         when(mPackageManager.getApplicationEnabledSetting(ADMIN_PACKAGE_NAME))
     71                 .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
     72         mTask.run(ADMIN_COMPONENT_NAME);
     73         verify(mPackageManager).setApplicationEnabledSetting(ADMIN_PACKAGE_NAME,
     74                 PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
     75                 PackageManager.DONT_KILL_APP);
     76         verify(mCallback, times(1)).onSuccess();
     77     }
     78 
     79     @SmallTest
     80     public void testEnableDevicePolicyApp_PackageNotFound() {
     81         when(mPackageManager.getApplicationEnabledSetting(ADMIN_PACKAGE_NAME))
     82                 .thenThrow(new IllegalArgumentException());
     83         mTask.run(ADMIN_COMPONENT_NAME);
     84         verify(mCallback, times(1)).onError();
     85     }
     86 
     87     @SmallTest
     88     public void testSetActiveAdmin() {
     89         mTask.run(ADMIN_COMPONENT_NAME);
     90         verify(mDevicePolicyManager).setActiveAdmin(ADMIN_COMPONENT_NAME, true, TEST_USER_ID);
     91         verify(mCallback, times(1)).onSuccess();
     92     }
     93 
     94     @SmallTest
     95     public void testSetDeviceOwner() {
     96         mTask.run(ADMIN_COMPONENT_NAME);
     97         verify(mDevicePolicyManager).setDeviceOwner(ADMIN_COMPONENT_NAME, OWNER_NAME, TEST_USER_ID);
     98         verify(mCallback, times(1)).onSuccess();
     99     }
    100 
    101     @SmallTest
    102     public void testSetDeviceOwner_PreconditionsNotMet() {
    103         when(mDevicePolicyManager.setDeviceOwner(ADMIN_COMPONENT_NAME, OWNER_NAME, TEST_USER_ID))
    104                 .thenThrow(new IllegalStateException());
    105         mTask.run(ADMIN_COMPONENT_NAME);
    106         verify(mDevicePolicyManager).setDeviceOwner(ADMIN_COMPONENT_NAME, OWNER_NAME, TEST_USER_ID);
    107         verify(mCallback, times(1)).onError();
    108     }
    109 
    110     @SmallTest
    111     public void testSetDeviceOwner_ReturnFalse() {
    112         when(mDevicePolicyManager.setDeviceOwner(ADMIN_COMPONENT_NAME, OWNER_NAME, TEST_USER_ID))
    113                 .thenReturn(false);
    114         mTask.run(ADMIN_COMPONENT_NAME);
    115         verify(mDevicePolicyManager).setDeviceOwner(ADMIN_COMPONENT_NAME, OWNER_NAME, TEST_USER_ID);
    116         verify(mCallback, times(1)).onError();
    117     }
    118 }
    119