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:
Lorenzo Colitti
2021-02-10 06:55:56 +00:00
committed by Automerger Merge Worker
2 changed files with 50 additions and 0 deletions

View File

@@ -16,6 +16,7 @@
package com.android.cts.net.hostside; package com.android.cts.net.hostside;
import static android.Manifest.permission.NETWORK_SETTINGS;
import static android.os.Process.INVALID_UID; import static android.os.Process.INVALID_UID;
import static android.system.OsConstants.AF_INET; import static android.system.OsConstants.AF_INET;
import static android.system.OsConstants.AF_INET6; 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.IPPROTO_TCP;
import static android.system.OsConstants.POLLIN; import static android.system.OsConstants.POLLIN;
import static android.system.OsConstants.SOCK_DGRAM; 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.annotation.Nullable;
import android.app.DownloadManager; import android.app.DownloadManager;
@@ -48,6 +52,8 @@ import android.net.ProxyInfo;
import android.net.Uri; import android.net.Uri;
import android.net.VpnService; import android.net.VpnService;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Handler;
import android.os.Looper;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.os.Process; import android.os.Process;
import android.os.SystemProperties; import android.os.SystemProperties;
@@ -687,6 +693,20 @@ public class VpnTest extends InstrumentationTestCase {
setAndVerifyPrivateDns(initialMode); 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 { public void testDefault() throws Exception {
if (!supportedHardware()) return; if (!supportedHardware()) return;
// If adb TCP port opened, this test may running by adb over network. // 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); getInstrumentation().getTargetContext(), MyVpnService.ACTION_ESTABLISHED);
receiver.register(); 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); FileDescriptor fd = openSocketFdInOtherApp(TEST_HOST, 80, TIMEOUT_MS);
startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"}, startVpn(new String[] {"192.0.2.2/32", "2001:db8:1:2::ffe/128"},
@@ -719,6 +747,17 @@ public class VpnTest extends InstrumentationTestCase {
checkTrafficOnVpn(); 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(); checkStrictModePrivateDns();
receiver.unregisterQuietly(); receiver.unregisterQuietly();

View File

@@ -93,6 +93,7 @@ import android.net.util.KeepaliveUtils;
import android.net.wifi.WifiManager; import android.net.wifi.WifiManager;
import android.os.Binder; import android.os.Binder;
import android.os.Build; import android.os.Build;
import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.MessageQueue; import android.os.MessageQueue;
import android.os.SystemClock; import android.os.SystemClock;
@@ -532,6 +533,13 @@ public class ConnectivityManagerTest {
final TestNetworkCallback defaultTrackingCallback = new TestNetworkCallback(); final TestNetworkCallback defaultTrackingCallback = new TestNetworkCallback();
mCm.registerDefaultNetworkCallback(defaultTrackingCallback); mCm.registerDefaultNetworkCallback(defaultTrackingCallback);
final TestNetworkCallback systemDefaultTrackingCallback = new TestNetworkCallback();
runWithShellPermissionIdentity(() ->
mCm.registerSystemDefaultNetworkCallback(systemDefaultTrackingCallback,
new Handler(Looper.getMainLooper())),
NETWORK_SETTINGS);
Network wifiNetwork = null; Network wifiNetwork = null;
try { try {
@@ -551,6 +559,9 @@ public class ConnectivityManagerTest {
} finally { } finally {
mCm.unregisterNetworkCallback(callback); mCm.unregisterNetworkCallback(callback);
mCm.unregisterNetworkCallback(defaultTrackingCallback); mCm.unregisterNetworkCallback(defaultTrackingCallback);
runWithShellPermissionIdentity(
() -> mCm.unregisterNetworkCallback(systemDefaultTrackingCallback),
NETWORK_SETTINGS);
} }
} }