github.com/git-lfs/git-lfs@v2.5.2+incompatible/t/testlib.sh (about)

     1  #!/usr/bin/env bash
     2  # Usage: . testlib.sh
     3  # Simple shell command language test library.
     4  #
     5  # Tests must follow the basic form:
     6  #
     7  #   begin_test "the thing"
     8  #   (
     9  #        set -e
    10  #        echo "hello"
    11  #        false
    12  #   )
    13  #   end_test
    14  #
    15  # When a test fails its stdout and stderr are shown.
    16  #
    17  # Note that tests must `set -e' within the subshell block or failed assertions
    18  # will not cause the test to fail and the result may be misreported.
    19  #
    20  # Copyright (c) 2011-13 by Ryan Tomayko <http://tomayko.com>
    21  # License: MIT
    22  
    23  fullfile="$(pwd)/$0"
    24  
    25  . "$(dirname "$0")/testenv.sh"
    26  set -e
    27  
    28  # keep track of num tests and failures
    29  tests=0
    30  failures=0
    31  
    32  # this runs at process exit
    33  atexit () {
    34    tap_show_plan "$tests"
    35    shutdown
    36  
    37    if [ $failures -gt 0 ]; then
    38      exit 1
    39    fi
    40  
    41    exit 0
    42  }
    43  
    44  # create the trash dir
    45  trap "atexit" SIGKILL SIGINT SIGTERM EXIT
    46  
    47  SHUTDOWN_LFS=yes
    48  GITSERVER=undefined
    49  
    50  setup
    51  
    52  GITSERVER=$(cat "$LFS_URL_FILE")
    53  SSLGITSERVER=$(cat "$LFS_SSL_URL_FILE")
    54  CLIENTCERTGITSERVER=$(cat "$LFS_CLIENT_CERT_URL_FILE")
    55  cd "$TRASHDIR"
    56  
    57  # Mark the beginning of a test. A subshell should immediately follow this
    58  # statement.
    59  begin_test () {
    60      test_status=$?
    61      [ -n "$test_description" ] && end_test $test_status
    62      unset test_status
    63  
    64      tests=$(( tests + 1 ))
    65      test_description="$1"
    66  
    67      exec 3>&1 4>&2
    68      out="$TRASHDIR/out"
    69      err="$TRASHDIR/err"
    70      trace="$TRASHDIR/trace"
    71  
    72      exec 1>"$out" 2>"$err"
    73  
    74      # enabling GIT_TRACE can cause Windows git to stall, esp with fd 5
    75      # other fd numbers like 8/9 don't stall but still don't work, so disable
    76      if [ $IS_WINDOWS -eq 0 ]; then
    77        exec 5>"$trace"
    78        export GIT_TRACE=5
    79      fi
    80  
    81      # reset global git config
    82      HOME="$TRASHDIR/home"
    83      rm -rf "$TRASHDIR/home"
    84      mkdir "$HOME"
    85      cp "$TESTHOME/.gitconfig" "$HOME/.gitconfig"
    86  
    87      # do not let Git use a different configuration file
    88      unset GIT_CONFIG
    89      unset XDG_CONFIG_HOME
    90  
    91      # allow the subshell to exit non-zero without exiting this process
    92      set -x +e
    93  }
    94  
    95  # Mark the end of a test.
    96  end_test () {
    97      test_status="${1:-$?}"
    98      set +x -e
    99      exec 1>&3 2>&4
   100      # close fd 5 (GIT_TRACE)
   101      exec 5>&-
   102  
   103      if [ "$test_status" -eq 0 ]; then
   104          printf "ok %d - %-60s\n" "$tests" "$test_description ..."
   105      else
   106          failures=$(( failures + 1 ))
   107          printf "not ok %d - %-60s\n" "$tests" "$test_description ..."
   108          (
   109              echo "# -- stdout --"
   110              sed 's/^/#     /' <"$TRASHDIR/out"
   111              echo "# -- stderr --"
   112              grep -v -e '^\+ end_test' -e '^+ set +x' <"$TRASHDIR/err" |
   113                  sed 's/^/#     /'
   114              if [ $IS_WINDOWS -eq 0 ]; then
   115                  echo "# -- git trace --"
   116                  sed 's/^/#    /' <"$TRASHDIR/trace"
   117              fi
   118          ) 1>&2
   119          echo
   120      fi
   121      unset test_description
   122  }