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