1#!/usr/bin/env python3.4
2#
3#   Copyright 2016 - The Android Open Source Project
4#
5#   Licensed under the Apache License, Version 2.0 (the "License");
6#   you may not use this file except in compliance with the License.
7#   You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11#   Unless required by applicable law or agreed to in writing, software
12#   distributed under the License is distributed on an "AS IS" BASIS,
13#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14#   See the License for the specific language governing permissions and
15#   limitations under the License.
16
17import pprint
18import random
19import time
20
21from acts import asserts
22from acts import signals
23from acts.test_decorators import test_tracker_info
24from acts.test_utils.net.net_test_utils import start_tcpdump
25from acts.test_utils.net.net_test_utils import stop_tcpdump
26from acts.test_utils.wifi import wifi_test_utils as wutils
27from acts.test_utils.wifi.WifiBaseTest import WifiBaseTest
28
29WifiEnums = wutils.WifiEnums
30
31# EAP Macros
32EAP = WifiEnums.Eap
33EapPhase2 = WifiEnums.EapPhase2
34# Enterprise Config Macros
35Ent = WifiEnums.Enterprise
36
37
38class WifiEnterpriseTest(WifiBaseTest):
39    def setup_class(self):
40        super().setup_class()
41
42        self.dut = self.android_devices[0]
43        wutils.wifi_test_device_init(self.dut)
44        # If running in a setup with attenuators, set attenuation on all
45        # channels to zero.
46        if getattr(self, "attenuators", []):
47            for a in self.attenuators:
48                a.set_atten(0)
49        required_userparam_names = (
50            "ca_cert", "client_cert", "client_key", "passpoint_ca_cert",
51            "passpoint_client_cert", "passpoint_client_key", "eap_identity",
52            "eap_password", "invalid_ca_cert", "invalid_client_cert",
53            "invalid_client_key", "fqdn", "provider_friendly_name", "realm",
54            "device_password", "ping_addr", "radius_conf_2g", "radius_conf_5g",
55            "radius_conf_pwd")
56        self.unpack_userparams(required_userparam_names,
57                               roaming_consortium_ids=None,
58                               plmn=None,
59                               ocsp=0)
60
61        if "AccessPoint" in self.user_params:
62            self.legacy_configure_ap_and_start(
63                ent_network=True,
64                radius_conf_2g=self.radius_conf_2g,
65                radius_conf_5g=self.radius_conf_5g,
66                ent_network_pwd=True,
67                radius_conf_pwd=self.radius_conf_pwd,)
68        self.ent_network_2g = self.ent_networks[0]["2g"]
69        self.ent_network_5g = self.ent_networks[0]["5g"]
70        self.ent_network_pwd = self.ent_networks_pwd[0]["2g"]
71
72        # Default configs for EAP networks.
73        self.config_peap0 = {
74            Ent.EAP: int(EAP.PEAP),
75            Ent.CA_CERT: self.ca_cert,
76            Ent.IDENTITY: self.eap_identity,
77            Ent.PASSWORD: self.eap_password,
78            Ent.PHASE2: int(EapPhase2.MSCHAPV2),
79            WifiEnums.SSID_KEY: self.ent_network_5g[WifiEnums.SSID_KEY],
80            Ent.OCSP: self.ocsp,
81        }
82        self.config_peap1 = dict(self.config_peap0)
83        self.config_peap1[WifiEnums.SSID_KEY] = \
84            self.ent_network_2g[WifiEnums.SSID_KEY]
85        self.config_tls = {
86            Ent.EAP: int(EAP.TLS),
87            Ent.CA_CERT: self.ca_cert,
88            WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
89            Ent.CLIENT_CERT: self.client_cert,
90            Ent.PRIVATE_KEY_ID: self.client_key,
91            Ent.IDENTITY: self.eap_identity,
92            Ent.OCSP: self.ocsp,
93        }
94        self.config_ttls = {
95            Ent.EAP: int(EAP.TTLS),
96            Ent.CA_CERT: self.ca_cert,
97            Ent.IDENTITY: self.eap_identity,
98            Ent.PASSWORD: self.eap_password,
99            Ent.PHASE2: int(EapPhase2.MSCHAPV2),
100            WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
101            Ent.OCSP: self.ocsp,
102        }
103        self.config_pwd = {
104            Ent.EAP: int(EAP.PWD),
105            Ent.IDENTITY: self.eap_identity,
106            Ent.PASSWORD: self.eap_password,
107            WifiEnums.SSID_KEY: self.ent_network_pwd[WifiEnums.SSID_KEY],
108        }
109        self.config_sim = {
110            Ent.EAP: int(EAP.SIM),
111            WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
112        }
113        self.config_aka = {
114            Ent.EAP: int(EAP.AKA),
115            WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
116        }
117        self.config_aka_prime = {
118            Ent.EAP: int(EAP.AKA_PRIME),
119            WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
120        }
121
122        # Base config for passpoint networks.
123        self.config_passpoint = {
124            Ent.FQDN: self.fqdn,
125            Ent.FRIENDLY_NAME: self.provider_friendly_name,
126            Ent.REALM: self.realm,
127            Ent.CA_CERT: self.passpoint_ca_cert
128        }
129        if self.plmn:
130            self.config_passpoint[Ent.PLMN] = self.plmn
131        if self.roaming_consortium_ids:
132            self.config_passpoint[
133                Ent.ROAMING_IDS] = self.roaming_consortium_ids
134
135        # Default configs for passpoint networks.
136        self.config_passpoint_tls = dict(self.config_tls)
137        self.config_passpoint_tls.update(self.config_passpoint)
138        self.config_passpoint_tls[Ent.CLIENT_CERT] = self.passpoint_client_cert
139        self.config_passpoint_tls[
140            Ent.PRIVATE_KEY_ID] = self.passpoint_client_key
141        del self.config_passpoint_tls[WifiEnums.SSID_KEY]
142        self.config_passpoint_ttls = dict(self.config_ttls)
143        self.config_passpoint_ttls.update(self.config_passpoint)
144        del self.config_passpoint_ttls[WifiEnums.SSID_KEY]
145        # Set screen lock password so ConfigStore is unlocked.
146        self.dut.droid.setDevicePassword(self.device_password)
147        self.tcpdump_pid = None
148
149    def teardown_class(self):
150        wutils.reset_wifi(self.dut)
151        self.dut.droid.disableDevicePassword(self.device_password)
152        self.dut.ed.clear_all_events()
153
154    def setup_test(self):
155        self.dut.droid.wifiStartTrackingStateChange()
156        self.dut.droid.wakeLockAcquireBright()
157        self.dut.droid.wakeUpNow()
158        wutils.reset_wifi(self.dut)
159        self.dut.ed.clear_all_events()
160        self.tcpdump_pid = start_tcpdump(self.dut, self.test_name)
161
162    def teardown_test(self):
163        stop_tcpdump(self.dut, self.tcpdump_pid, self.test_name)
164        self.dut.droid.wakeLockRelease()
165        self.dut.droid.goToSleepNow()
166        self.dut.droid.wifiStopTrackingStateChange()
167
168    def on_fail(self, test_name, begin_time):
169        self.dut.take_bug_report(test_name, begin_time)
170        self.dut.cat_adb_log(test_name, begin_time)
171
172    """Helper Functions"""
173
174    def eap_negative_connect_logic(self, config, ad):
175        """Tries to connect to an enterprise network with invalid credentials
176        and expect a failure.
177
178        Args:
179            config: A dict representing an invalid EAP credential.
180
181        Returns:
182            True if connection failed as expected, False otherwise.
183        """
184        with asserts.assert_raises(signals.TestFailure, extras=config):
185            verdict = wutils.wifi_connect(ad, config)
186        asserts.explicit_pass("Connection failed as expected.")
187
188    def gen_negative_configs(self, config, neg_params):
189        """Generic function used to generate negative configs.
190
191        For all the valid configurations, if a param in the neg_params also
192        exists in a config, a copy of the config is made with an invalid value
193        of the param.
194
195        Args:
196            config: A valid configuration.
197            neg_params: A dict that has all the invalid values.
198
199        Returns:
200            An invalid configurations generated based on the valid
201            configuration. Each invalid configuration has a different invalid
202            field.
203        """
204        negative_config = dict(config)
205        if negative_config in [self.config_sim, self.config_aka,
206                               self.config_aka_prime]:
207            negative_config[WifiEnums.SSID_KEY] = 'wrong_hostapd_ssid'
208        for k, v in neg_params.items():
209            # Skip negative test for TLS's identity field since it's not
210            # used for auth.
211            if config[Ent.EAP] == EAP.TLS and k == Ent.IDENTITY:
212                continue
213            if k in config:
214                negative_config[k] = v
215                negative_config["invalid_field"] = k
216        return negative_config
217
218    def gen_negative_eap_configs(self, config):
219        """Generates invalid configurations for different EAP authentication
220        types.
221
222        For all the valid EAP configurations, if a param that is part of the
223        authentication info exists in a config, a copy of the config is made
224        with an invalid value of the param.
225
226        Args:
227            A valid network configration
228
229        Returns:
230            An invalid EAP configuration.
231        """
232        neg_params = {
233            Ent.CLIENT_CERT: self.invalid_client_cert,
234            Ent.CA_CERT: self.invalid_ca_cert,
235            Ent.PRIVATE_KEY_ID: self.invalid_client_key,
236            Ent.IDENTITY: "fake_identity",
237            Ent.PASSWORD: "wrong_password"
238        }
239        return self.gen_negative_configs(config, neg_params)
240
241    def gen_negative_passpoint_configs(self, config):
242        """Generates invalid configurations for different EAP authentication
243        types with passpoint support.
244
245        Args:
246            A valid network configration
247
248        Returns:
249            An invalid EAP configuration with passpoint fields.
250        """
251        neg_params = {
252            Ent.CLIENT_CERT: self.invalid_client_cert,
253            Ent.CA_CERT: self.invalid_ca_cert,
254            Ent.PRIVATE_KEY_ID: self.invalid_client_key,
255            Ent.IDENTITY: "fake_identity",
256            Ent.PASSWORD: "wrong_password",
257            Ent.FQDN: "fake_fqdn",
258            Ent.REALM: "where_no_one_has_gone_before",
259            Ent.PLMN: "fake_plmn",
260            Ent.ROAMING_IDS: [1234567890, 9876543210]
261        }
262        return self.gen_negative_configs(config, neg_params)
263
264    def eap_connect_toggle_wifi(self,
265                                config,
266                                *args):
267        """Connects to an enterprise network, toggles wifi state and ensures
268        that the device reconnects.
269
270        This logic expect the enterprise network to have Internet access.
271
272        Args:
273            config: A dict representing a wifi enterprise configuration.
274            args: args to be passed to |wutils.eap_connect|.
275
276        Returns:
277            True if the connection is successful and Internet access works.
278        """
279        ad = args[0]
280        wutils.wifi_connect(ad, config)
281        wutils.toggle_wifi_and_wait_for_reconnection(ad, config, num_of_tries=5)
282
283    """ Tests """
284
285    # EAP connect tests
286    """ Test connecting to enterprise networks of different authentication
287        types.
288
289        The authentication types tested are:
290            EAP-TLS
291            EAP-PEAP with different phase2 types.
292            EAP-TTLS with different phase2 types.
293
294        Procedures:
295            For each enterprise wifi network
296            1. Connect to the network.
297            2. Send a GET request to a website and check response.
298
299        Expect:
300            Successful connection and Internet access through the enterprise
301            networks.
302    """
303    @test_tracker_info(uuid="4e720cac-ea17-4de7-a540-8dc7c49f9713")
304    def test_eap_connect_with_config_tls(self):
305        wutils.wifi_connect(self.dut, self.config_tls)
306
307    @test_tracker_info(uuid="10e3a5e9-0018-4162-a9fa-b41500f13340")
308    def test_eap_connect_with_config_pwd(self):
309        wutils.wifi_connect(self.dut, self.config_pwd)
310
311    @test_tracker_info(uuid="b4513f78-a1c4-427f-bfc7-2a6b3da714b5")
312    def test_eap_connect_with_config_sim(self):
313        wutils.wifi_connect(self.dut, self.config_sim)
314
315    @test_tracker_info(uuid="7d390e30-cb67-4b55-bf00-567adad2d9b0")
316    def test_eap_connect_with_config_aka(self):
317        wutils.wifi_connect(self.dut, self.config_aka)
318
319    @test_tracker_info(uuid="742f921b-27c3-4b68-a3ca-88e64fe79c1d")
320    def test_eap_connect_with_config_aka_prime(self):
321        wutils.wifi_connect(self.dut, self.config_aka_prime)
322
323    @test_tracker_info(uuid="d34e30f3-6ef6-459f-b47a-e78ed90ce4c6")
324    def test_eap_connect_with_config_ttls_none(self):
325        config = dict(self.config_ttls)
326        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value
327        wutils.wifi_connect(self.dut, config)
328
329    @test_tracker_info(uuid="0dca3a15-472e-427c-8e06-4e38088ee973")
330    def test_eap_connect_with_config_ttls_pap(self):
331        config = dict(self.config_ttls)
332        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
333        wutils.wifi_connect(self.dut, config)
334
335    @test_tracker_info(uuid="47c4b459-2cb1-4fc7-b4e7-82534e8e090e")
336    def test_eap_connect_with_config_ttls_mschap(self):
337        config = dict(self.config_ttls)
338        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value
339        wutils.wifi_connect(self.dut, config)
340
341    @test_tracker_info(uuid="fdb286c7-8069-481d-baf0-c5dd7a31ff03")
342    def test_eap_connect_with_config_ttls_mschapv2(self):
343        config = dict(self.config_ttls)
344        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
345        wutils.wifi_connect(self.dut, config)
346
347    @test_tracker_info(uuid="d9315962-7987-4ee7-905d-6972c78ce8a1")
348    def test_eap_connect_with_config_ttls_gtc(self):
349        config = dict(self.config_ttls)
350        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
351        wutils.wifi_connect(self.dut, config)
352
353    @test_tracker_info(uuid="90a67bd3-30da-4daf-8ab0-d964d7ad19be")
354    def test_eap_connect_with_config_peap0_mschapv2(self):
355        config = dict(self.config_peap0)
356        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
357        wutils.wifi_connect(self.dut, config)
358
359    @test_tracker_info(uuid="3c451ba4-0c83-4eef-bc95-db4c21893008")
360    def test_eap_connect_with_config_peap0_gtc(self):
361        config = dict(self.config_peap0)
362        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
363        wutils.wifi_connect(self.dut, config)
364
365    @test_tracker_info(uuid="6b45157d-0325-417a-af18-11af5d240d79")
366    def test_eap_connect_with_config_peap1_mschapv2(self):
367        config = dict(self.config_peap1)
368        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
369        wutils.wifi_connect(self.dut, config)
370
371    @test_tracker_info(uuid="1663decc-71ae-4f95-a027-8a6dbf9c337f")
372    def test_eap_connect_with_config_peap1_gtc(self):
373        config = dict(self.config_peap1)
374        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
375        wutils.wifi_connect(self.dut, config)
376
377    # EAP connect negative tests
378    """ Test connecting to enterprise networks.
379
380        Procedures:
381            For each enterprise wifi network
382            1. Connect to the network with invalid credentials.
383
384        Expect:
385            Fail to establish connection.
386    """
387    @test_tracker_info(uuid="b2a91f1f-ccd7-4bd1-ab81-19aab3d8ee38")
388    def test_eap_connect_negative_with_config_tls(self):
389        config = self.gen_negative_eap_configs(self.config_tls)
390        self.eap_negative_connect_logic(config, self.dut)
391
392    @test_tracker_info(uuid="6466abde-1d16-4168-9dd8-1e7a0a19889b")
393    def test_eap_connect_negative_with_config_pwd(self):
394        config = self.gen_negative_eap_configs(self.config_pwd)
395        self.eap_negative_connect_logic(config, self.dut)
396
397    @test_tracker_info(uuid="d7742a2a-85b0-409a-99d8-47711ddc5612")
398    def test_eap_connect_negative_with_config_sim(self):
399        config = self.gen_negative_eap_configs(self.config_sim)
400        self.eap_negative_connect_logic(config, self.dut)
401
402    @test_tracker_info(uuid="0ec0de93-cab3-4f41-960b-c0af64ff48c4")
403    def test_eap_connect_negative_with_config_aka(self):
404        config = self.gen_negative_eap_configs(self.config_aka)
405        self.eap_negative_connect_logic(config, self.dut)
406
407    @test_tracker_info(uuid="bb640ea4-32a6-48ea-87c9-f7128fffbbf6")
408    def test_eap_connect_negative_with_config_aka_prime(self):
409        config = self.gen_negative_eap_configs(self.config_aka_prime)
410        self.eap_negative_connect_logic(config, self.dut)
411
412    @test_tracker_info(uuid="86336ada-0ced-45a4-8a22-c4aa23c81111")
413    def test_eap_connect_negative_with_config_ttls_none(self):
414        config = dict(self.config_ttls)
415        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value
416        config = self.gen_negative_eap_configs(config)
417        self.eap_negative_connect_logic(config, self.dut)
418
419    @test_tracker_info(uuid="71e0498d-9973-4958-94bd-79051c328920")
420    def test_eap_connect_negative_with_config_ttls_pap(self):
421        config = dict(self.config_ttls)
422        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
423        config = self.gen_negative_eap_configs(config)
424        self.eap_negative_connect_logic(config, self.dut)
425
426    @test_tracker_info(uuid="c04142a8-b204-4d2d-98dc-150b16c8397e")
427    def test_eap_connect_negative_with_config_ttls_mschap(self):
428        config = dict(self.config_ttls)
429        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value
430        config = self.gen_negative_eap_configs(config)
431        self.eap_negative_connect_logic(config, self.dut)
432
433    @test_tracker_info(uuid="625e7aa5-e3e6-4bbe-98c0-5aad8ca1555b")
434    def test_eap_connect_negative_with_config_ttls_mschapv2(self):
435        config = dict(self.config_ttls)
436        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
437        config = self.gen_negative_eap_configs(config)
438        self.eap_negative_connect_logic(config, self.dut)
439
440    @test_tracker_info(uuid="24ea0d80-0a3f-41c2-8e05-d6387e589058")
441    def test_eap_connect_negative_with_config_ttls_gtc(self):
442        config = dict(self.config_ttls)
443        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
444        config = self.gen_negative_eap_configs(config)
445        self.eap_negative_connect_logic(config, self.dut)
446
447    @test_tracker_info(uuid="b7c1f0f8-6338-4501-8e1d-c9b136aaba88")
448    def test_eap_connect_negative_with_config_peap0_mschapv2(self):
449        config = dict(self.config_peap0)
450        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
451        config = self.gen_negative_eap_configs(config)
452        self.eap_negative_connect_logic(config, self.dut)
453
454    @test_tracker_info(uuid="9cf83dcb-38ad-4f75-9ea9-98de1cfaf7f3")
455    def test_eap_connect_negative_with_config_peap0_gtc(self):
456        config = dict(self.config_peap0)
457        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
458        config = self.gen_negative_eap_configs(config)
459        self.eap_negative_connect_logic(config, self.dut)
460
461    @test_tracker_info(uuid="89bb2b6b-d073-402a-bdc1-68ac5f8752a3")
462    def test_eap_connect_negative_with_config_peap1_mschapv2(self):
463        config = dict(self.config_peap1)
464        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
465        config = self.gen_negative_eap_configs(config)
466        self.eap_negative_connect_logic(config, self.dut)
467
468    @test_tracker_info(uuid="2252a864-9ff7-43b5-82d9-afe57d1f5e5f")
469    def test_eap_connect_negative_with_config_peap1_gtc(self):
470        config = dict(self.config_peap1)
471        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
472        config = self.gen_negative_eap_configs(config)
473        self.eap_negative_connect_logic(config, self.dut)
474
475    # EAP connect config store tests
476    """ Test connecting to enterprise networks of different authentication
477        types after wifi toggle.
478
479        The authentication types tested are:
480            EAP-TLS
481            EAP-PEAP with different phase2 types.
482            EAP-TTLS with different phase2 types.
483
484        Procedures:
485            For each enterprise wifi network
486            1. Connect to the network.
487            2. Send a GET request to a website and check response.
488            3. Toggle wifi.
489            4. Ensure that the device reconnects to the same network.
490
491        Expect:
492            Successful connection and Internet access through the enterprise
493            networks.
494    """
495    @test_tracker_info(uuid="2a933b7f-27d7-4201-a34f-25b9d8072a8c")
496    def test_eap_connect_config_store_with_config_tls(self):
497        self.eap_connect_toggle_wifi(self.config_tls, self.dut)
498
499    @test_tracker_info(uuid="08dc071b-9fea-408a-a3f6-d3493869f6d4")
500    def test_eap_connect_config_store_with_config_pwd(self):
501        self.eap_connect_toggle_wifi(self.config_pwd, self.dut)
502
503    @test_tracker_info(uuid="230cb03e-58bc-41cb-b9b3-7215c2ab2325")
504    def test_eap_connect_config_store_with_config_sim(self):
505        self.eap_connect_toggle_wifi(self.config_sim, self.dut)
506
507    @test_tracker_info(uuid="dfc3e59c-2309-4598-8c23-bb3fe95ef89f")
508    def test_eap_connect_config_store_with_config_aka(self):
509        self.eap_connect_toggle_wifi(self.config_aka, self.dut)
510
511    @test_tracker_info(uuid="6050a1d1-4f3a-476d-bf93-638abd066790")
512    def test_eap_connect_config_store_with_config_aka_prime(self):
513        self.eap_connect_toggle_wifi(self.config_aka_prime, self.dut)
514
515    @test_tracker_info(uuid="03108057-cc44-4a80-8331-77c93694099c")
516    def test_eap_connect_config_store_with_config_ttls_none(self):
517        config = dict(self.config_ttls)
518        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value
519        self.eap_connect_toggle_wifi(config, self.dut)
520
521    @test_tracker_info(uuid="53dd8195-e272-4589-a261-b8fa3607ad8d")
522    def test_eap_connect_config_store_with_config_ttls_pap(self):
523        config = dict(self.config_ttls)
524        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
525        self.eap_connect_toggle_wifi(config, self.dut)
526
527    @test_tracker_info(uuid="640f697b-9c62-4b19-bd76-53b236a152e0")
528    def test_eap_connect_config_store_with_config_ttls_mschap(self):
529        config = dict(self.config_ttls)
530        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value
531        self.eap_connect_toggle_wifi(config, self.dut)
532
533    @test_tracker_info(uuid="f0243684-fae0-46f3-afbd-bf525fc712e2")
534    def test_eap_connect_config_store_with_config_ttls_mschapv2(self):
535        config = dict(self.config_ttls)
536        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
537        self.eap_connect_toggle_wifi(config, self.dut)
538
539    @test_tracker_info(uuid="49ec7202-3b00-49c3-970a-201360888c74")
540    def test_eap_connect_config_store_with_config_ttls_gtc(self):
541        config = dict(self.config_ttls)
542        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
543        self.eap_connect_toggle_wifi(config, self.dut)
544
545    @test_tracker_info(uuid="1c6abfa3-f344-4e28-b891-5481ab79efcf")
546    def test_eap_connect_config_store_with_config_peap0_mschapv2(self):
547        config = dict(self.config_peap0)
548        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
549        self.eap_connect_toggle_wifi(config, self.dut)
550
551    @test_tracker_info(uuid="2815bc76-49fa-43a5-a4b6-84788f9809d5")
552    def test_eap_connect_config_store_with_config_peap0_gtc(self):
553        config = dict(self.config_peap0)
554        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
555        self.eap_connect_toggle_wifi(config, self.dut)
556
557    @test_tracker_info(uuid="e93f7472-6895-4e36-bff2-9b2dcfd07ad0")
558    def test_eap_connect_config_store_with_config_peap1_mschapv2(self):
559        config = dict(self.config_peap1)
560        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
561        self.eap_connect_toggle_wifi(config, self.dut)
562
563    @test_tracker_info(uuid="6da72fa0-b858-4475-9559-46fe052d0d64")
564    def test_eap_connect_config_store_with_config_peap1_gtc(self):
565        config = dict(self.config_peap1)
566        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
567        self.eap_connect_toggle_wifi(config, self.dut)
568
569    # Removing 'test_' for all passpoint based testcases as we want to disable
570    # them. Adding the valid test cases to self.tests make them run in serial
571    # (TODO): gmoturu - Update the passpoint tests to test the valid scenario
572    # Passpoint connect tests
573    """ Test connecting to enterprise networks of different authentication
574        types with passpoint support.
575
576        The authentication types tested are:
577            EAP-TLS
578            EAP-TTLS with MSCHAPV2 as phase2.
579
580        Procedures:
581            For each enterprise wifi network
582            1. Connect to the network.
583            2. Send a GET request to a website and check response.
584
585        Expect:
586            Successful connection and Internet access through the enterprise
587            networks with passpoint support.
588    """
589    @test_tracker_info(uuid="0b942524-bde9-4fc6-ac6a-fef1c247cb8e")
590    def passpoint_connect_with_config_passpoint_tls(self):
591        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
592                        "Passpoint is not supported on %s" % self.dut.model)
593        wutils.wifi_connect(self.dut, self.config_passpoint_tls)
594
595    @test_tracker_info(uuid="33a014aa-99e7-4612-b732-54fabf1bf922")
596    def passpoint_connect_with_config_passpoint_ttls_none(self):
597        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
598                        "Passpoint is not supported on %s" % self.dut.model)
599        config = dict(self.config_passpoint_ttls)
600        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value
601        wutils.wifi_connect(self.dut, config)
602
603    @test_tracker_info(uuid="1aba8bf9-2b09-4956-b418-c3f4dadab330")
604    def passpoint_connect_with_config_passpoint_ttls_pap(self):
605        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
606                        "Passpoint is not supported on %s" % self.dut.model)
607        config = dict(self.config_passpoint_ttls)
608        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
609        wutils.wifi_connect(self.dut, config)
610
611    @test_tracker_info(uuid="cd978fc9-a393-4b1e-bba3-1efc52224500")
612    def passpoint_connect_with_config_passpoint_ttls_mschap(self):
613        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
614                        "Passpoint is not supported on %s" % self.dut.model)
615        config = dict(self.config_passpoint_ttls)
616        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value
617        wutils.wifi_connect(self.dut, config)
618
619    @test_tracker_info(uuid="bc311ee7-ba64-4c76-a629-b916701bf6a5")
620    def passpoint_connect_with_config_passpoint_ttls_mschapv2(self):
621        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
622                        "Passpoint is not supported on %s" % self.dut.model)
623        config = dict(self.config_passpoint_ttls)
624        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
625        wutils.wifi_connect(self.dut, config)
626
627    @test_tracker_info(uuid="357e5162-5081-4149-bedd-ef2c0f88b97e")
628    def passpoint_connect_with_config_passpoint_ttls_gtc(self):
629        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
630                        "Passpoint is not supported on %s" % self.dut.model)
631        config = dict(self.config_passpoint_ttls)
632        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
633        wutils.wifi_connect(self.dut, config)
634
635    # Passpoint connect negative tests
636    """ Test connecting to enterprise networks.
637
638        Procedures:
639            For each enterprise wifi network
640            1. Connect to the network with invalid credentials.
641
642        Expect:
643            Fail to establish connection.
644    """
645    @test_tracker_info(uuid="7b6b44a0-ff70-49b4-94ca-a98bedc18f92")
646    def passpoint_connect_negative_with_config_passpoint_tls(self):
647        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
648                        "Passpoint is not supported on %s" % self.dut.model)
649        config = self.gen_negative_passpoint_configs(self.config_passpoint_tls)
650        self.eap_negative_connect_logic(config, self.dut)
651
652    @test_tracker_info(uuid="3dbde40a-e88c-4166-b932-163663a10a41")
653    def passpoint_connect_negative_with_config_passpoint_ttls_none(self):
654        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
655                        "Passpoint is not supported on %s" % self.dut.model)
656        config = dict(self.config_passpoint_ttls)
657        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value
658        config = self.gen_negative_passpoint_configs(config)
659        self.eap_negative_connect_logic(config, self.dut)
660
661    @test_tracker_info(uuid="8ee22ad6-d561-4ca2-a808-9f372fce56b4")
662    def passpoint_connect_negative_with_config_passpoint_ttls_pap(self):
663        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
664                        "Passpoint is not supported on %s" % self.dut.model)
665        config = dict(self.config_passpoint_ttls)
666        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
667        config = self.gen_negative_passpoint_configs(config)
668        self.eap_negative_connect_logic(config, self.dut)
669
670    @test_tracker_info(uuid="db5cefe7-9cb8-47a6-8635-006c80b97012")
671    def passpoint_connect_negative_with_config_passpoint_ttls_mschap(self):
672        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
673                        "Passpoint is not supported on %s" % self.dut.model)
674        config = dict(self.config_passpoint_ttls)
675        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value
676        config = self.gen_negative_passpoint_configs(config)
677        self.eap_negative_connect_logic(config, self.dut)
678
679    @test_tracker_info(uuid="8f49496e-80df-48ce-9c51-42f0c6b81aff")
680    def passpoint_connect_negative_with_config_passpoint_ttls_mschapv2(self):
681        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
682                        "Passpoint is not supported on %s" % self.dut.model)
683        config = dict(self.config_passpoint_ttls)
684        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
685        config = self.gen_negative_passpoint_configs(config)
686        self.eap_negative_connect_logic(config, self.dut)
687
688    @test_tracker_info(uuid="6561508f-598e-408d-96b6-15b631664be6")
689    def passpoint_connect_negative_with_config_passpoint_ttls_gtc(self):
690        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
691                        "Passpoint is not supported on %s" % self.dut.model)
692        config = dict(self.config_passpoint_ttls)
693        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
694        config = self.gen_negative_passpoint_configs(config)
695        self.eap_negative_connect_logic(config, self.dut)
696
697    # Passpoint connect config store tests
698    """ Test connecting to enterprise networks of different authentication
699        types with passpoint support after wifi toggle.
700
701        The authentication types tested are:
702            EAP-TLS
703            EAP-TTLS with MSCHAPV2 as phase2.
704
705        Procedures:
706            For each enterprise wifi network
707            1. Connect to the network.
708            2. Send a GET request to a website and check response.
709            3. Toggle wifi.
710            4. Ensure that the device reconnects to the same network.
711
712        Expect:
713            Successful connection and Internet access through the enterprise
714            networks with passpoint support.
715    """
716    @test_tracker_info(uuid="5d5e6bb0-faea-4a6e-a6bc-c87de997a4fd")
717    def passpoint_connect_config_store_with_config_passpoint_tls(self):
718        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
719                        "Passpoint is not supported on %s" % self.dut.model)
720        self.eap_connect_toggle_wifi(self.config_passpoint_tls, self.dut)
721
722    @test_tracker_info(uuid="0c80262d-23c1-439f-ad64-7b8ada5d1962")
723    def passpoint_connect_config_store_with_config_passpoint_ttls_none(self):
724        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
725                        "Passpoint is not supported on %s" % self.dut.model)
726        config = dict(self.config_passpoint_ttls)
727        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.NONE.value
728        self.eap_connect_toggle_wifi(config, self.dut)
729
730    @test_tracker_info(uuid="786e424c-b5a6-4fe9-a951-b3de16ebb6db")
731    def passpoint_connect_config_store_with_config_passpoint_ttls_pap(self):
732        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
733                        "Passpoint is not supported on %s" % self.dut.model)
734        config = dict(self.config_passpoint_ttls)
735        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
736        self.eap_connect_toggle_wifi(config, self.dut)
737
738    @test_tracker_info(uuid="22fd61bf-722a-4016-a778-fc33e94ed211")
739    def passpoint_connect_config_store_with_config_passpoint_ttls_mschap(self):
740        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
741                        "Passpoint is not supported on %s" % self.dut.model)
742        config = dict(self.config_passpoint_ttls)
743        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAP.value
744        self.eap_connect_toggle_wifi(config, self.dut)
745
746    @test_tracker_info(uuid="2abd348c-9c66-456b-88ad-55f971717620")
747    def passpoint_connect_config_store_with_config_passpoint_ttls_mschapv2(self):
748        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
749                        "Passpoint is not supported on %s" % self.dut.model)
750        config = dict(self.config_passpoint_ttls)
751        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.MSCHAPV2.value
752        self.eap_connect_toggle_wifi(config, self.dut)
753
754    @test_tracker_info(uuid="043e8cdd-db95-4f03-b308-3c8cecf874b1")
755    def passpoint_connect_config_store_with_config_passpoint_ttls_gtc(self):
756        asserts.skip_if(not self.dut.droid.wifiIsPasspointSupported(),
757                        "Passpoint is not supported on %s" % self.dut.model)
758        config = dict(self.config_passpoint_ttls)
759        config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.GTC.value
760        self.eap_connect_toggle_wifi(config, self.dut)
761