• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3.4
2#
3#   Copyright 2016 - Google
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"""
17    Test Script for epdg RF shield box related tests.
18"""
19
20import time
21from acts.test_decorators import test_tracker_info
22from acts.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
23from acts.test_utils.tel.tel_atten_utils import set_rssi
24from acts.test_utils.tel.tel_defines import CELL_WEAK_RSSI_VALUE
25from acts.test_utils.tel.tel_defines import INVALID_WIFI_RSSI
26from acts.test_utils.tel.tel_defines import MAX_RSSI_RESERVED_VALUE
27from acts.test_utils.tel.tel_defines import MIN_RSSI_RESERVED_VALUE
28from acts.test_utils.tel.tel_defines import WAIT_TIME_WIFI_RSSI_CALIBRATION_SCREEN_ON
29from acts.test_utils.tel.tel_defines import WAIT_TIME_WIFI_RSSI_CALIBRATION_WIFI_CONNECTED
30from acts.test_utils.tel.tel_defines import WFC_MODE_CELLULAR_PREFERRED
31from acts.test_utils.tel.tel_defines import WFC_MODE_WIFI_PREFERRED
32from acts.test_utils.tel.tel_defines import WIFI_WEAK_RSSI_VALUE
33from acts.test_utils.tel.tel_defines import SignalStrengthContainer
34from acts.test_utils.tel.tel_test_utils import ensure_phones_default_state
35from acts.test_utils.tel.tel_test_utils import ensure_phone_subscription
36from acts.test_utils.tel.tel_test_utils import ensure_wifi_connected
37from acts.test_utils.tel.tel_test_utils import set_wfc_mode
38from acts.test_utils.tel.tel_test_utils import wait_for_wifi_data_connection
39from acts.test_utils.tel.tel_test_utils import verify_internet_connection
40from TelLiveConnectivityMonitorBaseTest import TelLiveConnectivityMonitorBaseTest
41
42# Attenuator name
43ATTEN_NAME_FOR_WIFI_2G = 'wifi0'
44ATTEN_NAME_FOR_WIFI_5G = 'wifi1'
45ATTEN_NAME_FOR_CELL_3G = 'cell0'
46ATTEN_NAME_FOR_CELL_4G = 'cell1'
47
48# WiFi RSSI settings for ROVE_IN test
49WIFI_RSSI_FOR_ROVE_IN_TEST_PHONE_ROVE_IN = -60
50WIFI_RSSI_FOR_ROVE_IN_TEST_PHONE_NOT_ROVE_IN = -70
51
52# WiFi RSSI settings for ROVE_OUT test
53WIFI_RSSI_FOR_ROVE_OUT_TEST_PHONE_INITIAL_STATE = -60
54WIFI_RSSI_FOR_ROVE_OUT_TEST_PHONE_NOT_ROVE_OUT = -70
55WIFI_RSSI_FOR_ROVE_OUT_TEST_PHONE_ROVE_OUT = -90
56
57# WiFi RSSI settings for HAND_IN test
58WIFI_RSSI_FOR_HAND_IN_TEST_PHONE_NOT_HAND_IN = -80
59WIFI_RSSI_FOR_HAND_IN_TEST_PHONE_HAND_IN = -50
60
61# WiFi RSSI settings for HAND_OUT test
62WIFI_RSSI_FOR_HAND_OUT_TEST_PHONE_NOT_HAND_OUT = -60
63WIFI_RSSI_FOR_HAND_OUT_TEST_PHONE_HAND_OUT = -85
64
65CS_LINK_LOST = "Radio Link Lost"
66IMS_LINK_LOST = "Media Timeout"
67
68
69class TelLiveConnectivityMonitorMobilityTest(
70        TelLiveConnectivityMonitorBaseTest):
71    def __init__(self, controllers):
72        TelLiveConnectivityMonitorBaseTest.__init__(self, controllers)
73
74        self.attens = {}
75        for atten in self.attenuators:
76            self.attens[atten.path] = atten
77            atten.set_atten(atten.get_max_atten())  # Default all attens to max
78
79    def setup_class(self):
80        TelLiveConnectivityMonitorBaseTest.setup_class(self)
81
82        # Do WiFi RSSI calibration.
83        self.set_wifi_strong_cell_strong()
84
85        if not ensure_phone_subscription(self.log, self.dut):
86            self.dut.log.error("Failed to find valid subscription")
87            return False
88        if not ensure_wifi_connected(self.log, self.dut,
89                                     self.wifi_network_ssid,
90                                     self.wifi_network_pass):
91            self.dut.log.error("Fail to connect to WiFI")
92            return False
93        if (not wait_for_wifi_data_connection(self.log, self.dut, True)
94                or not verify_internet_connection(self.log, self.dut)):
95            self.dut.log.error("No Data on Wifi")
96            return False
97
98        # Delay WAIT_TIME_WIFI_RSSI_CALIBRATION_WIFI_CONNECTED after WiFi
99        # Connected to make sure WiFi RSSI reported value is correct.
100        time.sleep(WAIT_TIME_WIFI_RSSI_CALIBRATION_WIFI_CONNECTED)
101        # Turn On Screen and delay WAIT_TIME_WIFI_RSSI_CALIBRATION_SCREEN_ON
102        # then get WiFi RSSI to avoid WiFi RSSI report -127(invalid value).
103        self.dut.droid.wakeUpNow()
104        time.sleep(WAIT_TIME_WIFI_RSSI_CALIBRATION_SCREEN_ON)
105
106        setattr(self, "wifi_rssi_with_no_atten",
107                self.dut.droid.wifiGetConnectionInfo()['rssi'])
108        if self.wifi_rssi_with_no_atten == INVALID_WIFI_RSSI:
109            self.dut.log.error(
110                "Initial WiFi RSSI calibration value is wrong: -127.")
111            return False
112        self.dut.log.info("WiFi RSSI calibration info: atten=0, RSSI=%s",
113                          self.wifi_rssi_with_no_atten)
114        ensure_phones_default_state(self.log, [self.dut])
115
116        # Do Cellular RSSI calibration.
117        setattr(self, "cell_rssi_with_no_atten",
118                self.dut.droid.telephonyGetSignalStrength()[
119                    SignalStrengthContainer.SIGNAL_STRENGTH_LTE_DBM])
120        self.dut.log.info("Cellular RSSI calibration info: atten=0, RSSI=%s",
121                          self.cell_rssi_with_no_atten)
122        return True
123
124    def teardown_class(self):
125        self.dut.droid.telephonyStopTrackingSignalStrengthChange()
126        super().teardown_class()
127        return True
128
129    def setup_test(self):
130        super().setup_test()
131        self.set_wifi_strong_cell_strong()
132        return True
133
134    def teardown_test(self):
135        super().teardown_test()
136        self.set_wifi_strong_cell_strong()
137        return True
138
139    def set_wifi_strong_cell_strong(self):
140        self.log.info("--->Setting WiFi strong cell strong<---")
141        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0,
142                 MAX_RSSI_RESERVED_VALUE)
143        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0,
144                 MAX_RSSI_RESERVED_VALUE)
145        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0,
146                 MAX_RSSI_RESERVED_VALUE)
147        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0,
148                 MAX_RSSI_RESERVED_VALUE)
149        return True
150
151    def set_wifi_strong_cell_weak(self):
152        self.log.info("--->Setting WiFi strong cell weak<---")
153        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0,
154                 MAX_RSSI_RESERVED_VALUE)
155        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0,
156                 MAX_RSSI_RESERVED_VALUE)
157        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G],
158                 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE)
159        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G],
160                 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE)
161        return True
162
163    def set_wifi_strong_cell_absent(self):
164        self.log.info("--->Setting WiFi strong cell absent<---")
165        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0,
166                 MAX_RSSI_RESERVED_VALUE)
167        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0,
168                 MAX_RSSI_RESERVED_VALUE)
169        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0,
170                 MIN_RSSI_RESERVED_VALUE)
171        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0,
172                 MIN_RSSI_RESERVED_VALUE)
173        return True
174
175    def set_wifi_weak_cell_strong(self):
176        self.log.info("--->Setting WiFi weak cell strong<---")
177        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G],
178                 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE)
179        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G],
180                 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE)
181        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0,
182                 MAX_RSSI_RESERVED_VALUE)
183        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0,
184                 MAX_RSSI_RESERVED_VALUE)
185        return True
186
187    def set_wifi_weak_cell_weak(self):
188        self.log.info("--->Setting WiFi weak cell weak<---")
189        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G],
190                 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE)
191        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G],
192                 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE)
193        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G],
194                 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE)
195        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G],
196                 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE)
197        return True
198
199    def set_wifi_weak_cell_absent(self):
200        self.log.info("--->Setting WiFi weak cell absent<---")
201        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G],
202                 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE)
203        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G],
204                 self.wifi_rssi_with_no_atten, WIFI_WEAK_RSSI_VALUE)
205        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0,
206                 MIN_RSSI_RESERVED_VALUE)
207        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0,
208                 MIN_RSSI_RESERVED_VALUE)
209        return True
210
211    def set_wifi_absent_cell_strong(self):
212        self.log.info("--->Setting WiFi absent cell strong<---")
213        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0,
214                 MIN_RSSI_RESERVED_VALUE)
215        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0,
216                 MIN_RSSI_RESERVED_VALUE)
217        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0,
218                 MAX_RSSI_RESERVED_VALUE)
219        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0,
220                 MAX_RSSI_RESERVED_VALUE)
221        return True
222
223    def set_wifi_absent_cell_weak(self):
224        self.log.info("--->Setting WiFi absent cell weak<---")
225        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0,
226                 MIN_RSSI_RESERVED_VALUE)
227        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0,
228                 MIN_RSSI_RESERVED_VALUE)
229        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G],
230                 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE)
231        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G],
232                 self.cell_rssi_with_no_atten, CELL_WEAK_RSSI_VALUE)
233        return True
234
235    def set_wifi_absent_cell_absent(self):
236        self.log.info("--->Setting WiFi absent cell absent<---")
237        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_2G], 0,
238                 MIN_RSSI_RESERVED_VALUE)
239        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_WIFI_5G], 0,
240                 MIN_RSSI_RESERVED_VALUE)
241        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_3G], 0,
242                 MIN_RSSI_RESERVED_VALUE)
243        set_rssi(self.log, self.attens[ATTEN_NAME_FOR_CELL_4G], 0,
244                 MIN_RSSI_RESERVED_VALUE)
245        return True
246
247    """ Tests Begin """
248
249    @test_tracker_info(uuid="d474725b-c34d-4686-8b5f-c0d4733a0cc1")
250    @TelephonyBaseTest.tel_test_wrap
251    def test_volte_call_drop_by_poor_signals(self):
252        return self.forced_call_drop_test(
253            setup="volte",
254            triggers=[
255                "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong"
256            ],
257            expected_drop_reason=IMS_LINK_LOST)
258
259    @test_tracker_info(uuid="7f62f1c0-6d9e-4e7e-812f-b1c60d2f4b41")
260    @TelephonyBaseTest.tel_test_wrap
261    def test_csfb_call_drop_by_poor_signals(self):
262        return self.forced_call_drop_test(
263            setup="csfb",
264            triggers=[
265                "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong"
266            ],
267            expected_drop_reason=CS_LINK_LOST)
268
269    @test_tracker_info(uuid="8d1c8c44-be54-43ec-892c-c3f41855c7c8")
270    @TelephonyBaseTest.tel_test_wrap
271    def test_3g_call_drop_by_poor_signal(self):
272        return self.forced_call_drop_test(
273            setup="3g",
274            triggers=[
275                "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong"
276            ],
277            expected_drop_reason=CS_LINK_LOST)
278
279    @test_tracker_info(uuid="66e01cb3-3bea-4d08-9ab4-7f22790c57b1")
280    @TelephonyBaseTest.tel_test_wrap
281    def test_wfc_apm_call_drop_by_poor_signal(self):
282        return self.forced_call_drop_test(
283            setup="wfc_apm",
284            triggers=[
285                "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong"
286            ],
287            expected_drop_reason=IMS_LINK_LOST)
288
289    @test_tracker_info(uuid="669e9f97-6931-403a-a13d-4f179bd4406f")
290    @TelephonyBaseTest.tel_test_wrap
291    def test_wfc_non_apm_call_drop_by_poor_signal(self):
292        self.setup_wfc_non_apm()
293        return self.forced_call_drop_test(
294            setup="wfc_non_apm",
295            triggers=[
296                "set_wifi_absent_cell_absent", "set_wifi_strong_cell_strong"
297            ],
298            expected_drop_reason=IMS_LINK_LOST)
299
300    @test_tracker_info(uuid="c7619788-2357-4c49-a754-50ffaf433d59")
301    @TelephonyBaseTest.tel_test_wrap
302    def test_volte_handover_to_wfc_then_hangup(self):
303        self.connect_to_wifi()
304        self.enable_wfc()
305        set_wfc_mode(self.log, self.dut, WFC_MODE_CELLULAR_PREFERRED)
306        self.setup_volte()
307        return self.call_setup_and_connectivity_monitor_checking(
308            setup="volte",
309            handover="wfc_non_apm",
310            triggers=["set_wifi_strong_cell_absent"],
311            expected_drop_reason=None,
312            expected_trouble=None,
313            expected_action=None)
314
315    @test_tracker_info(uuid="c10c8406-6a0c-4039-b2ce-3782593774f2")
316    @TelephonyBaseTest.tel_test_wrap
317    def test_csfb_handover_to_wfc_then_hangup(self):
318        self.setup_csfb()
319        self.connect_to_wifi()
320        self.enable_wfc()
321        self.set_wifi_absent_cell_strong()
322        return self.call_setup_and_connectivity_monitor_checking(
323            setup="csfb",
324            handover="wfc_non_apm",
325            triggers=[
326                "set_wifi_strong_cell_strong", "connect_to_wifi",
327                "is_wfc_enabled", "set_wifi_strong_cell_absent"
328            ],
329            expected_drop_reason=None,
330            expected_trouble=None,
331            expected_action=None)
332
333    @test_tracker_info(uuid="fcb62ea3-3a39-407c-90d8-21896c981ef4")
334    @TelephonyBaseTest.tel_test_wrap
335    def test_3g_handover_to_wfc_then_hangup(self):
336        self.setup_3g()
337        self.connect_to_wifi()
338        self.enable_wfc()
339        set_wfc_mode(self.log, self.dut, WFC_MODE_CELLULAR_PREFERRED)
340        if not self.is_wfc_enabled():
341            self.dut.log.error("WFC is not enabled")
342            return False
343        return self.call_setup_and_connectivity_monitor_checking(
344            setup="3g",
345            handover="wfc_non_apm",
346            triggers=["set_wifi_strong_cell_absent"],
347            expected_drop_reason=None,
348            expected_trouble=None,
349            expected_action=None)
350
351    @test_tracker_info(uuid="85f32373-d1b2-4763-8812-d7ff43a9b3e6")
352    @TelephonyBaseTest.tel_test_wrap
353    def test_wfc_handover_to_volte_then_hangup(self):
354        self.setup_volte()
355        self.connect_to_wifi()
356        self.enable_wfc()
357        self.set_wifi_strong_cell_absent()
358        if not self.is_wfc_enabled():
359            self.dut.log.error("WFC is not enabled")
360            return False
361        return self.call_setup_and_connectivity_monitor_checking(
362            setup="wfc_non_apm",
363            handover="volte",
364            triggers=[
365                "set_wifi_strong_cell_strong", "set_wifi_absent_cell_strong"
366            ],
367            expected_drop_reason=None,
368            expected_trouble=None,
369            expected_action=None)
370
371    @test_tracker_info(uuid="c3dee2ba-1637-4382-97a7-ec9ca795f3dc")
372    @TelephonyBaseTest.tel_test_wrap
373    def test_wfc_handover_to_volte_then_call_drop(self):
374        self.setup_volte()
375        self.connect_to_wifi()
376        self.enable_wfc()
377        self.set_wifi_strong_cell_absent()
378        if not self.is_wfc_enabled():
379            self.dut.log.error("WFC is not enabled")
380            return False
381        return self.call_drop_test(
382            setup="wfc_non_apm",
383            handover="volte",
384            count=1,
385            triggers=[
386                "set_wifi_strong_cell_strong", "set_wifi_absent_cell_strong",
387                "set_wifi_absent_cell_absent"
388            ],
389            expected_drop_reason=IMS_LINK_LOST,
390            expected_trouble=None,
391            expected_action=None)
392
393    @test_tracker_info(uuid="90bc318a-b8ba-45c9-8d8f-e642eeb00460")
394    @TelephonyBaseTest.tel_test_wrap
395    def test_wfc_handover_to_csfb_then_call_drop(self):
396        self.setup_csfb()
397        self.set_wifi_strong_cell_absent()
398        self.connect_to_wifi()
399        self.enable_wfc()
400        if not self.is_wfc_enabled():
401            self.dut.log.error("WFC is not enabled")
402            return False
403        return self.call_drop_test(
404            setup="wfc_apm",
405            handover="csfb",
406            count=1,
407            triggers=[
408                "set_wifi_strong_cell_strong", "set_wifi_absent_cell_strong",
409                "set_wifi_absent_cell_absent"
410            ],
411            expected_drop_reason=CS_LINK_LOST,
412            expected_trouble=None,
413            expected_action=None)
414
415    @test_tracker_info(uuid="0557709e-6d82-4c66-b622-6f36db8bdcc2")
416    @TelephonyBaseTest.tel_test_wrap
417    def test_volte_handover_to_wfc_then_call_drop(self):
418        self.setup_volte()
419        self.connect_to_wifi()
420        self.enable_wfc()
421        self.set_wifi_absent_cell_strong()
422        return self.call_drop_test(
423            setup="volte",
424            handover="wfc_non_apm",
425            count=1,
426            triggers=[
427                "set_wifi_strong_cell_strong", "connect_to_wifi",
428                "is_wfc_enabled", "set_wifi_strong_cell_absent",
429                "set_wifi_absent_cell_absent"
430            ],
431            expected_drop_reason=IMS_LINK_LOST,
432            expected_trouble=None,
433            expected_action=None)
434
435    @test_tracker_info(uuid="3453ed14-8227-4050-96f1-e9ac7973df3b")
436    @TelephonyBaseTest.tel_test_wrap
437    def test_csfb_handover_to_wfc_then_call_drop(self):
438        self.setup_csfb()
439        self.connect_to_wifi()
440        self.enable_wfc()
441        self.set_wifi_absent_cell_strong()
442        return self.call_drop_test(
443            setup="csfb",
444            handover="wfc",
445            count=1,
446            triggers=[
447                "set_wifi_strong_cell_strong", "connect_to_wifi",
448                "is_wfc_enabled", "set_wifi_strong_cell_absent",
449                "set_wifi_absent_cell_absent"
450            ],
451            expected_drop_reason=IMS_LINK_LOST,
452            expected_trouble=None,
453            expected_action=None)
454
455    @test_tracker_info(uuid="68cc68db-c60b-4c4a-a974-8e0d1fa211f2")
456    @TelephonyBaseTest.tel_test_wrap
457    def test_3g_handover_to_wfc_then_call_drop(self):
458        self.setup_3g()
459        self.connect_to_wifi()
460        self.enable_wfc()
461        self.set_wifi_absent_cell_strong()
462        return self.call_drop_test(
463            setup="3g",
464            handover="wfc_non_apm",
465            count=1,
466            triggers=[
467                "set_wifi_strong_cell_strong", "connect_to_wifi",
468                "is_wfc_enabled", "set_wifi_strong_cell_absent",
469                "set_wifi_absent_cell_absent"
470            ],
471            expected_drop_reason=IMS_LINK_LOST,
472            expected_trouble=None,
473            expected_action=None)
474
475
476""" Tests End """
477