blob: e94626fd65b05668026bde2d9ae6046f69c795f2 [file] [log] [blame]
import time
from acts import asserts
from acts import signals
from acts.base_test import BaseTestClass
from acts.utils import get_current_epoch_time
from acts_contrib.test_utils.gnss import gnss_constant
from acts_contrib.test_utils.gnss import gnss_test_utils as gutils
from acts_contrib.test_utils.gnss.testtracker_util import log_testtracker_uuid
from acts_contrib.test_utils.wifi import wifi_test_utils as wutils
from acts_contrib.test_utils.tel import tel_logging_utils
from acts_contrib.test_utils.tel.tel_test_utils import verify_internet_connection
from acts_contrib.test_utils.tel.tel_test_utils import toggle_airplane_mode
class GnssVendorFeaturesTest(BaseTestClass):
"""Validate vendor specific features."""
def setup_class(self):
super().setup_class()
self.ad = self.android_devices[0]
req_params = ["pixel_lab_network", "default_gnss_signal_attenuation", "pixel_lab_location",
"qdsp6m_path", "collect_logs", "ttff_test_cycle", "standalone_cs_criteria",
"xtra_cs_criteria", "xtra_ws_criteria", "xtra_hs_criteria",
"set_attenuator"]
self.unpack_userparams(req_param_names=req_params)
# create hashmap for SSID
self.ssid_map = {}
for network in self.pixel_lab_network:
SSID = network["SSID"]
self.ssid_map[SSID] = network
self.init_device()
def init_device(self):
"""Init GNSS test devices for vendor features suite."""
gutils._init_device(self.ad)
gutils.disable_supl_mode(self.ad)
gutils.enable_vendor_orbit_assistance_data(self.ad)
def setup_test(self):
gutils.log_current_epoch_time(self.ad, "test_start_time")
log_testtracker_uuid(self.ad, self.current_test_name)
gutils.clear_logd_gnss_qxdm_log(self.ad)
gutils.get_baseband_and_gms_version(self.ad)
toggle_airplane_mode(self.ad.log, self.ad, new_state=False)
if gutils.is_wearable_btwifi(self.ad):
wutils.wifi_toggle_state(self.ad, True)
gutils.connect_to_wifi_network(self.ad,
self.ssid_map[self.pixel_lab_network[0]["SSID"]])
else:
wutils.wifi_toggle_state(self.ad, False)
gutils.set_mobile_data(self.ad, state=True)
if not verify_internet_connection(self.ad.log, self.ad, retries=3,
expected_state=True):
raise signals.TestFailure("Fail to connect to internet.")
def teardown_test(self):
if self.collect_logs:
gutils.stop_pixel_logger(self.ad)
tel_logging_utils.stop_adb_tcpdump(self.ad)
if self.set_attenuator:
gutils.set_attenuator_gnss_signal(self.ad, self.attenuators,
self.default_gnss_signal_attenuation)
gutils.log_current_epoch_time(self.ad, "test_end_time")
def on_fail(self, test_name, begin_time):
if self.collect_logs:
self.ad.take_bug_report(test_name, begin_time)
gutils.get_gnss_qxdm_log(self.ad, self.qdsp6m_path)
tel_logging_utils.get_tcpdump_log(self.ad, test_name, begin_time)
def connect_to_wifi_with_airplane_mode_on(self):
self.ad.log.info("Turn airplane mode on")
toggle_airplane_mode(self.ad.log, self.ad, new_state=True)
wutils.wifi_toggle_state(self.ad, True)
gutils.connect_to_wifi_network(self.ad, self.ssid_map[self.pixel_lab_network[0]["SSID"]])
def ttff_with_assist(self, mode, criteria):
"""Verify CS/WS TTFF functionality with Assist data.
Args:
mode: "csa" or "ws"
criteria: Criteria for the test.
"""
begin_time = get_current_epoch_time()
gutils.process_gnss_by_gtw_gpstool(self.ad, self.standalone_cs_criteria)
gutils.check_xtra_download(self.ad, begin_time)
self.ad.log.info("Turn airplane mode on")
toggle_airplane_mode(self.ad.log, self.ad, new_state=True)
gutils.start_gnss_by_gtw_gpstool(self.ad, True)
gutils.start_ttff_by_gtw_gpstool(self.ad, mode, iteration=self.ttff_test_cycle)
ttff_data = gutils.process_ttff_by_gtw_gpstool(self.ad, begin_time, self.pixel_lab_location)
result = gutils.check_ttff_data(self.ad, ttff_data, mode, criteria)
asserts.assert_true(
result, "TTFF %s fails to reach designated criteria of %d "
"seconds." % (gnss_constant.TTFF_MODE.get(mode), criteria))
def test_xtra_ttff_cs_mobile_data(self):
"""Verify XTRA/LTO functionality of TTFF Cold Start with mobile data.
Steps:
1. TTFF Cold Start for 10 iteration.
Expected Results:
XTRA/LTO TTFF Cold Start results should be within xtra_cs_criteria.
"""
gutils.run_ttff(self.ad, mode="cs", criteria=self.xtra_cs_criteria,
test_cycle=self.ttff_test_cycle, base_lat_long=self.pixel_lab_location,
collect_logs=self.collect_logs)
def test_xtra_ttff_ws_mobile_data(self):
"""Verify XTRA/LTO functionality of TTFF Warm Start with mobile data.
Steps:
1. TTFF Warm Start for 10 iteration.
Expected Results:
XTRA/LTO TTFF Warm Start results should be within xtra_ws_criteria.
"""
gutils.run_ttff(self.ad, mode="ws", criteria=self.xtra_ws_criteria,
test_cycle=self.ttff_test_cycle, base_lat_long=self.pixel_lab_location,
collect_logs=self.collect_logs)
def test_xtra_ttff_hs_mobile_data(self):
"""Verify XTRA/LTO functionality of TTFF Hot Start with mobile data.
Steps:
1. TTFF Hot Start for 10 iteration.
Expected Results:
XTRA/LTO TTFF Hot Start results should be within xtra_hs_criteria.
"""
gutils.run_ttff(self.ad, mode="hs", criteria=self.xtra_hs_criteria,
test_cycle=self.ttff_test_cycle, base_lat_long=self.pixel_lab_location,
collect_logs=self.collect_logs)
def test_xtra_ttff_cs_wifi(self):
"""Verify XTRA/LTO functionality of TTFF Cold Start with WiFi.
Steps:
1. Turn airplane mode on.
2. Connect to WiFi.
3. TTFF Cold Start for 10 iteration.
Expected Results:
XTRA/LTO TTFF Cold Start results should be within
xtra_cs_criteria.
"""
self.connect_to_wifi_with_airplane_mode_on()
gutils.run_ttff(self.ad, mode="cs", criteria=self.xtra_cs_criteria,
test_cycle=self.ttff_test_cycle, base_lat_long=self.pixel_lab_location,
collect_logs=self.collect_logs)
def test_xtra_ttff_ws_wifi(self):
"""Verify XTRA/LTO functionality of TTFF Warm Start with WiFi.
Steps:
1. Turn airplane mode on.
2. Connect to WiFi.
3. TTFF Warm Start for 10 iteration.
Expected Results:
XTRA/LTO TTFF Warm Start results should be within xtra_ws_criteria.
"""
self.connect_to_wifi_with_airplane_mode_on()
gutils.run_ttff(self.ad, mode="ws", criteria=self.xtra_ws_criteria,
test_cycle=self.ttff_test_cycle, base_lat_long=self.pixel_lab_location,
collect_logs=self.collect_logs)
def test_xtra_ttff_hs_wifi(self):
"""Verify XTRA/LTO functionality of TTFF Hot Start with WiFi.
Steps:
1. Turn airplane mode on.
2. Connect to WiFi.
3. TTFF Hot Start for 10 iteration.
Expected Results:
XTRA/LTO TTFF Hot Start results should be within xtra_hs_criteria.
"""
self.connect_to_wifi_with_airplane_mode_on()
gutils.run_ttff(self.ad, mode="hs", criteria=self.xtra_hs_criteria,
test_cycle=self.ttff_test_cycle, base_lat_long=self.pixel_lab_location,
collect_logs=self.collect_logs)
def test_xtra_download_mobile_data(self):
"""Verify XTRA/LTO data could be downloaded via mobile data.
Steps:
1. Delete all GNSS aiding data.
2. Get location fixed.
3. Verify whether XTRA/LTO is downloaded and injected.
4. Repeat Step 1. to Step 3. for 5 times.
Expected Results:
XTRA/LTO data is properly downloaded and injected via mobile data.
"""
mobile_xtra_result_all = []
gutils.start_qxdm_and_tcpdump_log(self.ad, self.collect_logs)
for i in range(1, 6):
begin_time = get_current_epoch_time()
gutils.process_gnss_by_gtw_gpstool(self.ad, self.standalone_cs_criteria)
time.sleep(5)
gutils.start_gnss_by_gtw_gpstool(self.ad, False)
mobile_xtra_result = gutils.check_xtra_download(self.ad, begin_time)
self.ad.log.info("Iteration %d => %s" % (i, mobile_xtra_result))
mobile_xtra_result_all.append(mobile_xtra_result)
asserts.assert_true(all(mobile_xtra_result_all),
"Fail to Download and Inject XTRA/LTO File.")
def test_xtra_download_wifi(self):
"""Verify XTRA/LTO data could be downloaded via WiFi.
Steps:
1. Connect to WiFi.
2. Delete all GNSS aiding data.
3. Get location fixed.
4. Verify whether XTRA/LTO is downloaded and injected.
5. Repeat Step 2. to Step 4. for 5 times.
Expected Results:
XTRA data is properly downloaded and injected via WiFi.
"""
wifi_xtra_result_all = []
gutils.start_qxdm_and_tcpdump_log(self.ad, self.collect_logs)
self.connect_to_wifi_with_airplane_mode_on()
for i in range(1, 6):
begin_time = get_current_epoch_time()
gutils.process_gnss_by_gtw_gpstool(self.ad, self.standalone_cs_criteria)
time.sleep(5)
gutils.start_gnss_by_gtw_gpstool(self.ad, False)
wifi_xtra_result = gutils.check_xtra_download(self.ad, begin_time)
wifi_xtra_result_all.append(wifi_xtra_result)
self.ad.log.info("Iteration %d => %s" % (i, wifi_xtra_result))
asserts.assert_true(all(wifi_xtra_result_all),
"Fail to Download and Inject XTRA/LTO File.")
def test_lto_download_after_reboot(self):
"""Verify LTO data could be downloaded and injected after device reboot.
Steps:
1. Reboot device.
2. Verify whether LTO is auto downloaded and injected without trigger GPS.
3. Repeat Step 1 to Step 2 for 5 times.
Expected Results:
LTO data is properly downloaded and injected at the first time tether to phone.
"""
reboot_lto_test_results_all = []
for times in range(1, 6):
gutils.delete_lto_file(self.ad)
gutils.reboot(self.ad)
gutils.start_qxdm_and_tcpdump_log(self.ad, self.collect_logs)
# Wait 20 seconds for boot busy and lto auto-download time
time.sleep(20)
begin_time = get_current_epoch_time()
reboot_lto_test_result = gutils.check_xtra_download(self.ad, begin_time)
self.ad.log.info("Iteration %d => %s" % (times, reboot_lto_test_result))
reboot_lto_test_results_all.append(reboot_lto_test_result)
gutils.stop_pixel_logger(self.ad)
tel_logging_utils.stop_adb_tcpdump(self.ad)
asserts.assert_true(all(reboot_lto_test_results_all),
"Fail to Download and Inject LTO File.")
def test_ws_with_assist(self):
"""Verify Warm Start functionality with existed LTO data.
Steps:
2. Make LTO is downloaded.
3. Turn on AirPlane mode to make sure there's no network connection.
4. TTFF Warm Start with Assist for 10 iteration.
Expected Results:
All TTFF Warm Start with Assist results should be within
xtra_ws_criteria.
"""
self.ttff_with_assist("ws", self.xtra_ws_criteria)
def test_cs_with_assist(self):
"""Verify Cold Start functionality with existed LTO data.
Steps:
2. Make sure LTO is downloaded.
3. Turn on AirPlane mode to make sure there's no network connection.
4. TTFF Cold Start with Assist for 10 iteration.
Expected Results:
All TTFF Cold Start with Assist results should be within
standalone_cs_criteria.
"""
self.ttff_with_assist("csa", self.standalone_cs_criteria)