Loading tests/unit/test_base_client.py +20 −20 Original line number Diff line number Diff line Loading @@ -194,10 +194,10 @@ class SendMessageTests(unittest.TestCase): b"OK", # Response to "ATTACH" b"UNEXPECTED1", b"UNEXPECTED2", b"<2>SOME-MESSAGE", b"<2>CTRL-EVENT-EXAMPLE", b"OK", # Response to "DETACH" ] assert await client.event("SOME-MESSAGE") assert await client.event("CTRL-EVENT-EXAMPLE") class EventTests(unittest.TestCase): Loading @@ -221,12 +221,12 @@ class EventTests(unittest.TestCase): async with self.client as client, anyio.fail_after(2): client.sock.recv.side_effect = [ b"OK", # Respond to ATTACH b"<2>EXAMPLE-EVENT", b"<2>CTRL-EVENT-EXAMPLE", b"OK", # Respond to DETACH ] prio, evt, args = await client.event("EXAMPLE-EVENT") prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE") assert prio == 2 assert evt == "EXAMPLE-EVENT" assert evt == "CTRL-EVENT-EXAMPLE" assert args is None @anyio_mock.with_anyio() Loading @@ -238,14 +238,14 @@ class EventTests(unittest.TestCase): client.sock.recv.side_effect = [ b"OK", # Respond to ATTACH b"<1>OTHER-MESSAGE", b"<2>OTHER-MESSAGE", b"<4>EXAMPLE-EVENT", b"<2>CTRL-EVENT-OTHER", b"<4>CTRL-EVENT-EXAMPLE", b"OK", # Respond to DETACH b"<3>OTHER-MESSAGE", ] prio, evt, args = await client.event("EXAMPLE-EVENT") prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE") assert prio == 4 assert evt == "EXAMPLE-EVENT" assert evt == "CTRL-EVENT-EXAMPLE" assert args is None @anyio_mock.with_anyio() Loading @@ -257,17 +257,17 @@ class EventTests(unittest.TestCase): client.sock.recv.side_effect = [ b"OK", # Respond to ATTACH b"<1>OTHER-MESSAGE", b"<2>OTHER-MESSAGE", b"<4>EXAMPLE-EVENT3", b"<4>EXAMPLE-EVENT1", b"<2>CTRL-EVENT-OTHER", b"<4>CTRL-EVENT-EXAMPLE3", b"<4>CTRL-EVENT-EXAMPLE1", b"OK", # Respond to DETACH b"<3>OTHER-MESSAGE", b"<3>CTRL-EVENT-OTHER", ] prio, evt, args = await client.event( "EXAMPLE-EVENT1", "EXAMPLE-EVENT2", "EXAMPLE-EVENT3" "CTRL-EVENT-EXAMPLE1", "CTRL-EVENT-EXAMPLE2", "CTRL-EVENT-EXAMPLE3" ) assert prio == 4 assert evt == "EXAMPLE-EVENT3" assert evt == "CTRL-EVENT-EXAMPLE3" assert args is None @anyio_mock.with_anyio() Loading @@ -280,18 +280,18 @@ class EventTests(unittest.TestCase): b"<1>OTHER-MESSAGE", b"OK", # Respond to SOME_COMMAND b"OK", # Respond to ATTACH b"<2>OTHER-MESSAGE", b"<4>EXAMPLE-EVENT", b"<3>OTHER-MESSAGE", b"<2>CTRL-EVENT-OTHER", b"<4>CTRL-EVENT-EXAMPLE", b"<3>CTRL-EVENT-OTHER", b"OK", # Respond to DETACH b"FOO", ] assert await client.send_command("SOME_COMMAND") is None prio, evt, args = await client.event("EXAMPLE-EVENT") prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE") assert prio == 4 assert evt == "EXAMPLE-EVENT" assert evt == "CTRL-EVENT-EXAMPLE" assert args is None assert await client.send_command("SOME_COMMAND", expect="FOO") is None wpa_supplicant/client/base.py +8 −4 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ class BaseClient: InterfaceClient. """ event_regex = regex(r"<([0-9]+)>(\S+)(?:\s(.*))?") event_regex = regex(r"<([0-9]+)>(?:((?:CTRL|WPS|AP|P2P)-[A-Z0-9-]+)(?:\s|$))?(.+)?") def __init__(self, *, logger=None): self.logger = logger or logging.getLogger(__package__) Loading Loading @@ -201,16 +201,20 @@ class BaseClient: self.logger.warning("Unexpected response message: %s", msg) return prio, name, args = match.groups() prio, name, msg = match.groups() prio = EventPriority(int(prio)) if name is None: self.logger.log(prio.get_logger_level(), msg) return try: queues = self._eventqueues[name] except KeyError: self.logger.log(prio.get_logger_level(), "%s [UNEXPECTED]: %s", name, args) self.logger.debug("[unhandled] %s: %s", name, msg or "[no arguments]") else: for msgqueue in queues: await msgqueue.put((prio, name, args)) await msgqueue.put((prio, name, msg)) @contextlib.contextmanager def _events_queue(self, events: Union[Sequence, Set]): Loading Loading
tests/unit/test_base_client.py +20 −20 Original line number Diff line number Diff line Loading @@ -194,10 +194,10 @@ class SendMessageTests(unittest.TestCase): b"OK", # Response to "ATTACH" b"UNEXPECTED1", b"UNEXPECTED2", b"<2>SOME-MESSAGE", b"<2>CTRL-EVENT-EXAMPLE", b"OK", # Response to "DETACH" ] assert await client.event("SOME-MESSAGE") assert await client.event("CTRL-EVENT-EXAMPLE") class EventTests(unittest.TestCase): Loading @@ -221,12 +221,12 @@ class EventTests(unittest.TestCase): async with self.client as client, anyio.fail_after(2): client.sock.recv.side_effect = [ b"OK", # Respond to ATTACH b"<2>EXAMPLE-EVENT", b"<2>CTRL-EVENT-EXAMPLE", b"OK", # Respond to DETACH ] prio, evt, args = await client.event("EXAMPLE-EVENT") prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE") assert prio == 2 assert evt == "EXAMPLE-EVENT" assert evt == "CTRL-EVENT-EXAMPLE" assert args is None @anyio_mock.with_anyio() Loading @@ -238,14 +238,14 @@ class EventTests(unittest.TestCase): client.sock.recv.side_effect = [ b"OK", # Respond to ATTACH b"<1>OTHER-MESSAGE", b"<2>OTHER-MESSAGE", b"<4>EXAMPLE-EVENT", b"<2>CTRL-EVENT-OTHER", b"<4>CTRL-EVENT-EXAMPLE", b"OK", # Respond to DETACH b"<3>OTHER-MESSAGE", ] prio, evt, args = await client.event("EXAMPLE-EVENT") prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE") assert prio == 4 assert evt == "EXAMPLE-EVENT" assert evt == "CTRL-EVENT-EXAMPLE" assert args is None @anyio_mock.with_anyio() Loading @@ -257,17 +257,17 @@ class EventTests(unittest.TestCase): client.sock.recv.side_effect = [ b"OK", # Respond to ATTACH b"<1>OTHER-MESSAGE", b"<2>OTHER-MESSAGE", b"<4>EXAMPLE-EVENT3", b"<4>EXAMPLE-EVENT1", b"<2>CTRL-EVENT-OTHER", b"<4>CTRL-EVENT-EXAMPLE3", b"<4>CTRL-EVENT-EXAMPLE1", b"OK", # Respond to DETACH b"<3>OTHER-MESSAGE", b"<3>CTRL-EVENT-OTHER", ] prio, evt, args = await client.event( "EXAMPLE-EVENT1", "EXAMPLE-EVENT2", "EXAMPLE-EVENT3" "CTRL-EVENT-EXAMPLE1", "CTRL-EVENT-EXAMPLE2", "CTRL-EVENT-EXAMPLE3" ) assert prio == 4 assert evt == "EXAMPLE-EVENT3" assert evt == "CTRL-EVENT-EXAMPLE3" assert args is None @anyio_mock.with_anyio() Loading @@ -280,18 +280,18 @@ class EventTests(unittest.TestCase): b"<1>OTHER-MESSAGE", b"OK", # Respond to SOME_COMMAND b"OK", # Respond to ATTACH b"<2>OTHER-MESSAGE", b"<4>EXAMPLE-EVENT", b"<3>OTHER-MESSAGE", b"<2>CTRL-EVENT-OTHER", b"<4>CTRL-EVENT-EXAMPLE", b"<3>CTRL-EVENT-OTHER", b"OK", # Respond to DETACH b"FOO", ] assert await client.send_command("SOME_COMMAND") is None prio, evt, args = await client.event("EXAMPLE-EVENT") prio, evt, args = await client.event("CTRL-EVENT-EXAMPLE") assert prio == 4 assert evt == "EXAMPLE-EVENT" assert evt == "CTRL-EVENT-EXAMPLE" assert args is None assert await client.send_command("SOME_COMMAND", expect="FOO") is None
wpa_supplicant/client/base.py +8 −4 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ class BaseClient: InterfaceClient. """ event_regex = regex(r"<([0-9]+)>(\S+)(?:\s(.*))?") event_regex = regex(r"<([0-9]+)>(?:((?:CTRL|WPS|AP|P2P)-[A-Z0-9-]+)(?:\s|$))?(.+)?") def __init__(self, *, logger=None): self.logger = logger or logging.getLogger(__package__) Loading Loading @@ -201,16 +201,20 @@ class BaseClient: self.logger.warning("Unexpected response message: %s", msg) return prio, name, args = match.groups() prio, name, msg = match.groups() prio = EventPriority(int(prio)) if name is None: self.logger.log(prio.get_logger_level(), msg) return try: queues = self._eventqueues[name] except KeyError: self.logger.log(prio.get_logger_level(), "%s [UNEXPECTED]: %s", name, args) self.logger.debug("[unhandled] %s: %s", name, msg or "[no arguments]") else: for msgqueue in queues: await msgqueue.put((prio, name, args)) await msgqueue.put((prio, name, msg)) @contextlib.contextmanager def _events_queue(self, events: Union[Sequence, Set]): Loading