|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/3] Add nested testcase of installing L2 guest VM.
From: "longtao.pang" <longtaox.pang@xxxxxxxxx>
Adding <ts-nested-L2-debian-install> which is used for installing L2
guest VM inside L1 guest VM.
---
sg-run-job | 1 +
ts-nested-L2-debian-install | 148 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 149 insertions(+)
create mode 100755 ts-nested-L2-debian-install
diff --git a/sg-run-job b/sg-run-job
index 0898113..b5f41f6 100755
--- a/sg-run-job
+++ b/sg-run-job
@@ -291,6 +291,7 @@ proc run-job/test-pair {} {
proc need-hosts/test-nested {} {return host}
proc run-job/test-nested {} {
run-ts . = ts-nested-L1-debian-install
+ run-ts . = ts-nested-L2-debian-install
run-ts . = ts-guest-destroy + host nested
}
diff --git a/ts-nested-L2-debian-install b/ts-nested-L2-debian-install
new file mode 100755
index 0000000..dd68461
--- /dev/null
+++ b/ts-nested-L2-debian-install
@@ -0,0 +1,148 @@
+#!/usr/bin/perl -w
+# This is part of "osstest", an automated testing framework for Xen.
+# Copyright (C) 2009-2013 Citrix Inc.
+# Copyright (C) 2014 Intel Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+use strict qw(vars);
+use DBI;
+use Osstest;
+use Osstest::TestSupport;
+
+tsreadconfig();
+
+our ($whhost,$gn,$arch) = @ARGV;
+
+my $L1_IP = &get_VM_IP($r{'nested_ether'});
+$whhost ||= "host=$L1_IP";
+$gn ||= 'nested';
+$arch ||= 'amd64';
+our $ho= selecthost($whhost);
+
+our $ram_mb= 512;
+our $swap_mb= 1000;
+our $disk_mb= 5000;
+our $guesthost= "$gn.guest.osstest";
+our $cfg_xend= "/etc/xen/$guesthost.cfg";
+my $L2_MAC = select_ether($ho,"L2_ether");
+
+sub prep () {
+ target_install_packages_norec($ho, qw(xen-tools));
+}
+
+sub ginstall () {
+ my $archarg= defined($arch) ? "--arch=$arch" : '';
+ my $suite= "$c{DebianSuite}";
+ my $gsuite= defined($suite) ? "--dist=$suite" : '';
+
+ my $kernver ||= target_cmd_output_root($ho, 'uname -r');
+ my $kernpath = "/boot/vmlinuz-$kernver";
+ my $initrd ||= "/boot/initrd.img-$kernver";
+ if (!$kernpath) {
+ die "$kernpath $?";
+ }
+ if (!$initrd) {
+ $initrd = $kernpath;
+ $initrd =~ s,/vmlinuz-,/initrd.img-, or die "$initrd ?";
+ }
+ my $initrd_opt = $initrd eq 'none' ? '' : "--initrd=$initrd";
+
+ if ($ho->{Suite} =~ m/lenny|squeeze|wheezy/) {
+ target_cmd_root($ho, <<END, 10);
+ set -e
+ # xen-create-image requires this to exists (see Debian bug #732456)
+ # even though it is otherwise quite happy on a pure xl system.
+ if [ ! -f /etc/xen/xend-config.sxp ] ; then
+ # xen-create-image checks for these and warns if they don't
+ # exist or are set to "dummy"
+ echo "(vif-script osstest)" >>/etc/xen/xend-config.sxp
+ echo "(network-script osstest)" >>/etc/xen/xend-config.sxp
+ fi
+END
+ }
+ 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
+}
+
+
+sub start () {
+ 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");
+}
+
+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");
+ }
+}
+
+sub stop_guest {
+ logm("shutdown L2 guest!");
+ target_cmd_root($ho,toolstack()->{Command}." shutdown -w ".$guesthost,100);
+}
+
+prep();
+ginstall();
+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 |