Exemple #1
0
def Verify(tc):
    api.Logger.info("Verify.")

    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    if tc.resp == None:
        return api.types.status.SUCCESS
    for cmd in tc.resp.commands:
        if tc.cmd_cookies['show after'] == cmd.command:     
            if not cmd.stdout:
                return api.types.status.SUCCESS
            print(cmd.stdout)
            yaml_out = get_yaml(cmd)
            if tc.resp_flow:
                flow = get_respflow(yaml_out)
            else:
                flow = get_initflow(yaml_out)
            state = get_tcpstate(flow)
            if int(state) == TcpState.ESTABLISHED:
                return api.types.status.SUCCESS
            else:
                return api.types.status.FAILURE

    return api.types.status.FAILURE
Exemple #2
0
def Verify(tc):
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    if tc.skip: return api.types.status.SUCCESS
    if tc.resp is None:
        return api.types.status.FAILURE

    result = api.types.status.SUCCESS
    cookie_idx = 0

    for cmd in tc.resp.commands:
        api.Logger.info("Ping Results for %s" % (tc.cmd_cookies[cookie_idx]))
        api.PrintCommandResults(cmd)
        if cmd.exit_code != 0:
            if api.GetConfigNicMode() == 'hostpin' and tc.iterators.pktsize > 1024:
                result = api.types.status.SUCCESS
            else:
                try:
                    found = re.search(cmd.node_name+"_(.*)_subif_(.*$)",cmd.entity_name)
                    if found:
                        debugPing(cmd, found.group(1))
                    else:
                        api.Logger.debug("failed to determine interface name from {0}".format(cmd.entity_name))
                except:
                    api.Logger.debug("failed to debug {0} ping issue".format(cmd.entity_name))
                result = api.types.status.FAILURE
            #for future use
            #elif tc.args.type == 'local_only':
            #    return api.types.status.CRITICAL
            #else:
            #    raise OfflineTestbedException
        cookie_idx += 1
    return result
Exemple #3
0
def Verify(tc):
    api.Logger.info("Verify.")

    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    if tc.resp is None:
        api.Logger.info("Null response from aggregartecommands")
        return api.types.status.FAILURE

    cookie_idx = 0
    for cmd in tc.resp.commands:
        api.Logger.info("Results for %s" % (tc.cmd_cookies[cookie_idx]))
        api.PrintCommandResults(cmd)

    metrics = utils.GetDelphiSessionSummaryMetrics(tc.wc_server.node_name)
    api.Logger.info("After Session summary metrics for %s => %s" % \
            (tc.wc_server.node_name, metrics))

    limit = utils.GetSessionLimit(tc.proto)
    if limit == api.types.status.FAILURE or limit == 0:
        api.Logger.error("Session Limit invalid : %d" % limit)
        return api.types.status.FAILURE

    if metrics[tc.metric_field] != limit:
        api.Logger.error("%s : %d Expected : %d" % \
                (tc.metric_field, metrics[tc.metric_field], limit))
        return api.types.status.FAILURE
    api.Logger.info("%s session limit metric verification Success" % tc.proto)
    return VerifySessionEvents(tc)
Exemple #4
0
def Trigger(tc):
    api.Logger.info("Trigger.")
    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    if tc.resp_flow:
        new_seq_num = tc.pre_ctrckinf.r_tcpseqnum + tc.pre_ctrckinf.i_tcpwinsz * (
            2**tc.pre_ctrckinf.i_tcpwinscale)
        cmd_cookie = "hping3 -c 1 -s 1237 -p 52255 -M {}  -L {} --rst  --ack --tcp-timestamp {}".format(
            new_seq_num, tc.pre_ctrckinf.r_tcpacknum, tc.client.ip_address)
        add_command(req, tc, 'fail ping', tc.server, cmd_cookie)
    else:
        new_seq_num = tc.pre_ctrckinf.i_tcpseqnum + tc.pre_ctrckinf.r_tcpwinsz * (
            2**tc.pre_ctrckinf.r_tcpwinscale)
        cmd_cookie = "hping3 -c 1 -s 52255 -p 1237 -M {}  -L {} --rst --ack --tcp-timestamp {}".format(
            new_seq_num, tc.pre_ctrckinf.i_tcpacknum, tc.server.ip_address)
        add_command(req, tc, 'fail ping', tc.client, cmd_cookie)

    cmd_cookie = "sleep 3 && /nic/bin/halctl show session --dstport 1237 --dstip {} --yaml".format(
        tc.server.ip_address)
    add_command(req, tc, 'show after', tc.client, cmd_cookie, naples=True)

    cmd_cookie = "/nic/bin/halctl clear session"
    add_command(req, tc, 'clear', tc.client, cmd_cookie, naples=True)

    if tc.server.IsNaples():
        cmd_cookie = "/nic/bin/halctl clear session"
        add_command(req, tc, 'clear', tc.server, cmd_cookie, naples=True)

    trig_resp = api.Trigger(req)
    term_resp1 = api.Trigger_TerminateAllCommands(tc.setup_cmd_resp)
    tc.resp = api.Trigger_AggregateCommandsResponse(trig_resp, term_resp1)
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    return api.types.status.SUCCESS
Exemple #5
0
def Verify(tc):
    api.Logger.info("Verify.")

    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    if tc.resp == None:
        return api.types.status.SUCCESS
    for cmd in tc.resp.commands:
        if tc.cmd_cookies['show after'] == cmd.command:
            if not cmd.stdout:
                return api.types.status.SUCCESS
            print(cmd.stdout)
            yaml_out = get_yaml(cmd)
            if tc.resp_flow:
                flow = get_respflow(yaml_out)
            else:
                flow = get_initflow(yaml_out)
            conn_info = get_conntrack_info(flow)
            excep = get_exceptions(conn_info)
            if (excep['tcpoutofwindow'] == False):
                return api.types.status.FAILURE
            return api.types.status.SUCCESS

    #print(tc.resp)
    return api.types.status.FAILURE
Exemple #6
0
def Verify(tc):
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    try:
        if tc.skip: return api.types.status.SUCCESS

        cstat = tc.clientHandle.get_stats()
        sstat = tc.serverHandle.get_stats()
        ct = cstat['traffic']['client']
        st = sstat['traffic']['server']

        cleanup(tc)

        if tc.iterators.proto == 'tcp':
            return TRexIotaWrapper.validateTcpStats(ct,
                                                    st,
                                                    int(tc.iterators.cps),
                                                    int(tc.iterators.duration),
                                                    tolerance=tc.args.drop_tol)
        elif tc.iterators.proto == 'udp':
            return TRexIotaWrapper.validateUdpStats(ct,
                                                    st,
                                                    int(tc.iterators.cps),
                                                    int(tc.iterators.duration),
                                                    tolerance=tc.args.drop_tol)
        else:
            raise Exception("Unknown protocol %s" % tc.iterators.proto)

    except Exception as e:
        traceback.print_exc()
        api.Logger.error("Failed to verify the CPS : %s" % (e))
        cleanup(tc)
        return api.types.status.FAILURE
Exemple #7
0
def Trigger(tc):
    api.Logger.info("Trigger.")
    if tc.skip: return api.types.status.SUCCESS

    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)
    if tc.resp_flow:
        cmd_cookie = 'tcpdump -nni {} "src host {} and dst host {} and src port 1237"'.format(
            tc.client.interface, tc.server.ip_address, tc.client.ip_address)
        print(cmd_cookie)
        add_command(req, tc, 'tcpdump', tc.client, cmd_cookie, True)
        new_seq_num = tc.pre_ctrckinf.r_tcpseqnum + tc.pre_ctrckinf.i_tcpwinsz * (
            2**tc.pre_ctrckinf.i_tcpwinscale)
        #left out of window - retransmit
        cmd_cookie = "hping3 -c 1 -s 1237 -p 52255 -M {}  -L {} --ack  {} -d 900 --tcp-timestamp".format(
            wrap_around(tc.pre_ctrckinf.r_tcpseqnum, 0),
            tc.pre_ctrckinf.r_tcpacknum, tc.client.ip_address)
        add_command(req, tc, 'fail ping', tc.server, cmd_cookie)
    else:

        cmd_cookie = 'tcpdump -nni {} "src host {} and dst host {} and src port 1237"'.format(
            tc.client.interface, tc.client.ip_address, tc.server.ip_address)
        print(cmd_cookie)
        add_command(req, tc, 'tcpdump', tc.client, cmd_cookie, True)
        new_seq_num = tc.pre_ctrckinf.i_tcpseqnum + tc.pre_ctrckinf.r_tcpwinsz * (
            2**tc.pre_ctrckinf.r_tcpwinscale)

        #left out of window - retransmit
        cmd_cookie = "hping3 -c 1 -s 52255 -p 1237 -M {}  -L {} --ack --tcp-timestamp {} -d 10".format(
            wrap_around(tc.pre_ctrckinf.i_tcpseqnum, 0),
            tc.pre_ctrckinf.i_tcpacknum, tc.server.ip_address)
        add_command(req, tc, "fail ping", tc.client, cmd_cookie)

    cmd_cookie = "sleep 3 && /nic/bin/halctl show session --dstport 1237 --dstip {} --yaml".format(
        tc.server.ip_address)
    add_command(req, tc, 'show after', tc.client, cmd_cookie, naples=True)

    cmd_cookie = "/nic/bin/halctl clear session"
    add_command(req, tc, 'clear', tc.client, cmd_cookie, naples=True)

    if tc.server.IsNaples():
        cmd_cookie = "/nic/bin/halctl clear session"
        add_command(req, tc, 'clear', tc.server, cmd_cookie, naples=True)

    sec_resp = api.Trigger(req)

    term_first_resp = api.Trigger_TerminateAllCommands(tc.first_resp)
    term_sec_resp = api.Trigger_TerminateAllCommands(sec_resp)

    tc.resp = api.Trigger_AggregateCommandsResponse(tc.first_resp,
                                                    term_first_resp)
    tc.resp = api.Trigger_AggregateCommandsResponse(sec_resp, term_sec_resp)

    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    return api.types.status.SUCCESS
Exemple #8
0
def Verify(tc):
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    api.Logger.info("Validating ...")
    if tc.resp is None:
        return api.types.status.FAILURE

    result = api.types.status.SUCCESS
    return result
Exemple #9
0
def Verify(tc):

    result = api.types.status.SUCCESS
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    try:
        # Disconnect and stop Trex, so that we dont get any more packets from Trex.
        # Without this session verification will fail.
        cleanup(tc)

        ret = verifySessions(tc)
        if ret != api.types.status.SUCCESS:
            return ret
        api.Logger.info("Verified session stats successfully.")

        if tc.mem_leak_test:
            api.Logger.info(
                "Waiting for 300 secs to allow system to reclaim "
                "free memory from heap before collecting final MemStats")
            # wait for 300 secs for memory to be freed to heap
            time.sleep(300)
            # Reclaim all free memory from heap at end of test
            if enable_memory_trim:
                execHalMemTrimCmd(tc)

            memStatsObjClient.CollectMemUsageSnapshot(log=True)
            memStatsObjClient.PrintMemUsageHistory()
            if memStatsObjClient.CheckMemLeakFromHistory(
                    pname='hal', acceptable_increase=tc.mem_incr_threshold):
                api.Logger.error("MemLeak Found...")
                result = api.types.status.FAILURE
            else:
                api.Logger.info("NO MemLeak Found in HAL process...")

        ret = utils.isHalAlive()
        if ret != api.types.status.SUCCESS:
            api.Logger.error("HAL is DEAD ..")
            result = api.types.status.FAILURE
        else:
            api.Logger.info("Verified the HAL process.")

    except Exception as e:
        traceback.print_exc()
        api.Logger.error("Failed to verify : %s" % (e))
        return api.types.status.FAILURE

    return result
Exemple #10
0
def Trigger(tc):
    api.Logger.info("Trigger.")

    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    if tc.resp_flow:
        #right of window overlap
        iwindo_size = tc.pre_ctrckinf.i_tcpwinsz * (
            2**tc.pre_ctrckinf.i_tcpwinscale)
        cmd_cookie = "hping3 -c 1 -s {} -p {} -M {}  -L {} --fin --ack --tcp-timestamp {} -d {}".format(
            tc.server_port, tc.client_port,
            wrap_around(tc.pre_ctrckinf.r_tcpseqnum + iwindo_size, -200),
            tc.pre_ctrckinf.r_tcpacknum, tc.client.ip_address, 500)
        add_command(req, tc, 'fail ping', tc.server, cmd_cookie)
    else:
        rwindo_size = tc.pre_ctrckinf.r_tcpwinsz * (
            2**tc.pre_ctrckinf.r_tcpwinscale)
        #right of window overlap
        cmd_cookie = "hping3 -c 1 -s {} -p {} -M {}  -L {} --fin --ack --tcp-timestamp {} -d {}".format(
            tc.client_port, tc.server_port,
            wrap_around(tc.pre_ctrckinf.i_tcpseqnum + rwindo_size, -200),
            tc.pre_ctrckinf.i_tcpacknum, tc.server.ip_address, 500)
        add_command(req, tc, 'fail ping', tc.client, cmd_cookie)

    cmd_cookie = "/nic/bin/halctl show session --dstport {} --dstip {} --yaml".format(
        tc.server_port, tc.server.ip_address)
    add_command(req, tc, 'show after', tc.client, cmd_cookie, naples=True)

    cmd_cookie = "/nic/bin/halctl clear session"
    add_command(req, tc, 'clear', tc.client, cmd_cookie, naples=True)

    if tc.server.IsNaples():
        cmd_cookie = "/nic/bin/halctl clear session"
        add_command(req, tc, 'clear', tc.server, cmd_cookie, naples=True)

    trig_resp = api.Trigger(req)
    term_resp1 = api.Trigger_TerminateAllCommands(tc.setup_cmd_resp)
    tc.resp = api.Trigger_AggregateCommandsResponse(trig_resp, term_resp1)

    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    return api.types.status.SUCCESS
Exemple #11
0
def Verify(tc):
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    if tc.resp == None:
        return api.types.status.SUCCESS

    for cmd in tc.resp.commands:
        api.PrintCommandResults(cmd)

    if not tc.pcap_file_name:
        api.Logger.error("Invalid Pcap file")
        return api.types.status.FAILURE

    ret = api.CopyFromWorkload(tc.client.node_name, tc.client.workload_name,
                               [tc.pcap_file_name], tc.dir_path)
    if not ret:
        return api.types.status.FAILURE

    return __verify_pcap_packet_data_len(f"{tc.dir_path}/{tc.pcap_file_name}",
                                         tc.test_mss)
Exemple #12
0
def Trigger(tc):
    api.Logger.info("Trigger.")
    new_seq_num = tc.pre_ctrckinf.i_tcpseqnum + tc.pre_ctrckinf.r_tcpwinsz * (
        2**tc.pre_ctrckinf.r_tcpwinscale)

    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    #within the window - outoforder
    cmd_cookie = "sleep 2 && hping3 -c 1 -s 52252 -p 1234 -M {}  -L {} --ack --tcp-timestamp {} -d 10".format(
        tc.pre_ctrckinf.i_tcpseqnum + 100, tc.pre_ctrckinf.i_tcpacknum,
        tc.server.ip_address)
    api.Trigger_AddCommand(req, tc.client.node_name, tc.client.workload_name,
                           cmd_cookie)
    tc.cmd_cookies['fail ping'] = cmd_cookie

    cmd_cookie = "sleep 3 && /nic/bin/halctl show session --dstport 1234 --dstip {} --yaml".format(
        tc.server.ip_address)
    api.Trigger_AddNaplesCommand(req, tc.client.node_name, cmd_cookie)
    tc.cmd_cookies['show after'] = cmd_cookie

    cmd_cookie = "/nic/bin/halctl clear session"
    add_command(req, tc, 'clear', tc.client, cmd_cookie, naples=True)

    if tc.server.IsNaples():
        cmd_cookie = "/nic/bin/halctl clear session"
        add_command(req, tc, 'clear', tc.server, cmd_cookie, naples=True)

    trig_resp = api.Trigger(req)
    term_resp = api.Trigger_TerminateAllCommands(trig_resp)
    term_resp1 = api.Trigger_TerminateAllCommands(tc.setup_cmd_resp)
    tc.resp = api.Trigger_AggregateCommandsResponse(trig_resp, term_resp)

    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    return api.types.status.SUCCESS
Exemple #13
0
def Verify(tc):
    if getattr(tc.args, 'vmotion_enable', False):
        vmotion_utils.PrepareWorkloadRestore(tc)

    return tc.ret