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.')
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')
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')
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')
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))