示例#1
0
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    dst_host_ip = params.get('dst_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))
    incoming_port = params.get('incoming_port')
    test = CreateTest(case_id='rhel7_10056', params=params)
    id = test.get_id()
    src_host_session = HostSession(id, params)
    speed = '1073741824'
    active_timeout = 300

    test.main_step_log('1. Start VM with high load, with each method is ok')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)

    test.sub_step_log('1.1 Connecting to src serial')
    src_serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    src_guest_ip = src_serial.serial_login()
    src_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=src_guest_ip)

    test.sub_step_log('1.2 Running stress in src guest')
    utils_migration.stress_test(guest_session=src_guest_session)

    test.main_step_log('2. Start listening mode on dst host and '
                       'on src host do migration')
    test.sub_step_log('2.1 Start listening mode on dst host')
    incoming_val = 'tcp:0:%s' % incoming_port
    params.vm_base_cmd_add('incoming', incoming_val)
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                       ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.sub_step_log('2.2. Do live migration from src to dst')
    cmd = '{"execute":"migrate", "arguments": {"uri": "tcp:%s:%s"}}' % \
          (dst_host_ip, incoming_port)
    src_remote_qmp.qmp_cmd_output(cmd)

    test.main_step_log('3.Enlarge migration speed')
    flag_active = utils_migration.query_status(remote_qmp=src_remote_qmp,
                                               status='active')
    if (flag_active == False):
        src_remote_qmp.test_error('Migration could not be active within %d' %
                                  active_timeout)
    utils_migration.change_speed(remote_qmp=src_remote_qmp, speed_val=speed)

    test.sub_step_log('3.2 Check migration status again')
    flag_1 = utils_migration.query_migration(remote_qmp=src_remote_qmp)
    if (flag_1 == False):
        test.test_error('Migration timeout after changing speed')

    test.main_step_log('4. After migration, check if guest works well.')
    test.sub_step_log('4.1 Guest mouse and keyboard')

    test.sub_step_log('4.2. Reboot guest')
    dst_serial = RemoteSerialMonitor(id, params, dst_host_ip, serial_port)
    cmd = 'dmesg'
    output = dst_serial.serial_cmd_output(cmd=cmd)
    if re.findall(r'Call Trace:', output):
        test.test_error('Guest hit call trace')
    dst_serial.serial_cmd(cmd='reboot')
    dst_guest_ip = dst_serial.serial_login()

    test.sub_step_log('4.3 Ping external host')
    dst_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=dst_guest_ip)
    dst_guest_session.guest_ping_test(dst_ip='www.redhat.com', count=10)

    test.sub_step_log('4.4 dd a file inside guest')
    cmd_dd = 'dd if=/dev/zero of=file1 bs=100M count=10 oflag=direct'
    output = dst_guest_session.guest_cmd_output(cmd=cmd_dd, timeout=600)
    if not output or re.findall('error', output):
        test.test_error('Failed to dd a file in guest')

    test.sub_step_log('4.5 Shutdown guest successfully')
    dst_serial.serial_shutdown_vm()

    output = src_remote_qmp.qmp_cmd_output('{"execute":"quit"}',
                                           recv_timeout=3)
    if output:
        src_remote_qmp.test_error('Failed to quit qemu on src end')
示例#2
0
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    dst_host_ip = params.get('dst_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))
    incoming_port = params.get('incoming_port')
    test = CreateTest(case_id='rhel7_58670', params=params)
    id = test.get_id()
    src_host_session = HostSession(id, params)
    val_M = '2000'
    val_s = '10000'
    ping_file = '/tmp/ping'

    test.main_step_log('1. Launch guest on source host')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)
    src_serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    src_guest_ip = src_serial.serial_login()
    src_guest_session = GuestSession(case_id=id, params=params,
                                     ip=src_guest_ip)

    test.sub_step_log('2. stress guest')
    utils_migration.stressapptest(guest_session=src_guest_session,
                                  val_M=val_M, val_s=val_s)

    test.main_step_log('3. ping guest from host, keep it during whole '
                       'migration process')
    flag = False
    endtime =time.time() + 300
    while time.time() < endtime:
        output = src_host_session.host_cmd_output(cmd='pgrep ping')
        if output:
            src_host_session.host_cmd(cmd='pgrep ping | xargs kill -9')
        else:
            flag = True
            break
    if flag == False:
        test.test_error('Failed to kill existing ping process')

    cmd = 'ping %s > %s &' % (src_guest_ip, ping_file)
    src_host_session.host_cmd(cmd=cmd)

    test.main_step_log('4. Launch guest on destination host ')
    incoming_val = 'tcp:0:%s' % incoming_port
    params.vm_base_cmd_add('incoming', incoming_val)
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd, ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('5. check postcopy capability on')
    test.sub_step_log('set src host postcopy-ram on')
    utils_migration.set_migration_capabilities(remote_qmp=src_remote_qmp,
                                               capabilities='postcopy-ram',
                                               state='true')
    test.sub_step_log('set dst host postcopy-ram on')
    utils_migration.set_migration_capabilities(remote_qmp=dst_remote_qmp,
                                               capabilities='postcopy-ram',
                                               state='true')

    test.main_step_log('6. migrate guest to destination')
    cmd = '{"execute":"migrate", "arguments": { "uri": "tcp:%s:%s" }}' \
          % (dst_host_ip, incoming_port)
    src_remote_qmp.qmp_cmd_output(cmd=cmd)

    test.main_step_log('7. Cancel migration')
    status = utils_migration.query_status(remote_qmp=src_remote_qmp,
                                          status='active')
    if (status == False):
        test.test_error('Migration status is not active')
    cmd = '{"execute":"migrate_cancel"}'
    src_remote_qmp.qmp_cmd_output(cmd=cmd)
    output = utils_migration.query_status(remote_qmp=src_remote_qmp,
                                          status='cancelled')
    if (output == True):
        test.test_print('Migration is cancelled successfully')
    if (output == False):
        test.test_error('Migration status is not cancelled')

    ping_pid = src_host_session.host_cmd_output(cmd='pgrep ping')
    if not ping_pid:
        test.test_error('The process of host ping guest is not existing')
    cmd = 'kill -9 %s' % ping_pid
    src_host_session.host_cmd(cmd=cmd)

    fo = open(ping_file, 'r')
    for line in fo.readlines():
        line = line.strip()
        if re.findall(r'unknown host name', line) \
                or re.findall(r'unreachable', line) \
                or re.findall(r'timeout', line):
            test.test_error('There is error in ping file')
    test.test_print('There is no error in ping file')
    fo.close()
示例#3
0
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    dst_host_ip = params.get('dst_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))
    incoming_port = params.get('incoming_port')
    test = CreateTest(case_id='rhel7_10061_win', params=params)
    id = test.get_id()
    guest_name = test.guest_name
    src_host_session = HostSession(id, params)

    test.main_step_log('1. Start VM in the src host')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)
    test.sub_step_log('Wait 90s for guest boot up')
    time.sleep(90)

    test.sub_step_log(
        '1.1 Connecting to src serial --- ignore for windows guest')
    #src_serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    #src_guest_ip = src_serial.serial_login()
    #src_guest_session = GuestSession(case_id=id, params=params, ip=src_guest_ip)

    test.sub_step_log(
        '1.2 Running stress in src guest --- ignore for windows guest')
    #utils_migration.stress_test(guest_session=src_guest_session)

    test.main_step_log('2. Start listening mode in the dst host.')
    incoming_val = 'tcp:0:%s' % incoming_port
    params.vm_base_cmd_add('incoming', incoming_val)
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                       ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('3. Do live migration')
    cmd = '{"execute":"migrate", "arguments": {"uri": "tcp:%s:%s"}}' % (
        dst_host_ip, incoming_port)
    src_remote_qmp.qmp_cmd_output(cmd=cmd)

    test.sub_step_log('Check the status of migration')
    flag_active = utils_migration.query_status(remote_qmp=src_remote_qmp,
                                               status='active')
    if (flag_active == False):
        test.test_error('Migration is not active')

    test.main_step_log('4. During migration in progress, cancel migration')
    cmd = '{"execute":"migrate_cancel"}'
    src_remote_qmp.qmp_cmd_output(cmd=cmd, recv_timeout=3)
    output = src_remote_qmp.qmp_cmd_output('{"execute":"query-migrate"}',
                                           recv_timeout=3)
    if re.findall(r'"status": "cancelled"', output):
        src_remote_qmp.test_print('Src cancel migration successfully')
    else:
        src_remote_qmp.test_error('Failed to cancel migration')

    test.main_step_log('5. Start listening mode againg in the dst host')
    test.sub_step_log('5.1 Check if the dst qemu quit automatically')
    dst_chk_cmd = 'ssh root@%s ps -axu | grep %s | grep -v grep' \
                  % (dst_host_ip, guest_name)
    output = src_host_session.host_cmd_output(cmd=dst_chk_cmd)
    if not output:
        src_host_session.test_print('DST QEMU quit automatically after '
                                    'src cancelling migration')
    else:
        src_host_session.test_error('DST QEMU does not quit automatically '
                                    'after src cancelling migration')
    test.sub_step_log('5.2 Start listening mode again in dst host')
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                       ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('6. Do live migration again')
    output = utils_migration.do_migration(remote_qmp=src_remote_qmp,
                                          migrate_port=incoming_port,
                                          dst_ip=dst_host_ip)
    if (output == False):
        test.test_error('Migration timeout')

    test.main_step_log('7. After migration succeed, '
                       'checking  the status of guest on the dst host')

    test.sub_step_log('7.1 Check dst guest status')
    status = dst_remote_qmp.qmp_cmd_output('{"execute":"query-status"}')
    if '\"status\": \"running\"' not in status:
        dst_remote_qmp.test_error('Dst vm is not running')

    test.sub_step_log('7.2 Reboot guest')
    dst_remote_qmp.qmp_cmd_output('{"execute":"system_reset"}')

    output = src_remote_qmp.qmp_cmd_output('{"execute":"quit"}',
                                           recv_timeout=3)
    if output:
        src_remote_qmp.test_error('Failed to quit qemu on src end')

    time.sleep(30)
    status = dst_remote_qmp.qmp_cmd_output('{"execute":"query-status"}')
    if '\"status\": \"running\"' not in status:
        dst_remote_qmp.test_error('Dst vm is not running after reboot')

    output = dst_remote_qmp.qmp_cmd_output('{"execute":"quit"}')
    if output:
        dst_remote_qmp.test_error('Failed to quit qemu on dst end')
示例#4
0
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    dst_host_ip = params.get('dst_host_ip')
    qmp_port = int(params.get('qmp_port'))
    incoming_port = params.get('incoming_port')
    test = CreateTest(case_id='rhel7_10056_win', params=params)
    id = test.get_id()
    src_host_session = HostSession(id, params)
    speed = '1073741824'
    active_timeout = 300
    stress_time = 120

    test.main_step_log('1. Start VM with high load, with each method is ok')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)

    test.sub_step_log('Wait 90s for guest boot up')
    time.sleep(90)

    test.main_step_log('2. Start listening mode on dst host and '
                       'on src host do migration')
    test.sub_step_log('2.1 Start listening mode on dst host')
    incoming_val = 'tcp:0:%s' % incoming_port
    params.vm_base_cmd_add('incoming', incoming_val)
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                       ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.sub_step_log('2.2. Do live migration from src to dst')
    cmd = '{"execute":"migrate", "arguments": {"uri": "tcp:%s:%s"}}' % \
          (dst_host_ip, incoming_port)
    src_remote_qmp.qmp_cmd_output(cmd)

    test.main_step_log('3.Enlarge migration speed')
    flag_active = utils_migration.query_status(remote_qmp=src_remote_qmp,
                                               status='active')
    if (flag_active == False):
        src_remote_qmp.test_error('Migration could not be active within %d' %
                                  active_timeout)
    utils_migration.change_speed(remote_qmp=src_remote_qmp, speed_val=speed)

    test.sub_step_log('3.2 Check migration status again')
    flag_1 = utils_migration.query_migration(remote_qmp=src_remote_qmp)
    if (flag_1 == False):
        test.test_error('Migration timeout after changing speed')

    test.main_step_log(
        '4. After migration, check dst guest status and reboot guest')
    test.sub_step_log('4.1 Check dst guest status')
    status = dst_remote_qmp.qmp_cmd_output('{"execute":"query-status"}')
    if '\"status\": \"running\"' not in status:
        dst_remote_qmp.test_error('Dst vm is not running')

    test.sub_step_log('4.2. Reboot guest')
    dst_remote_qmp.qmp_cmd_output('{"execute":"system_reset"}')

    output = src_remote_qmp.qmp_cmd_output('{"execute":"quit"}',
                                           recv_timeout=3)
    if output:
        src_remote_qmp.test_error('Failed to quit qemu on src end')

    time.sleep(30)
    status = dst_remote_qmp.qmp_cmd_output('{"execute":"query-status"}')
    if '\"status\": \"running\"' not in status:
        dst_remote_qmp.test_error('Dst vm is not running after reboot')

    output = dst_remote_qmp.qmp_cmd_output('{"execute":"quit"}')
    if output:
        dst_remote_qmp.test_error('Failed to quit qemu on dst end')
示例#5
0
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    dst_host_ip = params.get('dst_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))
    incoming_port = params.get('incoming_port')
    test = CreateTest(case_id='rhel7_10061', params=params)
    id = test.get_id()
    guest_name = test.guest_name
    src_host_session = HostSession(id, params)

    test.main_step_log('1. Start VM in the src host, guest running stress')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)

    test.sub_step_log('1.1 Connecting to src serial')
    src_serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    src_guest_ip = src_serial.serial_login()
    src_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=src_guest_ip)

    test.sub_step_log('1.2 Running stress in src guest')
    utils_migration.stress_test(guest_session=src_guest_session)

    test.main_step_log('2. Start listening mode in the dst host.')
    incoming_val = 'tcp:0:%s' % incoming_port
    params.vm_base_cmd_add('incoming', incoming_val)
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                       ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('3. Do live migration')
    cmd = '{"execute":"migrate", "arguments": {"uri": "tcp:%s:%s"}}' % (
        dst_host_ip, incoming_port)
    src_remote_qmp.qmp_cmd_output(cmd=cmd)

    test.sub_step_log('Check the status of migration')
    flag_active = utils_migration.query_status(remote_qmp=src_remote_qmp,
                                               status='active')
    if (flag_active == False):
        test.test_error('Migration is not active')

    test.main_step_log('4. During migration in progress, cancel migration')
    cmd = '{"execute":"migrate_cancel"}'
    src_remote_qmp.qmp_cmd_output(cmd=cmd, recv_timeout=3)
    output = src_remote_qmp.qmp_cmd_output('{"execute":"query-migrate"}',
                                           recv_timeout=3)
    if re.findall(r'"status": "cancelled"', output):
        src_remote_qmp.test_print('Src cancel migration successfully')
    else:
        src_remote_qmp.test_error('Failed to cancel migration')

    test.main_step_log('5. Start listening mode againg in the dst host')
    test.sub_step_log('5.1 Check if the dst qemu quit automatically')
    dst_chk_cmd = 'ssh root@%s ps -axu | grep %s | grep -v grep' \
                  % (dst_host_ip, guest_name)
    output = src_host_session.host_cmd_output(cmd=dst_chk_cmd)
    if not output:
        src_host_session.test_print('DST QEMU quit automatically after '
                                    'src cancelling migration')
    else:
        src_host_session.test_error('DST QEMU does not quit automatically '
                                    'after src cancelling migration')
    test.sub_step_log('5.2 Start listening mode again in dst host')
    src_host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                       ip=dst_host_ip,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('6. Do live migration again')
    output = utils_migration.do_migration(remote_qmp=src_remote_qmp,
                                          migrate_port=incoming_port,
                                          dst_ip=dst_host_ip)
    if (output == False):
        test.test_error('Migration timeout')

    test.main_step_log('7. After migration succeed, '
                       'checking  the status of guest on the dst host')
    test.sub_step_log('7.1 Guest keyboard and mouse work normally.')
    test.sub_step_log('7.2 Reboot guest')
    dst_serial = RemoteSerialMonitor(id, params, dst_host_ip, serial_port)
    cmd = 'dmesg'
    output = dst_serial.serial_cmd_output(cmd=cmd)
    if re.findall(r'Call Trace:', output):
        test.test_error('Guest hit call trace')
    dst_serial.serial_cmd(cmd='reboot')
    dst_guest_ip = dst_serial.serial_login()

    test.sub_step_log(
        '7.3 Ping external host/copy file between guest and host')
    dst_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=dst_guest_ip)

    dst_guest_session.guest_ping_test('www.redhat.com', 10)

    test.sub_step_log('7.4 DD a file inside guest')
    cmd_dd = 'dd if=/dev/zero of=file1 bs=1M count=100 oflag=direct'
    output = dst_guest_session.guest_cmd_output(cmd=cmd_dd, timeout=600)
    if not output or re.findall('error', output):
        test.test_error('Failed to dd a file in guest')

    test.sub_step_log('7.5 Shutdown guest successfully')

    dst_serial.serial_shutdown_vm()