Merge "Added sanity check to verify process state." into nyc-dev

This commit is contained in:
Felipe Leme
2016-03-30 15:41:51 +00:00
committed by Android (Google) Code Review
3 changed files with 49 additions and 2 deletions

View File

@@ -25,6 +25,7 @@ import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELI
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import android.app.ActivityManager;
import android.app.Instrumentation;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -86,7 +87,9 @@ abstract class AbstractRestrictBackgroundNetworkTestCase extends Instrumentation
final int myUid = mContext.getPackageManager()
.getPackageInfo(mContext.getPackageName(), 0).applicationInfo.uid;
Log.d(TAG, "UIDS: test app=" + myUid + ", app2=" + mUid);
Log.i(TAG, "Apps status on " + getName() + ":\n"
+ "\ttest app: uid=" + myUid + ", state=" + getProcessStateByUid(myUid) + "\n"
+ "\tapp2: uid=" + mUid + ", state=" + getProcessStateByUid(mUid));
}
@Override
@@ -158,6 +161,7 @@ abstract class AbstractRestrictBackgroundNetworkTestCase extends Instrumentation
}
protected void assertRestrictBackgroundStatus(int expectedApiStatus) throws Exception {
assertBackgroundState(); // Sanity check.
final Intent intent = new Intent(ACTION_CHECK_NETWORK);
final String resultData = sendOrderedBroadcast(intent);
final String[] resultItems = resultData.split(RESULT_SEPARATOR);
@@ -171,6 +175,7 @@ abstract class AbstractRestrictBackgroundNetworkTestCase extends Instrumentation
}
protected void assertBackgroundNetworkAccess(boolean expectAllowed) throws Exception {
assertBackgroundState(); // Sanity check.
final Intent intent = new Intent(ACTION_CHECK_NETWORK);
final String resultData = sendOrderedBroadcast(intent);
final String[] resultItems = resultData.split(RESULT_SEPARATOR);
@@ -178,6 +183,20 @@ abstract class AbstractRestrictBackgroundNetworkTestCase extends Instrumentation
assertNetworkStatus(expectAllowed, networkStatus);
}
protected final void assertBackgroundState() throws Exception {
final ProcessState state = getProcessStateByUid(mUid);
Log.v(TAG, "assertBackgroundState(): status for app2 (" + mUid + "): " + state);
final boolean isBackground = isBackground(state.state);
assertTrue("App2 is not on background state: " + state, isBackground);
}
/**
* Returns whether an app state should be considered "background" for restriction purposes.
*/
protected boolean isBackground(int state) {
return state > 4; // ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
}
private String getNetworkStatus(String[] resultItems) {
return resultItems.length < 2 ? null : resultItems[1];
}
@@ -386,4 +405,27 @@ abstract class AbstractRestrictBackgroundNetworkTestCase extends Instrumentation
return "UNKNOWN_STATUS_" + status;
}
}
private ProcessState getProcessStateByUid(int uid) throws Exception {
return new ProcessState(executeShellCommand("cmd activity get-uid-state " + uid));
}
private static class ProcessState {
private final String fullState;
final int state;
ProcessState(String fullState) {
this.fullState = fullState;
try {
this.state = Integer.parseInt(fullState.split(" ")[0]);
} catch (Exception e) {
throw new IllegalArgumentException("Could not parse " + fullState);
}
}
@Override
public String toString() {
return fullState;
}
}
}

View File

@@ -20,6 +20,12 @@ import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_DISABLE
import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED;
import static android.net.ConnectivityManager.RESTRICT_BACKGROUND_STATUS_WHITELISTED;
/*
* TODO: need to add more scenarios:
* - test access on foreground app
* - test access on foreground service app
* - make sure it tests transition of data saver status while app is on foreground
*/
public class DataSaverModeTest extends AbstractRestrictBackgroundNetworkTestCase {
@Override

View File

@@ -30,7 +30,6 @@ public class HostsideRestrictBackgroundNetworkTests extends HostsideNetworkTestC
uninstallPackage(TEST_APP2_PKG, false);
installPackage(TEST_APP2_APK);
}
@Override