Home | History | Annotate | Download | only in wifi
      1 #
      2 #   Copyright 2017 - The Android Open Source Project
      3 #
      4 #   Licensed under the Apache License, Version 2.0 (the "License");
      5 #   you may not use this file except in compliance with the License.
      6 #   You may obtain a copy of the License at
      7 #
      8 #       http://www.apache.org/licenses/LICENSE-2.0
      9 #
     10 #   Unless required by applicable law or agreed to in writing, software
     11 #   distributed under the License is distributed on an "AS IS" BASIS,
     12 #   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 #   See the License for the specific language governing permissions and
     14 #   limitations under the License.
     15 
     16 import pprint
     17 import random
     18 import time
     19 
     20 from acts import asserts
     21 from acts import base_test
     22 from acts import signals
     23 from acts.test_decorators import test_tracker_info
     24 from acts.test_utils.wifi import wifi_test_utils as wutils
     25 from acts.test_utils.wifi.WifiBaseTest import WifiBaseTest
     26 
     27 WifiEnums = wutils.WifiEnums
     28 
     29 class WifiRoamingTest(WifiBaseTest):
     30 
     31     def __init__(self, controllers):
     32         WifiBaseTest.__init__(self, controllers)
     33 
     34     def setup_class(self):
     35         """Setup required dependencies from config file and configure
     36            the required networks for testing roaming.
     37 
     38         Returns:
     39             True if successfully configured the requirements for testing.
     40         """
     41         self.dut = self.android_devices[0]
     42         wutils.wifi_test_device_init(self.dut)
     43         req_params = ("roaming_attn", "roam_interval", "ping_addr", "max_bugreports")
     44         opt_param = [
     45             "open_network", "reference_networks", "iperf_server_address"]
     46         self.unpack_userparams(
     47             req_param_names=req_params, opt_param_names=opt_param)
     48 
     49         if "AccessPoint" in self.user_params:
     50             self.legacy_configure_ap_and_start(ap_count=2)
     51 
     52         asserts.assert_true(
     53             len(self.reference_networks) > 1,
     54             "Need at least two psk networks for roaming.")
     55         asserts.assert_true(
     56             len(self.open_network) > 1,
     57             "Need at least two open networks for roaming")
     58         wutils.wifi_toggle_state(self.dut, True)
     59         if "iperf_server_address" in self.user_params:
     60             self.iperf_server = self.iperf_servers[0]
     61             self.iperf_server.start()
     62 
     63     def teardown_class(self):
     64         self.dut.ed.clear_all_events()
     65         if "AccessPoint" in self.user_params:
     66             del self.user_params["reference_networks"]
     67             del self.user_params["open_network"]
     68         self.iperf_server.stop()
     69 
     70     def setup_test(self):
     71         self.dut.droid.wakeLockAcquireBright()
     72         self.dut.droid.wakeUpNow()
     73 
     74     def teardown_test(self):
     75         self.dut.droid.wakeLockRelease()
     76         self.dut.droid.goToSleepNow()
     77         wutils.reset_wifi(self.dut)
     78 
     79     def on_fail(self, test_name, begin_time):
     80         self.dut.cat_adb_log(test_name, begin_time)
     81         self.dut.take_bug_report(test_name, begin_time)
     82 
     83     def roaming_from_AP1_and_AP2(self, AP1_network, AP2_network):
     84         """Test roaming between two APs.
     85 
     86         Args:
     87             AP1_network: AP-1's network information.
     88             AP2_network: AP-2's network information.
     89 
     90         Steps:
     91         1. Make AP1 visible, AP2 not visible.
     92         2. Connect to AP1's ssid.
     93         3. Make AP1 not visible, AP2 visible.
     94         4. Expect DUT to roam to AP2.
     95         5. Validate connection information and ping.
     96         """
     97         wutils.set_attns(self.attenuators, "AP1_on_AP2_off")
     98         wutils.wifi_connect(self.dut, AP1_network)
     99         self.log.info("Roaming from %s to %s", AP1_network, AP2_network)
    100         wutils.trigger_roaming_and_validate(self.dut, self.attenuators,
    101             "AP1_off_AP2_on", AP2_network)
    102 
    103     """ Tests Begin.
    104 
    105         The following tests are designed to test inter-SSID Roaming only.
    106 
    107         """
    108     @test_tracker_info(uuid="db8a46f9-713f-4b98-8d9f-d36319905b0a")
    109     def test_roaming_between_AP1_to_AP2_open_2g(self):
    110         AP1_network = self.open_network[0]["2g"]
    111         AP2_network = self.open_network[1]["2g"]
    112         self.roaming_from_AP1_and_AP2(AP1_network, AP2_network)
    113 
    114     @test_tracker_info(uuid="0db67d9b-6ea9-4f40-acf2-155c4ecf9dc5")
    115     def test_roaming_between_AP1_to_AP2_open_5g(self):
    116         AP1_network = self.open_network[0]["5g"]
    117         AP2_network = self.open_network[1]["5g"]
    118         self.roaming_from_AP1_and_AP2(AP1_network, AP2_network)
    119 
    120     @test_tracker_info(uuid="eabc7319-d962-4bef-b679-725e9ff00420")
    121     def test_roaming_between_AP1_to_AP2_psk_2g(self):
    122         AP1_network = self.reference_networks[0]["2g"]
    123         AP2_network = self.reference_networks[1]["2g"]
    124         self.roaming_from_AP1_and_AP2(AP1_network, AP2_network)
    125 
    126     @test_tracker_info(uuid="1cf9c681-4ff0-45c1-9719-f01629f6a7f7")
    127     def test_roaming_between_AP1_to_AP2_psk_5g(self):
    128         AP1_network = self.reference_networks[0]["5g"]
    129         AP2_network = self.reference_networks[1]["5g"]
    130         self.roaming_from_AP1_and_AP2(AP1_network, AP2_network)
    131 
    132     """ Tests End """
    133