[libvirt] [PATCH 3/3] Add qemu help string parsing tests

Mark McLoughlin markmc at redhat.com
Wed Jun 10 20:02:41 UTC 2009


Signed-off-by: Mark McLoughlin <markmc at redhat.com>
---
 src/qemu_conf.c                    |   10 +-
 src/qemu_conf.h                    |    6 ++
 tests/Makefile.am                  |    9 ++-
 tests/qemuhelpdata/kvm-74          |  111 +++++++++++++++++++++++
 tests/qemuhelpdata/kvm-86          |  170 ++++++++++++++++++++++++++++++++++++
 tests/qemuhelpdata/qemu-0.10.5     |  141 +++++++++++++++++++++++++++++
 tests/qemuhelpdata/qemu-0.9.1      |  102 +++++++++++++++++++++
 tests/qemuhelpdata/qemu-kvm-0.10.5 |  155 ++++++++++++++++++++++++++++++++
 tests/qemuhelptest.c               |  107 ++++++++++++++++++++++
 9 files changed, 803 insertions(+), 8 deletions(-)
 create mode 100644 tests/qemuhelpdata/kvm-74
 create mode 100644 tests/qemuhelpdata/kvm-86
 create mode 100644 tests/qemuhelpdata/qemu-0.10.5
 create mode 100644 tests/qemuhelpdata/qemu-0.9.1
 create mode 100644 tests/qemuhelpdata/qemu-kvm-0.10.5
 create mode 100644 tests/qemuhelptest.c

diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index 9ff1402..7cce633 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -487,11 +487,11 @@ static unsigned int qemudComputeCmdFlags(const char *help,
 #define QEMU_KVM_VER_PREFIX " (qemu-kvm-"
 #define KVM_VER_PREFIX      " (kvm-"
 
-static int qemudParseHelpStr(const char *help,
-                             unsigned int *flags,
-                             unsigned int *version,
-                             unsigned int *is_kvm,
-                             unsigned int *kvm_version)
+int qemudParseHelpStr(const char *help,
+                      unsigned int *flags,
+                      unsigned int *version,
+                      unsigned int *is_kvm,
+                      unsigned int *kvm_version)
 {
     unsigned major, minor, micro;
     const char *p = help;
diff --git a/src/qemu_conf.h b/src/qemu_conf.h
index 1001e00..b01fe48 100644
--- a/src/qemu_conf.h
+++ b/src/qemu_conf.h
@@ -125,6 +125,12 @@ int         qemudExtractVersionInfo     (const char *qemu,
                                          unsigned int *version,
                                          unsigned int *flags);
 
+int         qemudParseHelpStr           (const char *str,
+                                         unsigned int *flags,
+                                         unsigned int *version,
+                                         unsigned int *is_kvm,
+                                         unsigned int *kvm_version);
+
 int         qemudBuildCommandLine       (virConnectPtr conn,
                                          struct qemud_driver *driver,
                                          virDomainDefPtr def,
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 621a0be..3d98d69 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -61,7 +61,7 @@ noinst_PROGRAMS += xml2sexprtest sexpr2xmltest \
 	reconnect xmconfigtest xencapstest
 endif
 if WITH_QEMU
-noinst_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest
+noinst_PROGRAMS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest
 endif
 
 if WITH_SECDRIVER_SELINUX
@@ -119,7 +119,7 @@ endif
 endif
 
 if WITH_QEMU
-TESTS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest
+TESTS += qemuxml2argvtest qemuxml2xmltest qemuargv2xmltest qemuhelptest
 endif
 
 if WITH_SECDRIVER_SELINUX
@@ -199,8 +199,11 @@ qemuargv2xmltest_SOURCES = \
 	qemuargv2xmltest.c testutilsqemu.c testutilsqemu.h \
 	testutils.c testutils.h
 qemuargv2xmltest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS)
+
+qemuhelptest_SOURCES = qemuhelptest.c testutils.c testutils.h
+qemuhelptest_LDADD = ../src/libvirt_driver_qemu.la $(LDADDS)
 else
-EXTRA_DIST += qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c testutilsqemu.c testutilsqemu.h
+EXTRA_DIST += qemuxml2argvtest.c qemuxml2xmltest.c qemuargv2xmltest.c qemuhelptest.c testutilsqemu.c testutilsqemu.h
 endif
 
 nodedevxml2xmltest_SOURCES = \
diff --git a/tests/qemuhelpdata/kvm-74 b/tests/qemuhelpdata/kvm-74
new file mode 100644
index 0000000..f44932d
--- /dev/null
+++ b/tests/qemuhelpdata/kvm-74
@@ -0,0 +1,111 @@
+QEMU PC emulator version 0.9.1 (kvm-74), Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-M machine      select emulated machine (-M ? for list)
+-cpu cpu        select CPU (-cpu ? for list)
+-fda/-fdb file  use 'file' as floppy disk 0/1 image
+-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
+-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+       [,cache=on|off][,format=f][,boot=on|off]
+                use 'file' as a drive image
+-mtdblock file  use 'file' as on-board Flash memory image
+-sd file        use 'file' as SecureDigital card image
+-pflash file    use 'file' as a parallel flash image
+-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
+-snapshot       write to temporary files instead of disk image files
+-no-frame       open SDL window without a frame and window decorations
+-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-no-quit        disable SDL window close capability
+-no-fd-bootchk  disable boot signature checking for floppy disks
+-m megs         set virtual RAM size to megs MB [default=128]
+-smp n          set the number of CPUs to 'n' [default=1]
+-nographic      disable graphical output and redirect serial I/Os to console
+-portrait       rotate graphical output 90 deg left (only PXA LCD)
+-k language     use keyboard layout (for example "fr" for French)
+-audio-help     print list of audio drivers and their options
+-soundhw c1,... enable audio support
+                and only specified sound cards (comma separated list)
+                use -soundhw ? to get the list of supported cards
+                use -soundhw all to enable all of them
+-localtime      set the real time clock to local time [default=utc]
+-full-screen    start in full screen
+-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
+-usb            enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-name string    set the name of the guest
+
+Network options:
+-net nic[,vlan=n][,macaddr=addr][,model=type]
+                create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,hostname=host]
+                connect the user mode network stack to VLAN 'n' and send
+                hostname 'host' to DHCP clients
+-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]
+                connect the host TAP network interface to VLAN 'n' and use the
+                network scripts 'file' (default=/etc/qemu-ifup)
+                and 'dfile' (default=/etc/qemu-ifdown);
+                use '[down]script=no' to disable script execution;
+                use 'fd=h' to connect to an already opened TAP interface
+-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]
+                connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,fd=h][,mcast=maddr:port]
+                connect the vlan 'n' to multicast maddr and port
+-net none       use it alone to have zero network devices; if no -net option
+                is provided, the default is '-net nic -net user'
+
+-tftp dir       allow tftp access to files in dir [-net user]
+-bootp file     advertise file in BOOTP replies
+-smb dir        allow SMB access to files in 'dir' [-net user]
+-redir [tcp|udp]:host-port:[guest-host]:guest-port
+                redirect TCP or UDP connections from host to guest [-net user]
+
+Linux boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file    use 'file' as initial ram disk
+
+Debug/Expert options:
+-monitor dev    redirect the monitor to char device 'dev'
+-serial dev     redirect the serial port to char device 'dev'
+-parallel dev   redirect the parallel port to char device 'dev'
+-pidfile file   Write PID to 'file'
+-S              freeze CPU at startup (use 'c' to start execution)
+-s              wait gdb connection to port
+-p port         set gdb connection port [default=1234]
+-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS
+                translation (t=none or lba) (usually qemu can guess them)
+-L path         set the directory for the BIOS, VGA BIOS and keymaps
+-no-kvm         disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit	    disable KVM kernel mode PIT
+-std-vga        simulate a standard VGA card with VESA Bochs Extensions
+                (default is CL-GD5446 PCI VGA)
+-no-acpi        disable ACPI
+-no-reboot      exit instead of rebooting
+-no-shutdown    stop before shutdown
+-loadvm [tag|id]  start right away with a saved state (loadvm in monitor)
+-vnc display    start a VNC server on display
+-daemonize      daemonize QEMU after initializing
+-tdf            inject timer interrupts that got lost
+-kvm-shadow-memory megs set the amount of shadow pages to be allocated
+-mem-path       set the path to hugetlbfs/tmpfs mounted directory, also enables allocation of guest memory with huge pages
+-option-rom rom load a file, rom, into the option ROM space
+-clock          force the use of the given methods for timer alarm.
+                To see what timers are available use -clock ?
+-startdate      select initial date of the clock
+-icount [N|auto]
+                Enable virtual instruction counter with 2^N clock ticks per instruction
+
+During emulation, the following keys are useful:
+ctrl-alt-f      toggle full screen
+ctrl-alt-n      switch to virtual console 'n'
+ctrl-alt        toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
diff --git a/tests/qemuhelpdata/kvm-86 b/tests/qemuhelpdata/kvm-86
new file mode 100644
index 0000000..1687cab
--- /dev/null
+++ b/tests/qemuhelpdata/kvm-86
@@ -0,0 +1,170 @@
+QEMU PC emulator version 0.10.50 (qemu-kvm-devel-86), Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-h or -help     display this help and exit
+-version        display version information and exit
+-M machine      select emulated machine (-M ? for list)
+-cpu cpu        select CPU (-cpu ? for list)
+-smp n          set the number of CPUs to 'n' [default=1]
+-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]
+-fda/-fdb file  use 'file' as floppy disk 0/1 image
+-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
+-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+       [,cache=writethrough|writeback|none][,format=f][,serial=s]
+       [,boot=on|off]
+                use 'file' as a drive image
+-mtdblock file  use 'file' as on-board Flash memory image
+-sd file        use 'file' as SecureDigital card image
+-pflash file    use 'file' as a parallel flash image
+-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
+-snapshot       write to temporary files instead of disk image files
+-m megs         set virtual RAM size to megs MB [default=128]
+-k language     use keyboard layout (for example 'fr' for French)
+-audio-help     print list of audio drivers and their options
+-soundhw c1,... enable audio support
+                and only specified sound cards (comma separated list)
+                use -soundhw ? to get the list of supported cards
+                use -soundhw all to enable all of them
+-usb            enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-name string    set the name of the guest
+-uuid %08x-%04x-%04x-%04x-%012x
+                specify machine UUID
+
+Display options:
+-nographic      disable graphical output and redirect serial I/Os to console
+-no-frame       open SDL window without a frame and window decorations
+-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-no-quit        disable SDL window close capability
+-sdl            enable SDL
+-portrait       rotate graphical output 90 deg left (only PXA LCD)
+-vga [std|cirrus|vmware|xenfb|none]
+                select video card type
+-full-screen    start in full screen
+-vnc display    start a VNC server on display
+
+i386 target only:
+-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
+-rtc-td-hack    use it to fix time drift in Windows ACPI HAL
+-no-fd-bootchk  disable boot signature checking for floppy disks
+-no-acpi        disable ACPI
+-no-hpet        disable HPET
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
+                ACPI table description
+-smbios file=binary
+                Load SMBIOS entry from binary file
+-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
+                Specify SMBIOS type 0 fields
+-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
+              [,uuid=uuid][,sku=str][,family=str]
+                Specify SMBIOS type 1 fields
+
+Network options:
+-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]
+                create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,hostname=host]
+                connect the user mode network stack to VLAN 'n' and send
+                hostname 'host' to DHCP clients
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]
+                connect the host TAP network interface to VLAN 'n' and use the
+                network scripts 'file' (default=/etc/qemu-ifup)
+                and 'dfile' (default=/etc/qemu-ifdown);
+                use '[down]script=no' to disable script execution;
+                use 'fd=h' to connect to an already opened TAP interface
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+                connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]
+                connect the vlan 'n' to multicast maddr and port
+-net dump[,vlan=n][,file=f][,len=n]
+                dump traffic on vlan 'n' to file 'f' (max n bytes per packet)
+-net none       use it alone to have zero network devices; if no -net option
+                is provided, the default is '-net nic -net user'
+-tftp dir       allow tftp access to files in dir [-net user]
+-bootp file     advertise file in BOOTP replies
+-smb dir        allow SMB access to files in 'dir' [-net user]
+-redir [tcp|udp]:host-port:[guest-host]:guest-port
+                redirect TCP or UDP connections from host to guest [-net user]
+
+-bt hci,null    dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+                use host's HCI with the given name
+-bt hci[,vlan=n]
+                emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+                add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+                emulate a bluetooth device 'dev' in scatternet 'n'
+
+Linux boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file    use 'file' as initial ram disk
+
+Debug/Expert options:
+-serial dev     redirect the serial port to char device 'dev'
+-parallel dev   redirect the parallel port to char device 'dev'
+-monitor dev    redirect the monitor to char device 'dev'
+-pidfile file   write PID to 'file'
+-singlestep   always run in singlestep mode
+-S              freeze CPU at startup (use 'c' to start execution)
+-gdb dev        wait for gdb connection on 'dev'
+-s              shorthand for -gdb tcp::1234
+-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]
+                force hard disk 0 physical geometry and the optional BIOS
+                translation (t=none or lba) (usually qemu can guess them)
+-L path         set the directory for the BIOS, VGA BIOS and keymaps
+-bios file      set the filename for the BIOS
+-no-reboot      exit instead of rebooting
+-no-shutdown    stop before shutdown
+-loadvm [tag|id]
+                start right away with a saved state (loadvm in monitor)
+-daemonize      daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock          force the use of the given methods for timer alarm.
+                To see what timers are available use -clock ?
+-localtime      set the real time clock to local time [default=utc]
+-startdate      select initial date of the clock
+-icount [N|auto]
+                enable virtual instruction counter with 2^N clock ticks per
+                instruction
+-watchdog i6300esb|ib700
+                enable virtual hardware watchdog [default=none]
+-watchdog-action reset|shutdown|poweroff|pause|debug|none
+                action when watchdog fires [default=reset]
+-echr chr       set terminal escape character instead of ctrl-a
+-virtioconsole c
+                set virtio console
+-show-cursor    show cursor
+-tb-size n      set TB size
+-incoming p     prepare for incoming migration, listen on port p
+-chroot dir     Chroot to dir just before starting the VM.
+-runas user     Change to user id user just before starting the VM.
+-no-kvm         disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit     disable KVM kernel mode PIT
+-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection
+-pcidevice host=bus:dev.func[,dma=none][,name=string]
+                expose a PCI device to the guest OS.
+                dma=none: don't perform any dma translations (default is to use an iommu)
+                'string' is used in log output.
+-enable-nesting enable support for running a VM inside the VM (AMD only)
+-nvram FILE          provide ia64 nvram contents
+-tdf                 enable guest time drift compensation
+-kvm-shadow-memory MEGABYTES
+                     allocate MEGABYTES for kvm mmu shadowing
+-mempath FILE        provide backing storage for guest RAM
+-mem-prealloc        preallocate guest memory (use with -mempath)
+
+During emulation, the following keys are useful:
+ctrl-alt-f      toggle full screen
+ctrl-alt-n      switch to virtual console 'n'
+ctrl-alt        toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
diff --git a/tests/qemuhelpdata/qemu-0.10.5 b/tests/qemuhelpdata/qemu-0.10.5
new file mode 100644
index 0000000..2a8363b
--- /dev/null
+++ b/tests/qemuhelpdata/qemu-0.10.5
@@ -0,0 +1,141 @@
+QEMU PC emulator version 0.10.5, Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-h or -help     display this help and exit
+-M machine      select emulated machine (-M ? for list)
+-cpu cpu        select CPU (-cpu ? for list)
+-smp n          set the number of CPUs to 'n' [default=1]
+-fda/-fdb file  use 'file' as floppy disk 0/1 image
+-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
+-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+       [,cache=writethrough|writeback|none][,format=f][,serial=s]
+                use 'file' as a drive image
+-mtdblock file  use 'file' as on-board Flash memory image
+-sd file        use 'file' as SecureDigital card image
+-pflash file    use 'file' as a parallel flash image
+-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
+-snapshot       write to temporary files instead of disk image files
+-m megs         set virtual RAM size to megs MB [default=128]
+-k language     use keyboard layout (for example "fr" for French)
+-audio-help     print list of audio drivers and their options
+-soundhw c1,... enable audio support
+                and only specified sound cards (comma separated list)
+                use -soundhw ? to get the list of supported cards
+                use -soundhw all to enable all of them
+-usb            enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-name string    set the name of the guest
+-uuid %08x-%04x-%04x-%04x-%012x
+                specify machine UUID
+
+Display options:
+-nographic      disable graphical output and redirect serial I/Os to console
+-curses         use a curses/ncurses interface instead of SDL
+-no-frame       open SDL window without a frame and window decorations
+-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-no-quit        disable SDL window close capability
+-sdl            enable SDL
+-portrait       rotate graphical output 90 deg left (only PXA LCD)
+-vga [std|cirrus|vmware|none]
+                select video card type
+-full-screen    start in full screen
+-vnc display    start a VNC server on display
+
+Network options:
+-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]
+                create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,hostname=host]
+                connect the user mode network stack to VLAN 'n' and send
+                hostname 'host' to DHCP clients
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]
+                connect the host TAP network interface to VLAN 'n' and use the
+                network scripts 'file' (default=/etc/qemu-ifup)
+                and 'dfile' (default=/etc/qemu-ifdown);
+                use '[down]script=no' to disable script execution;
+                use 'fd=h' to connect to an already opened TAP interface
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+                connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]
+                connect the vlan 'n' to multicast maddr and port
+-net none       use it alone to have zero network devices; if no -net option
+                is provided, the default is '-net nic -net user'
+-tftp dir       allow tftp access to files in dir [-net user]
+-bootp file     advertise file in BOOTP replies
+-smb dir        allow SMB access to files in 'dir' [-net user]
+-redir [tcp|udp]:host-port:[guest-host]:guest-port
+                redirect TCP or UDP connections from host to guest [-net user]
+
+-bt hci,null    dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+                use host's HCI with the given name
+-bt hci[,vlan=n]
+                emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+                add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+                emulate a bluetooth device 'dev' in scatternet 'n'
+
+
+i386 target only:
+-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
+-rtc-td-hack    use it to fix time drift in Windows ACPI HAL
+-no-fd-bootchk  disable boot signature checking for floppy disks
+-no-acpi        disable ACPI
+-no-hpet        disable HPET
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
+                ACPI table description
+Linux boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file    use 'file' as initial ram disk
+
+Debug/Expert options:
+-serial dev     redirect the serial port to char device 'dev'
+-parallel dev   redirect the parallel port to char device 'dev'
+-monitor dev    redirect the monitor to char device 'dev'
+-pidfile file   write PID to 'file'
+-S              freeze CPU at startup (use 'c' to start execution)
+-s              wait gdb connection to port
+-p port         set gdb connection port [default=1234]
+-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]
+                force hard disk 0 physical geometry and the optional BIOS
+                translation (t=none or lba) (usually qemu can guess them)
+-L path         set the directory for the BIOS, VGA BIOS and keymaps
+-bios file      set the filename for the BIOS
+-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)
+-no-kqemu       disable KQEMU kernel module usage
+-enable-kvm     enable KVM full virtualization support
+-no-reboot      exit instead of rebooting
+-no-shutdown    stop before shutdown
+-loadvm [tag|id]
+                start right away with a saved state (loadvm in monitor)
+-daemonize      daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock          force the use of the given methods for timer alarm.
+                To see what timers are available use -clock ?
+-localtime      set the real time clock to local time [default=utc]
+-startdate      select initial date of the clock
+-icount [N|auto]
+                enable virtual instruction counter with 2^N clock ticks per instruction
+-echr chr       set terminal escape character instead of ctrl-a
+-virtioconsole c
+                set virtio console
+-show-cursor    show cursor
+-tb-size n      set TB size
+-incoming p     prepare for incoming migration, listen on port p
+-chroot dir     Chroot to dir just before starting the VM.
+-runas user     Change to user id user just before starting the VM.
+
+During emulation, the following keys are useful:
+ctrl-alt-f      toggle full screen
+ctrl-alt-n      switch to virtual console 'n'
+ctrl-alt        toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
diff --git a/tests/qemuhelpdata/qemu-0.9.1 b/tests/qemuhelpdata/qemu-0.9.1
new file mode 100644
index 0000000..0eaeaec
--- /dev/null
+++ b/tests/qemuhelpdata/qemu-0.9.1
@@ -0,0 +1,102 @@
+QEMU PC emulator version 0.9.1, Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-M machine      select emulated machine (-M ? for list)
+-cpu cpu        select CPU (-cpu ? for list)
+-fda/-fdb file  use 'file' as floppy disk 0/1 image
+-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
+-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][index=i]
+       [,cyls=c,heads=h,secs=s[,trans=t]][snapshot=on|off]       [,cache=on|off]
+                use 'file' as a drive image
+-mtdblock file  use 'file' as on-board Flash memory image
+-sd file        use 'file' as SecureDigital card image
+-pflash file    use 'file' as a parallel flash image
+-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
+-snapshot       write to temporary files instead of disk image files
+-no-frame       open SDL window without a frame and window decorations
+-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-no-quit        disable SDL window close capability
+-no-fd-bootchk  disable boot signature checking for floppy disks
+-m megs         set virtual RAM size to megs MB [default=128]
+-smp n          set the number of CPUs to 'n' [default=1]
+-nographic      disable graphical output and redirect serial I/Os to console
+-portrait       rotate graphical output 90 deg left (only PXA LCD)
+-k language     use keyboard layout (for example "fr" for French)
+-audio-help     print list of audio drivers and their options
+-soundhw c1,... enable audio support
+                and only specified sound cards (comma separated list)
+                use -soundhw ? to get the list of supported cards
+                use -soundhw all to enable all of them
+-localtime      set the real time clock to local time [default=utc]
+-full-screen    start in full screen
+-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
+-usb            enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-name string    set the name of the guest
+
+Network options:
+-net nic[,vlan=n][,macaddr=addr][,model=type]
+                create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,hostname=host]
+                connect the user mode network stack to VLAN 'n' and send
+                hostname 'host' to DHCP clients
+-net tap[,vlan=n][,fd=h][,ifname=name][,script=file][,downscript=dfile]
+                connect the host TAP network interface to VLAN 'n' and use the
+                network scripts 'file' (default=/etc/qemu-ifup)
+                and 'dfile' (default=/etc/qemu-ifdown);
+                use '[down]script=no' to disable script execution;
+                use 'fd=h' to connect to an already opened TAP interface
+-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]
+                connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,fd=h][,mcast=maddr:port]
+                connect the vlan 'n' to multicast maddr and port
+-net none       use it alone to have zero network devices; if no -net option
+                is provided, the default is '-net nic -net user'
+
+-tftp dir       allow tftp access to files in dir [-net user]
+-bootp file     advertise file in BOOTP replies
+-smb dir        allow SMB access to files in 'dir' [-net user]
+-redir [tcp|udp]:host-port:[guest-host]:guest-port
+                redirect TCP or UDP connections from host to guest [-net user]
+
+Linux boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file    use 'file' as initial ram disk
+
+Debug/Expert options:
+-monitor dev    redirect the monitor to char device 'dev'
+-serial dev     redirect the serial port to char device 'dev'
+-parallel dev   redirect the parallel port to char device 'dev'
+-pidfile file   Write PID to 'file'
+-S              freeze CPU at startup (use 'c' to start execution)
+-s              wait gdb connection to port
+-p port         set gdb connection port [default=1234]
+-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]  force hard disk 0 physical geometry and the optional BIOS
+                translation (t=none or lba) (usually qemu can guess them)
+-L path         set the directory for the BIOS, VGA BIOS and keymaps
+-kernel-kqemu   enable KQEMU full virtualization (default is user mode only)
+-no-kqemu       disable KQEMU kernel module usage
+-std-vga        simulate a standard VGA card with VESA Bochs Extensions
+                (default is CL-GD5446 PCI VGA)
+-no-acpi        disable ACPI
+-no-reboot      exit instead of rebooting
+-loadvm file    start right away with a saved state (loadvm in monitor)
+-vnc display    start a VNC server on display
+-daemonize      daemonize QEMU after initializing
+-option-rom rom load a file, rom, into the option ROM space
+-clock          force the use of the given methods for timer alarm.
+                To see what timers are available use -clock help
+
+During emulation, the following keys are useful:
+ctrl-alt-f      toggle full screen
+ctrl-alt-n      switch to virtual console 'n'
+ctrl-alt        toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
diff --git a/tests/qemuhelpdata/qemu-kvm-0.10.5 b/tests/qemuhelpdata/qemu-kvm-0.10.5
new file mode 100644
index 0000000..29d6f83
--- /dev/null
+++ b/tests/qemuhelpdata/qemu-kvm-0.10.5
@@ -0,0 +1,155 @@
+QEMU PC emulator version 0.10.5 (qemu-kvm-0.10.5), Copyright (c) 2003-2008 Fabrice Bellard
+usage: qemu [options] [disk_image]
+
+'disk_image' is a raw hard image image for IDE hard disk 0
+
+Standard options:
+-h or -help     display this help and exit
+-M machine      select emulated machine (-M ? for list)
+-cpu cpu        select CPU (-cpu ? for list)
+-smp n          set the number of CPUs to 'n' [default=1]
+-fda/-fdb file  use 'file' as floppy disk 0/1 image
+-hda/-hdb file  use 'file' as IDE hard disk 0/1 image
+-hdc/-hdd file  use 'file' as IDE hard disk 2/3 image
+-cdrom file     use 'file' as IDE cdrom image (cdrom is ide1 master)
+-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
+       [,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
+       [,cache=writethrough|writeback|none][,format=f][,serial=s]
+       [,boot=on|off]
+                use 'file' as a drive image
+-mtdblock file  use 'file' as on-board Flash memory image
+-sd file        use 'file' as SecureDigital card image
+-pflash file    use 'file' as a parallel flash image
+-boot [a|c|d|n] boot on floppy (a), hard disk (c), CD-ROM (d), or network (n)
+-snapshot       write to temporary files instead of disk image files
+-m megs         set virtual RAM size to megs MB [default=128]
+-k language     use keyboard layout (for example "fr" for French)
+-audio-help     print list of audio drivers and their options
+-soundhw c1,... enable audio support
+                and only specified sound cards (comma separated list)
+                use -soundhw ? to get the list of supported cards
+                use -soundhw all to enable all of them
+-usb            enable the USB driver (will be the default soon)
+-usbdevice name add the host or guest USB device 'name'
+-name string    set the name of the guest
+-uuid %08x-%04x-%04x-%04x-%012x
+                specify machine UUID
+
+Display options:
+-nographic      disable graphical output and redirect serial I/Os to console
+-no-frame       open SDL window without a frame and window decorations
+-alt-grab       use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
+-no-quit        disable SDL window close capability
+-sdl            enable SDL
+-portrait       rotate graphical output 90 deg left (only PXA LCD)
+-vga [std|cirrus|vmware|none]
+                select video card type
+-full-screen    start in full screen
+-vnc display    start a VNC server on display
+-name string    set the name of the guest
+-uuid %08x-%04x-%04x-%04x-%012x specify machine UUID
+
+Network options:
+-net nic[,vlan=n][,macaddr=addr][,model=type][,name=str]
+                create a new Network Interface Card and connect it to VLAN 'n'
+-net user[,vlan=n][,name=str][,hostname=host]
+                connect the user mode network stack to VLAN 'n' and send
+                hostname 'host' to DHCP clients
+-net tap[,vlan=n][,name=str][,fd=h][,ifname=name][,script=file][,downscript=dfile]
+                connect the host TAP network interface to VLAN 'n' and use the
+                network scripts 'file' (default=/etc/qemu-ifup)
+                and 'dfile' (default=/etc/qemu-ifdown);
+                use '[down]script=no' to disable script execution;
+                use 'fd=h' to connect to an already opened TAP interface
+-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
+                connect the vlan 'n' to another VLAN using a socket connection
+-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port]
+                connect the vlan 'n' to multicast maddr and port
+-net none       use it alone to have zero network devices; if no -net option
+                is provided, the default is '-net nic -net user'
+-tftp dir       allow tftp access to files in dir [-net user]
+-bootp file     advertise file in BOOTP replies
+-smb dir        allow SMB access to files in 'dir' [-net user]
+-redir [tcp|udp]:host-port:[guest-host]:guest-port
+                redirect TCP or UDP connections from host to guest [-net user]
+
+-bt hci,null    dumb bluetooth HCI - doesn't respond to commands
+-bt hci,host[:id]
+                use host's HCI with the given name
+-bt hci[,vlan=n]
+                emulate a standard HCI in virtual scatternet 'n'
+-bt vhci[,vlan=n]
+                add host computer to virtual scatternet 'n' using VHCI
+-bt device:dev[,vlan=n]
+                emulate a bluetooth device 'dev' in scatternet 'n'
+
+
+i386 target only:
+-win2k-hack     use it when installing Windows 2000 to avoid a disk full bug
+-rtc-td-hack    use it to fix time drift in Windows ACPI HAL
+-no-fd-bootchk  disable boot signature checking for floppy disks
+-no-acpi        disable ACPI
+-no-hpet        disable HPET
+-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
+                ACPI table description
+Linux boot specific:
+-kernel bzImage use 'bzImage' as kernel image
+-append cmdline use 'cmdline' as kernel command line
+-initrd file    use 'file' as initial ram disk
+
+Debug/Expert options:
+-serial dev     redirect the serial port to char device 'dev'
+-parallel dev   redirect the parallel port to char device 'dev'
+-monitor dev    redirect the monitor to char device 'dev'
+-pidfile file   write PID to 'file'
+-S              freeze CPU at startup (use 'c' to start execution)
+-s              wait gdb connection to port
+-p port         set gdb connection port [default=1234]
+-d item1,...    output log to /tmp/qemu.log (use -d ? for a list of log items)
+-hdachs c,h,s[,t]
+                force hard disk 0 physical geometry and the optional BIOS
+                translation (t=none or lba) (usually qemu can guess them)
+-L path         set the directory for the BIOS, VGA BIOS and keymaps
+-bios file      set the filename for the BIOS
+-no-kvm         disable KVM hardware virtualization
+-no-kvm-irqchip disable KVM kernel mode PIC/IOAPIC/LAPIC
+-no-kvm-pit	    disable KVM kernel mode PIT
+-no-kvm-pit-reinjection disable KVM kernel mode PIT interrupt reinjection
+-enable-nesting enable support for running a VM inside the VM (AMD only)
+-pcidevice host=bus:dev.func[,dma=none][,name=string]
+                expose a PCI device to the guest OS.
+                dma=none: don't perform any dma translations (default is to use an iommu)
+                'string' is used in log output.
+-no-reboot      exit instead of rebooting
+-no-shutdown    stop before shutdown
+-loadvm [tag|id]
+                start right away with a saved state (loadvm in monitor)
+-daemonize      daemonize QEMU after initializing
+-tdf            inject timer interrupts that got lost
+-kvm-shadow-memory megs set the amount of shadow pages to be allocated
+-mem-path       set the path to hugetlbfs/tmpfs mounted directory, also
+                enables allocation of guest memory with huge pages
+-mem-prealloc   toggles preallocation of -mem-path backed physical memory
+                at startup.  Default is enabled.
+-option-rom rom load a file, rom, into the option ROM space
+-clock          force the use of the given methods for timer alarm.
+                To see what timers are available use -clock ?
+-localtime      set the real time clock to local time [default=utc]
+-startdate      select initial date of the clock
+-icount [N|auto]
+                enable virtual instruction counter with 2^N clock ticks per instruction
+-echr chr       set terminal escape character instead of ctrl-a
+-virtioconsole c
+                set virtio console
+-show-cursor    show cursor
+-tb-size n      set TB size
+-incoming p     prepare for incoming migration, listen on port p
+-chroot dir     Chroot to dir just before starting the VM.
+-runas user     Change to user id user just before starting the VM.
+
+During emulation, the following keys are useful:
+ctrl-alt-f      toggle full screen
+ctrl-alt-n      switch to virtual console 'n'
+ctrl-alt        toggle mouse and keyboard grab
+
+When using -nographic, press 'ctrl-a h' to get some help.
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
new file mode 100644
index 0000000..836010f
--- /dev/null
+++ b/tests/qemuhelptest.c
@@ -0,0 +1,107 @@
+#include <config.h>
+
+#ifdef WITH_QEMU
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "testutils.h"
+#include "qemu_conf.h"
+
+#define MAX_HELP_OUTPUT_SIZE 1024*64
+
+struct testInfo {
+    const char *name;
+    unsigned flags;
+    unsigned version;
+    unsigned is_kvm;
+    unsigned kvm_version;
+};
+
+static char *progname;
+static char *abs_srcdir;
+
+static int testHelpStrParsing(const void *data)
+{
+    const struct testInfo *info = data;
+    char path[PATH_MAX];
+    char helpStr[MAX_HELP_OUTPUT_SIZE];
+    char *help = &(helpStr[0]);
+    unsigned flags, version, is_kvm, kvm_version;
+
+    snprintf(path, PATH_MAX, "%s/qemuhelpdata/%s", abs_srcdir, info->name);
+
+    if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
+        return -1;
+
+    if (qemudParseHelpStr(help, &flags, &version, &is_kvm, &kvm_version) == -1)
+        return -1;
+
+    if (flags != info->flags) {
+        fprintf(stderr, "Computed flags do not match: got 0x%x, expected 0x%x\n",
+                flags, info->flags);
+        return -1;
+    }
+
+    if (version != info->version) {
+        fprintf(stderr, "Parsed versions do not match: got %u, expected %u\n",
+                version, info->version);
+        return -1;
+    }
+
+    if (is_kvm != info->is_kvm) {
+        fprintf(stderr, "Parsed is_kvm flag does not match: got %u, expected %u\n",
+                is_kvm, info->is_kvm);
+        return -1;
+    }
+
+    if (kvm_version != kvm_version) {
+        fprintf(stderr, "Parsed KVM versions do not match: got %u, expected %u\n",
+                version, kvm_version);
+        return -1;
+    }
+
+    return 0;
+}
+
+static int
+mymain(int argc, char **argv)
+{
+    int ret = 0;
+    char cwd[PATH_MAX];
+
+    progname = argv[0];
+
+    if (argc > 1) {
+        fprintf(stderr, "Usage: %s\n", progname);
+        return (EXIT_FAILURE);
+    }
+
+    abs_srcdir = getenv("abs_srcdir");
+    if (!abs_srcdir)
+        abs_srcdir = getcwd(cwd, sizeof(cwd));
+
+#define DO_TEST(name, flags, version, is_kvm, kvm_version)                          \
+    do {                                                                            \
+        const struct testInfo info = { name, flags, version, is_kvm, kvm_version }; \
+        if (virtTestRun("QEMU Help String Parsing " name,                           \
+                        1, testHelpStrParsing, &info) < 0)                          \
+            ret = -1;                                                               \
+    } while (0)
+
+    DO_TEST("qemu-0.9.1",      0x002f, 9001,  0,  0);
+    DO_TEST("kvm-74",          0x233e, 9001,  1, 74);
+    DO_TEST("qemu-0.10.5",     0x1c6f, 10005, 0,  0);
+    DO_TEST("qemu-kvm-0.10.5", 0x3d7e, 10005, 1,  0);
+    DO_TEST("kvm-86",          0x3d7e, 10050, 1,  0);
+
+    return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
+}
+
+VIRT_TEST_MAIN(mymain)
+
+#else
+
+int main (void) { return (77); /* means 'test skipped' for automake */ }
+
+#endif /* WITH_QEMU */
-- 
1.6.0.6




More information about the libvir-list mailing list