Split client-side test in 2 classes so some common code can be used to
test Power Save Mode. BUG: 27127112 Change-Id: I6954ce8474da6da678d4bfe194334ed5a08aaeff
This commit is contained in:
@@ -37,14 +37,10 @@ import android.test.InstrumentationTestCase;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Tests for the {@link ConnectivityManager} API.
|
||||
*
|
||||
* <p>These tests rely on a host-side test to use {@code adb shell cmd netpolicy} to put the device
|
||||
* in the proper state. In fact, they're more like "assertions" than tests per se - the real test
|
||||
* logic is done on {@code HostsideNetworkTests}.
|
||||
* Superclass for tests related to background network restrictions.
|
||||
*/
|
||||
public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
private static final String TAG = "ConnectivityManagerTest";
|
||||
abstract class AbstractRestrictBackgroundNetworkTestCase extends InstrumentationTestCase {
|
||||
protected static final String TAG = "RestrictBackgroundNetworkTests";
|
||||
|
||||
private static final String TEST_APP2_PKG = "com.android.cts.net.hostside.app2";
|
||||
|
||||
@@ -65,11 +61,11 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
private static final String STATUS_NETWORK_UNAVAILABLE_PREFIX = "NetworkUnavailable:";
|
||||
private static final String STATUS_NETWORK_AVAILABLE_PREFIX = "NetworkAvailable:";
|
||||
|
||||
private Context mContext;
|
||||
private Instrumentation mInstrumentation;
|
||||
private ConnectivityManager mCm;
|
||||
private WifiManager mWfm;
|
||||
private int mUid;
|
||||
protected Context mContext;
|
||||
protected Instrumentation mInstrumentation;
|
||||
protected ConnectivityManager mCm;
|
||||
protected WifiManager mWfm;
|
||||
protected int mUid;
|
||||
private boolean mResetMeteredWifi = false;
|
||||
|
||||
@Override
|
||||
@@ -85,10 +81,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
|
||||
Log.d(TAG, "UIDS: test app=" + myUid + ", app2=" + mUid);
|
||||
|
||||
setRestrictBackground(false);
|
||||
setMeteredNetwork();
|
||||
|
||||
registerApp2BroadcastReceiver();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -100,41 +93,12 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_disabled() throws Exception {
|
||||
removeRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_DISABLED);
|
||||
assertRestrictBackgroundChangedReceived(0);
|
||||
|
||||
// Sanity check: make sure status is always disabled, never whitelisted
|
||||
addRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_DISABLED);
|
||||
assertRestrictBackgroundChangedReceived(0);
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_whitelisted() throws Exception {
|
||||
setRestrictBackground(true);
|
||||
assertRestrictBackgroundChangedReceived(1);
|
||||
|
||||
addRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_WHITELISTED);
|
||||
assertRestrictBackgroundChangedReceived(2);
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_enabled() throws Exception {
|
||||
setRestrictBackground(true);
|
||||
assertRestrictBackgroundChangedReceived(1);
|
||||
|
||||
removeRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_ENABLED);
|
||||
assertRestrictBackgroundChangedReceived(1);
|
||||
}
|
||||
|
||||
public void assertRestrictBackgroundChangedReceived(int expectedCount) throws Exception {
|
||||
protected void assertRestrictBackgroundChangedReceived(int expectedCount) throws Exception {
|
||||
assertRestrictBackgroundChangedReceived(DYNAMIC_RECEIVER, expectedCount);
|
||||
assertRestrictBackgroundChangedReceived(MANIFEST_RECEIVER, 0);
|
||||
}
|
||||
|
||||
private void assertRestrictBackgroundChangedReceived(String receiverName, int expectedCount)
|
||||
protected void assertRestrictBackgroundChangedReceived(String receiverName, int expectedCount)
|
||||
throws Exception {
|
||||
int attempts = 0;
|
||||
int count = 0;
|
||||
@@ -154,7 +118,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
+ maxAttempts * SLEEP_TIME_SEC + " seconds", expectedCount, count);
|
||||
}
|
||||
|
||||
private String sendOrderedBroadcast(Intent intent) throws Exception {
|
||||
protected String sendOrderedBroadcast(Intent intent) throws Exception {
|
||||
final LinkedBlockingQueue<String> result = new LinkedBlockingQueue<>(1);
|
||||
Log.d(TAG, "Sending ordered broadcast: " + intent);
|
||||
mContext.sendOrderedBroadcast(intent, null, new BroadcastReceiver() {
|
||||
@@ -176,7 +140,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
return resultData;
|
||||
}
|
||||
|
||||
private int getNumberBroadcastsReceived(String receiverName, String action) throws Exception {
|
||||
protected int getNumberBroadcastsReceived(String receiverName, String action) throws Exception {
|
||||
final Intent intent = new Intent(ACTION_GET_COUNTERS);
|
||||
intent.putExtra(EXTRA_ACTION, ACTION_RESTRICT_BACKGROUND_CHANGED);
|
||||
intent.putExtra(EXTRA_RECEIVER_NAME, receiverName);
|
||||
@@ -184,7 +148,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
return Integer.valueOf(resultData);
|
||||
}
|
||||
|
||||
private void assertRestrictBackgroundStatus(int expectedApiStatus) throws Exception {
|
||||
protected void assertRestrictBackgroundStatus(int expectedApiStatus) throws Exception {
|
||||
final Intent intent = new Intent(ACTION_CHECK_NETWORK);
|
||||
final String resultData = sendOrderedBroadcast(intent);
|
||||
final String[] resultItems = resultData.split(RESULT_SEPARATOR);
|
||||
@@ -201,13 +165,13 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
+ actualNetworkStatus, actualNetworkStatus.startsWith(expectedPrefix));
|
||||
}
|
||||
|
||||
private String executeShellCommand(String command) throws IOException {
|
||||
protected String executeShellCommand(String command) throws IOException {
|
||||
final String result = runShellCommand(mInstrumentation, command).trim();
|
||||
if (DEBUG) Log.d(TAG, "Command '" + command + "' returned '" + result + "'");
|
||||
return result;
|
||||
}
|
||||
|
||||
private void setMeteredNetwork() throws IOException {
|
||||
protected void setMeteredNetwork() throws IOException {
|
||||
final NetworkInfo info = mCm.getActiveNetworkInfo();
|
||||
final boolean metered = mCm.isActiveNetworkMetered();
|
||||
if (metered) {
|
||||
@@ -221,7 +185,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
mResetMeteredWifi = true;
|
||||
}
|
||||
|
||||
private String setWifiMeteredStatus(boolean metered) throws IOException {
|
||||
protected String setWifiMeteredStatus(boolean metered) throws IOException {
|
||||
mWfm.setWifiEnabled(true);
|
||||
// TODO: if it's not guaranteed the device has wi-fi, we need to change the tests
|
||||
// to make the actual verification of restrictions optional.
|
||||
@@ -242,7 +206,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
return netId;
|
||||
}
|
||||
|
||||
private void setRestrictBackground(boolean enabled) throws IOException {
|
||||
protected void setRestrictBackground(boolean enabled) throws IOException {
|
||||
executeShellCommand("cmd netpolicy set restrict-background " + enabled);
|
||||
final String output = executeShellCommand("cmd netpolicy get restrict-background ");
|
||||
final String expectedSuffix = enabled ? "enabled" : "disabled";
|
||||
@@ -251,17 +215,17 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
output.endsWith(expectedSuffix));
|
||||
}
|
||||
|
||||
private void addRestrictBackgroundWhitelist(int uid) throws Exception {
|
||||
protected void addRestrictBackgroundWhitelist(int uid) throws Exception {
|
||||
executeShellCommand("cmd netpolicy add restrict-background-whitelist " + uid);
|
||||
assertRestrictBackgroundWhitelist(uid, true);
|
||||
}
|
||||
|
||||
private void removeRestrictBackgroundWhitelist(int uid) throws Exception {
|
||||
protected void removeRestrictBackgroundWhitelist(int uid) throws Exception {
|
||||
executeShellCommand("cmd netpolicy remove restrict-background-whitelist " + uid);
|
||||
assertRestrictBackgroundWhitelist(uid, false);
|
||||
}
|
||||
|
||||
private void assertRestrictBackgroundWhitelist(int uid, boolean expected) throws Exception {
|
||||
protected void assertRestrictBackgroundWhitelist(int uid, boolean expected) throws Exception {
|
||||
final int maxTries = 5;
|
||||
boolean actual = false;
|
||||
for (int i = 1; i <= maxTries; i++) {
|
||||
@@ -285,7 +249,7 @@ public class ConnectivityManagerTest extends InstrumentationTestCase {
|
||||
* The service must run in a separate app because otherwise it would be killed every time
|
||||
* {@link #runDeviceTests(String, String)} is executed.
|
||||
*/
|
||||
private void registerApp2BroadcastReceiver() throws IOException {
|
||||
protected void registerApp2BroadcastReceiver() throws IOException {
|
||||
executeShellCommand("am startservice com.android.cts.net.hostside.app2/.MyService");
|
||||
}
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.cts.net.hostside;
|
||||
|
||||
import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLED;
|
||||
import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED;
|
||||
import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED;
|
||||
|
||||
public class DataSaverModeTest extends AbstractRestrictBackgroundNetworkTestCase {
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
setRestrictBackground(false);
|
||||
registerApp2BroadcastReceiver();
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_disabled() throws Exception {
|
||||
removeRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_DISABLED);
|
||||
assertRestrictBackgroundChangedReceived(0);
|
||||
|
||||
// Sanity check: make sure status is always disabled, never whitelisted
|
||||
addRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_DISABLED);
|
||||
assertRestrictBackgroundChangedReceived(0);
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_whitelisted() throws Exception {
|
||||
setRestrictBackground(true);
|
||||
assertRestrictBackgroundChangedReceived(1);
|
||||
|
||||
addRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_WHITELISTED);
|
||||
assertRestrictBackgroundChangedReceived(2);
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_enabled() throws Exception {
|
||||
setRestrictBackground(true);
|
||||
assertRestrictBackgroundChangedReceived(1);
|
||||
|
||||
removeRestrictBackgroundWhitelist(mUid);
|
||||
assertRestrictBackgroundStatus(RESTRICT_BACKGROUND_STATUS_ENABLED);
|
||||
assertRestrictBackgroundChangedReceived(1);
|
||||
}
|
||||
}
|
||||
@@ -40,17 +40,17 @@ public class HostsideRestrictBackgroundNetworkTests extends HostsideNetworkTestC
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_disabled() throws Exception {
|
||||
runDeviceTests(TEST_PKG, TEST_PKG + ".ConnectivityManagerTest",
|
||||
runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
|
||||
"testGetRestrictBackgroundStatus_disabled");
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_whitelisted() throws Exception {
|
||||
runDeviceTests(TEST_PKG, TEST_PKG + ".ConnectivityManagerTest",
|
||||
runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
|
||||
"testGetRestrictBackgroundStatus_whitelisted");
|
||||
}
|
||||
|
||||
public void testGetRestrictBackgroundStatus_enabled() throws Exception {
|
||||
runDeviceTests(TEST_PKG, TEST_PKG + ".ConnectivityManagerTest",
|
||||
runDeviceTests(TEST_PKG, TEST_PKG + ".DataSaverModeTest",
|
||||
"testGetRestrictBackgroundStatus_enabled");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user