From bd2f32f60b74abffb371261abc3f3f6aacc2ad08 Mon Sep 17 00:00:00 2001 From: Paul Jensen Date: Wed, 10 Jun 2015 11:22:17 -0400 Subject: [PATCH] Avoid overlapping NetIDs in ConnectivityServiceTest with real NetIDs Overlapping the NetIDs can cause the ConnectivityService instance under test to inadvertently use real networks, for example when NetworkMonitor attempts to validate a network. This fixes test hangs when run on devices with active internet connections. Change-Id: I5e1898953f0117b9f75beccac4a52ae2db173567 --- .../android/server/ConnectivityService.java | 5 ++++- .../server/ConnectivityServiceTest.java | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 99c4eda62c..81939a5bf5 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -100,6 +100,7 @@ import android.util.Xml; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.app.IBatteryStats; import com.android.internal.net.LegacyVpnInfo; import com.android.internal.net.NetworkStatsFactory; @@ -767,7 +768,8 @@ public class ConnectivityService extends IConnectivityManager.Stub return mNextNetworkRequestId++; } - private int reserveNetId() { + @VisibleForTesting + protected int reserveNetId() { synchronized (mNetworkForNetId) { for (int i = MIN_NET_ID; i <= MAX_NET_ID; i++) { int netId = mNextNetId; @@ -1664,6 +1666,7 @@ public class ConnectivityService extends IConnectivityManager.Stub private static final String DEFAULT_TCP_RWND_KEY = "net.tcp.default_init_rwnd"; // Overridden for testing purposes to avoid writing to SystemProperties. + @VisibleForTesting protected int getDefaultTcpRwnd() { return SystemProperties.getInt(DEFAULT_TCP_RWND_KEY, 0); } diff --git a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java index 56f1d48c4b..6684be473d 100644 --- a/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/ConnectivityServiceTest.java @@ -235,6 +235,27 @@ public class ConnectivityServiceTest extends AndroidTestCase { // Prevent wrapped ConnectivityService from trying to write to SystemProperties. return 0; } + + @Override + protected int reserveNetId() { + while (true) { + final int netId = super.reserveNetId(); + + // Don't overlap test NetIDs with real NetIDs as binding sockets to real networks + // can have odd side-effects, like network validations succeeding. + final Network[] networks = ConnectivityManager.from(getContext()).getAllNetworks(); + boolean overlaps = false; + for (Network network : networks) { + if (netId == network.netId) { + overlaps = true; + break; + } + } + if (overlaps) continue; + + return netId; + } + } } @Override