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