• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.net.vcn.cts;
18 
19 import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN;
20 import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
21 import static android.net.ipsec.ike.IkeSessionParams.IKE_OPTION_MOBIKE;
22 import static android.net.vcn.VcnGatewayConnectionConfig.VCN_GATEWAY_OPTION_ENABLE_DATA_STALL_RECOVERY_WITH_MOBILITY;
23 
24 import static org.junit.Assert.assertArrayEquals;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertFalse;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
29 
30 import android.net.ipsec.ike.IkeSessionParams;
31 import android.net.ipsec.ike.IkeTunnelConnectionParams;
32 import android.net.vcn.VcnGatewayConnectionConfig;
33 import android.net.vcn.VcnUnderlyingNetworkTemplate;
34 
35 import androidx.test.ext.junit.runners.AndroidJUnit4;
36 
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 
40 import java.util.ArrayList;
41 import java.util.Collections;
42 import java.util.List;
43 import java.util.Set;
44 import java.util.concurrent.TimeUnit;
45 
46 @RunWith(AndroidJUnit4.class)
47 public class VcnGatewayConnectionConfigTest extends VcnTestBase {
48     private static final String VCN_GATEWAY_CONNECTION_NAME = "test-vcn-gateway-connection";
49     private static final long[] RETRY_INTERNAL_MILLIS =
50             new long[] {
51                 TimeUnit.SECONDS.toMillis(1),
52                 TimeUnit.MINUTES.toMillis(1),
53                 TimeUnit.HOURS.toMillis(1)
54             };
55     private static final int MAX_MTU = 1360;
56 
57     private static final List<VcnUnderlyingNetworkTemplate> UNDERLYING_NETWORK_TEMPLATES;
58 
59     static {
60         List<VcnUnderlyingNetworkTemplate> nwTemplates = new ArrayList<>();
VcnCellUnderlyingNetworkTemplateTest.getTestNetworkTemplate()61         nwTemplates.add(VcnCellUnderlyingNetworkTemplateTest.getTestNetworkTemplate());
VcnWifiUnderlyingNetworkTemplateTest.getTestNetworkTemplate()62         nwTemplates.add(VcnWifiUnderlyingNetworkTemplateTest.getTestNetworkTemplate());
63         UNDERLYING_NETWORK_TEMPLATES = Collections.unmodifiableList(nwTemplates);
64     }
65 
66     private static final Set<Integer> GATEWAY_OPTIONS =
67             Collections.singleton(VCN_GATEWAY_OPTION_ENABLE_DATA_STALL_RECOVERY_WITH_MOBILITY);
68 
buildVcnGatewayConnectionConfigBase()69     public static VcnGatewayConnectionConfig.Builder buildVcnGatewayConnectionConfigBase() {
70         return new VcnGatewayConnectionConfig.Builder(
71                         VCN_GATEWAY_CONNECTION_NAME, buildTunnelConnectionParams())
72                 .addExposedCapability(NET_CAPABILITY_INTERNET)
73                 .setRetryIntervalsMillis(RETRY_INTERNAL_MILLIS)
74                 .setMaxMtu(MAX_MTU)
75                 .setVcnUnderlyingNetworkPriorities(UNDERLYING_NETWORK_TEMPLATES);
76     }
77 
78     // Package private for use in VcnConfigTest
buildVcnGatewayConnectionConfig()79     static VcnGatewayConnectionConfig buildVcnGatewayConnectionConfig() {
80         return buildVcnGatewayConnectionConfigBase().build();
81     }
82 
83     @Test
testBuildVcnGatewayConnectionConfig()84     public void testBuildVcnGatewayConnectionConfig() throws Exception {
85         final VcnGatewayConnectionConfig gatewayConnConfig = buildVcnGatewayConnectionConfig();
86 
87         assertEquals(VCN_GATEWAY_CONNECTION_NAME, gatewayConnConfig.getGatewayConnectionName());
88         assertEquals(buildTunnelConnectionParams(), gatewayConnConfig.getTunnelConnectionParams());
89         assertArrayEquals(
90                 new int[] {NET_CAPABILITY_INTERNET}, gatewayConnConfig.getExposedCapabilities());
91         assertEquals(
92                 UNDERLYING_NETWORK_TEMPLATES,
93                 gatewayConnConfig.getVcnUnderlyingNetworkPriorities());
94         assertArrayEquals(RETRY_INTERNAL_MILLIS, gatewayConnConfig.getRetryIntervalsMillis());
95         assertEquals(MAX_MTU, gatewayConnConfig.getMaxMtu());
96     }
97 
98     @Test
testBuilderAddRemove()99     public void testBuilderAddRemove() throws Exception {
100         final VcnGatewayConnectionConfig gatewayConnConfig =
101                 buildVcnGatewayConnectionConfigBase()
102                         .addExposedCapability(NET_CAPABILITY_DUN)
103                         .removeExposedCapability(NET_CAPABILITY_DUN)
104                         .build();
105 
106         assertArrayEquals(
107                 new int[] {NET_CAPABILITY_INTERNET}, gatewayConnConfig.getExposedCapabilities());
108     }
109 
110     @Test
testBuildWithoutMobikeEnabled()111     public void testBuildWithoutMobikeEnabled() {
112         final IkeSessionParams ikeParams =
113                 getIkeSessionParamsBase().removeIkeOption(IKE_OPTION_MOBIKE).build();
114         final IkeTunnelConnectionParams tunnelParams = buildTunnelConnectionParams(ikeParams);
115 
116         try {
117             new VcnGatewayConnectionConfig.Builder(VCN_GATEWAY_CONNECTION_NAME, tunnelParams);
118             fail("Expected exception if MOBIKE not configured");
119         } catch (IllegalArgumentException e) {
120         }
121     }
122 
123     @Test
testBuilderAddGatewayOptions()124     public void testBuilderAddGatewayOptions() throws Exception {
125         final VcnGatewayConnectionConfig.Builder builder = buildVcnGatewayConnectionConfigBase();
126 
127         for (int option : GATEWAY_OPTIONS) {
128             builder.addGatewayOption(option);
129         }
130 
131         final VcnGatewayConnectionConfig gatewayConnConfig = builder.build();
132         for (int option : GATEWAY_OPTIONS) {
133             assertTrue(gatewayConnConfig.hasGatewayOption(option));
134         }
135     }
136 
137     @Test
testBuilderAddRemoveGatewayOptions()138     public void testBuilderAddRemoveGatewayOptions() throws Exception {
139         final VcnGatewayConnectionConfig.Builder builder = buildVcnGatewayConnectionConfigBase();
140 
141         for (int option : GATEWAY_OPTIONS) {
142             builder.addGatewayOption(option);
143         }
144 
145         for (int option : GATEWAY_OPTIONS) {
146             builder.removeGatewayOption(option);
147         }
148 
149         final VcnGatewayConnectionConfig gatewayConnConfig = builder.build();
150         for (int option : GATEWAY_OPTIONS) {
151             assertFalse(gatewayConnConfig.hasGatewayOption(option));
152         }
153     }
154 
155     @Test
testBuilderRequiresValidOption()156     public void testBuilderRequiresValidOption() {
157         try {
158             buildVcnGatewayConnectionConfigBase().addGatewayOption(-1);
159             fail("Expected exception due to the invalid VCN gateway option");
160         } catch (IllegalArgumentException e) {
161         }
162     }
163 
164     @Test
testBuilderSetMinUdpPort4500NatTimeout()165     public void testBuilderSetMinUdpPort4500NatTimeout() {
166         final int natTimeoutSeconds = 600;
167         final VcnGatewayConnectionConfig gatewayConnConfig = buildVcnGatewayConnectionConfigBase()
168                 .setMinUdpPort4500NatTimeoutSeconds(600).build();
169         assertEquals(natTimeoutSeconds, gatewayConnConfig.getMinUdpPort4500NatTimeoutSeconds());
170     }
171 
172     @Test
testBuilderSetMinUdpPort4500NatTimeout_invalidValues()173     public void testBuilderSetMinUdpPort4500NatTimeout_invalidValues() {
174         try {
175             buildVcnGatewayConnectionConfigBase().setMinUdpPort4500NatTimeoutSeconds(119);
176             fail("Expected exception due to invalid timeout range");
177         } catch (IllegalArgumentException e) {
178         }
179     }
180 
181     @Test
testBuilderSetSafeModeEnabled()182     public void testBuilderSetSafeModeEnabled() {
183         final VcnGatewayConnectionConfig gatewayConnConfig =
184                 buildVcnGatewayConnectionConfigBase().setSafeModeEnabled(false).build();
185         assertFalse(gatewayConnConfig.isSafeModeEnabled());
186     }
187 
188     @Test
testGetSafeModeEnabledDefault()189     public void testGetSafeModeEnabledDefault() {
190         final VcnGatewayConnectionConfig gatewayConnConfig = buildVcnGatewayConnectionConfig();
191         assertTrue(gatewayConnConfig.isSafeModeEnabled());
192     }
193 }
194