1 /* 2 * Copyright (C) 2010 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.tradefed.targetprep; 18 19 import com.android.ddmlib.IDevice; 20 import com.android.tradefed.build.DeviceBuildInfo; 21 import com.android.tradefed.build.IBuildInfo; 22 import com.android.tradefed.build.IDeviceBuildInfo; 23 import com.android.tradefed.device.DeviceNotAvailableException; 24 import com.android.tradefed.device.ITestDevice; 25 import com.android.tradefed.device.TcpDevice; 26 import com.android.tradefed.device.TestDeviceOptions; 27 import com.android.tradefed.util.BinaryState; 28 import com.android.tradefed.util.FileUtil; 29 30 import junit.framework.TestCase; 31 32 import org.easymock.Capture; 33 import org.easymock.EasyMock; 34 35 import java.io.File; 36 37 /** 38 * Unit tests for {@link DeviceSetup}. 39 */ 40 public class DeviceSetupTest extends TestCase { 41 42 private DeviceSetup mDeviceSetup; 43 private ITestDevice mMockDevice; 44 private IDevice mMockIDevice; 45 private IDeviceBuildInfo mMockBuildInfo; 46 private File mTmpDir; 47 48 private static final int DEFAULT_API_LEVEL = 23; 49 50 /** 51 * {@inheritDoc} 52 */ 53 @Override 54 protected void setUp() throws Exception { 55 super.setUp(); 56 mMockDevice = EasyMock.createMock(ITestDevice.class); 57 mMockIDevice = EasyMock.createMock(IDevice.class); 58 EasyMock.expect(mMockDevice.getSerialNumber()).andReturn("foo").anyTimes(); 59 EasyMock.expect(mMockDevice.getDeviceDescriptor()).andStubReturn(null); 60 EasyMock.expect(mMockDevice.getIDevice()).andStubReturn(mMockIDevice); 61 mMockBuildInfo = new DeviceBuildInfo("0", ""); 62 mDeviceSetup = new DeviceSetup(); 63 mTmpDir = FileUtil.createTempDir("tmp"); 64 } 65 66 /** 67 * {@inheritDoc} 68 */ 69 @Override 70 protected void tearDown() throws Exception { 71 FileUtil.recursiveDelete(mTmpDir); 72 super.tearDown(); 73 } 74 75 /** 76 * Simple normal case test for {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)}. 77 */ 78 public void testSetup() throws Exception { 79 Capture<String> setPropCapture = new Capture<>(); 80 doSetupExpectations(true, setPropCapture); 81 doCheckExternalStoreSpaceExpectations(); 82 EasyMock.replay(mMockDevice); 83 84 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 85 86 EasyMock.verify(mMockDevice); 87 88 String setProp = setPropCapture.getValue(); 89 assertTrue("Set prop doesn't contain ro.telephony.disable-call=true", 90 setProp.contains("ro.telephony.disable-call=true\n")); 91 assertTrue("Set prop doesn't contain ro.audio.silent=1", 92 setProp.contains("ro.audio.silent=1\n")); 93 assertTrue("Set prop doesn't contain ro.test_harness=1", 94 setProp.contains("ro.test_harness=1\n")); 95 assertTrue("Set prop doesn't contain ro.monkey=1", 96 setProp.contains("ro.monkey=1\n")); 97 } 98 99 public void testSetup_airplane_mode_on() throws DeviceNotAvailableException, TargetSetupError { 100 doSetupExpectations(); 101 doCheckExternalStoreSpaceExpectations(); 102 doSettingExpectations("global", "airplane_mode_on", "1"); 103 doCommandsExpectations( 104 "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true"); 105 EasyMock.replay(mMockDevice); 106 107 mDeviceSetup.setAirplaneMode(BinaryState.ON); 108 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 109 110 EasyMock.verify(mMockDevice); 111 } 112 113 public void testSetup_airplane_mode_off() throws DeviceNotAvailableException, TargetSetupError { 114 doSetupExpectations(); 115 doCheckExternalStoreSpaceExpectations(); 116 doSettingExpectations("global", "airplane_mode_on", "0"); 117 doCommandsExpectations( 118 "am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false"); 119 EasyMock.replay(mMockDevice); 120 121 mDeviceSetup.setAirplaneMode(BinaryState.OFF); 122 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 123 124 EasyMock.verify(mMockDevice); 125 } 126 127 public void testSetup_wifi_on() throws DeviceNotAvailableException, TargetSetupError { 128 doSetupExpectations(); 129 doCheckExternalStoreSpaceExpectations(); 130 doSettingExpectations("global", "wifi_on", "1"); 131 doCommandsExpectations("svc wifi enable"); 132 EasyMock.replay(mMockDevice); 133 134 mDeviceSetup.setWifi(BinaryState.ON); 135 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 136 137 EasyMock.verify(mMockDevice); 138 } 139 140 public void testSetup_wifi_off() throws DeviceNotAvailableException, TargetSetupError { 141 doSetupExpectations(); 142 doCheckExternalStoreSpaceExpectations(); 143 doSettingExpectations("global", "wifi_on", "0"); 144 doCommandsExpectations("svc wifi disable"); 145 EasyMock.replay(mMockDevice); 146 147 mDeviceSetup.setWifi(BinaryState.OFF); 148 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 149 150 EasyMock.verify(mMockDevice); 151 } 152 153 public void testSetup_wifi_watchdog_on() throws DeviceNotAvailableException, TargetSetupError { 154 doSetupExpectations(); 155 doCheckExternalStoreSpaceExpectations(); 156 doSettingExpectations("global", "wifi_watchdog", "1"); 157 EasyMock.replay(mMockDevice); 158 159 mDeviceSetup.setWifiWatchdog(BinaryState.ON); 160 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 161 162 EasyMock.verify(mMockDevice); 163 } 164 165 public void testSetup_wifi_watchdog_off() throws DeviceNotAvailableException, TargetSetupError { 166 doSetupExpectations(); 167 doCheckExternalStoreSpaceExpectations(); 168 doSettingExpectations("global", "wifi_watchdog", "0"); 169 EasyMock.replay(mMockDevice); 170 171 mDeviceSetup.setWifiWatchdog(BinaryState.OFF); 172 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 173 174 EasyMock.verify(mMockDevice); 175 } 176 177 public void testSetup_wifi_scan_on() throws DeviceNotAvailableException, TargetSetupError { 178 doSetupExpectations(); 179 doCheckExternalStoreSpaceExpectations(); 180 doSettingExpectations("global", "wifi_scan_always_enabled", "1"); 181 EasyMock.replay(mMockDevice); 182 183 mDeviceSetup.setWifiScanAlwaysEnabled(BinaryState.ON); 184 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 185 186 EasyMock.verify(mMockDevice); 187 } 188 189 public void testSetup_wifi_scan_off() throws DeviceNotAvailableException, TargetSetupError { 190 doSetupExpectations(); 191 doCheckExternalStoreSpaceExpectations(); 192 doSettingExpectations("global", "wifi_scan_always_enabled", "0"); 193 EasyMock.replay(mMockDevice); 194 195 mDeviceSetup.setWifiScanAlwaysEnabled(BinaryState.OFF); 196 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 197 198 EasyMock.verify(mMockDevice); 199 } 200 201 public void testSetup_ethernet_on() throws DeviceNotAvailableException, TargetSetupError { 202 doSetupExpectations(); 203 doCheckExternalStoreSpaceExpectations(); 204 doCommandsExpectations("ifconfig eth0 up"); 205 EasyMock.replay(mMockDevice); 206 207 mDeviceSetup.setEthernet(BinaryState.ON); 208 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 209 210 EasyMock.verify(mMockDevice); 211 } 212 213 public void testSetup_ethernet_off() throws DeviceNotAvailableException, TargetSetupError { 214 doSetupExpectations(); 215 doCheckExternalStoreSpaceExpectations(); 216 doCommandsExpectations("ifconfig eth0 down"); 217 EasyMock.replay(mMockDevice); 218 219 mDeviceSetup.setEthernet(BinaryState.OFF); 220 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 221 222 EasyMock.verify(mMockDevice); 223 } 224 225 public void testSetup_bluetooth_on() throws DeviceNotAvailableException, TargetSetupError { 226 doSetupExpectations(); 227 doCheckExternalStoreSpaceExpectations(); 228 doCommandsExpectations("service call bluetooth_manager 6"); 229 EasyMock.replay(mMockDevice); 230 231 mDeviceSetup.setBluetooth(BinaryState.ON); 232 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 233 234 EasyMock.verify(mMockDevice); 235 } 236 237 public void testSetup_bluetooth_off() throws DeviceNotAvailableException, TargetSetupError { 238 doSetupExpectations(); 239 doCheckExternalStoreSpaceExpectations(); 240 doCommandsExpectations("service call bluetooth_manager 8"); 241 EasyMock.replay(mMockDevice); 242 243 mDeviceSetup.setBluetooth(BinaryState.OFF); 244 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 245 246 EasyMock.verify(mMockDevice); 247 } 248 249 public void testSetup_nfc_on() throws DeviceNotAvailableException, TargetSetupError { 250 doSetupExpectations(); 251 doCheckExternalStoreSpaceExpectations(); 252 doCommandsExpectations("svc nfc enable"); 253 EasyMock.replay(mMockDevice); 254 255 mDeviceSetup.setNfc(BinaryState.ON); 256 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 257 258 EasyMock.verify(mMockDevice); 259 } 260 261 public void testSetup_nfc_off() throws DeviceNotAvailableException, TargetSetupError { 262 doSetupExpectations(); 263 doCheckExternalStoreSpaceExpectations(); 264 doCommandsExpectations("svc nfc disable"); 265 EasyMock.replay(mMockDevice); 266 267 mDeviceSetup.setNfc(BinaryState.OFF); 268 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 269 270 EasyMock.verify(mMockDevice); 271 } 272 273 public void testSetup_screen_adaptive_on() throws DeviceNotAvailableException, 274 TargetSetupError { 275 doSetupExpectations(); 276 doCheckExternalStoreSpaceExpectations(); 277 doSettingExpectations("system", "screen_brightness_mode", "1"); 278 EasyMock.replay(mMockDevice); 279 280 mDeviceSetup.setScreenAdaptiveBrightness(BinaryState.ON); 281 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 282 283 EasyMock.verify(mMockDevice); 284 } 285 286 public void testSetup_screen_adaptive_off() throws DeviceNotAvailableException, 287 TargetSetupError { 288 doSetupExpectations(); 289 doCheckExternalStoreSpaceExpectations(); 290 doSettingExpectations("system", "screen_brightness_mode", "0"); 291 EasyMock.replay(mMockDevice); 292 293 mDeviceSetup.setScreenAdaptiveBrightness(BinaryState.OFF); 294 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 295 296 EasyMock.verify(mMockDevice); 297 } 298 299 public void testSetup_screen_brightness() throws DeviceNotAvailableException, 300 TargetSetupError { 301 doSetupExpectations(); 302 doCheckExternalStoreSpaceExpectations(); 303 doSettingExpectations("system", "screen_brightness", "50"); 304 EasyMock.replay(mMockDevice); 305 306 mDeviceSetup.setScreenBrightness(50); 307 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 308 309 EasyMock.verify(mMockDevice); 310 } 311 312 public void testSetup_screen_stayon_default() throws DeviceNotAvailableException, 313 TargetSetupError { 314 doSetupExpectations(false /* Expect no screen on command */, new Capture<String>()); 315 doCheckExternalStoreSpaceExpectations(); 316 EasyMock.replay(mMockDevice); 317 318 mDeviceSetup.setScreenAlwaysOn(BinaryState.IGNORE); 319 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 320 321 EasyMock.verify(mMockDevice); 322 } 323 324 public void testSetup_screen_stayon_off() throws DeviceNotAvailableException, 325 TargetSetupError { 326 doSetupExpectations(false /* Expect no screen on command */, new Capture<String>()); 327 doCheckExternalStoreSpaceExpectations(); 328 doCommandsExpectations("svc power stayon false"); 329 EasyMock.replay(mMockDevice); 330 331 mDeviceSetup.setScreenAlwaysOn(BinaryState.OFF); 332 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 333 334 EasyMock.verify(mMockDevice); 335 } 336 337 public void testSetup_screen_timeout() throws DeviceNotAvailableException, 338 TargetSetupError { 339 doSetupExpectations(false /* Expect no screen on command */, new Capture<String>()); 340 doCheckExternalStoreSpaceExpectations(); 341 doSettingExpectations("system", "screen_off_timeout", "5000"); 342 EasyMock.replay(mMockDevice); 343 344 mDeviceSetup.setScreenAlwaysOn(BinaryState.IGNORE); 345 mDeviceSetup.setScreenTimeoutSecs(5l); 346 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 347 348 EasyMock.verify(mMockDevice); 349 } 350 351 public void testSetup_screen_ambient_on() throws DeviceNotAvailableException, 352 TargetSetupError { 353 doSetupExpectations(); 354 doCheckExternalStoreSpaceExpectations(); 355 doSettingExpectations("secure", "doze_enabled", "1"); 356 EasyMock.replay(mMockDevice); 357 358 mDeviceSetup.setScreenAmbientMode(BinaryState.ON); 359 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 360 361 EasyMock.verify(mMockDevice); 362 } 363 364 public void testSetup_screen_ambient_off() throws DeviceNotAvailableException, 365 TargetSetupError { 366 doSetupExpectations(); 367 doCheckExternalStoreSpaceExpectations(); 368 doSettingExpectations("secure", "doze_enabled", "0"); 369 EasyMock.replay(mMockDevice); 370 371 mDeviceSetup.setScreenAmbientMode(BinaryState.OFF); 372 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 373 374 EasyMock.verify(mMockDevice); 375 } 376 377 public void testSetup_wake_gesture_on() throws DeviceNotAvailableException, TargetSetupError { 378 doSetupExpectations(); 379 doCheckExternalStoreSpaceExpectations(); 380 doSettingExpectations("secure", "wake_gesture_enabled", "1"); 381 EasyMock.replay(mMockDevice); 382 383 mDeviceSetup.setWakeGesture(BinaryState.ON); 384 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 385 386 EasyMock.verify(mMockDevice); 387 } 388 389 public void testSetup_wake_gesture_off() throws DeviceNotAvailableException, TargetSetupError { 390 doSetupExpectations(); 391 doCheckExternalStoreSpaceExpectations(); 392 doSettingExpectations("secure", "wake_gesture_enabled", "0"); 393 EasyMock.replay(mMockDevice); 394 395 mDeviceSetup.setWakeGesture(BinaryState.OFF); 396 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 397 398 EasyMock.verify(mMockDevice); 399 } 400 401 public void testSetup_screen_saver_on() throws DeviceNotAvailableException, TargetSetupError { 402 doSetupExpectations(); 403 doCheckExternalStoreSpaceExpectations(); 404 doSettingExpectations("secure", "screensaver_enabled", "1"); 405 EasyMock.replay(mMockDevice); 406 407 mDeviceSetup.setScreenSaver(BinaryState.ON); 408 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 409 410 EasyMock.verify(mMockDevice); 411 } 412 413 public void testSetup_screen_saver_off() throws DeviceNotAvailableException, TargetSetupError { 414 doSetupExpectations(); 415 doCheckExternalStoreSpaceExpectations(); 416 doSettingExpectations("secure", "screensaver_enabled", "0"); 417 EasyMock.replay(mMockDevice); 418 419 mDeviceSetup.setScreenSaver(BinaryState.OFF); 420 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 421 422 EasyMock.verify(mMockDevice); 423 } 424 425 public void testSetup_notification_led_on() throws DeviceNotAvailableException, 426 TargetSetupError { 427 doSetupExpectations(); 428 doCheckExternalStoreSpaceExpectations(); 429 doSettingExpectations("system", "notification_light_pulse", "1"); 430 EasyMock.replay(mMockDevice); 431 432 mDeviceSetup.setNotificationLed(BinaryState.ON); 433 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 434 435 EasyMock.verify(mMockDevice); 436 } 437 438 public void testSetup_notification_led_off() throws DeviceNotAvailableException, 439 TargetSetupError { 440 doSetupExpectations(); 441 doCheckExternalStoreSpaceExpectations(); 442 doSettingExpectations("system", "notification_light_pulse", "0"); 443 EasyMock.replay(mMockDevice); 444 445 mDeviceSetup.setNotificationLed(BinaryState.OFF); 446 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 447 448 EasyMock.verify(mMockDevice); 449 } 450 451 public void testInstallNonMarketApps_on() throws DeviceNotAvailableException, 452 TargetSetupError { 453 doSetupExpectations(); 454 doCheckExternalStoreSpaceExpectations(); 455 doSettingExpectations("secure", "install_non_market_apps", "1"); 456 EasyMock.replay(mMockDevice); 457 458 mDeviceSetup.setInstallNonMarketApps(BinaryState.ON); 459 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 460 461 EasyMock.verify(mMockDevice); 462 } 463 464 public void testInstallNonMarketApps_off() throws DeviceNotAvailableException, 465 TargetSetupError { 466 doSetupExpectations(); 467 doCheckExternalStoreSpaceExpectations(); 468 doSettingExpectations("secure", "install_non_market_apps", "0"); 469 EasyMock.replay(mMockDevice); 470 471 mDeviceSetup.setInstallNonMarketApps(BinaryState.OFF); 472 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 473 474 EasyMock.verify(mMockDevice); 475 } 476 477 public void testSetup_trigger_media_mounted() throws DeviceNotAvailableException, 478 TargetSetupError { 479 doSetupExpectations(); 480 doCheckExternalStoreSpaceExpectations(); 481 doCommandsExpectations( 482 "am broadcast -a android.intent.action.MEDIA_MOUNTED " 483 + "-d file://${EXTERNAL_STORAGE} --receiver-include-background"); 484 EasyMock.replay(mMockDevice); 485 486 mDeviceSetup.setTriggerMediaMounted(true); 487 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 488 489 EasyMock.verify(mMockDevice); 490 } 491 492 public void testSetup_location_gps_on() throws DeviceNotAvailableException, TargetSetupError { 493 doSetupExpectations(); 494 doCheckExternalStoreSpaceExpectations(); 495 doSettingExpectations("secure", "location_providers_allowed", "+gps"); 496 EasyMock.replay(mMockDevice); 497 498 mDeviceSetup.setLocationGps(BinaryState.ON); 499 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 500 501 EasyMock.verify(mMockDevice); 502 } 503 504 public void testSetup_location_gps_off() throws DeviceNotAvailableException, TargetSetupError { 505 doSetupExpectations(); 506 doCheckExternalStoreSpaceExpectations(); 507 doSettingExpectations("secure", "location_providers_allowed", "-gps"); 508 EasyMock.replay(mMockDevice); 509 510 mDeviceSetup.setLocationGps(BinaryState.OFF); 511 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 512 513 EasyMock.verify(mMockDevice); 514 } 515 516 public void testSetup_location_network_on() throws DeviceNotAvailableException, 517 TargetSetupError { 518 doSetupExpectations(); 519 doCheckExternalStoreSpaceExpectations(); 520 doSettingExpectations("secure", "location_providers_allowed", "+network"); 521 EasyMock.replay(mMockDevice); 522 523 mDeviceSetup.setLocationNetwork(BinaryState.ON); 524 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 525 526 EasyMock.verify(mMockDevice); 527 } 528 529 public void testSetup_location_network_off() throws DeviceNotAvailableException, 530 TargetSetupError { 531 doSetupExpectations(); 532 doCheckExternalStoreSpaceExpectations(); 533 doSettingExpectations("secure", "location_providers_allowed", "-network"); 534 EasyMock.replay(mMockDevice); 535 536 mDeviceSetup.setLocationNetwork(BinaryState.OFF); 537 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 538 539 EasyMock.verify(mMockDevice); 540 } 541 542 public void testSetup_rotate_on() throws DeviceNotAvailableException, TargetSetupError { 543 doSetupExpectations(); 544 doCheckExternalStoreSpaceExpectations(); 545 doSettingExpectations("system", "accelerometer_rotation", "1"); 546 EasyMock.replay(mMockDevice); 547 548 mDeviceSetup.setAutoRotate(BinaryState.ON); 549 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 550 551 EasyMock.verify(mMockDevice); 552 } 553 554 public void testSetup_rotate_off() throws DeviceNotAvailableException, TargetSetupError { 555 doSetupExpectations(); 556 doCheckExternalStoreSpaceExpectations(); 557 doSettingExpectations("system", "accelerometer_rotation", "0"); 558 EasyMock.replay(mMockDevice); 559 560 mDeviceSetup.setAutoRotate(BinaryState.OFF); 561 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 562 563 EasyMock.verify(mMockDevice); 564 } 565 566 public void testSetup_battery_saver_on() throws DeviceNotAvailableException, TargetSetupError { 567 doSetupExpectations(); 568 doCheckExternalStoreSpaceExpectations(); 569 doSettingExpectations("global", "low_power", "1"); 570 doCommandsExpectations("dumpsys battery unplug"); 571 EasyMock.replay(mMockDevice); 572 573 mDeviceSetup.setBatterySaver(BinaryState.ON); 574 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 575 576 EasyMock.verify(mMockDevice); 577 } 578 579 public void testSetup_legacy_battery_saver_on() throws DeviceNotAvailableException, TargetSetupError { 580 doSetupExpectations(21); // API level Lollipop 581 doCheckExternalStoreSpaceExpectations(); 582 doSettingExpectations("global", "low_power", "1"); 583 doCommandsExpectations("dumpsys battery set usb 0"); 584 EasyMock.replay(mMockDevice); 585 586 mDeviceSetup.setBatterySaver(BinaryState.ON); 587 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 588 589 EasyMock.verify(mMockDevice); 590 } 591 592 public void testSetup_battery_saver_off() throws DeviceNotAvailableException, TargetSetupError { 593 doSetupExpectations(); 594 doCheckExternalStoreSpaceExpectations(); 595 doSettingExpectations("global", "low_power", "0"); 596 EasyMock.replay(mMockDevice); 597 598 mDeviceSetup.setBatterySaver(BinaryState.OFF); 599 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 600 601 EasyMock.verify(mMockDevice); 602 } 603 604 public void testSetup_battery_saver_trigger() throws DeviceNotAvailableException, 605 TargetSetupError { 606 doSetupExpectations(); 607 doCheckExternalStoreSpaceExpectations(); 608 doSettingExpectations("global", "low_power_trigger_level", "50"); 609 EasyMock.replay(mMockDevice); 610 611 mDeviceSetup.setBatterySaverTrigger(50); 612 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 613 614 EasyMock.verify(mMockDevice); 615 } 616 617 public void testSetup_enable_full_battery_stats_history() throws DeviceNotAvailableException, 618 TargetSetupError { 619 doSetupExpectations(); 620 doCheckExternalStoreSpaceExpectations(); 621 doCommandsExpectations("dumpsys batterystats --enable full-history"); 622 EasyMock.replay(mMockDevice); 623 624 mDeviceSetup.setEnableFullBatteryStatsHistory(true); 625 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 626 627 EasyMock.verify(mMockDevice); 628 } 629 630 public void testSetup_disable_doze() throws DeviceNotAvailableException, TargetSetupError { 631 doSetupExpectations(); 632 doCheckExternalStoreSpaceExpectations(); 633 doCommandsExpectations("dumpsys deviceidle disable"); 634 EasyMock.replay(mMockDevice); 635 636 mDeviceSetup.setDisableDoze(true); 637 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 638 639 EasyMock.verify(mMockDevice); 640 } 641 642 public void testSetup_update_time_on() throws DeviceNotAvailableException, TargetSetupError { 643 doSetupExpectations(); 644 doCheckExternalStoreSpaceExpectations(); 645 doSettingExpectations("system", "auto_time", "1"); 646 EasyMock.replay(mMockDevice); 647 648 mDeviceSetup.setAutoUpdateTime(BinaryState.ON); 649 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 650 651 EasyMock.verify(mMockDevice); 652 } 653 654 public void testSetup_update_time_off() throws DeviceNotAvailableException, TargetSetupError { 655 doSetupExpectations(); 656 doCheckExternalStoreSpaceExpectations(); 657 doSettingExpectations("system", "auto_time", "0"); 658 EasyMock.replay(mMockDevice); 659 660 mDeviceSetup.setAutoUpdateTime(BinaryState.OFF); 661 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 662 663 EasyMock.verify(mMockDevice); 664 } 665 666 public void testSetup_update_timezone_on() throws DeviceNotAvailableException, 667 TargetSetupError { 668 doSetupExpectations(); 669 doCheckExternalStoreSpaceExpectations(); 670 doSettingExpectations("system", "auto_timezone", "1"); 671 EasyMock.replay(mMockDevice); 672 673 mDeviceSetup.setAutoUpdateTimezone(BinaryState.ON); 674 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 675 676 EasyMock.verify(mMockDevice); 677 } 678 679 public void testSetup_update_timezone_off() throws DeviceNotAvailableException, 680 TargetSetupError { 681 doSetupExpectations(); 682 doCheckExternalStoreSpaceExpectations(); 683 doSettingExpectations("system", "auto_timezone", "0"); 684 EasyMock.replay(mMockDevice); 685 686 mDeviceSetup.setAutoUpdateTimezone(BinaryState.OFF); 687 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 688 689 EasyMock.verify(mMockDevice); 690 } 691 692 public void testSetup_set_timezone_LA() throws DeviceNotAvailableException, 693 TargetSetupError { 694 doSetupExpectations(); 695 doCheckExternalStoreSpaceExpectations(); 696 doCommandsExpectations("setprop \"persist.sys.timezone\" \"America/Los_Angeles\""); 697 EasyMock.replay(mMockDevice); 698 699 mDeviceSetup.setTimezone("America/Los_Angeles"); 700 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 701 702 EasyMock.verify(mMockDevice); 703 } 704 705 public void testSetup_no_disable_dialing() throws DeviceNotAvailableException, 706 TargetSetupError { 707 Capture<String> setPropCapture = new Capture<>(); 708 doSetupExpectations(true, setPropCapture); 709 doCheckExternalStoreSpaceExpectations(); 710 EasyMock.replay(mMockDevice); 711 712 mDeviceSetup.setDisableDialing(false); 713 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 714 715 EasyMock.verify(mMockDevice); 716 717 assertFalse("Set prop contains ro.telephony.disable-call=true", 718 setPropCapture.getValue().contains("ro.telephony.disable-call=true\n")); 719 } 720 721 public void testSetup_sim_data() throws DeviceNotAvailableException, TargetSetupError { 722 doSetupExpectations(); 723 doCheckExternalStoreSpaceExpectations(); 724 doSettingExpectations("global", "multi_sim_data_call", "1"); 725 EasyMock.replay(mMockDevice); 726 727 mDeviceSetup.setDefaultSimData(1); 728 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 729 730 EasyMock.verify(mMockDevice); 731 } 732 733 public void testSetup_sim_voice() throws DeviceNotAvailableException, TargetSetupError { 734 doSetupExpectations(); 735 doCheckExternalStoreSpaceExpectations(); 736 doSettingExpectations("global", "multi_sim_voice_call", "1"); 737 EasyMock.replay(mMockDevice); 738 739 mDeviceSetup.setDefaultSimVoice(1); 740 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 741 742 EasyMock.verify(mMockDevice); 743 } 744 745 public void testSetup_sim_sms() throws DeviceNotAvailableException, TargetSetupError { 746 doSetupExpectations(); 747 doCheckExternalStoreSpaceExpectations(); 748 doSettingExpectations("global", "multi_sim_sms", "1"); 749 EasyMock.replay(mMockDevice); 750 751 mDeviceSetup.setDefaultSimSms(1); 752 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 753 754 EasyMock.verify(mMockDevice); 755 } 756 757 public void testSetup_no_disable_audio() throws DeviceNotAvailableException, TargetSetupError { 758 Capture<String> setPropCapture = new Capture<>(); 759 doSetupExpectations(true, setPropCapture); 760 doCheckExternalStoreSpaceExpectations(); 761 EasyMock.replay(mMockDevice); 762 763 mDeviceSetup.setDisableAudio(false); 764 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 765 766 EasyMock.verify(mMockDevice); 767 768 assertFalse("Set prop contains ro.audio.silent=1", 769 setPropCapture.getValue().contains("ro.audio.silent=1\n")); 770 } 771 772 public void testSetup_no_test_harness() throws DeviceNotAvailableException, TargetSetupError { 773 Capture<String> setPropCapture = new Capture<>(); 774 doSetupExpectations(true, setPropCapture); 775 doCheckExternalStoreSpaceExpectations(); 776 EasyMock.replay(mMockDevice); 777 778 mDeviceSetup.setTestHarness(false); 779 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 780 781 EasyMock.verify(mMockDevice); 782 783 String setProp = setPropCapture.getValue(); 784 assertFalse("Set prop contains ro.test_harness=1", 785 setProp.contains("ro.test_harness=1\n")); 786 assertFalse("Set prop contains ro.monkey=1", 787 setProp.contains("ro.monkey=1\n")); 788 } 789 790 public void testSetup_disalbe_dalvik_verifier() throws DeviceNotAvailableException, 791 TargetSetupError { 792 Capture<String> setPropCapture = new Capture<>(); 793 doSetupExpectations(true, setPropCapture); 794 doCheckExternalStoreSpaceExpectations(); 795 EasyMock.replay(mMockDevice); 796 797 mDeviceSetup.setDisableDalvikVerifier(true); 798 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 799 800 EasyMock.verify(mMockDevice); 801 802 String setProp = setPropCapture.getValue(); 803 assertTrue("Set prop doesn't contain dalvik.vm.dexopt-flags=v=n", 804 setProp.contains("dalvik.vm.dexopt-flags=v=n\n")); 805 } 806 807 /** 808 * Test {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)} when free space check fails. 809 */ 810 public void testSetup_freespace() throws Exception { 811 doSetupExpectations(); 812 mDeviceSetup.setMinExternalStorageKb(500); 813 EasyMock.expect(mMockDevice.getExternalStoreFreeSpace()).andReturn(1L); 814 EasyMock.replay(mMockDevice); 815 try { 816 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 817 fail("DeviceNotAvailableException not thrown"); 818 } catch (DeviceNotAvailableException e) { 819 // expected 820 } 821 } 822 823 /** 824 * Test {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)} when local data path does not 825 * exist. 826 */ 827 public void testSetup_badLocalData() throws Exception { 828 doSetupExpectations(); 829 mDeviceSetup.setLocalDataPath(new File("idontexist")); 830 EasyMock.replay(mMockDevice); 831 try { 832 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 833 fail("TargetSetupError not thrown"); 834 } catch (TargetSetupError e) { 835 // expected 836 } 837 } 838 839 /** 840 * Test normal case {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)} when local data 841 * is synced 842 */ 843 public void testSetup_syncData() throws Exception { 844 doSetupExpectations(); 845 doCheckExternalStoreSpaceExpectations(); 846 doSyncDataExpectations(true); 847 848 EasyMock.replay(mMockDevice, mMockIDevice); 849 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 850 EasyMock.verify(mMockDevice, mMockIDevice); 851 } 852 853 /** 854 * Test case {@link DeviceSetup#setUp(ITestDevice, IBuildInfo)} when local data fails to be 855 * synced. 856 */ 857 public void testSetup_syncDataFails() throws Exception { 858 doSetupExpectations(); 859 doSyncDataExpectations(false); 860 EasyMock.replay(mMockDevice, mMockIDevice); 861 try { 862 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 863 fail("TargetSetupError not thrown"); 864 } catch (TargetSetupError e) { 865 // expected 866 } 867 } 868 869 @SuppressWarnings("deprecation") 870 public void testSetup_legacy() throws DeviceNotAvailableException, TargetSetupError { 871 Capture<String> setPropCapture = new Capture<>(); 872 doSetupExpectations(true, setPropCapture); 873 doCheckExternalStoreSpaceExpectations(); 874 EasyMock.replay(mMockDevice); 875 876 mDeviceSetup.setDeprecatedAudioSilent(false); 877 mDeviceSetup.setDeprecatedMinExternalStoreSpace(1000); 878 mDeviceSetup.setDeprecatedSetProp("key=value"); 879 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 880 881 EasyMock.verify(mMockDevice); 882 883 String setProp = setPropCapture.getValue(); 884 assertTrue("Set prop doesn't contain ro.telephony.disable-call=true", 885 setProp.contains("ro.telephony.disable-call=true\n")); 886 assertTrue("Set prop doesn't contain ro.test_harness=1", 887 setProp.contains("ro.test_harness=1\n")); 888 assertTrue("Set prop doesn't contain ro.monkey=1", 889 setProp.contains("ro.monkey=1\n")); 890 assertTrue("Set prop doesn't contain key=value", 891 setProp.contains("key=value\n")); 892 } 893 894 @SuppressWarnings("deprecation") 895 public void testSetup_legacy_storage_conflict() throws DeviceNotAvailableException { 896 doSetupExpectations(); 897 EasyMock.replay(mMockDevice); 898 899 mDeviceSetup.setMinExternalStorageKb(1000); 900 mDeviceSetup.setDeprecatedMinExternalStoreSpace(1000); 901 try { 902 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 903 fail("TargetSetupError expected"); 904 } catch (TargetSetupError e) { 905 // Expected 906 } 907 } 908 909 @SuppressWarnings("deprecation") 910 public void testSetup_legacy_silent_conflict() throws DeviceNotAvailableException { 911 doSetupExpectations(); 912 EasyMock.replay(mMockDevice); 913 914 mDeviceSetup.setDisableAudio(false); 915 mDeviceSetup.setDeprecatedAudioSilent(false); 916 try { 917 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 918 fail("TargetSetupError expected"); 919 } catch (TargetSetupError e) { 920 // Expected 921 } 922 } 923 924 @SuppressWarnings("deprecation") 925 public void testSetup_legacy_setprop_conflict() throws DeviceNotAvailableException { 926 doSetupExpectations(); 927 EasyMock.replay(mMockDevice); 928 929 mDeviceSetup.setProperty("key", "value"); 930 mDeviceSetup.setDeprecatedSetProp("key=value"); 931 try { 932 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 933 fail("TargetSetupError expected"); 934 } catch (TargetSetupError e) { 935 // Expected 936 } 937 } 938 939 public void testTearDown() throws Exception { 940 EasyMock.replay(mMockDevice); 941 mDeviceSetup.tearDown(mMockDevice, mMockBuildInfo, null); 942 EasyMock.verify(mMockDevice); 943 } 944 945 public void testTearDown_disconnectFromWifi() throws Exception { 946 EasyMock.expect(mMockDevice.isWifiEnabled()).andReturn(Boolean.TRUE); 947 EasyMock.expect(mMockDevice.disconnectFromWifi()).andReturn(Boolean.TRUE); 948 mDeviceSetup.setWifiNetwork("wifi_network"); 949 EasyMock.replay(mMockDevice); 950 mDeviceSetup.tearDown(mMockDevice, mMockBuildInfo, null); 951 EasyMock.verify(mMockDevice); 952 } 953 954 /** Test that tearDown is inop when using a stub device instance. */ 955 public void testTearDown_tcpDevice() throws Exception { 956 EasyMock.expect(mMockDevice.getIDevice()).andReturn(new TcpDevice("tcp-device-0")); 957 EasyMock.replay(mMockDevice); 958 mDeviceSetup.tearDown(mMockDevice, mMockBuildInfo, null); 959 EasyMock.verify(mMockDevice); 960 } 961 962 public void testSetup_rootDisabled() throws Exception { 963 doSetupExpectations(true /* screenOn */, false /* root enabled */, 964 false /* root response */, DEFAULT_API_LEVEL, new Capture<>()); 965 doCheckExternalStoreSpaceExpectations(); 966 EasyMock.replay(mMockDevice); 967 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 968 EasyMock.verify(mMockDevice); 969 } 970 971 public void testSetup_rootFailed() throws Exception { 972 doSetupExpectations(true /* screenOn */, true /* root enabled */, 973 false /* root response */, DEFAULT_API_LEVEL, new Capture<>()); 974 EasyMock.replay(mMockDevice); 975 try { 976 mDeviceSetup.setUp(mMockDevice, mMockBuildInfo); 977 fail("TargetSetupError expected"); 978 } catch (TargetSetupError e) { 979 // Expected 980 } 981 } 982 983 /** 984 * Set EasyMock expectations for a normal setup call 985 */ 986 private void doSetupExpectations() throws DeviceNotAvailableException { 987 doSetupExpectations(true /* screen on */, true /* root enabled */, true /* root response */, 988 DEFAULT_API_LEVEL, new Capture<String>()); 989 } 990 991 /** 992 * Set EasyMock expectations for a normal setup call 993 */ 994 private void doSetupExpectations(int apiLevel) throws DeviceNotAvailableException { 995 doSetupExpectations(true /* screen on */, true /* root enabled */, true /* root response */, 996 apiLevel, new Capture<String>()); 997 } 998 999 /** 1000 * Set EasyMock expectations for a normal setup call 1001 */ 1002 private void doSetupExpectations(boolean screenOn, Capture<String> setPropCapture) 1003 throws DeviceNotAvailableException { 1004 doSetupExpectations(screenOn, true /* root enabled */, true /* root response */, 1005 DEFAULT_API_LEVEL, setPropCapture); 1006 } 1007 1008 /** 1009 * Set EasyMock expectations for a normal setup call 1010 */ 1011 private void doSetupExpectations(boolean screenOn, boolean adbRootEnabled, 1012 boolean adbRootResponse, int apiLevel, 1013 Capture<String> setPropCapture) throws DeviceNotAvailableException { 1014 TestDeviceOptions options = new TestDeviceOptions(); 1015 options.setEnableAdbRoot(adbRootEnabled); 1016 EasyMock.expect(mMockDevice.getOptions()).andReturn(options).once(); 1017 if (adbRootEnabled) { 1018 EasyMock.expect(mMockDevice.enableAdbRoot()).andReturn(adbRootResponse); 1019 } 1020 EasyMock.expect(mMockDevice.clearErrorDialogs()).andReturn(Boolean.TRUE); 1021 EasyMock.expect(mMockDevice.getApiLevel()).andReturn(apiLevel); 1022 // expect push of local.prop file to change system properties 1023 EasyMock.expect(mMockDevice.pushString(EasyMock.capture(setPropCapture), 1024 EasyMock.contains("local.prop"))).andReturn(Boolean.TRUE); 1025 EasyMock.expect(mMockDevice.executeShellCommand( 1026 EasyMock.matches("chmod 644 .*local.prop"))).andReturn(""); 1027 mMockDevice.reboot(); 1028 if (screenOn) { 1029 EasyMock.expect(mMockDevice.executeShellCommand("svc power stayon true")).andReturn(""); 1030 EasyMock.expect(mMockDevice.executeShellCommand("input keyevent 82")).andReturn(""); 1031 EasyMock.expect(mMockDevice.executeShellCommand("input keyevent 3")).andReturn(""); 1032 } 1033 } 1034 1035 /** 1036 * Perform common EasyMock expect operations for a setUp call which syncs local data 1037 */ 1038 private void doSyncDataExpectations(boolean result) throws DeviceNotAvailableException { 1039 mDeviceSetup.setLocalDataPath(mTmpDir); 1040 EasyMock.expect(mMockDevice.getIDevice()).andReturn(mMockIDevice); 1041 String mntPoint = "/sdcard"; 1042 EasyMock.expect(mMockIDevice.getMountPoint(IDevice.MNT_EXTERNAL_STORAGE)).andReturn( 1043 mntPoint); 1044 EasyMock.expect(mMockDevice.syncFiles(mTmpDir, mntPoint)).andReturn(result); 1045 } 1046 1047 private void doCheckExternalStoreSpaceExpectations() throws DeviceNotAvailableException { 1048 EasyMock.expect(mMockDevice.getExternalStoreFreeSpace()).andReturn(1000l); 1049 } 1050 1051 private void doCommandsExpectations(String... commands) 1052 throws DeviceNotAvailableException { 1053 for (String command : commands) { 1054 EasyMock.expect(mMockDevice.executeShellCommand(command)).andReturn(""); 1055 } 1056 } 1057 1058 private void doSettingExpectations(String namespace, String key, String value) 1059 throws DeviceNotAvailableException { 1060 EasyMock.expect(mMockDevice.getApiLevel()).andReturn(22); 1061 mMockDevice.setSetting(namespace, key, value); 1062 EasyMock.expectLastCall(); 1063 } 1064 } 1065