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