Add autojoin test for new wifi setup.
This is an exact copy of what's in AOSP right now.
Bug=32066403
Test: None
Change-Id: Ie06542807b33b2263bdee7d0cd98be7beb987b37
diff --git a/acts/tests/google/wifi/WifiNewSetupAutoJoinTest.py b/acts/tests/google/wifi/WifiNewSetupAutoJoinTest.py
new file mode 100644
index 0000000..0429ff2
--- /dev/null
+++ b/acts/tests/google/wifi/WifiNewSetupAutoJoinTest.py
@@ -0,0 +1,440 @@
+#!/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 time
+
+from acts import asserts
+from acts import base_test
+from acts.test_utils.wifi import wifi_test_utils as wutils
+
+WifiEnums = wutils.WifiEnums
+NETWORK_ID_ERROR = "Network don't have ID"
+NETWORK_ERROR = "Device is not connected to reference network"
+
+
+class WifiNewSetupAutoJoinTest(base_test.BaseTestClass):
+ def __init__(self, controllers):
+ base_test.BaseTestClass.__init__(self, controllers)
+ self.tests = ("test_autojoin_out_of_range",
+ "test_autojoin_Ap1_2g",
+ "test_autojoin_Ap1_2gto5g",
+ "test_autojoin_in_AP1_5gto2g",
+ "test_autojoin_swtich_AP1toAp2",
+ "test_autojoin_Ap2_2gto5g",
+ "test_autojoin_Ap2_5gto2g",
+ "test_autojoin_out_of_range",
+ "test_autojoin_Ap2_2g",
+ "test_autojoin_Ap2_2gto5g",
+ "test_autojoin_in_Ap2_5gto2g",
+ "test_autojoin_swtich_AP2toAp1",
+ "test_autojoin_Ap1_2gto5g",
+ "test_autojoin_Ap1_5gto2g",
+ "test_autojoin_swtich_to_blacklist_AP",
+ "test_autojoin_in_blacklist_AP",
+ "test_autojoin_back_from_blacklist_AP", )
+
+ def setup_class(self):
+ """It will setup the required dependencies from config file and configure
+ the required networks for auto-join testing. Configured networks will
+ not be removed. If networks are already configured it will skip
+ configuring the networks
+
+ Returns:
+ True if successfully configured the requirements for testing.
+ """
+ self.dut = self.android_devices[0]
+ wutils.wifi_test_device_init(self.dut)
+ req_params = ("reference_networks", "other_network", "atten_val",
+ "ping_addr", "max_bugreports")
+ self.unpack_userparams(req_params)
+ self.log.debug("Connect networks :: {}".format(self.other_network))
+ configured_networks = self.dut.droid.wifiGetConfiguredNetworks()
+ self.log.debug("Configured networks :: {}".format(configured_networks))
+ count_confnet = 0
+ result = False
+ if self.reference_networks[0]['2g']['ssid'] == self.reference_networks[
+ 0]['5g']['ssid']:
+ self.ref_ssid_count = 1
+ else:
+ self.ref_ssid_count = 2 # Different SSID for 2g and 5g
+ for confnet in configured_networks:
+ if confnet[WifiEnums.SSID_KEY] == self.reference_networks[0]['2g'][
+ 'ssid']:
+ count_confnet += 1
+ elif confnet[WifiEnums.SSID_KEY] == self.reference_networks[0][
+ '5g']['ssid']:
+ count_confnet += 1
+ self.log.info("count_confnet {}".format(count_confnet))
+ if count_confnet == self.ref_ssid_count:
+ return
+ else:
+ self.log.info("Configured networks for testing")
+ self.attenuators[0].set_atten(0)
+ self.attenuators[1].set_atten(0)
+ self.attenuators[2].set_atten(90)
+ self.attenuators[3].set_atten(90)
+ wait_time = 15
+ self.dut.droid.wakeLockAcquireBright()
+ self.dut.droid.wakeUpNow()
+ try:
+ self.dut.droid.wifiPriorityConnect(self.reference_networks[0][
+ '2g'])
+ connect_result = self.dut.ed.pop_event(
+ "WifiManagerPriorityConnectOnSuccess", 1)
+ self.log.info(connect_result)
+ time.sleep(wait_time)
+ if self.ref_ssid_count == 2: #add 5g network as well
+ self.dut.droid.wifiPriorityConnect(self.reference_networks[
+ 0]['5g'])
+ connect_result = self.dut.ed.pop_event(
+ "WifiManagerPriorityConnectOnSuccess", 1)
+ self.log.info(connect_result)
+ time.sleep(wait_time)
+ self.dut.droid.wifiPriorityConnect(self.other_network)
+ connect_result = self.dut.ed.pop_event(
+ "WifiManagerPriorityConnectOnSuccess")
+ self.log.info(connect_result)
+ wutils.track_connection(self.dut, self.other_network["ssid"], 1)
+ wutils.wifi_forget_network(self.dut, self.other_network["ssid"])
+ time.sleep(wait_time)
+ current_network = self.dut.droid.wifiGetConnectionInfo()
+ self.log.info("Current network: {}".format(current_network))
+ asserts.assert_true('network_id' in current_network,
+ NETWORK_ID_ERROR)
+ asserts.assert_true(current_network['network_id'] >= 0,
+ NETWORK_ERROR)
+ finally:
+ self.dut.droid.wifiLockRelease()
+ self.dut.droid.goToSleepNow()
+
+ def check_connection(self, network_bssid):
+ """Check current wifi connection networks.
+ Args:
+ network_bssid: Network bssid to which connection.
+ Returns:
+ True if connection to given network happen, else return False.
+ """
+ time.sleep(40) #time for connection state to be updated
+ self.log.info("Check network for {}".format(network_bssid))
+ current_network = self.dut.droid.wifiGetConnectionInfo()
+ self.log.debug("Current network: {}".format(current_network))
+ if WifiEnums.BSSID_KEY in current_network:
+ return current_network[WifiEnums.BSSID_KEY] == network_bssid
+ return False
+
+ def set_attn_and_validate_connection(self, attn_value, bssid):
+ """Validate wifi connection status on different attenuation setting.
+
+ Args:
+ attn_value: Attenuation value for different APs signal.
+ bssid: Bssid of excepted network.
+
+ Returns:
+ True if bssid of current network match, else false.
+ """
+ self.attenuators[0].set_atten(attn_value[0])
+ self.attenuators[1].set_atten(attn_value[1])
+ self.attenuators[2].set_atten(attn_value[2])
+ self.attenuators[3].set_atten(attn_value[3])
+ self.dut.droid.wakeLockAcquireBright()
+ self.dut.droid.wakeUpNow()
+ try:
+ asserts.assert_true(
+ self.check_connection(bssid),
+ "Device is not connected to required bssid {}".format(bssid))
+ time.sleep(10) #wait for connection to be active
+ asserts.assert_true(
+ wutils.check_internet_connection(self.dut, self.ping_addr),
+ "Error, No Internet connection for current bssid {}".format(
+ bssid))
+ finally:
+ self.dut.droid.wifiLockRelease()
+ self.dut.droid.goToSleepNow()
+
+ def on_fail(self, test_name, begin_time):
+ if self.max_bugreports > 0:
+ self.dut.take_bug_report(test_name, begin_time)
+ self.max_bugreports -= 1
+ self.dut.cat_adb_log(test_name, begin_time)
+
+ """ Tests Begin """
+
+ def test_autojoin_Ap1_2g(self):
+ """Test wifi auto join functionality move in range of AP1.
+
+ 1. Attenuate the signal to low range of AP1 and Ap2 not visible at all.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, att3 = self.atten_val["Ap1_2g"]
+ variance = 5
+ attenuations = ([att0 + variance * 2, att1, att2, att3],
+ [att0 + variance, att1, att2, att3], [att0, att1, att2, att3],
+ [att0 - variance, att1, att2, att3])
+ name_func = lambda att_value, bssid: ("test_autojoin_Ap1_2g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[0]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed,
+ "Number of test_autojoin_Ap1_2g failed {}".format(len(failed)))
+
+ def test_autojoin_Ap1_2gto5g(self):
+ """Test wifi auto join functionality move to high range.
+
+ 1. Attenuate the signal to high range of AP1.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Ap1_2gto5g"]
+ variance = 5
+ attenuations = ([att0 + variance * 2, att1, att2, attn3],
+ [att0 + variance, att1, att2, attn3], [att0, att1, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_Ap1_2gto5g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[0]["5g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed,
+ "Number of test_autojoin_Ap1_2gto5g failed {}".format(len(failed)))
+
+ def test_autojoin_in_AP1_5gto2g(self):
+ """Test wifi auto join functionality move to low range toward AP2.
+
+ 1. Attenuate the signal to medium range of AP1 and low range of AP2.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["In_AP1_5gto2g"]
+ variance = 5
+ attenuations = ([att0 - variance, att1 + variance, att2, attn3],
+ [att0, att1, att2, attn3],
+ [att0 + variance, att1 - variance, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_in_AP1_5gto2g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[0]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed, "Number of test_autojoin_in_AP1_5gto2g failed {}".format(
+ len(failed)))
+
+ def test_autojoin_swtich_AP1toAp2(self):
+ """Test wifi auto join functionality move from low range of AP1 to better
+ range of AP2.
+
+ 1. Attenuate the signal to low range of AP1 and medium range of AP2.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Swtich_AP1toAp2"]
+ variance = 5
+ attenuations = ([att0 - variance, att1 + variance, att2, attn3],
+ [att0, att1, att2, attn3],
+ [att0 + variance, att1 - variance, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_swtich_AP1toAp2_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[1]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed, "Number of test_autojoin_swtich_AP1toAp2 failed {}".format(
+ len(failed)))
+
+ def test_autojoin_Ap2_2gto5g(self):
+ """Test wifi auto join functionality move to high range of AP2.
+
+ 1. Attenuate the signal to out range of AP1 and high range of AP2.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Ap2_2gto5g"]
+ variance = 5
+ attenuations = ([att0 - variance, att1 + variance * 2, att2, attn3],
+ [att0, att1 + variance, att2, attn3], [att0, att1, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_Ap2_2gto5g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[1]["5g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed,
+ "Number of test_autojoin_Ap2_2gto5g failed {}".format(len(failed)))
+
+ def test_autojoin_Ap2_5gto2g(self):
+ """Test wifi auto join functionality move to low range of AP2.
+
+ 1. Attenuate the signal to low range of AP2.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Ap2_5gto2g"]
+ variance = 5
+ attenuations = ([att0, att1 - variance, att2, attn3], [att0, att1, att2, attn3],
+ [att0, att1 + variance, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_Ap2_5gto2g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[1]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed,
+ "Number of test_autojoin_Ap2_5gto2g failed {}".format(len(failed)))
+
+ def test_autojoin_out_of_range(self):
+ """Test wifi auto join functionality move to low range.
+
+ 1. Attenuate the signal to out of range.
+ 2. Wake up the device.
+ 3. Start the scan.
+ 4. Check that device is not connected to any network.
+ """
+ self.attenuators[0].set_atten(90)
+ self.attenuators[1].set_atten(90)
+ self.attenuators[2].set_atten(90)
+ self.attenuators[3].set_atten(90)
+ self.dut.droid.wakeLockAcquireBright()
+ self.dut.droid.wakeUpNow()
+ try:
+ wutils.start_wifi_connection_scan(self.dut)
+ wifi_results = self.dut.droid.wifiGetScanResults()
+ self.log.debug("Scan result {}".format(wifi_results))
+ time.sleep(20)
+ current_network = self.dut.droid.wifiGetConnectionInfo()
+ self.log.info("Current network: {}".format(current_network))
+ asserts.assert_true(
+ ('network_id' in current_network and
+ current_network['network_id'] == -1),
+ "Device is connected to network {}".format(current_network))
+ finally:
+ self.dut.droid.wifiLockRelease()
+ self.dut.droid.goToSleepNow()
+
+ def test_autojoin_Ap2_2g(self):
+ """Test wifi auto join functionality move in low range of AP2.
+
+ 1. Attenuate the signal to move in range of AP2 and Ap1 not visible at all.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Ap2_2g"]
+ variance = 5
+ attenuations = ([att0, att1 + variance * 2, att2, attn3],
+ [att0, att1 + variance, att2, attn3], [att0, att1, att2, attn3],
+ [att0, att1 - variance, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_Ap2_2g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[1]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed,
+ "Number of test_autojoin_Ap2_2g failed {}".format(len(failed)))
+
+ def test_autojoin_in_Ap2_5gto2g(self):
+ """Test wifi auto join functionality move to medium range of Ap2 and
+ low range of AP1.
+
+ 1. Attenuate the signal to move in medium range of AP2 and low range of AP1.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["In_Ap2_5gto2g"]
+ variance = 5
+ attenuations = ([att0, att1 - variance, att2, attn3], [att0, att1, att2, attn3],
+ [att0, att1 + variance, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_in_Ap2_5gto2g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[1]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed, "Number of test_autojoin_in_Ap2_5gto2g failed {}".format(
+ len(failed)))
+
+ def test_autojoin_swtich_AP2toAp1(self):
+ """Test wifi auto join functionality move from low range of AP2 to better
+ range of AP1.
+
+ 1. Attenuate the signal to low range of AP2 and medium range of AP1.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Swtich_AP2toAp1"]
+ variance = 5
+ attenuations = ([att0 + variance, att1 - variance, att2, attn3],
+ [att0, att1, att2, attn3],
+ [att0 - variance, att1 + variance, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_swtich_AP2toAp1_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[0]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed, "Number of test_autojoin_swtich_AP2toAp1 failed {}".format(
+ len(failed)))
+
+ def test_autojoin_Ap1_5gto2g(self):
+ """Test wifi auto join functionality move to medium range of AP1.
+
+ 1. Attenuate the signal to medium range of AP1.
+ 2. Wake up the device.
+ 3. Check that device is connected to right BSSID and maintain stable
+ connection to BSSID in range.
+ """
+ att0, att1, att2, attn3 = self.atten_val["Ap1_5gto2g"]
+ variance = 5
+ attenuations = ([att0, att1, att2, attn3], [att0 + variance, att1, att2, attn3],
+ [att0 + variance * 2, att1, att2, attn3])
+ name_func = lambda att_value, bssid: ("test_autojoin_Ap1_5gto2g_AP1_{}_AP2"
+ "_{}_AP3_{}").format(att_value[0], att_value[1], att_value[2])
+ failed = self.run_generated_testcases(
+ self.set_attn_and_validate_connection,
+ attenuations,
+ args=(self.reference_networks[0]["2g"]['bssid'], ),
+ name_func=name_func)
+ asserts.assert_false(
+ failed,
+ "Number of test_autojoin_Ap1_5gto2g failed {}".format(len(failed)))
+ """ Tests End """