blob: fd03e8ef1c4a734ece7b4faffff27d72538d5abe [file] [log] [blame]
Roshan Piusd1204442018-11-12 12:20:39 -08001#!/usr/bin/env python3.4
2#
3# Copyright 2018 - 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 itertools
18import pprint
19import queue
20import time
21
22import acts.base_test
23import acts.signals as signals
24import acts.test_utils.wifi.wifi_test_utils as wutils
25import acts.utils
26
27from acts import asserts
Roshan Pius3e3bd342019-01-09 13:55:17 -080028from acts.controllers.android_device import SL4A_APK_NAME
Roshan Piusd1204442018-11-12 12:20:39 -080029from acts.test_decorators import test_tracker_info
30from acts.test_utils.wifi.WifiBaseTest import WifiBaseTest
31from acts.test_utils.wifi import wifi_constants
32
33WifiEnums = wutils.WifiEnums
Girish Moturub1e7a5c2019-07-29 13:48:11 -070034# EAP Macros
35EAP = WifiEnums.Eap
36EapPhase2 = WifiEnums.EapPhase2
37# Enterprise Config Macros
38Ent = WifiEnums.Enterprise
Girish Moturua069a4a2019-10-23 13:21:42 -070039ATT = 2
Roshan Piusd1204442018-11-12 12:20:39 -080040
41# Default timeout used for reboot, toggle WiFi and Airplane mode,
42# for the system to settle down after the operation.
43DEFAULT_TIMEOUT = 10
Nate(Qiang) Jiang051b8142019-11-01 17:23:33 -070044PASSPOINT_TIMEOUT = 30
Roshan Piusd1204442018-11-12 12:20:39 -080045
Nate Jiang1ef58c32019-07-15 19:13:26 -070046
Roshan Piusd1204442018-11-12 12:20:39 -080047class WifiNetworkSuggestionTest(WifiBaseTest):
48 """Tests for WifiNetworkSuggestion API surface.
49
50 Test Bed Requirement:
51 * one Android device
52 * Several Wi-Fi networks visible to the device, including an open Wi-Fi
53 network.
54 """
55
Roshan Piusd1204442018-11-12 12:20:39 -080056 def setup_class(self):
Xianyuan Jia168103b2019-09-06 12:22:52 -070057 super().setup_class()
58
Roshan Piusd1204442018-11-12 12:20:39 -080059 self.dut = self.android_devices[0]
60 wutils.wifi_test_device_init(self.dut)
Nate Jiang68f3ffa2019-08-07 15:23:49 -070061 req_params = []
Roshan Piusd1204442018-11-12 12:20:39 -080062 opt_param = [
Nate Jiang68f3ffa2019-08-07 15:23:49 -070063 "open_network", "reference_networks", "radius_conf_2g", "radius_conf_5g", "ca_cert",
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -070064 "eap_identity", "eap_password", "hidden_networks", "passpoint_networks"
Roshan Piusd1204442018-11-12 12:20:39 -080065 ]
66 self.unpack_userparams(
67 req_param_names=req_params, opt_param_names=opt_param)
68
69 if "AccessPoint" in self.user_params:
Girish Moturub1e7a5c2019-07-29 13:48:11 -070070 self.legacy_configure_ap_and_start(
71 wpa_network=True, ent_network=True,
72 radius_conf_2g=self.radius_conf_2g,
73 radius_conf_5g=self.radius_conf_5g,)
Roshan Piusd1204442018-11-12 12:20:39 -080074
Girish Moturua069a4a2019-10-23 13:21:42 -070075 if hasattr(self, "reference_networks") and \
76 isinstance(self.reference_networks, list):
77 self.wpa_psk_2g = self.reference_networks[0]["2g"]
78 self.wpa_psk_5g = self.reference_networks[0]["5g"]
79 if hasattr(self, "open_network") and isinstance(self.open_network,list):
Nate Jiang68f3ffa2019-08-07 15:23:49 -070080 self.open_2g = self.open_network[0]["2g"]
81 self.open_5g = self.open_network[0]["5g"]
Girish Moturua069a4a2019-10-23 13:21:42 -070082 if hasattr(self, "ent_networks") and isinstance(self.ent_networks,list):
Nate Jiang68f3ffa2019-08-07 15:23:49 -070083 self.ent_network_2g = self.ent_networks[0]["2g"]
84 self.ent_network_5g = self.ent_networks[0]["5g"]
85 self.config_aka = {
86 Ent.EAP: int(EAP.AKA),
87 WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
Girish Moturu7e30c782020-02-05 12:37:06 -080088 "carrierId": str(self.dut.droid.telephonyGetSimCarrierId()),
Nate Jiang68f3ffa2019-08-07 15:23:49 -070089 }
90 self.config_ttls = {
91 Ent.EAP: int(EAP.TTLS),
92 Ent.CA_CERT: self.ca_cert,
93 Ent.IDENTITY: self.eap_identity,
94 Ent.PASSWORD: self.eap_password,
95 Ent.PHASE2: int(EapPhase2.MSCHAPV2),
96 WifiEnums.SSID_KEY: self.ent_network_2g[WifiEnums.SSID_KEY],
97 }
Girish Moturua069a4a2019-10-23 13:21:42 -070098 if hasattr(self, "hidden_networks") and \
99 isinstance(self.hidden_networks, list):
100 self.hidden_network = self.hidden_networks[0]
Roshan Piusd1204442018-11-12 12:20:39 -0800101 self.dut.droid.wifiRemoveNetworkSuggestions([])
102
103 def setup_test(self):
104 self.dut.droid.wakeLockAcquireBright()
105 self.dut.droid.wakeUpNow()
Roshan Pius89b22bd2019-01-24 14:12:49 -0800106 self.clear_deleted_ephemeral_networks()
Roshan Piusd1204442018-11-12 12:20:39 -0800107 wutils.wifi_toggle_state(self.dut, True)
Roshan Pius159222c2019-02-07 10:33:32 -0800108 self.dut.ed.clear_all_events()
Roshan Piusd1204442018-11-12 12:20:39 -0800109
110 def teardown_test(self):
111 self.dut.droid.wakeLockRelease()
112 self.dut.droid.goToSleepNow()
113 self.dut.droid.wifiRemoveNetworkSuggestions([])
Roshan Piusffc29912019-01-18 13:39:49 -0800114 self.dut.droid.wifiDisconnect()
Roshan Piusd1204442018-11-12 12:20:39 -0800115 wutils.reset_wifi(self.dut)
Nate Jiang1ef58c32019-07-15 19:13:26 -0700116 wutils.wifi_toggle_state(self.dut, False)
Roshan Piusd1204442018-11-12 12:20:39 -0800117 self.dut.ed.clear_all_events()
118
119 def on_fail(self, test_name, begin_time):
120 self.dut.take_bug_report(test_name, begin_time)
121 self.dut.cat_adb_log(test_name, begin_time)
122
123 def teardown_class(self):
124 if "AccessPoint" in self.user_params:
125 del self.user_params["reference_networks"]
126 del self.user_params["open_network"]
127
128 """Helper Functions"""
Roshan Pius3e3bd342019-01-09 13:55:17 -0800129 def set_approved(self, approved):
130 self.dut.log.debug("Setting suggestions from sl4a app "
131 + "approved" if approved else "not approved")
132 self.dut.adb.shell("cmd wifi network-suggestions-set-user-approved"
133 + " " + SL4A_APK_NAME
134 + " " + ("yes" if approved else "no"))
135
136 def is_approved(self):
137 is_approved_str = self.dut.adb.shell(
138 "cmd wifi network-suggestions-has-user-approved"
139 + " " + SL4A_APK_NAME)
140 return True if (is_approved_str == "yes") else False
141
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800142 def set_carrier_approved(self, carrier_id, approved):
143 self.dut.log.debug(("Setting IMSI protection exemption for carrier: " + carrier_id
144 + "approved" if approved else "not approved"))
145 self.dut.adb.shell("cmd wifi imsi-protection-exemption-set-user-approved-for-carrier"
146 + " " + carrier_id
147 + " " + ("yes" if approved else "no"))
148
149 def is_carrier_approved(self, carrier_id):
150 is_approved_str = self.dut.adb.shell(
151 "cmd wifi imsi-protection-exemption-has-user-approved-for-carrier"
152 + " " + carrier_id)
153 return True if (is_approved_str == "yes") else False
154
155 def clear_carrier_approved(self, carrier_id):
156 self.dut.adb.shell(
157 "cmd wifi imsi-protection-exemption-clear-user-approved-for-carrier"
158 + " " + carrier_id)
159
Roshan Pius89b22bd2019-01-24 14:12:49 -0800160 def clear_deleted_ephemeral_networks(self):
161 self.dut.log.debug("Clearing deleted ephemeral networks")
162 self.dut.adb.shell(
163 "cmd wifi clear-deleted-ephemeral-networks")
164
Roshan Piusd1204442018-11-12 12:20:39 -0800165 def add_suggestions_and_ensure_connection(self, network_suggestions,
166 expected_ssid,
167 expect_post_connection_broadcast):
Roshan Pius3702f242019-02-28 09:14:40 -0800168 if expect_post_connection_broadcast is not None:
169 self.dut.droid.wifiStartTrackingNetworkSuggestionStateChange()
170
Nate(Qiang) Jiange7a400e2020-01-16 17:27:23 -0800171 self.dut.log.info("Adding network suggestions")
Roshan Piusd1204442018-11-12 12:20:39 -0800172 asserts.assert_true(
173 self.dut.droid.wifiAddNetworkSuggestions(network_suggestions),
174 "Failed to add suggestions")
Roshan Pius3e3bd342019-01-09 13:55:17 -0800175 # Enable suggestions by the app.
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700176 self.dut.log.debug("Enabling suggestions from test")
Roshan Pius3e3bd342019-01-09 13:55:17 -0800177 self.set_approved(True)
lutina49d3e512019-07-05 14:42:33 +0800178 wutils.start_wifi_connection_scan_and_return_status(self.dut)
Nate(Qiang) Jiang051b8142019-11-01 17:23:33 -0700179 # if suggestion is passpoint wait longer for connection.
180 if "profile" in network_suggestions:
181 time.sleep(PASSPOINT_TIMEOUT)
Roshan Piusd1204442018-11-12 12:20:39 -0800182 wutils.wait_for_connect(self.dut, expected_ssid)
183
184 if expect_post_connection_broadcast is None:
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700185 return
Roshan Piusd1204442018-11-12 12:20:39 -0800186
187 # Check if we expected to get the broadcast.
188 try:
Roshan Piusd1204442018-11-12 12:20:39 -0800189 event = self.dut.ed.pop_event(
190 wifi_constants.WIFI_NETWORK_SUGGESTION_POST_CONNECTION, 60)
Roshan Piusd1204442018-11-12 12:20:39 -0800191 except queue.Empty:
192 if expect_post_connection_broadcast:
193 raise signals.TestFailure(
194 "Did not receive post connection broadcast")
195 else:
196 if not expect_post_connection_broadcast:
197 raise signals.TestFailure(
198 "Received post connection broadcast")
Roshan Pius3702f242019-02-28 09:14:40 -0800199 finally:
200 self.dut.droid.wifiStopTrackingNetworkSuggestionStateChange()
Roshan Piusff6ca4c2019-03-26 13:53:31 -0700201 self.dut.ed.clear_all_events()
Roshan Piusd1204442018-11-12 12:20:39 -0800202
Nate Jiang68f3ffa2019-08-07 15:23:49 -0700203 def remove_suggestions_disconnect_and_ensure_no_connection_back(self,
204 network_suggestions,
205 expected_ssid):
206 # Remove suggestion trigger disconnect and wait for the disconnect.
207 self.dut.log.info("Removing network suggestions")
208 asserts.assert_true(
209 self.dut.droid.wifiRemoveNetworkSuggestions(network_suggestions),
210 "Failed to remove suggestions")
211 wutils.wait_for_disconnect(self.dut)
212 self.dut.ed.clear_all_events()
213
214 # Now ensure that we didn't connect back.
215 asserts.assert_false(
216 wutils.wait_for_connect(self.dut, expected_ssid, assert_on_fail=False),
217 "Device should not connect back")
218
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700219 def _test_connect_to_wifi_network_reboot_config_store(self,
220 network_suggestions,
221 wifi_network):
222 """ Test network suggestion with reboot config store
223
224 Args:
225 1. network_suggestions: network suggestions in list to add to the device.
226 2. wifi_network: expected wifi network to connect to
227 """
228
229 self.add_suggestions_and_ensure_connection(
230 network_suggestions, wifi_network[WifiEnums.SSID_KEY], None)
231
232 # Reboot and wait for connection back to the same suggestion.
233 self.dut.reboot()
234 time.sleep(DEFAULT_TIMEOUT)
235
236 wutils.wait_for_connect(self.dut, wifi_network[WifiEnums.SSID_KEY])
237
Nate Jiang68f3ffa2019-08-07 15:23:49 -0700238 self.remove_suggestions_disconnect_and_ensure_no_connection_back(
239 network_suggestions, wifi_network[WifiEnums.SSID_KEY])
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700240
Nate(Qiang) Jiang8a62e372019-12-19 11:04:05 -0800241 # Reboot with empty suggestion, verify user approval is kept.
242 self.dut.reboot()
243 time.sleep(DEFAULT_TIMEOUT)
244 asserts.assert_true(self.is_approved(), "User approval should be kept")
245
Roshan Piusf028bd32018-12-06 15:18:21 -0800246 @test_tracker_info(uuid="bda8ed20-4382-4380-831a-64cf77eca108")
Roshan Piusd1204442018-11-12 12:20:39 -0800247 def test_connect_to_wpa_psk_2g(self):
248 """ Adds a network suggestion and ensure that the device connected.
249
250 Steps:
251 1. Send a network suggestion to the device.
252 2. Wait for the device to connect to it.
253 3. Ensure that we did not receive the post connection broadcast
254 (isAppInteractionRequired = False).
Roshan Piusffc29912019-01-18 13:39:49 -0800255 4. Remove the suggestions and ensure the device does not connect back.
Roshan Piusd1204442018-11-12 12:20:39 -0800256 """
257 self.add_suggestions_and_ensure_connection(
258 [self.wpa_psk_2g], self.wpa_psk_2g[WifiEnums.SSID_KEY],
259 False)
Nate Jiang1ef58c32019-07-15 19:13:26 -0700260
Nate Jiang68f3ffa2019-08-07 15:23:49 -0700261 self.remove_suggestions_disconnect_and_ensure_no_connection_back(
262 [self.wpa_psk_2g], self.wpa_psk_2g[WifiEnums.SSID_KEY])
Roshan Piusd1204442018-11-12 12:20:39 -0800263
Roshan Piusc6fceca2019-03-22 13:23:58 -0700264 @test_tracker_info(uuid="f54bc250-d9e9-4f00-8b5b-b866e8550b43")
265 def test_connect_to_highest_priority(self):
266 """
267 Adds network suggestions and ensures that device connects to
268 the suggestion with the highest priority.
269
270 Steps:
271 1. Send 2 network suggestions to the device (with different priorities).
272 2. Wait for the device to connect to the network with the highest
273 priority.
Nate Jiang172c6902019-09-09 17:54:33 -0700274 3. In-place modify network suggestions with priorities reversed
275 4. Restart wifi, wait for the device to connect to the network with the highest
276 priority.
277 5. Re-add the suggestions with the priorities reversed again.
278 6. Again wait for the device to connect to the network with the highest
Roshan Piusc6fceca2019-03-22 13:23:58 -0700279 priority.
280 """
281 network_suggestion_2g = self.wpa_psk_2g
282 network_suggestion_5g = self.wpa_psk_5g
283
284 # Add suggestions & wait for the connection event.
285 network_suggestion_2g[WifiEnums.PRIORITY] = 5
286 network_suggestion_5g[WifiEnums.PRIORITY] = 2
287 self.add_suggestions_and_ensure_connection(
288 [network_suggestion_2g, network_suggestion_5g],
289 self.wpa_psk_2g[WifiEnums.SSID_KEY],
290 None)
291
Nate Jiang172c6902019-09-09 17:54:33 -0700292 # In-place modify Reverse the priority, should be no disconnect
293 network_suggestion_2g[WifiEnums.PRIORITY] = 2
294 network_suggestion_5g[WifiEnums.PRIORITY] = 5
295 self.dut.log.info("Modifying network suggestions");
296 asserts.assert_true(
297 self.dut.droid.wifiAddNetworkSuggestions([network_suggestion_2g,
298 network_suggestion_5g]),
299 "Failed to add suggestions")
300 wutils.ensure_no_disconnect(self.dut)
301
302 # Disable and re-enable wifi, should connect to higher priority
303 wutils.wifi_toggle_state(self.dut, False)
304 time.sleep(DEFAULT_TIMEOUT)
305 wutils.wifi_toggle_state(self.dut, True)
306 wutils.start_wifi_connection_scan_and_return_status(self.dut)
307 wutils.wait_for_connect(self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY])
308
Nate Jiang68f3ffa2019-08-07 15:23:49 -0700309 self.remove_suggestions_disconnect_and_ensure_no_connection_back(
Nate Jiang0878aef2019-09-16 13:33:26 -0700310 [], self.wpa_psk_5g[WifiEnums.SSID_KEY])
Roshan Piusc6fceca2019-03-22 13:23:58 -0700311
312 # Reverse the priority.
313 # Add suggestions & wait for the connection event.
Nate Jiang172c6902019-09-09 17:54:33 -0700314 network_suggestion_2g[WifiEnums.PRIORITY] = 5
315 network_suggestion_5g[WifiEnums.PRIORITY] = 2
Roshan Piusc6fceca2019-03-22 13:23:58 -0700316 self.add_suggestions_and_ensure_connection(
317 [network_suggestion_2g, network_suggestion_5g],
Nate Jiang0878aef2019-09-16 13:33:26 -0700318 self.wpa_psk_2g[WifiEnums.SSID_KEY],
Roshan Piusc6fceca2019-03-22 13:23:58 -0700319 None)
320
Roshan Piusf028bd32018-12-06 15:18:21 -0800321 @test_tracker_info(uuid="b1d27eea-23c8-4c4f-b944-ef118e4cc35f")
Roshan Piusd1204442018-11-12 12:20:39 -0800322 def test_connect_to_wpa_psk_2g_with_post_connection_broadcast(self):
323 """ Adds a network suggestion and ensure that the device connected.
324
325 Steps:
326 1. Send a network suggestion to the device with
327 isAppInteractionRequired set.
328 2. Wait for the device to connect to it.
329 3. Ensure that we did receive the post connection broadcast
330 (isAppInteractionRequired = True).
Roshan Piusffc29912019-01-18 13:39:49 -0800331 4. Remove the suggestions and ensure the device does not connect back.
Roshan Piusd1204442018-11-12 12:20:39 -0800332 """
333 network_suggestion = self.wpa_psk_2g
334 network_suggestion[WifiEnums.IS_APP_INTERACTION_REQUIRED] = True
335 self.add_suggestions_and_ensure_connection(
336 [network_suggestion], self.wpa_psk_2g[WifiEnums.SSID_KEY],
337 True)
Nate Jiang68f3ffa2019-08-07 15:23:49 -0700338 self.remove_suggestions_disconnect_and_ensure_no_connection_back(
339 [self.wpa_psk_2g], self.wpa_psk_2g[WifiEnums.SSID_KEY])
Roshan Piusd1204442018-11-12 12:20:39 -0800340
Roshan Piusf028bd32018-12-06 15:18:21 -0800341 @test_tracker_info(uuid="a036a24d-29c0-456d-ae6a-afdde34da710")
Roshan Piusd1204442018-11-12 12:20:39 -0800342 def test_connect_to_wpa_psk_5g_reboot_config_store(self):
343 """
344 Adds a network suggestion and ensure that the device connects to it
345 after reboot.
346
347 Steps:
348 1. Send a network suggestion to the device.
349 2. Wait for the device to connect to it.
350 3. Ensure that we did not receive the post connection broadcast
351 (isAppInteractionRequired = False).
352 4. Reboot the device.
353 5. Wait for the device to connect to back to it.
Roshan Piusffc29912019-01-18 13:39:49 -0800354 6. Remove the suggestions and ensure the device does not connect back.
Nate(Qiang) Jiang8a62e372019-12-19 11:04:05 -0800355 7. Reboot the device again, ensure user approval is kept
Roshan Piusd1204442018-11-12 12:20:39 -0800356 """
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700357 self._test_connect_to_wifi_network_reboot_config_store(
358 [self.wpa_psk_5g], self.wpa_psk_5g)
Roshan Piusd1204442018-11-12 12:20:39 -0800359
Girish Moturuc2033ae2019-07-31 09:04:36 -0700360 @test_tracker_info(uuid="61649a2b-0f00-4272-9b9b-40ad5944da31")
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700361 def test_connect_to_wpa_ent_config_aka_reboot_config_store(self):
362 """
363 Adds a network suggestion and ensure that the device connects to it
364 after reboot.
Roshan Piusd1204442018-11-12 12:20:39 -0800365
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700366 Steps:
367 1. Send a Enterprise AKA network suggestion to the device.
368 2. Wait for the device to connect to it.
369 3. Ensure that we did not receive the post connection broadcast.
370 4. Reboot the device.
371 5. Wait for the device to connect to the wifi network.
372 6. Remove suggestions and ensure device doesn't connect back to it.
Nate(Qiang) Jiang8a62e372019-12-19 11:04:05 -0800373 7. Reboot the device again, ensure user approval is kept
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700374 """
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800375 if "carrierId" in self.config_aka:
376 self.set_carrier_approved(self.config_aka["carrierId"], True)
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700377 self._test_connect_to_wifi_network_reboot_config_store(
378 [self.config_aka], self.ent_network_2g)
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800379 if "carrierId" in self.config_aka:
380 self.clear_carrier_approved(self.config_aka["carrierId"])
Roshan Piusd1204442018-11-12 12:20:39 -0800381
Girish Moturuc2033ae2019-07-31 09:04:36 -0700382 @test_tracker_info(uuid="98b2d40a-acb4-4a2f-aba1-b069e2a1d09d")
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700383 def test_connect_to_wpa_ent_config_ttls_pap_reboot_config_store(self):
384 """
385 Adds a network suggestion and ensure that the device connects to it
386 after reboot.
Roshan Piusffc29912019-01-18 13:39:49 -0800387
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700388 Steps:
389 1. Send a Enterprise TTLS PAP network suggestion to the device.
390 2. Wait for the device to connect to it.
391 3. Ensure that we did not receive the post connection broadcast.
392 4. Reboot the device.
393 5. Wait for the device to connect to the wifi network.
394 6. Remove suggestions and ensure device doesn't connect back to it.
Nate(Qiang) Jiang8a62e372019-12-19 11:04:05 -0800395 7. Reboot the device again, ensure user approval is kept
Girish Moturub1e7a5c2019-07-29 13:48:11 -0700396 """
397 config = dict(self.config_ttls)
398 config[WifiEnums.Enterprise.PHASE2] = WifiEnums.EapPhase2.PAP.value
399
400 self._test_connect_to_wifi_network_reboot_config_store(
401 [config], self.ent_network_2g)
Roshan Piusffc29912019-01-18 13:39:49 -0800402
Roshan Pius3e3bd342019-01-09 13:55:17 -0800403 @test_tracker_info(uuid="554b5861-22d0-4922-a5f4-712b4cf564eb")
404 def test_fail_to_connect_to_wpa_psk_5g_when_not_approved(self):
405 """
406 Adds a network suggestion and ensure that the device does not
407 connect to it until we approve the app.
408
409 Steps:
410 1. Send a network suggestion to the device with the app not approved.
411 2. Ensure the network is present in scan results, but we don't connect
412 to it.
413 3. Now approve the app.
414 4. Wait for the device to connect to it.
415 """
416 self.dut.log.info("Adding network suggestions");
417 asserts.assert_true(
418 self.dut.droid.wifiAddNetworkSuggestions([self.wpa_psk_5g]),
419 "Failed to add suggestions")
420
421 # Disable suggestions by the app.
422 self.set_approved(False)
423
424 # Ensure the app is not approved.
425 asserts.assert_false(
426 self.is_approved(),
427 "Suggestions should be disabled")
428
429 # Start a new scan to trigger auto-join.
430 wutils.start_wifi_connection_scan_and_ensure_network_found(
431 self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY])
432
433 # Ensure we don't connect to the network.
434 asserts.assert_false(
435 wutils.wait_for_connect(
436 self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY], assert_on_fail=False),
437 "Should not connect to network suggestions from unapproved app")
438
439 self.dut.log.info("Enabling suggestions from test");
440 # Now Enable suggestions by the app & ensure we connect to the network.
441 self.set_approved(True)
442
443 # Ensure the app is approved.
444 asserts.assert_true(
445 self.is_approved(),
446 "Suggestions should be enabled")
447
448 # Start a new scan to trigger auto-join.
449 wutils.start_wifi_connection_scan_and_ensure_network_found(
450 self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY])
451
452 wutils.wait_for_connect(self.dut, self.wpa_psk_5g[WifiEnums.SSID_KEY])
Roshan Pius89b22bd2019-01-24 14:12:49 -0800453
Roshan Pius3d57f132019-01-28 10:25:18 -0800454 @test_tracker_info(uuid="98400dea-776e-4a0a-9024-18845b27331c")
Roshan Pius89b22bd2019-01-24 14:12:49 -0800455 def test_fail_to_connect_to_wpa_psk_2g_after_user_forgot_network(self):
456 """
457 Adds a network suggestion and ensures that the device does not
458 connect to it after the user forgot the network previously.
459
460 Steps:
461 1. Send a network suggestion to the device with
462 isAppInteractionRequired set.
463 2. Wait for the device to connect to it.
464 3. Ensure that we did receive the post connection broadcast
465 (isAppInteractionRequired = True).
466 4. Simulate user forgetting the network and the device does not
467 connecting back even though the suggestion is active from the app.
468 """
469 network_suggestion = self.wpa_psk_2g
470 network_suggestion[WifiEnums.IS_APP_INTERACTION_REQUIRED] = True
471 self.add_suggestions_and_ensure_connection(
472 [network_suggestion], self.wpa_psk_2g[WifiEnums.SSID_KEY],
473 True)
474
Nate Jiang68f3ffa2019-08-07 15:23:49 -0700475 # Simulate user forgetting the ephemeral network.
Roshan Pius89b22bd2019-01-24 14:12:49 -0800476 self.dut.droid.wifiDisableEphemeralNetwork(
477 self.wpa_psk_2g[WifiEnums.SSID_KEY])
478 wutils.wait_for_disconnect(self.dut)
479 self.dut.log.info("Disconnected from network %s", self.wpa_psk_2g)
480 self.dut.ed.clear_all_events()
481
482 # Now ensure that we don't connect back even though the suggestion
483 # is still active.
484 asserts.assert_false(
485 wutils.wait_for_connect(self.dut,
486 self.wpa_psk_2g[WifiEnums.SSID_KEY],
487 assert_on_fail=False),
488 "Device should not connect back")
Nate Jiang20af5e82019-08-08 12:45:24 -0700489
490 @test_tracker_info(uuid="93c86b05-fa56-4d79-ad27-009a16f691b1")
491 def test_connect_to_hidden_network(self):
492 """
493 Adds a network suggestion with hidden SSID config, ensure device can scan
494 and connect to this network.
495
496 Steps:
497 1. Send a hidden network suggestion to the device.
498 2. Wait for the device to connect to it.
499 3. Ensure that we did not receive the post connection broadcast
500 (isAppInteractionRequired = False).
501 4. Remove the suggestions and ensure the device does not connect back.
502 """
503 asserts.skip_if(not hasattr(self, "hidden_networks"), "No hidden networks, skip this test")
504
505 network_suggestion = self.hidden_network
506 self.add_suggestions_and_ensure_connection(
507 [network_suggestion], network_suggestion[WifiEnums.SSID_KEY], False)
508 self.remove_suggestions_disconnect_and_ensure_no_connection_back(
509 [network_suggestion], network_suggestion[WifiEnums.SSID_KEY])
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700510
Girish Moturua5d28482019-10-23 10:15:37 -0700511 @test_tracker_info(uuid="806dff14-7543-482b-bd0a-598de59374b3")
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700512 def test_connect_to_passpoint_network_with_post_connection_broadcast(self):
513 """ Adds a passpoint network suggestion and ensure that the device connected.
514
515 Steps:
516 1. Send a network suggestion to the device.
517 2. Wait for the device to connect to it.
518 3. Ensure that we did receive the post connection broadcast
519 (isAppInteractionRequired = true).
520 4. Remove the suggestions and ensure the device does not connect back.
521 """
522 asserts.skip_if(not hasattr(self, "passpoint_networks"),
523 "No passpoint networks, skip this test")
Girish Moturua069a4a2019-10-23 13:21:42 -0700524 passpoint_config = self.passpoint_networks[ATT]
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700525 passpoint_config[WifiEnums.IS_APP_INTERACTION_REQUIRED] = True
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800526 if "carrierId" in passpoint_config:
527 self.set_carrier_approved(passpoint_config["carrierId"], True)
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700528 self.add_suggestions_and_ensure_connection([passpoint_config],
529 passpoint_config[WifiEnums.SSID_KEY], True)
530 self.remove_suggestions_disconnect_and_ensure_no_connection_back(
531 [passpoint_config], passpoint_config[WifiEnums.SSID_KEY])
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800532 if "carrierId" in passpoint_config:
533 self.clear_carrier_approved(passpoint_config["carrierId"])
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700534
Girish Moturua5d28482019-10-23 10:15:37 -0700535 @test_tracker_info(uuid="159b8b8c-fb00-4d4e-a29f-606881dcbf44")
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700536 def test_connect_to_passpoint_network_reboot_config_store(self):
537 """
538 Adds a passpoint network suggestion and ensure that the device connects to it
539 after reboot.
540
541 Steps:
542 1. Send a network suggestion to the device.
543 2. Wait for the device to connect to it.
544 3. Ensure that we did not receive the post connection broadcast
545 (isAppInteractionRequired = False).
546 4. Reboot the device.
547 5. Wait for the device to connect to back to it.
548 6. Remove the suggestions and ensure the device does not connect back.
Nate(Qiang) Jiang8a62e372019-12-19 11:04:05 -0800549 7. Reboot the device again, ensure user approval is kept
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700550 """
551 asserts.skip_if(not hasattr(self, "passpoint_networks"),
552 "No passpoint networks, skip this test")
Girish Moturua069a4a2019-10-23 13:21:42 -0700553 passpoint_config = self.passpoint_networks[ATT]
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800554 if "carrierId" in passpoint_config:
555 self.set_carrier_approved(passpoint_config["carrierId"], True)
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700556 self._test_connect_to_wifi_network_reboot_config_store([passpoint_config],
557 passpoint_config)
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800558 if "carrierId" in passpoint_config:
559 self.clear_carrier_approved(passpoint_config["carrierId"])
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700560
Girish Moturua5d28482019-10-23 10:15:37 -0700561 @test_tracker_info(uuid="34f3d28a-bedf-43fe-a12d-2cfadf6bc6eb")
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700562 def test_fail_to_connect_to_passpoint_network_when_not_approved(self):
563 """
564 Adds a passpoint network suggestion and ensure that the device does not
565 connect to it until we approve the app.
566
567 Steps:
568 1. Send a network suggestion to the device with the app not approved.
569 2. Ensure the network is present in scan results, but we don't connect
570 to it.
571 3. Now approve the app.
572 4. Wait for the device to connect to it.
573 """
574 asserts.skip_if(not hasattr(self, "passpoint_networks"),
575 "No passpoint networks, skip this test")
Girish Moturua069a4a2019-10-23 13:21:42 -0700576 passpoint_config = self.passpoint_networks[ATT]
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700577 self.dut.log.info("Adding network suggestions")
578 asserts.assert_true(
579 self.dut.droid.wifiAddNetworkSuggestions([passpoint_config]),
580 "Failed to add suggestions")
581
582 # Disable suggestions by the app.
583 self.set_approved(False)
584
585 # Ensure the app is not approved.
586 asserts.assert_false(
587 self.is_approved(),
588 "Suggestions should be disabled")
589
590 # Start a new scan to trigger auto-join.
591 wutils.start_wifi_connection_scan_and_ensure_network_found(
592 self.dut, passpoint_config[WifiEnums.SSID_KEY])
593
594 # Ensure we don't connect to the network.
595 asserts.assert_false(
596 wutils.wait_for_connect(
597 self.dut, passpoint_config[WifiEnums.SSID_KEY], assert_on_fail=False),
598 "Should not connect to network suggestions from unapproved app")
599
600 self.dut.log.info("Enabling suggestions from test");
601 # Now Enable suggestions by the app & ensure we connect to the network.
602 self.set_approved(True)
603
604 # Ensure the app is approved.
605 asserts.assert_true(
606 self.is_approved(),
607 "Suggestions should be enabled")
608
609 # Start a new scan to trigger auto-join.
610 wutils.start_wifi_connection_scan_and_ensure_network_found(
611 self.dut, passpoint_config[WifiEnums.SSID_KEY])
Nate(Qiang) Jiang051b8142019-11-01 17:23:33 -0700612 time.sleep(PASSPOINT_TIMEOUT)
Nate(Qiang) Jiang55582152019-10-07 12:13:47 -0700613 wutils.wait_for_connect(self.dut, passpoint_config[WifiEnums.SSID_KEY])
Nate(Qiang) Jiange7a400e2020-01-16 17:27:23 -0800614
Girish Moturu7e30c782020-02-05 12:37:06 -0800615 @test_tracker_info(uuid="cf624cda-4d25-42f1-80eb-6c717fb08338")
Nate(Qiang) Jiangacaf8892020-01-29 14:04:12 -0800616 def test_fail_to_connect_to_passpoint_network_when_imsi_protection_exemption_not_approved(self):
617 """
618 Adds a passpoint network suggestion using SIM credential without IMSI privacy protection.
619 Before user approves the exemption, ensure that the device does noconnect to it until we
620 approve the carrier exemption.
621
622 Steps:
623 1. Send a network suggestion to the device with IMSI protection exemption not approved.
624 2. Ensure the network is present in scan results, but we don't connect
625 to it.
626 3. Now approve the carrier.
627 4. Wait for the device to connect to it.
628 """
629 asserts.skip_if(not hasattr(self, "passpoint_networks"),
630 "No passpoint networks, skip this test")
631 passpoint_config = self.passpoint_networks[ATT]
632 asserts.skip_if("carrierId" not in passpoint_config,
633 "Not a SIM based passpoint network, skip this test")
634
635 self.dut.log.info("Adding network suggestions")
636 asserts.assert_true(
637 self.dut.droid.wifiAddNetworkSuggestions([passpoint_config]),
638 "Failed to add suggestions")
639
640 # Ensure the carrier imsi protection exemption is not approved.
641 asserts.assert_false(
642 self.is_carrier_approved(passpoint_config["carrierId"]),
643 "Carrier should not be approved")
644
645 # Start a new scan to trigger auto-join.
646 wutils.start_wifi_connection_scan_and_ensure_network_found(
647 self.dut, passpoint_config[WifiEnums.SSID_KEY])
648
649 # Ensure we don't connect to the network.
650 asserts.assert_false(
651 wutils.wait_for_connect(
652 self.dut, passpoint_config[WifiEnums.SSID_KEY], assert_on_fail=False),
653 "Should not connect to network suggestions from unapproved app")
654
655 self.dut.log.info("Enabling suggestions from test")
656 # Now approve IMSI protection exemption by carrier & ensure we connect to the network.
657 self.set_carrier_approved(passpoint_config["carrierId"], True)
658
659 # Ensure the carrier is approved.
660 asserts.assert_true(
661 self.is_carrier_approved(passpoint_config["carrierId"]),
662 "Carrier should be approved")
663
664 # Start a new scan to trigger auto-join.
665 wutils.start_wifi_connection_scan_and_ensure_network_found(
666 self.dut, passpoint_config[WifiEnums.SSID_KEY])
667 time.sleep(PASSPOINT_TIMEOUT)
668 wutils.wait_for_connect(self.dut, passpoint_config[WifiEnums.SSID_KEY])
669 self.clear_carrier_approved(passpoint_config["carrierId"])
670
Girish Moturu31f58f22020-01-30 18:54:40 -0800671 @test_tracker_info(uuid="e35f99c8-78a4-4b96-9258-f9834b6ddd33")
Nate(Qiang) Jiange7a400e2020-01-16 17:27:23 -0800672 def test_initial_auto_join_on_network_suggestion(self):
673 """
674 Add a network suggestion with enableAutojoin bit set to false, ensure the device doesn't
675 auto connect to this network
676
677 Steps:
678 1. Create a network suggestion.
679 2. Set EnableAutojoin to false.
680 3. Add this suggestion
681 4. Ensure device doesn't connect to his network
682 """
Girish Moturu2155dc12020-01-21 15:16:17 -0800683 network_suggestion = self.wpa_psk_5g
Nate(Qiang) Jiange7a400e2020-01-16 17:27:23 -0800684 # Set suggestion auto join initial to false.
685 network_suggestion["enableAutojoin"] = False
686 self.dut.log.info("Adding network suggestions")
687 asserts.assert_true(
688 self.dut.droid.wifiAddNetworkSuggestions([network_suggestion]),
689 "Failed to add suggestions")
690 # Enable suggestions by the app.
691 self.dut.log.debug("Enabling suggestions from test")
692 self.set_approved(True)
693 wutils.start_wifi_connection_scan_and_return_status(self.dut)
694 asserts.assert_false(
695 wutils.wait_for_connect(self.dut, network_suggestion[WifiEnums.SSID_KEY],
696 assert_on_fail=False), "Device should not connect.")
697
Girish Moturu31f58f22020-01-30 18:54:40 -0800698 @test_tracker_info(uuid="ff4e451f-a380-4ff5-a5c2-dd9b1633d5e5")
Nate(Qiang) Jiange7a400e2020-01-16 17:27:23 -0800699 def test_user_override_auto_join_on_network_suggestion(self):
700 """
701 Add a network suggestion, user change the auto join to false, ensure the device doesn't
702 auto connect to this network
703
704 Steps:
705 1. Create a network suggestion.
706 2. Add this suggestion, and ensure we connect to this network
707 3. Simulate user change the auto join to false.
708 4. Toggle the Wifi off and on
709 4. Ensure device doesn't connect to his network
710 """
Girish Moturu2155dc12020-01-21 15:16:17 -0800711 network_suggestion = self.wpa_psk_5g
Nate(Qiang) Jiange7a400e2020-01-16 17:27:23 -0800712 self.add_suggestions_and_ensure_connection([network_suggestion],
713 network_suggestion[WifiEnums.SSID_KEY], False)
714 wifi_info = self.dut.droid.wifiGetConnectionInfo()
715 self.dut.log.info(wifi_info)
716 network_id = wifi_info[WifiEnums.NETID_KEY]
717 # Simulate user disable auto join through Settings.
718 self.dut.log.info("Disable auto join on suggestion")
719 self.dut.droid.wifiEnableAutojoin(network_id, False)
720 wutils.wifi_toggle_state(self.dut, False)
721 wutils.wifi_toggle_state(self.dut, True)
722 asserts.assert_false(
723 wutils.wait_for_connect(self.dut, network_suggestion[WifiEnums.SSID_KEY],
724 assert_on_fail=False), "Device should not connect.")