Example #1
0
 def _phone_setup_gsm(self, ad):
     return ensure_network_rat(
         self.log,
         ad,
         NETWORK_MODE_GSM_ONLY,
         RAT_FAMILY_GSM,
         toggle_apm_after_setting=True)
Example #2
0
 def _phone_setup_1x(self, ad):
     return ensure_network_rat(
         self.log,
         ad,
         NETWORK_MODE_CDMA,
         RAT_FAMILY_CDMA2000,
         toggle_apm_after_setting=True)
Example #3
0
 def _phone_setup_lte_1x(self, ad):
     return ensure_network_rat(
         self.log,
         ad,
         NETWORK_MODE_LTE_CDMA_EVDO,
         RAT_FAMILY_LTE,
         toggle_apm_after_setting=True)
Example #4
0
 def _phone_setup_wcdma(self, ad):
     return ensure_network_rat(
         self.log,
         ad,
         NETWORK_MODE_GSM_UMTS,
         RAT_FAMILY_UMTS,
         toggle_apm_after_setting=True)
 def _phone_setup_lte_wcdma(self, ad):
     toggle_volte(self.log, ad, False)
     return ensure_network_rat(self.log,
                               ad,
                               NETWORK_MODE_LTE_GSM_WCDMA,
                               RAT_FAMILY_LTE,
                               toggle_apm_after_setting=True)
Example #6
0
 def _phone_setup_volte(self, ad):
     ad.droid.telephonyToggleDataConnection(True)
     toggle_volte(self.log, ad, True)
     return ensure_network_rat(self.log,
                               ad,
                               NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA,
                               RAT_FAMILY_LTE,
                               toggle_apm_after_setting=True)
    def _send_receive_etws_message(self, set_simulation_func, rat, message_id,
                                   warning_message):
        try:
            [self.bts1] = set_simulation_func(self.anritsu, self.user_params,
                                              self.ad.sim_card)
            set_usim_parameters(self.anritsu, self.ad.sim_card)
            if rat == RAT_LTE:
                set_post_sim_params(self.anritsu, self.user_params,
                                    self.ad.sim_card)
            self.anritsu.start_simulation()

            if rat == RAT_LTE:
                preferred_network_setting = NETWORK_MODE_LTE_GSM_WCDMA
                rat_family = RAT_FAMILY_LTE
            elif rat == RAT_WCDMA:
                self.bts1.wcdma_ctch = CTCHSetup.CTCH_ENABLE
                self.ad.droid.telephonyToggleDataConnection(False)
                preferred_network_setting = NETWORK_MODE_GSM_UMTS
                rat_family = RAT_FAMILY_UMTS
            elif rat == RAT_GSM:
                self.bts1.gsm_cbch = CBCHSetup.CBCH_ENABLE
                self.ad.droid.telephonyToggleDataConnection(False)
                preferred_network_setting = NETWORK_MODE_GSM_ONLY
                rat_family = RAT_FAMILY_GSM
            elif rat == RAT_1XRTT:
                preferred_network_setting = NETWORK_MODE_CDMA
                rat_family = RAT_FAMILY_CDMA2000
            else:
                self.log.error("No valid RAT provided for ETWS test.")
                return False

            if not ensure_network_rat(self.log,
                                      self.ad,
                                      preferred_network_setting,
                                      rat_family,
                                      toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        rat_family, preferred_network_setting))
                return False

            self.anritsu.wait_for_registration_state()
            if not etws_receive_verify_message_lte_wcdma(
                    self.log, self.ad, self.anritsu,
                    next(TelLabEtwsTest.SERIAL_NO), message_id,
                    warning_message):
                self.log.error(
                    "Phone {} Failed to receive ETWS message".format(
                        self.ad.serial))
                return False
        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during ETWS send/receive: " + str(e))
            return False
        return True
Example #8
0
    def _read_identity(self, set_simulation_func, rat, identity_type):
        try:
            self.anritsu.reset()
            self.anritsu.load_cell_paramfile(self.CELL_PARAM_FILE)
            set_simulation_func(self.anritsu, self.user_params,
                                self.ad.sim_card)
            self.anritsu.start_simulation()

            if rat == RAT_LTE:
                preferred_network_setting = NETWORK_MODE_LTE_GSM_WCDMA
                rat_family = RAT_FAMILY_LTE
            elif rat == RAT_WCDMA:
                preferred_network_setting = NETWORK_MODE_GSM_UMTS
                rat_family = RAT_FAMILY_UMTS
            elif rat == RAT_GSM:
                preferred_network_setting = NETWORK_MODE_GSM_ONLY
                rat_family = RAT_FAMILY_GSM
            elif rat == RAT_1XRTT:
                preferred_network_setting = NETWORK_MODE_CDMA
                rat_family = RAT_FAMILY_CDMA2000
            else:
                self.log.error("Invalid RAT - Please specify a valid RAT")
                return False

            self.ad.droid.telephonyToggleDataConnection(True)
            if not ensure_network_rat(self.log,
                                      self.ad,
                                      preferred_network_setting,
                                      rat_family,
                                      toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        rat_family, preferred_network_setting))
                return False
            self.anritsu.wait_for_registration_state()
            time.sleep(WAIT_TIME_ANRITSU_REG_AND_OPER)
            identity = read_ue_identity(self.log, self.ad, self.anritsu,
                                        identity_type)
            if identity is None:
                self.log.error("Phone {} Failed to get {}".format(
                    self.ad.serial, identity_type.value))
                return False
            else:
                self.log.info("{}".format(identity))
        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during reading identity: " + str(e))
            return False
        return True
Example #9
0
    def _setup_data(self, set_simulation_func, rat):
        try:
            [self.bts1] = set_simulation_func(self.anritsu, self.user_params,
                                              self.ad.sim_card)
            set_usim_parameters(self.anritsu, self.ad.sim_card)
            set_post_sim_params(self.anritsu, self.user_params,
                                self.ad.sim_card)
            if self.lte_bandwidth == 20:
                self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_20MHz
            elif self.lte_bandwidth == 15:
                self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_15MHz
            elif self.lte_bandwidth == 10:
                self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_10MHz
            else:
                self.bts1.bandwidth = BtsBandwidth.LTE_BANDWIDTH_5MHz

            self.anritsu.start_simulation()

            if rat == RAT_LTE:
                preferred_network_setting = NETWORK_MODE_LTE_CDMA_EVDO
                rat_family = RAT_FAMILY_LTE
            elif rat == RAT_WCDMA:
                preferred_network_setting = NETWORK_MODE_GSM_UMTS
                rat_family = RAT_FAMILY_UMTS
            elif rat == RAT_GSM:
                preferred_network_setting = NETWORK_MODE_GSM_ONLY
                rat_family = RAT_FAMILY_GSM
            elif rat == RAT_1XRTT:
                preferred_network_setting = NETWORK_MODE_CDMA
                rat_family = RAT_FAMILY_CDMA2000
            else:
                self.log.error("No valid RAT provided for SMS test.")
                return False

            if not ensure_network_rat(
                    self.log,
                    self.ad,
                    preferred_network_setting,
                    rat_family,
                    toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        rat_family, preferred_network_setting))
                return False

            self.anritsu.wait_for_registration_state()
            time.sleep(self.SETTLING_TIME)

            # Fetch IP address of the host machine
            cmd = "|".join(("ifconfig", "grep eth0 -A1", "grep inet",
                            "cut -d ':' -f2", "cut -d ' ' -f 1"))
            destination_ip = exe_cmd(cmd)
            destination_ip = (destination_ip.decode("utf-8")).split("\n")[0]
            self.log.info("Dest IP is %s", destination_ip)

            if not adb_shell_ping(self.ad, DEFAULT_PING_DURATION,
                                  destination_ip):
                self.log.error("Pings failed to Destination.")
                return False
            self.bts1.output_level = self.start_power_level

            # Power, iperf, file output, power change
            for iteration in range(1, self.MAX_ITERATIONS + 1):
                self.log.info("------- Current Iteration: %d / %d -------",
                              iteration, self.MAX_ITERATIONS)
                current_power = self.bts1.output_level
                self.log.info("Current Power Level is %s", current_power)

                self.ip_server.start()
                tput_dict = {"Uplink": 0, "Downlink": 0}
                if iperf_test_by_adb(
                        self.log,
                        self.ad,
                        destination_ip,
                        self.port_num,
                        True,
                        10,
                        rate_dict=tput_dict):
                    uplink = tput_dict["Uplink"]
                    downlink = tput_dict["Downlink"]
                else:
                    self.log.error("iperf failed to Destination.")
                    self.log.info("Iteration %d Failed", iteration)
                    if float(current_power) < -55.0:
                        return True
                    else:
                        return False
                self.ip_server.stop()

                self.log.info("Iteration %d Passed", iteration)
                self.logpath = os.path.join(logging.log_path, "power_tput.txt")
                line = "Power " + current_power + " DL TPUT " + str(downlink)
                with open(self.logpath, "a") as tput_file:
                    tput_file.write(line)
                    tput_file.write("\n")
                current_power = float(current_power)
                new_power = current_power - self.step_size
                self.log.info("Setting Power Level to %f", new_power)
                self.bts1.output_level = new_power

        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during Data procedure: " + str(e))
            return False
        return True
    def _send_receive_cmas_message(
            self,
            set_simulation_func,
            rat,
            message_id,
            warning_message,
            c2k_response_type=CMAS_C2K_RESPONSETYPE_SHELTER,
            c2k_severity=CMAS_C2K_SEVERITY_EXTREME,
            c2k_urgency=CMAS_C2K_URGENCY_IMMEDIATE,
            c2k_certainty=CMAS_C2K_CERTIANTY_OBSERVED):
        try:
            [self.bts1] = set_simulation_func(self.anritsu, self.user_params,
                                              self.ad.sim_card)
            set_usim_parameters(self.anritsu, self.ad.sim_card)
            self.anritsu.start_simulation()

            if rat == RAT_LTE:
                preferred_network_setting = NETWORK_MODE_LTE_GSM_WCDMA
                rat_family = RAT_FAMILY_LTE
            elif rat == RAT_WCDMA:
                self.bts1.wcdma_ctch = CTCHSetup.CTCH_ENABLE
                self.ad.droid.telephonyToggleDataConnection(False)
                preferred_network_setting = NETWORK_MODE_GSM_UMTS
                rat_family = RAT_FAMILY_UMTS
            elif rat == RAT_GSM:
                self.bts1.gsm_cbch = CBCHSetup.CBCH_ENABLE
                self.ad.droid.telephonyToggleDataConnection(False)
                preferred_network_setting = NETWORK_MODE_GSM_ONLY
                rat_family = RAT_FAMILY_GSM
            elif rat == RAT_1XRTT:
                preferred_network_setting = NETWORK_MODE_CDMA
                rat_family = RAT_FAMILY_CDMA2000
            else:
                self.log.error("No valid RAT provided for CMAS test.")
                return False

            if not ensure_network_rat(self.log,
                                      self.ad,
                                      preferred_network_setting,
                                      rat_family,
                                      toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        rat_family, preferred_network_setting))
                return False

            self.anritsu.wait_for_registration_state()
            if rat != RAT_1XRTT:
                if not cmas_receive_verify_message_lte_wcdma(
                        self.log, self.ad, self.anritsu,
                        next(TelLabCmasTest.SERIAL_NO), message_id,
                        warning_message):
                    self.log.error(
                        "Phone {} Failed to receive CMAS message".format(
                            self.ad.serial))
                    return False
            else:
                if not cmas_receive_verify_message_cdma1x(
                        self.log, self.ad, self.anritsu,
                        next(TelLabCmasTest.SERIAL_NO), message_id,
                        warning_message, c2k_response_type, c2k_severity,
                        c2k_urgency, c2k_certainty):
                    self.log.error(
                        "Phone {} Failed to receive CMAS message".format(
                            self.ad.serial))
                    return False
        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during CMAS send/receive: " + str(e))
            return False
        return True
    def _setup_sms(self,
                   set_simulation_func,
                   rat,
                   phone_number,
                   message,
                   mo_mt=DIRECTION_MOBILE_ORIGINATED):
        try:
            self.anritsu.reset()
            self.anritsu.load_cell_paramfile(self.CELL_PARAM_FILE)
            set_simulation_func(self.anritsu, self.user_params,
                                self.ad.sim_card)
            self.anritsu.start_simulation()

            if rat == RAT_LTE:
                preferred_network_setting = NETWORK_MODE_LTE_GSM_WCDMA
                rat_family = RAT_FAMILY_LTE
            elif rat == RAT_WCDMA:
                preferred_network_setting = NETWORK_MODE_GSM_UMTS
                rat_family = RAT_FAMILY_UMTS
            elif rat == RAT_GSM:
                preferred_network_setting = NETWORK_MODE_GSM_ONLY
                rat_family = RAT_FAMILY_GSM
            elif rat == RAT_1XRTT:
                preferred_network_setting = NETWORK_MODE_CDMA
                rat_family = RAT_FAMILY_CDMA2000
            else:
                self.log.error("No valid RAT provided for SMS test.")
                return False

            if not ensure_network_rat(self.log,
                                      self.ad,
                                      preferred_network_setting,
                                      rat_family,
                                      toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        rat_family, preferred_network_setting))
                return False

            self.anritsu.wait_for_registration_state()
            time.sleep(self.SETTLING_TIME)
            if mo_mt == DIRECTION_MOBILE_ORIGINATED:
                if not sms_mo_send(self.log, self.ad, self.virtualPhoneHandle,
                                   phone_number, message, rat):
                    self.log.error("Phone {} Failed to send SMS".format(
                        self.ad.serial))
                    return False
            else:
                if not sms_mt_receive_verify(self.log, self.ad,
                                             self.virtualPhoneHandle,
                                             phone_number, message, rat):
                    self.log.error("Phone {} Failed to receive MT SMS".format(
                        self.ad.serial))
                    return False

        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during emergency call procedure: " +
                           str(e))
            return False
        return True
Example #12
0
    def LTE_WCDMA_data_roaming(self, mcc, mnc):
        try:
            [self.bts1,
             self.bts2] = set_system_model_lte_wcdma(self.anritsu,
                                                     self.user_params,
                                                     self.ad.sim_card)
            set_usim_parameters(self.anritsu, self.ad.sim_card)
            self.bts1.mcc = mcc
            self.bts1.mnc = mnc
            self.bts2.mcc = mcc
            self.bts2.mnc = mnc
            self.bts2.packet_rate = BtsPacketRate.WCDMA_DLHSAUTO_REL7_ULHSAUTO
            self.anritsu.start_simulation()
            self.bts2.service_state = BtsServiceState.SERVICE_STATE_OUT
            self.log.info("Toggle Mobile Data On")
            self.ad.droid.telephonyToggleDataConnection(True)
            if not ensure_network_rat(self.log,
                                      self.ad,
                                      NETWORK_MODE_LTE_GSM_WCDMA,
                                      RAT_FAMILY_LTE,
                                      toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        RAT_FAMILY_LTE, NETWORK_MODE_LTE_GSM_WCDMA))
                return False
            toggle_cell_data_roaming(self.ad, True)
            self.anritsu.wait_for_registration_state(1)  # for BTS1 LTE

            time.sleep(TIME_TO_WAIT_BEFORE_PING)
            if not adb_shell_ping(self.ad, PING_DURATION, PING_TARGET):
                self.log.error(
                    "Test Fail: Phone {} can not ping {} with Data Roaming On".
                    format(self.ad.serial, PING_TARGET))
                return False
            toggle_cell_data_roaming(self.ad, False)
            time.sleep(TIME_TO_WAIT_BEFORE_PING)
            if adb_shell_ping(self.ad, PING_DURATION, PING_TARGET):
                self.log.error(
                    "Test Fail: Phone {} can ping {} with Data Roaming Off".
                    format(self.ad.serial, PING_TARGET))
                return False

            toggle_airplane_mode(self.log, self.ad, True)
            time.sleep(2)
            self.bts2.service_state = BtsServiceState.SERVICE_STATE_IN
            self.bts1.service_state = BtsServiceState.SERVICE_STATE_OUT

            toggle_airplane_mode(self.log, self.ad, False)
            toggle_cell_data_roaming(self.ad, True)
            self.anritsu.wait_for_registration_state(2)  # for BTS2 WCDMA

            time.sleep(TIME_TO_WAIT_BEFORE_PING)
            if not adb_shell_ping(self.ad, PING_DURATION, PING_TARGET):
                self.log.error(
                    "Test Fail: Phone {} can not ping {} with Data Roaming On".
                    format(self.ad.serial, PING_TARGET))
                return False
            toggle_cell_data_roaming(self.ad, False)
            time.sleep(TIME_TO_WAIT_BEFORE_PING)
            if adb_shell_ping(self.ad, PING_DURATION, PING_TARGET):
                self.log.error(
                    "Test Fail: Phone {} can ping {} with Data Roaming Off".
                    format(self.ad.serial, PING_TARGET))
                return False

        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during data roaming: " + str(e))
            return False
        return True
 def phone_setup_data_roaming(self):
     return ensure_network_rat(self.log,
                               self.ad,
                               NETWORK_MODE_LTE_GSM_WCDMA,
                               RAT_FAMILY_LTE,
                               toggle_apm_after_setting=True)
    def _data_stall_detection_recovery(self, set_simulation_func, rat):
        try:
            [self.bts1] = set_simulation_func(self.anritsu, self.user_params,
                                              self.ad.sim_card)
            set_usim_parameters(self.anritsu, self.ad.sim_card)
            set_post_sim_params(self.anritsu, self.user_params,
                                self.ad.sim_card)

            self.anritsu.start_simulation()

            if rat == RAT_LTE:
                preferred_network_setting = NETWORK_MODE_LTE_CDMA_EVDO
                rat_family = RAT_FAMILY_LTE
            elif rat == RAT_WCDMA:
                preferred_network_setting = NETWORK_MODE_GSM_UMTS
                rat_family = RAT_FAMILY_UMTS
            elif rat == RAT_GSM:
                preferred_network_setting = NETWORK_MODE_GSM_ONLY
                rat_family = RAT_FAMILY_GSM
            elif rat == RAT_1XRTT:
                preferred_network_setting = NETWORK_MODE_CDMA
                rat_family = RAT_FAMILY_CDMA2000
            else:
                self.log.error("No valid RAT provided for Data Stall test.")
                return False

            if not ensure_network_rat(self.log,
                                      self.ad,
                                      preferred_network_setting,
                                      rat_family,
                                      toggle_apm_after_setting=True):
                self.log.error(
                    "Failed to set rat family {}, preferred network:{}".format(
                        rat_family, preferred_network_setting))
                return False

            self.anritsu.wait_for_registration_state()
            time.sleep(self.SETTLING_TIME)

            self.bts1.output_level = self.start_power_level

            cmd = ('ss -l -p -n | grep "tcp.*droid_script" | tr -s " " '
                   '| cut -d " " -f 5 | sed s/.*://g')
            sl4a_port = self.ad.adb.shell(cmd)

            if not test_data_browsing_success_using_sl4a(self.log, self.ad):
                self.ad.log.error("Browsing failed before the test, aborting!")
                return False

            begin_time = get_device_epoch_time(self.ad)
            break_internet_except_sl4a_port(self.ad, sl4a_port)

            if not test_data_browsing_failure_using_sl4a(self.log, self.ad):
                self.ad.log.error("Browsing success even after breaking " \
                                  "the internet, aborting!")
                return False

            if not check_data_stall_detection(self.ad):
                self.ad.log.error("NetworkMonitor unable to detect Data Stall")

            if not check_network_validation_fail(self.ad, begin_time):
                self.ad.log.error("Unable to detect NW validation fail")
                return False

            if not check_data_stall_recovery(self.ad, begin_time):
                self.ad.log.error("Recovery was not triggerred")
                return False

            resume_internet_with_sl4a_port(self.ad, sl4a_port)

            if not test_data_browsing_success_using_sl4a(self.log, self.ad):
                self.ad.log.error("Browsing failed after resuming internet")
                return False

            self.ad.log.info("Triggering Out of Service Sceanrio")
            self.bts1.output_level = POWER_LEVEL_OUT_OF_SERVICE
            time.sleep(30)
            begin_time = get_device_epoch_time(self.ad)

            if not test_data_browsing_failure_using_sl4a(self.log, self.ad):
                self.ad.log.error("Browsing success even in OOS, aborting!")
                return False

            if not check_network_validation_fail(self.ad, begin_time):
                self.ad.log.error("Unable to detect NW validation fail")
                return False

            if check_data_stall_recovery(self.ad, begin_time):
                self.ad.log.error("FAILURE - Data Recovery was performed")
                return False
            self.ad.log.info("SUCCESS - Data Recovery was not performed")

            self.ad.log.info("Bringing up Strong Cellular Signal")
            self.bts1.output_level = POWER_LEVEL_FULL_SERVICE
            time.sleep(30)

            if not test_data_browsing_success_using_sl4a(self.log, self.ad):
                self.ad.log.error("Browsing failed after full service")
                return False
            return True

        except AnritsuError as e:
            self.log.error("Error in connection with Anritsu Simulator: " +
                           str(e))
            return False
        except Exception as e:
            self.log.error("Exception during Data procedure: " + str(e))
            return False
        finally:
            resume_internet_with_sl4a_port(self.ad, sl4a_port)