#!/usr/bin/env python3.4 # # Copyright 2016 - 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 logging import queue import sys import time from acts import signals from acts import utils from acts.test_decorators import test_tracker_info from acts_contrib.test_utils.wifi import wifi_constants from acts_contrib.test_utils.wifi import wifi_test_utils as wutils from acts_contrib.test_utils.wifi.WifiBaseTest import WifiBaseTest class WifiServiceApiTest(WifiBaseTest): """This class tests the API surface of WifiManager in different wifi states. Attributes: The tests in this class only require one DUT. The tests in this class do not require a SIM (but it is ok if one is present). """ TEST_SSID_PREFIX = "test_config_" CONFIG_ELEMENT = 'config' NETWORK_ID_ELEMENT = 'network_id' def setup_class(self): """ Sets up the required dependencies from the config file and configures the device for WifiService API tests. Returns: True is successfully configured the requirements for testig. """ super().setup_class() self.dut = self.android_devices[0] # Do a simple version of init - mainly just sync the time and enable # verbose logging. We would also like to test with phones in less # constrained states (or add variations where we specifically # constrain). utils.require_sl4a((self.dut, )) utils.sync_device_time(self.dut) # Enable verbose logging on the dut self.dut.droid.wifiEnableVerboseLogging(1) if self.dut.droid.wifiGetVerboseLoggingLevel() != 1: raise signals.TestFailure( "Failed to enable WiFi verbose logging on the dut.") def teardown_class(self): wutils.reset_wifi(self.dut) def create_and_save_wifi_network_config(self): """ Create a config with random SSID and password. Returns: A tuple with the config and networkId for the newly created and saved network. """ config_ssid = self.TEST_SSID_PREFIX + utils.rand_ascii_str(8) config_password = utils.rand_ascii_str(8) self.dut.log.info("creating config: %s %s", config_ssid, config_password) config = {wutils.WifiEnums.SSID_KEY: config_ssid} config[wutils.WifiEnums.PWD_KEY] = config_password # Now save the config. network_id = self.dut.droid.wifiAddNetwork(config) self.dut.log.info("saved config: network_id = %s", network_id) return {self.NETWORK_ID_ELEMENT: network_id, self.CONFIG_ELEMENT: config} def check_network_config_saved(self, config): """ Get the configured networks and check of the provided config is present. This method only checks if the SSID is the same. TODO: should do a deeper check to make sure this is the correct config. Args: config: WifiConfig for a network. Returns: True if the WifiConfig is present. """ networks = self.dut.droid.wifiGetConfiguredNetworks() if not networks: return False ssid_key = wutils.WifiEnums.SSID_KEY for network in networks: if config[ssid_key] == network[ssid_key]: return True return False def forget_network(self, network_id): """ Simple method to call wifiForgetNetwork and wait for confirmation callback. The method returns False if it was not removed. Returns: True if network was successfully deleted. """ self.dut.log.info("deleting config: networkId = %s", network_id) self.dut.droid.wifiForgetNetwork(network_id) try: event = self.dut.ed.pop_event(wifi_constants.WIFI_FORGET_NW_SUCCESS, 10) return True except queue.Empty: self.dut.log.error("Failed to forget network") return False """ Tests Begin """ @test_tracker_info(uuid="f4df08c2-d3d5-4032-a433-c15f55130d4a") def test_remove_config_wifi_enabled(self): """ Test if config can be deleted when wifi is enabled. 1. Enable wifi, if needed 2. Create and save a random config. 3. Confirm the config is present. 4. Remove the config. 5. Confirm the config is not listed. """ wutils.wifi_toggle_state(self.dut, True) test_network = self.create_and_save_wifi_network_config() if not self.check_network_config_saved(test_network[self.CONFIG_ELEMENT]): raise signals.TestFailure( "Test network not found in list of configured networks.") if not self.forget_network(test_network[self.NETWORK_ID_ELEMENT]): raise signals.TestFailure( "Test network not deleted from configured networks.") if self.check_network_config_saved(test_network[self.CONFIG_ELEMENT]): raise signals.TestFailure( "Deleted network was in configured networks list.") @test_tracker_info(uuid="9af96c7d-a316-4d57-ba5f-c992427c237b") def test_remove_config_wifi_disabled(self): """ Test if config can be deleted when wifi is disabled. 1. Enable wifi, if needed 2. Create and save a random config. 3. Confirm the config is present. 4. Disable wifi. 5. Remove the config. 6. Confirm the config is not listed. """ wutils.wifi_toggle_state(self.dut, True) test_network = self.create_and_save_wifi_network_config() if not self.check_network_config_saved(test_network[self.CONFIG_ELEMENT]): raise signals.TestFailure( "Test network not found in list of configured networks.") wutils.wifi_toggle_state(self.dut, False) if not self.forget_network(test_network[self.NETWORK_ID_ELEMENT]): raise signals.TestFailure("Failed to delete network.") if self.check_network_config_saved(test_network[self.CONFIG_ELEMENT]): raise signals.TestFailure( "Test network was found in list of configured networks.") @test_tracker_info(uuid="79204ae6-323b-4257-a2cb-2225d44199d4") def test_retrieve_config_wifi_enabled(self): """ Test if config can be retrieved when wifi is enabled. 1. Enable wifi 2. Create and save a random config 3. Retrieve the config 4. Remove the config (clean up from the test) """ wutils.wifi_toggle_state(self.dut, True) test_network = self.create_and_save_wifi_network_config() if not self.check_network_config_saved(test_network[self.CONFIG_ELEMENT]): raise signals.TestFailure( "Test network not found in list of configured networks.") if not self.forget_network(test_network[self.NETWORK_ID_ELEMENT]): raise signals.TestFailure("Failed to delete network.") @test_tracker_info(uuid="58fb4f81-bc19-43e1-b0af-89dbd17f45b2") def test_retrieve_config_wifi_disabled(self): """ Test if config can be retrieved when wifi is disabled. 1. Disable wifi 2. Create and save a random config 3. Retrieve the config 4. Remove the config (clean up from the test) """ wutils.wifi_toggle_state(self.dut, False) test_network = self.create_and_save_wifi_network_config() if not self.check_network_config_saved(test_network[self.CONFIG_ELEMENT]): raise signals.TestFailure( "Test network not found in list of configured networks.") if not self.forget_network(test_network[self.NETWORK_ID_ELEMENT]): raise signals.TestFailure("Failed to delete network.") """ Tests End """ if __name__ == "__main__": pass