This is an automated email from the ASF dual-hosted git repository.
bneradt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/master by this push:
new fe5b3be378 prefetch autests: await log file content (#11612)
fe5b3be378 is described below
commit fe5b3be378905b1c14f7dcc1437ff5ad9e76783e
Author: Brian Neradt <[email protected]>
AuthorDate: Fri Aug 2 19:30:27 2024 -0500
prefetch autests: await log file content (#11612)
This updates the prefetch tests to await the final logged transaction
content that they expect. With this patch, they now have a test run that
polls for the expected content for up to a one minute timeout. This will
fix some intermittent test failures for these prefetch tests which was
caused by a race condition in which the checking of content was done
while the log was being written. Generally the write was fast enough,
but it wasn't always, resulting in an intermittent false failure due to
the race.
Fixes #11610
---
tests/gold_tests/autest-site/when.test.ext | 23 ++++++++++++++++++++++
.../pluginTest/prefetch/prefetch_bignum.test.py | 6 ++++--
.../pluginTest/prefetch/prefetch_cmcd.test.py | 10 ++--------
.../pluginTest/prefetch/prefetch_overflow.test.py | 6 ++++--
.../pluginTest/prefetch/prefetch_simple.test.py | 6 ++++--
5 files changed, 37 insertions(+), 14 deletions(-)
diff --git a/tests/gold_tests/autest-site/when.test.ext
b/tests/gold_tests/autest-site/when.test.ext
index 9ccbffb73a..ad147e9b75 100644
--- a/tests/gold_tests/autest-site/when.test.ext
+++ b/tests/gold_tests/autest-site/when.test.ext
@@ -75,4 +75,27 @@ def FileContains(haystack, needle, desired_count=1):
return False
+def AddAwaitFileContainsTestRun(test, name, file_path, needle,
desired_count=1) -> 'TestRun':
+ '''Add a test run to await upon the presence of a string in a file.
+
+ :param test: The Test object to which the TestRun is added.
+ :param name: The name of the TestRun.
+ :param file_path: The path to the file to be inspected.
+ :param needle: The content to look for in the file. This can be a regular
+ expression which will be used in Python's re.search function.
+ :param desired_count: How many times the caller desires to see needle in
+ the file before considering the TestRun successful. The default is 1.
+ :return: The TestRun object that was added to the Test.
+ '''
+ tr = test.AddTestRun(name)
+ p = tr.Processes.Default
+ p.Command = f'echo waiting for {needle} in {file_path}'
+ await_process = tr.Processes.Process('await', 'sleep 60')
+ await_process.Ready = When.FileContains(file_path, needle, desired_count)
+ await_process.StartupTimeout = 30
+ p.StartBefore(await_process)
+ return tr
+
+
AddWhenFunction(FileContains)
+ExtendTest(AddAwaitFileContainsTestRun, name="AddAwaitFileContainsTestRun")
diff --git a/tests/gold_tests/pluginTest/prefetch/prefetch_bignum.test.py
b/tests/gold_tests/pluginTest/prefetch/prefetch_bignum.test.py
index 698a79edc4..62d218bd75 100644
--- a/tests/gold_tests/pluginTest/prefetch/prefetch_bignum.test.py
+++ b/tests/gold_tests/pluginTest/prefetch/prefetch_bignum.test.py
@@ -45,7 +45,7 @@ for i in vals:
dns = Test.MakeDNServer("dns")
-ts = Test.MakeATSProcess("ts", use_traffic_out=False, command="traffic_server
2> trace.log")
+ts = Test.MakeATSProcess("ts")
ts.Disk.records_config.update(
{
'proxy.config.diags.debug.enabled': 1,
@@ -71,7 +71,9 @@ tr.Processes.Default.Command = (
f'curl --verbose --proxy 127.0.0.1:{ts.Variables.port}
http://domain.in/texts/demo-3842948374928374982374982374.txt')
tr.Processes.Default.ReturnCode = 0
+Test.AddAwaitFileContainsTestRun('Await transactions to finish logging.',
ts.Disk.traffic_out.Name, '3842948374928374982374982377')
+
tr = Test.AddTestRun()
-tr.Processes.Default.Command = ("grep 'GET http://domain.in' trace.log")
+tr.Processes.Default.Command = (f"grep 'GET http://domain.in'
{ts.Disk.traffic_out.Name}")
tr.Streams.stdout = "prefetch_bignum.gold"
tr.Processes.Default.ReturnCode = 0
diff --git a/tests/gold_tests/pluginTest/prefetch/prefetch_cmcd.test.py
b/tests/gold_tests/pluginTest/prefetch/prefetch_cmcd.test.py
index 8652d69e5f..c75efa4e69 100644
--- a/tests/gold_tests/pluginTest/prefetch/prefetch_cmcd.test.py
+++ b/tests/gold_tests/pluginTest/prefetch/prefetch_cmcd.test.py
@@ -279,17 +279,11 @@ tr.Processes.Default.ReturnCode = 0
condwaitpath = os.path.join(Test.Variables.AtsTestToolsDir, 'condwait')
-# look for ts transaction log
ts0log = os.path.join(ts0.Variables.LOGDIR, 'transaction.log')
-tr = Test.AddTestRun()
-ps = tr.Processes.Default
-ps.Command = (condwaitpath + ' 60 1 -f ' + ts0log)
+Test.AddAwaitFileContainsTestRun('Await ts transactions to finish logging.',
ts0log, 'crr.txt')
-# look for ts1 transaction log
ts1log = os.path.join(ts1.Variables.LOGDIR, 'transaction.log')
-tr = Test.AddTestRun()
-ps = tr.Processes.Default
-ps.Command = (condwaitpath + ' 60 1 -f ' + ts1log)
+Test.AddAwaitFileContainsTestRun('Await ts1 transactions to finish logging.',
ts1log, 'crr.txt')
tr = Test.AddTestRun()
tr.Processes.Default.Command = (f"cat {ts0log}")
diff --git a/tests/gold_tests/pluginTest/prefetch/prefetch_overflow.test.py
b/tests/gold_tests/pluginTest/prefetch/prefetch_overflow.test.py
index a41cb3d595..152858bd95 100644
--- a/tests/gold_tests/pluginTest/prefetch/prefetch_overflow.test.py
+++ b/tests/gold_tests/pluginTest/prefetch/prefetch_overflow.test.py
@@ -42,7 +42,7 @@ for i in list(range(3594967639391, 3594967639391 + 3)):
dns = Test.MakeDNServer("dns")
-ts = Test.MakeATSProcess("ts", use_traffic_out=False, command="traffic_server
2> trace.log")
+ts = Test.MakeATSProcess("ts")
ts.Disk.records_config.update(
{
'proxy.config.diags.debug.enabled': 1,
@@ -68,7 +68,9 @@ tr.Processes.Default.Command = (
f'curl --verbose --proxy 127.0.0.1:{ts.Variables.port}
http://domain.in/texts/demo-3594967639391.txt')
tr.Processes.Default.ReturnCode = 0
+Test.AddAwaitFileContainsTestRun('Await transactions to finish logging.',
ts.Disk.traffic_out.Name, '3594967639394')
+
tr = Test.AddTestRun()
-tr.Processes.Default.Command = ("grep 'GET http://domain.in' trace.log")
+tr.Processes.Default.Command = (f"grep 'GET http://domain.in'
{ts.Disk.traffic_out.Name}")
tr.Streams.stdout = "prefetch_overflow.gold"
tr.Processes.Default.ReturnCode = 0
diff --git a/tests/gold_tests/pluginTest/prefetch/prefetch_simple.test.py
b/tests/gold_tests/pluginTest/prefetch/prefetch_simple.test.py
index 9c5a291540..f4ea5c9cac 100644
--- a/tests/gold_tests/pluginTest/prefetch/prefetch_simple.test.py
+++ b/tests/gold_tests/pluginTest/prefetch/prefetch_simple.test.py
@@ -42,7 +42,7 @@ for i in list(range(1, 1 + 3)):
dns = Test.MakeDNServer("dns")
-ts = Test.MakeATSProcess("ts", use_traffic_out=False, command="traffic_server
2> trace.log")
+ts = Test.MakeATSProcess("ts")
ts.Disk.records_config.update(
{
'proxy.config.diags.debug.enabled': 1,
@@ -67,7 +67,9 @@ tr = Test.AddTestRun()
tr.Processes.Default.Command = (f'curl --verbose --proxy
127.0.0.1:{ts.Variables.port} http://domain.in/texts/demo-1.txt')
tr.Processes.Default.ReturnCode = 0
+Test.AddAwaitFileContainsTestRun('Await transactions to finish logging.',
ts.Disk.traffic_out.Name, 'demo-4.txt')
+
tr = Test.AddTestRun()
-tr.Processes.Default.Command = ("grep 'GET http://domain.in' trace.log")
+tr.Processes.Default.Command = (f"grep 'GET http://domain.in'
{ts.Disk.traffic_out.Name}")
tr.Streams.stdout = "prefetch_simple.gold"
tr.Processes.Default.ReturnCode = 0