[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 13/13] rump kernel tests: Run xenstore-ls demo
We can use the newly-generalised ts-rumpuserxen-demo-setup to set up the config file etc. to run xenstore-ls from the xen.git build. We have a bespoke script to actually execute it: we extract the actual program output from the guest console log, and compare the results to those we expect (based on running xenstore-ls in dom0). Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> --- make-flight | 2 + sg-run-job | 4 ++ ts-rumpuserxen-demo-xenstorels | 111 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 117 insertions(+) create mode 100755 ts-rumpuserxen-demo-xenstorels diff --git a/make-flight b/make-flight index ccfa3e3..b02720f 100755 --- a/make-flight +++ b/make-flight @@ -125,6 +125,8 @@ do_rumpkernel_tests () { guests_rumpuserxenbuildjob=build-$rumparch-rumpuserxen \ rump_builtimage=rumpuserxen:/usr/local/lib/xen/rump-kernel \ rump_cmdline=3 \ + xenstorels_builtimage=:/usr/local/bin/xenstore \ + xenstorels_cmdline='ls -fp device' \ all_hostflags=$most_hostflags } diff --git a/sg-run-job b/sg-run-job index ab9f333..2cf810a 100755 --- a/sg-run-job +++ b/sg-run-job @@ -315,6 +315,10 @@ proc run-job/test-rumpuserxen {} { run-ts . = ts-rumpuserxen-demo-setup + host $g run-ts . = ts-guest-start + host $g run-ts . = ts-guest-destroy + host $g + set g xenstorels + run-ts . = ts-rumpuserxen-demo-setup + host + $g + run-ts . = ts-rumpuserxen-demo-xenstorels + host + $g + run-ts . = ts-guest-destroy-hard + host + $g } #---------- builds ---------- diff --git a/ts-rumpuserxen-demo-xenstorels b/ts-rumpuserxen-demo-xenstorels new file mode 100755 index 0000000..07388a4 --- /dev/null +++ b/ts-rumpuserxen-demo-xenstorels @@ -0,0 +1,111 @@ +#!/usr/bin/perl -w +# This is part of "osstest", an automated testing framework for Xen. +# Copyright (C) 2009-2013 Citrix 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; +use Data::Dumper; + +tsreadconfig(); + +our ($ho,$gho) = ts_get_host_guest(@ARGV); + +our $domid; + +our $gn = $gho->{Guest}; + +sub start () { + my $cmd= toolstack()->{Command}." create ". + $r{ $gho->{Guest}.'_'. toolstack()->{CfgPathVar} }; + target_cmd_root($ho, $cmd, 30); + + $domid = target_cmd_output_root($ho,"xl domid $gho->{Guest}"); +} + +sub await_end () { + poll_loop(30,3, "await ending of $gho->{Guest}", sub { + my $st= guest_get_state($ho,$gho); + return undef if $st =~ m/s/; + return "guest state is $st"; + }); +} + +our (%file); +our (%output); + +sub stash ($$) { + my ($data, $what) = @_; + my $leaf = "xenstore-ls-device--$gn--$what"; + my $stashh = open_unique_stashfile(\$leaf); + print $stashh $data or die $!; + close $stashh or die $!; + $file{$what} = "$stash/$leaf"; +} + +sub some_xenstorels ($$$) { + my ($what, $massage, $cmd) = @_; + $output{$what} = target_cmd_output_root($ho,$cmd); + stash($output{$what}, "$what-raw"); + $massage->(); + $output{$what} = join "\n", sort split /\n/, $output{$what}; + $output{$what} .= "\n"; + stash($output{$what}, "$what-massaged"); +} + +sub our_xenstorels () { + some_xenstorels('ours', sub { + $output{ours} =~ s{^/local/domain/$domid/}{}gm; + }, <<END); + xenstore-ls -fp /local/domain/$domid/device +END +} + +sub their_xenstorels () { + some_xenstorels('theirs', sub { + $output{theirs} =~ s{\r\n}{\n}g; + while ($output{theirs} =~ m{\n=== calling main\(\) ===\n\n}) { + $output{theirs} = $'; #'; + } + $output{theirs} =~ m{\n=== main\(\) returned (\d+) ===\n} or die; + $output{theirs} = $`; + die "$1 ?" if $1 ne '0'; + $output{theirs} =~ s{^STUB \`\`\w+'' called\n}{}mg; + }, <<END); + cat /var/log/xen/console/guest-$gn.log +END +} + +sub check_output () { + eval { + our_xenstorels(); + their_xenstorels(); + 1; + }; + if ($@) { + die Dumper(\%output)."$@"; + } + if ($output{ours} ne $output{theirs}) { + system qw(diff -u), map { $file{"$_-massaged"} } qw(ours theirs); + die "$? COMPARISON FAILED"; + } +} + +start(); +await_end(); +check_output(); +logm("all good."); -- 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 |