From 00950274cb73dadabd48cb6d512effc376773b42 Mon Sep 17 00:00:00 2001 From: Chiachang Wang Date: Mon, 22 Feb 2021 09:54:16 +0800 Subject: [PATCH] Replace the usage of UidRange The parameter of NetworkCapabilities.setUids() and NetworkRequest.Builder.setUids() are updated to take a set of integer Range instead of a set of UidRange because of refactor work for the incoming connectivity mainline module. The parameter change stops NetworkRequestTest to work in the different API levels. Replace the usage with shims to work in both current and stable APIs. Bug: 172183305 Test: atest FrameworksNetTests CtsNetTestCasesLatestSdk Merged-In: I4bc0daf5ad9e4b4043f4a897ddab16aec8f8a536 Change-Id: I2550cb3ddd9c72c12de0dbf9baf32eec6fa3b151 --- .../android/net/cts/NetworkRequestTest.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/NetworkRequestTest.java b/tests/cts/net/src/android/net/cts/NetworkRequestTest.java index 30c4e72e10..9906c30ba7 100644 --- a/tests/cts/net/src/android/net/cts/NetworkRequestTest.java +++ b/tests/cts/net/src/android/net/cts/NetworkRequestTest.java @@ -39,17 +39,20 @@ import android.net.MatchAllNetworkSpecifier; import android.net.NetworkCapabilities; import android.net.NetworkRequest; import android.net.NetworkSpecifier; -import android.net.UidRange; import android.net.wifi.WifiNetworkSpecifier; import android.os.Build; import android.os.PatternMatcher; import android.os.Process; import android.util.ArraySet; +import android.util.Range; import androidx.test.runner.AndroidJUnit4; import com.android.modules.utils.build.SdkLevel; import com.android.networkstack.apishim.ConstantsShim; +import com.android.networkstack.apishim.NetworkRequestShimImpl; +import com.android.networkstack.apishim.common.NetworkRequestShim; +import com.android.networkstack.apishim.common.UnsupportedApiLevelException; import com.android.testutils.DevSdkIgnoreRule; import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo; @@ -57,6 +60,8 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Set; + @RunWith(AndroidJUnit4.class) public class NetworkRequestTest { @Rule @@ -225,6 +230,14 @@ public class NetworkRequestTest { assertTrue(requestCellularInternet.canBeSatisfiedBy(capCellularVpnMmsInternet)); } + private void setUids(NetworkRequest.Builder builder, Set> ranges) + throws UnsupportedApiLevelException { + if (SdkLevel.isAtLeastS()) { + final NetworkRequestShim networkRequestShim = NetworkRequestShimImpl.newInstance(); + networkRequestShim.setUids(builder, ranges); + } + } + @Test @IgnoreUpTo(Build.VERSION_CODES.Q) public void testInvariantInCanBeSatisfiedBy() { @@ -232,15 +245,26 @@ public class NetworkRequestTest { // NetworkCapabilities.satisfiedByNetworkCapabilities(). final LocalNetworkSpecifier specifier1 = new LocalNetworkSpecifier(1234 /* id */); final int uid = Process.myUid(); - final ArraySet ranges = new ArraySet<>(); - ranges.add(new UidRange(uid, uid)); - final NetworkRequest requestCombination = new NetworkRequest.Builder() + final NetworkRequest.Builder nrBuilder = new NetworkRequest.Builder() .addTransportType(TRANSPORT_CELLULAR) .addCapability(NET_CAPABILITY_INTERNET) .setLinkUpstreamBandwidthKbps(1000) .setNetworkSpecifier(specifier1) - .setSignalStrength(-123) - .setUids(ranges).build(); + .setSignalStrength(-123); + + // The uid ranges should be set into the request, but setUids() takes a set of UidRange + // that is hidden and inaccessible from shims. Before, S setUids will be a no-op. But + // because NetworkRequest.Builder sets the UID of the request to the current UID, the + // request contains the current UID both on S and before S. + final Set> ranges = new ArraySet<>(); + ranges.add(new Range(uid, uid)); + try { + setUids(nrBuilder, ranges); + } catch (UnsupportedApiLevelException e) { + // Not supported before API31. + } + final NetworkRequest requestCombination = nrBuilder.build(); + final NetworkCapabilities capCell = new NetworkCapabilities.Builder() .addTransportType(TRANSPORT_CELLULAR).build(); assertCorrectlySatisfies(false, requestCombination, capCell);