testing: Print command output if test fails
authorTobias Brunner <tobias@strongswan.org>
Fri, 1 Jun 2018 13:26:45 +0000 (15:26 +0200)
committerTobias Brunner <tobias@strongswan.org>
Thu, 14 Jun 2018 07:29:26 +0000 (09:29 +0200)
This is quite helpful to debug why a pattern didn't match.

As it could produce quite a lot of output if something is not found in a
log file, the complete output is only printed in verbose mode, otherwise,
`head` is used to print the first 10 lines of output.

We only get stdout from SSH, so the stderr redirection is only really
for errors ssh itself produces.

testing/do-tests

index 6415295..52d0d70 100755 (executable)
@@ -444,20 +444,22 @@ do
                        next
                }
                printf("cmd_err=\044(tempfile -p test -s err); ")
+               printf("cmd_out=\044(tempfile -p test -s out); ")
                if (command == "tcpdump")
                {
                        printf("if [ \044TDUP_%s == \"true\" ]; then stop_tcpdump %s; fi; \n", host, host)
-                       printf("cmd_out=\044(ssh \044SSHCONF root@\044ipv4_%s cat /tmp/tcpdump.log | grep \"%s\"); ", host, pattern)
+                       printf("ssh \044SSHCONF root@\044ipv4_%s cat /tmp/tcpdump.log > \044cmd_out; ", host)
                }
                else
                {
-                       printf("cmd_out=\044(ssh \044SSHCONF root@\044ipv4_%s %s 2>\044cmd_err | grep \"%s\"); ",  host, command, pattern)
+                       printf("ssh \044SSHCONF root@\044ipv4_%s %s >\044cmd_out 2>\044cmd_err; ",  host, command)
                }
+               printf("cmd_res=\044(cat \044cmd_out | grep \"%s\"); ", pattern)
                printf("cmd_exit=\044?; ")
                printf("cmd_fail=0; ")
                if (hit ~ /^[0-9]+$/)
                {
-                       printf("if [ \044(echo \"\044cmd_out\" | wc -l) -ne %d ] ", hit)
+                       printf("if [ \044(echo \"\044cmd_res\" | wc -l) -ne %d ] ", hit)
                }
                else
                {
@@ -475,9 +477,14 @@ do
                {
                        printf("echo \"$(print_time)%s# %s | grep \047%s\047  [%s]\"; ", host, command, pattern, hit)
                }
-               printf("if [ -n \"\044cmd_out\" ]; then echo \"\044cmd_out\"; fi; \n")
-               printf("cat \044cmd_err; rm -f -- \044cmd_err; \n")
-               printf("if [ \044cmd_fail -ne 0 ]; then echo \"~~~~~~~~~~~~~~~~~~~~\"; fi; \n")
+               printf("if [ -n \"\044cmd_res\" ]; then echo \"\044cmd_res\"; fi; \n")
+               printf("cat \044cmd_err; \n")
+               printf("if [ \044cmd_fail -ne 0 ]; then \n")
+               printf("if [ -s \044cmd_out ]; then echo \"~~ output ~~~~~~~~~~\"; \n")
+               printf("if [ \"\044verbose\" == \"YES\" ]; then cat \044cmd_out;\n")
+               printf("else cat \044cmd_out | head; fi; fi; \n")
+               printf("echo \"~~~~~~~~~~~~~~~~~~~~\"; fi; \n")
+               printf("rm -f -- \044cmd_out \044cmd_err; \n")
                printf("echo; ")
        }' $TESTDIR/evaltest.dat` >> $CONSOLE_LOG 2>&1