[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 14/24] host examination: Check that serial output is working
Check that both the output from the bootloader, and from the host (dom0, if applicable), appears in the serial logs. Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> --- sg-run-job | 5 +++ ts-examine-serial-post | 81 +++++++++++++++++++++++++++++++++++++++++ ts-examine-serial-pre | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100755 ts-examine-serial-post create mode 100755 ts-examine-serial-pre diff --git a/sg-run-job b/sg-run-job index 51dc2ec..ceb7980 100755 --- a/sg-run-job +++ b/sg-run-job @@ -511,11 +511,16 @@ proc examine-host-install-xen {} { } proc examine-host-examine {install} { + global ok catching-otherwise fail { examine-host-install-$install + run-ts . = ts-examine-serial-pre + host run-ts . reboot ts-host-reboot + host } run-ts !broken capture-logs ts-logs-capture + host + if {$ok} { + run-ts -. = ts-examine-serial-post + host + } } proc need-hosts/host-examine-xen {} { return {} } diff --git a/ts-examine-serial-post b/ts-examine-serial-post new file mode 100755 index 0000000..2d5c103 --- /dev/null +++ b/ts-examine-serial-post @@ -0,0 +1,81 @@ +#!/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/>. + +# usage +# ./ts-examine-serial-pre [host] +# creates some random cookies to be printed to the serial console +# $r{examine_serial_cookie_kernel} printed once by this script +# $r{examine_serial_cookie_bootloader} will be printed on later boots +# +# These are later used by ts-examine-serial-post + +use strict qw(vars); +use DBI; +unshift @INC, qw(.); +use Osstest; +use POSIX; +use Osstest::TestSupport; + +tsreadconfig(); + +our ($whhost) = @ARGV; +$whhost ||= 'host'; +our $ho= selecthost($whhost); + +our @cookies; + +sub cookies () { + foreach my $rv (sort keys %r) { + next unless $rv =~ /^examine_serial_cookie_(\w+)$/; + my $key = $1; + my $substep = "examine-serial/$key"; + my $ci = { K => $key, C => $r{$rv}, Substep => $substep }; + substep_start($ci->{Substep}, 'ts-examine-serial-post'); + push @cookies, $ci; + } +} + +sub scan () { + foreach my $lf (<$stash/serial-*>) { + if ($lf =~ m/\.gz$/) { + open L, '-|', qw(zcat --), $lf or die $!; + } else { + open L, '<', $lf or die "$lf $!"; + } + logm("examining logfile $lf"); + while (<L>) { + foreach my $ci (@cookies) { + next if $ci->{Found}; + next unless index($_,$ci->{C}) >= 0; + logm("found cookie for $ci->{K}"); + $ci->{Found} = 1; + } + } + $!=0; $?=0; close L or die "$lf $? $!"; + } +} + +sub report () { + foreach my $ci (@cookies) { + substep_finish($ci->{Substep}, + $ci->{Found} ? 'pass' : 'fail'); + } +} + +cookies(); +scan(); +report(); diff --git a/ts-examine-serial-pre b/ts-examine-serial-pre new file mode 100755 index 0000000..01134ad --- /dev/null +++ b/ts-examine-serial-pre @@ -0,0 +1,97 @@ +#!/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/>. + +# usage +# ./ts-examine-serial-pre [host] +# creates some random cookies to be printed to the serial console +# $r{examine_serial_cookie_kernel} printed once by this script +# $r{examine_serial_cookie_bootloader} will be printed on later boots + +use strict qw(vars); +use DBI; +unshift @INC, qw(.); +use Osstest; +use POSIX; +use Osstest::TestSupport; +use Osstest::Debian; + +tsreadconfig(); + +our ($whhost) = @ARGV; +$whhost ||= 'host'; +our $ho= selecthost($whhost); + +die "do not want to mess up a shared host" if + $ho->{SharedReady} or + $ho->{Flags}{'no-reinstall'}; + +sub get_cookie ($) { + my ($key) = @_; + my $rname = "examine_serial_cookie_$key"; + return $r{$rname} if defined $r{$rname}; + open R, "/dev/urandom"; + my $v; + my $l = 16; + read(R, $v, $l) == $l or die; + $v = unpack "H*", $v; + store_runvar($rname, $v); + return $v; +} + +sub ordinary_console () { + my $c = get_cookie('kernel'); + target_cmd_root($ho, <<END); + echo 'osstest kernel cookie $c' >/dev/console +END +} + +sub bootloader () { + my $c = get_cookie('bootloader'); + my $ed = sub { + my ($file,$script) = @_; + my $cmd = <<END; + ed $file <<EOF +$script +w +q +EOF +END + $cmd .= setupboot_bootloader_edited_rune($ho); + target_cmd_root($ho, $cmd, 200); + }; + my $edscript; + if ($ho->{Flags}{'need-uboot-bootscr'}) { + $ed->('/boot/boot.xen',<<END) +/^echo Loaded +i +echo osstest uboot $c +. +END + } else { + $ed->('/boot/grub/grub.cfg',<<END); # no support for grub1 +\$ +?^terminal_ +a +echo osstest grub2 $c +sleep 2 +. +END + } +} + +ordinary_console(); +bootloader(); -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |