Files
Tobias WaldekranzandJoachim Wiberg 4e69f800de 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.
2023-06-14 17:40:16 +02:00

59 lines
1.4 KiB
Python
Executable File

#!/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()