• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.analytics;
18 
19 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE;
20 import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
21 
22 import static com.android.managedprovisioning.common.Globals.ACTION_RESUME_PROVISIONING;
23 
24 import static com.google.common.truth.Truth.assertThat;
25 
26 import static org.mockito.Mockito.mock;
27 import static org.mockito.Mockito.when;
28 
29 import android.app.admin.DevicePolicyManager;
30 import android.content.Context;
31 import android.content.Intent;
32 import android.content.pm.PackageManager;
33 import android.test.AndroidTestCase;
34 import android.test.suitebuilder.annotation.SmallTest;
35 
36 import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences;
37 
38 import org.mockito.Mock;
39 import org.mockito.MockitoAnnotations;
40 
41 import java.util.List;
42 
43 /**
44  * Unit-tests for {@link AnalyticsUtils}.
45  */
46 @SmallTest
47 public class AnalyticsUtilsTest extends AndroidTestCase {
48     private static final String INVALID_PACKAGE_NAME = "invalid-package-name";
49     private static final String VALID_PACKAGE_NAME = "valid-package-name";
50     private static final String VALID_INSTALLER_PACKAGE = "valid-installer-package";
51     private static final String INVALID_PROVISIONING_EXTRA = "invalid-provisioning-extra";
52 
53     @Mock private Context mockContext;
54     @Mock private PackageManager mockPackageManager;
55 
56     @Override
setUp()57     public void setUp() {
58         // this is necessary for mockito to work
59         System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString());
60 
61         MockitoAnnotations.initMocks(this);
62 
63         when(mockContext.getPackageManager()).thenReturn(mockPackageManager);
64     }
65 
testGetInstallerPackageName_invalidPackage()66     public void testGetInstallerPackageName_invalidPackage() {
67         // WHEN getting installer package name for an invalid package.
68         when(mockPackageManager.getInstallerPackageName(INVALID_PACKAGE_NAME))
69                 .thenThrow(new IllegalArgumentException());
70         // THEN null should be returned and exception should be digested.
71         assertNull(AnalyticsUtils.getInstallerPackageName(mockContext, INVALID_PACKAGE_NAME));
72     }
73 
testGetInstallerPackageName_validPackage()74     public void testGetInstallerPackageName_validPackage() {
75         // WHEN getting installer package name for a valid package.
76         when(mockPackageManager.getInstallerPackageName(VALID_PACKAGE_NAME))
77                 .thenReturn(VALID_INSTALLER_PACKAGE);
78         // THEN valid installer package name should be returned.
79         assertEquals(VALID_INSTALLER_PACKAGE,
80                 AnalyticsUtils.getInstallerPackageName(mockContext, VALID_PACKAGE_NAME));
81     }
82 
testGetAllProvisioningExtras_NullIntent()83     public void testGetAllProvisioningExtras_NullIntent() {
84         // WHEN getting provisioning extras using null Intent.
85         List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(null);
86         // THEN an empty list of valid provisioning extras should be returned.
87         assertEquals(0, provisioningExtras.size());
88     }
89 
testGetAllProvisioningExtras_ProvisioningResume()90     public void testGetAllProvisioningExtras_ProvisioningResume() {
91         // GIVEN provisioning was resumed
92         Intent intent = new Intent(ACTION_RESUME_PROVISIONING);
93         // WHEN getting provisioning extras using resume provisioning intent.
94         List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
95         // THEN an empty list of valid provisioning extras should be returned.
96         assertEquals(0, provisioningExtras.size());
97     }
98 
testGetAllProvisioningExtras_NullBundleExtras()99     public void testGetAllProvisioningExtras_NullBundleExtras() {
100         // GIVEN intent has null extras
101         Intent intent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
102         // WHEN getting provisioning extras with null extras
103         List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
104         // THEN an empty list of valid provisioning extras should be returned.
105         assertEquals(0, provisioningExtras.size());
106     }
107 
testGetAllProvisioningExtras()108     public void testGetAllProvisioningExtras() {
109         // GIVEN intent with both valid and invalid provisioning extras
110         Intent intent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
111         intent.putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, "");
112         intent.putExtra(INVALID_PROVISIONING_EXTRA, "");
113         intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, "");
114         // WHEN getting provisioning extras using the intent
115         List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
116         // THEN a list of valid provisioning extras should be returned.
117         assertEquals(2, provisioningExtras.size());
118         assertThat(provisioningExtras.contains(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME)).isTrue();
119         assertThat(provisioningExtras.contains(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE)).isTrue();
120     }
121 
testGetProvisioningTime_shouldReturnDiff()122     public void testGetProvisioningTime_shouldReturnDiff() {
123         final ManagedProvisioningSharedPreferences mockPrefs =
124                 mock(ManagedProvisioningSharedPreferences.class);
125         when(mockPrefs.getProvisioningStartedTimestamp()).thenReturn(5L);
126 
127         assertThat(AnalyticsUtils.getProvisioningTime(mockPrefs, () -> 20L)).isEqualTo(15L);
128     }
129 
testGetProvisioningTime_shouldReturnZero()130     public void testGetProvisioningTime_shouldReturnZero() {
131         final ManagedProvisioningSharedPreferences mockPrefs =
132                 mock(ManagedProvisioningSharedPreferences.class);
133         when(mockPrefs.getProvisioningStartedTimestamp()).thenReturn(0L);
134 
135         assertThat(AnalyticsUtils.getProvisioningTime(mockPrefs, () -> 20L)).isEqualTo(-1);
136     }
137 }
138