From 2257ecc830c2b54109b3df73f4d9be71e9dfa16b 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 Merged-In: I2550cb3ddd9c72c12de0dbf9baf32eec6fa3b151 Change-Id: I90b3384d2a78275df9f8717dba9d654eb82036bd --- .../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);