mirror of
https://github.com/kernelkit/infix.git
synced 2026-07-30 20:43:02 +02:00
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.
59 lines
1.4 KiB
Python
Executable File
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()
|