示例#1
0
def run_case(params):
    serial_port = int(
        params.get('vm_cmd_base')['serial'][0].split(',')[0].split(':')[2])
    nfs_server_list = params.get('nfs_server')

    test = CreateTest(case_id='unattended_installation', params=params)
    id = test.get_id()

    host_session = HostSession(id, params)

    nfs_server_ip_list = []
    for server in nfs_server_list:
        nfs_server_ip_list.append(server.split(':')[0])
    test.test_print('NFS server ip:%s' % nfs_server_ip_list)

    if 'x86_64' in params.get('guest_arch'):
        params.vm_base_cmd_add('machine', 'pc')
    elif 'ppc64' in params.get('guest_arch'):
        params.vm_base_cmd_add('machine', 'pseries')

    rtt_info = {}
    rtt_val = []
    test.main_step_log('1. Chose a nfs server.')
    for ip in nfs_server_ip_list:
        ping_cmd = 'ping %s -c 5' % ip
        output = host_session.host_cmd_output(ping_cmd)
        rtt_line = output.splitlines()[-1]
        if float(rtt_line.split('/')[-3]) < float(params.get('rtt_tolerance')):
            rtt_info[ip] = rtt_line.split('/')[-3]
            rtt_val.append(float(rtt_line.split('/')[-3]))
    if not rtt_val:
        test.test_error('No available nfs server.')
    test.test_print('rtt info : %s' % rtt_info)
    min_rtt_val = min(rtt_val)
    mount_info = ''
    for ip, rtt in rtt_info.items():
        if float(rtt) == min_rtt_val:
            for nfs_server in nfs_server_list:
                if ip in nfs_server:
                    mount_info = nfs_server

    test.test_print('Mount point info : %s' % mount_info)
    image_dir = os.path.join(os.path.join(BASE_FILE, 'images'),
                             params.get('image_name'))
    if not os.path.exists(image_dir):
        os.makedirs(image_dir)

    image_size = params.get('image_size')
    test.main_step_log('2. Create a system image to install os.')
    if params.get('image_format') == 'qcow2':
        image = os.path.join(image_dir, (params.get('image_name') + '.qcow2'))
        host_session.host_cmd_output('rm -rf %s' % image)
        host_session.host_cmd_output('qemu-img create -f qcow2 %s %s' %
                                     (image, image_size))
        params.vm_base_cmd_add(
            'drive', 'id=drive_image1,if=none,snapshot=off,'
            'aio=threads,cache=none,format=qcow2,'
            'file=%s' % image)

    elif params.get('image_format') == 'raw':
        image = image_dir + params.get('image_name') + '.raw'
        host_session.host_cmd_output('qemu-img create -f raw %s %s' %
                                     (image, image_size))
        params.vm_base_cmd_add(
            'drive', 'id=drive_image1,if=none,snapshot=off,'
            'aio=threads,cache=none,format=raw,'
            'file=%s' % image)
    elif params.get('image_format') == 'luks':
        pass

    if params.get('drive_format') == 'virtio_scsi':
        params.vm_base_cmd_add('device',
                               'scsi-hd,id=image1,drive=drive_image1')
    elif params.get('drive_format') == 'virtio_blk':
        params.vm_base_cmd_add('device',
                               'virtio-blk-pci,id=image1,drive=drive_image1')

    isos_dir = os.path.join(BASE_FILE, 'isos')
    if not os.path.exists(isos_dir):
        os.makedirs(isos_dir)
        test.main_step_log('3. Mount iso from nfs server.')
    host_session.host_cmd_output('mount -t nfs %s %s' % (mount_info, isos_dir))

    test.main_step_log('4. Find the corresponding iso')
    iso_pattern = params.get('iso_name') + '*' + 'Server' + '-' \
               + params.get('guest_arch') + '-' + 'dvd1.iso'
    iso_name = host_session.host_cmd_output('find %s -name %s' %
                                            (isos_dir, iso_pattern))
    if not iso_name:
        test.test_error('No found the corresponding %s iso.' %
                        params.get('iso_name'))
    test.test_print('Found the corresponding iso: %s' % iso_name)
    params.vm_base_cmd_add(
        'drive', 'id=drive_cd1,if=none,snapshot=off,aio=threads,'
        'cache=none,media=cdrom,file=%s' % iso_name)
    params.vm_base_cmd_add('device',
                           'scsi-cd,id=cd1,drive=drive_cd1,bootindex=2')

    ks_dir = os.path.join(BASE_FILE, 'ks')
    if not os.path.exists(ks_dir):
        os.makedirs(ks_dir)
    test.main_step_log('5. Find the corresponding ks')
    ks_pattern = params.get('iso_name').split('.')[0] + '*'
    ks = host_session.host_cmd_output('find %s -name %s' %
                                      (ks_dir, ks_pattern))
    ks_iso = os.path.join(ks_dir, 'ks.iso')

    test.main_step_log('6. Make a %s form %s.' % (ks_iso, ks))
    host_session.host_cmd_output('mkisofs -o %s %s' % (ks_iso, ks))

    params.vm_base_cmd_add(
        'drive', 'id=drive_unattended,if=none,snapshot=off,'
        'aio=threads,cache=none,media=cdrom,'
        'file=%s' % ks_iso)

    params.vm_base_cmd_add(
        'device', 'scsi-cd,'
        'id=unattended,drive=drive_unattended,bootindex=3')

    params.vm_base_cmd_add('m', params.get('mem_size'))
    params.vm_base_cmd_add(
        'smp', '%d,cores=%d,threads=1,sockets=%d' %
        (int(params.get('vcpu')), int(params.get('vcpu')) / 2,
         int(params.get('vcpu')) / 2))

    mount_dir = os.path.join(BASE_FILE, 'mnt')
    if not os.path.exists(mount_dir):
        os.makedirs(mount_dir)

    test.main_step_log('7. cp vmlinuz and initrd.img form %s.' % iso_name)
    host_session.host_cmd_output('mount %s %s' % (iso_name, mount_dir))

    if 'x86_64' in params.get('guest_arch'):
        host_session.host_cmd_output('cp /%s/images/pxeboot/vmlinuz %s' %
                                     (mount_dir, image_dir))
        host_session.host_cmd_output('cp /%s/images/pxeboot/initrd.img %s' %
                                     (mount_dir, image_dir))
        host_session.host_cmd_output('umount %s' % mount_dir)
    if 'ppc64' in params.get('guest_arch'):
        host_session.host_cmd_output('cp /%s/ppc/ppc64/vmlinuz %s' %
                                     (mount_dir, image_dir))
        host_session.host_cmd_output('cp /%s/ppc/ppc64/initrd.img %s' %
                                     (mount_dir, image_dir))
        host_session.host_cmd_output('umount %s' % mount_dir)

    test.main_step_log('8. Check the name of mounted ks.iso.')
    host_session.host_cmd_output('mount %s %s' % (ks_iso, mount_dir))
    ks_name = host_session.host_cmd_output('ls %s' % mount_dir)
    host_session.host_cmd_output('umount %s' % mount_dir)

    params.vm_base_cmd_add('kernel', '"%s/vmlinuz"' % image_dir)
    console_option = ''
    if 'x86_64' in params.get('guest_arch'):
        console_option = 'ttyS0,115200'
    if 'ppc64' in params.get('guest_arch'):
        console_option = 'hvc0,38400'
    params.vm_base_cmd_add(
        'append', '"ksdevice=link inst.repo=cdrom:/dev/sr0 '
        'inst.ks=cdrom:/dev/sr1:/%s nicdelay=60 '
        'biosdevname=0 net.ifnames=0 '
        'console=tty0 console=%s"' % (ks_name, console_option))
    params.vm_base_cmd_add('initrd', '"%s/initrd.img"' % image_dir)

    test.main_step_log(
        '9. Boot this guest and start to install os automaticlly.')
    qemu_cmd = params.create_qemu_cmd()
    host_session.boot_guest(cmd=qemu_cmd)
    guest_serial = RemoteSerialMonitor(case_id=id,
                                       params=params,
                                       ip='0',
                                       port=serial_port)

    end_timeout = time.time() + int(params.get('install_timeout'))
    install_done = False
    while time.time() < end_timeout:
        output = guest_serial.serial_output()
        test.test_print(output)
        if re.findall(r'Power down', output):
            install_done = True
            host_session.host_cmd_output('rm -rf %s/initrd.img' % image_dir)
            host_session.host_cmd_output('rm -rf %s/vmlinuz' % image_dir)
            host_session.host_cmd_output('rm -rf %s' % ks_iso)
            break

    if install_done == False:
        host_session.host_cmd_output('rm -rf %s/initrd.img' % image_dir)
        host_session.host_cmd_output('rm -rf %s/vmlinuz' % image_dir)
        host_session.host_cmd_output('rm -rf %s' % ks_iso)
        test.test_error('Install failed under %s sec' %
                        params.get('install_timeout'))
    else:
        test.test_print('Install successfully.')
示例#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_10059', params=params)
    id = test.get_id()
    src_host_session = HostSession(id, params)

    test.main_step_log('1. Start source vm')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(src_qemu_cmd, vm_alias='src')

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

    test.main_step_log('2. Create a file in host')
    src_host_session.host_cmd(cmd='rm -rf /home/file_host')
    src_host_session.host_cmd(cmd='rm -rf /home/file_host2')

    cmd = 'dd if=/dev/urandom of=/home/file_host bs=1M count=5000 oflag=direct'
    src_host_session.host_cmd_output(cmd, timeout=600)

    test.main_step_log(
        '3. Start des vm in migration-listen mode: "-incoming tcp:0:****"')
    params.vm_base_cmd_add('incoming', 'tcp:0:%s' % incoming_port)
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(ip=dst_host_ip,
                                       cmd=dst_qemu_cmd,
                                       vm_alias='dst')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('4. Transfer file from host to guest')
    src_guest_session.guest_cmd_output(cmd='rm -rf /home/file_guest')
    thread = threading.Thread(target=scp_thread_put,
                              args=(src_host_session, '/home/file_host',
                                    '/home/file_guest',
                                    params.get('guest_passwd'), src_guest_ip,
                                    600))

    thread.name = 'scp_thread_put'
    thread.daemon = True
    thread.start()

    test.main_step_log('5. Start migration')
    do_migration(src_remote_qmp, incoming_port, dst_host_ip)
    test.sub_step_log('Check dmesg dst guest')
    dst_serial = RemoteSerialMonitor(id, params, dst_host_ip, serial_port)
    cmd = 'dmesg'
    output = dst_serial.serial_cmd_output(cmd)
    if re.findall(r'Call Trace:', output):
        dst_serial.test_error('Guest hit call trace')
    dst_serial.serial_cmd(cmd='reboot')
    dst_guest_ip = dst_serial.serial_login()

    test.main_step_log('6. Ping-pong migrate until file transfer finished')
    src_remote_qmp, dst_remote_qmp = ping_pong_migration(
        params,
        id,
        src_host_session,
        src_remote_qmp,
        dst_remote_qmp,
        times=10,
        query_thread='pgrep -x scp')

    test.sub_step_log('Login dst guest after ping-pong migration')
    dst_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=dst_guest_ip)
    test.sub_step_log('Check dmesg info ')
    cmd = 'dmesg'
    output = dst_guest_session.guest_cmd_output(cmd)
    if re.findall(r'Call Trace:', output):
        dst_guest_session.test_error('Guest hit call trace')

    cmd = "md5sum /home/file_host | awk '{print $1}'"
    file_src_host_md5 = src_host_session.host_cmd_output(cmd)
    cmd = "md5sum /home/file_guest | awk '{print $1}'"
    file_guest_md5 = dst_guest_session.guest_cmd_output(cmd)

    if file_src_host_md5 != file_guest_md5:
        test.test_error('Value of md5sum error!')

    test.main_step_log('7. Transfer file from guest to host')
    thread = threading.Thread(target=scp_thread_get,
                              args=(src_host_session, '/home/file_host2',
                                    '/home/file_guest',
                                    params.get('guest_passwd'), dst_guest_ip,
                                    600))

    thread.name = 'scp_thread_get'
    thread.daemon = True
    thread.start()

    test.main_step_log('8. Ping-Pong migration until file transfer finished.')
    ping_pong_migration(params,
                        id,
                        src_host_session,
                        src_remote_qmp,
                        dst_remote_qmp,
                        times=10,
                        query_thread='pgrep -x scp')

    test.main_step_log('9. Check md5sum after file transfer')

    cmd = "md5sum /home/file_host | awk '{print $1}'"
    file_src_host_md5 = src_host_session.host_cmd_output(cmd)

    cmd = "md5sum /home/file_host2 | awk '{print $1}'"
    file_src_host2_md5 = src_host_session.host_cmd_output(cmd)

    if file_src_host_md5 != file_src_host2_md5:
        test.test_error('Value of md5sum error!')

    test.sub_step_log('Login dst guest after ping-pong migration')
    dst_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=dst_guest_ip)
    test.sub_step_log('Check dmesg info ')
    cmd = 'dmesg'
    output = dst_guest_session.guest_cmd_output(cmd)
    if re.findall(r'Call Trace:', output):
        dst_guest_session.test_error('Guest hit call trace')

    dst_guest_session.guest_cmd_output('shutdown -h now')
    output = dst_serial.serial_output()
    if re.findall(r'Call Trace:', output):
        test.test_error('Guest hit call trace')
示例#3
0
def run_case(params):
    serial_port = int(params.get('serial_port'))
    qmp_port = int(params.get('qmp_port'))
    nfs_server_list = params.get('nfs_server')
    src_host_ip = params.get('src_host_ip')
    dst_host_ip = params.get('dst_host_ip')
    guest_arch = params.get('guest_arch')

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

    test.main_step_log('1. start VM in src host, install a guest')
    nfs_server_ip_list = []
    for server in nfs_server_list:
        nfs_server_ip_list.append(server.split(':')[0])
    test.test_print('NFS server ip:%s' % nfs_server_ip_list)

    rtt_info = {}
    rtt_val = []
    test.sub_step_log('1.1 Chose a nfs server.')
    for ip in nfs_server_ip_list:
        ping_cmd = 'ping %s -c 5' % ip
        output = host_session.host_cmd_output(ping_cmd)
        rtt_line = output.splitlines()[-1]
        if float(rtt_line.split('/')[-3]) < float(params.get('rtt_tolerance')):
            rtt_info[ip] = rtt_line.split('/')[-3]
            rtt_val.append(float(rtt_line.split('/')[-3]))
    if not rtt_val:
        test.test_error('No available nfs server.')
    test.test_print('rtt info : %s' % rtt_info)
    min_rtt_val = min(rtt_val)
    mount_info = ''
    for ip, rtt in rtt_info.items():
        if float(rtt) == min_rtt_val:
            for nfs_server in nfs_server_list:
                if ip in nfs_server:
                    mount_info = nfs_server

    test.test_print('Mount point info : %s' % mount_info)
    tmp_install_dir = os.path.join(params.get('share_images_dir'), 'install')
    if not os.path.exists(tmp_install_dir):
        os.makedirs(tmp_install_dir)

    image_size = params.get('image_size')
    test.sub_step_log('1.2 Create a system image to install os.')
    params.vm_base_cmd_update(
        'device', 'scsi-hd,id=image1,drive=drive_image1,'
        'bus=virtio_scsi_pci0.0,channel=0,scsi-id=0,'
        'lun=0,bootindex=0', 'scsi-hd,id=image1,drive=drive_image1,'
        'bus=virtio_scsi_pci0.0,channel=0,'
        'scsi-id=0,lun=0')
    params.vm_base_cmd_del(
        'drive', 'id=drive_image1,if=none,snapshot=off,'
        'aio=threads,cache=none,format=qcow2,'
        'file=%s/%s' %
        (params.get('share_images_dir'), params.get('sys_image_name')))
    if params.get('image_format') == 'qcow2':
        image = os.path.join(tmp_install_dir,
                             (params.get('image_name') + '.qcow2'))
        host_session.host_cmd_output('rm -rf %s' % image)
        host_session.host_cmd_output('qemu-img create -f qcow2 %s %s' %
                                     (image, image_size))
        params.vm_base_cmd_add(
            'drive', 'id=drive_image1,if=none,snapshot=off,'
            'aio=threads,cache=none,format=qcow2,'
            'file=%s' % image)

    elif params.get('image_format') == 'raw':
        image = tmp_install_dir + params.get('image_name') + '.raw'
        host_session.host_cmd_output('qemu-img create -f raw %s %s' %
                                     (image, image_size))
        params.vm_base_cmd_add(
            'drive', 'id=drive_image1,if=none,snapshot=off,'
            'aio=threads,cache=none,format=raw,'
            'file=%s' % image)

    mnt_dir = os.path.join(tmp_install_dir, 'mnt')
    if not os.path.exists(mnt_dir):
        os.makedirs(mnt_dir)
    test.sub_step_log('1.3 Mount iso from nfs server.')
    host_session.host_cmd_output('mount -t nfs %s %s' % (mount_info, mnt_dir))

    test.sub_step_log('1.4 Find the corresponding iso')
    iso_pattern = params.get('iso_name') + '*' + 'Server' + '*' \
               + params.get('guest_arch') + '*' + 'dvd1.iso'
    iso_name = host_session.host_cmd_output('find %s -name %s' %
                                            (mnt_dir, iso_pattern))
    if not iso_name:
        test.test_error('No found the corresponding %s iso.' %
                        params.get('iso_name'))
    test.test_print('Found the corresponding iso: %s' % iso_name)

    isos_dir = os.path.join(tmp_install_dir, 'isos')
    if not os.path.exists(isos_dir):
        os.makedirs(isos_dir)
    test.sub_step_log('1.5 cp the corresponding iso to %s' % isos_dir)
    host_session.host_cmd_output('cp -f %s %s' % (iso_name, isos_dir))

    iso_name = host_session.host_cmd_output('find %s -name %s' %
                                            (isos_dir, iso_pattern))

    host_session.host_cmd_output('umount %s' % mnt_dir)

    params.vm_base_cmd_add(
        'drive', 'id=drive_cd1,if=none,snapshot=off,aio=threads,'
        'cache=none,media=cdrom,file=%s' % iso_name)
    params.vm_base_cmd_add('device',
                           'scsi-cd,id=cd1,drive=drive_cd1,bootindex=2')

    test.sub_step_log('1.6 Find the corresponding ks')
    ks_pattern = params.get('iso_name').split('.')[0] + '*'
    ks = host_session.host_cmd_output('find %s -name %s' %
                                      (MIGRATION_FILE, ks_pattern))

    ks_iso = os.path.join(tmp_install_dir, 'ks.iso')

    test.sub_step_log('1.7 Make a %s form %s.' % (ks_iso, ks))
    host_session.host_cmd_output('mkisofs -o %s %s' % (ks_iso, ks))

    params.vm_base_cmd_add(
        'drive', 'id=drive_unattended,if=none,snapshot=off,'
        'aio=threads,cache=none,media=cdrom,'
        'file=%s' % ks_iso)

    params.vm_base_cmd_add(
        'device', 'scsi-cd,'
        'id=unattended,drive=drive_unattended,bootindex=3')

    test.sub_step_log('1.8 cp vmlinuz and initrd.img form %s.' % iso_name)
    host_session.host_cmd_output('mount %s %s' % (iso_name, mnt_dir))
    if (guest_arch == 'x86_64'):
        host_session.host_cmd_output('cp -f /%s/images/pxeboot/vmlinuz %s' %
                                     (mnt_dir, isos_dir))
        host_session.host_cmd_output('cp -f /%s/images/pxeboot/initrd.img %s' %
                                     (mnt_dir, isos_dir))
    elif (guest_arch == 'ppc64le'):
        host_session.host_cmd_output('cp -f /%s/ppc/ppc64/vmlinuz %s' %
                                     (mnt_dir, isos_dir))
        host_session.host_cmd_output('cp -f /%s/ppc/ppc64/initrd.img %s' %
                                     (mnt_dir, isos_dir))
    host_session.host_cmd_output('umount %s' % mnt_dir)

    test.sub_step_log('1.9 Check the name of mounted ks.iso.')
    host_session.host_cmd_output('mount %s %s' % (ks_iso, mnt_dir))
    ks_name = host_session.host_cmd_output('ls %s' % mnt_dir)
    host_session.host_cmd_output('umount %s' % mnt_dir)

    params.vm_base_cmd_add('kernel', '"%s/vmlinuz"' % isos_dir)
    console_option = ''
    if params.get('guest_arch') == 'x86_64':
        console_option = 'ttyS0,115200'
    elif params.get('guest_arch') == 'ppc64le':
        console_option = 'hvc0,38400'
    params.vm_base_cmd_add(
        'append', '"ksdevice=link inst.repo=cdrom:/dev/sr0 '
        'inst.ks=cdrom:/dev/sr1:/%s nicdelay=60 '
        'biosdevname=0 net.ifnames=0 '
        'console=tty0 console=%s"' % (ks_name, console_option))
    params.vm_base_cmd_add('initrd', '"%s/initrd.img"' % isos_dir)

    test.sub_step_log(
        '1.10 Boot this guest and ready to install os automaticlly.')
    params.vm_base_cmd_add('S', 'None')
    src_qemu_cmd = params.create_qemu_cmd()
    host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)

    test.main_step_log('2.start listenning mode in dst host '
                       'with "-incoming tcp:0:5800"')
    params.vm_base_cmd_del('S', 'None')
    params.vm_base_cmd_update(
        'append', '"ksdevice=link inst.repo=cdrom:/dev/sr0 '
        'inst.ks=cdrom:/dev/sr1:/%s nicdelay=60 '
        'biosdevname=0 net.ifnames=0 '
        'console=tty0 console=%s"' % (ks_name, console_option),
        '\\""ksdevice=link inst.repo=cdrom:/dev/sr0 '
        'inst.ks=cdrom:/dev/sr1:/%s nicdelay=60 '
        'biosdevname=0 net.ifnames=0 '
        'console=tty0 console=%s"\\"' % (ks_name, console_option))
    params.vm_base_cmd_add('incoming',
                           'tcp:0:%s' % params.get('incoming_port'))
    dst_qemu_cmd = params.create_qemu_cmd()
    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. install guest and during guest copying files '
                       '(for windows) or installing packages (rhel guest).')
    src_serial = RemoteSerialMonitor(case_id=id,
                                     params=params,
                                     ip=src_host_ip,
                                     port=serial_port)
    src_remote_qmp.qmp_cmd_output('{ "execute": "cont" }')

    install_timeout = time.time() + int(params.get('install_timeout'))
    install_done = False
    started_install = False
    search_str = 'Installing libgcc'
    while time.time() < install_timeout:
        output = src_serial.serial_output(max_recv_data=128,
                                          search_str=search_str)
        test.test_print(output)
        if re.findall(r'Found the searched keyword', output):
            started_install = True
            break

    if started_install == False:
        test.test_error('No started to install under %s sec.' %
                        params.get('install_timeout'))

    if started_install == True:
        test.main_step_log('4. migrate guest to destination host '
                           'during copying files.')
        ret = do_migration(remote_qmp=src_remote_qmp,
                           migrate_port=params.get('incoming_port'),
                           dst_ip=dst_host_ip)
        if ret == True:
            dst_serial = RemoteSerialMonitor(case_id=id,
                                             params=params,
                                             ip=dst_host_ip,
                                             port=serial_port)
            allput = ''
            while time.time() < install_timeout:
                output = dst_serial.serial_output()
                test.test_print(output)
                allput = allput + output
                if re.findall(r'Power down.', allput):
                    install_done = True
                    host_session.host_cmd_output('rm -rf %s/initrd.img' %
                                                 isos_dir)
                    host_session.host_cmd_output('rm -rf %s/vmlinuz' %
                                                 isos_dir)
                    host_session.host_cmd_output('rm -rf %s' % ks_iso)
                    break

            if install_done == False:
                host_session.host_cmd_output('rm -rf %s/initrd.img' % isos_dir)
                host_session.host_cmd_output('rm -rf %s/vmlinuz' % isos_dir)
                host_session.host_cmd_output('rm -rf %s' % ks_iso)
                test.test_error('Install failed under %s sec' %
                                params.get('install_timeout'))
            else:
                test.test_print('Install successfully.')

    params.vm_base_cmd_del(
        'drive', 'id=drive_cd1,if=none,snapshot=off,aio=threads,'
        'cache=none,media=cdrom,file=%s' % iso_name)

    params.vm_base_cmd_del('device',
                           'scsi-cd,id=cd1,drive=drive_cd1,bootindex=2')

    params.vm_base_cmd_del(
        'drive', 'id=drive_unattended,if=none,snapshot=off,'
        'aio=threads,cache=none,media=cdrom,'
        'file=%s' % ks_iso)

    params.vm_base_cmd_del(
        'device', 'scsi-cd,'
        'id=unattended,drive=drive_unattended,bootindex=3')

    params.vm_base_cmd_del('kernel', '"%s/vmlinuz"' % isos_dir)

    params.vm_base_cmd_del(
        'append', '\\""ksdevice=link inst.repo=cdrom:/dev/sr0 '
        'inst.ks=cdrom:/dev/sr1:/%s nicdelay=60 '
        'biosdevname=0 net.ifnames=0 '
        'console=tty0 console=%s"\\"' % (ks_name, console_option))

    params.vm_base_cmd_del('initrd', '"%s/initrd.img"' % isos_dir)

    params.vm_base_cmd_del('incoming',
                           'tcp:0:%s' % params.get('incoming_port'))

    dst_qemu_cmd = params.create_qemu_cmd()
    test.sub_step_log('Boot guest again.')
    host_session.boot_remote_guest(cmd=dst_qemu_cmd,
                                   ip=dst_host_ip,
                                   vm_alias='dst')
    dst_serial = RemoteSerialMonitor(id, params, dst_host_ip, serial_port)

    dst_guest_ip = dst_serial.serial_login()
    dst_guest_session = GuestSession(case_id=id,
                                     params=params,
                                     ip=dst_guest_ip)
    test.sub_step_log('4.1 guest keyboard and mouse work normally.')

    test.sub_step_log(
        '4.2 ping available, copy file succeed, network is fine.')
    external_host_ip = 'www.redhat.com'
    cmd_ping = 'ping %s -c 10' % external_host_ip
    output = dst_guest_session.guest_cmd_output(cmd=cmd_ping)
    if re.findall(r'100% packet loss', output):
        dst_guest_session.test_error('Ping failed')

    test.sub_step_log('4.3 Guest can reboot and shutdown successfully.')
    cmd_dd = 'dd if=/dev/zero of=file1 bs=1M count=1000 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.4 Guest can reboot and shutdown successfully.')
    dst_serial.serial_cmd(cmd='reboot')
    dst_serial.serial_login()
    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 host')
示例#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'))
    serial_port = int(params.get('serial_port'))
    guest_passwd = params.get('guest_passwd')
    incoming_port = params.get('incoming_port')

    test = CreateTest(case_id='rhel7_10027', params=params)
    id = test.get_id()
    src_host_session = HostSession(id, params)

    test.main_step_log('1. start vm on src host with \"-S\" in qemu cli')
    params.vm_base_cmd_add('S', 'None')
    src_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_guest(cmd=src_qemu_cmd, vm_alias='src')
    test.sub_step_log('Check the status of src guest')
    src_remote_qmp = RemoteQMPMonitor(id, params, src_host_ip, qmp_port)

    test.main_step_log('2. start listening mode on the dst host '
                       'with \"-incoming tcp:0:5800\" '
                       'but without \"-S\" in qemu cli')
    params.vm_base_cmd_add('incoming', 'tcp:0:%s' % incoming_port)
    params.vm_base_cmd_del('S', 'None')
    dst_qemu_cmd = params.create_qemu_cmd()
    src_host_session.boot_remote_guest(ip=dst_host_ip,
                                       cmd=dst_qemu_cmd,
                                       vm_alias='dst')
    test.sub_step_log('Check the status of dst guest')
    dst_remote_qmp = RemoteQMPMonitor(id, params, dst_host_ip, qmp_port)

    test.main_step_log('3. "cont" gust, after kernel start to load, '
                       'implement migration during vm boot ')
    src_remote_qmp.qmp_cmd_output('{ "execute": "cont" }')
    test.sub_step_log('Connecting to src serial')
    src_serial = RemoteSerialMonitor(case_id=id,
                                     params=params,
                                     ip=src_host_ip,
                                     port=serial_port)

    search_str = '[    0.000000]'
    while 1:
        output = src_serial.serial_output(max_recv_data=128,
                                          search_str=search_str)
        if re.findall(r'Found the searched keyword', output):
            test.test_print(output)
            do_migration(src_remote_qmp, incoming_port, dst_host_ip)
            break
        else:
            test.test_print(output)
        if re.findall(r'login:'******'Failed to find the keyword: %s' % search_str)

    test.main_step_log('4. After finish migration and guest boot up, '
                       'check if guest works well')

    dst_serial = RemoteSerialMonitor(case_id=id,
                                     params=params,
                                     ip=dst_host_ip,
                                     port=serial_port)

    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_passwd)
            dst_serial.test_print(guest_passwd, 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')
示例#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')
    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_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))