215 lines
8.4 KiB
Python
215 lines
8.4 KiB
Python
#!/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 queue
|
|
|
|
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
|