1 /* 2 * Copyright (C) 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.cts.netpolicy; 17 18 import com.android.tradefed.device.DeviceNotAvailableException; 19 import com.android.tradefed.device.ITestDevice; 20 import com.android.tradefed.invoker.TestInformation; 21 import com.android.tradefed.log.LogUtil; 22 import com.android.tradefed.targetprep.ITargetPreparer; 23 24 public class NetworkPolicyTestsPreparer implements ITargetPreparer { 25 private ITestDevice mDevice; 26 private boolean mOriginalAirplaneModeEnabled; 27 private String mOriginalAppStandbyEnabled; 28 private String mOriginalBatteryStatsConstants; 29 private final static String KEY_STABLE_CHARGING_DELAY_MS = "battery_charged_delay_ms"; 30 private final static int DESIRED_STABLE_CHARGING_DELAY_MS = 0; 31 32 @Override setUp(TestInformation testInformation)33 public void setUp(TestInformation testInformation) throws DeviceNotAvailableException { 34 mDevice = testInformation.getDevice(); 35 mOriginalAppStandbyEnabled = getAppStandbyEnabled(); 36 setAppStandbyEnabled("1"); 37 LogUtil.CLog.d("Original app_standby_enabled: " + mOriginalAppStandbyEnabled); 38 39 mOriginalBatteryStatsConstants = getBatteryStatsConstants(); 40 setBatteryStatsConstants( 41 KEY_STABLE_CHARGING_DELAY_MS + "=" + DESIRED_STABLE_CHARGING_DELAY_MS); 42 LogUtil.CLog.d("Original battery_saver_constants: " + mOriginalBatteryStatsConstants); 43 44 mOriginalAirplaneModeEnabled = getAirplaneModeEnabled(); 45 // Turn off airplane mode in case another test left the device in that state. 46 setAirplaneModeEnabled(false); 47 LogUtil.CLog.d("Original airplane mode state: " + mOriginalAirplaneModeEnabled); 48 } 49 50 @Override tearDown(TestInformation testInformation, Throwable e)51 public void tearDown(TestInformation testInformation, Throwable e) 52 throws DeviceNotAvailableException { 53 setAirplaneModeEnabled(mOriginalAirplaneModeEnabled); 54 setAppStandbyEnabled(mOriginalAppStandbyEnabled); 55 setBatteryStatsConstants(mOriginalBatteryStatsConstants); 56 } 57 setAirplaneModeEnabled(boolean enable)58 private void setAirplaneModeEnabled(boolean enable) throws DeviceNotAvailableException { 59 executeCmd("cmd connectivity airplane-mode " + (enable ? "enable" : "disable")); 60 } 61 getAirplaneModeEnabled()62 private boolean getAirplaneModeEnabled() throws DeviceNotAvailableException { 63 return "enabled".equals(executeCmd("cmd connectivity airplane-mode").trim()); 64 } 65 setAppStandbyEnabled(String appStandbyEnabled)66 private void setAppStandbyEnabled(String appStandbyEnabled) throws DeviceNotAvailableException { 67 if ("null".equals(appStandbyEnabled)) { 68 executeCmd("settings delete global app_standby_enabled"); 69 } else { 70 executeCmd("settings put global app_standby_enabled " + appStandbyEnabled); 71 } 72 } 73 getAppStandbyEnabled()74 private String getAppStandbyEnabled() throws DeviceNotAvailableException { 75 return executeCmd("settings get global app_standby_enabled").trim(); 76 } 77 setBatteryStatsConstants(String batteryStatsConstants)78 private void setBatteryStatsConstants(String batteryStatsConstants) 79 throws DeviceNotAvailableException { 80 executeCmd("settings put global battery_stats_constants \"" + batteryStatsConstants + "\""); 81 } 82 getBatteryStatsConstants()83 private String getBatteryStatsConstants() throws DeviceNotAvailableException { 84 return executeCmd("settings get global battery_stats_constants"); 85 } 86 executeCmd(String cmd)87 private String executeCmd(String cmd) throws DeviceNotAvailableException { 88 final String output = mDevice.executeShellCommand(cmd).trim(); 89 LogUtil.CLog.d("Output for '%s': %s", cmd, output); 90 return output; 91 } 92 } 93