Ejemplo n.º 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()
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()