blob: b56e352e6a812bdce5205b48e308e94a35b2357b [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.managedprovisioning.analytics;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME;
import static android.app.admin.DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR;
import static android.app.admin.DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC;
import static com.android.managedprovisioning.common.Globals.ACTION_RESUME_PROVISIONING;
import static org.mockito.Mockito.when;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import java.io.ByteArrayOutputStream;
import java.util.List;
import java.util.Properties;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
/**
* Unit-tests for {@link AnalyticsUtils}.
*/
@SmallTest
public class AnalyticsUtilsTest extends AndroidTestCase {
private static final String INVALID_PACKAGE_NAME = "invalid-package-name";
private static final String VALID_PACKAGE_NAME = "valid-package-name";
private static final String VALID_INSTALLER_PACKAGE = "valid-installer-package";
private static final String INVALID_PROVISIONING_EXTRA = "invalid-provisioning-extra";
@Mock private Context mockContext;
@Mock private PackageManager mockPackageManager;
@Override
public void setUp() {
// this is necessary for mockito to work
System.setProperty("dexmaker.dexcache", getContext().getCacheDir().toString());
MockitoAnnotations.initMocks(this);
when(mockContext.getPackageManager()).thenReturn(mockPackageManager);
}
public void testGetInstallerPackageName_invalidPackage() {
// WHEN getting installer package name for an invalid package.
when(mockPackageManager.getInstallerPackageName(INVALID_PACKAGE_NAME))
.thenThrow(new IllegalArgumentException());
// THEN null should be returned and exception should be digested.
assertNull(AnalyticsUtils.getInstallerPackageName(mockContext, INVALID_PACKAGE_NAME));
}
public void testGetInstallerPackageName_validPackage() {
// WHEN getting installer package name for a valid package.
when(mockPackageManager.getInstallerPackageName(VALID_PACKAGE_NAME))
.thenReturn(VALID_INSTALLER_PACKAGE);
// THEN valid installer package name should be returned.
assertEquals(VALID_INSTALLER_PACKAGE,
AnalyticsUtils.getInstallerPackageName(mockContext, VALID_PACKAGE_NAME));
}
public void testGetAllProvisioningExtras_NullIntent() {
// WHEN getting provisioning extras using null Intent.
List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(null);
// THEN an empty list of valid provisioning extras should be returned.
assertEquals(0, provisioningExtras.size());
}
public void testGetAllProvisioningExtras_ProvisioningResume() {
// GIVEN provisioning was resumed
Intent intent = new Intent(ACTION_RESUME_PROVISIONING);
// WHEN getting provisioning extras using resume provisioning intent.
List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
// THEN an empty list of valid provisioning extras should be returned.
assertEquals(0, provisioningExtras.size());
}
public void testGetAllProvisioningExtras_NullBundleExtras() {
// GIVEN intent has null extras
Intent intent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
// WHEN getting provisioning extras with null extras
List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
// THEN an empty list of valid provisioning extras should be returned.
assertEquals(0, provisioningExtras.size());
}
public void testGetAllProvisioningExtras_NullNfcProperties() throws Exception {
// GIVEN intent has null extras
Intent intent = new Intent(NfcAdapter.ACTION_NDEF_DISCOVERED);
// WHEN getting provisioning extras with null extras
List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
// THEN an empty list of valid provisioning extras should be returned.
assertEquals(0, provisioningExtras.size());
}
public void testGetAllProvisioningExtras() {
// GIVEN intent with both valid and invalid provisioning extras
Intent intent = new Intent(DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE);
intent.putExtra(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE, "");
intent.putExtra(INVALID_PROVISIONING_EXTRA, "");
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, "");
// WHEN getting provisioning extras using the intent
List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
// THEN a list of valid provisioning extras should be returned.
assertEquals(2, provisioningExtras.size());
provisioningExtras.contains(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME);
provisioningExtras.contains(EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE);
}
public void testGetAllProvisioningExtras_Nfc() throws Exception {
// GIVEN a Nfc intent with both valid and invalid provisioning extras
Properties props = new Properties();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
props.setProperty(EXTRA_PROVISIONING_MAIN_COLOR, "");
props.setProperty(INVALID_PROVISIONING_EXTRA, "");
props.setProperty(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME, "");
props.store(stream, "NFC provisioning intent" /* data description */);
NdefRecord record = NdefRecord.createMime(
DevicePolicyManager.MIME_TYPE_PROVISIONING_NFC,
stream.toByteArray());
NdefMessage ndfMsg = new NdefMessage(new NdefRecord[]{record});
Intent intent = new Intent(NfcAdapter.ACTION_NDEF_DISCOVERED)
.setType(MIME_TYPE_PROVISIONING_NFC)
.putExtra(NfcAdapter.EXTRA_NDEF_MESSAGES, new NdefMessage[]{ndfMsg});
// WHEN getting provisioning extras using the intent
List<String> provisioningExtras = AnalyticsUtils.getAllProvisioningExtras(intent);
// THEN a list of valid provisioning extras should be returned.
assertEquals(2, provisioningExtras.size());
provisioningExtras.contains(EXTRA_PROVISIONING_DEVICE_ADMIN_COMPONENT_NAME);
provisioningExtras.contains(EXTRA_PROVISIONING_MAIN_COLOR);
}
}