From patchwork Mon Aug 3 14:41:29 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Jones X-Patchwork-Id: 503209 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 6F0BD1402A1 for ; Tue, 4 Aug 2015 00:42:14 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754056AbbHCOmJ (ORCPT ); Mon, 3 Aug 2015 10:42:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45082 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753164AbbHCOmF (ORCPT ); Mon, 3 Aug 2015 10:42:05 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 6320CBC8CF; Mon, 3 Aug 2015 14:42:05 +0000 (UTC) Received: from hawk.localdomain.com (dhcp-1-112.brq.redhat.com [10.34.1.112]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t73EfYNt006138; Mon, 3 Aug 2015 10:42:03 -0400 From: Andrew Jones To: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org Cc: dgibson@redhat.com, david@gibson.dropbear.id.au, agraf@suse.de, thuth@redhat.com, lvivier@redhat.com, pbonzini@redhat.com Subject: [kvm-unit-tests PATCH 12/14] scripts: add exit code snooper Date: Mon, 3 Aug 2015 16:41:29 +0200 Message-Id: <1438612891-3718-13-git-send-email-drjones@redhat.com> In-Reply-To: <1438612891-3718-1-git-send-email-drjones@redhat.com> References: <1438612891-3718-1-git-send-email-drjones@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.27 Sender: kvm-ppc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm-ppc@vger.kernel.org Add a function that reads test output streams and just forwards it on to stdout, except when a line is 'EXIT: STATUS=%d', at which point it grabs the status to use as the exit code. Tests that always exit with zero (due to how they inform QEMU to quit), can now return other status codes. Run with . scripts/functions.bash $test_cmdline | snoop_exitcode The unit test must call print_exit_line(code) before invoking its method to quit QEMU. For arm and powerpc, we just add the print_exit_line calls to their exit() functions right now. Signed-off-by: Andrew Jones --- configure | 5 ++++- lib/arm/io.c | 1 + lib/libcflat.h | 3 +++ lib/powerpc/io.c | 1 + scripts/functions.bash | 11 +++++++++++ 5 files changed, 20 insertions(+), 1 deletion(-) diff --git a/configure b/configure index b2ad199da7873..e1f70bd79d4f7 100755 --- a/configure +++ b/configure @@ -10,6 +10,7 @@ ar=ar arch=`uname -m | sed -e s/i.86/i386/ | sed -e 's/arm.*/arm/'` host=$arch cross_prefix= +snooper= usage() { cat <<-EOF @@ -81,8 +82,9 @@ if [ "$arch" = "i386" ] || [ "$arch" = "x86_64" ]; then testdir=x86 elif [ "$arch" = "arm" ] || [ "$arch" = "arm64" ]; then testdir=arm -elif [ "$arch" = "ppc64" ]; then +elif [ "$arch" = "powerpc" ] || [ "$arch" = "ppc64" ]; then testdir=powerpc + snooper=snoop_exitcode else testdir=$arch fi @@ -137,4 +139,5 @@ OBJDUMP=$cross_prefix$objdump AR=$cross_prefix$ar API=$api TEST_DIR=$testdir +SNOOPER="$snooper" EOF diff --git a/lib/arm/io.c b/lib/arm/io.c index a08d394e4aa1c..487071d2edcd3 100644 --- a/lib/arm/io.c +++ b/lib/arm/io.c @@ -78,6 +78,7 @@ void puts(const char *s) void exit(int code) { + print_exit_line(code); chr_testdev_exit(code); halt(code); } diff --git a/lib/libcflat.h b/lib/libcflat.h index 8411f6c5d92e3..c3d90a0af831a 100644 --- a/lib/libcflat.h +++ b/lib/libcflat.h @@ -77,4 +77,7 @@ do { \ abort(); \ } while (0) +#define print_exit_line(code) \ + printf("\nEXIT: STATUS=%d\n", ((code) << 1) | 1) + #endif diff --git a/lib/powerpc/io.c b/lib/powerpc/io.c index 25cdd0ad961ee..b68d33b9ef740 100644 --- a/lib/powerpc/io.c +++ b/lib/powerpc/io.c @@ -29,6 +29,7 @@ void puts(const char *s) void exit(int code) { + print_exit_line(code); rtas_power_off(); halt(code); } diff --git a/scripts/functions.bash b/scripts/functions.bash index 7ed5a517250bc..7b4a5e4e63c9b 100644 --- a/scripts/functions.bash +++ b/scripts/functions.bash @@ -40,3 +40,14 @@ function for_each_unittest() "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" exec {fd}<&- } + +function snoop_exitcode() +{ + while read line; do + if [[ $line =~ ^EXIT:\ STATUS=(.*)$ ]]; then + code=${BASH_REMATCH[1]} + fi + echo $line + done + exit $code +}