Browse Source

Merge remote-tracking branch 'tor-github/pr/21'

Merged the shellcheck and unit tests.
Put shellcheck first.
teor 5 years ago
parent
commit
1941747db8
6 changed files with 76 additions and 33 deletions
  1. 9 0
      .travis.yml
  2. 4 2
      chutney
  3. 26 0
      tests/shellcheck-tests.sh
  4. 5 4
      tools/bootstrap-network.sh
  5. 6 5
      tools/hsaddress.sh
  6. 26 22
      tools/warnings.sh

+ 9 - 0
.travis.yml

@@ -35,6 +35,7 @@ matrix:
             - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.2.9.x-xenial main'
               key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'
           packages:
+            - shellcheck
             - tor
       env: TOR="0.2.9-nightly"
     - addons:
@@ -43,6 +44,7 @@ matrix:
             - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.3.4.x-xenial main'
               key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'
           packages:
+            - shellcheck
             - tor
       env: TOR="0.3.4-nightly"
     ## The current stable release is listed at the end of the file, because
@@ -53,6 +55,7 @@ matrix:
             - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-0.3.5.x-xenial main'
               key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'
           packages:
+            - shellcheck
             - tor
       env: TOR="0.3.5-nightly"
     ## The experimental deb line needs to be updated when 0.4.0 becomes stable
@@ -62,6 +65,7 @@ matrix:
             - sourceline: 'deb https://deb.torproject.org/torproject.org tor-experimental-0.4.0.x-xenial main'
               key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'
           packages:
+            - shellcheck
             - tor
       env: TOR="0.4.0-nightly"
     - addons:
@@ -70,6 +74,7 @@ matrix:
             - sourceline: 'deb https://deb.torproject.org/torproject.org tor-nightly-master-xenial main'
               key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'
           packages:
+            - shellcheck
             - tor
       env: TOR="master-nightly"
     ## Test all supported python releases
@@ -148,10 +153,12 @@ addons:
       - sourceline: 'deb https://deb.torproject.org/torproject.org xenial main'
         key_url: 'https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc'
     packages:
+      - shellcheck
       - tor
   ## (macOS only)
   homebrew:
     packages:
+      - shellcheck
       - tor
 
 install:
@@ -160,9 +167,11 @@ install:
   - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then dpkg-query --show; fi
   - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew list --versions; fi
   - python --version
+  - shellcheck --version
   - tor --version
 
 script:
+  - tests/shellcheck-tests.sh
   - tests/unit-tests.sh
   - tools/test-network.sh --allow-failures 1
 

+ 4 - 2
chutney

@@ -3,11 +3,13 @@
 set -o errexit
 set -o nounset
 
-export PYTHONPATH="$(dirname "${0}")/lib:$(dirname "${0}")/scripts:${PYTHONPATH-}"
+PYTHONPATH="$(dirname "${0}")/lib:$(dirname "${0}")/scripts:${PYTHONPATH-}"
+export PYTHONPATH
 # make a last-ditch effort to set CHUTNEY_PATH based on this script's location
 if ! test "${CHUTNEY_PATH+y}"
 then
-    export CHUTNEY_PATH="`dirname $0`"
+    CHUTNEY_PATH=$(dirname "$0")
+    export CHUTNEY_PATH
 fi
 
 binaries="python python3 python2"

+ 26 - 0
tests/shellcheck-tests.sh

@@ -0,0 +1,26 @@
+#!/bin/sh
+
+# Exit on errors
+set -e
+# Verbose mode
+set -v
+
+# SC1117 was disabled after 0.5, because it was too pedantic
+EXCLUSIONS="--exclude=SC1117"
+
+# Output is prefixed with the name of the script
+myname=$(basename "$0")
+
+echo "$myname: finding chutney directory"
+TEST_DIR=$(dirname "$0")
+CHUTNEY_DIR=$(dirname "$TEST_DIR")
+
+echo "$myname: changing to chutney directory"
+cd "$CHUTNEY_DIR"
+
+
+echo "$myname: running shellcheck tests with $EXCLUSIONS"
+
+shellcheck "$EXCLUSIONS" chutney
+
+find . -name "*.sh" -exec shellcheck "$EXCLUSIONS" {} +

+ 5 - 4
tools/bootstrap-network.sh

@@ -14,12 +14,13 @@
 #
 
 # Get a working chutney path
-if [ ! -d "$CHUTNEY_PATH" -o ! -x "$CHUTNEY_PATH/chutney" ]; then
+if [ ! -d "$CHUTNEY_PATH" ] || [ ! -x "$CHUTNEY_PATH/chutney" ]; then
     # looks like a broken path: use the path to this tool instead
-    TOOLS_PATH=`dirname "$0"`
-    export CHUTNEY_PATH=`dirname "$TOOLS_PATH"`
+    TOOLS_PATH=$(dirname "$0")
+    CHUTNEY_PATH=$(dirname "$TOOLS_PATH")
+    export CHUTNEY_PATH
 fi
-if [ -d "$PWD/$CHUTNEY_PATH" -a -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
+if [ -d "$PWD/$CHUTNEY_PATH" ] && [ -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
     # looks like a relative path: make chutney path absolute
     export CHUTNEY_PATH="$PWD/$CHUTNEY_PATH"
 fi

+ 6 - 5
tools/hsaddress.sh

@@ -7,12 +7,13 @@
 # Examples: tools/hsaddress.sh
 #           tools/hsaddress.sh 025h
 
-if [ ! -d "$CHUTNEY_PATH" -o ! -x "$CHUTNEY_PATH/chutney" ]; then
+if [ ! -d "$CHUTNEY_PATH" ] || [ ! -x "$CHUTNEY_PATH/chutney" ]; then
     # looks like a broken path: use the path to this tool instead
-    TOOLS_PATH=`dirname "$0"`
-    export CHUTNEY_PATH=`dirname "$TOOLS_PATH"`
+    TOOLS_PATH=$(dirname "$0")
+    CHUTNEY_PATH=$(dirname "$TOOLS_PATH")
+    export CHUTNEY_PATH
 fi
-if [ -d "$PWD/$CHUTNEY_PATH" -a -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
+if [ -d "$PWD/$CHUTNEY_PATH" ] && [ -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
     # looks like a relative path: make chutney path absolute
     export CHUTNEY_PATH="$PWD/$CHUTNEY_PATH"
 fi
@@ -48,7 +49,7 @@ then
     do
         FILE="${dir}/$TARGET"
         [ -e "$FILE" ] || continue
-        echo -n "Node `basename ${dir}`: "
+        echo "Node $(basename "$dir"): " | tr -d "\n"
         show_address "$FILE"
     done
 elif [ $# -eq 1 ];

+ 26 - 22
tools/warnings.sh

@@ -11,12 +11,13 @@
 # CHUTNEY_WARNINGS_IGNORE_EXPECTED: set to "true" to filter expected warnings
 # CHUTNEY_WARNINGS_SUMMARY: set to "true" to merge warnings from all instances
 
-if [ ! -d "$CHUTNEY_PATH" -o ! -x "$CHUTNEY_PATH/chutney" ]; then
+if [ ! -d "$CHUTNEY_PATH" ] || [ ! -x "$CHUTNEY_PATH/chutney" ]; then
     # looks like a broken path: use the path to this tool instead
-    TOOLS_PATH=`dirname "$0"`
-    export CHUTNEY_PATH=`dirname "$TOOLS_PATH"`
+    TOOLS_PATH=$(dirname "$0")
+    CHUTNEY_PATH=$(dirname "$TOOLS_PATH")
+    export CHUTNEY_PATH
 fi
-if [ -d "$PWD/$CHUTNEY_PATH" -a -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
+if [ -d "$PWD/$CHUTNEY_PATH" ] && [ -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
     # looks like a relative path: make chutney path absolute
     export CHUTNEY_PATH="$PWD/$CHUTNEY_PATH"
 fi
@@ -33,42 +34,45 @@ fi
 
 show_warnings() {
     # Work out the file and filter settings
+    LOGS=$(mktemp)
     if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
-        FILE="$1/*/$LOG_FILE"
+        cat "$1"/*/"$LOG_FILE" > "$LOGS"
     else
-        FILE="$1/$LOG_FILE"
+        cat "$1/$LOG_FILE" > "$LOGS"
     fi
-    if [ "$CHUTNEY_WARNINGS_IGNORE_EXPECTED" = true -a \
-        -e "$IGNORE_FILE" ]; then
-        CAT="grep -v -f"
+    FILTERED_LOGS=$(mktemp)
+    if [ "$CHUTNEY_WARNINGS_IGNORE_EXPECTED" = true ] && \
+           [ -e "$IGNORE_FILE" ]; then
+        grep -v -f "$IGNORE_FILE" "$LOGS" | $SED_E "$FILTER" > "$FILTERED_LOGS"
     else
-        CAT=cat
+        $SED_E "$FILTER" "$LOGS" > "$FILTERED_LOGS"
         IGNORE_FILE=
     fi
     # Silence any messages if we are in summary mode, and there are no warnings
     # must be kept in sync with the filter commands below
-    if [ `$CAT $IGNORE_FILE $FILE | $SED_E "$FILTER" | wc -c` -eq 0 -a \
-        "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
-        ECHO_Q=true
-        ECHO_A=true
+    if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ] && \
+       [ "$(wc -c < "$FILTERED_LOGS")" -eq 0 ]; \
+       then
+        ECHO_Q="true"
+        ECHO_A="true"
      else
         # if there is output, always echo the detail message
-        ECHO_A=echo
+        ECHO_A="echo"
     fi
     # Give context to the warnings we're about to display
     if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
-        $ECHO_Q "${GREEN}Summary: `basename $1`${NC}"
+        $ECHO_Q "${GREEN}Summary: $(basename "$1")${NC}"
     else
-        $ECHO_Q "${GREEN}Node: `basename $1`${NC}"
+        $ECHO_Q "${GREEN}Node: $(basename "$1")${NC}"
     fi
-    if [ "$CHUTNEY_WARNINGS_IGNORE_EXPECTED" = true -a \
-        -e "$IGNORE_FILE" ]; then
-        PERMANENT_DIR=`readlink -n "$1" || echo "$1"`
+    if [ "$CHUTNEY_WARNINGS_IGNORE_EXPECTED" = true ] && \
+       [ -e "$IGNORE_FILE" ]; then
+        PERMANENT_DIR=$(readlink -n "$1" || echo "$1")
         $ECHO_A "${GREEN}Detail: chutney/tools/warnings.sh $PERMANENT_DIR${NC}"
     fi
     # Display the warnings, after filtering and counting occurrences
     # must be kept in sync with the filter commands above
-    $CAT $IGNORE_FILE $FILE | $SED_E "$FILTER" | sort | uniq -c | \
+    sort "$FILTERED_LOGS" | uniq -c | \
     sed -e 's/^\s*//' -e "s/ *\([0-9][0-9]*\) *\(.*\)/${YELLOW}Warning:${NC} \2${YELLOW} Number: \1${NC}/"
     if [ "$CHUTNEY_WARNINGS_SUMMARY" != true ]; then
         $ECHO_Q ""
@@ -86,7 +90,7 @@ if [ -t 1 ]; then
     YELLOW=$(tput setaf 3)
     GREEN=$(tput setaf 2)
 fi
-CHUTNEY="$CHUTNEY_PATH/chutney"
+
 NAME=$(basename "$0")
 DEST="$CHUTNEY_DATA_DIR/nodes"
 LOG_FILE=info.log