Add test coverage for registerSystemDefaultNetworkCallback. am: 1e5cdd3187
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1570840 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: If5381eec59318dd01b6c19b13165dbacb6c86af2
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.cts.net.hostside;
|
||||
|
||||
import static android.Manifest.permission.NETWORK_SETTINGS;
|
||||
import static android.os.Process.INVALID_UID;
|
||||
import static android.system.OsConstants.AF_INET;
|
||||
import static android.system.OsConstants.AF_INET6;
|
||||
@@ -25,6 +26,9 @@ import static android.system.OsConstants.IPPROTO_ICMPV6;
|
||||
import static android.system.OsConstants.IPPROTO_TCP;
|
||||
import static android.system.OsConstants.POLLIN;
|
||||
import static android.system.OsConstants.SOCK_DGRAM;
|
||||
import static android.test.MoreAsserts.assertNotEqual;
|
||||
|
||||
import static com.android.compatibility.common.util.SystemUtil.runWithShellPermissionIdentity;
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.app.DownloadManager;
|
||||
@@ -48,6 +52,8 @@ import android.net.ProxyInfo;
|
||||
import android.net.Uri;
|
||||
import android.net.VpnService;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.os.Process;
|
||||
import android.os.SystemProperties;
|
||||
@@ -687,6 +693,20 @@ public class VpnTest extends InstrumentationTestCase {
|
||||
setAndVerifyPrivateDns(initialMode);
|
||||
}
|
||||
|
||||
private class NeverChangeNetworkCallback extends NetworkCallback {
|
||||
private volatile Network mLastNetwork;
|
||||
|
||||
public void onAvailable(Network n) {
|
||||
assertNull("Callback got onAvailable more than once: " + mLastNetwork + ", " + n,
|
||||
mLastNetwork);
|
||||
mLastNetwork = n;
|
||||
}
|
||||
|
||||
public Network getLastNetwork() {
|
||||
return mLastNetwork;
|
||||
}
|
||||
}
|
||||
|
||||
public void testDefault() throws Exception {
|
||||
if (!supportedHardware()) return;
|
||||
// If adb TCP port opened, this test may running by adb over network.
|
||||
@@ -702,6 +722,14 @@ public class VpnTest extends InstrumentationTestCase {
|
||||
getInstrumentation().getTargetContext(), MyVpnService.ACTION_ESTABLISHED);
|
||||
receiver.register();
|
||||
|
||||
|
||||
// Expect the system default network not to change.
|
||||
final NeverChangeNetworkCallback neverChangeCallback = new NeverChangeNetworkCallback();
|
||||
final Network defaultNetwork = mCM.getActiveNetwork();
|
||||
runWithShellPermissionIdentity(() ->
|
||||
mCM.registerSystemDefaultNetworkCallback(neverChangeCallback,
|
||||
new Handler(Looper.getMainLooper())), NETWORK_SETTINGS);
|
||||
|
||||
FileDescriptor fd = openSocketFdInOtherApp(TEST_HOST, 80, TIMEOUT_MS);
|
||||
|
||||
startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"},
|
||||
@@ -719,6 +747,17 @@ public class VpnTest extends InstrumentationTestCase {
|
||||
|
||||
checkTrafficOnVpn();
|
||||
|
||||
// Check that system default network callback has not seen any network changes, but the app
|
||||
// default network callback has. This needs to be done before testing private DNS because
|
||||
// checkStrictModePrivateDns will set the private DNS server to a nonexistent name, which
|
||||
// will cause validation to fail could cause the default network to switch (e.g., from wifi
|
||||
// to cellular).
|
||||
assertEquals(defaultNetwork, neverChangeCallback.getLastNetwork());
|
||||
assertNotEqual(defaultNetwork, mCM.getActiveNetwork());
|
||||
runWithShellPermissionIdentity(
|
||||
() -> mCM.unregisterNetworkCallback(neverChangeCallback),
|
||||
NETWORK_SETTINGS);
|
||||
|
||||
checkStrictModePrivateDns();
|
||||
|
||||
receiver.unregisterQuietly();
|
||||
|
||||
@@ -93,6 +93,7 @@ import android.net.util.KeepaliveUtils;
|
||||
import android.net.wifi.WifiManager;
|
||||
import android.os.Binder;
|
||||
import android.os.Build;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.MessageQueue;
|
||||
import android.os.SystemClock;
|
||||
@@ -532,6 +533,13 @@ public class ConnectivityManagerTest {
|
||||
final TestNetworkCallback defaultTrackingCallback = new TestNetworkCallback();
|
||||
mCm.registerDefaultNetworkCallback(defaultTrackingCallback);
|
||||
|
||||
final TestNetworkCallback systemDefaultTrackingCallback = new TestNetworkCallback();
|
||||
runWithShellPermissionIdentity(() ->
|
||||
mCm.registerSystemDefaultNetworkCallback(systemDefaultTrackingCallback,
|
||||
new Handler(Looper.getMainLooper())),
|
||||
NETWORK_SETTINGS);
|
||||
|
||||
|
||||
Network wifiNetwork = null;
|
||||
|
||||
try {
|
||||
@@ -551,6 +559,9 @@ public class ConnectivityManagerTest {
|
||||
} finally {
|
||||
mCm.unregisterNetworkCallback(callback);
|
||||
mCm.unregisterNetworkCallback(defaultTrackingCallback);
|
||||
runWithShellPermissionIdentity(
|
||||
() -> mCm.unregisterNetworkCallback(systemDefaultTrackingCallback),
|
||||
NETWORK_SETTINGS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user