Use auth/assoc hostapd checks for WNM tests.
A recent change introduced the ability to check the state of a DUT
on the AP side (whether it is authenticated, associated, etc.).
This change updates the WNM test to use these checks. A few minor
updates to the tests are also included:
- correct the operating class for 5 GHz VHT AP
- rewording of some assert failure messages
Change-Id: I71bc2a37b0730fa97c4e6ed7916df23ad94501d7
Reviewed-on: https://fuchsia-review.googlesource.com/c/antlion/+/918194
Commit-Queue: Karl Ward <karlward@google.com>
Reviewed-by: Sam Balana <sbalana@google.com>
diff --git a/tests/wlan/functional/WlanWirelessNetworkManagementTest.py b/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
index eff7bd9..b886ec6 100644
--- a/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
+++ b/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
@@ -47,8 +47,8 @@
* One Fuchsia device
* One Whirlwind access point
- Existing Fuchsia drivers do not yet support WNM features out-of-the-box, so these
- tests check that WNM features are not enabled.
+ Existing Fuchsia drivers do not yet support WNM features out-of-the-box, so this
+ suite skips certain tests depending on whether specific WNM features are enabled.
"""
def setup_class(self):
@@ -63,10 +63,10 @@
raise signals.TestAbortClass("At least one Fuchsia device is required")
self.fuchsia_device = self.fuchsia_devices[0]
- if self.fuchsia_device.association_mechanism != "policy":
- raise AttributeError("Must use WLAN policy layer to test WNM.")
-
self.dut = create_wlan_device(self.fuchsia_device)
+ if self.fuchsia_device.association_mechanism != "policy":
+ raise AttributeError("Must use WLAN policy layer to test WNM")
+
self.access_point = self.access_points[0]
def teardown_class(self):
@@ -149,6 +149,11 @@
asserts.assert_true(self.dut.associate(ssid), "Failed to associate.")
asserts.assert_true(self.dut.is_connected(), "Failed to connect.")
client_mac = self._get_client_mac()
+ # Verify that DUT is actually associated (as seen from AP).
+ asserts.assert_true(
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT is not associated on the 2.4GHz band",
+ )
ext_capabilities = self.access_point.get_sta_extended_capabilities(
self.access_point.wlan_2g, client_mac
@@ -170,6 +175,11 @@
asserts.assert_true(self.dut.associate(ssid), "Failed to associate.")
asserts.assert_true(self.dut.is_connected(), "Failed to connect.")
client_mac = self._get_client_mac()
+ # Verify that DUT is actually associated (as seen from AP).
+ asserts.assert_true(
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT is not associated on the 2.4GHz band",
+ )
ext_capabilities = self.access_point.get_sta_extended_capabilities(
self.access_point.wlan_2g, client_mac
@@ -186,6 +196,11 @@
asserts.assert_true(self.dut.associate(ssid), "Failed to associate.")
asserts.assert_true(self.dut.is_connected(), "Failed to connect.")
client_mac = self._get_client_mac()
+ # Verify that DUT is actually associated (as seen from AP).
+ asserts.assert_true(
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT is not associated on the 2.4GHz band",
+ )
ext_capabilities = self.access_point.get_sta_extended_capabilities(
self.access_point.wlan_2g, client_mac
@@ -195,7 +210,7 @@
"DUT is incorrectly advertising WNM Sleep Mode support",
)
- def test_roam_on_btm_req(self):
+ def test_roam_on_btm_req_from_open_2g_to_open_5g(self):
if not self.dut.feature_is_present("BSS_TRANSITION_MANAGEMENT"):
raise signals.TestSkip("skipping test because BTM feature is not present")
@@ -214,8 +229,8 @@
# Verify that DUT is actually associated (as seen from AP).
client_mac = self._get_client_mac()
asserts.assert_true(
- client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
- "Client MAC not included in list of associated STAs on the 2.4GHz band",
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT is not associated on the 2.4GHz band",
)
# Setup 5 GHz AP with same SSID.
@@ -235,7 +250,7 @@
neighbor_5g_ap = NeighborReportElement(
dest_bssid,
dest_bssid_info,
- operating_class=126,
+ operating_class=116,
channel_number=hostapd_constants.AP_DEFAULT_CHANNEL_5G,
phy_type=PhyType.VHT,
)
@@ -257,15 +272,19 @@
# Check that DUT has reassociated.
REASSOC_DEADLINE = datetime.now(timezone.utc) + timedelta(seconds=2)
while datetime.now(timezone.utc) < REASSOC_DEADLINE:
- if client_mac in self.access_point.get_stas(self.access_point.wlan_5g):
+ if self.access_point.sta_associated(self.access_point.wlan_5g, client_mac):
break
else:
time.sleep(0.25)
# Verify that DUT roamed (as seen from AP).
asserts.assert_true(
- client_mac in self.access_point.get_stas(self.access_point.wlan_5g),
- "Client MAC not included in list of associated STAs on the 5GHz band",
+ self.access_point.sta_authenticated(self.access_point.wlan_5g, client_mac),
+ "DUT is not authenticated on the 5GHz band",
+ )
+ asserts.assert_true(
+ self.access_point.sta_associated(self.access_point.wlan_5g, client_mac),
+ "DUT is not associated on the 5GHz band",
)
def test_btm_req_ignored_dut_unsupported(self):
@@ -287,8 +306,8 @@
# Verify that DUT is actually associated (as seen from AP).
client_mac = self._get_client_mac()
asserts.assert_true(
- client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
- "Client MAC not included in list of associated STAs on the 2.4GHz band",
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT is not associated on the 2.4GHz band",
)
# Setup 5 GHz AP with same SSID.
@@ -325,7 +344,7 @@
REASSOC_DEADLINE = datetime.now(timezone.utc) + timedelta(seconds=2)
while datetime.now(timezone.utc) < REASSOC_DEADLINE:
# Fail if DUT has reassociated to 5 GHz AP (as seen from AP).
- if client_mac in self.access_point.get_stas(self.access_point.wlan_5g):
+ if self.access_point.sta_associated(self.access_point.wlan_5g, client_mac):
raise signals.TestFailure(
"DUT unexpectedly roamed to target BSS after BTM request"
)
@@ -334,8 +353,8 @@
# DUT should have stayed associated to original AP.
asserts.assert_true(
- client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
- "DUT lost association on the 2.4GHz band after BTM request",
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT unexpectedly lost association on the 2.4GHz band after BTM request",
)
def test_btm_req_target_ap_rejects_reassoc(self):
@@ -357,8 +376,8 @@
# Verify that DUT is actually associated (as seen from AP).
client_mac = self._get_client_mac()
asserts.assert_true(
- client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
- "Client MAC not included in list of associated STAs on the 2.4GHz band",
+ self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+ "DUT is not associated on the 2.4GHz band",
)
# Setup 5 GHz AP with same SSID, but reject all STAs.
@@ -380,7 +399,7 @@
neighbor_5g_ap = NeighborReportElement(
dest_bssid,
dest_bssid_info,
- operating_class=126,
+ operating_class=116,
channel_number=hostapd_constants.AP_DEFAULT_CHANNEL_5G,
phy_type=PhyType.VHT,
)
@@ -400,20 +419,12 @@
# Check that DUT has not reassociated.
REASSOC_DEADLINE = datetime.now(timezone.utc) + timedelta(seconds=2)
while datetime.now(timezone.utc) < REASSOC_DEADLINE:
- # Fail if DUT has reassociated to 5 GHz AP (as seen from AP).
- if client_mac in self.access_point.get_stas(self.access_point.wlan_5g):
- raise signals.TestFailure(
- "DUT unexpectedly roamed to target BSS after BTM request"
- )
+ # Check that DUT has not reassociated to 5 GHz AP (as seen from AP).
+ if self.access_point.sta_associated(self.access_point.wlan_5g, client_mac):
+ raise signals.TestFailure("DUT unexpectedly roamed to 5GHz band")
else:
time.sleep(0.25)
- # DUT should have stayed associated to original AP.
- asserts.assert_true(
- client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
- "DUT lost association on the 2.4GHz band after BTM request",
- )
-
if __name__ == "__main__":
test_runner.main()