Merge branch 'nd/test-helpers'
authorJunio C Hamano <gitster@pobox.com>
Mon, 31 Oct 2016 20:15:27 +0000 (13:15 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 31 Oct 2016 20:15:27 +0000 (13:15 -0700)
Update to the test framework made in 2.9 timeframe broke running
the tests under valgrind, which has been fixed.

* nd/test-helpers:
valgrind: support test helpers

1  2 
t/test-lib.sh
diff --combined t/test-lib.sh
index b859db61ac0d034b8f2c14cea4a960a1a3d9f576,bbaf9a13e11c96364659a9d668836309634cd400..cde7fc7fcf355d04708126980d099df820cd00ce
@@@ -54,22 -54,12 +54,22 @@@ case "$GIT_TEST_TEE_STARTED, $* " i
  done,*)
        # do not redirect again
        ;;
 -*' --tee '*|*' --va'*)
 +*' --tee '*|*' --va'*|*' --verbose-log '*)
        mkdir -p "$TEST_OUTPUT_DIRECTORY/test-results"
        BASE="$TEST_OUTPUT_DIRECTORY/test-results/$(basename "$0" .sh)"
 +
 +      # Make this filename available to the sub-process in case it is using
 +      # --verbose-log.
 +      GIT_TEST_TEE_OUTPUT_FILE=$BASE.out
 +      export GIT_TEST_TEE_OUTPUT_FILE
 +
 +      # Truncate before calling "tee -a" to get rid of the results
 +      # from any previous runs.
 +      >"$GIT_TEST_TEE_OUTPUT_FILE"
 +
        (GIT_TEST_TEE_STARTED=done ${SHELL_PATH} "$0" "$@" 2>&1;
 -       echo $? > $BASE.exit) | tee $BASE.out
 -      test "$(cat $BASE.exit)" = 0
 +       echo $? >"$BASE.exit") | tee -a "$GIT_TEST_TEE_OUTPUT_FILE"
 +      test "$(cat "$BASE.exit")" = 0
        exit
        ;;
  esac
@@@ -99,7 -89,6 +99,7 @@@ unset VISUAL EMAIL LANGUAGE COLUMNS $("
                UNZIP
                PERF_
                CURL_VERBOSE
 +              TRACE_CURL
        ));
        my @vars = grep(/^GIT_/ && !/^GIT_($ok)/o, @env);
        print join("\n", @vars);
@@@ -173,9 -162,6 +173,9 @@@ _x40="$_x05$_x05$_x05$_x05$_x05$_x05$_x
  # Zero SHA-1
  _z40=0000000000000000000000000000000000000000
  
 +EMPTY_TREE=4b825dc642cb6eb9a060e54bf8d69288fbee4904
 +EMPTY_BLOB=e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
 +
  # Line feed
  LF='
  '
  # when case-folding filenames
  u200c=$(printf '\342\200\214')
  
 -export _x05 _x40 _z40 LF u200c
 +export _x05 _x40 _z40 LF u200c EMPTY_TREE EMPTY_BLOB
  
  # Each test should start with something like this, after copyright notices:
  #
                }
                run_list=$1; shift ;;
        --run=*)
 -              run_list=$(expr "z$1" : 'z[^=]*=\(.*\)'); shift ;;
 +              run_list=${1#--*=}; shift ;;
        -h|--h|--he|--hel|--help)
                help=t; shift ;;
        -v|--v|--ve|--ver|--verb|--verbo|--verbos|--verbose)
                verbose=t; shift ;;
        --verbose-only=*)
 -              verbose_only=$(expr "z$1" : 'z[^=]*=\(.*\)')
 +              verbose_only=${1#--*=}
                shift ;;
        -q|--q|--qu|--qui|--quie|--quiet)
                # Ignore --quiet under a TAP::Harness. Saying how many tests
                valgrind=memcheck
                shift ;;
        --valgrind=*)
 -              valgrind=$(expr "z$1" : 'z[^=]*=\(.*\)')
 +              valgrind=${1#--*=}
                shift ;;
        --valgrind-only=*)
 -              valgrind_only=$(expr "z$1" : 'z[^=]*=\(.*\)')
 +              valgrind_only=${1#--*=}
                shift ;;
        --tee)
                shift ;; # was handled already
        --root=*)
 -              root=$(expr "z$1" : 'z[^=]*=\(.*\)')
 +              root=${1#--*=}
                shift ;;
        --chain-lint)
                GIT_TEST_CHAIN_LINT=1
                trace=t
                verbose=t
                shift ;;
 +      --verbose-log)
 +              verbose_log=t
 +              shift ;;
        *)
                echo "error: unknown test option '$1'" >&2; exit 1 ;;
        esac
@@@ -321,16 -304,6 +321,16 @@@ say () 
        say_color info "$*"
  }
  
 +if test -n "$HARNESS_ACTIVE"
 +then
 +      if test "$verbose" = t || test -n "$verbose_only"
 +      then
 +              printf 'Bail out! %s\n' \
 +               'verbose mode forbidden under TAP harness; try --verbose-log'
 +              exit 1
 +      fi
 +fi
 +
  test "${test_description}" != "" ||
  error "Test script did not set test_description."
  
  
  exec 5>&1
  exec 6<&0
 -if test "$verbose" = "t"
 +if test "$verbose_log" = "t"
 +then
 +      exec 3>>"$GIT_TEST_TEE_OUTPUT_FILE" 4>&3
 +elif test "$verbose" = "t"
  then
        exec 4>&2 3>&1
  else
        exec 4>/dev/null 3>/dev/null
  fi
  
 +# Send any "-x" output directly to stderr to avoid polluting tests
 +# which capture stderr. We can do this unconditionally since it
 +# has no effect if tracing isn't turned on.
 +#
 +# Note that this sets up the trace fd as soon as we assign the variable, so it
 +# must come after the creation of descriptor 4 above. Likewise, we must never
 +# unset this, as it has the side effect of closing descriptor 4, which we
 +# use to show verbose tests to the user.
 +#
 +# Note also that we don't need or want to export it. The tracing is local to
 +# this shell, and we would not want to influence any shells we exec.
 +BASH_XTRACEFD=4
 +
  test_failure=0
  test_count=0
  test_fixed=0
@@@ -714,9 -671,9 +714,9 @@@ test_done () 
                test_results_dir="$TEST_OUTPUT_DIRECTORY/test-results"
                mkdir -p "$test_results_dir"
                base=${0##*/}
 -              test_results_path="$test_results_dir/${base%.sh}-$$.counts"
 +              test_results_path="$test_results_dir/${base%.sh}.counts"
  
 -              cat >>"$test_results_path" <<-EOF
 +              cat >"$test_results_path" <<-EOF
                total $test_count
                success $test_success
                fixed $test_fixed
@@@ -809,7 -766,14 +809,14 @@@ the
                return;
  
                base=$(basename "$1")
-               symlink_target=$GIT_BUILD_DIR/$base
+               case "$base" in
+               test-*)
+                       symlink_target="$GIT_BUILD_DIR/t/helper/$base"
+                       ;;
+               *)
+                       symlink_target="$GIT_BUILD_DIR/$base"
+                       ;;
+               esac
                # do not override scripts
                if test -x "$symlink_target" &&
                    test ! -d "$symlink_target" &&
@@@ -1099,10 -1063,6 +1106,10 @@@ test_lazy_prereq NOT_ROOT 
        test "$uid" != 0
  '
  
 +test_lazy_prereq JGIT '
 +      type jgit
 +'
 +
  # SANITY is about "can you correctly predict what the filesystem would
  # do by only looking at the permission bits of the files and
  # directories?"  A typical example of !SANITY is running the test
@@@ -1145,12 -1105,3 +1152,12 @@@ run_with_limited_cmdline () 
  }
  
  test_lazy_prereq CMDLINE_LIMIT 'run_with_limited_cmdline true'
 +
 +build_option () {
 +      git version --build-options |
 +      sed -ne "s/^$1: //p"
 +}
 +
 +test_lazy_prereq LONG_IS_64BIT '
 +      test 8 -le "$(build_option sizeof-long)"
 +'