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