Make stdout redirection tests less racey 78/255678/1
authorMateusz Majewski <m.majewski2@samsung.com>
Mon, 22 Mar 2021 09:21:02 +0000 (10:21 +0100)
committerMateusz Majewski <m.majewski2@samsung.com>
Mon, 22 Mar 2021 09:23:59 +0000 (10:23 +0100)
Those tests are inherently racey: unlike libdlog, stdout redirection
doesn't wait until logs are stored. Therefore, if we launch a redirected
library and then quickly fetch logs, we might see only a part of the
logs. Waiting a second between those two fixes the issue.

Change-Id: I6fed704c4455cfe7cd2ff00a62e8330dfdc0d88e

tests/dlog_test.in

index 4312621..47bd257 100644 (file)
@@ -870,7 +870,7 @@ if [ "$TEST_DYNAMIC_FILTERS" = "true" ]; then
        fi
 fi
 
-if [ "$type" = "pipe" ]; then
+if [ "$type" = "pipe" ] && [ "$quick" -ne 1 ]; then
        # TODO: Also test the redirector in the logger backend when it's ready there.
        # Note that the logger backend doesn't need reconfiguration nor daemon restart.
        # It might need some strategically located "dlogutil -cb main"s though.
@@ -885,23 +885,27 @@ if [ "$type" = "pipe" ]; then
 
        LOG_DETAILS="testing if basic stdout redirection works correctly (1/2)"
        [ "$(dlog_redirect_stdout --outtag FOO -- /usr/bin/echo Hi)" = "" ] && ok || fail
+       sleep 1
        LOG_DETAILS="testing if basic stdout redirection works correctly (2/2)"
        [ "$(dlogutil -db main -v tag)" = "I/FOO     : Hi" ] && ok || fail
        dlogutil -cb main
 
        # No need to check output in this case, as nothing is written to stdout anyway
        dlog_redirect_stdout --errtag BAR -- /usr/bin/sh -c "echo Hi >&2"
+       sleep 1
        LOG_DETAILS="testing if basic stderr redirection works correctly"
        [ "$(dlogutil -db main -v tag)" = "E/BAR     : Hi" ] && ok || fail
        dlogutil -cb main
 
        LOG_DETAILS="testing if redirector doesn't redirect anything by default (1/2)"
        [ "$(dlog_redirect_stdout -- /usr/bin/echo Hi)" = "Hi" ] && ok || fail
+       sleep 1
        LOG_DETAILS="testing if redirector doesn't redirect anything by default (2/2)"
        [ "$(dlogutil -db main -v tag)" = "" ] && ok || fail
        dlogutil -cb main
 
        dlog_redirect_stdout --outbuffer radio --outtag AN_INTERESTING_TAG --outprio W -- /usr/bin/echo Hi
+       sleep 1
        LOG_DETAILS="testing if redirector settings work correctly on stdout (1/2)"
        [ "$(dlogutil -db main -v tag)" = "" ] && ok || fail
        LOG_DETAILS="testing if redirector settings work correctly on stdout (2/2)"
@@ -909,6 +913,7 @@ if [ "$type" = "pipe" ]; then
        dlogutil -cb radio
 
        dlog_redirect_stdout --errbuffer radio --errtag ANOTHER_INTERESTING_TAG --errprio I -- /usr/bin/sh -c "echo Hi >&2"
+       sleep 1
        LOG_DETAILS="testing if redirector settings work correctly on stderr (1/2)"
        [ "$(dlogutil -db main -v tag)" = "" ] && ok || fail
        LOG_DETAILS="testing if redirector settings work correctly on stderr (2/2)"
@@ -916,6 +921,7 @@ if [ "$type" = "pipe" ]; then
        dlogutil -cb radio
 
        echo "Testing" | dlog_redirect_stdout --outtag BAZ -- /usr/bin/cat
+       sleep 1
        LOG_DETAILS="testing if redirector passes stdin correctly"
        [ "$(dlogutil -db main -v tag)" = "I/BAZ     : Testing" ] && ok || fail
        dlogutil -cb main
@@ -927,6 +933,7 @@ line 3
 line 4
 line 5
 EOF
+       sleep 1
        LOG_DETAILS="testing if multiline logs are handled correctly"
        [ "$(dlogutil -db main | wc -l)" -eq 5 ] && ok || fail
        dlogutil -cb main
@@ -935,6 +942,7 @@ EOF
        rm -f "$TESTDIR"/output
        base64 -w 0 < /dev/urandom 2> /dev/null | head -c 250000 > "$TESTDIR"/input
        dlog_redirect_stdout --outtag XYZZY -- /usr/bin/cat "$TESTDIR"/input
+       sleep 1
        dlogutil -db main -v raw | tr -d '\n' > "$TESTDIR"/output
        LOG_DETAILS="testing if long lines are handled correctly"
        # Usually we would just diff or cmp the files. Unfortunately, as of writing, Tizen doesn't have such luxuries.
@@ -944,18 +952,21 @@ EOF
        dlogctl -b main --disable-stdout
        LOG_DETAILS="testing if redirection can be disabled (1/2)"
        [ "$(dlog_redirect_stdout --outtag THETAG -- /usr/bin/echo test)" = "" ] && ok || fail
+       sleep 1
        LOG_DETAILS="testing if redirection can be disabled (2/2)"
        [ "$(dlogutil -db main -v raw)" = "" ] && ok || fail
 
        dlogctl -b main --enable-stdout
        LOG_DETAILS="testing if redirection can be reenabled (1/2)"
        [ "$(dlog_redirect_stdout --outtag THETAG -- /usr/bin/echo test)" = "" ] && ok || fail
+       sleep 1
        LOG_DETAILS="testing if redirection can be reenabled (2/2)"
        [ "$(dlogutil -db main -v raw)" = "test" ] && ok || fail
        dlogutil -cb main
 
        dlogctl -b radio --disable-stdout
        dlog_redirect_stdout --outtag THETAG -- /usr/bin/echo test
+       sleep 1
        LOG_DETAILS="testing if dlogctl --disable-stdout respects buffer choice"
        [ "$(dlogutil -db main -v raw)" = "test" ] && ok || fail