aboutsummaryrefslogtreecommitdiff
path: root/src/test/test_parseconf.sh
diff options
context:
space:
mode:
authorteor <teor@torproject.org>2019-11-13 17:12:30 +1000
committerteor <teor@torproject.org>2019-11-14 10:55:21 +1000
commita5628cf5b318a1168d5092e26a79a7d876aa0b28 (patch)
tree91a1377dad7d790e495e2c2d0a1b6a44b3915ee9 /src/test/test_parseconf.sh
parent39046019ec1192bd8222821a6b8677fabc0a9968 (diff)
downloadtor-a5628cf5b318a1168d5092e26a79a7d876aa0b28.tar.gz
tor-a5628cf5b318a1168d5092e26a79a7d876aa0b28.zip
test/parseconf: Refactor and simplify, stage 2
Remove more duplicate code. Eliminate some arguments. Rewrite some comments. Cleanup after 32451.
Diffstat (limited to 'src/test/test_parseconf.sh')
-rwxr-xr-xsrc/test/test_parseconf.sh202
1 files changed, 117 insertions, 85 deletions
diff --git a/src/test/test_parseconf.sh b/src/test/test_parseconf.sh
index edda6c3ef8..816ed97e31 100755
--- a/src/test/test_parseconf.sh
+++ b/src/test/test_parseconf.sh
@@ -264,11 +264,10 @@ log_verify_config()
# Run "tor --dump-config short" on the torrc $1, and defaults torrc $2, which
# may be $EMPTY. Pass tor the extra command line arguments $3, which will be
-# passed unquoted.
-# Send the standard output to $4.
+# passed unquoted. Send tor's standard output to $4.
+#
# If tor fails, fail_printf() using the file name $5, and context $6,
-# which may be an empty string. Then run "tor --verify-config", and log tor's
-# error messages to stderr.
+# which may be an empty string. Then run log_verify_config().
dump_config()
{
if test "$6"; then
@@ -313,21 +312,21 @@ filter()
"$CONTEXT"
}
-# Compare the input file $1, and output file $2.
+# Compare the expected file $1, and output file $2.
#
# If they are different, fail. If this is the first step that failed in this
-# test, run log_verify_config with torrc $3, defaults torrc $4, and command
+# test, run log_verify_config() with torrc $3, defaults torrc $4, and command
# line $5, to log Tor's error messages. Finally, log the differences between
# the files.
#
# If the file contents are identical, returns true. Otherwise, return false.
#
-# Log failure messages using fail_printf(), with the file name $6, and
-# context $7, which may be an empty string.
+# Log failure messages using fail_printf(), with the expected file name, and
+# context $6, which may be an empty string.
check_diff()
{
- if test "$7"; then
- CONTEXT=" $=7"
+ if test "$6"; then
+ CONTEXT=" $=6"
else
CONTEXT=""
fi
@@ -339,14 +338,14 @@ check_diff()
# show tor's logs
if test -z "$NEXT_TEST"; then
fail_printf "'%s': Tor said%s:" \
- "$6" \
+ "$1" \
"$CONTEXT"
log_verify_config "$3" \
"$4" \
"$5"
fi
fail_printf "'%s' did not match%s:" \
- "$6" \
+ "$1" \
"$CONTEXT"
diff -u "$1" "$2" >&2 \
|| true
@@ -354,6 +353,50 @@ check_diff()
fi
}
+# Run "tor --dump-config short" on the torrc $1, and defaults torrc $2, which
+# may be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted. Send tor's standard output to $4, after running $FILTER
+# on it.
+#
+# If tor fails, run log_verify_config().
+#
+# Compare the expected file $5, and output file. If they are different, fail.
+# If this is the first step that failed in this test, run log_verify_config().
+#
+# If the file contents are identical, returns true. Otherwise, return false,
+# and log the differences between the files.
+#
+# Log failure messages using fail_printf(), with the expected file name, and
+# context $6, which may be an empty string.
+check_dump_config()
+{
+ OUTPUT="$4"
+ OUTPUT_RAW="${OUTPUT}_raw"
+ dump_config "$1" \
+ "$2" \
+ "$3" \
+ "$OUTPUT_RAW" \
+ "$5" \
+ "$6"
+
+ filter "$OUTPUT_RAW" \
+ "$OUTPUT" \
+ "$5" \
+ "$6"
+
+ if check_diff "$5" \
+ "$OUTPUT" \
+ "$1" \
+ "$2" \
+ "$3" \
+ "$5" \
+ "$6"; then
+ return "$TRUE"
+ else
+ return "$FALSE"
+ fi
+}
+
# Check if $1 is an empty file.
# If it is, fail_printf() using $2 as the type of file.
# Returns true if the file is empty, false otherwise.
@@ -371,8 +414,8 @@ check_empty_pattern()
# Run tor --verify-config on the torrc $1, and defaults torrc $2, which may
# be $EMPTY. Pass tor the extra command line arguments $3, which will be
-# passed unquoted.
-# Send tor's standard output to $4.
+# passed unquoted. Send tor's standard output to $4.
+#
# If tor's exit status does not match the boolean $5, fail_printf()
# using the file name $6, and context $7, which is required.
verify_config()
@@ -394,14 +437,15 @@ verify_config()
fi
}
-# Check for the pattern in file $1, in the lines in the output file $2.
-# Uses grep with the entire contents of $1 as the pattern. (Not "grep -f".)
+# Check for the patterns in the match file $1, in the output file $2.
+# Uses grep with the entire contents of the match file as the pattern.
+# (Not "grep -f".)
#
# If the pattern does not match any lines in the output file, fail.
# Log the pattern, and the entire contents of the output file.
#
-# Log failure messages using fail_printf(), with the file name $1, and
-# context $3, which is required.
+# Log failure messages using fail_printf(), with the match file name,
+# and context $3, which is required.
check_pattern()
{
expect_log="$(cat "$1")"
@@ -414,6 +458,40 @@ check_pattern()
fi
}
+# Run tor --verify-config on the torrc $1, and defaults torrc $2, which may
+# be $EMPTY. Pass tor the extra command line arguments $3, which will be
+# passed unquoted. Send tor's standard output to $4.
+#
+# If tor's exit status does not match the boolean $5, fail.
+#
+# Check for the patterns in the match file $6, in the output file.
+# Uses grep with the entire contents of the match file as the pattern.
+# (Not "grep -f".) The match file must not be empty.
+#
+# If the pattern does not match any lines in the output file, fail.
+# Log the pattern, and the entire contents of the output file.
+#
+# Log failure messages using fail_printf(), with the match file name,
+# and context $7, which is required.
+check_verify_config()
+{
+ if check_empty_pattern "$6" "$7"; then
+ return
+ fi
+
+ verify_config "$1" \
+ "$2" \
+ "$3" \
+ "$4" \
+ "$5" \
+ "$6" \
+ "$7"
+
+ check_pattern "$6" \
+ "$4" \
+ "$7"
+}
+
for dir in "${EXAMPLEDIR}"/*; do
NEXT_TEST=
@@ -489,89 +567,43 @@ for dir in "${EXAMPLEDIR}"/*; do
elif test -f "$EXPECTED"; then
# This case should succeed: run dump-config and see if it does.
- if test -f "$EXPECTED_LOG"; then
- if check_empty_pattern "$EXPECTED_LOG" "Expected log"; then
- continue
- fi
- fi
-
- dump_config "./torrc" \
- "$DEFAULTS" \
- "$CMDLINE" \
- "${DATA_DIR}/output_raw.${testname}" \
- "$EXPECTED" \
- ""
-
- filter "${DATA_DIR}/output_raw.${testname}" \
- "${DATA_DIR}/output.${testname}" \
- "$EXPECTED" \
- ""
-
- if check_diff "$EXPECTED" \
- "${DATA_DIR}/output.${testname}" \
- "./torrc" \
- "$DEFAULTS" \
- "$CMDLINE" \
- "$EXPECTED" \
- ""; then
+ if check_dump_config "./torrc" \
+ "$DEFAULTS" \
+ "$CMDLINE" \
+ "${DATA_DIR}/output.${testname}" \
+ "$EXPECTED" \
+ ""; then
# Check round-trip.
- dump_config "${DATA_DIR}/output.${testname}" \
- "$EMPTY" \
- "" \
- "${DATA_DIR}/output_2_raw.${testname}" \
- "$EXPECTED" \
- "on round-trip"
-
- filter "${DATA_DIR}/output_2_raw.${testname}" \
- "${DATA_DIR}/output_2.${testname}" \
- "$EXPECTED" \
- "on round-trip"
-
- check_diff "${DATA_DIR}/output.${testname}" \
- "${DATA_DIR}/output_2.${testname}" \
- "${DATA_DIR}/output.${testname}" \
- "$EMPTY" \
- "" \
- "$EXPECTED" \
- "on round-trip" || true
+ check_dump_config "${DATA_DIR}/output.${testname}" \
+ "$EMPTY" \
+ "" \
+ "${DATA_DIR}/output_2.${testname}" \
+ "$EXPECTED" \
+ "on round-trip" || true
fi
if test -f "$EXPECTED_LOG"; then
# This case should succeed: run verify-config and see if it does.
- verify_config "./torrc" \
+ check_verify_config "./torrc" \
"$DEFAULTS" \
"$CMDLINE" \
"${DATA_DIR}/output_log.${testname}" \
"$TRUE" \
"$EXPECTED_LOG" \
- "succeed"
-
- check_pattern "$EXPECTED_LOG" \
- "${DATA_DIR}/output_log.${testname}" \
- "log"
+ "log ok"
fi
elif test -f "$ERROR"; then
# This case should fail: run verify-config and see if it does.
- if ! test -s "$ERROR"; then
- if check_empty_pattern "$ERROR" "Error"; then
- continue
- fi
- fi
-
- verify_config "./torrc" \
- "$DEFAULTS" \
- "$CMDLINE" \
- "${DATA_DIR}/output.${testname}" \
- "$FALSE" \
- "$ERROR" \
- "report an error"
-
- check_pattern "$ERROR" \
- "${DATA_DIR}/output.${testname}" \
- "error"
+ check_verify_config "./torrc" \
+ "$DEFAULTS" \
+ "$CMDLINE" \
+ "${DATA_DIR}/output.${testname}" \
+ "$FALSE" \
+ "$ERROR" \
+ "log error"
else
# This case is not actually configured with a success or a failure.
# call that an error.