[PATCH v2 3/6] tests: refactor event waiting
Johannes Berg
johannes at sipsolutions.net
Fri Sep 11 15:59:51 PDT 2026
From: Johannes Berg <johannes.berg at intel.com>
Quite a bit of code is duplicated here, refactor it.
One additional motivation is allowing async tests in
the future, which this will simplify.
Signed-off-by: Johannes Berg <johannes.berg at intel.com>
---
tests/hwsim/hostapd.py | 37 +++++-------------------------------
tests/hwsim/run-tests.py | 2 ++
tests/hwsim/wpasupplicant.py | 26 ++++---------------------
wpaspy/wpaspy.py | 21 ++++++++++++++++++++
4 files changed, 32 insertions(+), 54 deletions(-)
diff --git a/tests/hwsim/hostapd.py b/tests/hwsim/hostapd.py
index 9cfe5a2b61d0..a0a2340fdf36 100644
--- a/tests/hwsim/hostapd.py
+++ b/tests/hwsim/hostapd.py
@@ -81,21 +81,8 @@ class HostapdGlobal:
return self.ctrl.request(cmd, timeout)
def wait_event(self, events, timeout):
- start = os.times()[4]
- while True:
- while self.mon.pending():
- ev = self.mon.recv()
- logger.debug(self.dbg + "(global): " + ev)
- for event in events:
- if event in ev:
- return ev
- now = os.times()[4]
- remaining = start + timeout - now
- if remaining <= 0:
- break
- if not self.mon.pending(timeout=remaining):
- break
- return None
+ return wpaspy.wait_event(self.mon, events, timeout,
+ log_prefix=self.dbg + "(global): ")
def add(self, ifname, driver=None):
cmd = "ADD " + ifname + " " + hapd_ctrl
@@ -303,23 +290,9 @@ class Hostapd:
logger.debug(self.dbg + ": " + ev)
def wait_event(self, events, timeout):
- if not isinstance(events, list):
- raise Exception("Hostapd.wait_event() called with incorrect events argument type")
- start = os.times()[4]
- while True:
- while self.mon.pending():
- ev = self.mon.recv()
- logger.debug(self.dbg + ": " + ev)
- for event in events:
- if event in ev:
- return ev
- now = os.times()[4]
- remaining = start + timeout - now
- if remaining <= 0:
- break
- if not self.mon.pending(timeout=remaining):
- break
- return None
+ return wpaspy.wait_event(self.mon, events, timeout,
+ log_prefix=self.dbg + ": ")
+
def wait_sta(self, addr=None, timeout=2, wait_4way_hs=False):
ev = self.wait_event(["AP-STA-CONNECT"], timeout=timeout)
diff --git a/tests/hwsim/run-tests.py b/tests/hwsim/run-tests.py
index 52d64828c342..f113b8149347 100755
--- a/tests/hwsim/run-tests.py
+++ b/tests/hwsim/run-tests.py
@@ -12,6 +12,8 @@ import gc
import sys
import time
import glob
+import asyncio
+import inspect
from datetime import datetime
import argparse
import subprocess
diff --git a/tests/hwsim/wpasupplicant.py b/tests/hwsim/wpasupplicant.py
index b5e241a825ba..15178e2b817e 100644
--- a/tests/hwsim/wpasupplicant.py
+++ b/tests/hwsim/wpasupplicant.py
@@ -880,33 +880,15 @@ class WpaSupplicant:
return self.group_form_result(ev, expect_failure, go_neg_res)
raise Exception("P2P_CONNECT failed")
- def _wait_event(self, mon, pfx, events, timeout):
- if not isinstance(events, list):
- raise Exception("WpaSupplicant._wait_event() called with incorrect events argument type")
- start = os.times()[4]
- while True:
- while mon.pending():
- ev = mon.recv()
- logger.debug(self.dbg + pfx + ev)
- for event in events:
- if event in ev:
- return ev
- now = os.times()[4]
- remaining = start + timeout - now
- if remaining <= 0:
- break
- if not mon.pending(timeout=remaining):
- break
- return None
-
def wait_event(self, events, timeout=10):
- return self._wait_event(self.mon, ": ", events, timeout)
+ return wpaspy.wait_event(self.mon, events, timeout,
+ log_prefix=self.dbg + ": ")
def wait_global_event(self, events, timeout):
if self.global_iface is None:
return self.wait_event(events, timeout)
- return self._wait_event(self.global_mon, "(global): ",
- events, timeout)
+ return wpaspy.wait_event(self.global_mon, events, timeout,
+ log_prefix=self.dbg + "(global): ")
def wait_group_event(self, events, timeout=10):
if not isinstance(events, list):
diff --git a/wpaspy/wpaspy.py b/wpaspy/wpaspy.py
index 5b8140b7c99f..eb7f06ded838 100644
--- a/wpaspy/wpaspy.py
+++ b/wpaspy/wpaspy.py
@@ -10,6 +10,9 @@ import os
import stat
import socket
import select
+import logging
+
+logger = logging.getLogger()
counter = 0
@@ -147,3 +150,21 @@ class Ctrl:
except UnicodeDecodeError as e:
r = res
return r
+
+def wait_event(sock, events, timeout=10, log_prefix=""):
+ assert isinstance(events, list), "'events' must be a list"
+ start = os.times()[4]
+ while True:
+ while sock.pending():
+ ev = sock.recv()
+ logger.debug(log_prefix + ev)
+ for event in events:
+ if event in ev:
+ return ev
+ now = os.times()[4]
+ remaining = start + timeout - now
+ if remaining <= 0:
+ break
+ if not sock.pending(timeout=remaining):
+ break
+ return None
--
2.55.0
More information about the Hostap
mailing list