Пример #1
0
def check_tcp_connectivity(client: IPNode, server: IPNode, v6=False,
                           server_port=80, server_itf=None, timeout=300) \
        -> Tuple[int, bytes, bytes]:
    require_cmd("nc", help_str="nc is required to run tests")

    if server_itf is None:
        server_itf = server.defaultIntf()
    server_ip = server_itf.ip6 if v6 else server_itf.ip
    server_cmd = "nc %s -l %d" % ("-6" if v6 else "-4", server_port)
    server_p = server.popen(server_cmd.split(" "))

    t = 0
    client_cmd = "nc -z -w 1 -v %s %d" % (server_ip, server_port)

    client_p = client.popen(client_cmd.split(" "))
    while t != timeout * 2 and client_p.wait() != 0:
        t += 1
        if server_p.poll() is not None:
            out, err = server_p.communicate()
            assert False, \
                "The netcat server used to check TCP connectivity failed" \
                " with the output:\n[stdout]\n%s\n[stderr]\n%s" % (out, err)
        time.sleep(.5)
        client_p = client.popen(client_cmd.split(" "))
    out, err = client_p.communicate()
    code = client_p.poll()
    server_p.send_signal(signal.SIGINT)
    server_p.wait()
    return code, out, err
Пример #2
0
def assert_bw(src: IPNode,
              dst: IPNode,
              bw_target: float,
              tolerance=1,
              v6=False):
    require_cmd("iperf3", help_str="iperf3 is required to run tests")

    iperf = dst.popen("iperf3 -s -J --one-off", universal_newlines=True)
    time.sleep(1)
    dst_ip = dst.intf().ip6 if v6 else dst.intf().ip
    src.popen("iperf3 -c {}".format(dst_ip),
              stdout=subprocess.DEVNULL,
              stderr=subprocess.DEVNULL)
    out, err = iperf.communicate()

    assert iperf.poll() == 0, "Cannot use iperf3 between {src} and {dst}: " \
                              "{err}".format(src=src, dst=dst, err=err)

    bws = []
    data = json.loads(out)
    for sample in data["intervals"]:
        bw = int(sample["sum"]["bits_per_second"]) / 10**6
        if bw_target - tolerance <= bw <= bw_target + tolerance:
            bws.append(bw)
    assert len(bws) >= 5, \
        "Less than half of the pings between {src} and {dst}" \
        " had the desired latency".format(src=src, dst=dst)