From 46b3c762bbbca6c42544ae8bed973fd98314d7bf Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Tue, 26 May 2020 17:12:40 +0900 Subject: [PATCH 1/3] Skip NetworkStatsBinderTest on Q The fix verified by that test is only applied on R+. Test: atest NetworkStatsBinderTest Bug: 150904735 Change-Id: I5ac69a121e5fa1b927ec94f3873f5c31b9031419 --- .../net/cts/NetworkStatsBinderTest.java | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/NetworkStatsBinderTest.java b/tests/cts/net/src/android/net/cts/NetworkStatsBinderTest.java index 1f3162fdd1..1a48983028 100644 --- a/tests/cts/net/src/android/net/cts/NetworkStatsBinderTest.java +++ b/tests/cts/net/src/android/net/cts/NetworkStatsBinderTest.java @@ -18,12 +18,15 @@ package android.net.cts; import static android.os.Process.INVALID_UID; +import static org.junit.Assert.assertEquals; + import android.annotation.NonNull; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.INetworkStatsService; import android.net.TrafficStats; +import android.os.Build; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; @@ -31,8 +34,15 @@ import android.test.AndroidTestCase; import android.util.SparseArray; import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import com.android.internal.util.CollectionUtils; +import com.android.testutils.DevSdkIgnoreRule; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -41,17 +51,22 @@ import java.util.List; import java.util.function.Function; import java.util.function.Predicate; -public class NetworkStatsBinderTest extends AndroidTestCase { +@RunWith(AndroidJUnit4.class) +public class NetworkStatsBinderTest { // NOTE: These are shamelessly copied from TrafficStats. private static final int TYPE_RX_BYTES = 0; private static final int TYPE_RX_PACKETS = 1; private static final int TYPE_TX_BYTES = 2; private static final int TYPE_TX_PACKETS = 3; + @Rule + public DevSdkIgnoreRule mIgnoreRule = new DevSdkIgnoreRule( + Build.VERSION_CODES.Q /* ignoreClassUpTo */); + private final SparseArray> mUidStatsQueryOpArray = new SparseArray<>(); - @Override - protected void setUp() throws Exception { + @Before + public void setUp() throws Exception { mUidStatsQueryOpArray.put(TYPE_RX_BYTES, uid -> TrafficStats.getUidRxBytes(uid)); mUidStatsQueryOpArray.put(TYPE_RX_PACKETS, uid -> TrafficStats.getUidRxPackets(uid)); mUidStatsQueryOpArray.put(TYPE_TX_BYTES, uid -> TrafficStats.getUidTxBytes(uid)); @@ -75,6 +90,7 @@ public class NetworkStatsBinderTest extends AndroidTestCase { return INVALID_UID; } + @Test public void testAccessUidStatsFromBinder() throws Exception { final int myUid = Process.myUid(); final List testUidList = new ArrayList<>(); From 5df6449e3e5a1634e6fd91d3b55110e17da8a2cd Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Wed, 27 May 2020 11:15:36 +0000 Subject: [PATCH 2/3] Add logs to NetworkCallbackTest to diagnose issues Bug: 157391946 Test: NetworkCallbackTests Merged-In: I552a1ad05f97a2a9f83f5f7de77d2e7b64084ddc Change-Id: Ic08df1908828f1487253a2b5dfb14e46442942b8 (cherry picked from commit 446a3ef6c2f9671dd7509906dbb647e1304ade78, aosp/1318216) --- .../cts/net/hostside/NetworkCallbackTest.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/tests/cts/hostside/app/src/com/android/cts/net/hostside/NetworkCallbackTest.java b/tests/cts/hostside/app/src/com/android/cts/net/hostside/NetworkCallbackTest.java index ec884d0c4c..f3cd8a9772 100644 --- a/tests/cts/hostside/app/src/com/android/cts/net/hostside/NetworkCallbackTest.java +++ b/tests/cts/hostside/app/src/com/android/cts/net/hostside/NetworkCallbackTest.java @@ -130,14 +130,11 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa setLastCallback(CallbackState.CAPABILITIES, network, cap); } - public void expectLostCallback(Network expectedNetwork) { - expectCallback(CallbackState.LOST, expectedNetwork, null); - } - public Network expectAvailableCallbackAndGetNetwork() { final CallbackInfo cb = nextCallback(TEST_CALLBACK_TIMEOUT_MS); if (cb.state != CallbackState.AVAILABLE) { - fail("Network is not available"); + fail("Network is not available. Instead obtained the following callback :" + + cb); } return cb.network; } @@ -152,7 +149,7 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa do { final CallbackInfo cb = nextCallback((int) (deadline - System.currentTimeMillis())); if (cb.state == CallbackState.BLOCKED_STATUS) { - assertEquals(expectBlocked, (Boolean) cb.arg); + assertEquals(expectBlocked, cb.arg); return; } } while (System.currentTimeMillis() <= deadline); @@ -165,10 +162,10 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa final NetworkCapabilities cap = (NetworkCapabilities) cb.arg; assertEquals(expectedNetwork, cb.network); assertEquals(CallbackState.CAPABILITIES, cb.state); - if (hasCapability) { - assertTrue(cap.hasCapability(capability)); - } else { - assertFalse(cap.hasCapability(capability)); + if (hasCapability != cap.hasCapability(capability)) { + fail("NetworkCapabilities callback " + + (hasCapability ? "missing expected" : "has unexpected") + + " capability. " + cb); } } } From 994edc463e98b41e9f11d1af7b160722148fb841 Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Thu, 28 May 2020 02:06:01 +0000 Subject: [PATCH 3/3] Fix testTetheringUpstream flaky testTetheringUpstream test case need cellular network. So it disable wifi and getActiveNetwork to check whether current network is cellular. But there is a race that call getActiveNetwork right away after disconnect wifi. getActiveNetwork may return null because switching network is not ready yet. Bug: 156314879 Test: atest CtsTetheringTest Merged-In: I6b433560fb27a3b4bd80c4198ccdb58a5be701b6 Change-Id: I6b433560fb27a3b4bd80c4198ccdb58a5be701b6 --- .../android/tethering/cts/TetheringManagerTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java b/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java index 8665c7ed5e..10555312f7 100644 --- a/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java +++ b/tests/cts/tethering/src/android/tethering/cts/TetheringManagerTest.java @@ -56,6 +56,7 @@ import android.net.TetheringManager.TetheringEventCallback; import android.net.TetheringManager.TetheringInterfaceRegexps; import android.net.TetheringManager.TetheringRequest; import android.net.cts.util.CtsNetUtils; +import android.net.cts.util.CtsNetUtils.TestNetworkCallback; import android.net.wifi.WifiManager; import android.os.Bundle; import android.os.PersistableBundle; @@ -714,7 +715,15 @@ public class TetheringManagerTest { mCtsNetUtils.disconnectFromWifi(null); } - final Network activeNetwork = mCm.getActiveNetwork(); + final TestNetworkCallback networkCallback = new TestNetworkCallback(); + Network activeNetwork = null; + try { + mCm.registerDefaultNetworkCallback(networkCallback); + activeNetwork = networkCallback.waitForAvailable(); + } finally { + mCm.unregisterNetworkCallback(networkCallback); + } + assertNotNull("No active network. Please ensure the device has working mobile data.", activeNetwork); final NetworkCapabilities activeNetCap = mCm.getNetworkCapabilities(activeNetwork);