From 3addf0d1770c802b2c5021881d70b0b4e7fd0888 Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Fri, 14 Aug 2020 16:53:03 +0900 Subject: [PATCH 01/14] Run validation tests even with an eth interface The test actually does not need the ethernet interface to be the only ethernet interface, as ethernet test interfaces now have TRANSPORT_TEST|TRANSPORT_ETHERNET, which can be used to differentiate them in the network request. Bug: 162469293 Bug: 160612321 Test: atest CtsNetTestCasesLatestSdk:NetworkValidationTest Change-Id: I84cc8b6b9aaa764705d91ed298655d869c4388a6 Merged-In: I84cc8b6b9aaa764705d91ed298655d869c4388a6 --- .../net/src/android/net/cts/CaptivePortalApiTest.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/CaptivePortalApiTest.kt b/tests/cts/net/src/android/net/cts/CaptivePortalApiTest.kt index ef2b0cee2f..99fcd4c95d 100644 --- a/tests/cts/net/src/android/net/cts/CaptivePortalApiTest.kt +++ b/tests/cts/net/src/android/net/cts/CaptivePortalApiTest.kt @@ -19,12 +19,14 @@ package android.net.cts import android.Manifest.permission.MANAGE_TEST_NETWORKS import android.Manifest.permission.NETWORK_SETTINGS import android.content.Context +import android.content.pm.PackageManager import android.net.ConnectivityManager import android.net.EthernetManager import android.net.InetAddresses import android.net.NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL import android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED import android.net.NetworkCapabilities.TRANSPORT_ETHERNET +import android.net.NetworkCapabilities.TRANSPORT_TEST import android.net.NetworkRequest import android.net.TestNetworkInterface import android.net.TestNetworkManager @@ -54,6 +56,7 @@ import com.android.testutils.TestableNetworkCallback import fi.iki.elonen.NanoHTTPD import org.junit.After import org.junit.Assume.assumeFalse +import org.junit.Assume.assumeTrue import org.junit.Before import org.junit.Rule import org.junit.Test @@ -96,7 +99,8 @@ class CaptivePortalApiTest { private val ethRequest = NetworkRequest.Builder() // ETHERNET|TEST transport networks do not have NET_CAPABILITY_TRUSTED .removeCapability(NET_CAPABILITY_TRUSTED) - .addTransportType(TRANSPORT_ETHERNET).build() + .addTransportType(TRANSPORT_ETHERNET) + .addTransportType(TRANSPORT_TEST).build() private val ethRequestCb = TestableNetworkCallback() private lateinit var iface: TestNetworkInterface @@ -107,9 +111,10 @@ class CaptivePortalApiTest { @Before fun setUp() { - // This test requires using a tap interface as the default ethernet interface: skip if there - // is already an ethernet interface connected. - testSkipped = eth.isAvailable() + // This test requires using a tap interface as an ethernet interface. + val pm = context.getPackageManager() + testSkipped = !pm.hasSystemFeature(PackageManager.FEATURE_ETHERNET) && + context.getSystemService(EthernetManager::class.java) == null assumeFalse(testSkipped) // Register a request so the network does not get torn down From ed2521af1eb10390e193b6126c1ec62fc7b8a468 Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Tue, 1 Sep 2020 08:02:33 +0000 Subject: [PATCH 02/14] Specify CAPABILITY_INTERNET for ConnDiags CTS test. This CL updates the NetworkCapabilities used for getting a cellular data network in ConnectivityDiagnosticsManagerTest to require CAPABILITY_INTERNET. Bug: 166732795 Test: atest CtsNetTestCases Change-Id: Ia32ac00f949a2ee9319c80c25f294bfa834ad0f9 Merged-In: Ia32ac00f949a2ee9319c80c25f294bfa834ad0f9 (cherry picked from commit 67fb0cc3d4152f890012bbb4f1f91fb657b8dd55) --- .../android/net/cts/ConnectivityDiagnosticsManagerTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java index 8f42f79382..bd56f4b771 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityDiagnosticsManagerTest.java @@ -30,6 +30,7 @@ import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_DNS import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_METRICS_COLLECTION_PERIOD_MILLIS; import static android.net.ConnectivityDiagnosticsManager.DataStallReport.KEY_TCP_PACKET_FAIL_RATE; import static android.net.ConnectivityDiagnosticsManager.persistableBundleEquals; +import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VPN; import static android.net.NetworkCapabilities.NET_CAPABILITY_TRUSTED; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; @@ -121,7 +122,10 @@ public class ConnectivityDiagnosticsManagerTest { private static final String SHA_256 = "SHA-256"; private static final NetworkRequest CELLULAR_NETWORK_REQUEST = - new NetworkRequest.Builder().addTransportType(TRANSPORT_CELLULAR).build(); + new NetworkRequest.Builder() + .addTransportType(TRANSPORT_CELLULAR) + .addCapability(NET_CAPABILITY_INTERNET) + .build(); private static final IBinder BINDER = new Binder(); From 8643ebd6b1581ace739c045f3348c9418444c01d Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Tue, 1 Sep 2020 09:43:49 +0000 Subject: [PATCH 03/14] Don't require WiFi in CtsHostsideNetworkTests. Skip test for non-WiFi connections. Bug: 162192335 Test: run cts -m CtsHostsideNetworkTests -t com.android.cts.net.HostsideNetworkCallbackTests#testOnBlockedStatusChanged_dataSaver Change-Id: I7c20e3454a2fe81671162e0a50f90d64ed7516d0 --- .../com/android/cts/net/hostside/NetworkCallbackTest.java | 5 +++++ 1 file changed, 5 insertions(+) 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 eedccb63ad..2ac29e77ff 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 @@ -17,7 +17,9 @@ package com.android.cts.net.hostside; import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_METERED; +import static com.android.cts.net.hostside.NetworkPolicyTestUtils.canChangeActiveNetworkMeteredness; import static com.android.cts.net.hostside.NetworkPolicyTestUtils.setRestrictBackground; +import static com.android.cts.net.hostside.NetworkPolicyTestUtils.isActiveNetworkMetered; import static com.android.cts.net.hostside.Property.BATTERY_SAVER_MODE; import static com.android.cts.net.hostside.Property.DATA_SAVER_MODE; @@ -26,6 +28,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; import android.net.Network; import android.net.NetworkCapabilities; @@ -183,6 +186,8 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa public void setUp() throws Exception { super.setUp(); + assumeTrue(isActiveNetworkMetered(true) || canChangeActiveNetworkMeteredness()); + registerBroadcastReceiver(); removeRestrictBackgroundWhitelist(mUid); From cd2fe6e08a4aa3765581d8f1a7c403765f6b94b3 Mon Sep 17 00:00:00 2001 From: David Su Date: Mon, 5 Oct 2020 22:41:42 +0000 Subject: [PATCH 04/14] Ensure CONFIGURED_NETWORKS_CHANGED not received without permissions Ensure that the CONFIGURED_NETWORKS_CHANGED_ACTION broadcast is not received without the required permissions. Bug: 159373687 Test: cts-tradefed run cts -m CtsNetTestCases --test android.net.wifi.cts.WifiManagerTest#testWifiManagerNetWork Change-Id: I2e3f38b05d63571e838b148fbbb2ce6f68c19c01 Merged-In: I4669a6ff79b3d2e99795015e42bfa611cffb9070 --- .../android/net/wifi/cts/WifiManagerTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index a2e7f57b9d..9cc5d8199a 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -411,12 +411,33 @@ public class WifiManagerTest extends AndroidTestCase { assertFalse(existSSID(SSID1)); assertTrue(existSSID(SSID2)); + // Need an effectively-final holder because we need to modify inner Intent in callback. + class IntentHolder { + Intent intent; + } + IntentHolder intentHolder = new IntentHolder(); + mContext.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Log.i(TAG, "Received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast: " + intent); + intentHolder.intent = intent; + } + }, new IntentFilter(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION)); + // Remove a WifiConfig assertTrue(mWifiManager.removeNetwork(netId)); assertFalse(mWifiManager.removeNetwork(notExist)); assertFalse(existSSID(SSID1)); assertFalse(existSSID(SSID2)); + // wait 10 seconds to ensure that broadcast wasn't received + Thread.sleep(DURATION); + Intent intent = intentHolder.intent; + // Broadcast shouldn't be received because although CtsNetTestCases has + // ACCESS_WIFI_STATE permission, it doesn't have ACCESS_FINE_LOCATION permission. + // Receivers need both permissions to get the broadcast. + assertNull("Unexpected received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", intent); + assertTrue(mWifiManager.saveConfiguration()); } finally { reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks()); From 956f4dc23182fb7c42d29546b466e117453f6a75 Mon Sep 17 00:00:00 2001 From: David Su Date: Mon, 5 Oct 2020 22:41:42 +0000 Subject: [PATCH 05/14] Ensure CONFIGURED_NETWORKS_CHANGED not received without permissions Ensure that the CONFIGURED_NETWORKS_CHANGED_ACTION broadcast is not received without the required permissions. Bug: 159373687 Test: cts-tradefed run cts -m CtsNetTestCases --test android.net.wifi.cts.WifiManagerTest#testWifiManagerNetWork Change-Id: I2e3f38b05d63571e838b148fbbb2ce6f68c19c01 Merged-In: I4669a6ff79b3d2e99795015e42bfa611cffb9070 --- .../android/net/wifi/cts/WifiManagerTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index 44b49c0274..c5d0d4f0ad 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -411,12 +411,33 @@ public class WifiManagerTest extends AndroidTestCase { assertFalse(existSSID(SSID1)); assertTrue(existSSID(SSID2)); + // Need an effectively-final holder because we need to modify inner Intent in callback. + class IntentHolder { + Intent intent; + } + IntentHolder intentHolder = new IntentHolder(); + mContext.registerReceiver(new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Log.i(TAG, "Received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast: " + intent); + intentHolder.intent = intent; + } + }, new IntentFilter(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION)); + // Remove a WifiConfig assertTrue(mWifiManager.removeNetwork(netId)); assertFalse(mWifiManager.removeNetwork(notExist)); assertFalse(existSSID(SSID1)); assertFalse(existSSID(SSID2)); + // wait 10 seconds to ensure that broadcast wasn't received + Thread.sleep(DURATION); + Intent intent = intentHolder.intent; + // Broadcast shouldn't be received because although CtsNetTestCases has + // ACCESS_WIFI_STATE permission, it doesn't have ACCESS_FINE_LOCATION permission. + // Receivers need both permissions to get the broadcast. + assertNull("Unexpected received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", intent); + assertTrue(mWifiManager.saveConfiguration()); } finally { reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks()); From 7056d02dd74c68d73a0f6a3a3d5ee8918bbe9cf4 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 13 Oct 2020 23:40:57 +0900 Subject: [PATCH 06/14] Update the QUIC packet format. The QUIC packet format has changed again. Update the test to ensure that the GFE can drop support for the old packet format without causing all devices to fail CTS. Packet format changes suggested by dschinazi@. Bug: 170724836 Test: atest --rerun-until-failure 100 CtsNetTestCasesLatestSdk:MultinetworkApiTest#testNativeDatagramTransmission Change-Id: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf Merged-In: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf (cherry picked from commit c2b9b83bf353a1fe0669e327fa03ddb024e4f21d) --- tests/cts/net/jni/NativeMultinetworkJni.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/cts/net/jni/NativeMultinetworkJni.c b/tests/cts/net/jni/NativeMultinetworkJni.c index 4531f822eb..b269a8bfb6 100644 --- a/tests/cts/net/jni/NativeMultinetworkJni.c +++ b/tests/cts/net/jni/NativeMultinetworkJni.c @@ -177,20 +177,16 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, sizeof(timeo)); // For reference see: - // https://tools.ietf.org/html/draft-tsvwg-quic-protocol#section-6.1 + // https://datatracker.ietf.org/doc/html/draft-ietf-quic-invariants uint8_t quic_packet[1200] = { - 0x0d, // public flags: - // - version present (0x01), - // - 64bit connection ID (0x0c), - // - 1 byte packet number (0x00) + 0xc0, // long header + 0xaa, 0xda, 0xca, 0xca, // reserved-space version number + 0x08, // destination connection ID length 0, 0, 0, 0, 0, 0, 0, 0, // 64bit connection ID - 0xaa, 0xda, 0xca, 0xaa, // reserved-space version number - 1, // 1 byte packet number - 0x00, // private flags - 0x07, // PING frame (cuz why not) + 0x00, // source connection ID length }; - arc4random_buf(quic_packet + 1, 8); // random connection ID + arc4random_buf(quic_packet + 6, 8); // random connection ID uint8_t response[1500]; ssize_t sent, rcvd; @@ -215,7 +211,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( i + 1, MAX_RETRIES, rcvd, errnum); } } - if (rcvd < 9) { + if (rcvd < 15) { ALOGD("QUIC UDP %s: sent=%zd but rcvd=%zd, errno=%d", kPort, sent, rcvd, errnum); if (rcvd <= 0) { ALOGD("Does this network block UDP port %s?", kPort); @@ -224,7 +220,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( return -EPROTO; } - int conn_id_cmp = memcmp(quic_packet + 1, response + 1, 8); + int conn_id_cmp = memcmp(quic_packet + 6, response + 7, 8); if (conn_id_cmp != 0) { ALOGD("sent and received connection IDs do not match"); close(fd); From 25da49b7ff8700cc1f631fc26fa0dbdc20e5742f Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Tue, 13 Oct 2020 23:40:57 +0900 Subject: [PATCH 07/14] Update the QUIC packet format. The QUIC packet format has changed again. Update the test to ensure that the GFE can drop support for the old packet format without causing all devices to fail CTS. Packet format changes suggested by dschinazi@. Bug: 170724836 Test: atest --rerun-until-failure 100 CtsNetTestCasesLatestSdk:MultinetworkApiTest#testNativeDatagramTransmission Change-Id: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf Merged-In: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf (cherry picked from commit c2b9b83bf353a1fe0669e327fa03ddb024e4f21d) --- tests/cts/net/jni/NativeMultinetworkJni.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/cts/net/jni/NativeMultinetworkJni.c b/tests/cts/net/jni/NativeMultinetworkJni.c index 4531f822eb..b269a8bfb6 100644 --- a/tests/cts/net/jni/NativeMultinetworkJni.c +++ b/tests/cts/net/jni/NativeMultinetworkJni.c @@ -177,20 +177,16 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, sizeof(timeo)); // For reference see: - // https://tools.ietf.org/html/draft-tsvwg-quic-protocol#section-6.1 + // https://datatracker.ietf.org/doc/html/draft-ietf-quic-invariants uint8_t quic_packet[1200] = { - 0x0d, // public flags: - // - version present (0x01), - // - 64bit connection ID (0x0c), - // - 1 byte packet number (0x00) + 0xc0, // long header + 0xaa, 0xda, 0xca, 0xca, // reserved-space version number + 0x08, // destination connection ID length 0, 0, 0, 0, 0, 0, 0, 0, // 64bit connection ID - 0xaa, 0xda, 0xca, 0xaa, // reserved-space version number - 1, // 1 byte packet number - 0x00, // private flags - 0x07, // PING frame (cuz why not) + 0x00, // source connection ID length }; - arc4random_buf(quic_packet + 1, 8); // random connection ID + arc4random_buf(quic_packet + 6, 8); // random connection ID uint8_t response[1500]; ssize_t sent, rcvd; @@ -215,7 +211,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( i + 1, MAX_RETRIES, rcvd, errnum); } } - if (rcvd < 9) { + if (rcvd < 15) { ALOGD("QUIC UDP %s: sent=%zd but rcvd=%zd, errno=%d", kPort, sent, rcvd, errnum); if (rcvd <= 0) { ALOGD("Does this network block UDP port %s?", kPort); @@ -224,7 +220,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( return -EPROTO; } - int conn_id_cmp = memcmp(quic_packet + 1, response + 1, 8); + int conn_id_cmp = memcmp(quic_packet + 6, response + 7, 8); if (conn_id_cmp != 0) { ALOGD("sent and received connection IDs do not match"); close(fd); From 8b5d18fe90e387853569dc7e01e432f2f445dab9 Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Mon, 12 Oct 2020 12:27:34 +0000 Subject: [PATCH 08/14] Update the QUIC packet format. The QUIC packet format has changed again. Update the test to ensure that the GFE can drop support for the old packet format without causing all devices to fail CTS. Packet format changes suggested by dschinazi@. Bug: 170724836 Test: atest --rerun-until-failure 100 CtsNetTestCasesLatestSdk:MultinetworkApiTest#testNativeDatagramTransmission Change-Id: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf Merged-In: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf --- tests/cts/net/jni/NativeMultinetworkJni.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/cts/net/jni/NativeMultinetworkJni.cpp b/tests/cts/net/jni/NativeMultinetworkJni.cpp index cd94709fd5..60e31bc78a 100644 --- a/tests/cts/net/jni/NativeMultinetworkJni.cpp +++ b/tests/cts/net/jni/NativeMultinetworkJni.cpp @@ -458,20 +458,16 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, sizeof(timeo)); // For reference see: - // https://tools.ietf.org/html/draft-tsvwg-quic-protocol#section-6.1 + // https://datatracker.ietf.org/doc/html/draft-ietf-quic-invariants uint8_t quic_packet[1200] = { - 0x0d, // public flags: - // - version present (0x01), - // - 64bit connection ID (0x0c), - // - 1 byte packet number (0x00) + 0xc0, // long header + 0xaa, 0xda, 0xca, 0xca, // reserved-space version number + 0x08, // destination connection ID length 0, 0, 0, 0, 0, 0, 0, 0, // 64bit connection ID - 0xaa, 0xda, 0xca, 0xaa, // reserved-space version number - 1, // 1 byte packet number - 0x00, // private flags - 0x07, // PING frame (cuz why not) + 0x00, // source connection ID length }; - arc4random_buf(quic_packet + 1, 8); // random connection ID + arc4random_buf(quic_packet + 6, 8); // random connection ID uint8_t response[1500]; ssize_t sent, rcvd; @@ -496,7 +492,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( i + 1, MAX_RETRIES, rcvd, errnum); } } - if (rcvd < 9) { + if (rcvd < 15) { LOGD("QUIC UDP %s: sent=%zd but rcvd=%zd, errno=%d", kPort, sent, rcvd, errnum); if (rcvd <= 0) { LOGD("Does this network block UDP port %s?", kPort); @@ -505,7 +501,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( return -EPROTO; } - int conn_id_cmp = memcmp(quic_packet + 1, response + 1, 8); + int conn_id_cmp = memcmp(quic_packet + 6, response + 7, 8); if (conn_id_cmp != 0) { LOGD("sent and received connection IDs do not match"); close(fd); From a4eeed0833b39c050a65dd0a3ae18e948d457a7e Mon Sep 17 00:00:00 2001 From: Treehugger Robot Date: Mon, 12 Oct 2020 12:27:34 +0000 Subject: [PATCH 09/14] Update the QUIC packet format. The QUIC packet format has changed again. Update the test to ensure that the GFE can drop support for the old packet format without causing all devices to fail CTS. Packet format changes suggested by dschinazi@. Bug: 170724836 Test: atest --rerun-until-failure 100 CtsNetTestCasesLatestSdk:MultinetworkApiTest#testNativeDatagramTransmission Change-Id: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf Merged-In: I8625ac9a58c55fc19dfb9fdb5f34a89cee40caaf --- tests/cts/net/jni/NativeMultinetworkJni.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/cts/net/jni/NativeMultinetworkJni.cpp b/tests/cts/net/jni/NativeMultinetworkJni.cpp index 5bd3013819..ef06d75157 100644 --- a/tests/cts/net/jni/NativeMultinetworkJni.cpp +++ b/tests/cts/net/jni/NativeMultinetworkJni.cpp @@ -455,20 +455,16 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &timeo, sizeof(timeo)); // For reference see: - // https://tools.ietf.org/html/draft-tsvwg-quic-protocol#section-6.1 + // https://datatracker.ietf.org/doc/html/draft-ietf-quic-invariants uint8_t quic_packet[1200] = { - 0x0d, // public flags: - // - version present (0x01), - // - 64bit connection ID (0x0c), - // - 1 byte packet number (0x00) + 0xc0, // long header + 0xaa, 0xda, 0xca, 0xca, // reserved-space version number + 0x08, // destination connection ID length 0, 0, 0, 0, 0, 0, 0, 0, // 64bit connection ID - 0xaa, 0xda, 0xca, 0xaa, // reserved-space version number - 1, // 1 byte packet number - 0x00, // private flags - 0x07, // PING frame (cuz why not) + 0x00, // source connection ID length }; - arc4random_buf(quic_packet + 1, 8); // random connection ID + arc4random_buf(quic_packet + 6, 8); // random connection ID uint8_t response[1500]; ssize_t sent, rcvd; @@ -493,7 +489,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( i + 1, MAX_RETRIES, rcvd, errnum); } } - if (rcvd < 9) { + if (rcvd < 15) { ALOGD("QUIC UDP %s: sent=%zd but rcvd=%zd, errno=%d", kPort, sent, rcvd, errnum); if (rcvd <= 0) { ALOGD("Does this network block UDP port %s?", kPort); @@ -502,7 +498,7 @@ JNIEXPORT jint Java_android_net_cts_MultinetworkApiTest_runDatagramCheck( return -EPROTO; } - int conn_id_cmp = memcmp(quic_packet + 1, response + 1, 8); + int conn_id_cmp = memcmp(quic_packet + 6, response + 7, 8); if (conn_id_cmp != 0) { ALOGD("sent and received connection IDs do not match"); close(fd); From 0582605da71cfffa76f102712db596379482ea04 Mon Sep 17 00:00:00 2001 From: markchien Date: Thu, 22 Oct 2020 10:50:48 +0800 Subject: [PATCH 10/14] Bump Tethering apex version code The version code in the manifest is only used for development builds, as release builds dynamically replace it. Bug: 170183552 Test: m Change-Id: I51916756f41672d372e3a4adce3a8edf5d472c0d --- Tethering/apex/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tethering/apex/manifest.json b/Tethering/apex/manifest.json index 538ffb3ad6..11e205d1b7 100644 --- a/Tethering/apex/manifest.json +++ b/Tethering/apex/manifest.json @@ -1,4 +1,4 @@ { "name": "com.android.tethering", - "version": 300000000 + "version": 309999900 } From 5dd45ebc2bb91be162e751e9670a12e16f90b46e Mon Sep 17 00:00:00 2001 From: David Su Date: Fri, 16 Oct 2020 18:31:22 +0000 Subject: [PATCH 11/14] DO NOT MERGE CTS: Ensure CONFIGURED_NETWORKS_CHANGED_ACTION broadcast is received Android Pie CtsNetTestCases AndroidManifest.xml has both ACCESS_WIFI_STATE & ACCESS_FINE_LOCATION permission. Thus, it should receive the CONFIGURED_NETWORKS_CHANGED_ACTION broadcast when a network is removed. Bug: 159373687 Bug: 171022033 Test: atest CtsNetTestCases Change-Id: I9d194424469d204c4f95e98b937d67ba728f2122 Merged-In: I4669a6ff79b3d2e99795015e42bfa611cffb9070 --- .../src/android/net/wifi/cts/WifiManagerTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index 94a0e784f0..7edb235eb3 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -37,6 +37,7 @@ import android.provider.Settings; import android.test.AndroidTestCase; import android.util.Log; +import com.android.compatibility.common.util.PollingCheck; import com.android.compatibility.common.util.WifiConfigCreator; import java.net.HttpURLConnection; @@ -475,13 +476,14 @@ public class WifiManagerTest extends AndroidTestCase { assertFalse(existSSID(SSID1)); assertFalse(existSSID(SSID2)); - // wait 10 seconds to ensure that broadcast wasn't received - Thread.sleep(DURATION); + // Should receive CONFIGURED_NETWORKS_CHANGED_ACTION broadcast because CtsNetTestCases' + // AndroidManifest.xml has both ACCESS_WIFI_STATE & ACCESS_FINE_LOCATION permissions. + PollingCheck.check( + "Didn't receive CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", + DURATION, + () -> intentHolder.intent != null); Intent intent = intentHolder.intent; - // Broadcast shouldn't be received because although CtsNetTestCases has - // ACCESS_WIFI_STATE permission, it doesn't have ACCESS_FINE_LOCATION permission. - // Receivers need both permissions to get the broadcast. - assertNull("Unexpected received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", intent); + assertEquals(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION, intent.getAction()); assertTrue(mWifiManager.saveConfiguration()); } finally { From 600da6fb6998a3f11139c7348fefa693373194d9 Mon Sep 17 00:00:00 2001 From: David Su Date: Tue, 3 Nov 2020 02:55:06 +0000 Subject: [PATCH 12/14] DO NOT MERGE Revert "DO NOT MERGE CTS: Ensure CONFIGURED_NETWORKS_CHANGED_ACTION broadcast is received" This reverts commit 5dd45ebc2bb91be162e751e9670a12e16f90b46e. Reason for revert: b/171022033 Change-Id: Iefb0edbca0254a9d7ee03175196152278e19a7d2 --- .../android/net/wifi/cts/WifiManagerTest.java | 23 ------------------- 1 file changed, 23 deletions(-) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index 7edb235eb3..2ed012491e 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -37,7 +37,6 @@ import android.provider.Settings; import android.test.AndroidTestCase; import android.util.Log; -import com.android.compatibility.common.util.PollingCheck; import com.android.compatibility.common.util.WifiConfigCreator; import java.net.HttpURLConnection; @@ -457,34 +456,12 @@ public class WifiManagerTest extends AndroidTestCase { assertFalse(existSSID(SSID1)); assertTrue(existSSID(SSID2)); - // Need an effectively-final holder because we need to modify inner Intent in callback. - class IntentHolder { - Intent intent; - } - IntentHolder intentHolder = new IntentHolder(); - mContext.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Log.i(TAG, "Received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast: " + intent); - intentHolder.intent = intent; - } - }, new IntentFilter(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION)); - // Remove a WifiConfig assertTrue(mWifiManager.removeNetwork(netId)); assertFalse(mWifiManager.removeNetwork(notExist)); assertFalse(existSSID(SSID1)); assertFalse(existSSID(SSID2)); - // Should receive CONFIGURED_NETWORKS_CHANGED_ACTION broadcast because CtsNetTestCases' - // AndroidManifest.xml has both ACCESS_WIFI_STATE & ACCESS_FINE_LOCATION permissions. - PollingCheck.check( - "Didn't receive CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", - DURATION, - () -> intentHolder.intent != null); - Intent intent = intentHolder.intent; - assertEquals(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION, intent.getAction()); - assertTrue(mWifiManager.saveConfiguration()); } finally { reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks()); From a0790fe3fa4f8dc35987e850c11d1021dde98b04 Mon Sep 17 00:00:00 2001 From: David Su Date: Tue, 3 Nov 2020 03:01:13 +0000 Subject: [PATCH 13/14] DO NOT MERGE Revert "Ensure CONFIGURED_NETWORKS_CHANGED not received without permissions" This reverts commit 956f4dc23182fb7c42d29546b466e117453f6a75. Reason for revert: b/171022033 Change-Id: I6f28a18ef2487fda7a205bc8bfe9d0835b553b07 --- .../android/net/wifi/cts/WifiManagerTest.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index c5d0d4f0ad..44b49c0274 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -411,33 +411,12 @@ public class WifiManagerTest extends AndroidTestCase { assertFalse(existSSID(SSID1)); assertTrue(existSSID(SSID2)); - // Need an effectively-final holder because we need to modify inner Intent in callback. - class IntentHolder { - Intent intent; - } - IntentHolder intentHolder = new IntentHolder(); - mContext.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Log.i(TAG, "Received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast: " + intent); - intentHolder.intent = intent; - } - }, new IntentFilter(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION)); - // Remove a WifiConfig assertTrue(mWifiManager.removeNetwork(netId)); assertFalse(mWifiManager.removeNetwork(notExist)); assertFalse(existSSID(SSID1)); assertFalse(existSSID(SSID2)); - // wait 10 seconds to ensure that broadcast wasn't received - Thread.sleep(DURATION); - Intent intent = intentHolder.intent; - // Broadcast shouldn't be received because although CtsNetTestCases has - // ACCESS_WIFI_STATE permission, it doesn't have ACCESS_FINE_LOCATION permission. - // Receivers need both permissions to get the broadcast. - assertNull("Unexpected received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", intent); - assertTrue(mWifiManager.saveConfiguration()); } finally { reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks()); From 5799e9167a7838d91f13ea39109a74d9ec79060c Mon Sep 17 00:00:00 2001 From: David Su Date: Tue, 3 Nov 2020 03:01:13 +0000 Subject: [PATCH 14/14] DO NOT MERGE Revert "Ensure CONFIGURED_NETWORKS_CHANGED not received without permissions" This reverts commit 956f4dc23182fb7c42d29546b466e117453f6a75. Reason for revert: b/171022033 Change-Id: I6f28a18ef2487fda7a205bc8bfe9d0835b553b07 --- .../android/net/wifi/cts/WifiManagerTest.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java index 18310edf78..90540f4696 100644 --- a/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java +++ b/tests/cts/net/src/android/net/wifi/cts/WifiManagerTest.java @@ -417,33 +417,12 @@ public class WifiManagerTest extends AndroidTestCase { assertFalse(existSSID(SSID1)); assertTrue(existSSID(SSID2)); - // Need an effectively-final holder because we need to modify inner Intent in callback. - class IntentHolder { - Intent intent; - } - IntentHolder intentHolder = new IntentHolder(); - mContext.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - Log.i(TAG, "Received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast: " + intent); - intentHolder.intent = intent; - } - }, new IntentFilter(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION)); - // Remove a WifiConfig assertTrue(mWifiManager.removeNetwork(netId)); assertFalse(mWifiManager.removeNetwork(notExist)); assertFalse(existSSID(SSID1)); assertFalse(existSSID(SSID2)); - // wait 10 seconds to ensure that broadcast wasn't received - Thread.sleep(DURATION); - Intent intent = intentHolder.intent; - // Broadcast shouldn't be received because although CtsNetTestCases has - // ACCESS_WIFI_STATE permission, it doesn't have ACCESS_FINE_LOCATION permission. - // Receivers need both permissions to get the broadcast. - assertNull("Unexpected received CONFIGURED_NETWORKS_CHANGED_ACTION broadcast!", intent); - assertTrue(mWifiManager.saveConfiguration()); } finally { reEnableNetworks(enabledSsids, mWifiManager.getConfiguredNetworks());