Merge "Add test for NetworkRequest.Builder(NetworkRequest)" am: 28f3e69a25 am: 44f9593f24

Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/1650232

Change-Id: I78b7cd5255202ca9ec8fe63f4cb6c728376d3e9a
This commit is contained in:
Chiachang Wang
2021-04-22 10:48:36 +00:00
committed by Automerger Merge Worker
3 changed files with 85 additions and 18 deletions

View File

@@ -131,9 +131,7 @@ import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.ArrayUtils; import com.android.internal.util.ArrayUtils;
import com.android.modules.utils.build.SdkLevel;
import com.android.networkstack.apishim.ConnectivityManagerShimImpl; import com.android.networkstack.apishim.ConnectivityManagerShimImpl;
import com.android.networkstack.apishim.ConstantsShim;
import com.android.networkstack.apishim.common.ConnectivityManagerShim; import com.android.networkstack.apishim.common.ConnectivityManagerShim;
import com.android.testutils.CompatUtil; import com.android.testutils.CompatUtil;
import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule;
@@ -312,7 +310,7 @@ public class ConnectivityManagerTest {
mCtsNetUtils.disconnectFromCell(); mCtsNetUtils.disconnectFromCell();
} }
if (shouldTestSApis()) { if (TestUtils.shouldTestSApis()) {
runWithShellPermissionIdentity( runWithShellPermissionIdentity(
() -> mCmShim.setRequireVpnForUids(false, mVpnRequiredUidRanges), () -> mCmShim.setRequireVpnForUids(false, mVpnRequiredUidRanges),
NETWORK_SETTINGS); NETWORK_SETTINGS);
@@ -605,7 +603,7 @@ public class ConnectivityManagerTest {
final TestNetworkCallback systemDefaultCallback = new TestNetworkCallback(); final TestNetworkCallback systemDefaultCallback = new TestNetworkCallback();
final TestNetworkCallback perUidCallback = new TestNetworkCallback(); final TestNetworkCallback perUidCallback = new TestNetworkCallback();
final Handler h = new Handler(Looper.getMainLooper()); final Handler h = new Handler(Looper.getMainLooper());
if (shouldTestSApis()) { if (TestUtils.shouldTestSApis()) {
runWithShellPermissionIdentity(() -> { runWithShellPermissionIdentity(() -> {
mCmShim.registerSystemDefaultNetworkCallback(systemDefaultCallback, h); mCmShim.registerSystemDefaultNetworkCallback(systemDefaultCallback, h);
mCmShim.registerDefaultNetworkCallbackAsUid(Process.myUid(), perUidCallback, h); mCmShim.registerDefaultNetworkCallbackAsUid(Process.myUid(), perUidCallback, h);
@@ -628,7 +626,7 @@ public class ConnectivityManagerTest {
assertNotNull("Did not receive onAvailable on default network callback", assertNotNull("Did not receive onAvailable on default network callback",
defaultNetwork); defaultNetwork);
if (shouldTestSApis()) { if (TestUtils.shouldTestSApis()) {
assertNotNull("Did not receive onAvailable on system default network callback", assertNotNull("Did not receive onAvailable on system default network callback",
systemDefaultCallback.waitForAvailable()); systemDefaultCallback.waitForAvailable());
final Network perUidNetwork = perUidCallback.waitForAvailable(); final Network perUidNetwork = perUidCallback.waitForAvailable();
@@ -642,7 +640,7 @@ public class ConnectivityManagerTest {
} finally { } finally {
mCm.unregisterNetworkCallback(callback); mCm.unregisterNetworkCallback(callback);
mCm.unregisterNetworkCallback(defaultTrackingCallback); mCm.unregisterNetworkCallback(defaultTrackingCallback);
if (shouldTestSApis()) { if (TestUtils.shouldTestSApis()) {
mCm.unregisterNetworkCallback(systemDefaultCallback); mCm.unregisterNetworkCallback(systemDefaultCallback);
mCm.unregisterNetworkCallback(perUidCallback); mCm.unregisterNetworkCallback(perUidCallback);
} }
@@ -1670,7 +1668,7 @@ public class ConnectivityManagerTest {
final Network network = mCtsNetUtils.ensureWifiConnected(); final Network network = mCtsNetUtils.ensureWifiConnected();
final String ssid = unquoteSSID(mWifiManager.getConnectionInfo().getSSID()); final String ssid = unquoteSSID(mWifiManager.getConnectionInfo().getSSID());
assertNotNull("Ssid getting from WiifManager is null", ssid); assertNotNull("Ssid getting from WifiManager is null", ssid);
// This package should have no NETWORK_SETTINGS permission. Verify that no ssid is contained // This package should have no NETWORK_SETTINGS permission. Verify that no ssid is contained
// in the NetworkCapabilities. // in the NetworkCapabilities.
verifySsidFromQueriedNetworkCapabilities(network, ssid, false /* hasSsid */); verifySsidFromQueriedNetworkCapabilities(network, ssid, false /* hasSsid */);
@@ -1721,7 +1719,7 @@ public class ConnectivityManagerTest {
public void testRequestBackgroundNetwork() { public void testRequestBackgroundNetwork() {
// Cannot use @IgnoreUpTo(Build.VERSION_CODES.R) because this test also requires API 31 // Cannot use @IgnoreUpTo(Build.VERSION_CODES.R) because this test also requires API 31
// shims, and @IgnoreUpTo does not check that. // shims, and @IgnoreUpTo does not check that.
assumeTrue(shouldTestSApis()); assumeTrue(TestUtils.shouldTestSApis());
// Create a tun interface. Use the returned interface name as the specifier to create // Create a tun interface. Use the returned interface name as the specifier to create
// a test network request. // a test network request.
@@ -1866,7 +1864,7 @@ public class ConnectivityManagerTest {
public void testBlockedStatusCallback() { public void testBlockedStatusCallback() {
// Cannot use @IgnoreUpTo(Build.VERSION_CODES.R) because this test also requires API 31 // Cannot use @IgnoreUpTo(Build.VERSION_CODES.R) because this test also requires API 31
// shims, and @IgnoreUpTo does not check that. // shims, and @IgnoreUpTo does not check that.
assumeTrue(shouldTestSApis()); assumeTrue(TestUtils.shouldTestSApis());
runWithShellPermissionIdentity(() -> doTestBlockedStatusCallback(), NETWORK_SETTINGS); runWithShellPermissionIdentity(() -> doTestBlockedStatusCallback(), NETWORK_SETTINGS);
} }
@@ -1900,15 +1898,7 @@ public class ConnectivityManagerTest {
public void testLegacyLockdownEnabled() { public void testLegacyLockdownEnabled() {
// Cannot use @IgnoreUpTo(Build.VERSION_CODES.R) because this test also requires API 31 // Cannot use @IgnoreUpTo(Build.VERSION_CODES.R) because this test also requires API 31
// shims, and @IgnoreUpTo does not check that. // shims, and @IgnoreUpTo does not check that.
assumeTrue(shouldTestSApis()); assumeTrue(TestUtils.shouldTestSApis());
runWithShellPermissionIdentity(() -> doTestLegacyLockdownEnabled(), NETWORK_SETTINGS); runWithShellPermissionIdentity(() -> doTestLegacyLockdownEnabled(), NETWORK_SETTINGS);
} }
/**
* Whether to test S+ APIs. This requires a) that the test be running on an S+ device, and
* b) that the code be compiled against shims new enough to access these APIs.
*/
private boolean shouldTestSApis() {
return SdkLevel.isAtLeastS() && ConstantsShim.VERSION > Build.VERSION_CODES.R;
}
} }

View File

@@ -28,10 +28,13 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_VPN; import static android.net.NetworkCapabilities.TRANSPORT_VPN;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
import static junit.framework.Assert.fail;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assume.assumeTrue;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.net.MacAddress; import android.net.MacAddress;
@@ -396,4 +399,42 @@ public class NetworkRequestTest {
.addCapability(NET_CAPABILITY_DUN).build(); .addCapability(NET_CAPABILITY_DUN).build();
assertTrue(dunRequest.hasCapability(ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED)); assertTrue(dunRequest.hasCapability(ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED));
} }
private void verifyEqualRequestBuilt(NetworkRequest orig) {
try {
final NetworkRequestShim shim = NetworkRequestShimImpl.newInstance();
final NetworkRequest copy = shim.newBuilder(orig).build();
assertEquals(orig, copy);
} catch (UnsupportedApiLevelException e) {
fail("NetworkRequestShim.newBuilder should be supported in this SDK version");
}
}
@Test
public void testBuildRequestFromExistingRequestWithBuilder() {
assumeTrue(TestUtils.shouldTestSApis());
final NetworkRequest.Builder builder = new NetworkRequest.Builder();
final NetworkRequest baseRequest = builder.build();
verifyEqualRequestBuilt(baseRequest);
final NetworkRequest requestCellMms = builder
.addTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_MMS)
.setSignalStrength(-99).build();
verifyEqualRequestBuilt(requestCellMms);
final WifiNetworkSpecifier specifier = new WifiNetworkSpecifier.Builder()
.setSsidPattern(new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL))
.setBssidPattern(ARBITRARY_ADDRESS, ARBITRARY_ADDRESS)
.build();
final NetworkRequest requestWifi = builder
.addTransportType(TRANSPORT_WIFI)
.removeTransportType(TRANSPORT_CELLULAR)
.addCapability(NET_CAPABILITY_INTERNET)
.removeCapability(NET_CAPABILITY_MMS)
.setNetworkSpecifier(specifier)
.setSignalStrength(-33).build();
verifyEqualRequestBuilt(requestWifi);
}
} }

View File

@@ -0,0 +1,36 @@
/*
* Copyright (C) 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.net.cts;
import android.os.Build;
import com.android.modules.utils.build.SdkLevel;
import com.android.networkstack.apishim.ConstantsShim;
/**
* Utils class to provide common shared test helper methods or constants that behave different
* against compiled sdk.
*/
public class TestUtils {
/**
* Whether to test S+ APIs. This requires a) that the test be running on an S+ device, and
* b) that the code be compiled against shims new enough to access these APIs.
*/
public static boolean shouldTestSApis() {
return SdkLevel.isAtLeastS() && ConstantsShim.VERSION > Build.VERSION_CODES.R;
}
}