1 /* 2 * Copyright 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 package com.android.managedprovisioning.model; 17 18 import static com.android.managedprovisioning.TestUtils.createTestAdminExtras; 19 20 import android.accounts.Account; 21 import android.app.admin.DevicePolicyManager; 22 import android.content.ComponentName; 23 import android.os.Bundle; 24 import android.os.Parcel; 25 import android.os.PersistableBundle; 26 import android.test.AndroidTestCase; 27 import android.test.MoreAsserts; 28 import android.test.suitebuilder.annotation.SmallTest; 29 30 import com.android.managedprovisioning.model.WifiInfo; 31 import com.android.managedprovisioning.model.PackageDownloadInfo; 32 import java.io.File; 33 import java.lang.Exception; 34 import java.util.Locale; 35 36 /** Tests for {@link ProvisioningParams} */ 37 public class ProvisioningParamsTest extends AndroidTestCase { 38 private static final String TEST_PROVISIONING_ACTION = 39 DevicePolicyManager.ACTION_PROVISION_MANAGED_PROFILE; 40 41 private static final String TEST_PACKAGE_NAME = "com.afwsamples.testdpc"; 42 private static final ComponentName TEST_COMPONENT_NAME = 43 ComponentName.unflattenFromString( 44 "com.afwsamples.testdpc/com.afwsamples.testdpc.DeviceAdminReceiver"); 45 private static final long TEST_LOCAL_TIME = 1456939524713L; 46 private static final Locale TEST_LOCALE = Locale.UK; 47 private static final String TEST_TIME_ZONE = "GMT"; 48 private static final Integer TEST_MAIN_COLOR = 65280; 49 private static final boolean TEST_STARTED_BY_TRUSTED_SOURCE = true; 50 private static final boolean TEST_LEAVE_ALL_SYSTEM_APP_ENABLED = true; 51 private static final boolean TEST_SKIP_ENCRYPTION = true; 52 private static final boolean TEST_SKIP_USER_SETUP = true; 53 private static final boolean TEST_SKIP_USER_CONSENT = true; 54 private static final Account TEST_ACCOUNT_TO_MIGRATE = 55 new Account("user@gmail.com", "com.google"); 56 57 // Wifi info 58 private static final String TEST_SSID = "TestWifi"; 59 private static final boolean TEST_HIDDEN = true; 60 private static final String TEST_SECURITY_TYPE = "WPA2"; 61 private static final String TEST_PASSWORD = "GoogleRock"; 62 private static final String TEST_PROXY_HOST = "testhost.com"; 63 private static final int TEST_PROXY_PORT = 7689; 64 private static final String TEST_PROXY_BYPASS_HOSTS = "http://host1.com;https://host2.com"; 65 private static final String TEST_PAC_URL = "pac.test.com"; 66 private static final WifiInfo TEST_WIFI_INFO = WifiInfo.Builder.builder() 67 .setSsid(TEST_SSID) 68 .setHidden(TEST_HIDDEN) 69 .setSecurityType(TEST_SECURITY_TYPE) 70 .setPassword(TEST_PASSWORD) 71 .setProxyHost(TEST_PROXY_HOST) 72 .setProxyPort(TEST_PROXY_PORT) 73 .setProxyBypassHosts(TEST_PROXY_BYPASS_HOSTS) 74 .setPacUrl(TEST_PAC_URL) 75 .build(); 76 77 // Device admin package download info 78 private static final String TEST_DOWNLOAD_LOCATION = 79 "http://example/dpc.apk"; 80 private static final String TEST_COOKIE_HEADER = 81 "Set-Cookie: sessionToken=foobar; Expires=Thu, 18 Feb 2016 23:59:59 GMT"; 82 private static final byte[] TEST_PACKAGE_CHECKSUM = new byte[] { '1', '2', '3', '4', '5' }; 83 private static final byte[] TEST_SIGNATURE_CHECKSUM = new byte[] { '5', '4', '3', '2', '1' }; 84 private static final int TEST_MIN_SUPPORT_VERSION = 17689; 85 private static final PackageDownloadInfo TEST_DOWNLOAD_INFO = 86 PackageDownloadInfo.Builder.builder() 87 .setLocation(TEST_DOWNLOAD_LOCATION) 88 .setCookieHeader(TEST_COOKIE_HEADER) 89 .setPackageChecksum(TEST_PACKAGE_CHECKSUM) 90 .setSignatureChecksum(TEST_SIGNATURE_CHECKSUM) 91 .setMinVersion(TEST_MIN_SUPPORT_VERSION) 92 .build(); 93 94 @SmallTest testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName()95 public void testFailToConstructProvisioningParamsWithoutPackageNameOrComponentName() { 96 // WHEN the ProvisioningParams is constructed by with neither a package name nor a component 97 // name 98 try { 99 ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder() 100 .setProvisioningAction(TEST_PROVISIONING_ACTION) 101 .build(); 102 fail("Package name or component name is mandatory."); 103 } catch (IllegalArgumentException e) { 104 // THEN the ProvisioningParams fails to construct. 105 } 106 } 107 108 @SmallTest testFailToConstructProvisioningParamsWithoutProvisioningAction()109 public void testFailToConstructProvisioningParamsWithoutProvisioningAction() { 110 // WHEN the ProvisioningParams is constructed by without a provisioning action. 111 try { 112 ProvisioningParams provisioningParams = ProvisioningParams.Builder.builder() 113 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 114 .build(); 115 fail("Provisioning action is mandatory"); 116 } catch (NullPointerException e) { 117 // THEN the ProvisioningParams fails to construct. 118 } 119 } 120 121 @SmallTest testEquals()122 public void testEquals() { 123 // GIVEN 2 ProvisioningParams objects created by the same set of parameters 124 ProvisioningParams provisioningParams1 = getCompleteProvisioningParams(); 125 ProvisioningParams provisioningParams2 = getCompleteProvisioningParams(); 126 127 // WHEN these two objects compare. 128 // THEN they are the same. 129 assertEquals(provisioningParams1, provisioningParams2); 130 } 131 132 @SmallTest testNotEquals()133 public void testNotEquals() { 134 // GIVEN 2 ProvisioningParams objects created by different sets of parameters 135 ProvisioningParams provisioningParams1 = ProvisioningParams.Builder.builder() 136 .setProvisioningAction(TEST_PROVISIONING_ACTION) 137 .setDeviceAdminPackageName(TEST_PACKAGE_NAME) 138 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 139 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO) 140 .setLocalTime(TEST_LOCAL_TIME) 141 .setLocale(TEST_LOCALE) 142 .setTimeZone(TEST_TIME_ZONE) 143 .setMainColor(TEST_MAIN_COLOR) 144 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE) 145 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED) 146 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 147 .setSkipUserSetup(TEST_SKIP_USER_SETUP) 148 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 149 .setWifiInfo(TEST_WIFI_INFO) 150 .setAdminExtrasBundle(createTestAdminExtras()) 151 .build(); 152 ProvisioningParams provisioningParams2 = ProvisioningParams.Builder.builder() 153 .setProvisioningAction("different.action") 154 .setDeviceAdminPackageName(TEST_PACKAGE_NAME) 155 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 156 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO) 157 .setLocalTime(TEST_LOCAL_TIME) 158 .setLocale(TEST_LOCALE) 159 .setTimeZone(TEST_TIME_ZONE) 160 .setMainColor(TEST_MAIN_COLOR) 161 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE) 162 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED) 163 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 164 .setSkipUserSetup(TEST_SKIP_USER_SETUP) 165 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 166 .setWifiInfo(TEST_WIFI_INFO) 167 .setAdminExtrasBundle(createTestAdminExtras()) 168 .build(); 169 170 // WHEN these two objects compare. 171 // THEN they are not the same. 172 MoreAsserts.assertNotEqual(provisioningParams1, provisioningParams2); 173 } 174 175 @SmallTest testSaveAndRestoreComplete()176 public void testSaveAndRestoreComplete() throws Exception { 177 testSaveAndRestore(getCompleteProvisioningParams()); 178 } 179 180 // Testing with a minimum set of parameters to cover all null use cases. 181 @SmallTest testSaveAndRestoreMinimalist()182 public void testSaveAndRestoreMinimalist() throws Exception { 183 testSaveAndRestore(ProvisioningParams.Builder.builder() 184 .setProvisioningAction(TEST_PROVISIONING_ACTION) 185 .setDeviceAdminPackageName(TEST_PACKAGE_NAME) 186 .build()); 187 } 188 testSaveAndRestore(ProvisioningParams original)189 private void testSaveAndRestore(ProvisioningParams original) { 190 // GIVEN a ProvisioningParams object 191 // WHEN the ProvisioningParams is written to xml and then read back 192 File file = new File(mContext.getFilesDir(), "test_store.xml"); 193 original.save(file); 194 ProvisioningParams copy = ProvisioningParams.load(file); 195 // THEN the same ProvisioningParams is obtained 196 assertEquals(original, copy); 197 } 198 199 @SmallTest testParceable()200 public void testParceable() { 201 // GIVEN a ProvisioningParams object. 202 ProvisioningParams expectedProvisioningParams = getCompleteProvisioningParams(); 203 204 // WHEN the ProvisioningParams is written to parcel and then read back. 205 Parcel parcel = Parcel.obtain(); 206 expectedProvisioningParams.writeToParcel(parcel, 0); 207 parcel.setDataPosition(0); 208 ProvisioningParams actualProvisioningParams = 209 ProvisioningParams.CREATOR.createFromParcel(parcel); 210 211 // THEN the same ProvisioningParams is obtained. 212 assertEquals(expectedProvisioningParams, actualProvisioningParams); 213 } 214 getCompleteProvisioningParams()215 private ProvisioningParams getCompleteProvisioningParams() { 216 return ProvisioningParams.Builder.builder() 217 .setProvisioningAction(TEST_PROVISIONING_ACTION) 218 .setDeviceAdminPackageName(TEST_PACKAGE_NAME) 219 .setDeviceAdminComponentName(TEST_COMPONENT_NAME) 220 .setDeviceAdminDownloadInfo(TEST_DOWNLOAD_INFO) 221 .setLocalTime(TEST_LOCAL_TIME) 222 .setLocale(TEST_LOCALE) 223 .setTimeZone(TEST_TIME_ZONE) 224 .setMainColor(TEST_MAIN_COLOR) 225 .setStartedByTrustedSource(TEST_STARTED_BY_TRUSTED_SOURCE) 226 .setLeaveAllSystemAppsEnabled(TEST_LEAVE_ALL_SYSTEM_APP_ENABLED) 227 .setSkipEncryption(TEST_SKIP_ENCRYPTION) 228 .setSkipUserSetup(TEST_SKIP_USER_SETUP) 229 .setSkipUserConsent(TEST_SKIP_USER_CONSENT) 230 .setAccountToMigrate(TEST_ACCOUNT_TO_MIGRATE) 231 .setWifiInfo(TEST_WIFI_INFO) 232 .setAdminExtrasBundle(createTestAdminExtras()) 233 .build(); 234 } 235 } 236