Beispiel #1
0
def Setup(tc):
    vm_threads = []
    node_list  = []
    node = getattr(tc.args, "node", None)
    if node:
        node_list.append(node)
    else:
        '''
        add all nodes in the topo
        '''
        nodes = api.GetNodes()
        for node in nodes:
            node_list.append(node.Name())
    tc.Nodes    = api.GetNaplesHostnames()
    tc.AllNodes = api.GetWorkloadNodeHostnames()
    tc.uuidMap  = api.GetNaplesNodeUuidMap()
    tc.move_info         = []
    tc.vm_dsc_to_dsc     = True
    tc.num_moves         = 0

    if hasattr(tc.args, "conntrack"):
        tc.detailed = True
    else:
        tc.detailed = False


    getNonNaplesNodes(tc)
    if arping.ArPing(tc) != api.types.status.SUCCESS:
        api.Logger.info("arping failed on setup")
    if ping.TestPing(tc, 'local_only', 'ipv4', 64) != api.types.status.SUCCESS or ping.TestPing(tc, 'remote_only', 'ipv4', 64) != api.types.status.SUCCESS:
        api.Logger.info("ping test failed on setup")
        return api.types.status.FAILURE

    for node in node_list:
        (wls,new_node) = getWorkloadsToRemove(tc, node)
        tc.num_moves = len(wls)
        vm_utils.update_move_info(tc, wls, False, new_node)

    #Start Fuz
    ret = vm_utils.start_fuz(tc)
    if ret != api.types.status.SUCCESS:
        api.Logger.error("Fuz start failed")
        return api.types.status.FAILURE

    return api.types.status.SUCCESS
Beispiel #2
0
def Trigger(tc):
    if tc.local_or_remote == "local":
        pairs = api.GetLocalWorkloadPairs()
    else:
        pairs = api.GetRemoteWorkloadPairs()

    if not len(pairs):
        return api.types.status.FAILURE

    server = pairs[0][0]
    client = pairs[0][1]

    if tc.node_to_move == "client":
        tc.vm_node = client
    else:
        tc.vm_node = server

    vm_utils.get_vm_dbg_stats(tc)

    tc.cmd_cookies = []
    serverReq = None
    clientReq = None

    serverReq = api.Trigger_CreateExecuteCommandsRequest(serial=True)
    clientReq = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    tc.cmd_descr = "Server: %s(%s) <--> Client: %s(%s)" %\
                   (server.workload_name, server.ip_address, client.workload_name, client.ip_address)
    api.Logger.info("Starting FTP test from %s" % (tc.cmd_descr))

    SetupFTPServer(server.node_name, server.workload_name)
    SetupFTPClient(client.node_name, client.workload_name, server,
                   tc.iterators.mode)

    api.Trigger_AddCommand(serverReq, server.node_name, server.workload_name,
                           "fallocate -l 1G /home/admin/ftp/ftp_server.txt")
    tc.cmd_cookies.append("Before file transfer")
    api.Trigger_AddCommand(clientReq,
                           client.node_name,
                           client.workload_name,
                           "cd ftpdir && chmod +x ftp.sh && ./ftp.sh",
                           timeout=400)
    tc.cmd_cookies.append("Run FTP")

    api.Trigger_AddNaplesCommand(serverReq,
                                 tc.vm_node.node_name,
                                 "sleep 1",
                                 timeout=1)
    tc.cmd_cookies.append("Before Sleep")

    api.Trigger_AddNaplesCommand(serverReq, tc.vm_node.node_name,
                                 "/nic/bin/halctl show session --alg ftp")
    tc.cmd_cookies.append("Before vMotion - show session")

    # Trigger the commands
    tc.server_resp = api.Trigger(serverReq)
    tc.client_resp = api.Trigger(clientReq)

    # Trigger vMotion
    new_node = vm_utils.find_new_node_to_move_to(tc, tc.vm_node)
    vm_utils.update_move_info(tc, [tc.vm_node], False, new_node)
    vm_utils.do_vmotion(tc, True)

    vm_utils.update_node_info(tc, tc.server_resp)
    vm_utils.update_node_info(tc, tc.client_resp)

    # After vMotion - Wait for Commands to end
    tc.client_resp = api.Trigger_WaitForAllCommands(tc.client_resp)

    # After vMotion - Show sessions dump after vMotion
    tc.cmd_cookies = []
    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    ## Add Naples command validation
    api.Trigger_AddNaplesCommand(req, tc.vm_node.node_name,
                                 "/nic/bin/halctl show session --alg ftp")
    tc.cmd_cookies.append("show session FTP established")

    # Ensure full file is transferred by checking size
    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "ls -lrth ftpdir/")
    tc.cmd_cookies.append("After get1")
    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "sh -c 'du -kh ftpdir/ftp_server.txt | grep 1.0G'")
    tc.cmd_cookies.append("After get2")

    tc.resp = api.Trigger(req)

    Cleanup(server, client)

    return api.types.status.SUCCESS
Beispiel #3
0
def Trigger(tc):
    if tc.local_or_remote == "local":
        pairs = api.GetLocalWorkloadPairs()
    else:
        pairs = api.GetRemoteWorkloadPairs()

    if not len(pairs):
        return api.types.status.FAILURE

    server = pairs[0][0]
    client = pairs[0][1]

    if tc.node_to_move == "client":
        tc.vm_node = client
    else:
        tc.vm_node = server

    vm_utils.get_vm_dbg_stats(tc)

    tc.cmd_cookies = []

    serverReq = None
    clientReq = None

    serverReq = api.Trigger_CreateExecuteCommandsRequest(serial=True)
    clientReq = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    tc.cmd_descr = "Server: %s(%s) <--> Client: %s(%s)" %\
                   (server.workload_name, server.ip_address, client.workload_name, client.ip_address)
    api.Logger.info("Starting DNS test from %s" % (tc.cmd_descr))

    SetupDNSServer(server)

    api.Trigger_AddCommand(serverReq, server.node_name, server.workload_name,
                           "sudo systemctl start named")
    tc.cmd_cookies.append("Before vMotion - Start Named")
    api.Trigger_AddCommand(serverReq, server.node_name, server.workload_name,
                           "sudo systemctl enable named")
    tc.cmd_cookies.append("Before vMotion - Enable Named")
    api.Trigger_AddCommand(clientReq, client.node_name, client.workload_name,
                           "sudo rm /etc/resolv.conf")
    tc.cmd_cookies.append("Before vMotion - Remove resolv.conf")

    api.Trigger_AddCommand(
        clientReq, client.node_name, client.workload_name,
        "sudo echo \'nameserver %s\' | sudo tee -a /etc/resolv.conf" %
        (server.ip_address))
    tc.cmd_cookies.append("Before vMotion - Setup resolv conf")

    api.Trigger_AddCommand(clientReq, client.node_name, client.workload_name,
                           "nslookup test3.example.com")
    tc.cmd_cookies.append("Before vMotion - Query DNS server")
    api.Trigger_AddNaplesCommand(
        clientReq, tc.vm_node.node_name,
        "/nic/bin/halctl show session --dstport 53 --dstip {}".format(
            server.ip_address))
    tc.cmd_cookies.append("Before vMotion - show session")

    # Trigger the commands
    tc.server_resp = api.Trigger(serverReq)
    tc.client_resp = api.Trigger(clientReq)
    tc.resp = api.Trigger_AggregateCommandsResponse(tc.server_resp,
                                                    tc.client_resp)

    # Trigger vMotion
    new_node = vm_utils.find_new_node_to_move_to(tc, tc.vm_node)
    vm_utils.update_move_info(tc, [tc.vm_node], False, new_node)
    vm_utils.do_vmotion(tc, True)

    vm_utils.update_node_info(tc, tc.client_resp)

    # After vMotion - Wait for Commands to end
    tc.client_resp = api.Trigger_WaitForAllCommands(tc.client_resp)
    api.Trigger_TerminateAllCommands(tc.server_resp)

    # After vMotion - Show sessions dump after vMotion
    tc.cmd_cookies = []
    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "nslookup test3.example.com")
    tc.cmd_cookies.append("After vMotion - Query DNS server")

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

    DNSCleanup(server, client)

    return api.types.status.SUCCESS
Beispiel #4
0
def Trigger(tc):
    if tc.local_or_remote == "local":
        pairs = api.GetLocalWorkloadPairs()
    else:
        pairs = api.GetRemoteWorkloadPairs()

    if not len(pairs):
        return api.types.status.FAILURE

    server = pairs[0][0]
    client = pairs[0][1]

    if tc.node_to_move == "client":
        tc.vm_node = client
    else:
        tc.vm_node = server

    vm_utils.get_vm_dbg_stats(tc)

    tc.cmd_cookies = []

    serverReq = None
    clientReq = None

    trigger_req = api.Trigger_CreateExecuteCommandsRequest(serial = True)

    tc.cmd_descr = "Server: %s(%s) <--> Client: %s(%s)" %\
                   (server.workload_name, server.ip_address, client.workload_name, client.ip_address)
    api.Logger.info("Starting TFTP test from %s" % (tc.cmd_descr))

    SetupTFTPServer(server)
    SetupTFTPClient(client)

    api.Trigger_AddCommand(trigger_req, server.node_name, server.workload_name, "fallocate -l 1G tftpdir/tftp_server.txt")
    tc.cmd_cookies.append("Before file transfer1")
    api.Trigger_AddCommand(trigger_req, server.node_name, server.workload_name, "cp tftpdir/tftp_server.txt /var/lib/tftpboot")
    tc.cmd_cookies.append("Before file transfer2")
    api.Trigger_AddCommand(trigger_req, server.node_name, server.workload_name, "chmod 666 /var/lib/tftpboot/tftp_server.txt")
    tc.cmd_cookies.append("Before file transfer3")

    api.Trigger_AddCommand(trigger_req, client.node_name, client.workload_name,
                           "sh -c 'cd tftpdir && tftp -v %s -c get tftp_server.txt'" % server.ip_address,
                           background = True)
    tc.cmd_cookies.append("After initiating TFTP Get")

    # Trigger the commands
    tc.trigger_resp = api.Trigger(trigger_req)

    # Trigger vMotion
    new_node = vm_utils.find_new_node_to_move_to(tc, tc.vm_node)
    vm_utils.update_move_info(tc,[tc.vm_node],False,new_node)
    vmotion_resp = vm_utils.do_vmotion(tc, True)

    vm_utils.update_node_info(tc, tc.trigger_resp)

    # After vMotion - Wait for Commands to end
    tc.trigger_resp = api.Trigger_WaitForAllCommands(tc.trigger_resp)

    if vmotion_resp != api.types.status.SUCCESS:
        api.Logger.info("vmotion trigger failed, skipping further trigger")
        return vmotion_resp

    # After vMotion - Show sessions dump after vMotion
    tc.cmd_cookies = []
    req = api.Trigger_CreateExecuteCommandsRequest(serial = True)

    api.Trigger_AddNaplesCommand(req, tc.vm_node.node_name, "/nic/bin/halctl show session | grep UDP")
    tc.cmd_cookies.append("show session TFTP")

    api.Trigger_AddNaplesCommand(req, tc.vm_node.node_name, "/nic/bin/halctl show nwsec flow-gate | grep TFTP")
    tc.cmd_cookies.append("show flow-gate")
 
    # Ensure full file is transferred by checking size 
    api.Trigger_AddCommand(req, client.node_name, client.workload_name, "ls -lrth tftpdir/")
    tc.cmd_cookies.append("After get1")
    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "sh -c 'du -kh tftpdir/tftp_server.txt | grep 1.0G'")
    tc.cmd_cookies.append("After get2")

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

    Cleanup(server, client)

    return api.types.status.SUCCESS
Beispiel #5
0
def Trigger(tc):
    if tc.local_or_remote == "local":
        pairs = api.GetLocalWorkloadPairs()
    else:
        pairs = api.GetRemoteWorkloadPairs()

    if not len(pairs):
        return api.types.status.FAILURE

    server = pairs[0][0]
    client = pairs[0][1]

    if tc.node_to_move == "client":
        tc.vm_node = client
    else:
        tc.vm_node = server

    vm_utils.get_vm_dbg_stats(tc)

    tc.cmd_cookies = []

    serverReq = None
    clientReq = None

    serverReq = api.Trigger_CreateExecuteCommandsRequest(serial=False)
    clientReq = api.Trigger_CreateExecuteCommandsRequest(serial=False)

    tc.cmd_descr = "Server: %s(%s) <--> Client: %s(%s)" %\
                   (server.workload_name, server.ip_address, client.workload_name, client.ip_address)
    api.Logger.info("Starting RTSP test from %s" % (tc.cmd_descr))

    dir_path = os.path.dirname(os.path.realpath(__file__))
    fullpath = dir_path + '/' + "sample.vob"
    resp = api.CopyToWorkload(server.node_name, server.workload_name,
                              [fullpath], 'rtspdir')
    if resp is None:
        return api.types.status.FAILURE

    api.Trigger_AddCommand(serverReq,
                           server.node_name,
                           server.workload_name,
                           "cd rtspdir && live555MediaServer",
                           background=True)
    tc.cmd_cookies.append("Run RTSP server")

    api.Trigger_AddCommand(clientReq, client.node_name, client.workload_name,
                           "openRTSP rtsp://%s/sample.vob" % server.ip_address)
    tc.cmd_cookies.append("Run RTSP client")

    # Trigger the commands
    tc.server_resp = api.Trigger(serverReq)
    tc.client_resp = api.Trigger(clientReq)
    tc.resp = api.Trigger_AggregateCommandsResponse(tc.server_resp,
                                                    tc.client_resp)

    # Trigger vMotion
    new_node = vm_utils.find_new_node_to_move_to(tc, tc.vm_node)
    vm_utils.update_move_info(tc, [tc.vm_node], False, new_node)
    vm_utils.do_vmotion(tc, True)

    vm_utils.update_node_info(tc, tc.client_resp)

    # After vMotion - Wait for Commands to end
    tc.client_resp = api.Trigger_WaitForAllCommands(tc.client_resp)
    api.Trigger_TerminateAllCommands(tc.server_resp)

    # After vMotion - Show sessions dump after vMotion
    tc.cmd_cookies = []
    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)

    api.Trigger_AddNaplesCommand(
        req, tc.vm_node.node_name,
        "/nic/bin/halctl show session --alg rtsp --yaml")
    tc.cmd_cookies.append("show session RTSP")

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

    return api.types.status.SUCCESS
Beispiel #6
0
def Trigger(tc):
    if tc.local_or_remote == "local":
        pairs = api.GetLocalWorkloadPairs()
    else:
        pairs = api.GetRemoteWorkloadPairs()
    if not len(pairs):
        return api.types.status.FAILURE
    server = pairs[0][0]
    client = pairs[0][1]
    tc.server = server
    tc.client = client
    if tc.node_to_move == "client":
        api.Logger.info("Moving client %s" % (client.workload_name))
        tc.vm_node = client
    else:
        api.Logger.info("Moving server %s" % (client.workload_name))
        tc.vm_node = server

    vm_utils.get_vm_dbg_stats(tc)

    tc.cmd_cookies = []

    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)
    tc.cmd_descr = "Server: %s(%s) <--> Client: %s(%s)" %\
                   (server.workload_name, server.ip_address, client.workload_name, client.ip_address)
    api.Logger.info("Starting SUNRPC test from %s" % (tc.cmd_descr))

    # this setups control session for alg-sunrpc
    SetupNFSServer(server, client)

    api.Trigger_AddCommand(
        req, server.node_name, server.workload_name,
        "sh -c 'ls -al /home/sunrpcmntdir | grep sunrpc_file.txt'")
    tc.cmd_cookies.append("Before rpc")

    # this setups data session for alg-sunrpc
    api.Trigger_AddCommand(
        req, client.node_name, client.workload_name,
        "sudo sh -c 'mkdir -p /home/sunrpcdir && mount %s:/home/sunrpcmntdir /home/sunrpcdir' "
        % (server.ip_address))
    tc.cmd_cookies.append("Create mount point")

    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "sudo chmod 777 /home/sunrpcdir")
    tc.cmd_cookies.append("add permission")

    trig_resp = api.Trigger(req)
    term_resp = api.Trigger_TerminateAllCommands(trig_resp)

    tc.resp = api.Trigger_AggregateCommandsResponse(trig_resp, term_resp)

    #trigger a vmotion at this point
    new_node = vm_utils.find_new_node_to_move_to(tc, tc.vm_node)
    vm_utils.update_move_info(tc, [tc.vm_node], False, new_node)
    tc.resp = vm_utils.do_vmotion(tc, True)
    if tc.resp != api.types.status.SUCCESS:
        api.Logger.info("vmotion at vcenter failed")
        return api.types.status.SUCCESS

    tc.cmd_cookies = []
    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)
    # make sure a file change in client reflects on server
    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "mv sunrpcdir/sunrpc_file.txt /home/sunrpcdir/")
    tc.cmd_cookies.append("Create file")

    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "ls -al /home/sunrpcdir")
    tc.cmd_cookies.append("verify file")

    api.Trigger_AddCommand(req, server.node_name, server.workload_name,
                           "ls -al /home/sunrpcmntdir/")
    tc.cmd_cookies.append("After rpc1")

    api.Trigger_AddCommand(req, server.node_name, server.workload_name,
                           "sh -c 'cat /home/sunrpcmntdir/sunrpc_file.txt'")
    tc.cmd_cookies.append("After rpc2")

    # Add Naples command validation
    api.Trigger_AddNaplesCommand(req, tc.vm_node.node_name,
                                 "/nic/bin/halctl show session --alg sun_rpc")
    tc.cmd_cookies.append("show session")

    trig_resp = api.Trigger(req)
    term_resp = api.Trigger_TerminateAllCommands(trig_resp)

    tc.resp = api.Trigger_AggregateCommandsResponse(trig_resp, term_resp)

    return api.types.status.SUCCESS
Beispiel #7
0
def Trigger(tc):
    if tc.local_or_remote == "local":
        pairs = api.GetLocalWorkloadPairs()
    else:
        pairs = api.GetRemoteWorkloadPairs()
    if not len(pairs):
        return api.types.status.FAILURE
    server = pairs[0][0]
    client = pairs[0][1]
    tc.server = server
    tc.client = client
    if tc.node_to_move == "client":
        api.Logger.info("Moving client %s" % (client.workload_name))
        tc.vm_node = client
    else:
        api.Logger.info("Moving server %s" % (client.workload_name))
        tc.vm_node = server

    vm_utils.get_vm_dbg_stats(tc)

    tc.cmd_cookies = []
    num_moves_done = 0
    req = api.Trigger_CreateExecuteCommandsRequest(serial=True)
    tc.cmd_descr = "Server: %s(%s) <--> Client: %s(%s)" %\
                   (server.workload_name, server.ip_address, client.workload_name, client.ip_address)
    api.Logger.info("Starting SUNRPC test from %s" % (tc.cmd_descr))

    # this setups control session for alg-sunrpc
    SetupNFSServer(server, client)

    api.Trigger_AddCommand(
        req, server.node_name, server.workload_name,
        "sh -c 'ls -al /home/sunrpcmntdir | grep sunrpc_file.txt'")
    tc.cmd_cookies.append("Before rpc")

    # this setups data session for alg-sunrpc
    api.Trigger_AddCommand(
        req, client.node_name, client.workload_name,
        "sudo sh -c 'mkdir -p /home/sunrpcdir && mount %s:/home/sunrpcmntdir /home/sunrpcdir' "
        % (server.ip_address))
    tc.cmd_cookies.append("Create mount point")

    api.Trigger_AddCommand(req, client.node_name, client.workload_name,
                           "sudo chmod 777 /home/sunrpcdir")
    tc.cmd_cookies.append("add permission")

    trig_resp = api.Trigger(req)
    term_resp = api.Trigger_TerminateAllCommands(trig_resp)

    tc.resp = api.Trigger_AggregateCommandsResponse(trig_resp, term_resp)

    while (num_moves_done < tc.num_b2b_moves):
        #trigger a vmotion at this point
        api.Logger.info("moving %s for %d time" %
                        (tc.vm_node.workload_name, num_moves_done))
        new_node = vm_utils.find_new_node_to_move_to(tc, tc.vm_node)
        vm_utils.update_move_info(tc, [tc.vm_node], False, new_node)
        vm_utils.do_vmotion(tc, True)

        trigger_data_update(tc)
        ret = verify_cmd_resp(tc)
        if ret != api.types.status.SUCCESS:
            return ret
        cleanup_trigger(tc)
        api.Logger.info("sleeping for 10 sec before next move %s" %
                        (tc.vm_node.workload_name))
        time.sleep(10)
        num_moves_done = num_moves_done + 1
    return api.types.status.SUCCESS