Home | History | Annotate | Download | only in targetprep
      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