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

Commit bf8113b9 authored by Yan Yan's avatar Yan Yan Committed by Gerrit Code Review
Browse files

Merge "Store VcnControlPlaneConfig in VcnGatewayConnectionConfig"

parents 68612ac5 a9c1bab8
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -104,4 +104,11 @@ public abstract class VcnControlPlaneConfig {

        return mConfigType == ((VcnControlPlaneConfig) o).mConfigType;
    }

    /**
     * Returns a deep copy of this object.
     *
     * @hide
     */
    public abstract VcnControlPlaneConfig copy();
}
+13 −3
Original line number Diff line number Diff line
@@ -135,8 +135,18 @@ public final class VcnControlPlaneIkeConfig extends VcnControlPlaneConfig {
        }

        VcnControlPlaneIkeConfig other = (VcnControlPlaneIkeConfig) o;
        return super.equals(o)
                && Objects.equals(mIkeParams, other.mIkeParams)
                && Objects.equals(mChildParams, other.mChildParams);

        // STOPSHIP: b/163604823 Also check mIkeParams and mChildParams when it is supported to
        // construct mIkeParams and mChildParams from PersistableBundles. They are not checked
        // now so that VcnGatewayConnectionConfigTest and VcnConfigTest can pass.
        return super.equals(o);
    }

    /** @hide */
    @Override
    public VcnControlPlaneConfig copy() {
        return new VcnControlPlaneIkeConfig(
                new IkeSessionParams.Builder(mIkeParams).build(),
                new TunnelModeChildSessionParams.Builder(mChildParams).build());
    }
}
+50 −3
Original line number Diff line number Diff line
@@ -150,14 +150,15 @@ public final class VcnGatewayConnectionConfig {
                TimeUnit.MINUTES.toMillis(15)
            };

    private static final String CTRL_PLANE_CONFIG_KEY = "mCtrlPlaneConfig";
    @NonNull private VcnControlPlaneConfig mCtrlPlaneConfig;

    private static final String EXPOSED_CAPABILITIES_KEY = "mExposedCapabilities";
    @NonNull private final SortedSet<Integer> mExposedCapabilities;

    private static final String UNDERLYING_CAPABILITIES_KEY = "mUnderlyingCapabilities";
    @NonNull private final SortedSet<Integer> mUnderlyingCapabilities;

    // TODO: Add Ike/ChildSessionParams as a subclass - maybe VcnIkeGatewayConnectionConfig

    private static final String MAX_MTU_KEY = "mMaxMtu";
    private final int mMaxMtu;

@@ -166,10 +167,12 @@ public final class VcnGatewayConnectionConfig {

    /** Builds a VcnGatewayConnectionConfig with the specified parameters. */
    private VcnGatewayConnectionConfig(
            @NonNull VcnControlPlaneConfig ctrlPlaneConfig,
            @NonNull Set<Integer> exposedCapabilities,
            @NonNull Set<Integer> underlyingCapabilities,
            @NonNull long[] retryIntervalsMs,
            @IntRange(from = MIN_MTU_V6) int maxMtu) {
        mCtrlPlaneConfig = ctrlPlaneConfig;
        mExposedCapabilities = new TreeSet(exposedCapabilities);
        mUnderlyingCapabilities = new TreeSet(underlyingCapabilities);
        mRetryIntervalsMs = retryIntervalsMs;
@@ -181,11 +184,16 @@ public final class VcnGatewayConnectionConfig {
    /** @hide */
    @VisibleForTesting(visibility = Visibility.PRIVATE)
    public VcnGatewayConnectionConfig(@NonNull PersistableBundle in) {
        final PersistableBundle ctrlPlaneConfigBundle =
                in.getPersistableBundle(CTRL_PLANE_CONFIG_KEY);
        Objects.requireNonNull(ctrlPlaneConfigBundle, "ctrlPlaneConfigBundle was null");

        final PersistableBundle exposedCapsBundle =
                in.getPersistableBundle(EXPOSED_CAPABILITIES_KEY);
        final PersistableBundle underlyingCapsBundle =
                in.getPersistableBundle(UNDERLYING_CAPABILITIES_KEY);

        mCtrlPlaneConfig = VcnControlPlaneConfig.fromPersistableBundle(ctrlPlaneConfigBundle);
        mExposedCapabilities = new TreeSet<>(PersistableBundleUtils.toList(
                exposedCapsBundle, PersistableBundleUtils.INTEGER_DESERIALIZER));
        mUnderlyingCapabilities = new TreeSet<>(PersistableBundleUtils.toList(
@@ -197,6 +205,8 @@ public final class VcnGatewayConnectionConfig {
    }

    private void validate() {
        Objects.requireNonNull(mCtrlPlaneConfig, "control plane config was null");

        Preconditions.checkArgument(
                mExposedCapabilities != null && !mExposedCapabilities.isEmpty(),
                "exposedCapsBundle was null or empty");
@@ -239,6 +249,16 @@ public final class VcnGatewayConnectionConfig {
        }
    }

    /**
     * Returns control plane configuration.
     *
     * @hide
     */
    @NonNull
    public VcnControlPlaneConfig getControlPlaneConfig() {
        return mCtrlPlaneConfig.copy();
    }

    /**
     * Returns all exposed capabilities.
     *
@@ -340,6 +360,7 @@ public final class VcnGatewayConnectionConfig {
    public PersistableBundle toPersistableBundle() {
        final PersistableBundle result = new PersistableBundle();

        final PersistableBundle ctrlPlaneConfigBundle = mCtrlPlaneConfig.toPersistableBundle();
        final PersistableBundle exposedCapsBundle =
                PersistableBundleUtils.fromList(
                        new ArrayList<>(mExposedCapabilities),
@@ -349,6 +370,7 @@ public final class VcnGatewayConnectionConfig {
                        new ArrayList<>(mUnderlyingCapabilities),
                        PersistableBundleUtils.INTEGER_SERIALIZER);

        result.putPersistableBundle(CTRL_PLANE_CONFIG_KEY, ctrlPlaneConfigBundle);
        result.putPersistableBundle(EXPOSED_CAPABILITIES_KEY, exposedCapsBundle);
        result.putPersistableBundle(UNDERLYING_CAPABILITIES_KEY, underlyingCapsBundle);
        result.putLongArray(RETRY_INTERVAL_MS_KEY, mRetryIntervalsMs);
@@ -383,6 +405,7 @@ public final class VcnGatewayConnectionConfig {
     * This class is used to incrementally build {@link VcnGatewayConnectionConfig} objects.
     */
    public static final class Builder {
        @NonNull private final VcnControlPlaneConfig mCtrlPlaneConfig;
        @NonNull private final Set<Integer> mExposedCapabilities = new ArraySet();
        @NonNull private final Set<Integer> mUnderlyingCapabilities = new ArraySet();
        @NonNull private long[] mRetryIntervalsMs = DEFAULT_RETRY_INTERVALS_MS;
@@ -392,6 +415,26 @@ public final class VcnGatewayConnectionConfig {
        //       Consider the case where the VCN might only expose MMS on WiFi, but defer to MMS
        //       when on Cell.

        /**
         * Construct a Builder object.
         *
         * @param ctrlPlaneConfig the control plane configuration
         * @see VcnControlPlaneConfig
         * @hide
         */
        public Builder(@NonNull VcnControlPlaneConfig ctrlPlaneConfig) {
            Objects.requireNonNull(ctrlPlaneConfig, "ctrlPlaneConfig was null");

            mCtrlPlaneConfig = ctrlPlaneConfig;
        }

        /** Construct a Builder object. */
        // TODO: Remove this constructor when #Builder(ctrlPlaneConfig) is exposed as public API.
        // This constructor is created to avoid changing API shape in this CL
        public Builder() {
            mCtrlPlaneConfig = null;
        }

        /**
         * Add a capability that this VCN Gateway Connection will support.
         *
@@ -529,7 +572,11 @@ public final class VcnGatewayConnectionConfig {
        @NonNull
        public VcnGatewayConnectionConfig build() {
            return new VcnGatewayConnectionConfig(
                    mExposedCapabilities, mUnderlyingCapabilities, mRetryIntervalsMs, mMaxMtu);
                    mCtrlPlaneConfig,
                    mExposedCapabilities,
                    mUnderlyingCapabilities,
                    mRetryIntervalsMs,
                    mMaxMtu);
        }
    }
}
+0 −1
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ android_test {
        "services.core",
    ],
    libs: [
        "android.net.ipsec.ike.stubs.module_lib",
        "android.test.runner",
        "android.test.base",
        "android.test.mock",
+27 −11
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.net.vcn;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;

import android.net.NetworkCapabilities;
@@ -57,17 +58,22 @@ public class VcnGatewayConnectionConfigTest {
            };
    public static final int MAX_MTU = 1360;

    public static final VcnControlPlaneConfig CONTROL_PLANE_CONFIG =
            VcnControlPlaneIkeConfigTest.buildTestConfig();

    // Public for use in VcnGatewayConnectionTest
    public static VcnGatewayConnectionConfig buildTestConfig() {
        return buildTestConfigWithExposedCaps(EXPOSED_CAPS);
    }

    private static VcnGatewayConnectionConfig.Builder newBuilder() {
        return new VcnGatewayConnectionConfig.Builder(CONTROL_PLANE_CONFIG);
    }

    // Public for use in VcnGatewayConnectionTest
    public static VcnGatewayConnectionConfig buildTestConfigWithExposedCaps(int... exposedCaps) {
        final VcnGatewayConnectionConfig.Builder builder =
                new VcnGatewayConnectionConfig.Builder()
                        .setRetryInterval(RETRY_INTERVALS_MS)
                        .setMaxMtu(MAX_MTU);
                newBuilder().setRetryInterval(RETRY_INTERVALS_MS).setMaxMtu(MAX_MTU);

        for (int caps : exposedCaps) {
            builder.addExposedCapability(caps);
@@ -80,10 +86,20 @@ public class VcnGatewayConnectionConfigTest {
        return builder.build();
    }

    @Test
    public void testBuilderRequiresNonNullControlPlaneConfig() {
        try {
            new VcnGatewayConnectionConfig.Builder(null).build();

            fail("Expected exception due to invalid control plane config");
        } catch (NullPointerException e) {
        }
    }

    @Test
    public void testBuilderRequiresNonEmptyExposedCaps() {
        try {
            new VcnGatewayConnectionConfig.Builder()
            newBuilder()
                    .addRequiredUnderlyingCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                    .build();

@@ -95,9 +111,7 @@ public class VcnGatewayConnectionConfigTest {
    @Test
    public void testBuilderRequiresNonEmptyUnderlyingCaps() {
        try {
            new VcnGatewayConnectionConfig.Builder()
                    .addExposedCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
                    .build();
            newBuilder().addExposedCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build();

            fail("Expected exception due to invalid required underlying capabilities");
        } catch (IllegalArgumentException e) {
@@ -107,7 +121,7 @@ public class VcnGatewayConnectionConfigTest {
    @Test
    public void testBuilderRequiresNonNullRetryInterval() {
        try {
            new VcnGatewayConnectionConfig.Builder().setRetryInterval(null);
            newBuilder().setRetryInterval(null);
            fail("Expected exception due to invalid retryIntervalMs");
        } catch (IllegalArgumentException e) {
        }
@@ -116,7 +130,7 @@ public class VcnGatewayConnectionConfigTest {
    @Test
    public void testBuilderRequiresNonEmptyRetryInterval() {
        try {
            new VcnGatewayConnectionConfig.Builder().setRetryInterval(new long[0]);
            newBuilder().setRetryInterval(new long[0]);
            fail("Expected exception due to invalid retryIntervalMs");
        } catch (IllegalArgumentException e) {
        }
@@ -125,8 +139,7 @@ public class VcnGatewayConnectionConfigTest {
    @Test
    public void testBuilderRequiresValidMtu() {
        try {
            new VcnGatewayConnectionConfig.Builder()
                    .setMaxMtu(VcnGatewayConnectionConfig.MIN_MTU_V6 - 1);
            newBuilder().setMaxMtu(VcnGatewayConnectionConfig.MIN_MTU_V6 - 1);
            fail("Expected exception due to invalid mtu");
        } catch (IllegalArgumentException e) {
        }
@@ -144,6 +157,9 @@ public class VcnGatewayConnectionConfigTest {
        Arrays.sort(underlyingCaps);
        assertArrayEquals(UNDERLYING_CAPS, underlyingCaps);

        assertEquals(CONTROL_PLANE_CONFIG, config.getControlPlaneConfig());
        assertFalse(CONTROL_PLANE_CONFIG == config.getControlPlaneConfig());

        assertArrayEquals(RETRY_INTERVALS_MS, config.getRetryIntervalsMs());
        assertEquals(MAX_MTU, config.getMaxMtu());
    }