xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Ian Jackson <ian.jackson@eu.citrix.com>
To: xen-devel@lists.xenproject.org
Cc: Ian Jackson <Ian.Jackson@eu.citrix.com>
Subject: [OSSTEST PATCH 14/24] host examination: Check that serial output is working
Date: Thu, 18 May 2017 12:01:24 +0100	[thread overview]
Message-ID: <1495105294-25989-14-git-send-email-ian.jackson@eu.citrix.com> (raw)
In-Reply-To: <1495105294-25989-1-git-send-email-ian.jackson@eu.citrix.com>

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@eu.citrix.com>
---
 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@lists.xen.org
https://lists.xen.org/xen-devel

  parent reply	other threads:[~2017-05-18 11:01 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-18 11:01 [OSSTEST PATCH 01/24] README: Advise using `play' for playground flights Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 02/24] sg-report-flight: Do not report <none executed> unless it's true Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 03/24] cs-flight-create: Fix usage error message Ian Jackson
2017-05-23 13:58   ` Roger Pau Monné
2017-05-18 11:01 ` [OSSTEST PATCH 04/24] ts-hosts-allocate-Executive: tolerate lack of hostflags Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 05/24] tcmd: Work around ssh bug with `ssh host ""' Ian Jackson
2017-05-23 13:16   ` Roger Pau Monné
2017-05-23 13:53     ` Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 06/24] cs-hosts-list: New utility Ian Jackson
2017-05-23 13:23   ` Roger Pau Monné
2017-05-23 13:54     ` Ian Jackson
2017-05-23 14:12       ` Roger Pau Monné
2017-05-18 11:01 ` [OSSTEST PATCH 07/24] cs-hosts-list: Support --arches and --kernels Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 08/24] cs-hosts-list: Support --suites Ian Jackson
2017-05-23 14:25   ` Roger Pau Monné
2017-05-23 17:11     ` Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 09/24] cs-hosts-list, standalone-generate-dump-flight-runvars: make compatible Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 10/24] sg-run-job: new run-ts iffail syntax - Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 11/24] host examination: Initial skeleton Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 12/24] Debian.pm: Break out setupboot_bootloader_edited_rune Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 13/24] TestSupport, Executive: Provide intended_blessing Ian Jackson
2017-05-18 11:01 ` Ian Jackson [this message]
2017-05-18 11:01 ` [OSSTEST PATCH 15/24] host examination: Permanently save the logs Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 16/24] ts-hosts-allocate-Executive: Honour hostalloc_maxwait_max Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 17/24] make-hosts-flight: Impose a timeout Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 18/24] cr-daily-branch: Move harness_rev definition Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 19/24] host examination: Add a check to many flights Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 20/24] host examination: Run a regular exam flight Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 21/24] host examination: serial, grub2: put cookie in menu lines Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 22/24] host examination: bootloader: Do not use ed Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 23/24] host examination: bootloader: edit all grub2 menu entries Ian Jackson
2017-05-18 11:01 ` [OSSTEST PATCH 24/24] host examination: bootloader: better handling of multiple runs Ian Jackson
2017-05-23 13:24 ` [OSSTEST PATCH 01/24] README: Advise using `play' for playground flights Roger Pau Monné

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1495105294-25989-14-git-send-email-ian.jackson@eu.citrix.com \
    --to=ian.jackson@eu.citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).