Merge "Fix TetheringTest crash on eng build"
diff --git a/TEST_MAPPING b/TEST_MAPPING
index ef96d88..9a455ba 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -11,6 +11,12 @@
"exclude-annotation": "com.android.testutils.SkipPresubmit"
}
]
+ },
+ {
+ "name": "TetheringTests"
+ },
+ {
+ "name": "TetheringIntegrationTests"
}
],
"mainline-presubmit": [
@@ -23,11 +29,19 @@
]
}
],
- // Tests on physical devices with SIM cards: postsubmit only for capacity constraints
"mainline-postsubmit": [
+ // Tests on physical devices with SIM cards: postsubmit only for capacity constraints
{
"name": "CtsNetTestCasesLatestSdk[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk+com.google.android.resolv.apex+com.google.android.tethering.apex]",
"keywords": ["sim"]
+ },
+ {
+ "name": "TetheringCoverageTests[CaptivePortalLoginGoogle.apk+NetworkStackGoogle.apk+com.google.android.resolv.apex+com.google.android.tethering.apex]"
+ }
+ ],
+ "imports": [
+ {
+ "path": "packages/modules/NetworkStack"
}
]
}
diff --git a/Tethering/TEST_MAPPING b/Tethering/TEST_MAPPING
deleted file mode 100644
index 5617b0c..0000000
--- a/Tethering/TEST_MAPPING
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "presubmit": [
- {
- "name": "TetheringTests"
- }
- ],
- "postsubmit": [
- {
- "name": "TetheringIntegrationTests"
- }
- ]
-}
diff --git a/Tethering/apex/Android.bp b/Tethering/apex/Android.bp
index 164bda4..917bf21 100644
--- a/Tethering/apex/Android.bp
+++ b/Tethering/apex/Android.bp
@@ -24,8 +24,10 @@
// cannot build as updatable unless service-connectivity builds against stable API).
updatable: false,
// min_sdk_version: "30",
+ bootclasspath_fragments: [
+ "com.android.tethering-bootclasspath-fragment",
+ ],
java_libs: [
- "framework-tethering",
"service-connectivity",
],
jni_libs: [
@@ -56,6 +58,13 @@
certificate: "com.android.tethering",
}
+// Encapsulate the contributions made by the com.android.tethering to the bootclasspath.
+bootclasspath_fragment {
+ name: "com.android.tethering-bootclasspath-fragment",
+ contents: ["framework-tethering"],
+ apex_available: ["com.android.tethering"],
+}
+
override_apex {
name: "com.android.tethering.inprocess",
base: "com.android.tethering",
diff --git a/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java b/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java
index 413b0cb..2beeeb8 100644
--- a/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java
+++ b/Tethering/src/com/android/networkstack/tethering/TetheringConfiguration.java
@@ -58,6 +58,8 @@
private static final String[] EMPTY_STRING_ARRAY = new String[0];
+ private static final String TETHERING_MODULE_NAME = "com.android.tethering";
+
// Default ranges used for the legacy DHCP server.
// USB is 192.168.42.1 and 255.255.255.0
// Wifi is 192.168.43.1 and 255.255.255.0
@@ -473,7 +475,8 @@
@VisibleForTesting
protected boolean isFeatureEnabled(Context ctx, String featureVersionFlag) {
- return DeviceConfigUtils.isFeatureEnabled(ctx, NAMESPACE_CONNECTIVITY, featureVersionFlag);
+ return DeviceConfigUtils.isFeatureEnabled(ctx, NAMESPACE_CONNECTIVITY, featureVersionFlag,
+ TETHERING_MODULE_NAME, false /* defaultEnabled */);
}
private Resources getResources(Context ctx, int subId) {
diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
index 8cfa7d0..5ae4b43 100644
--- a/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
+++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/EntitlementManagerTest.java
@@ -53,6 +53,7 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ModuleInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
@@ -203,6 +204,7 @@
doReturn(mPm).when(mContext).getPackageManager();
doReturn(TEST_PACKAGE_NAME).when(mContext).getPackageName();
doReturn(new PackageInfo()).when(mPm).getPackageInfo(anyString(), anyInt());
+ doReturn(new ModuleInfo()).when(mPm).getModuleInfo(anyString(), anyInt());
when(mResources.getStringArray(R.array.config_tether_dhcp_range))
.thenReturn(new String[0]);
diff --git a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java
index 1f4e371..a6433a6 100644
--- a/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java
+++ b/Tethering/tests/unit/src/com/android/networkstack/tethering/TetheringConfigurationTest.java
@@ -35,6 +35,7 @@
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.ModuleInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
@@ -75,12 +76,14 @@
private static final String PROVISIONING_NO_UI_APP_NAME = "no_ui_app";
private static final String PROVISIONING_APP_RESPONSE = "app_response";
private static final String TEST_PACKAGE_NAME = "com.android.tethering.test";
+ private static final String APEX_NAME = "com.android.tethering";
private static final long TEST_PACKAGE_VERSION = 1234L;
@Mock private Context mContext;
@Mock private TelephonyManager mTelephonyManager;
@Mock private Resources mResources;
@Mock private Resources mResourcesForSubId;
@Mock private PackageManager mPackageManager;
+ @Mock private ModuleInfo mMi;
private Context mMockContext;
private boolean mHasTelephonyManager;
private boolean mEnableLegacyDhcpServer;
@@ -143,6 +146,8 @@
final PackageInfo pi = new PackageInfo();
pi.setLongVersionCode(TEST_PACKAGE_VERSION);
doReturn(pi).when(mPackageManager).getPackageInfo(eq(TEST_PACKAGE_NAME), anyInt());
+ doReturn(mMi).when(mPackageManager).getModuleInfo(eq(APEX_NAME), anyInt());
+ doReturn(TEST_PACKAGE_NAME).when(mMi).getPackageName();
when(mResources.getStringArray(R.array.config_tether_dhcp_range)).thenReturn(
new String[0]);
@@ -505,7 +510,7 @@
.thenReturn(false);
setTetherForceUpstreamAutomaticFlagVersion(TEST_PACKAGE_VERSION - 1);
assertTrue(DeviceConfigUtils.isFeatureEnabled(mMockContext, NAMESPACE_CONNECTIVITY,
- TetheringConfiguration.TETHER_FORCE_UPSTREAM_AUTOMATIC_VERSION));
+ TetheringConfiguration.TETHER_FORCE_UPSTREAM_AUTOMATIC_VERSION, APEX_NAME, false));
assertChooseUpstreamAutomaticallyIs(true);
diff --git a/tests/cts/net/src/android/net/cts/NetworkRequestTest.java b/tests/cts/net/src/android/net/cts/NetworkRequestTest.java
index 1a97566..8c35b97 100644
--- a/tests/cts/net/src/android/net/cts/NetworkRequestTest.java
+++ b/tests/cts/net/src/android/net/cts/NetworkRequestTest.java
@@ -327,7 +327,7 @@
// TODO: 1. Refactor test cases with helper method.
// 2. Test capability that does not yet exist.
@Test @IgnoreUpTo(Build.VERSION_CODES.R)
- public void testBypassingVcnForNonInternetRequest() {
+ public void testBypassingVcn() {
// Make an empty request. Verify the NOT_VCN_MANAGED is added.
final NetworkRequest emptyRequest = new NetworkRequest.Builder().build();
assertTrue(emptyRequest.hasCapability(ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED));
@@ -360,12 +360,12 @@
.addCapability(NET_CAPABILITY_NOT_ROAMING).build();
assertTrue(notRoamRequest.hasCapability(ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED));
- // Make a internet request. Verify the NOT_VCN_MANAGED is added.
+ // Make an internet request. Verify the NOT_VCN_MANAGED is added.
final NetworkRequest internetRequest = new NetworkRequest.Builder()
.addCapability(NET_CAPABILITY_INTERNET).build();
assertTrue(internetRequest.hasCapability(ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED));
- // Make a internet request which explicitly removed NOT_VCN_MANAGED.
+ // Make an internet request which explicitly removed NOT_VCN_MANAGED.
// Verify the NOT_VCN_MANAGED is removed.
final NetworkRequest internetRemoveNotVcnRequest = new NetworkRequest.Builder()
.addCapability(NET_CAPABILITY_INTERNET)
@@ -398,6 +398,14 @@
final NetworkRequest dunRequest = new NetworkRequest.Builder()
.addCapability(NET_CAPABILITY_DUN).build();
assertTrue(dunRequest.hasCapability(ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED));
+
+ // Make an internet request but with NetworkSpecifier. Verify the NOT_VCN_MANAGED is not
+ // added.
+ final NetworkRequest internetWithSpecifierRequest = new NetworkRequest.Builder()
+ .addTransportType(TRANSPORT_WIFI).addCapability(NET_CAPABILITY_INTERNET)
+ .setNetworkSpecifier(makeTestWifiSpecifier()).build();
+ assertFalse(internetWithSpecifierRequest.hasCapability(
+ ConstantsShim.NET_CAPABILITY_NOT_VCN_MANAGED));
}
private void verifyEqualRequestBuilt(NetworkRequest orig) {
@@ -424,17 +432,20 @@
.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)
+ .setNetworkSpecifier(makeTestWifiSpecifier())
.setSignalStrength(-33).build();
verifyEqualRequestBuilt(requestWifi);
}
+
+ private WifiNetworkSpecifier makeTestWifiSpecifier() {
+ return new WifiNetworkSpecifier.Builder()
+ .setSsidPattern(new PatternMatcher(TEST_SSID, PatternMatcher.PATTERN_LITERAL))
+ .setBssidPattern(ARBITRARY_ADDRESS, ARBITRARY_ADDRESS)
+ .build();
+ }
}