Merge "Support parsing VcnGatewayConnectionConfig without UnderlyingNetworkPriorities" am: 1a0f225c83 am: b3a9bce506

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1915377

Change-Id: I5db17a735ba43fe3e75eb244dc9c78ec42b91a19
This commit is contained in:
Treehugger Robot
2021-12-09 02:31:36 +00:00
committed by Automerger Merge Worker
2 changed files with 38 additions and 9 deletions

View File

@@ -198,7 +198,10 @@ public final class VcnGatewayConnectionConfig {
private static final String EXPOSED_CAPABILITIES_KEY = "mExposedCapabilities"; private static final String EXPOSED_CAPABILITIES_KEY = "mExposedCapabilities";
@NonNull private final SortedSet<Integer> mExposedCapabilities; @NonNull private final SortedSet<Integer> mExposedCapabilities;
private static final String UNDERLYING_NETWORK_PRIORITIES_KEY = "mUnderlyingNetworkPriorities"; /** @hide */
@VisibleForTesting(visibility = Visibility.PRIVATE)
public static final String UNDERLYING_NETWORK_PRIORITIES_KEY = "mUnderlyingNetworkPriorities";
@NonNull private final LinkedHashSet<VcnUnderlyingNetworkPriority> mUnderlyingNetworkPriorities; @NonNull private final LinkedHashSet<VcnUnderlyingNetworkPriority> mUnderlyingNetworkPriorities;
private static final String MAX_MTU_KEY = "mMaxMtu"; private static final String MAX_MTU_KEY = "mMaxMtu";
@@ -229,6 +232,8 @@ public final class VcnGatewayConnectionConfig {
validate(); validate();
} }
// Null check MUST be done for all new fields added to VcnGatewayConnectionConfig, to avoid
// crashes when parsing PersistableBundle built on old platforms.
/** @hide */ /** @hide */
@VisibleForTesting(visibility = Visibility.PRIVATE) @VisibleForTesting(visibility = Visibility.PRIVATE)
public VcnGatewayConnectionConfig(@NonNull PersistableBundle in) { public VcnGatewayConnectionConfig(@NonNull PersistableBundle in) {
@@ -239,19 +244,30 @@ public final class VcnGatewayConnectionConfig {
final PersistableBundle exposedCapsBundle = final PersistableBundle exposedCapsBundle =
in.getPersistableBundle(EXPOSED_CAPABILITIES_KEY); in.getPersistableBundle(EXPOSED_CAPABILITIES_KEY);
final PersistableBundle networkPrioritiesBundle =
in.getPersistableBundle(UNDERLYING_NETWORK_PRIORITIES_KEY);
mGatewayConnectionName = in.getString(GATEWAY_CONNECTION_NAME_KEY); mGatewayConnectionName = in.getString(GATEWAY_CONNECTION_NAME_KEY);
mTunnelConnectionParams = mTunnelConnectionParams =
TunnelConnectionParamsUtils.fromPersistableBundle(tunnelConnectionParamsBundle); TunnelConnectionParamsUtils.fromPersistableBundle(tunnelConnectionParamsBundle);
mExposedCapabilities = new TreeSet<>(PersistableBundleUtils.toList( mExposedCapabilities = new TreeSet<>(PersistableBundleUtils.toList(
exposedCapsBundle, PersistableBundleUtils.INTEGER_DESERIALIZER)); exposedCapsBundle, PersistableBundleUtils.INTEGER_DESERIALIZER));
mUnderlyingNetworkPriorities =
new LinkedHashSet<>( final PersistableBundle networkPrioritiesBundle =
PersistableBundleUtils.toList( in.getPersistableBundle(UNDERLYING_NETWORK_PRIORITIES_KEY);
networkPrioritiesBundle,
VcnUnderlyingNetworkPriority::fromPersistableBundle)); if (networkPrioritiesBundle == null) {
// UNDERLYING_NETWORK_PRIORITIES_KEY was added in Android T. Thus
// VcnGatewayConnectionConfig created on old platforms will not have this data and will
// be assigned with the default value
mUnderlyingNetworkPriorities =
new LinkedHashSet<>(DEFAULT_UNDERLYING_NETWORK_PRIORITIES);
} else {
mUnderlyingNetworkPriorities =
new LinkedHashSet<>(
PersistableBundleUtils.toList(
networkPrioritiesBundle,
VcnUnderlyingNetworkPriority::fromPersistableBundle));
}
mRetryIntervalsMs = in.getLongArray(RETRY_INTERVAL_MS_KEY); mRetryIntervalsMs = in.getLongArray(RETRY_INTERVAL_MS_KEY);
mMaxMtu = in.getInt(MAX_MTU_KEY); mMaxMtu = in.getInt(MAX_MTU_KEY);

View File

@@ -17,6 +17,8 @@
package android.net.vcn; package android.net.vcn;
import static android.net.ipsec.ike.IkeSessionParams.IKE_OPTION_MOBIKE; import static android.net.ipsec.ike.IkeSessionParams.IKE_OPTION_MOBIKE;
import static android.net.vcn.VcnGatewayConnectionConfig.DEFAULT_UNDERLYING_NETWORK_PRIORITIES;
import static android.net.vcn.VcnGatewayConnectionConfig.UNDERLYING_NETWORK_PRIORITIES_KEY;
import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -30,6 +32,7 @@ import android.net.ipsec.ike.IkeSessionParams;
import android.net.ipsec.ike.IkeTunnelConnectionParams; import android.net.ipsec.ike.IkeTunnelConnectionParams;
import android.net.vcn.persistablebundleutils.IkeSessionParamsUtilsTest; import android.net.vcn.persistablebundleutils.IkeSessionParamsUtilsTest;
import android.net.vcn.persistablebundleutils.TunnelConnectionParamsUtilsTest; import android.net.vcn.persistablebundleutils.TunnelConnectionParamsUtilsTest;
import android.os.PersistableBundle;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4; import androidx.test.runner.AndroidJUnit4;
@@ -230,6 +233,16 @@ public class VcnGatewayConnectionConfigTest {
assertEquals(config, new VcnGatewayConnectionConfig(config.toPersistableBundle())); assertEquals(config, new VcnGatewayConnectionConfig(config.toPersistableBundle()));
} }
@Test
public void testParsePersistableBundleWithoutVcnUnderlyingNetworkPriorities() {
PersistableBundle configBundle = buildTestConfig().toPersistableBundle();
configBundle.putPersistableBundle(UNDERLYING_NETWORK_PRIORITIES_KEY, null);
final VcnGatewayConnectionConfig config = new VcnGatewayConnectionConfig(configBundle);
assertEquals(
DEFAULT_UNDERLYING_NETWORK_PRIORITIES, config.getVcnUnderlyingNetworkPriorities());
}
private static IkeTunnelConnectionParams buildTunnelConnectionParams(String ikePsk) { private static IkeTunnelConnectionParams buildTunnelConnectionParams(String ikePsk) {
final IkeSessionParams ikeParams = final IkeSessionParams ikeParams =
IkeSessionParamsUtilsTest.createBuilderMinimum() IkeSessionParamsUtilsTest.createBuilderMinimum()