Merge "Separate the experimental DHCP features setting in IpClientIntegrationTest." am: 3d03021c8c am: a99c09fe2a am: 65abb6954d
Original change: https://android-review.googlesource.com/c/platform/packages/modules/NetworkStack/+/1623670
Change-Id: Idfef17a9cec184f4cac67f4abd56f8bebbe404c4
diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTest.kt b/tests/integration/src/android/net/ip/IpClientIntegrationTest.kt
index 9f29a2e..eb0a799 100644
--- a/tests/integration/src/android/net/ip/IpClientIntegrationTest.kt
+++ b/tests/integration/src/android/net/ip/IpClientIntegrationTest.kt
@@ -17,6 +17,7 @@
package android.net.ip
import android.net.ipmemorystore.NetworkAttributes
+import android.util.ArrayMap
import org.mockito.Mockito.any
import org.mockito.ArgumentCaptor
import org.mockito.Mockito.eq
@@ -28,22 +29,20 @@
* Tests for IpClient, run with signature permissions.
*/
class IpClientIntegrationTest : IpClientIntegrationTestCommon() {
+ private val mEnabledFeatures = ArrayMap<String, Boolean>()
+
override fun makeIIpClient(ifaceName: String, cb: IIpClientCallbacks): IIpClient {
return mIpc.makeConnector()
}
override fun useNetworkStackSignature() = true
- override fun setDhcpFeatures(
- isDhcpLeaseCacheEnabled: Boolean,
- isRapidCommitEnabled: Boolean,
- isDhcpIpConflictDetectEnabled: Boolean,
- isIPv6OnlyPreferredEnabled: Boolean
- ) {
- mDependencies.setDhcpLeaseCacheEnabled(isDhcpLeaseCacheEnabled)
- mDependencies.setDhcpRapidCommitEnabled(isRapidCommitEnabled)
- mDependencies.setDhcpIpConflictDetectEnabled(isDhcpIpConflictDetectEnabled)
- mDependencies.setIPv6OnlyPreferredEnabled(isIPv6OnlyPreferredEnabled)
+ override fun isFeatureEnabled(name: String, defaultEnabled: Boolean): Boolean {
+ return mEnabledFeatures.get(name) ?: defaultEnabled
+ }
+
+ override fun setFeatureEnabled(name: String, enabled: Boolean) {
+ mEnabledFeatures.put(name, enabled)
}
override fun getStoredNetworkAttributes(l2Key: String, timeout: Long): NetworkAttributes {
diff --git a/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java b/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java
index 451437e..f6e64bb 100644
--- a/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java
+++ b/tests/integration/src/android/net/ip/IpClientIntegrationTestCommon.java
@@ -343,32 +343,12 @@
};
protected class Dependencies extends IpClient.Dependencies {
- private boolean mIsDhcpLeaseCacheEnabled;
- private boolean mIsDhcpRapidCommitEnabled;
- private boolean mIsDhcpIpConflictDetectEnabled;
// Can't use SparseIntArray, it doesn't have an easy way to know if a key is not present.
private HashMap<String, Integer> mIntConfigProperties = new HashMap<>();
private DhcpClient mDhcpClient;
private boolean mIsHostnameConfigurationEnabled;
private String mHostname;
private boolean mIsInterfaceRecovered;
- private boolean mIsIPv6OnlyPreferredEnabled;
-
- public void setDhcpLeaseCacheEnabled(final boolean enable) {
- mIsDhcpLeaseCacheEnabled = enable;
- }
-
- public void setDhcpRapidCommitEnabled(final boolean enable) {
- mIsDhcpRapidCommitEnabled = enable;
- }
-
- public void setDhcpIpConflictDetectEnabled(final boolean enable) {
- mIsDhcpIpConflictDetectEnabled = enable;
- }
-
- public void setIPv6OnlyPreferredEnabled(final boolean enable) {
- mIsIPv6OnlyPreferredEnabled = enable;
- }
public void setHostnameConfiguration(final boolean enable, final String hostname) {
mIsHostnameConfigurationEnabled = enable;
@@ -410,6 +390,11 @@
return mDhcpClient;
}
+ public boolean isFeatureEnabled(final Context context, final String name,
+ final boolean defaultEnabled) {
+ return IpClientIntegrationTestCommon.this.isFeatureEnabled(name, defaultEnabled);
+ }
+
@Override
public DhcpClient.Dependencies getDhcpClientDependencies(
NetworkStackIpMemoryStore ipMemoryStore, IpProvisioningMetrics metrics) {
@@ -417,19 +402,7 @@
@Override
public boolean isFeatureEnabled(final Context context, final String name,
final boolean defaultEnabled) {
- switch (name) {
- case NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION:
- return mIsDhcpRapidCommitEnabled;
- case NetworkStackUtils.DHCP_INIT_REBOOT_VERSION:
- return mIsDhcpLeaseCacheEnabled;
- case NetworkStackUtils.DHCP_IP_CONFLICT_DETECT_VERSION:
- return mIsDhcpIpConflictDetectEnabled;
- case NetworkStackUtils.DHCP_IPV6_ONLY_PREFERRED_VERSION:
- return mIsIPv6OnlyPreferredEnabled;
- default:
- fail("Invalid experiment flag: " + name);
- return false;
- }
+ return Dependencies.this.isFeatureEnabled(context, name, defaultEnabled);
}
@Override
@@ -473,9 +446,9 @@
protected abstract IIpClient makeIIpClient(
@NonNull String ifaceName, @NonNull IIpClientCallbacks cb);
- protected abstract void setDhcpFeatures(boolean isDhcpLeaseCacheEnabled,
- boolean isRapidCommitEnabled, boolean isDhcpIpConflictDetectEnabled,
- boolean isIPv6OnlyPreferredEnabled);
+ protected abstract void setFeatureEnabled(String name, boolean enabled);
+
+ protected abstract boolean isFeatureEnabled(String name, boolean defaultEnabled);
protected abstract boolean useNetworkStackSignature();
@@ -490,6 +463,17 @@
&& (mIsSignatureRequiredTest || !TestNetworkStackServiceClient.isSupported());
}
+ protected void setDhcpFeatures(final boolean isDhcpLeaseCacheEnabled,
+ final boolean isRapidCommitEnabled, final boolean isDhcpIpConflictDetectEnabled,
+ final boolean isIPv6OnlyPreferredEnabled) {
+ setFeatureEnabled(NetworkStackUtils.DHCP_INIT_REBOOT_VERSION, isDhcpLeaseCacheEnabled);
+ setFeatureEnabled(NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION, isRapidCommitEnabled);
+ setFeatureEnabled(NetworkStackUtils.DHCP_IP_CONFLICT_DETECT_VERSION,
+ isDhcpIpConflictDetectEnabled);
+ setFeatureEnabled(NetworkStackUtils.DHCP_IPV6_ONLY_PREFERRED_VERSION,
+ isIPv6OnlyPreferredEnabled);
+ }
+
@Before
public void setUp() throws Exception {
final Method testMethod = IpClientIntegrationTestCommon.class.getMethod(
diff --git a/tests/integration/src/android/net/ip/IpClientRootTest.kt b/tests/integration/src/android/net/ip/IpClientRootTest.kt
index ea2ec11..68d8aab 100644
--- a/tests/integration/src/android/net/ip/IpClientRootTest.kt
+++ b/tests/integration/src/android/net/ip/IpClientRootTest.kt
@@ -26,12 +26,12 @@
import android.net.ipmemorystore.NetworkAttributes
import android.net.ipmemorystore.Status
import android.net.networkstack.TestNetworkStackServiceClient
-import android.net.util.NetworkStackUtils
import android.os.Process
import android.provider.DeviceConfig
import android.util.ArrayMap
import android.util.Log
import androidx.test.platform.app.InstrumentationRegistry
+import com.android.net.module.util.DeviceConfigUtils
import java.lang.System.currentTimeMillis
import java.util.concurrent.CompletableFuture
import java.util.concurrent.CountDownLatch
@@ -194,37 +194,33 @@
return ipClientCaptor.value
}
- override fun setDhcpFeatures(
- isDhcpLeaseCacheEnabled: Boolean,
- isRapidCommitEnabled: Boolean,
- isDhcpIpConflictDetectEnabled: Boolean,
- isIPv6OnlyPreferredEnabled: Boolean
- ) {
+ override fun setFeatureEnabled(feature: String, enabled: Boolean) {
automation.adoptShellPermissionIdentity(READ_DEVICE_CONFIG, WRITE_DEVICE_CONFIG)
try {
- setFeatureEnabled(NetworkStackUtils.DHCP_INIT_REBOOT_VERSION, isDhcpLeaseCacheEnabled)
- setFeatureEnabled(NetworkStackUtils.DHCP_RAPID_COMMIT_VERSION, isRapidCommitEnabled)
- setFeatureEnabled(NetworkStackUtils.DHCP_IP_CONFLICT_DETECT_VERSION,
- isDhcpIpConflictDetectEnabled)
- setFeatureEnabled(NetworkStackUtils.DHCP_IPV6_ONLY_PREFERRED_VERSION,
- isIPv6OnlyPreferredEnabled)
+ // Do not use computeIfAbsent as it would overwrite null values (flag originally unset)
+ if (!originalFlagValues.containsKey(feature)) {
+ originalFlagValues[feature] =
+ DeviceConfig.getProperty(DeviceConfig.NAMESPACE_CONNECTIVITY, feature)
+ }
+ // The feature is enabled if the flag is lower than the package version.
+ // Package versions follow a standard format with 9 digits.
+ // TODO: consider resetting flag values on reboot when set to special values like "1" or
+ // "999999999"
+ DeviceConfig.setProperty(DeviceConfig.NAMESPACE_CONNECTIVITY, feature,
+ if (enabled) "1" else "999999999", false)
} finally {
automation.dropShellPermissionIdentity()
}
}
- private fun setFeatureEnabled(feature: String, enabled: Boolean) {
- // Do not use computeIfAbsent as it would overwrite null values (flag originally unset)
- if (!originalFlagValues.containsKey(feature)) {
- originalFlagValues[feature] =
- DeviceConfig.getProperty(DeviceConfig.NAMESPACE_CONNECTIVITY, feature)
+ override fun isFeatureEnabled(name: String, defaultEnabled: Boolean): Boolean {
+ automation.adoptShellPermissionIdentity(READ_DEVICE_CONFIG, WRITE_DEVICE_CONFIG)
+ try {
+ return DeviceConfigUtils.isFeatureEnabled(mContext, DeviceConfig.NAMESPACE_CONNECTIVITY,
+ name, defaultEnabled)
+ } finally {
+ automation.dropShellPermissionIdentity()
}
- // The feature is enabled if the flag is lower than the package version.
- // Package versions follow a standard format with 9 digits.
- // TODO: consider resetting flag values on reboot when set to special values like "1" or
- // "999999999"
- DeviceConfig.setProperty(DeviceConfig.NAMESPACE_CONNECTIVITY, feature,
- if (enabled) "1" else "999999999", false)
}
private class TestAttributesRetrievedListener : OnNetworkAttributesRetrievedListener {