예제 #1
0
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))

    test = CreateTest(case_id='rhel7_11948_virtio_scsi_local', params=params)
    id = test.get_id()
    host_session = HostSession(id, params)

    test.main_step_log('1. create a data image.')
    image_format = params.get('image_format')
    drive_format = params.get('drive_format')
    if 'qcow2' in image_format:
        host_session.create_image('qemu-img create -f qcow2 %s/test1.img 15G' %
                                  tmp_file)
    elif 'raw' in image_format:
        host_session.create_image('qemu-img create -f raw %s/test1.img 15G' %
                                  tmp_file)

    test.main_step_log('2. start guest with this image as data image')
    params.vm_base_cmd_add(
        'drive', 'id=device1,if=none,snapshot=off,'
        'aio=threads,cache=none,format=%s,'
        'file=%s/test1.img' % (image_format, tmp_file))
    if 'virtio-scsi' in drive_format:
        params.vm_base_cmd_add(
            'device', 'scsi-hd,id=scsi-hd0,drive=device1,'
            'channel=0,scsi-id=10,lun=0')
    elif 'virtio-blk' in drive_format:
        params.vm_base_cmd_add(
            'device', 'virtio-blk-pci,'
            'drive=device1,'
            'id=virtio-blk0')

    qemu_cmd = params.create_qemu_cmd()
    host_session.boot_guest(cmd=qemu_cmd)
    serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    guest_ip = serial.serial_login()

    test.main_step_log('3. create a file in the device and record md5 value.')
    guest_session = GuestSession(case_id=id, params=params, ip=guest_ip)
    test.sub_step_log('3.1 check the disk status inside guest')
    data_disk_list = guest_session.get_data_disk()

    test.sub_step_log('3.2 mount this device to /mnt')
    guest_session.guest_cmd_output('mkfs.xfs %s' % data_disk_list[0])
    guest_session.guest_cmd_output('mount %s /mnt' % data_disk_list[0])
    guest_session.guest_cmd_output('mount | grep /mnt')

    test.sub_step_log('3.3 create a file to /mnt with dd')
    guest_session.guest_cmd_output(cmd='dd if=/dev/urandom '
                                   'of=/mnt/test1 bs=1M '
                                   'count=500 oflag=direct',
                                   timeout=600)

    test.sub_step_log('3.4 check the value md5sum of file')
    before_md5 = guest_session.guest_cmd_output(
        'md5sum /mnt/test1 | awk {\'print $1\'}')

    test.main_step_log('4. block resize device1 20G')
    qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)
    qmp.qmp_cmd_output(
        '{ "execute": "block_resize", '
        '"arguments": { "device": "device1", "size": 21474836480 }}')
    if guest_session.guest_get_disk_size(
            dev=guest_session.get_data_disk()[0]) != '20G':
        test.test_error('Failed to block resize device1 to 20G')

    test.sub_step_log('4.1 check the value md5sum of file after block resize')
    after_md5 = guest_session.guest_cmd_output(
        'md5sum /mnt/test1 | awk {\'print $1\'}')
    if after_md5 != before_md5:
        test.test_error('value md5 changed after block resize.')

    if 'raw' in image_format:
        test.main_step_log('5. block resize device1 10G')
        qmp.qmp_cmd_output(
            '{ "execute": "block_resize", '
            '"arguments": { "device": "device1", "size": 10737418240 }}')
        if guest_session.guest_get_disk_size(
                dev=guest_session.get_data_disk()[0]) != '10G':
            test.test_error('Failed to block resize device1 to 10G')

        test.sub_step_log(
            '5.1 check the value md5sum of file after block resize')
        after_md5 = guest_session.guest_cmd_output(
            'md5sum /mnt/test1 | awk {\'print $1\'}')
        if after_md5 != before_md5:
            test.test_error('value md5 changed after block resize.')

    guest_session.guest_dmesg_check()
예제 #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')
    guest_arch = params.get('guest_arch')
    test = CreateTest(case_id='rhel7_10026', params=params)
    id = test.get_id()
    guest_pwd = params.get('guest_passwd')
    src_host_session = HostSession(id, params)
    login_timeout = 1200

    test.main_step_log('1. Start vm on 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)
    src_serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    src_guest_ip = src_serial.serial_login()

    test.main_step_log('2. 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)
    dst_serial = RemoteSerialMonitor(id, params, dst_host_ip, serial_port)

    test.main_step_log('3. keep reboot vm with system_reset, let guest '
                       'in bios stage, before kernel loading')
    src_remote_qmp.qmp_cmd_output('{"execute":"system_reset"}')
    if 'ppc64' in guest_arch:
        keyword = 'SLOF'
    elif 'x86_64' in guest_arch:
        keyword = '[    0.000000]'
    while 1:
        serial_output = src_serial.serial_output(max_recv_data=128,
                                                 search_str=keyword)
        test.test_print(serial_output)
        if re.findall(r'Found the searched keyword', serial_output):
            break
        if re.findall(r'login', serial_output):
            test.test_error('Failed to catch migration point')

    test.main_step_log('4. implement migrate during vm reboot')
    chk_info = do_migration(src_remote_qmp, incoming_port, dst_host_ip)
    if (chk_info == True):
        test.test_print('Migration succeed')
    elif (chk_info == False):
        test.test_error('Migration timeout')

    test.main_step_log('5. After migration, check if guest works well')
    timeout = 600
    endtime = time.time() + timeout
    bootup = False
    while time.time() < endtime:
        cmd = 'root'
        dst_serial.send_cmd(cmd)
        output = dst_serial.rec_data(recv_timeout=8)
        dst_serial.test_print(info=output, serial_debug=True)
        if re.findall(r'Password', output):
            dst_serial.send_cmd(guest_pwd)
            dst_serial.test_print(guest_pwd, serial_debug=True)
            output = dst_serial.rec_data(recv_timeout=8)
            dst_serial.test_print(info=output, serial_debug=True)
            if re.search(r"login:"******"login:"******"execute":"quit"}')
    if output:
        src_remote_qmp.test_error('Failed to quit qemu on src end')
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))

    test = CreateTest(case_id='rhel7_11911_virtio_scsi_local', params=params)
    id = test.get_id()
    host_session = HostSession(id, params)
    test.main_step_log('1. prepare a installed guest.')

    test.main_step_log('2. create a data disk.')
    image_format = params.get('image_format')
    drive_format = params.get('drive_format')
    if 'qcow2' in image_format:
        host_session.create_image(
            'qemu-img create -f qcow2 %s/test1.img 100G' % tmp_file)
    elif 'raw' in image_format:
        host_session.create_image('qemu-img create -f raw %s/test1.img 100G' %
                                  tmp_file)

    test.main_step_log('3. boot a guest attached data disk created by step 2.')
    params.vm_base_cmd_add(
        'drive', 'id=drive_data0,if=none,snapshot=off,'
        'aio=threads,cache=none,format=%s,'
        'file=%s/test1.img' % (image_format, tmp_file))
    if 'virtio-scsi' in drive_format:
        params.vm_base_cmd_add(
            'device', 'scsi-hd,id=scsi-hd0,drive=drive_data0,'
            'channel=0,scsi-id=10,lun=0')
    elif 'virtio-blk' in drive_format:
        params.vm_base_cmd_add(
            'device', 'virtio-blk-pci,'
            'drive=drive_data0,'
            'id=virtio-blk0')

    qemu_cmd = params.create_qemu_cmd()
    host_session.boot_guest(cmd=qemu_cmd)
    serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    guest_ip = serial.serial_login()

    test.main_step_log('4. in guest: # mkfs.ext4 /dev/[vs]db '
                       '# mount /dev/[vs]db /mnt '
                       '# dd if=/dev/zero of=/mnt/test1 '
                       'bs=4k count=1000 oflag=direct')
    guest_session = GuestSession(case_id=id, params=params, ip=guest_ip)
    test.sub_step_log('4.1 check the disk status inside guest')
    data_disk_list = guest_session.get_data_disk()

    guest_session.guest_cmd_output('mkfs.xfs %s' % data_disk_list[0])
    guest_session.guest_cmd_output('mount %s /mnt' % data_disk_list[0])
    guest_session.guest_cmd_output('mount | grep /mnt')

    guest_session.guest_cmd_output(cmd='dd if=/dev/zero '
                                   'of=/mnt/test1 bs=4k '
                                   'count=1000 oflag=direct',
                                   timeout=600)

    test.main_step_log('5. repeat step 4 using bs=8k / '
                       '16k / 32k/ 64k / 128k / 256k')
    bs_size_list = ['8k', '16k', '32k', '64k', '128k', '256k']
    for bs_size in bs_size_list:
        guest_session.guest_cmd_output(cmd='dd if=/dev/zero '
                                       'of=/mnt/test1 bs=%s '
                                       'count=1000 oflag=direct' % bs_size,
                                       timeout=600)

    guest_session.guest_cmd_output('umount /mnt')

    test.main_step_log('6. start multi dd progress at the same time.'
                       '- write 8 partition with '
                       'bs= 4k/8k/16k/64k/128k/256k/4M/1G at the same time, '
                       '- read 8 partition with '
                       'bs= 4k/8k/16k/64k/128k/256k/4M/1G at the same time')

    guest_session.guest_create_parts(dev=data_disk_list[0], num=8)

    data_disk_list = guest_session.get_data_disk()[1:]

    bs_size_list = ['8k', '16k', '32k', '64k', '128k', '256k', '4M', '1G']

    map(
        lambda dev, size: guest_session.guest_cmd_output(
            cmd='dd if=/dev/zero of=%s bs=%s count=1000 oflag=direct &' %
            (dev, size),
            timeout=600), data_disk_list, bs_size_list)
    while 1:
        if not guest_session.guest_cmd_output('pgrep -x dd'):
            break
        time.sleep(5)

    map(
        lambda dev, size: guest_session.guest_cmd_output(
            cmd='dd if=%s of=/dev/null bs=%s count=1000 iflag=direct &' %
            (dev, size),
            timeout=600), data_disk_list, bs_size_list)
    while 1:
        if not guest_session.guest_cmd_output('pgrep -x dd'):
            break
        time.sleep(5)

    guest_session.guest_dmesg_check()
def run_case(params):
    src_host_ip = params.get('src_host_ip')
    qmp_port = int(params.get('qmp_port'))
    serial_port = int(params.get('serial_port'))

    test = CreateTest(case_id='rhel7_11912_virtio_scsi_local', params=params)
    id = test.get_id()
    host_session = HostSession(id, params)

    test.main_step_log('1. do system_reset when guest booting')
    qemu_cmd = params.create_qemu_cmd()
    host_session.boot_guest(qemu_cmd, vm_alias='src')

    test.sub_step_log('Connecting to serial')
    serial = RemoteSerialMonitor(id, params, src_host_ip, serial_port)
    remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)

    timeout = 300
    endtime = time.time() + timeout

    searched_str = 'Trying to load'
    searched_done = False
    while time.time() < endtime:
        output = serial.serial_output(max_recv_data=500,
                                      search_str=searched_str)
        if re.findall(r'Found the searched keyword', output):
            test.test_print(output)
            searched_done = True
            remote_qmp.qmp_cmd_output('{ "execute": "system_reset" }')
            break
        else:
            test.test_print(output)
        if re.findall(r'login:'******'Failed to find the keyword: %s' % searched_str)

    if searched_done == False:
        test.test_error('Failed to find the keyword: %s under %s.' %
                        (searched_str, timeout))

    guset_ip = serial.serial_login()
    guest_session = GuestSession(case_id=id, params=params, ip=guset_ip)
    test.sub_step_log('guest ping through(http://www.redhat.com) '
                      'and there is no any error in dmesg.')
    guest_session.guest_ping_test(count=5, dst_ip='www.redhat.com')
    guest_session.guest_dmesg_check()

    test.main_step_log(
        '2. reboot guest and do system_reset during guest rebooting')
    guest_session.guest_cmd_output(cmd='reboot')
    guest_session.close()

    searched_str = 'Stopped Network'
    searched_done = False
    while time.time() < endtime:
        output = serial.serial_output(max_recv_data=500,
                                      search_str=searched_str)
        if re.findall(r'Found the searched keyword', output):
            test.test_print(output)
            searched_done = True
            remote_qmp.qmp_cmd_output('{ "execute": "system_reset" }')
            break
        else:
            test.test_print(output)
        if re.findall(r'login:'******'Failed to find the keyword: %s' % searched_str)

    if searched_done == False:
        test.test_error('Failed to find the keyword: %s under %s.' %
                        (searched_str, timeout))

    test.main_step_log('3.repeate step 2 at least 10 times.')
    for i in range(1, 11):
        test.sub_step_log('Repeate %s time.' % i)
        searched_str = 'SLOF'
        searched_done = False
        while time.time() < endtime:
            output = serial.serial_output(max_recv_data=500,
                                          search_str=searched_str)
            if re.findall(r'Found the searched keyword', output):
                test.test_print(output)
                searched_done = True
                remote_qmp.qmp_cmd_output('{ "execute": "system_reset" }')
                break
            else:
                test.test_print(output)
            if re.findall(r'login:'******'Failed to find the keyword: %s' %
                                searched_str)

        if searched_done == False:
            test.test_error('Failed to find the keyword: %s under %s.' %
                            (searched_str, timeout))

        guset_ip = serial.serial_login()
        guest_session = GuestSession(case_id=id, params=params, ip=guset_ip)
        test.sub_step_log('guest ping through(http://www.redhat.com) '
                          'and there is no any error in dmesg.')
        guest_session.guest_ping_test(count=5, dst_ip='www.redhat.com')
        guest_session.guest_dmesg_check()

        test.sub_step_log(
            'reboot guest and do system_reset during guest rebooting')
        guest_session.guest_cmd_output(cmd='reboot')
        guest_session.close()

        searched_str = 'Stopped Network'
        searched_done = False
        while time.time() < endtime:
            output = serial.serial_output(max_recv_data=500,
                                          search_str=searched_str)
            if re.findall(r'Found the searched keyword', output):
                test.test_print(output)
                searched_done = True
                remote_qmp.qmp_cmd_output('{ "execute": "system_reset" }')
                break
            else:
                test.test_print(output)
            if re.findall(r'login:'******'Failed to find the keyword: %s' %
                                searched_str)

        if searched_done == False:
            test.test_error('Failed to find the keyword: %s under %s.' %
                            (searched_str, timeout))