[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [OSSTEST PATCH 3/4] Add nested testcase of installing L2 guest VM
On Wed, Dec 10, 2014 at 04:07:39PM +0800, longtao.pang wrote: > From: "longtao.pang" <longtaox.pang@xxxxxxxxx> > > This patch is used for installing L2 guest VM inside L1 guest VM. > > --- > sg-run-job | 2 + > ts-debian-install | 166 > +++++++++++++++++++++++++++++++++++++++++------------ > 2 files changed, 132 insertions(+), 36 deletions(-) > > diff --git a/sg-run-job b/sg-run-job > index e513bd1..85f7b22 100755 > --- a/sg-run-job > +++ b/sg-run-job > @@ -292,6 +292,8 @@ proc need-hosts/test-nested {} {return host} > proc run-job/test-nested {} { > run-ts . = ts-debian-hvm-install + host + nested + nested_L1 > run-ts . = ts-xen-install + host + nested + nested_build > + run-ts . = ts-debian-install + host + nested + amd64 + nested_L2 > + run-ts . = ts-guest-destroy + host nested It would also be possible to run ts-debian-hvm-install as L2. That would suite this test case better -- it's testing nested HVM. There's no need to remove the PV test case though. > } > > proc test-guest-migr {g} { > diff --git a/ts-debian-install b/ts-debian-install > index 58ea743..2ca54e8 100755 > --- a/ts-debian-install > +++ b/ts-debian-install > @@ -22,41 +22,61 @@ use Osstest::TestSupport; > > tsreadconfig(); > > -our ($whhost,$gn) = @ARGV; > -$whhost ||= 'host'; > -$gn ||= 'debian'; > +our ($whhost,$gn,$arch,$nested_L2) = @ARGV; > +$nested_L2 ||= ''; > > -our $ho= selecthost($whhost); > +if($nested_L2 eq 'nested_L2') { > + my $L1_IP = &get_VM_IP($r{'nested_ether'}); > + $whhost = "host=$L1_IP"; > + $gn ||= 'nested'; > + $arch ||= 'amd64'; > +} else { > + $whhost ||= 'host'; > + $gn ||= 'debian'; > +} > > +our $ho= selecthost($whhost); > our $ram_mb= 512; > our $swap_mb= 1000; > our $disk_mb= 10000; > - Stray blank line. > our $guesthost= "$gn.guest.osstest"; > our $gho; > +our $L2_MAC = select_ether($ho,"L2_ether"); > > sub prep () { > target_install_packages_norec($ho, qw(lvm2 xen-tools)); > - > - $gho= prepareguest($ho, $gn, $guesthost, 22, > - $swap_mb + $disk_mb + 2, > - 40); > - target_cmd_root($ho, "umount $gho->{Lvdev} ||:"); > + unless($nested_L2 eq 'nested_L2') { > + $gho= prepareguest($ho, $gn, $guesthost, 22, > + $swap_mb + $disk_mb + 2, > + 40); > + target_cmd_root($ho, "umount $gho->{Lvdev} ||:"); > + } > } > > sub ginstall () { > - my $arch= $r{"$gho->{Guest}_arch"}; > + my $gsuite; > + my $kernpath; > + my $initrd; > + my $kernver; > + if($nested_L2 eq 'nested_L2'){ > + my $suite= "$c{DebianSuite}"; > + $gsuite= defined($suite) ? "--dist=$suite" : ''; > + $kernver ||= target_cmd_output_root($ho, 'uname -r'); > + $kernpath = "/boot/vmlinuz-$kernver"; > + $initrd ||= "/boot/initrd.img-$kernver"; > + } else { > + my $arch= $r{"$gho->{Guest}_arch"}; > + $gsuite= guest_var($gho,'suite',$c{GuestDebianSuite}); > + $kernpath = guest_var($gho,'kernel_path',$r{xen_kernel_path}); > + $initrd = guest_var($gho,'initrd_path',$r{xen_initrd_path}); > + if (!$kernpath) { > + $kernver= guest_var($gho,'kernel_ver',$r{xen_kernel_ver}); > + $kernver ||= target_cmd_output($ho, 'uname -r'); > + $kernpath = "/boot/vmlinuz-$kernver"; > + $initrd ||= "/boot/initrd.img-$kernver"; > + } > + } To be honest, this looks convoluted. Special casing needs better explanation. > my $archarg= defined($arch) ? "--arch $arch" : ''; > - my $gsuite= guest_var($gho,'suite',$c{GuestDebianSuite}); > - > - my $kernpath = guest_var($gho,'kernel_path',$r{xen_kernel_path}); > - my $initrd = guest_var($gho,'initrd_path',$r{xen_initrd_path}); > - if (!$kernpath) { > - my $kernver= guest_var($gho,'kernel_ver',$r{xen_kernel_ver}); > - $kernver ||= target_cmd_output($ho, 'uname -r'); > - $kernpath = "/boot/vmlinuz-$kernver"; > - $initrd ||= "/boot/initrd.img-$kernver"; > - } > if (!$initrd) { > $initrd = $kernpath; > $initrd =~ s,/vmlinuz-,/initrd.img-, or die "$initrd ?"; > @@ -76,23 +96,97 @@ sub ginstall () { > fi > END > } > - target_cmd_root($ho, <<END, 2000); > - xen-create-image \\ > - --dhcp --mac $gho->{Ether} \\ > - --memory ${ram_mb}Mb --swap ${swap_mb}Mb \\ > - --dist $gsuite \\ > - --mirror http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} \\ > - --hostname $gho->{Name} \\ > - --lvm $gho->{Vg} --force \\ > - --kernel $kernpath \\ > - --genpass 0 --password xenroot \\ > - $initrd_opt \\ > - $archarg > + if($nested_L2 eq 'nested_L2') { > + target_cmd_root($ho, <<END, 2000); > + xen-create-image \\ > + --dhcp --mac=$L2_MAC \\ > + --size=${disk_mb}Mb --memory=${ram_mb}Mb --swap=${swap_mb}Mb > \\ > + --mirror=http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} > \\ > + --hostname $guesthost \\ > + --dir=/testnested \\ > + --kernel=$kernpath \\ > + --genpass 0 --password xenroot \\ > + $initrd_opt \\ > + $gsuite \\ > + $archarg > +END > + } else { > + target_cmd_root($ho, <<END, 2000); > + xen-create-image \\ > + --dhcp --mac $gho->{Ether} \\ > + --memory ${ram_mb}Mb --swap ${swap_mb}Mb \\ > + --dist $gsuite \\ > + --mirror http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} > \\ > + --hostname $gho->{Name} \\ > + --lvm $gho->{Vg} --force \\ > + --kernel $kernpath \\ > + --genpass 0 --password xenroot \\ > + $initrd_opt \\ > + $archarg As far as I can tell, the only difference is a few variables. You can set up variables in if ($nested_L2) { var = foo; } else { var = bar; } target_cmd_root($ho, var ... ); Just like you did in previous hunk. Please add in some comments where necessary. > END > - my $cfg_xend= "/etc/xen/$gho->{Name}.cfg"; > - store_runvar("$gho->{Guest}_cfgpath", $cfg_xend); > - store_runvar("$gho->{Guest}_swap_lv", "$gho->{Name}-swap"); > + my $cfg_xend= "/etc/xen/$gho->{Name}.cfg"; > + store_runvar("$gho->{Guest}_cfgpath", $cfg_xend); > + store_runvar("$gho->{Guest}_swap_lv", "$gho->{Name}-swap"); > + } > +} > + > +sub start () { > + my $cfg_xend= "/etc/xen/$guesthost.cfg"; > + my $cmd= toolstack()->{Command}." create ".$cfg_xend; > + target_cmd_root($ho, $cmd, 30); > + my $domains = target_cmd_output_root($ho, toolstack()->{Command}." > list"); > + logm("guest state is\n$domains"); > +} I think we already have a guest start script? This hunk is going to break easily if we're more flexible about the toolstack (we already have a partially working libvirt test case). > + > +sub get_VM_IP { > + my $IP; > + my $leases; > + my $dhcpf = $c{HostProp_DhcpWatchMethod}; > + my @meth = split /\s+/, $dhcpf; > + if ($dhcpf =~ m,/,) { > + $leases= new IO::File $meth[2], 'r'; > + if (!defined $leases) { return "open $meth[2]: $!"; } > + } else { > + $leases= new IO::Socket::INET(PeerAddr => $meth[2]); > + } > + while (<$leases>) { > + my @lines = <$leases>; > + my @newlines = reverse(@lines); > + for(my $i=0;$i<@newlines;$i++) { > + next if($newlines[$i] !~ /$_[0]/); > + for($i;$i<@newlines;$i++) { > + next if ($newlines[$i] !~ > /^lease\s+(\d+\.\d+\.\d+\.\d+)\s*/); > + $IP = $1; > + return $IP; > + } > + last; > + } > + } > +} > + > +sub check_VM_up { > + my ($g_ip) = @_; > + my $ping_out = `ping -c 5 $g_ip 2>&1`; > + if($ping_out =~ m/5 received/) { > + logm("$guesthost is up and ping is OK!"); > + } else { > + logm("Failed to boot up $guesthost"); > + } > +} > + target_ping_check_{up,down} may be suitable? Wei. > +sub stop_guest { > + logm("shutdown L2 guest!"); > + target_cmd_root($ho,toolstack()->{Command}." shutdown -w > ".$guesthost,100); > } > > prep(); > ginstall(); > +if($nested_L2 eq 'nested_L2') { > + start(); > + logm("waiting for 15's to boot up L2 guest!"); > + sleep(15); > + my $L2_IP = get_VM_IP("$L2_MAC"); > + logm("L2 guest's IP is $L2_IP and try to ping it!"); > + check_VM_up($L2_IP); > + stop_guest(); > +} > -- > 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |