From 5f299ee151f7db9823dae0ba24a43860452613ef Mon Sep 17 00:00:00 2001 From: Tobias Waldekranz Date: Wed, 29 Nov 2023 16:45:44 +0100 Subject: [PATCH] test/infamy: Generalize wait functionality into "until" --- .../ietf_interfaces/iface_phys_address.py | 5 ++-- test/case/ietf_interfaces/vlan_ping.py | 7 +++-- test/infamy/__init__.py | 1 + test/infamy/iface.py | 4 --- test/infamy/util.py | 10 +++++++ test/infamy/wait.py | 26 ------------------- 6 files changed, 19 insertions(+), 34 deletions(-) create mode 100644 test/infamy/util.py delete mode 100644 test/infamy/wait.py diff --git a/test/case/ietf_interfaces/iface_phys_address.py b/test/case/ietf_interfaces/iface_phys_address.py index d266b7cd..414f2221 100755 --- a/test/case/ietf_interfaces/iface_phys_address.py +++ b/test/case/ietf_interfaces/iface_phys_address.py @@ -3,7 +3,8 @@ import copy import infamy import infamy.iface as iface -from infamy.wait import wait_mac_address + +from infamy.util import until with infamy.Test() as test: with test.step("Initialize"): @@ -37,6 +38,6 @@ with infamy.Test() as test: del i["phys-address"] break target.put_diff_dicts("ietf-interfaces", running, new) - wait_mac_address(target, tport, pmac) + until(lambda: iface.get_phys_address(target, tport) == pmac) test.succeed() diff --git a/test/case/ietf_interfaces/vlan_ping.py b/test/case/ietf_interfaces/vlan_ping.py index 9a285b66..761d5283 100755 --- a/test/case/ietf_interfaces/vlan_ping.py +++ b/test/case/ietf_interfaces/vlan_ping.py @@ -1,8 +1,11 @@ #!/usr/bin/env python3 import infamy +import infamy.iface as iface import copy -from infamy.wait import wait_links + +from infamy import until + def test_ping(hport, should_pass): with infamy.IsolatedMacVlan(hport) as ns: pingtest = ns.runsh(""" @@ -55,7 +58,7 @@ with infamy.Test() as test: }) with test.step("Waiting for links to come up"): - wait_links(target, [tport]) + until(lambda: iface.get_oper_up(target, tport)) with test.step("Ping 10.0.0.2 from VLAN 10 on host:data with IP 10.0.0.1"): _, hport = env.ltop.xlate("host", "data") diff --git a/test/infamy/__init__.py b/test/infamy/__init__.py index f89091b3..cd89e4c8 100644 --- a/test/infamy/__init__.py +++ b/test/infamy/__init__.py @@ -4,6 +4,7 @@ from .env import Env from .netns import IsolatedMacVlan from .sniffer import Sniffer from .tap import Test +from .util import until def std_topology(name): return os.path.realpath( diff --git a/test/infamy/iface.py b/test/infamy/iface.py index 130d4ef4..8e668f52 100644 --- a/test/infamy/iface.py +++ b/test/infamy/iface.py @@ -46,10 +46,6 @@ def get_phys_address(target, iface): """Fetch interface MAC address (operational status)""" return _iface_get_param(target, iface, "phys-address") -def is_phys_address(target,iface,addr): - """Check if MAC address is a specific value""" - return get_phys_address(target,iface) == addr - def get_oper_up(target,iface): state=get_oper_status(target,iface) return state == "up" diff --git a/test/infamy/util.py b/test/infamy/util.py new file mode 100644 index 00000000..d69a1e4b --- /dev/null +++ b/test/infamy/util.py @@ -0,0 +1,10 @@ +import time + +def until(fn, attempts=10, interval=1): + for attempt in range(attempts): + if fn(): + return + + time.sleep(interval) + + raise Exception("Expected condition did not materialize") diff --git a/test/infamy/wait.py b/test/infamy/wait.py deleted file mode 100644 index 5d246078..00000000 --- a/test/infamy/wait.py +++ /dev/null @@ -1,26 +0,0 @@ -import time -import infamy.iface -def wait(func, *args): - timeout = 10 - while(timeout>0): - if len(args) == 0: - f=func() - else: - f=func(*args) - - if(f): - return True - timeout-=1 - time.sleep(1) - - return False - -def wait_links(target, ifaces): - for i in ifaces: - if not wait(infamy.iface.get_oper_up, target, i): - raise Exception("Interface did not come up in time.") - - -def wait_mac_address(target, iface, mac): - if not wait(infamy.iface.is_phys_address, target, iface, mac): - raise Exception("Failed waiting for MAC address")