Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b8900ee authored by Xiao Ma's avatar Xiao Ma Committed by Automerger Merge Worker
Browse files

Merge "Separate the experimental DHCP features setting in...

Merge "Separate the experimental DHCP features setting in IpClientIntegrationTest." am: 3d03021c am: a99c09fe

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

Change-Id: Iaa94fa589935b129d99c5ffd4f9484ffcf21b16b
parents 5a73607a a99c09fe
Loading
Loading
Loading
Loading
+9 −10
Original line number Diff line number Diff line
@@ -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 @@ import org.mockito.Mockito.verify
 * 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 {
+20 −36
Original line number Diff line number Diff line
@@ -343,32 +343,12 @@ public abstract class IpClientIntegrationTestCommon {
    };

    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 @@ public abstract class IpClientIntegrationTestCommon {
            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 @@ public abstract class IpClientIntegrationTestCommon {
                @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 @@ public abstract class IpClientIntegrationTestCommon {
    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 @@ public abstract class IpClientIntegrationTestCommon {
                && (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(
+20 −24
Original line number Diff line number Diff line
@@ -26,12 +26,12 @@ import android.net.ipmemorystore.OnNetworkAttributesRetrievedListener
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,26 +194,9 @@ class IpClientRootTest : IpClientIntegrationTestCommon() {
        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)
        } 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] =
@@ -225,6 +208,19 @@ class IpClientRootTest : IpClientIntegrationTestCommon() {
            // "999999999"
            DeviceConfig.setProperty(DeviceConfig.NAMESPACE_CONNECTIVITY, feature,
                    if (enabled) "1" else "999999999", false)
        } finally {
            automation.dropShellPermissionIdentity()
        }
    }

    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()
        }
    }

    private class TestAttributesRetrievedListener : OnNetworkAttributesRetrievedListener {