Browse Source

Add scripts/test/chutney-git-bisect.sh, for bisecting using chutney

Supports bisection on 0.3.4 and earlier.
Recommend that users copy the script before bisecting.

Implements ticket 27211.
teor 5 years ago
parent
commit
4217dc0558
3 changed files with 71 additions and 0 deletions
  1. 3 0
      changes/ticket27211
  2. 6 0
      scripts/README
  3. 62 0
      scripts/test/chutney-git-bisect.sh

+ 3 - 0
changes/ticket27211

@@ -0,0 +1,3 @@
+  o Minor features (testing):
+    - Add scripts/test/chutney-git-bisect.sh, for bisecting using chutney.
+      Implements ticket 27211.

+ 6 - 0
scripts/README

@@ -30,6 +30,12 @@ orconfig.h files.
 Testing scripts
 ---------------
 
+test/chutney-git-bisect.sh -- a git bisect run script that bisects using
+chutney. The script builds tor and tor-gencert, then runs chutney. The script
+takes optional arguments for out-of-tree builds, and specific chutney network
+flavours. You should copy this script before using it with git bisect, so that
+it doesn't change (or disappear) during bisection.
+
 test/cov-blame -- Mash up the results of gcov with git blame.  Mainly useful
 to find out who has been writing untested code.
 

+ 62 - 0
scripts/test/chutney-git-bisect.sh

@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+# Compile tor and run chutney to find out if the current commit works
+#
+# Usage:
+# # Copy the script, so it doesn't change during bisection
+# cp scripts/test/chutney-git-bisect.sh .
+# git bisect run \
+#   ./chutney-git-bisect.sh [tries [build-dir [flavour [skip-flavour]]]]
+#
+# Runs chutney up to <tries> times (default 3), because some bugs involve race
+# conditions.
+# Changes to <build-dir> (default no cd) before running tests.
+# Runs chutney network <flavour> (default make test-network-all) as the test.
+# Skips the test if <skip-flavour> fails (default no skip).
+
+CHUTNEY_TRIES=3
+if [ ! -z "$1" ]; then
+    CHUTNEY_TRIES="$1"
+fi
+
+if [ ! -z "$2" ]; then
+    cd "$2"
+fi
+
+CHUTNEY_TEST_CMD="make test-network-all"
+if [ ! -z "$3" ]; then
+    CHUTNEY_TEST_CMD="$CHUTNEY_PATH/tools/test-network.sh --flavour $3"
+fi
+
+CHUTNEY_SKIP_ON_FAIL_CMD="true"
+if [ ! -z "$4" ]; then
+    CHUTNEY_SKIP_ON_FAIL_CMD="$CHUTNEY_PATH/tools/test-network.sh --flavour $4"
+fi
+
+CHUTNEY_BUILD_CMD_OR="make src/or/tor src/tools/tor-gencert"
+CHUTNEY_BUILD_CMD_APP="make src/app/tor src/tools/tor-gencert"
+if ! ( $CHUTNEY_BUILD_CMD_APP || $CHUTNEY_BUILD_CMD_OR ) ; then
+    echo "building '$CHUTNEY_BUILD_CMD_APP || $CHUTNEY_BUILD_CMD_OR' failed, skip"
+    exit 125
+fi
+
+if ! $CHUTNEY_SKIP_ON_FAIL_CMD ; then
+    echo "pre-condition '$CHUTNEY_SKIP_ON_FAIL_CMD' failed, skip"
+    exit 125
+fi
+
+i=1
+while [ "$i" -le "$CHUTNEY_TRIES" ]; do
+    echo
+    echo "Round $i/$CHUTNEY_TRIES:"
+    echo
+    if $CHUTNEY_TEST_CMD ; then
+        echo "test '$CHUTNEY_TEST_CMD' succeeded after $i/$CHUTNEY_TRIES attempts, good"
+        exit 0
+    fi
+    i=$[$i+1]
+done
+
+i=$[$i-1]
+echo "test '$CHUTNEY_TEST_CMD' failed $i/$CHUTNEY_TRIES attempts, bad"
+exit 1