[libguestfs] Add patches to ./run so we capture errors when i686 tests time out.

Richard W.M. Jones rjones at fedoraproject.org
Thu Jul 11 12:13:39 UTC 2013


commit 44225c4d9a80adab25e55b94dd0e3f48009cb1a5
Author: Richard W.M. Jones <rjones at redhat.com>
Date:   Thu Jul 11 13:03:59 2013 +0100

    Add patches to ./run so we capture errors when i686 tests time out.

 ...Add-a-better-comment-describing-test-mode.patch |   72 ++++++++++++++++++++
 0002-.-run-Timeout-tests-after-1-hour.patch        |   54 +++++++++++++++
 libguestfs.spec                                    |    9 ++-
 3 files changed, 134 insertions(+), 1 deletions(-)
---
diff --git a/0001-.-run-Add-a-better-comment-describing-test-mode.patch b/0001-.-run-Add-a-better-comment-describing-test-mode.patch
new file mode 100644
index 0000000..64bce3e
--- /dev/null
+++ b/0001-.-run-Add-a-better-comment-describing-test-mode.patch
@@ -0,0 +1,72 @@
+From 745e507c2fd06f9349212efe86f8143a1f0c5a0e Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Thu, 11 Jul 2013 12:53:28 +0100
+Subject: [PATCH 1/2] ./run: Add a better comment describing --test mode.
+
+This is just code motion, there is no functional change.
+---
+ run.in | 49 ++++++++++++++++++++++++++-----------------------
+ 1 file changed, 26 insertions(+), 23 deletions(-)
+
+diff --git a/run.in b/run.in
+index 5d9ad75..f49df8e 100755
+--- a/run.in
++++ b/run.in
+@@ -214,28 +214,31 @@ export GNOME_KEYRING_PID=
+ # Run the program.
+ if [ -z "$test_mode" ]; then
+     exec $libtool "$@"
++fi
++
++# For tests (./run --test):
++#  - redirect all output to a file, and only print the file if the
++#    test fails
++#  - print how long it takes to run the test
++
++pid=$$
++tmpout=$b/tmp/run-$pid
++rm -f $tmpout
++start_t="$(date +'%s')"
++$libtool "$@" > $tmpout 2>&1
++fail=$?
++end_t="$(date +'%s')"
++if [ "$fail" -eq 0 ]; then
++    # Test successful.
++    echo $(($end_t - $start_t)) seconds: "$@"
++elif [ "$fail" -eq 77 ]; then
++    # Tests return 77 to mean skipped.
++    cat $tmpout
+ else
+-    # For tests (./run --test), redirect all output to a file, and
+-    # only print the file if the test fails.
+-    pid=$$
+-    tmpout=$b/tmp/run-$pid
+-    rm -f $tmpout
+-    start_t="$(date +'%s')"
+-    $libtool "$@" > $tmpout 2>&1
+-    fail=$?
+-    end_t="$(date +'%s')"
+-    if [ "$fail" -eq 0 ]; then
+-        # Test successful.
+-        echo $(($end_t - $start_t)) seconds: "$@"
+-    elif [ "$fail" -eq 77 ]; then
+-        # Tests return 77 to mean skipped.
+-        cat $tmpout
+-    else
+-        # Test failed.
+-        echo "$b/run --test" "$@"
+-        cat $tmpout
+-        echo "$b/run: command failed with exit code $fail"
+-    fi
+-    rm -f $tmpout
+-    exit $fail
++    # Test failed.
++    echo "$b/run --test" "$@"
++    cat $tmpout
++    echo "$b/run: command failed with exit code $fail"
+ fi
++rm -f $tmpout
++exit $fail
+-- 
+1.8.3.1
+
diff --git a/0002-.-run-Timeout-tests-after-1-hour.patch b/0002-.-run-Timeout-tests-after-1-hour.patch
new file mode 100644
index 0000000..ada36d1
--- /dev/null
+++ b/0002-.-run-Timeout-tests-after-1-hour.patch
@@ -0,0 +1,54 @@
+From caab9f1e6f7ac0d8d5209c31854d640b807519ce Mon Sep 17 00:00:00 2001
+From: "Richard W.M. Jones" <rjones at redhat.com>
+Date: Thu, 11 Jul 2013 12:58:45 +0100
+Subject: [PATCH 2/2] ./run: Timeout tests after 1 hour.
+
+No single test should run longer than 1 hour even on the slowest of
+hardware.  We are having a problem in Koji where a test hangs and then
+we end up losing the output completely, so a timeout + print the log
+to that point is much better.
+---
+ run.in | 15 ++++++++++++++-
+ 1 file changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/run.in b/run.in
+index f49df8e..d8b2e03 100755
+--- a/run.in
++++ b/run.in
+@@ -220,12 +220,20 @@ fi
+ #  - redirect all output to a file, and only print the file if the
+ #    test fails
+ #  - print how long it takes to run the test
++#  - timeout if the test takes too long to run
++
++# Do we have Padraig's timeout utility (from coreutils)?
++if timeout --help >/dev/null 2>&1; then
++    # Timeout (SIGTERM) after 1 hour.
++    # Then send a second SIGKILL 30 seconds later.
++    timeout="timeout -k 30s 1h"
++fi
+ 
+ pid=$$
+ tmpout=$b/tmp/run-$pid
+ rm -f $tmpout
+ start_t="$(date +'%s')"
+-$libtool "$@" > $tmpout 2>&1
++$timeout $libtool "$@" > $tmpout 2>&1
+ fail=$?
+ end_t="$(date +'%s')"
+ if [ "$fail" -eq 0 ]; then
+@@ -234,6 +242,11 @@ if [ "$fail" -eq 0 ]; then
+ elif [ "$fail" -eq 77 ]; then
+     # Tests return 77 to mean skipped.
+     cat $tmpout
++elif [ "$fail" -eq 124 ]; then
++    # Timed out.
++    echo "$b/run --test" "$@"
++    cat $tmpout
++    echo "$b/run: command timed out after 1 hour"
+ else
+     # Test failed.
+     echo "$b/run --test" "$@"
+-- 
+1.8.3.1
+
diff --git a/libguestfs.spec b/libguestfs.spec
index 2ef434b..6bfd0bf 100644
--- a/libguestfs.spec
+++ b/libguestfs.spec
@@ -12,7 +12,7 @@ Summary:       Access and modify virtual machine disk images
 Name:          libguestfs
 Epoch:         1
 Version:       1.23.8
-Release:       2%{?dist}
+Release:       3%{?dist}
 License:       LGPLv2+
 
 # Source and patches.
@@ -20,6 +20,8 @@ URL:           http://libguestfs.org/
 Source0:       http://libguestfs.org/download/1.23-development/%{name}-%{version}.tar.gz
 
 Patch1:        0001-golang-Fix-it-so-it-builds-if-libguestfs-is-not-inst.patch
+Patch2:        0001-.-run-Add-a-better-comment-describing-test-mode.patch
+Patch3:        0002-.-run-Timeout-tests-after-1-hour.patch
 
 # Basic build requirements:
 BuildRequires: perl(Pod::Simple)
@@ -537,6 +539,8 @@ for %{name}.
 %setup -q
 
 %patch1 -p1
+%patch2 -p1
+%patch3 -p1
 
 if [ "$(getenforce | tr '[A-Z]' '[a-z]')" != "disabled" ]; then
     # For sVirt to work, the local temporary directory we use in the
@@ -910,6 +914,9 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/libguestfs
 
 
 %changelog
+* Thu Jul 11 2013 Richard W.M. Jones <rjones at redhat.com> - 1:1.23.8-3
+- Add patches to ./run so we capture errors when i686 tests time out.
+
 * Tue Jul  9 2013 Richard W.M. Jones <rjones at redhat.com> - 1:1.23.8-2
 - New upstream version 1.23.8.
 - Try enabling golang bindings.


More information about the scm-commits mailing list