| #!/usr/bin/env python3.4 |
| # |
| # Copyright 2022 - The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import os |
| import threading |
| import time |
| |
| from acts import base_test |
| from acts import asserts |
| from acts.controllers import adb |
| from acts.controllers import monsoon |
| from acts.test_decorators import test_tracker_info |
| from acts_contrib.test_utils.wifi import wifi_test_utils as wutils |
| from acts_contrib.test_utils.tel import tel_data_utils as tel_utils |
| from acts_contrib.test_utils.tel.tel_wifi_utils import WIFI_CONFIG_APBAND_2G |
| from acts_contrib.test_utils.tel.tel_wifi_utils import WIFI_CONFIG_APBAND_5G |
| from acts_contrib.test_utils.tel.tel_data_utils import http_file_download_by_chrome |
| from acts.utils import force_airplane_mode |
| from acts.utils import set_adaptive_brightness |
| from acts.utils import set_ambient_display |
| from acts.utils import set_auto_rotate |
| from acts.utils import set_location_service |
| |
| |
| class WifiTetheringPowerTest(base_test.BaseTestClass): |
| |
| def setup_class(self): |
| self.hotspot_device = self.android_devices[0] |
| self.tethered_devices = self.android_devices[1:] |
| req_params = ("ssid", "password", "url") |
| self.unpack_userparams(req_params) |
| self.network = { "SSID": self.ssid, "password": self.password } |
| |
| self.offset = 1 * 60 |
| self.hz = 5000 |
| self.duration = 9 * 60 + self.offset |
| self.mon_data_path = os.path.join(self.log_path, "Monsoon") |
| self.mon = self.monsoons[0] |
| self.mon.set_voltage(4.2) |
| self.mon.set_max_current(7.8) |
| self.mon.attach_device(self.hotspot_device) |
| |
| asserts.assert_true(self.mon.usb("auto"), |
| "Failed to turn USB mode to auto on monsoon.") |
| set_location_service(self.hotspot_device, False) |
| set_adaptive_brightness(self.hotspot_device, False) |
| set_ambient_display(self.hotspot_device, False) |
| self.hotspot_device.adb.shell("settings put system screen_brightness 0") |
| set_auto_rotate(self.hotspot_device, False) |
| wutils.wifi_toggle_state(self.hotspot_device, False) |
| self.hotspot_device.droid.telephonyToggleDataConnection(True) |
| tel_utils.wait_for_cell_data_connection(self.log, self.hotspot_device, True) |
| asserts.assert_true( |
| tel_utils.verify_http_connection(self.log, self.hotspot_device), |
| "HTTP verification failed on cell data connection") |
| for ad in self.tethered_devices: |
| wutils.reset_wifi(ad) |
| |
| def teardown_class(self): |
| self.mon.usb("on") |
| wutils.wifi_toggle_state(self.hotspot_device, True) |
| |
| def on_fail(self, test_name, begin_time): |
| self.hotspot_device.take_bug_report(test_name, begin_time) |
| |
| def on_pass(self, test_name, begin_time): |
| self.hotspot_device.take_bug_report(test_name, begin_time) |
| |
| """ Helper functions """ |
| def _measure_and_process_result(self): |
| """ Measure the current drawn by the device for the period of |
| self.duration, at the frequency of self.hz. |
| """ |
| tag = self.current_test_name |
| result = self.mon.measure_power(self.hz, |
| self.duration, |
| tag=tag, |
| offset=self.offset) |
| asserts.assert_true(result, |
| "Got empty measurement data set in %s." % tag) |
| self.log.info(repr(result)) |
| data_path = os.path.join(self.mon_data_path, "%s.txt" % tag) |
| monsoon.MonsoonData.save_to_text_file([result], data_path) |
| actual_current = result.average_current |
| actual_current_str = "%.2fmA" % actual_current |
| result_extra = {"Average Current": actual_current_str} |
| |
| def _start_wifi_tethering(self, wifi_band): |
| """ Start wifi tethering on hotspot device |
| |
| Args: |
| 1. wifi_band: specifies the wifi band to start the hotspot |
| on. The current options are 2G and 5G |
| """ |
| wutils.start_wifi_tethering(self.hotspot_device, |
| self.ssid, |
| self.password, |
| wifi_band) |
| |
| def _start_traffic_on_device(self, ad): |
| """ Start traffic on the device by downloading data |
| Run the traffic continuosly for self.duration |
| |
| Args: |
| 1. ad device object |
| """ |
| timeout = time.time() + self.duration |
| while True: |
| if time.time() > timeout: |
| break |
| http_file_download_by_chrome(ad, self.url) |
| |
| def _start_traffic_measure_power(self, ad_list): |
| """ Start traffic on the tethered devices and measure power |
| |
| Args: |
| 1. ad_list: list of tethered devices to run traffic on |
| """ |
| threads = [] |
| for ad in ad_list: |
| t = threading.Thread(target = self._start_traffic_on_device, |
| args = (ad,)) |
| t.start() |
| threads.append(t) |
| try: |
| self._measure_and_process_result() |
| finally: |
| for t in threads: |
| t.join() |
| |
| |
| """ Tests begin """ |
| @test_tracker_info(uuid="ebb74144-e22a-46e1-b8c1-9ada22b13133") |
| def test_power_wifi_tethering_2ghz_no_devices_connected(self): |
| """ Steps: |
| 1. Start wifi hotspot with 2.4Ghz band |
| 2. No devices connected to hotspot |
| 3. Measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_2G) |
| self._measure_and_process_result() |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="2560c088-4010-4354-ade3-6aaac83b1cfd") |
| def test_power_wifi_tethering_5ghz_no_devices_connected(self): |
| """ Steps: |
| 1. Start wifi hotspot with 5Ghz band |
| 2. No devices connected to hotspot |
| 3. Measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_5G) |
| self._measure_and_process_result() |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="644795b0-cd30-4a8f-82ee-cc0618c41c6b") |
| def test_power_wifi_tethering_2ghz_connect_1device(self): |
| """ Steps: |
| 1. Start wifi hotspot with 2.4GHz band |
| 2. Connect 1 device to hotspot |
| 3. Measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_2G) |
| wutils.wifi_connect(self.tethered_devices[0], self.network) |
| self._measure_and_process_result() |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="8fca9898-f493-44c3-810f-d2262ac72187") |
| def test_power_wifi_tethering_5ghz_connect_1device(self): |
| """ Steps: |
| 1. Start wifi hotspot with 5GHz band |
| 2. Connect 1 device to hotspot |
| 3. Measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_5G) |
| wutils.wifi_connect(self.tethered_devices[0], self.network) |
| self._measure_and_process_result() |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="16ef5f63-1a7a-44ae-bf8d-c3a181c89b63") |
| def test_power_wifi_tethering_2ghz_connect_5devices(self): |
| """ Steps: |
| 1. Start wifi hotspot with 2GHz band |
| 2. Connect 5 devices to hotspot |
| 3. Measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_2G) |
| for ad in self.tethered_devices: |
| wutils.wifi_connect(ad, self.network) |
| self._measure_and_process_result() |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="769aedfc-d309-40e0-95dd-51ff40f4e097") |
| def test_power_wifi_tethering_5ghz_connect_5devices(self): |
| """ Steps: |
| 1. Start wifi hotspot with 5GHz band |
| 2. Connect 5 devices to hotspot |
| 3. Measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_5G) |
| for ad in self.tethered_devices: |
| wutils.wifi_connect(ad, self.network) |
| self._measure_and_process_result() |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="e5b71f34-1dc0-4045-a45e-48c1e9426ec3") |
| def test_power_wifi_tethering_2ghz_connect_1device_with_traffic(self): |
| """ Steps: |
| 1. Start wifi hotspot with 2GHz band |
| 2. Connect 1 device to hotspot device |
| 3. Start traffic and measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_2G) |
| wutils.wifi_connect(self.tethered_devices[0], self.network) |
| self._start_traffic_measure_power(self.tethered_devices[0:1]) |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="29c5cd6e-8df1-46e5-a735-526dc9154f6e") |
| def test_power_wifi_tethering_5ghz_connect_1device_with_traffic(self): |
| """ Steps: |
| 1. Start wifi hotspot with 5GHz band |
| 2. Connect 1 device to hotspot device |
| 3. Start traffic and measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_5G) |
| wutils.wifi_connect(self.tethered_devices[0], self.network) |
| self._start_traffic_measure_power(self.tethered_devices[0:1]) |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="da71b06f-7b98-4c14-a2e2-361f395b39a8") |
| def test_power_wifi_tethering_2ghz_connect_5devices_with_traffic(self): |
| """ Steps: |
| 1. Start wifi hotspot with 2GHz band |
| 2. Connect 5 devices to hotspot device |
| 3. Start traffic and measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_2G) |
| for ad in self.tethered_devices: |
| wutils.wifi_connect(ad, self.network) |
| self._start_traffic_measure_power(self.tethered_devices) |
| wutils.stop_wifi_tethering(self.hotspot_device) |
| |
| @test_tracker_info(uuid="7f3173ab-fd8f-4579-8c45-f9a8c5cd17f7") |
| def test_power_wifi_tethering_5ghz_connect_5devices_with_traffic(self): |
| """ Steps: |
| 1. Start wifi hotspot with 2GHz band |
| 2. Connect 5 devices to hotspot device |
| 3. Start traffic and measure power |
| """ |
| self._start_wifi_tethering(WIFI_CONFIG_APBAND_5G) |
| for ad in self.tethered_devices: |
| wutils.wifi_connect(ad, self.network) |
| self._start_traffic_measure_power(self.tethered_devices) |
| wutils.stop_wifi_tethering(self.hotspot_device) |