diff --git a/tests/gold_tests/h2/httpbin.test.py b/tests/gold_tests/h2/httpbin.test.py index 2144df8a06d..274dcd6963c 100644 --- a/tests/gold_tests/h2/httpbin.test.py +++ b/tests/gold_tests/h2/httpbin.test.py @@ -124,9 +124,10 @@ test_run.Processes.Default.Streams.stderr = "gold/httpbin_3_stderr.gold" test_run.StillRunningAfter = httpbin - -# Check Logging +# Wait for log file to appear, then wait one extra second to make sure TS is done writing it. test_run = Test.AddTestRun() -test_run.DelayStart = 10 -test_run.Processes.Default.Command = 'echo "Delay for log flush"' +test_run.Processes.Default.Command = ( + os.path.join(Test.Variables.AtsTestToolsDir, 'condwait') + ' 60 1 -f ' + + os.path.join(ts.Variables.LOGDIR, 'access.log') +) test_run.Processes.Default.ReturnCode = 0 diff --git a/tests/gold_tests/logging/custom-log.test.py b/tests/gold_tests/logging/custom-log.test.py index 6dd132b9f0c..6596d37130e 100644 --- a/tests/gold_tests/logging/custom-log.test.py +++ b/tests/gold_tests/logging/custom-log.test.py @@ -96,7 +96,10 @@ ts.Variables.port) tr.Processes.Default.ReturnCode = 0 -tr = Test.AddTestRun() -tr.DelayStart = 10 -tr.Processes.Default.Command = 'echo "Delay"' -tr.Processes.Default.ReturnCode = 0 +# Wait for log file to appear, then wait one extra second to make sure TS is done writing it. +test_run = Test.AddTestRun() +test_run.Processes.Default.Command = ( + os.path.join(Test.Variables.AtsTestToolsDir, 'condwait') + ' 60 1 -f ' + + os.path.join(ts.Variables.LOGDIR, 'test_log_field.log') +) +test_run.Processes.Default.ReturnCode = 0 diff --git a/tests/gold_tests/logging/log-field.test.py b/tests/gold_tests/logging/log-field.test.py index b9997c7ba17..43f00d2dfe0 100644 --- a/tests/gold_tests/logging/log-field.test.py +++ b/tests/gold_tests/logging/log-field.test.py @@ -93,7 +93,10 @@ ts.Variables.port) tr.Processes.Default.ReturnCode = 0 -tr = Test.AddTestRun() -tr.DelayStart = 10 -tr.Processes.Default.Command = 'echo "Delay for log flush"' -tr.Processes.Default.ReturnCode = 0 +# Wait for log file to appear, then wait one extra second to make sure TS is done writing it. +test_run = Test.AddTestRun() +test_run.Processes.Default.Command = ( + os.path.join(Test.Variables.AtsTestToolsDir, 'condwait') + ' 60 1 -f ' + + os.path.join(ts.Variables.LOGDIR, 'field-test.log') +) +test_run.Processes.Default.ReturnCode = 0 diff --git a/tests/gold_tests/logging/log-filter.test.py b/tests/gold_tests/logging/log-filter.test.py index 97dd8eec765..502d7cb0326 100644 --- a/tests/gold_tests/logging/log-filter.test.py +++ b/tests/gold_tests/logging/log-filter.test.py @@ -117,7 +117,10 @@ ts.Variables.port) tr.Processes.Default.ReturnCode = 0 -tr = Test.AddTestRun() -tr.DelayStart = 10 -tr.Processes.Default.Command = 'echo "Delay for log flush"' -tr.Processes.Default.ReturnCode = 0 +# Wait for log file to appear, then wait one extra second to make sure TS is done writing it. +test_run = Test.AddTestRun() +test_run.Processes.Default.Command = ( + os.path.join(Test.Variables.AtsTestToolsDir, 'condwait') + ' 60 1 -f ' + + os.path.join(ts.Variables.LOGDIR, 'filter-test.log') +) +test_run.Processes.Default.ReturnCode = 0 diff --git a/tests/gold_tests/logging/new_log_flds.test.py b/tests/gold_tests/logging/new_log_flds.test.py index 5cd7e1cc996..2ef375311bd 100644 --- a/tests/gold_tests/logging/new_log_flds.test.py +++ b/tests/gold_tests/logging/new_log_flds.test.py @@ -97,10 +97,18 @@ ).format(ts.Variables.ssl_port) tr.Processes.Default.ReturnCode = 0 -# Delay to allow TS to flush report to disk, then validate generated log. +# Wait for log file to appear, then wait one extra second to make sure TS is done writing it. +# +test_run = Test.AddTestRun() +test_run.Processes.Default.Command = ( + os.path.join(Test.Variables.AtsTestToolsDir, 'condwait') + ' 60 1 -f ' + + os.path.join(ts.Variables.LOGDIR, 'test_new_log_flds.log') +) +test_run.Processes.Default.ReturnCode = 0 + +# Validate generated log. # tr = Test.AddTestRun() -tr.DelayStart = 10 tr.Processes.Default.Command = 'python3 {0} < {1}'.format( os.path.join(Test.TestDirectory, 'new_log_flds_observer.py'), os.path.join(ts.Variables.LOGDIR, 'test_new_log_flds.log')) diff --git a/tests/tools/condwait b/tests/tools/condwait new file mode 100755 index 00000000000..45e3eff7be5 --- /dev/null +++ b/tests/tools/condwait @@ -0,0 +1,74 @@ +#!/bin/bash + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# A bash script to wait for a condition to be true. +# +# usage: +# condwait [ MAX-WAIT [ POST-WAIT ] ] CONDITION +# +# CONDITION is the ('test' command) condition to wait for. (It may contain white space.) +# +# MAX-WAIT is the maximum number of seconds to wait for the condition. If it is omitted, it defaults to 60. +# +# POST-WAIT is the number of seconds to wait after the condition is true. If it is omitted, it defaults to 0. +# +# The script exits with status 0 when the condition is seen to be true. It exits with status 1 if the condition +# is not seen to be true and the maximum wait has expired. + +WAIT=60 +POST_WAIT=0 + +if [[ "$1" = "" ]] ; then + echo "usage: condwait [ MAX-WAIT [ POST-WAIT ] ] TEST-CONDTION" >&2 + exit 1 +fi + +X=$( echo "$1" | sed 's/x/yy/g' | sed 's/[^0-9]/x/g' ) +if [[ "$X" = "$1" ]] ; then + WAIT=$1 + shift + if [[ "$1" = "" ]] ; then + echo "usage: condwait [ MAX-WAIT [ POST-WAIT ] ] TEST-CONDTION" >&2 + exit 1 + fi + X=$( echo "$1" | sed 's/x/yy/g' | sed 's/[^0-9]/x/g' ) + if [[ "$X" = "$1" ]] ; then + POST_WAIT=$1 + shift + fi +fi + +if [[ "$1" = "" ]] ; then + echo "usage: condwait [ MAX-WAIT [ POST-WAIT ] ] TEST-CONDTION" >&2 + exit 1 +fi + +while (( WAIT > 0 )) +do + if test $* + then + if (( POST_WAIT > 0 )) + then + sleep $POST_WAIT + fi + exit 0 + fi + sleep 1 + let WAIT=WAIT-1 +done +exit 1