blob: 340d65059cf9f43a21fd2f21533847960d6390da [file] [log] [blame]
Bindu Mahadevae923812017-04-12 22:57:49 +00001#!/usr/bin/env python3.4
2
3import queue
4import time
5
6import acts.base_test
7import acts.test_utils.wifi.wifi_test_utils as wifi_utils
8import acts.test_utils.tel.tel_test_utils as tele_utils
9import acts.utils
10
11from acts import asserts
12from acts import signals
Girish Moturu43faec82017-06-12 10:46:51 +053013from acts.test_decorators import test_tracker_info
Bindu Mahadevae923812017-04-12 22:57:49 +000014from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
15from acts.test_utils.tel.tel_voice_utils import phone_setup_voice_general
16from acts.test_utils.tel.tel_voice_utils import two_phone_call_short_seq
17
18WifiEnums = wifi_utils.WifiEnums
19
20ATTENUATORS = "attenuators"
21WIFI_SSID = "wifi_network_ssid"
22WIFI_PWD = "wifi_network_pass"
23STRESS_COUNT = "stress_iteration"
24
25class WifiTeleCoexTest(TelephonyBaseTest):
26 """Tests for WiFi, Celular Co-existance."""
27
28
29 def __init__(self, controllers):
30 TelephonyBaseTest.__init__(self, controllers)
31
32
33 def setup_class(self):
34 TelephonyBaseTest.setup_class(self)
35 self.dut = self.android_devices[0]
36 wifi_utils.wifi_test_device_init(self.dut)
37 # Set attenuation to 0 on all channels.
38 if getattr(self, ATTENUATORS, []):
39 for a in self.attenuators:
40 a.set_atten(0)
41 self.ads = self.android_devices
42 self.dut = self.android_devices[0]
43 self.wifi_network_ssid = self.user_params.get(WIFI_SSID)
44 self.wifi_network_pass = self.user_params.get(WIFI_PWD)
45 self.network = { WifiEnums.SSID_KEY : self.wifi_network_ssid,
46 WifiEnums.PWD_KEY : self.wifi_network_pass
47 }
48 self.stress_count = self.user_params.get(STRESS_COUNT)
49
50
51 def setup_test(self):
52 wifi_utils.wifi_toggle_state(self.dut, True)
53
54
55 def teardown_test(self):
56 wifi_utils.reset_wifi(self.dut)
57
58
59 """Helper Functions"""
60
61
62 def connect_to_wifi(self, ad, network):
63 """Connection logic for open and psk wifi networks.
64
65 Args:
66 ad: Android device object.
67 network: A JSON dict of the WiFi network configuration.
68
69 """
70 ad.ed.clear_all_events()
71 wifi_utils.start_wifi_connection_scan(ad)
72 scan_results = ad.droid.wifiGetScanResults()
73 wifi_utils.assert_network_in_list({WifiEnums.SSID_KEY:
74 self.wifi_network_ssid}, scan_results)
75 wifi_utils.wifi_connect(ad, network)
76 self.log.debug("Connected to %s network on %s device" % (
77 network[WifiEnums.SSID_KEY], ad.serial))
78
79
80 def stress_toggle_wifi(self, stress_count):
81 """Toggle WiFi in a loop.
82
83 Args:
84 stress_count: Number of times to toggle WiFi OFF and ON.
85
86 """
87 for count in range(stress_count):
88 self.log.debug("stress_toggle_wifi: Iteration %d" % count)
89 wifi_utils.toggle_wifi_off_and_on(self.dut)
90
91 if not self.dut.droid.wifiGetisWifiEnabled():
92 raise signals.TestFailure("WiFi did not turn on after toggling it"
93 " %d times" % self.stress_count)
94
95
96 def stress_toggle_airplane(self, stress_count):
97 """Toggle Airplane mode in a loop.
98
99 Args:
100 stress_count: Number of times to toggle Airplane mode OFF and ON.
101
102 """
103 for count in range(stress_count):
104 self.log.debug("stress_toggle_airplane: Iteration %d" % count)
105 wifi_utils.toggle_airplane_mode_on_and_off(self.dut)
106
107 if not self.dut.droid.wifiGetisWifiEnabled():
108 raise signals.TestFailure("WiFi did not turn on after toggling it"
109 " %d times" % self.stress_count)
110
111
112 def stress_toggle_airplane_and_wifi(self, stress_count):
113 """Toggle Airplane and WiFi modes in a loop.
114
115 Args:
116 stress_count: Number of times to perform Airplane mode ON, WiFi ON,
117 Airplane mode OFF, in a sequence.
118
119 """
lutina9f0a4762019-08-30 17:06:06 +0800120 for count in range(stress_count):
121 self.log.debug("stress_toggle_airplane_and_wifi: Iteration %d" % count)
122 self.log.debug("Toggling Airplane mode ON")
123 asserts.assert_true(
124 acts.utils.force_airplane_mode(self.dut, True),
125 "Can not turn on airplane mode on: %s" % self.dut.serial)
126 # Sleep for atleast 500ms so that, call to enable wifi is not deferred.
127 time.sleep(1)
128 self.log.debug("Toggling wifi ON")
129 wifi_utils.wifi_toggle_state(self.dut, True)
130 # Sleep for 1s before getting new WiFi state.
131 time.sleep(1)
132 if not self.dut.droid.wifiGetisWifiEnabled():
133 raise signals.TestFailure("WiFi did not turn on after turning ON"
134 " Airplane mode")
135 asserts.assert_true(
136 acts.utils.force_airplane_mode(self.dut, False),
137 "Can not turn on airplane mode on: %s" % self.dut.serial)
Bindu Mahadevae923812017-04-12 22:57:49 +0000138
139 if not self.dut.droid.wifiGetisWifiEnabled():
140 raise signals.TestFailure("WiFi did not turn on after toggling it"
141 " %d times" % self.stress_count)
142
143
144 def setup_cellular_voice_calling(self):
145 """Setup phone for voice general calling and make sure phone is
146 attached to voice."""
147 # Make sure Phone A and B are attached to voice network.
148 for ad in self.ads:
149 if not phone_setup_voice_general(self.log, ad):
150 raise signals.TestFailure("Phone failed to setup for voice"
151 " calling serial:%s" % ad.serial)
152 self.log.debug("Finished setting up phones for voice calling")
153
154
155 def validate_cellular_and_wifi(self):
156 """Validate WiFi, make some cellular calls.
157
158 Steps:
159 1. Check if device is still connected to the WiFi network.
160 2. If WiFi looks good, check if deivce is attached to voice.
161 3. Make a short sequence voice call between Phone A and B.
162
163 """
lutina9f0a4762019-08-30 17:06:06 +0800164 # Sleep for 30s before getting new WiFi state.
165 time.sleep(30)
Bindu Mahadevae923812017-04-12 22:57:49 +0000166 wifi_info = self.dut.droid.wifiGetConnectionInfo()
167 if wifi_info[WifiEnums.SSID_KEY] != self.wifi_network_ssid:
168 raise signals.TestFailure("Phone failed to connect to %s network on"
169 " %s" % (self.wifi_network_ssid,
170 self.dut.serial))
171
172 # Make short call sequence between Phone A and Phone B.
173 two_phone_call_short_seq(self.log, self.ads[0], None, None, self.ads[1],
174 None, None)
175
176 """Tests"""
177
178
Girish Moturu43faec82017-06-12 10:46:51 +0530179 @test_tracker_info(uuid="8b9b6fb9-964b-43e7-b75f-675774ee346f")
Bindu Mahadevae923812017-04-12 22:57:49 +0000180 @TelephonyBaseTest.tel_test_wrap
181 def test_toggle_wifi_call(self):
182 """Test to toggle WiFi and then perform WiFi connection and
183 cellular calls.
184
185 Steps:
186 1. Attach device to voice subscription network.
187 2. Connect to a WiFi network.
188 3. Toggle WiFi OFF and ON.
189 4. Verify device auto-connects to the WiFi network.
190 5. Verify device is attached to voice network.
191 6. Make short sequence voice calls.
192
193 """
194 self.setup_cellular_voice_calling()
195 self.connect_to_wifi(self.dut, self.network)
196 wifi_utils.toggle_wifi_off_and_on(self.dut)
197 self.validate_cellular_and_wifi()
Bindu Mahadev6077af22018-02-08 15:04:51 -0800198 return True
Bindu Mahadevae923812017-04-12 22:57:49 +0000199
200
Girish Moturu43faec82017-06-12 10:46:51 +0530201 @test_tracker_info(uuid="caf22447-6354-4a2e-99e5-0ff235fc8f20")
Bindu Mahadevae923812017-04-12 22:57:49 +0000202 @TelephonyBaseTest.tel_test_wrap
203 def test_toggle_airplane_call(self):
204 """Test to toggle Airplane mode and perform WiFi connection and
205 cellular calls.
206
207 Steps:
208 1. Attach device to voice subscription network.
209 2. Connect to a WiFi network.
210 3. Toggle Airplane mode OFF and ON.
211 4. Verify device auto-connects to the WiFi network.
212 5. Verify device is attached to voice network.
213 6. Make short sequence voice calls.
214
215 """
216 self.setup_cellular_voice_calling()
217 self.connect_to_wifi(self.dut, self.network)
218 wifi_utils.toggle_airplane_mode_on_and_off(self.dut)
219 self.validate_cellular_and_wifi()
Bindu Mahadev6077af22018-02-08 15:04:51 -0800220 return True
Bindu Mahadevae923812017-04-12 22:57:49 +0000221
222
Girish Moturu43faec82017-06-12 10:46:51 +0530223 @test_tracker_info(uuid="dd888b35-f820-409a-89af-4b0f6551e4d6")
Bindu Mahadevae923812017-04-12 22:57:49 +0000224 @TelephonyBaseTest.tel_test_wrap
225 def test_toggle_airplane_and_wifi_call(self):
226 """Test to toggle WiFi in a loop and perform WiFi connection and
227 cellular calls.
228
229 Steps:
230 1. Attach device to voice subscription network.
231 2. Connect to a WiFi network.
232 3. Toggle Airplane mode ON.
233 4. Turn WiFi ON.
234 5. Toggle Airplane mode OFF.
235 3. Verify device auto-connects to the WiFi network.
236 4. Verify device is attached to voice network.
237 5. Make short sequence voice calls.
238
239 """
240 self.setup_cellular_voice_calling()
241 self.connect_to_wifi(self.dut, self.network)
242 self.stress_toggle_airplane_and_wifi(1)
243 self.validate_cellular_and_wifi()
Bindu Mahadev6077af22018-02-08 15:04:51 -0800244 return True
Bindu Mahadevae923812017-04-12 22:57:49 +0000245
246
Girish Moturu43faec82017-06-12 10:46:51 +0530247 @test_tracker_info(uuid="15db5b7e-827e-4bc8-8e77-7fcce343a323")
Bindu Mahadevae923812017-04-12 22:57:49 +0000248 @TelephonyBaseTest.tel_test_wrap
249 def test_stress_toggle_wifi_call(self):
250 """Stress test to toggle WiFi in a loop, then perform WiFi connection
251 and cellular calls.
252
253 Steps:
254 1. Attach device to voice subscription network.
255 2. Connect to a WiFi network.
256 3. Toggle WiFi OFF and ON in a loop.
257 4. Verify device auto-connects to the WiFi network.
258 5. Verify device is attached to voice network.
259 6. Make short sequence voice calls.
260
261 """
262 self.setup_cellular_voice_calling()
263 self.connect_to_wifi(self.dut, self.network)
264 self.stress_toggle_wifi(self.stress_count)
265 self.validate_cellular_and_wifi()
Bindu Mahadev6077af22018-02-08 15:04:51 -0800266 return True
Bindu Mahadevae923812017-04-12 22:57:49 +0000267
268
Girish Moturu43faec82017-06-12 10:46:51 +0530269 @test_tracker_info(uuid="80a2f1bf-5e41-453a-9b8e-be3b41d4d313")
Bindu Mahadevae923812017-04-12 22:57:49 +0000270 @TelephonyBaseTest.tel_test_wrap
271 def test_stress_toggle_airplane_call(self):
272 """Stress test to toggle Airplane mode in a loop, then perform WiFi and
273 cellular calls.
274
275 Steps:
276 1. Attach device to voice subscription network.
277 2. Connect to a WiFi network.
278 3. Toggle Airplane mode OFF and ON in a loop.
279 4. Verify device auto-connects to the WiFi network.
280 5. Verify device is attached to voice network.
281 6. Make short sequence voice calls.
282
283 """
284 self.setup_cellular_voice_calling()
285 self.connect_to_wifi(self.dut, self.network)
286 self.stress_toggle_airplane(self.stress_count)
287 self.validate_cellular_and_wifi()
Bindu Mahadev6077af22018-02-08 15:04:51 -0800288 return True
Bindu Mahadevae923812017-04-12 22:57:49 +0000289
290
Girish Moturu43faec82017-06-12 10:46:51 +0530291 @test_tracker_info(uuid="b88ad3e7-6462-4280-ad57-22d0ac91fdd8")
Bindu Mahadevae923812017-04-12 22:57:49 +0000292 @TelephonyBaseTest.tel_test_wrap
293 def test_stress_toggle_airplane_and_wifi_call(self):
294 """Stress test to toggle Airplane and WiFi mode in a loop, then perform
295 WiFi connection and cellular calls.
296
297 Steps:
298 1. Attach device to voice subscription network.
299 2. Connect to a WiFi network.
300 3. Toggle Airplane mode ON.
301 4. Turn WiFi ON.
302 5. Toggle Airplane mode OFF.
303 6. Repeat 3, 4 & 5, in a loop.
304 7. Verify device auto-connects to the WiFi network.
305 8. Verify device is attached to voice network.
306 9. Make short sequence voice calls.
307
308 """
309 self.setup_cellular_voice_calling()
310 self.connect_to_wifi(self.dut, self.network)
Bindu Mahadev65d547e2017-05-19 23:58:32 +0000311 self.stress_toggle_airplane_and_wifi(self.stress_count)
Bindu Mahadevae923812017-04-12 22:57:49 +0000312 self.validate_cellular_and_wifi()
Bindu Mahadev6077af22018-02-08 15:04:51 -0800313 return True