test/case: Add meta/wait to wait for nodes to boot up

When running in the cloud, without KVM emulation, together with many
other tenants, it can take a very long time to boot the instances.

Therefore, add a meta test that will wait for all devices in the
physical topology to come up before exiting. This means that the
actual test cases that follow can assume that devices will answer
NETCONF requests.
This commit is contained in:
Tobias Waldekranz
2023-06-14 17:40:16 +02:00
committed by Joachim Wiberg
parent aa8e11a58b
commit 4e69f800de
2 changed files with 60 additions and 0 deletions
+2
View File
@@ -1,4 +1,6 @@
---
- case: meta/wait.py
- name: ietf-system
suite: ietf_system/all.yaml
+58
View File
@@ -0,0 +1,58 @@
#!/usr/bin/env python3
import socket
import time
import infamy, infamy.neigh
def ll6ping(node):
neigh = None
for (_, cport), (_, nport) in env.ptop.get_paths(ctrl, node):
neigh = infamy.neigh.ll6ping(cport, flags=["-w1", "-c1", "-L", "-n"])
if neigh:
print(f"Found {neigh} on {cport} (connected to {node}:{nport})")
break
return neigh
def netconf_syn(neigh):
try:
ai = socket.getaddrinfo(neigh, 830, 0, 0, socket.SOL_TCP)
sock = socket.socket(ai[0][0], ai[0][1], 0)
sock.connect(ai[0][4])
sock.close()
print(f"{neigh} answers to TCP connections on port 830 (NETCONF)")
return True
except:
return False
with infamy.Test() as test:
with test.step("Initialize"):
env = infamy.Env()
ctrl = env.ptop.get_ctrl()
infixen = env.ptop.get_infixen()
with test.step(f"Reach {infixen}"):
timeout = time.time() + 300
print(f"Waiting a maximum of 5min for {infixen} to come up")
while infixen and time.time() < timeout:
time.sleep(1)
retry = []
for node in infixen:
neigh = ll6ping(node)
if neigh and netconf_syn(neigh):
continue
retry.append(node)
infixen = retry
if infixen:
print(f"Unable to reach {infixen}")
test.fail()
test.succeed()