blob: fbfa871f76c6cba2da25259c3b0572e07663b4b6 [file] [log] [blame]
Erik Kline54f2f372017-05-15 21:11:47 +09001/*
2 * Copyright (C) 2017 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
markchien503be612020-04-12 21:41:29 +080017package com.android.networkstack.tethering;
Erik Kline54f2f372017-05-15 21:11:47 +090018
Erik Kline0e61baa2017-03-09 11:44:11 +090019import static android.net.ConnectivityManager.TYPE_ETHERNET;
Erik Kline54f2f372017-05-15 21:11:47 +090020import static android.net.ConnectivityManager.TYPE_MOBILE;
21import static android.net.ConnectivityManager.TYPE_MOBILE_DUN;
22import static android.net.ConnectivityManager.TYPE_MOBILE_HIPRI;
23import static android.net.ConnectivityManager.TYPE_WIFI;
markchien2dfee022020-01-13 16:09:42 +080024import static android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY;
markchien0b595072019-01-08 23:52:21 +080025import static android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID;
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +090026
markchien2dfee022020-01-13 16:09:42 +080027import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
28import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
markchien0b595072019-01-08 23:52:21 +080029
Erik Kline54f2f372017-05-15 21:11:47 +090030import static org.junit.Assert.assertEquals;
31import static org.junit.Assert.assertFalse;
32import static org.junit.Assert.assertTrue;
markchien2dfee022020-01-13 16:09:42 +080033import static org.mockito.Matchers.anyBoolean;
34import static org.mockito.Matchers.eq;
Erik Kline54f2f372017-05-15 21:11:47 +090035import static org.mockito.Mockito.when;
36
37import android.content.Context;
Erik Kline54f2f372017-05-15 21:11:47 +090038import android.content.res.Resources;
Erik Kline6bd74532017-05-19 10:10:41 +090039import android.net.util.SharedLog;
markchien2dfee022020-01-13 16:09:42 +080040import android.provider.DeviceConfig;
Erik Kline54f2f372017-05-15 21:11:47 +090041import android.telephony.TelephonyManager;
42
Brett Chabot1ae2aa62019-03-04 14:14:56 -080043import androidx.test.filters.SmallTest;
44import androidx.test.runner.AndroidJUnit4;
45
Erik Kline54f2f372017-05-15 21:11:47 +090046import com.android.internal.util.test.BroadcastInterceptingContext;
47
markchien2dfee022020-01-13 16:09:42 +080048import org.junit.After;
Erik Kline54f2f372017-05-15 21:11:47 +090049import org.junit.Before;
50import org.junit.Test;
51import org.junit.runner.RunWith;
52import org.mockito.Mock;
markchien2dfee022020-01-13 16:09:42 +080053import org.mockito.MockitoSession;
54import org.mockito.quality.Strictness;
Erik Kline54f2f372017-05-15 21:11:47 +090055
markchiendb3a2362018-10-05 12:36:08 +080056import java.util.Arrays;
markchien0b595072019-01-08 23:52:21 +080057import java.util.Iterator;
Erik Kline54f2f372017-05-15 21:11:47 +090058
59@RunWith(AndroidJUnit4.class)
60@SmallTest
61public class TetheringConfigurationTest {
Erik Kline6bd74532017-05-19 10:10:41 +090062 private final SharedLog mLog = new SharedLog("TetheringConfigurationTest");
markchien0b595072019-01-08 23:52:21 +080063
64 private static final String[] PROVISIONING_APP_NAME = {"some", "app"};
Erik Kline54f2f372017-05-15 21:11:47 +090065 @Mock private Context mContext;
66 @Mock private TelephonyManager mTelephonyManager;
67 @Mock private Resources mResources;
markchien0b595072019-01-08 23:52:21 +080068 @Mock private Resources mResourcesForSubId;
Erik Kline54f2f372017-05-15 21:11:47 +090069 private Context mMockContext;
70 private boolean mHasTelephonyManager;
markchien2dfee022020-01-13 16:09:42 +080071 private boolean mEnableLegacyDhcpServer;
72 private MockitoSession mMockingSession;
Erik Kline54f2f372017-05-15 21:11:47 +090073
markchien0b595072019-01-08 23:52:21 +080074 private class MockTetheringConfiguration extends TetheringConfiguration {
75 MockTetheringConfiguration(Context ctx, SharedLog log, int id) {
76 super(ctx, log, id);
77 }
78
79 @Override
80 protected Resources getResourcesForSubIdWrapper(Context ctx, int subId) {
81 return mResourcesForSubId;
82 }
83 }
84
Erik Kline54f2f372017-05-15 21:11:47 +090085 private class MockContext extends BroadcastInterceptingContext {
86 MockContext(Context base) {
87 super(base);
88 }
89
90 @Override
markchiena6ba54d2019-09-03 15:58:06 +080091 public Resources getResources() {
92 return mResources;
93 }
Erik Kline54f2f372017-05-15 21:11:47 +090094
95 @Override
96 public Object getSystemService(String name) {
97 if (Context.TELEPHONY_SERVICE.equals(name)) {
98 return mHasTelephonyManager ? mTelephonyManager : null;
99 }
100 return super.getSystemService(name);
101 }
102 }
103
104 @Before
105 public void setUp() throws Exception {
markchien2dfee022020-01-13 16:09:42 +0800106 // TODO: use a dependencies class instead of mock statics.
107 mMockingSession = mockitoSession()
108 .initMocks(this)
109 .mockStatic(DeviceConfig.class)
110 .strictness(Strictness.WARN)
111 .startMocking();
112 doReturn(false).when(
113 () -> DeviceConfig.getBoolean(eq(NAMESPACE_CONNECTIVITY),
114 eq(TetheringConfiguration.TETHER_ENABLE_LEGACY_DHCP_SERVER), anyBoolean()));
115
markchienda4519a2020-01-14 12:46:53 +0800116 when(mResources.getStringArray(R.array.config_tether_dhcp_range)).thenReturn(
117 new String[0]);
junyulaiaea13ae2020-04-30 15:21:55 +0800118 when(mResources.getInteger(R.integer.config_tether_offload_poll_interval)).thenReturn(
119 TetheringConfiguration.DEFAULT_TETHER_OFFLOAD_POLL_INTERVAL_MS);
markchienda4519a2020-01-14 12:46:53 +0800120 when(mResources.getStringArray(R.array.config_tether_usb_regexs)).thenReturn(new String[0]);
121 when(mResources.getStringArray(R.array.config_tether_wifi_regexs))
Erik Kline54f2f372017-05-15 21:11:47 +0900122 .thenReturn(new String[]{ "test_wlan\\d" });
markchienda4519a2020-01-14 12:46:53 +0800123 when(mResources.getStringArray(R.array.config_tether_bluetooth_regexs)).thenReturn(
124 new String[0]);
125 when(mResources.getIntArray(R.array.config_tether_upstream_types)).thenReturn(new int[0]);
126 when(mResources.getStringArray(R.array.config_mobile_hotspot_provision_app))
markchien0b595072019-01-08 23:52:21 +0800127 .thenReturn(new String[0]);
markchienda4519a2020-01-14 12:46:53 +0800128 when(mResources.getBoolean(R.bool.config_tether_enable_legacy_dhcp_server)).thenReturn(
129 false);
Nucca Chen95e0bac2020-05-12 11:34:28 +0000130 initializeBpfOffloadConfiguration(true, null /* unset */);
131
markchiendb3a2362018-10-05 12:36:08 +0800132 mHasTelephonyManager = true;
Erik Kline54f2f372017-05-15 21:11:47 +0900133 mMockContext = new MockContext(mContext);
markchien2dfee022020-01-13 16:09:42 +0800134 mEnableLegacyDhcpServer = false;
135 }
136
137 @After
138 public void tearDown() throws Exception {
139 mMockingSession.finishMocking();
Erik Kline54f2f372017-05-15 21:11:47 +0900140 }
141
markchien9f246bd2019-04-03 10:43:09 +0800142 private TetheringConfiguration getTetheringConfiguration(int... legacyTetherUpstreamTypes) {
markchienda4519a2020-01-14 12:46:53 +0800143 when(mResources.getIntArray(R.array.config_tether_upstream_types)).thenReturn(
markchiendb3a2362018-10-05 12:36:08 +0800144 legacyTetherUpstreamTypes);
145 return new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
146 }
147
148 @Test
149 public void testNoTelephonyManagerMeansNoDun() {
150 mHasTelephonyManager = false;
151 final TetheringConfiguration cfg = getTetheringConfiguration(
152 new int[]{TYPE_MOBILE_DUN, TYPE_WIFI});
153 assertFalse(cfg.isDunRequired);
154 assertFalse(cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN));
155 // Just to prove we haven't clobbered Wi-Fi:
156 assertTrue(cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI));
157 }
158
Erik Kline54f2f372017-05-15 21:11:47 +0900159 @Test
160 public void testDunFromTelephonyManagerMeansDun() {
markchien986750b2019-12-06 15:24:53 +0800161 when(mTelephonyManager.isTetheringApnRequired()).thenReturn(true);
Erik Kline54f2f372017-05-15 21:11:47 +0900162
markchien9f246bd2019-04-03 10:43:09 +0800163 final TetheringConfiguration cfgWifi = getTetheringConfiguration(TYPE_WIFI);
markchiendb3a2362018-10-05 12:36:08 +0800164 final TetheringConfiguration cfgMobileWifiHipri = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800165 TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI);
markchiendb3a2362018-10-05 12:36:08 +0800166 final TetheringConfiguration cfgWifiDun = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800167 TYPE_WIFI, TYPE_MOBILE_DUN);
markchiendb3a2362018-10-05 12:36:08 +0800168 final TetheringConfiguration cfgMobileWifiHipriDun = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800169 TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI, TYPE_MOBILE_DUN);
markchiendb3a2362018-10-05 12:36:08 +0800170
171 for (TetheringConfiguration cfg : Arrays.asList(cfgWifi, cfgMobileWifiHipri,
172 cfgWifiDun, cfgMobileWifiHipriDun)) {
173 String msg = "config=" + cfg.toString();
174 assertTrue(msg, cfg.isDunRequired);
175 assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN));
176 assertFalse(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE));
177 assertFalse(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));
178 // Just to prove we haven't clobbered Wi-Fi:
179 assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI));
180 }
Erik Kline54f2f372017-05-15 21:11:47 +0900181 }
182
183 @Test
184 public void testDunNotRequiredFromTelephonyManagerMeansNoDun() {
markchien986750b2019-12-06 15:24:53 +0800185 when(mTelephonyManager.isTetheringApnRequired()).thenReturn(false);
Erik Kline54f2f372017-05-15 21:11:47 +0900186
markchien9f246bd2019-04-03 10:43:09 +0800187 final TetheringConfiguration cfgWifi = getTetheringConfiguration(TYPE_WIFI);
markchiendb3a2362018-10-05 12:36:08 +0800188 final TetheringConfiguration cfgMobileWifiHipri = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800189 TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI);
markchiendb3a2362018-10-05 12:36:08 +0800190 final TetheringConfiguration cfgWifiDun = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800191 TYPE_WIFI, TYPE_MOBILE_DUN);
markchiendb3a2362018-10-05 12:36:08 +0800192 final TetheringConfiguration cfgWifiMobile = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800193 TYPE_WIFI, TYPE_MOBILE);
markchiendb3a2362018-10-05 12:36:08 +0800194 final TetheringConfiguration cfgWifiHipri = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800195 TYPE_WIFI, TYPE_MOBILE_HIPRI);
markchiendb3a2362018-10-05 12:36:08 +0800196 final TetheringConfiguration cfgMobileWifiHipriDun = getTetheringConfiguration(
markchien9f246bd2019-04-03 10:43:09 +0800197 TYPE_MOBILE, TYPE_WIFI, TYPE_MOBILE_HIPRI, TYPE_MOBILE_DUN);
Erik Kline54f2f372017-05-15 21:11:47 +0900198
markchiendb3a2362018-10-05 12:36:08 +0800199 String msg;
markchien9f246bd2019-04-03 10:43:09 +0800200 // TYPE_MOBILE_DUN should be present in none of the combinations.
markchiendb3a2362018-10-05 12:36:08 +0800201 // TYPE_WIFI should not be affected.
202 for (TetheringConfiguration cfg : Arrays.asList(cfgWifi, cfgMobileWifiHipri, cfgWifiDun,
203 cfgWifiMobile, cfgWifiHipri, cfgMobileWifiHipriDun)) {
204 msg = "config=" + cfg.toString();
205 assertFalse(msg, cfg.isDunRequired);
206 assertFalse(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_DUN));
207 assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_WIFI));
208 }
Erik Kline54f2f372017-05-15 21:11:47 +0900209
markchiendb3a2362018-10-05 12:36:08 +0800210 for (TetheringConfiguration cfg : Arrays.asList(cfgWifi, cfgMobileWifiHipri, cfgWifiDun,
211 cfgMobileWifiHipriDun)) {
212 msg = "config=" + cfg.toString();
213 assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE));
214 assertTrue(msg, cfg.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));
215 }
216 msg = "config=" + cfgWifiMobile.toString();
217 assertTrue(msg, cfgWifiMobile.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE));
218 assertFalse(msg, cfgWifiMobile.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));
219 msg = "config=" + cfgWifiHipri.toString();
220 assertFalse(msg, cfgWifiHipri.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE));
221 assertTrue(msg, cfgWifiHipri.preferredUpstreamIfaceTypes.contains(TYPE_MOBILE_HIPRI));
222
Erik Kline54f2f372017-05-15 21:11:47 +0900223 }
Erik Kline0e61baa2017-03-09 11:44:11 +0900224
225 @Test
226 public void testNoDefinedUpstreamTypesAddsEthernet() {
markchienda4519a2020-01-14 12:46:53 +0800227 when(mResources.getIntArray(R.array.config_tether_upstream_types)).thenReturn(new int[]{});
markchien986750b2019-12-06 15:24:53 +0800228 when(mTelephonyManager.isTetheringApnRequired()).thenReturn(false);
Erik Kline0e61baa2017-03-09 11:44:11 +0900229
markchien0b595072019-01-08 23:52:21 +0800230 final TetheringConfiguration cfg = new TetheringConfiguration(
231 mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
Erik Kline0e61baa2017-03-09 11:44:11 +0900232 final Iterator<Integer> upstreamIterator = cfg.preferredUpstreamIfaceTypes.iterator();
233 assertTrue(upstreamIterator.hasNext());
234 assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());
235 // The following is because the code always adds some kind of mobile
markchiendb3a2362018-10-05 12:36:08 +0800236 // upstream, be it DUN or, in this case where DUN is NOT required,
237 // make sure there is at least one of MOBILE or HIPRI. With the empty
238 // list of the configuration in this test, it will always add both
239 // MOBILE and HIPRI, in that order.
Erik Kline0e61baa2017-03-09 11:44:11 +0900240 assertTrue(upstreamIterator.hasNext());
241 assertEquals(TYPE_MOBILE, upstreamIterator.next().intValue());
242 assertTrue(upstreamIterator.hasNext());
243 assertEquals(TYPE_MOBILE_HIPRI, upstreamIterator.next().intValue());
244 assertFalse(upstreamIterator.hasNext());
245 }
246
247 @Test
248 public void testDefinedUpstreamTypesSansEthernetAddsEthernet() {
markchienda4519a2020-01-14 12:46:53 +0800249 when(mResources.getIntArray(R.array.config_tether_upstream_types)).thenReturn(
markchiendb3a2362018-10-05 12:36:08 +0800250 new int[]{TYPE_WIFI, TYPE_MOBILE_HIPRI});
markchien986750b2019-12-06 15:24:53 +0800251 when(mTelephonyManager.isTetheringApnRequired()).thenReturn(false);
Erik Kline0e61baa2017-03-09 11:44:11 +0900252
markchien0b595072019-01-08 23:52:21 +0800253 final TetheringConfiguration cfg = new TetheringConfiguration(
254 mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
Erik Kline0e61baa2017-03-09 11:44:11 +0900255 final Iterator<Integer> upstreamIterator = cfg.preferredUpstreamIfaceTypes.iterator();
256 assertTrue(upstreamIterator.hasNext());
257 assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());
258 assertTrue(upstreamIterator.hasNext());
259 assertEquals(TYPE_WIFI, upstreamIterator.next().intValue());
260 assertTrue(upstreamIterator.hasNext());
261 assertEquals(TYPE_MOBILE_HIPRI, upstreamIterator.next().intValue());
262 assertFalse(upstreamIterator.hasNext());
263 }
264
265 @Test
266 public void testDefinedUpstreamTypesWithEthernetDoesNotAddEthernet() {
markchienda4519a2020-01-14 12:46:53 +0800267 when(mResources.getIntArray(R.array.config_tether_upstream_types))
Erik Kline0e61baa2017-03-09 11:44:11 +0900268 .thenReturn(new int[]{TYPE_WIFI, TYPE_ETHERNET, TYPE_MOBILE_HIPRI});
markchien986750b2019-12-06 15:24:53 +0800269 when(mTelephonyManager.isTetheringApnRequired()).thenReturn(false);
Erik Kline0e61baa2017-03-09 11:44:11 +0900270
markchien0b595072019-01-08 23:52:21 +0800271 final TetheringConfiguration cfg = new TetheringConfiguration(
272 mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
Erik Kline0e61baa2017-03-09 11:44:11 +0900273 final Iterator<Integer> upstreamIterator = cfg.preferredUpstreamIfaceTypes.iterator();
274 assertTrue(upstreamIterator.hasNext());
275 assertEquals(TYPE_WIFI, upstreamIterator.next().intValue());
276 assertTrue(upstreamIterator.hasNext());
277 assertEquals(TYPE_ETHERNET, upstreamIterator.next().intValue());
278 assertTrue(upstreamIterator.hasNext());
279 assertEquals(TYPE_MOBILE_HIPRI, upstreamIterator.next().intValue());
280 assertFalse(upstreamIterator.hasNext());
281 }
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +0900282
Nucca Chen95e0bac2020-05-12 11:34:28 +0000283 private void initializeBpfOffloadConfiguration(
284 final boolean fromRes, final String fromDevConfig) {
285 when(mResources.getBoolean(R.bool.config_tether_enable_bpf_offload)).thenReturn(fromRes);
286 doReturn(fromDevConfig).when(
287 () -> DeviceConfig.getProperty(eq(NAMESPACE_CONNECTIVITY),
288 eq(TetheringConfiguration.OVERRIDE_TETHER_ENABLE_BPF_OFFLOAD)));
289 }
290
291 @Test
292 public void testBpfOffloadEnabledByResource() {
293 initializeBpfOffloadConfiguration(true, null /* unset */);
294 final TetheringConfiguration enableByRes =
295 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
296 assertTrue(enableByRes.enableBpfOffload);
297 }
298
299 @Test
300 public void testBpfOffloadEnabledByDeviceConfigOverride() {
301 for (boolean res : new boolean[]{true, false}) {
302 initializeBpfOffloadConfiguration(res, "true");
303 final TetheringConfiguration enableByDevConOverride =
304 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
305 assertTrue(enableByDevConOverride.enableBpfOffload);
306 }
307 }
308
309 @Test
310 public void testBpfOffloadDisabledByResource() {
311 initializeBpfOffloadConfiguration(false, null /* unset */);
312 final TetheringConfiguration disableByRes =
313 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
314 assertFalse(disableByRes.enableBpfOffload);
315 }
316
317 @Test
318 public void testBpfOffloadDisabledByDeviceConfigOverride() {
319 for (boolean res : new boolean[]{true, false}) {
320 initializeBpfOffloadConfiguration(res, "false");
321 final TetheringConfiguration disableByDevConOverride =
322 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
323 assertFalse(disableByDevConOverride.enableBpfOffload);
324 }
325 }
326
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +0900327 @Test
328 public void testNewDhcpServerDisabled() {
markchienda4519a2020-01-14 12:46:53 +0800329 when(mResources.getBoolean(R.bool.config_tether_enable_legacy_dhcp_server)).thenReturn(
330 true);
markchien2dfee022020-01-13 16:09:42 +0800331 doReturn(false).when(
332 () -> DeviceConfig.getBoolean(eq(NAMESPACE_CONNECTIVITY),
333 eq(TetheringConfiguration.TETHER_ENABLE_LEGACY_DHCP_SERVER), anyBoolean()));
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +0900334
markchien2dfee022020-01-13 16:09:42 +0800335 final TetheringConfiguration enableByRes =
336 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
337 assertTrue(enableByRes.enableLegacyDhcpServer);
338
markchienda4519a2020-01-14 12:46:53 +0800339 when(mResources.getBoolean(R.bool.config_tether_enable_legacy_dhcp_server)).thenReturn(
340 false);
markchien2dfee022020-01-13 16:09:42 +0800341 doReturn(true).when(
342 () -> DeviceConfig.getBoolean(eq(NAMESPACE_CONNECTIVITY),
343 eq(TetheringConfiguration.TETHER_ENABLE_LEGACY_DHCP_SERVER), anyBoolean()));
344
345 final TetheringConfiguration enableByDevConfig =
346 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
347 assertTrue(enableByDevConfig.enableLegacyDhcpServer);
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +0900348 }
349
350 @Test
351 public void testNewDhcpServerEnabled() {
markchienda4519a2020-01-14 12:46:53 +0800352 when(mResources.getBoolean(R.bool.config_tether_enable_legacy_dhcp_server)).thenReturn(
353 false);
markchien2dfee022020-01-13 16:09:42 +0800354 doReturn(false).when(
355 () -> DeviceConfig.getBoolean(eq(NAMESPACE_CONNECTIVITY),
356 eq(TetheringConfiguration.TETHER_ENABLE_LEGACY_DHCP_SERVER), anyBoolean()));
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +0900357
markchien2dfee022020-01-13 16:09:42 +0800358 final TetheringConfiguration cfg =
359 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
360
Remi NGUYEN VANe3bb5c52018-06-12 15:57:04 +0900361 assertFalse(cfg.enableLegacyDhcpServer);
362 }
markchien0b595072019-01-08 23:52:21 +0800363
364 @Test
junyulaiaea13ae2020-04-30 15:21:55 +0800365 public void testOffloadIntervalByResource() {
366 final TetheringConfiguration intervalByDefault =
367 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
368 assertEquals(TetheringConfiguration.DEFAULT_TETHER_OFFLOAD_POLL_INTERVAL_MS,
369 intervalByDefault.getOffloadPollInterval());
370
371 final int[] testOverrides = {0, 3000, -1};
372 for (final int override : testOverrides) {
373 when(mResources.getInteger(R.integer.config_tether_offload_poll_interval)).thenReturn(
374 override);
375 final TetheringConfiguration overrideByRes =
376 new TetheringConfiguration(mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
377 assertEquals(override, overrideByRes.getOffloadPollInterval());
378 }
379 }
380
381 @Test
markchien0b595072019-01-08 23:52:21 +0800382 public void testGetResourcesBySubId() {
383 setUpResourceForSubId();
384 final TetheringConfiguration cfg = new TetheringConfiguration(
385 mMockContext, mLog, INVALID_SUBSCRIPTION_ID);
386 assertTrue(cfg.provisioningApp.length == 0);
387 final int anyValidSubId = 1;
388 final MockTetheringConfiguration mockCfg =
389 new MockTetheringConfiguration(mMockContext, mLog, anyValidSubId);
390 assertEquals(mockCfg.provisioningApp[0], PROVISIONING_APP_NAME[0]);
391 assertEquals(mockCfg.provisioningApp[1], PROVISIONING_APP_NAME[1]);
392 }
393
394 private void setUpResourceForSubId() {
395 when(mResourcesForSubId.getStringArray(
markchienda4519a2020-01-14 12:46:53 +0800396 R.array.config_tether_dhcp_range)).thenReturn(new String[0]);
markchien0b595072019-01-08 23:52:21 +0800397 when(mResourcesForSubId.getStringArray(
markchienda4519a2020-01-14 12:46:53 +0800398 R.array.config_tether_usb_regexs)).thenReturn(new String[0]);
markchien0b595072019-01-08 23:52:21 +0800399 when(mResourcesForSubId.getStringArray(
markchienda4519a2020-01-14 12:46:53 +0800400 R.array.config_tether_wifi_regexs)).thenReturn(new String[]{ "test_wlan\\d" });
markchien0b595072019-01-08 23:52:21 +0800401 when(mResourcesForSubId.getStringArray(
markchienda4519a2020-01-14 12:46:53 +0800402 R.array.config_tether_bluetooth_regexs)).thenReturn(new String[0]);
403 when(mResourcesForSubId.getIntArray(R.array.config_tether_upstream_types)).thenReturn(
404 new int[0]);
markchien0b595072019-01-08 23:52:21 +0800405 when(mResourcesForSubId.getStringArray(
markchienda4519a2020-01-14 12:46:53 +0800406 R.array.config_mobile_hotspot_provision_app)).thenReturn(PROVISIONING_APP_NAME);
markchien0b595072019-01-08 23:52:21 +0800407 }
408
Erik Kline54f2f372017-05-15 21:11:47 +0900409}