[libvirt] [TCK] [PATCH] Switch to installation of FC14 image and other fixes

Daniel P. Berrange berrange at redhat.com
Mon May 9 09:26:58 UTC 2011


On Fri, May 06, 2011 at 10:39:52AM -0400, Stefan Berger wrote:
> This patch fixes the creation of VM images. Previously, FC12 images were
> created but the files necessary for FC12 image creation are no longer
> available in the public repositories. This patch now switches it to
> create FC14 images. To get such a new image one may want to remove all
> content in /var/cache/libvirt-tck. I takes a long time for the image to
> install, though.

We can probably do a little refactoring to use the libguestfs
appliance image soon, which will make things simpler...

> The new FC14 image takes a lot longer to boot. Rather than waiting a
> fixed timeout during which the VM presumably has booted it is now
> waiting for the VM to become pingable and then starts the actual tests.

...and libguestfs can boot in a couple of seconds.

> Also, the name of the DHCP lease file used by dnsmasq has changed.
> Rather than hardcoding its name, try to pick it up from the running
> dnsmasq process's parameters. Fall back to the old name if the name of
> the leasefile could be determined via 'ps aux'.
> 
> Signed-off-by: Stefan Berger <stefanb at linux.vnet.ibm.com>
> 
> ---
>  conf/default.cfg                          |   12 ++--
>  conf/ks.cfg                               |    3 -
>  lib/Sys/Virt/TCK/NetworkHelpers.pm        |   84 +++++++++++++++++++++++++++---
>  scripts/nwfilter/090-install-image.t      |   11 ++-
>  scripts/nwfilter/100-ping-still-working.t |    5 -
>  scripts/nwfilter/210-no-mac-spoofing.t    |    5 -
>  scripts/nwfilter/220-no-ip-spoofing.t     |    5 -
>  scripts/nwfilter/230-no-mac-broadcast.t   |    5 -
>  scripts/nwfilter/240-no-arp-spoofing.t    |    5 -
>  scripts/nwfilter/300-vsitype.t            |    3 -
>  10 files changed, 104 insertions(+), 34 deletions(-)
> 
> Index: libvirt-tck/lib/Sys/Virt/TCK/NetworkHelpers.pm
> ===================================================================
> --- libvirt-tck.orig/lib/Sys/Virt/TCK/NetworkHelpers.pm
> +++ libvirt-tck/lib/Sys/Virt/TCK/NetworkHelpers.pm
> @@ -11,12 +11,76 @@ sub get_first_macaddress {
>  
>  sub get_ip_from_leases{
>      my $mac = shift;
> -    my $tmp = `grep $mac /var/lib/dnsmasq/dnsmasq.leases`;
> +    my $leasefile = `ps x | sed -n "s/.*dnsmasq.*default.*dhcp-leasefile=\\([/.[:alnum:]]*\\).*/\\1/p"`;
> +    if ( $leasefile eq "" ) {
> +        $leasefile = "/var/lib/dnsmasq/dnsmasq.leases";
> +    }
> +    diag "leasefile is ${leasefile}";
> +    my $tmp = `grep $mac $leasefile`;
>      my @fields = split(/ /, $tmp);
>      my $ip = $fields[2];
>      return $ip;
>  }
>  
> +sub wait_for_vm_if_up {
> +    my $mac = shift;
> +    my $timeout = shift;
> +    my $ipaddr = "";
> +    my $tmp = "";
> +
> +    while ( $timeout > 0 ) {
> +        $ipaddr = get_ip_from_leases($mac);
> +        if ( $ipaddr != "" ) {
> +            last;
> +        }
> +        sleep(1);
> +        $timeout -= 1;
> +        diag "... waiting for the VM's DHCP lease to show up..."
> +    }
> +
> +    if ( $ipaddr != "" ) {
> +        while ( $timeout > 0 ) {
> +            $tmp = `ping $ipaddr -c 1 -W 2`;
> +            if ( $tmp =~ "100% packet loss" ) {
> +                $timeout -= 2;
> +            } else {
> +                sleep(5);
> +                return $ipaddr;
> +            }
> +            diag "... waiting for the VM to become pingable..."
> +        }
> +    }
> +    return 0;
> +}
> +
> +sub wait_for_vm_if_down {
> +    my $mac = shift;
> +    my $timeout = shift;
> +    my $ipaddr = "";
> +    my $tmp = "";
> +
> +    $ipaddr = get_ip_from_leases($mac);
> +    if ( $ipaddr == "" ) {
> +        diag "Could not get the IP address of the VM.";
> +        return 0;
> +    }
> +
> +    while ( $timeout > 0 ) {
> +        $tmp = `ping $ipaddr -c 1 -W 2`;
> +        if ( $tmp =~ "100% packet loss" ) {
> +            diag "VM is off the network now.";
> +            sleep(5);
> +            return 1;
> +        }
> +        $timeout -= 2;
> +        sleep(2);
> +        diag "... waiting for the VM to be off the network ($timeout) ... "
> +    }
> +    return 0;
> +}
> +
> +
> +
>  sub build_cdrom_ks_image {
>      my $tck = shift;
>  
> @@ -139,11 +203,19 @@ sub  prepare_test_disk_and_vm{
>  	my $dom = $conn->define_domain($guest->as_xml);
>  	diag "Starting installation domain";
>  	$dom->create;
> -	diag "wait for installation to finish .. ";
> -	while($dom->is_active()) {
> -	    sleep(10);
> -	    diag ".. to view progress connect to virtual machine ${domain_name} .. ";
> -	}
> +	# Wait for the interface to come up; this may take a good while
> +	my $guestip = wait_for_vm_if_up(get_first_macaddress($dom), 600);
> +	if ( $guestip eq "" ) {
> +	    diag "Installation domain did not show an IP address. Destroying VM.";
> +	    $dom->destroy();
> +	} else {
> +            diag "IP address of installating VM is $guestip";
> +	    # wait until the installation is done -- may take a long time
> +	    if (!wait_for_vm_if_down(get_first_macaddress($dom), 7200)) {
> +	        diag "Installation did not complete in time. Destroying VM.";
> +	        $dom->destroy();
> +	    }
> +        }
>  	# cleanup install domain
>  	$dom->undefine;
>  	$dom = undef;
> Index: libvirt-tck/conf/default.cfg
> ===================================================================
> --- libvirt-tck.orig/conf/default.cfg
> +++ libvirt-tck/conf/default.cfg
> @@ -52,25 +52,25 @@ ks = /etc/libvirt-tck/ks.cfg
>  # empty sparse root FS will be created
>  #
>  kernels = (
> -   # Fedora 11 i686 PAE has pv_ops, so one kernel can do both Xen and KVM guests here
> +   # Fedora 14 i686 PAE has pv_ops, so one kernel can do both Xen and KVM guests here
>     {
>       arch = i686
>       ostype = (
>         hvm
>         xen
>       )
> -     kernel = http://download.fedora.redhat.com/pub/fedora/linux/releases/11/Fedora/i386/os/images/pxeboot/vmlinuz-PAE
> -     initrd = http://download.fedora.redhat.com/pub/fedora/linux/releases/11/Fedora/i386/os/images/pxeboot/initrd-PAE.img
> +     kernel = http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/i386/os/images/pxeboot/vmlinuz-PAE
> +     initrd = http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/i386/os/images/pxeboot/initrd-PAE.img
>     }
> -   # Fedora 11 x86_64 has pv_ops, so one kernel can do both Xen and KVM guests here
> +   # Fedora 14 x86_64 has pv_ops, so one kernel can do both Xen and KVM guests here
>     {
>       arch = x86_64
>       ostype = (
>         hvm
>         xen
>       )
> -     kernel = http://download.fedora.redhat.com/pub/fedora/linux/releases/11/Fedora/x86_64/os/images/pxeboot/vmlinuz
> -     initrd = http://download.fedora.redhat.com/pub/fedora/linux/releases/11/Fedora/x86_64/os/images/pxeboot/initrd.img
> +     kernel = http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/x86_64/os/images/pxeboot/vmlinuz
> +     initrd = http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/x86_64/os/images/pxeboot/initrd.img
>     }
>     # User mode linux i686 needs custom kernel + root filesystem
>     {
> Index: libvirt-tck/conf/ks.cfg
> ===================================================================
> --- libvirt-tck.orig/conf/ks.cfg
> +++ libvirt-tck/conf/ks.cfg
> @@ -1,6 +1,6 @@
>  install
>  text
> -url --url=http://ftp-stud.hs-esslingen.de/Mirrors/fedora.redhat.com/linux/releases/12/Fedora/i386/os/
> +url --url=http://download.fedora.redhat.com/pub/fedora/linux/releases/14/Fedora/i386/os/
>  lang en_US.UTF-8
>  keyboard de-latin1-nodeadkeys
>  network --device eth0 --bootproto dhcp
> @@ -27,3 +27,4 @@ poweroff
>  @base
>  @core
>  @hardware-support
> +%end
> Index: libvirt-tck/scripts/nwfilter/100-ping-still-working.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/100-ping-still-working.t
> +++ libvirt-tck/scripts/nwfilter/100-ping-still-working.t
> @@ -46,7 +46,7 @@ END {
>  # create first domain and start it
>  diag "Trying domain lookup by name";
>  my $dom1;
> -my $dom_name ="tckf12nwtest";
> +my $dom_name ="tck-fedora-nwtest";
>  
>  $dom1 = prepare_test_disk_and_vm($tck, $conn, $dom_name);
>  $dom1->create();
> @@ -63,8 +63,7 @@ ok($dom1->get_id() > 0, "running domain 
>  my $mac1 =  get_first_macaddress($dom1);
>  diag "mac is $mac1";
>  
> -sleep(30);
> -my $guestip1 = get_ip_from_leases($mac1);
> +my $guestip1 = wait_for_vm_if_up($mac1, 60);
>  diag "ip is $guestip1";
>  
>  # check ebtables entry
> Index: libvirt-tck/scripts/nwfilter/210-no-mac-spoofing.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/210-no-mac-spoofing.t
> +++ libvirt-tck/scripts/nwfilter/210-no-mac-spoofing.t
> @@ -44,7 +44,7 @@ END {
>  
>  # create first domain and start it
>  
> -my $dom_name ="tckf12nwtest";
> +my $dom_name ="tck-fedora-nwtest";
>  
>  my $dom1;
>  $dom1 = prepare_test_disk_and_vm($tck, $conn, $dom_name);
> @@ -58,8 +58,7 @@ diag $xml;
>  my $mac1 =  get_first_macaddress($dom1);
>  diag "mac is $mac1";
>  
> -sleep(30);
> -my $guestip1 = get_ip_from_leases($mac1);
> +my $guestip1 = wait_for_vm_if_up($mac1, 60);
>  diag "ip is $guestip1";
>  
>  # check ebtables entry
> Index: libvirt-tck/scripts/nwfilter/220-no-ip-spoofing.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/220-no-ip-spoofing.t
> +++ libvirt-tck/scripts/nwfilter/220-no-ip-spoofing.t
> @@ -44,7 +44,7 @@ END {
>  
>  # looking up domain
>  my $dom1;
> -my $dom_name ="tckf12nwtest";
> +my $dom_name ="tck-fedora-nwtest";
>  
>  $dom1 = prepare_test_disk_and_vm($tck, $conn, $dom_name);
>  $dom1->create();
> @@ -55,8 +55,7 @@ diag $xml;
>  my $mac1 =  get_first_macaddress($dom1);
>  diag "mac is $mac1";
>  
> -sleep(30);
> -my $guestip1 = get_ip_from_leases($mac1);
> +my $guestip1 = wait_for_vm_if_up($mac1, 60);
>  diag "ip is $guestip1";
>  
>  # check ebtables entry
> Index: libvirt-tck/scripts/nwfilter/230-no-mac-broadcast.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/230-no-mac-broadcast.t
> +++ libvirt-tck/scripts/nwfilter/230-no-mac-broadcast.t
> @@ -43,7 +43,7 @@ END {
>  
>  # create first domain and start it
>  my $dom1;
> -my $dom_name ="tckf12nwtest";
> +my $dom_name ="tck-fedora-nwtest";
>  
>  $dom1 = prepare_test_disk_and_vm($tck, $conn, $dom_name);
>  $dom1->create();
> @@ -54,8 +54,7 @@ diag $xml;
>  my $mac1 =  get_first_macaddress($dom1);
>  diag "mac is $mac1";
>  
> -sleep(30);
> -my $guestip1 = get_ip_from_leases($mac1);
> +my $guestip1 = wait_for_vm_if_up($mac1, 60);
>  diag "ip is $guestip1";
>  
>  # check ebtables entry
> Index: libvirt-tck/scripts/nwfilter/240-no-arp-spoofing.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/240-no-arp-spoofing.t
> +++ libvirt-tck/scripts/nwfilter/240-no-arp-spoofing.t
> @@ -45,7 +45,7 @@ END {
>  
>  # creating domain
>  my $dom1;
> -my $dom_name ="tckf12nwtest";
> +my $dom_name ="tck-fedora-nwtest";
>  
>  $dom1 = prepare_test_disk_and_vm($tck, $conn, $dom_name);
>  $dom1->create();
> @@ -56,8 +56,7 @@ diag $xml;
>  my $mac1 =  get_first_macaddress($dom1);
>  diag "mac is $mac1";
>  
> -sleep(30);
> -my $guestip1 = get_ip_from_leases($mac1);
> +my $guestip1 = wait_for_vm_if_up($mac1, 60);
>  diag "ip is $guestip1";
>  
>  # check ebtables entry
> Index: libvirt-tck/scripts/nwfilter/090-install-image.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/090-install-image.t
> +++ libvirt-tck/scripts/nwfilter/090-install-image.t
> @@ -19,7 +19,7 @@ network/000-install-image.t - install ne
>  
>  =head1 DESCRIPTION
>  
> -The test case creates and install a 2GB fedora virtual 
> +The test case creates and install a 2GB fedora virtual
>  disk via kickstart file from the network.
>  
>  =cut
> @@ -41,15 +41,16 @@ END { $tck->cleanup if $tck; }
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
>  # variables which may need to be adapted
> -my $dom_name ="tckf12nwtest";
> +my $dom_name ="tck-fedora-nwtest";
>  
>  my $testdom = prepare_test_disk_and_vm($tck, $conn, $dom_name);
>  $testdom->create();
>  ok($testdom->get_id() > 0, "running domain has an ID > 0");
> -sleep(20);
> +
> +my $mac1 =  get_first_macaddress($testdom);
> +diag "mac is $mac1";
> +my $guestip1 = wait_for_vm_if_up($mac1, 60);
>  
>  shutdown_vm_gracefully($testdom);
>  
>  exit 0;
> -
> -
> Index: libvirt-tck/scripts/nwfilter/300-vsitype.t
> ===================================================================
> --- libvirt-tck.orig/scripts/nwfilter/300-vsitype.t
> +++ libvirt-tck/scripts/nwfilter/300-vsitype.t
> @@ -43,6 +43,7 @@ END {
>  
>  SKIP: {
>       skip "lldptool not present", 3  unless -e "/usr/sbin/lldptool";
> +     skip "eth2 not available", 3 unless `ifconfig eth2` =~ "Link encap:";
>  
>  # creating domain
>       my $dom1;
> @@ -58,7 +59,7 @@ SKIP: {
>       my $mac1 =  get_first_macaddress($dom1);
>       diag "mac is $mac1";
>  
> -     sleep(30);
> +     wait_for_vm_if_up($mac1, 60);
>  
>  # check vsi information
>       diag "Verifying VSI information using lldptool";

ACK


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list