예제 #1
0
def assert_dns_record(node: IPNode, dns_server_address: str, record: DNSRecord,
                      port=53, timeout=60):
    require_cmd("dig", help_str="dig is required to run tests")

    server_cmd = "dig @{address} -p {port} -t {rtype} {domain_name}"\
        .format(address=dns_server_address, rtype=record.rtype,
                domain_name=record.domain_name, port=port)
    out_regex = re.compile(r" *{name}[ \t]+{ttl}[ \t]+IN[ \t]+{rtype}[ \t]+"
                           r"{rdata}"
                           .format(rtype=record.rtype, ttl=record.ttl,
                                   name=record.domain_name,
                                   rdata=record.rdata))

    t = 0
    out = node.cmd(server_cmd.split(" "))
    got_answer, match = search_dns_reply(out, out_regex)
    while t < timeout * 2 and match is None:
        t += 1
        time.sleep(.5)
        out = node.cmd(server_cmd.split(" "))
        got_answer, match = search_dns_reply(out, out_regex)

    assert got_answer, "No answer was received in %s" \
                       " from server %s in the reply of '%s':\n%s" \
                       % (node.name, dns_server_address, server_cmd, out)

    assert match is not None, "The expected data '%s' cannot be found " \
                              "in the DNS reply of '%s' received by %s from " \
                              "%s:\n%s" % (out_regex.pattern, server_cmd,
                                           node.name, dns_server_address, out)
예제 #2
0
def assert_routing_table(router: IPNode, expected_prefixes: List[str],
                         timeout=120):
    """
    :param router: The router to test
    :param expected_prefixes: The list of prefixes to be in the routing table
    :param timeout: Time to wait for the routing convergence
    :return:
    """

    cmd = "ip -%d route" % ip_network(str(expected_prefixes[0])).version
    out = router.cmd(cmd)
    prefixes = re.findall(r"|".join(expected_prefixes), out)
    count = 0
    while any(item in prefixes for item in expected_prefixes):
        if count == timeout:
            pytest.fail("Cannot get all expected prefixes (%s) from routing "
                        "table (%s)" % (expected_prefixes, prefixes))
        time.sleep(1)
        count += 1
        out = router.cmd(cmd)
        prefixes = re.findall(r"|".join(expected_prefixes), out)
    assert len(prefixes) == 0