lokinet/test/hive/test_path_builds.py

85 lines
2.5 KiB
Python

from time import time
def test_path_builds(HiveArbitrary):
h = HiveArbitrary(n_relays=30, n_clients=10)
start_time = time()
cur_time = start_time
test_duration = 5 #seconds
log_attempts = True
paths = []
while cur_time < start_time + test_duration:
h.CollectAllEvents()
for event in h.events:
event_name = event.__class__.__name__
if log_attempts and event_name == "PathAttemptEvent":
path = dict()
path["hops"] = event.hops
path["received"] = [False] * len(event.hops)
path["prev"] = [None] * len(event.hops)
for i in range(1, len(event.hops)):
path["prev"][i] = event.hops[i-1].rc.routerID
path["prev"][0] = event.routerID
path["rxid"] = event.hops[0].rxid
path["status"] = None
paths.append(path)
elif event_name == "PathRequestReceivedEvent":
for path in paths:
for i in range(len(path["hops"])):
assert type(path["hops"][i].upstreamRouter) == type(event.nextHop)
assert type(path["prev"][i]) == type(event.prevHop)
assert type(path["hops"][i].txid) == type(event.txid)
assert type(path["hops"][i].rxid) == type(event.rxid)
if (path["hops"][i].upstreamRouter == event.nextHop and
path["prev"][i] == event.prevHop and
path["hops"][i].txid == event.txid and
path["hops"][i].rxid == event.rxid):
path["received"][i] = True
elif event_name == "PathStatusReceivedEvent":
for path in paths:
if event.rxid == path["rxid"]:
path["status"] = event
h.events = []
cur_time = time()
# only collect path attempts for 3 seconds
if cur_time > start_time + 3:
log_attempts = False
assert len(paths) > 0
fail_status_count = 0
missing_status_count = 0
missing_rcv_count = 0
expected_count = 0
for path in paths:
if path["status"]:
if not path["status"].Successful:
print(path["status"])
fail_status_count = fail_status_count + 1
else:
missing_status_count = missing_status_count + 1
for rcv in path["received"]:
expected_count = expected_count + 1
if not rcv:
missing_rcv_count = missing_rcv_count + 1
print("Path count: {}, Expected rcv: {}, missing rcv: {}, fail_status_count: {}, missing_status_count: {}".format(len(paths), expected_count, missing_rcv_count, fail_status_count, missing_status_count))
assert fail_status_count == 0
assert missing_rcv_count == 0
assert missing_status_count == 0