• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/usr/bin/env python3.4
2#
3#   Copyright 2020 - 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 CellBroadcast Module Test
18"""
19
20import xml.etree.ElementTree as ET
21import time
22
23from acts import signals
24from acts.test_decorators import test_tracker_info
25from acts.utils import load_config
26from acts_contrib.test_utils.tel.TelephonyBaseTest import TelephonyBaseTest
27from acts_contrib.test_utils.tel.tel_defines import CARRIER_TEST_CONF_XML_PATH
28from acts_contrib.test_utils.tel.tel_defines import UAE
29from acts_contrib.test_utils.tel.tel_defines import JAPAN_KDDI
30from acts_contrib.test_utils.tel.tel_defines import NEWZEALAND
31from acts_contrib.test_utils.tel.tel_defines import HONGKONG
32from acts_contrib.test_utils.tel.tel_defines import CHILE
33from acts_contrib.test_utils.tel.tel_defines import PERU
34from acts_contrib.test_utils.tel.tel_defines import KOREA
35from acts_contrib.test_utils.tel.tel_defines import TAIWAN
36from acts_contrib.test_utils.tel.tel_defines import CANADA
37from acts_contrib.test_utils.tel.tel_defines import BRAZIL
38from acts_contrib.test_utils.tel.tel_defines import COLUMBIA
39from acts_contrib.test_utils.tel.tel_defines import EQUADOR
40from acts_contrib.test_utils.tel.tel_defines import PUERTORICO
41from acts_contrib.test_utils.tel.tel_defines import NETHERLANDS
42from acts_contrib.test_utils.tel.tel_defines import ROMANIA
43from acts_contrib.test_utils.tel.tel_defines import ESTONIA
44from acts_contrib.test_utils.tel.tel_defines import LITHUANIA
45from acts_contrib.test_utils.tel.tel_defines import LATVIA
46from acts_contrib.test_utils.tel.tel_defines import GREECE
47from acts_contrib.test_utils.tel.tel_defines import ITALY
48from acts_contrib.test_utils.tel.tel_defines import SOUTHAFRICA
49from acts_contrib.test_utils.tel.tel_defines import UK
50from acts_contrib.test_utils.tel.tel_defines import ISRAEL
51from acts_contrib.test_utils.tel.tel_defines import OMAN
52from acts_contrib.test_utils.tel.tel_defines import JAPAN_SOFTBANK
53from acts_contrib.test_utils.tel.tel_defines import SAUDIARABIA
54from acts_contrib.test_utils.tel.tel_defines import MAIN_ACTIVITY
55from acts_contrib.test_utils.tel.tel_defines import CBR_PACKAGE
56from acts_contrib.test_utils.tel.tel_defines import CBR_ACTIVITY
57from acts_contrib.test_utils.tel.tel_defines import CBR_TEST_APK
58from acts_contrib.test_utils.tel.tel_defines import MCC_MNC
59from acts_contrib.test_utils.tel.tel_defines import IMSI
60from acts_contrib.test_utils.tel.tel_defines import PLMN_ADB_PROPERTY
61from acts_contrib.test_utils.tel.tel_defines import WAIT_TIME_FOR_ALERTS_TO_POPULATE
62from acts_contrib.test_utils.tel.tel_defines import WAIT_TIME_FOR_UI
63from acts_contrib.test_utils.tel.tel_defines import SCROLL_DOWN
64from acts_contrib.test_utils.tel.tel_test_utils import reboot_device
65from acts_contrib.test_utils.tel.tel_test_utils import log_screen_shot
66from acts_contrib.test_utils.tel.tel_test_utils import get_screen_shot_log
67from acts_contrib.test_utils.net import ui_utils as uutils
68
69
70class CellBroadcastTest(TelephonyBaseTest):
71    def setup_class(self):
72        super().setup_class()
73        self.region_plmn_list_conf = self.user_params.get("region_plmn_list")
74        self.emergency_alert_settings_conf = self.user_params.get("emergency_alert_settings")
75        self.region_plmn_dict = load_config(self.region_plmn_list_conf)
76        self.emergency_alert_settings_dict = load_config(self.emergency_alert_settings_conf)
77        self._verify_cbr_test_apk_install(self.android_devices[0])
78
79    def setup_test(self):
80        TelephonyBaseTest.setup_test(self)
81        self.number_of_devices = 1
82
83    def teardown_class(self):
84        TelephonyBaseTest.teardown_class(self)
85
86
87    def _verify_cbr_test_apk_install(self, ad):
88        if not ad.is_apk_installed(CBR_TEST_APK):
89            cbrtestapk = self.user_params.get("cbrtestapk")
90            ad.adb.install("%s" % cbrtestapk)
91        else:
92            ad.log.debug("%s apk already installed", CBR_TEST_APK)
93
94
95    def _verify_device_in_specific_region(self, ad, region=None):
96        mccmnc = self.region_plmn_dict[region][MCC_MNC]
97        current_plmn = ad.adb.getprop(PLMN_ADB_PROPERTY)
98        if current_plmn == mccmnc:
99            ad.log.info("device in %s region", region.upper())
100            return True
101        else:
102            ad.log.info("device not in %s region", region.upper())
103            return False
104
105
106    def _get_toggle_value(self, ad, alert_text=None):
107        node = uutils.wait_and_get_xml_node(ad, timeout=30, text=alert_text)
108        return node.parentNode.nextSibling.firstChild.attributes['checked'].value
109
110
111    def _open_wea_settings_page(self, ad):
112        ad.adb.shell("am start -a %s -n %s/%s" % (MAIN_ACTIVITY, CBR_PACKAGE, CBR_ACTIVITY))
113
114
115    def _close_wea_settings_page(self, ad):
116        pid = ad.adb.shell("pidof %s" % CBR_PACKAGE)
117        ad.adb.shell("kill -9 %s" % pid, ignore_status=True)
118
119
120    def _set_device_to_specific_region(self, ad, region=None):
121        """
122        Args:
123            ad: AndroidDevice
124            country: name of country
125        """
126        # fetch country codes
127        mccmnc = self.region_plmn_dict[region][MCC_MNC]
128        imsi = self.region_plmn_dict[region][IMSI]
129        ad.log.info("setting device to %s with mccmnc %s imsi %s",
130                    region.upper(), mccmnc, imsi)
131
132        # update carrier xml file
133        carrier_test_conf = self.user_params.get("carrier_test_conf")
134        tree = ET.parse(carrier_test_conf)
135        root = tree.getroot()
136        root[1].attrib['value'] = mccmnc
137        root[2].attrib['value'] = imsi
138        tree.write(carrier_test_conf)
139
140        # push carrier xml to device
141        ad.adb.push("%s %s" % (carrier_test_conf, CARRIER_TEST_CONF_XML_PATH))
142
143        # reboot device
144        reboot_device(ad)
145        time.sleep(WAIT_TIME_FOR_ALERTS_TO_POPULATE)
146
147        # verify adb property
148        if not self._verify_device_in_specific_region(ad, region):
149            raise signals.TestSkip("unable to set device to %s region" % region.upper())
150        return True
151
152
153    def _verify_wea_default_settings(self, ad, region=None):
154        result = True
155        for key, value in self.emergency_alert_settings_dict[region].items():
156            alert_text = key
157            alert_value = value["default_value"]
158            self._open_wea_settings_page(ad)
159            # scroll till bottom
160            if not uutils.has_element(ad, text=alert_text):
161                for _ in range(3):
162                    ad.adb.shell(SCROLL_DOWN)
163                if not uutils.has_element(ad, text=alert_text):
164                    ad.log.error("UI - %s missing", alert_text)
165                    result = False
166                    continue
167            current_value = self._get_toggle_value(ad, alert_text)
168            if current_value == alert_value:
169                ad.log.info("UI - %s, default: %s",
170                            alert_text, alert_value)
171            else:
172                ad.log.error("UI - %s, default: %s, expected: %s",
173                             alert_text, current_value, alert_value)
174                result = False
175        return result
176
177
178    def _verify_wea_toggle_settings(self, ad, region=None):
179        result = True
180        for key, value in self.emergency_alert_settings_dict[region].items():
181            alert_text = key
182            alert_toggle = value["toggle_avail"]
183            if alert_toggle == "true":
184                self._open_wea_settings_page(ad)
185                if not uutils.has_element(ad, text=alert_text):
186                    for _ in range(3):
187                        ad.adb.shell(SCROLL_DOWN)
188                    if not uutils.has_element(ad, text=alert_text):
189                        ad.log.error("UI - %s missing", alert_text)
190                        result = False
191                        continue
192                before_toggle = self._get_toggle_value(ad, alert_text)
193                uutils.wait_and_click(ad, text=alert_text)
194                after_toggle = self._get_toggle_value(ad, alert_text)
195                if before_toggle == after_toggle:
196                    for _ in range(3):
197                        ad.adb.shell(SCROLL_DOWN)
198                    uutils.wait_and_click(ad, text=alert_text)
199                    after_toggle = self._get_toggle_value(ad, alert_text)
200                    if before_toggle == after_toggle:
201                        ad.log.error("UI - fail to toggle %s", alert_text)
202                        result = False
203                else:
204                    uutils.wait_and_click(ad, text=alert_text)
205                    reset_toggle = self._get_toggle_value(ad, alert_text)
206                    if reset_toggle != before_toggle:
207                        ad.log.error("UI - fail to reset toggle %s", alert_text)
208                        result = False
209                    else:
210                        ad.log.info("UI - toggle verified for %s", alert_text)
211        return result
212
213
214    def _settings_test_flow(self, region):
215        ad = self.android_devices[0]
216        result = True
217        self._set_device_to_specific_region(ad, region)
218        time.sleep(WAIT_TIME_FOR_UI)
219        if not self._verify_wea_default_settings(ad, region):
220            result = False
221        log_screen_shot(ad, "default_settings_for_%s" % region)
222        self._close_wea_settings_page(ad)
223        if not self._verify_wea_toggle_settings(ad, region):
224            log_screen_shot(ad, "toggle_settings_for_%s" % region)
225            result = False
226        get_screen_shot_log(ad)
227        self._close_wea_settings_page(ad)
228        return result
229
230
231    """ Tests Begin """
232
233
234    @test_tracker_info(uuid="a4df03a7-2e44-4f8a-8d62-18435d92fc75")
235    @TelephonyBaseTest.tel_test_wrap
236    def test_default_alert_settings_uae(self):
237        """ Verifies Wireless Emergency Alert settings for UAE
238
239        configures the device to UAE
240        verifies alert names and its default values
241        toggles the alert twice if available
242
243        Returns:
244            True if pass; False if fail and collects screenshot
245        """
246        return self._settings_test_flow(UAE)
247
248
249    @test_tracker_info(uuid="fd461335-21c0-470c-aca7-74c8ebb67711")
250    @TelephonyBaseTest.tel_test_wrap
251    def test_default_alert_settings_japan_kddi(self):
252        """ Verifies Wireless Emergency Alert settings for Japan (KDDI)
253
254        configures the device to KDDI carrier on Japan
255        verifies alert names and its default values
256        toggles the alert twice if available
257
258        Returns:
259            True if pass; False if fail and collects screenshot
260        """
261        return self._settings_test_flow(JAPAN_KDDI)
262
263
264    @test_tracker_info(uuid="63806dbe3-3cce-4b03-b92c-18529f81b7c5")
265    @TelephonyBaseTest.tel_test_wrap
266    def test_default_alert_settings_newzealand(self):
267        """ Verifies Wireless Emergency Alert settings for NZ
268
269        configures the device to NZ
270        verifies alert names and its default values
271        toggles the alert twice if available
272
273        Returns:
274            True if pass; False if fail and collects screenshot
275        """
276        return self._settings_test_flow(NEWZEALAND)
277
278
279    @test_tracker_info(uuid="426a295e-f64b-43f7-a0df-3959f07ff568")
280    @TelephonyBaseTest.tel_test_wrap
281    def test_default_alert_settings_hongkong(self):
282        """ Verifies Wireless Emergency Alert settings for HongKong
283
284        configures the device to HongKong
285        verifies alert names and its default values
286        toggles the alert twice if available
287
288        Returns:
289            True if pass; False if fail and collects screenshot
290        """
291        return self._settings_test_flow(HONGKONG)
292
293
294    @test_tracker_info(uuid="d9e2dca2-4965-48d5-9d79-352c4ccf9e0f")
295    @TelephonyBaseTest.tel_test_wrap
296    def test_default_alert_settings_chile(self):
297        """ Verifies Wireless Emergency Alert settings for Chile
298
299        configures the device to Chile
300        verifies alert names and its default values
301        toggles the alert twice if available
302
303        Returns:
304            True if pass; False if fail and collects screenshot
305        """
306        return self._settings_test_flow(CHILE)
307
308
309    @test_tracker_info(uuid="77cff297-fe3b-4b4c-b502-5324b4e91506")
310    @TelephonyBaseTest.tel_test_wrap
311    def test_default_alert_settings_peru(self):
312        """ Verifies Wireless Emergency Alert settings for Peru
313
314        configures the device to Peru
315        verifies alert names and its default values
316        toggles the alert twice if available
317
318        Returns:
319            True if pass; False if fail and collects screenshot
320        """
321        return self._settings_test_flow(PERU)
322
323
324    @test_tracker_info(uuid="4c3c4e65-c624-4eba-9a81-263f4ee01e12")
325    @TelephonyBaseTest.tel_test_wrap
326    def test_default_alert_settings_korea(self):
327        """ Verifies Wireless Emergency Alert settings for Korea
328
329        configures the device to Korea
330        verifies alert names and its default values
331        toggles the alert twice if available
332
333        Returns:
334            True if pass; False if fail and collects screenshot
335        """
336        return self._settings_test_flow(KOREA)
337
338
339    @test_tracker_info(uuid="fbaf258e-b596-4bfa-a20f-4b93fc4ccc4c")
340    @TelephonyBaseTest.tel_test_wrap
341    def test_default_alert_settings_taiwan(self):
342        """ Verifies Wireless Emergency Alert settings for Taiwan
343
344        configures the device to Taiwan
345        verifies alert names and its default values
346        toggles the alert twice if available
347
348        Returns:
349            True if pass; False if fail and collects screenshot
350        """
351        return self._settings_test_flow(TAIWAN)
352
353
354    @test_tracker_info(uuid="3f8e4110-a7d3-4b3b-ac2b-36ea17cfc141")
355    @TelephonyBaseTest.tel_test_wrap
356    def test_default_alert_settings_canada(self):
357        """ Verifies Wireless Emergency Alert settings for Canada
358
359        configures the device to Canada
360        verifies alert names and its default values
361        toggles the alert twice if available
362
363        Returns:
364            True if pass; False if fail and collects screenshot
365        """
366        return self._settings_test_flow(CANADA)
367
368
369    @test_tracker_info(uuid="fa0cd219-b0f2-4a38-8733-cd4212a954c5")
370    @TelephonyBaseTest.tel_test_wrap
371    def test_default_alert_settings_brazil(self):
372        """ Verifies Wireless Emergency Alert settings for Brazil
373
374        configures the device to Brazil
375        verifies alert names and its default values
376        toggles the alert twice if available
377
378        Returns:
379            True if pass; False if fail and collects screenshot
380        """
381        return self._settings_test_flow(BRAZIL)
382
383
384    @test_tracker_info(uuid="581ecebe-9f68-4270-ab5d-182b1ee4e13b")
385    @TelephonyBaseTest.tel_test_wrap
386    def test_default_alert_settings_columbia(self):
387        """ Verifies Wireless Emergency Alert settings for Columbia
388
389        configures the device to Columbia
390        verifies alert names and its default values
391        toggles the alert twice if available
392
393        Returns:
394            True if pass; False if fail and collects screenshot
395        """
396        return self._settings_test_flow(COLUMBIA)
397
398
399    @test_tracker_info(uuid="2ebfc05b-3512-4eff-9c09-5d8f49fe0b5e")
400    @TelephonyBaseTest.tel_test_wrap
401    def test_default_alert_settings_equador(self):
402        """ Verifies Wireless Emergency Alert settings for Equador
403
404        configures the device to Equador
405        verifies alert names and its default values
406        toggles the alert twice if available
407
408        Returns:
409            True if pass; False if fail and collects screenshot
410        """
411        return self._settings_test_flow(EQUADOR)
412
413
414    @test_tracker_info(uuid="96628975-a23f-47f7-ab18-1aa7a7dc08b5")
415    @TelephonyBaseTest.tel_test_wrap
416    def test_default_alert_settings_puertorico(self):
417        """ Verifies Wireless Emergency Alert settings for Puertorico
418
419        configures the device to Puertorico
420        verifies alert names and its default values
421        toggles the alert twice if available
422
423        Returns:
424            True if pass; False if fail and collects screenshot
425        """
426        return self._settings_test_flow(PUERTORICO)
427
428
429    @test_tracker_info(uuid="9f73f7ec-cb2a-45e5-8829-db14798dcdac")
430    @TelephonyBaseTest.tel_test_wrap
431    def test_default_alert_settings_netherlands(self):
432        """ Verifies Wireless Emergency Alert settings for Netherlands
433
434        configures the device to Netherlands
435        verifies alert names and its default values
436        toggles the alert twice if available
437
438        Returns:
439            True if pass; False if fail and collects screenshot
440        """
441        return self._settings_test_flow(NETHERLANDS)
442
443
444    @test_tracker_info(uuid="b3caf3b4-3024-4431-9a7a-4982e20b178b")
445    @TelephonyBaseTest.tel_test_wrap
446    def test_default_alert_settings_romania(self):
447        """ Verifies Wireless Emergency Alert settings for Romania
448
449        configures the device to Romania
450        verifies alert names and its default values
451        toggles the alert twice if available
452
453        Returns:
454            True if pass; False if fail and collects screenshot
455        """
456        return self._settings_test_flow(ROMANIA)
457
458
459    @test_tracker_info(uuid="081a5329-d23f-4df8-b472-d4f3ca5ee3c1")
460    @TelephonyBaseTest.tel_test_wrap
461    def test_default_alert_settings_estonia(self):
462        """ Verifies Wireless Emergency Alert settings for Estonia
463
464        configures the device to Estonia
465        verifies alert names and its default values
466        toggles the alert twice if available
467
468        Returns:
469            True if pass; False if fail and collects screenshot
470        """
471        return self._settings_test_flow(ESTONIA)
472
473
474    @test_tracker_info(uuid="7e0d3b96-f11c-44d9-b3a3-9ce9e21bf37d")
475    @TelephonyBaseTest.tel_test_wrap
476    def test_default_alert_settings_lithuania(self):
477        """ Verifies Wireless Emergency Alert settings for Lithuania
478
479        configures the device to Lithuania
480        verifies alert names and its default values
481        toggles the alert twice if available
482
483        Returns:
484            True if pass; False if fail and collects screenshot
485        """
486        return self._settings_test_flow(LITHUANIA)
487
488
489    @test_tracker_info(uuid="b40648a0-d04f-4c45-9051-76e64756ef00")
490    @TelephonyBaseTest.tel_test_wrap
491    def test_default_alert_settings_latvia(self):
492        """ Verifies Wireless Emergency Alert settings for Latvia
493
494        configures the device to Latvia
495        verifies alert names and its default values
496        toggles the alert twice if available
497
498        Returns:
499            True if pass; False if fail and collects screenshot
500        """
501        return self._settings_test_flow(LATVIA)
502
503
504    @test_tracker_info(uuid="9488a6ef-2903-421d-adec-fd65df3aac60")
505    @TelephonyBaseTest.tel_test_wrap
506    def test_default_alert_settings_greece(self):
507        """ Verifies Wireless Emergency Alert settings for Greece
508
509        configures the device to Greece
510        verifies alert names and its default values
511        toggles the alert twice if available
512
513        Returns:
514            True if pass; False if fail and collects screenshot
515        """
516        return self._settings_test_flow(GREECE)
517
518
519    @test_tracker_info(uuid="53cf276e-8617-45ce-b3f5-e8995b4be279")
520    @TelephonyBaseTest.tel_test_wrap
521    def test_default_alert_settings_italy(self):
522        """ Verifies Wireless Emergency Alert settings for Italy
523
524        configures the device to Italy
525        verifies alert names and its default values
526        toggles the alert twice if available
527
528        Returns:
529            True if pass; False if fail and collects screenshot
530        """
531        return self._settings_test_flow(ITALY)
532
533
534    @test_tracker_info(uuid="a1a57aa8-c229-4f04-bc65-1f17688159a1")
535    @TelephonyBaseTest.tel_test_wrap
536    def test_default_alert_settings_southafrica(self):
537        """ Verifies Wireless Emergency Alert settings for SouthAfrica
538
539        configures the device to SouthAfrica
540        verifies alert names and its default values
541        toggles the alert twice if available
542
543        Returns:
544            True if pass; False if fail and collects screenshot
545        """
546        return self._settings_test_flow(SOUTHAFRICA)
547
548
549    @test_tracker_info(uuid="a0ed231e-07e0-4dc8-a071-14ec7818e96f")
550    @TelephonyBaseTest.tel_test_wrap
551    def test_default_alert_settings_uk(self):
552        """ Verifies Wireless Emergency Alert settings for UK
553
554        configures the device to UK
555        verifies alert names and its default values
556        toggles the alert twice if available
557
558        Returns:
559            True if pass; False if fail and collects screenshot
560        """
561        return self._settings_test_flow(UK)
562
563
564    @test_tracker_info(uuid="00c77647-0986-41f8-9202-cc0e2e51e278")
565    @TelephonyBaseTest.tel_test_wrap
566    def test_default_alert_settings_israel(self):
567        """ Verifies Wireless Emergency Alert settings for Israel
568
569        configures the device to Israel
570        verifies alert names and its default values
571        toggles the alert twice if available
572
573        Returns:
574            True if pass; False if fail and collects screenshot
575        """
576        return self._settings_test_flow(ISRAEL)
577
578
579    @test_tracker_info(uuid="7f2ca9f5-31f6-4477-9383-5acd1ed2598f")
580    @TelephonyBaseTest.tel_test_wrap
581    def test_default_alert_settings_oman(self):
582        """ Verifies Wireless Emergency Alert settings for Oman
583
584        configures the device to Oman
585        verifies alert names and its default values
586        toggles the alert twice if available
587
588        Returns:
589            True if pass; False if fail and collects screenshot
590        """
591        return self._settings_test_flow(OMAN)
592
593
594    @test_tracker_info(uuid="97525c27-3cba-4472-b00d-d5dabc5a2fe5")
595    @TelephonyBaseTest.tel_test_wrap
596    def test_default_alert_settings_japan_softbank(self):
597        """ Verifies Wireless Emergency Alert settings for Japan (Softbank)
598
599        configures the device to Japan (Softbank)
600        verifies alert names and its default values
601        toggles the alert twice if available
602
603        Returns:
604            True if pass; False if fail and collects screenshot
605        """
606        return self._settings_test_flow(JAPAN_SOFTBANK)
607
608
609    @test_tracker_info(uuid="109494df-3ae2-4b77-ae52-fb0c22e654c8")
610    @TelephonyBaseTest.tel_test_wrap
611    def test_default_alert_settings_saudiarabia(self):
612        """ Verifies Wireless Emergency Alert settings for SaudiArabia
613
614        configures the device to SaudiArabia
615        verifies alert names and its default values
616        toggles the alert twice if available
617
618        Returns:
619            True if pass; False if fail and collects screenshot
620        """
621        return self._settings_test_flow(SAUDIARABIA)
622