• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.cts.net;
18 
19 import android.platform.test.annotations.SecurityTest;
20 
21 import com.android.ddmlib.Log;
22 import com.android.tradefed.device.DeviceNotAvailableException;
23 import com.android.tradefed.util.RunUtil;
24 
25 public class HostsideRestrictBackgroundNetworkTests extends HostsideNetworkTestCase {
26 
27     @Override
setUp()28     protected void setUp() throws Exception {
29         super.setUp();
30 
31         uninstallPackage(TEST_APP2_PKG, false);
32         installPackage(TEST_APP2_APK);
33     }
34 
35     @Override
tearDown()36     protected void tearDown() throws Exception {
37         super.tearDown();
38 
39         uninstallPackage(TEST_APP2_PKG, true);
40     }
41 
42     @SecurityTest
testDataWarningReceiver()43     public void testDataWarningReceiver() throws Exception {
44         runDeviceTests(TEST_PKG, TEST_PKG + ".DataWarningReceiverTest",
45                 "testSnoozeWarningNotReceived");
46     }
47 
48     /**************************
49      * Data Saver Mode tests. *
50      **************************/
51 
testDataSaverMode_disabled()52     public void testDataSaverMode_disabled() throws Exception {
53         runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
54                 "testGetRestrictBackgroundStatus_disabled");
55     }
56 
testDataSaverMode_whitelisted()57     public void testDataSaverMode_whitelisted() throws Exception {
58         runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
59                 "testGetRestrictBackgroundStatus_whitelisted");
60     }
61 
testDataSaverMode_enabled()62     public void testDataSaverMode_enabled() throws Exception {
63         runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
64                 "testGetRestrictBackgroundStatus_enabled");
65     }
66 
testDataSaverMode_blacklisted()67     public void testDataSaverMode_blacklisted() throws Exception {
68         runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
69                 "testGetRestrictBackgroundStatus_blacklisted");
70     }
71 
testDataSaverMode_reinstall()72     public void testDataSaverMode_reinstall() throws Exception {
73         final int oldUid = getUid(TEST_APP2_PKG);
74 
75         // Make sure whitelist is revoked when package is removed
76         addRestrictBackgroundWhitelist(oldUid);
77 
78         uninstallPackage(TEST_APP2_PKG, true);
79         assertPackageUninstalled(TEST_APP2_PKG);
80         assertRestrictBackgroundWhitelist(oldUid, false);
81 
82         installPackage(TEST_APP2_APK);
83         final int newUid = getUid(TEST_APP2_PKG);
84         assertRestrictBackgroundWhitelist(oldUid, false);
85         assertRestrictBackgroundWhitelist(newUid, false);
86     }
87 
testDataSaverMode_requiredWhitelistedPackages()88     public void testDataSaverMode_requiredWhitelistedPackages() throws Exception {
89         runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
90                 "testGetRestrictBackgroundStatus_requiredWhitelistedPackages");
91     }
92 
testDataSaverMode_broadcastNotSentOnUnsupportedDevices()93     public void testDataSaverMode_broadcastNotSentOnUnsupportedDevices() throws Exception {
94         runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
95                 "testBroadcastNotSentOnUnsupportedDevices");
96     }
97 
98     /*****************************
99      * Battery Saver Mode tests. *
100      *****************************/
101 
testBatterySaverModeMetered_disabled()102     public void testBatterySaverModeMetered_disabled() throws Exception {
103         runDeviceTests(TEST_PKG, TEST_PKG + ".BatterySaverModeMeteredTest",
104                 "testBackgroundNetworkAccess_disabled");
105     }
106 
testBatterySaverModeMetered_whitelisted()107     public void testBatterySaverModeMetered_whitelisted() throws Exception {
108         runDeviceTests(TEST_PKG, TEST_PKG + ".BatterySaverModeMeteredTest",
109                 "testBackgroundNetworkAccess_whitelisted");
110     }
111 
testBatterySaverModeMetered_enabled()112     public void testBatterySaverModeMetered_enabled() throws Exception {
113         runDeviceTests(TEST_PKG, TEST_PKG + ".BatterySaverModeMeteredTest",
114                 "testBackgroundNetworkAccess_enabled");
115     }
116 
testBatterySaverMode_reinstall()117     public void testBatterySaverMode_reinstall() throws Exception {
118         if (!isDozeModeEnabled()) {
119             Log.w(TAG, "testBatterySaverMode_reinstall() skipped because device does not support "
120                     + "Doze Mode");
121             return;
122         }
123 
124         addPowerSaveModeWhitelist(TEST_APP2_PKG);
125 
126         uninstallPackage(TEST_APP2_PKG, true);
127         assertPackageUninstalled(TEST_APP2_PKG);
128         assertPowerSaveModeWhitelist(TEST_APP2_PKG, false);
129 
130         installPackage(TEST_APP2_APK);
131         assertPowerSaveModeWhitelist(TEST_APP2_PKG, false);
132     }
133 
testBatterySaverModeNonMetered_disabled()134     public void testBatterySaverModeNonMetered_disabled() throws Exception {
135         runDeviceTests(TEST_PKG, TEST_PKG + ".BatterySaverModeNonMeteredTest",
136                 "testBackgroundNetworkAccess_disabled");
137     }
138 
testBatterySaverModeNonMetered_whitelisted()139     public void testBatterySaverModeNonMetered_whitelisted() throws Exception {
140         runDeviceTests(TEST_PKG, TEST_PKG + ".BatterySaverModeNonMeteredTest",
141                 "testBackgroundNetworkAccess_whitelisted");
142     }
143 
testBatterySaverModeNonMetered_enabled()144     public void testBatterySaverModeNonMetered_enabled() throws Exception {
145         runDeviceTests(TEST_PKG, TEST_PKG + ".BatterySaverModeNonMeteredTest",
146                 "testBackgroundNetworkAccess_enabled");
147     }
148 
149     /*******************
150      * App idle tests. *
151      *******************/
152 
testAppIdleMetered_disabled()153     public void testAppIdleMetered_disabled() throws Exception {
154         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleMeteredTest",
155                 "testBackgroundNetworkAccess_disabled");
156     }
157 
testAppIdleMetered_whitelisted()158     public void testAppIdleMetered_whitelisted() throws Exception {
159         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleMeteredTest",
160                 "testBackgroundNetworkAccess_whitelisted");
161     }
162 
testAppIdleMetered_tempWhitelisted()163     public void testAppIdleMetered_tempWhitelisted() throws Exception {
164         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleMeteredTest",
165                 "testBackgroundNetworkAccess_tempWhitelisted");
166     }
167 
testAppIdleMetered_enabled()168     public void testAppIdleMetered_enabled() throws Exception {
169         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleMeteredTest",
170                 "testBackgroundNetworkAccess_enabled");
171     }
172 
testAppIdleMetered_idleWhitelisted()173     public void testAppIdleMetered_idleWhitelisted() throws Exception {
174         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleMeteredTest",
175                 "testAppIdleNetworkAccess_idleWhitelisted");
176     }
177 
178     // TODO: currently power-save mode and idle uses the same whitelist, so this test would be
179     // redundant (as it would be testing the same as testBatterySaverMode_reinstall())
180     //    public void testAppIdle_reinstall() throws Exception {
181     //    }
182 
testAppIdleNonMetered_disabled()183     public void testAppIdleNonMetered_disabled() throws Exception {
184         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
185                 "testBackgroundNetworkAccess_disabled");
186     }
187 
testAppIdleNonMetered_whitelisted()188     public void testAppIdleNonMetered_whitelisted() throws Exception {
189         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
190                 "testBackgroundNetworkAccess_whitelisted");
191     }
192 
testAppIdleNonMetered_tempWhitelisted()193     public void testAppIdleNonMetered_tempWhitelisted() throws Exception {
194         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
195                 "testBackgroundNetworkAccess_tempWhitelisted");
196     }
197 
testAppIdleNonMetered_enabled()198     public void testAppIdleNonMetered_enabled() throws Exception {
199         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
200                 "testBackgroundNetworkAccess_enabled");
201     }
202 
testAppIdleNonMetered_idleWhitelisted()203     public void testAppIdleNonMetered_idleWhitelisted() throws Exception {
204         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
205                 "testAppIdleNetworkAccess_idleWhitelisted");
206     }
207 
testAppIdleNonMetered_whenCharging()208     public void testAppIdleNonMetered_whenCharging() throws Exception {
209         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
210                 "testAppIdleNetworkAccess_whenCharging");
211     }
212 
testAppIdleMetered_whenCharging()213     public void testAppIdleMetered_whenCharging() throws Exception {
214         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleMeteredTest",
215                 "testAppIdleNetworkAccess_whenCharging");
216     }
217 
testAppIdle_toast()218     public void testAppIdle_toast() throws Exception {
219         // Check that showing a toast doesn't bring an app out of standby
220         runDeviceTests(TEST_PKG, TEST_PKG + ".AppIdleNonMeteredTest",
221                 "testAppIdle_toast");
222     }
223 
224     /********************
225      * Doze Mode tests. *
226      ********************/
227 
testDozeModeMetered_disabled()228     public void testDozeModeMetered_disabled() throws Exception {
229         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeMeteredTest",
230                 "testBackgroundNetworkAccess_disabled");
231     }
232 
testDozeModeMetered_whitelisted()233     public void testDozeModeMetered_whitelisted() throws Exception {
234         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeMeteredTest",
235                 "testBackgroundNetworkAccess_whitelisted");
236     }
237 
testDozeModeMetered_enabled()238     public void testDozeModeMetered_enabled() throws Exception {
239         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeMeteredTest",
240                 "testBackgroundNetworkAccess_enabled");
241     }
242 
testDozeModeMetered_enabledButWhitelistedOnNotificationAction()243     public void testDozeModeMetered_enabledButWhitelistedOnNotificationAction() throws Exception {
244         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeMeteredTest",
245                 "testBackgroundNetworkAccess_enabledButWhitelistedOnNotificationAction");
246     }
247 
248     // TODO: currently power-save mode and idle uses the same whitelist, so this test would be
249     // redundant (as it would be testing the same as testBatterySaverMode_reinstall())
250     //    public void testDozeMode_reinstall() throws Exception {
251     //    }
252 
testDozeModeNonMetered_disabled()253     public void testDozeModeNonMetered_disabled() throws Exception {
254         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeNonMeteredTest",
255                 "testBackgroundNetworkAccess_disabled");
256     }
257 
testDozeModeNonMetered_whitelisted()258     public void testDozeModeNonMetered_whitelisted() throws Exception {
259         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeNonMeteredTest",
260                 "testBackgroundNetworkAccess_whitelisted");
261     }
262 
testDozeModeNonMetered_enabled()263     public void testDozeModeNonMetered_enabled() throws Exception {
264         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeNonMeteredTest",
265                 "testBackgroundNetworkAccess_enabled");
266     }
267 
testDozeModeNonMetered_enabledButWhitelistedOnNotificationAction()268     public void testDozeModeNonMetered_enabledButWhitelistedOnNotificationAction()
269             throws Exception {
270         runDeviceTests(TEST_PKG, TEST_PKG + ".DozeModeNonMeteredTest",
271                 "testBackgroundNetworkAccess_enabledButWhitelistedOnNotificationAction");
272     }
273 
274     /**********************
275      * Mixed modes tests. *
276      **********************/
277 
testDataAndBatterySaverModes_meteredNetwork()278     public void testDataAndBatterySaverModes_meteredNetwork() throws Exception {
279         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
280                 "testDataAndBatterySaverModes_meteredNetwork");
281     }
282 
testDataAndBatterySaverModes_nonMeteredNetwork()283     public void testDataAndBatterySaverModes_nonMeteredNetwork() throws Exception {
284         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
285                 "testDataAndBatterySaverModes_nonMeteredNetwork");
286     }
287 
testDozeAndBatterySaverMode_powerSaveWhitelists()288     public void testDozeAndBatterySaverMode_powerSaveWhitelists() throws Exception {
289         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
290                 "testDozeAndBatterySaverMode_powerSaveWhitelists");
291     }
292 
testDozeAndAppIdle_powerSaveWhitelists()293     public void testDozeAndAppIdle_powerSaveWhitelists() throws Exception {
294         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
295                 "testDozeAndAppIdle_powerSaveWhitelists");
296     }
297 
testAppIdleAndDoze_tempPowerSaveWhitelists()298     public void testAppIdleAndDoze_tempPowerSaveWhitelists() throws Exception {
299         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
300                 "testAppIdleAndDoze_tempPowerSaveWhitelists");
301     }
302 
testAppIdleAndBatterySaver_tempPowerSaveWhitelists()303     public void testAppIdleAndBatterySaver_tempPowerSaveWhitelists() throws Exception {
304         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
305                 "testAppIdleAndBatterySaver_tempPowerSaveWhitelists");
306     }
307 
testDozeAndAppIdle_appIdleWhitelist()308     public void testDozeAndAppIdle_appIdleWhitelist() throws Exception {
309         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
310                 "testDozeAndAppIdle_appIdleWhitelist");
311     }
312 
testAppIdleAndDoze_tempPowerSaveAndAppIdleWhitelists()313     public void testAppIdleAndDoze_tempPowerSaveAndAppIdleWhitelists() throws Exception {
314         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
315                 "testAppIdleAndDoze_tempPowerSaveAndAppIdleWhitelists");
316     }
317 
testAppIdleAndBatterySaver_tempPowerSaveAndAppIdleWhitelists()318     public void testAppIdleAndBatterySaver_tempPowerSaveAndAppIdleWhitelists() throws Exception {
319         runDeviceTests(TEST_PKG, TEST_PKG + ".MixedModesTest",
320                 "testAppIdleAndBatterySaver_tempPowerSaveAndAppIdleWhitelists");
321     }
322 
323     /**************************
324      * Restricted mode tests. *
325      **************************/
testNetworkAccess_restrictedMode()326     public void testNetworkAccess_restrictedMode() throws Exception {
327         runDeviceTests(TEST_PKG, TEST_PKG + ".RestrictedModeTest",
328                 "testNetworkAccess");
329     }
330 
testNetworkAccess_restrictedMode_withBatterySaver()331     public void testNetworkAccess_restrictedMode_withBatterySaver() throws Exception {
332         runDeviceTests(TEST_PKG, TEST_PKG + ".RestrictedModeTest",
333                 "testNetworkAccess_withBatterySaver");
334     }
335 
336     /************************
337      * Expedited job tests. *
338      ************************/
339 
testMeteredNetworkAccess_expeditedJob()340     public void testMeteredNetworkAccess_expeditedJob() throws Exception {
341         runDeviceTests(TEST_PKG, TEST_PKG + ".ExpeditedJobMeteredTest");
342     }
343 
testNonMeteredNetworkAccess_expeditedJob()344     public void testNonMeteredNetworkAccess_expeditedJob() throws Exception {
345         runDeviceTests(TEST_PKG, TEST_PKG + ".ExpeditedJobNonMeteredTest");
346     }
347 
348     /*******************
349      * Helper methods. *
350      *******************/
351 
assertRestrictBackgroundWhitelist(int uid, boolean expected)352     private void assertRestrictBackgroundWhitelist(int uid, boolean expected) throws Exception {
353         final int max_tries = 5;
354         boolean actual = false;
355         for (int i = 1; i <= max_tries; i++) {
356             final String output = runCommand("cmd netpolicy list restrict-background-whitelist ");
357             actual = output.contains(Integer.toString(uid));
358             if (expected == actual) {
359                 return;
360             }
361             Log.v(TAG, "whitelist check for uid " + uid + " doesn't match yet (expected "
362                     + expected + ", got " + actual + "); sleeping 1s before polling again");
363             RunUtil.getDefault().sleep(1000);
364         }
365         fail("whitelist check for uid " + uid + " failed: expected "
366                 + expected + ", got " + actual);
367     }
368 
assertPowerSaveModeWhitelist(String packageName, boolean expected)369     private void assertPowerSaveModeWhitelist(String packageName, boolean expected)
370             throws Exception {
371         // TODO: currently the power-save mode is behaving like idle, but once it changes, we'll
372         // need to use netpolicy for whitelisting
373         assertDelayedCommand("dumpsys deviceidle whitelist =" + packageName,
374                 Boolean.toString(expected));
375     }
376 
377     /**
378      * Asserts the result of a command, wait and re-running it a couple times if necessary.
379      */
assertDelayedCommand(String command, String expectedResult)380     private void assertDelayedCommand(String command, String expectedResult)
381             throws InterruptedException, DeviceNotAvailableException {
382         final int maxTries = 5;
383         for (int i = 1; i <= maxTries; i++) {
384             final String result = runCommand(command).trim();
385             if (result.equals(expectedResult)) return;
386             Log.v(TAG, "Command '" + command + "' returned '" + result + " instead of '"
387                     + expectedResult + "' on attempt #; sleeping 1s before polling again");
388             RunUtil.getDefault().sleep(1000);
389         }
390         fail("Command '" + command + "' did not return '" + expectedResult + "' after " + maxTries
391                 + " attempts");
392     }
393 
addRestrictBackgroundWhitelist(int uid)394     protected void addRestrictBackgroundWhitelist(int uid) throws Exception {
395         runCommand("cmd netpolicy add restrict-background-whitelist " + uid);
396         assertRestrictBackgroundWhitelist(uid, true);
397     }
398 
addPowerSaveModeWhitelist(String packageName)399     private void addPowerSaveModeWhitelist(String packageName) throws Exception {
400         Log.i(TAG, "Adding package " + packageName + " to power-save-mode whitelist");
401         // TODO: currently the power-save mode is behaving like idle, but once it changes, we'll
402         // need to use netpolicy for whitelisting
403         runCommand("dumpsys deviceidle whitelist +" + packageName);
404         assertPowerSaveModeWhitelist(packageName, true);
405     }
406 
isDozeModeEnabled()407     protected boolean isDozeModeEnabled() throws Exception {
408         final String result = runCommand("cmd deviceidle enabled deep").trim();
409         return result.equals("1");
410     }
411 }
412