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;
|
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();
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user