import random from ipaddress import IPv6Network def parse_rule(rule): parts = rule.split() prefix, next_hop = parts return IPv6Network(prefix), int(next_hop) def generate_random_test_cases(rules, n): with open('../data/test-data', 'w') as f: for rule in rules: rule_network = rule[0] rule_next_hop = rule[1] network = rule_network for _ in range(n): next_hop = rule_next_hop address = rule_network.network_address + random.randint(0, rule_network.num_addresses - 1) for oth_rule in rules: if oth_rule == rule: continue oth_network = oth_rule[0] oth_next_hop = oth_rule[1] if address in oth_network and oth_network.subnet_of( network ): print(f"address {address} is closer to {oth_network} {rule_next_hop} than {rule_network} {oth_next_hop}") next_hop = oth_next_hop network = oth_network f.write(f"{address} {next_hop}\n") print(f"Generated test case: {address} {next_hop}") print("tests for rule ", rule_network, " with next hop ", rule_next_hop, " generated") def main(): rules = [] with open('../data/routing-data', 'r') as f: for line in f: rules.append(line.strip()) parsed_rules = [parse_rule(rule) for rule in rules] num_tests = 10 generate_random_test_cases(parsed_rules, num_tests) if __name__ == "__main__": main()