This is an automated email from the ASF dual-hosted git repository.

shinrich 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 0758341592 Adjust nc usage in fix-post-early-return test (#10878)
0758341592 is described below

commit 0758341592b9ace99b71ae6a31e678483531140d
Author: Susan Hinrichs <shinri...@aviatrix.com>
AuthorDate: Wed Nov 29 15:26:52 2023 -0600

    Adjust nc usage in fix-post-early-return test (#10878)
---
 tests/gold_tests/post/delay_client.sh           | 25 ++++++++++
 tests/gold_tests/post/delay_client2.sh          | 27 +++++++++++
 tests/gold_tests/post/delay_client3.sh          | 26 +++++++++++
 tests/gold_tests/post/post-early-return.test.py | 61 ++++++++++++++++++-------
 tests/gold_tests/post/server1.sh                | 41 +++++++++++++++++
 5 files changed, 164 insertions(+), 16 deletions(-)

diff --git a/tests/gold_tests/post/delay_client.sh 
b/tests/gold_tests/post/delay_client.sh
new file mode 100644
index 0000000000..a2774becd7
--- /dev/null
+++ b/tests/gold_tests/post/delay_client.sh
@@ -0,0 +1,25 @@
+#  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.
+
+request ()
+{
+  printf "POST /four HTTP/1.1\r\nHost: bob\r\nContent-Length: 
20\r\n\r\n1234567890"
+  sleep 4
+  printf "0123456789"
+}
+
+outfile=$2
+request | nc 127.0.0.1 $1 > "$outfile"
diff --git a/tests/gold_tests/post/delay_client2.sh 
b/tests/gold_tests/post/delay_client2.sh
new file mode 100644
index 0000000000..33f6f8b2c8
--- /dev/null
+++ b/tests/gold_tests/post/delay_client2.sh
@@ -0,0 +1,27 @@
+#  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.
+
+request ()
+{
+  printf "POST /five HTTP/1.1\r\nHost: bob\r\nContent-Length: 20\r\n\r\n"
+  sleep 1
+  printf "1234567890"
+  sleep 4
+  printf "0123456789"
+}
+
+outfile=$2
+request | nc 127.0.0.1 $1 > "$outfile"
diff --git a/tests/gold_tests/post/delay_client3.sh 
b/tests/gold_tests/post/delay_client3.sh
new file mode 100644
index 0000000000..2f4de3a457
--- /dev/null
+++ b/tests/gold_tests/post/delay_client3.sh
@@ -0,0 +1,26 @@
+#  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.
+
+request ()
+{
+  printf "POST /six HTTP/1.1\r\nHost: bob\r\nContent-Length: 20\r\n\r\n"
+  printf "1234567890"
+  sleep 4
+  printf "0123456789"
+}
+
+outfile=$2
+request | nc 127.0.0.1 $1 > "$outfile"
diff --git a/tests/gold_tests/post/post-early-return.test.py 
b/tests/gold_tests/post/post-early-return.test.py
index af9debbb64..1c13e97388 100644
--- a/tests/gold_tests/post/post-early-return.test.py
+++ b/tests/gold_tests/post/post-early-return.test.py
@@ -26,7 +26,12 @@ Test a case when the origin returns before the post is 
completed
 '''
 Test.ContinueOnFail = True
 
-Test.GetTcpPort("upstream_port")
+Test.GetTcpPort("upstream_port1")
+Test.GetTcpPort("upstream_port2")
+Test.GetTcpPort("upstream_port3")
+Test.GetTcpPort("upstream_port4")
+Test.GetTcpPort("upstream_port5")
+Test.GetTcpPort("upstream_port6")
 
 # ----
 # Setup ATS
@@ -36,9 +41,14 @@ ts = Test.MakeATSProcess("ts", enable_tls=True, 
enable_cache=False)
 # add ssl materials like key, certificates for the server
 ts.addDefaultSSLFiles()
 
-ts.Disk.remap_config.AddLine(
-    'map / http://127.0.0.1:{0}'.format(Test.Variables.upstream_port)
-)
+ts.Disk.remap_config.AddLines([
+    'map /one http://127.0.0.1:{0}'.format(Test.Variables.upstream_port1),
+    'map /two http://127.0.0.1:{0}'.format(Test.Variables.upstream_port2),
+    'map /three http://127.0.0.1:{0}'.format(Test.Variables.upstream_port3),
+    'map /four http://127.0.0.1:{0}'.format(Test.Variables.upstream_port4),
+    'map /five http://127.0.0.1:{0}'.format(Test.Variables.upstream_port5),
+    'map /six http://127.0.0.1:{0}'.format(Test.Variables.upstream_port6),
+])
 ts.Disk.ssl_multicert_config.AddLine(
     'dest_ip=* ssl_cert_name=server.pem ssl_key_name=server.key'
 )
@@ -50,6 +60,19 @@ ts.Disk.records_config.update({
     'proxy.config.diags.debug.tags': 'http',
 })
 
+server1 = Test.Processes.Process("server1", "bash -c '" + Test.TestDirectory +
+                                 "/server1.sh {} 
outserver1'".format(Test.Variables.upstream_port1))
+server2 = Test.Processes.Process("server1", "bash -c '" + Test.TestDirectory +
+                                 "/server1.sh {} 
outserver1'".format(Test.Variables.upstream_port2))
+server3 = Test.Processes.Process("server1", "bash -c '" + Test.TestDirectory +
+                                 "/server1.sh {} 
outserver1'".format(Test.Variables.upstream_port3))
+server4 = Test.Processes.Process("server1", "bash -c '" + Test.TestDirectory +
+                                 "/server1.sh {} 
outserver1'".format(Test.Variables.upstream_port4))
+server5 = Test.Processes.Process("server1", "bash -c '" + Test.TestDirectory +
+                                 "/server1.sh {} 
outserver1'".format(Test.Variables.upstream_port5))
+server6 = Test.Processes.Process("server1", "bash -c '" + Test.TestDirectory +
+                                 "/server1.sh {} 
outserver1'".format(Test.Variables.upstream_port6))
+
 big_post_body = "0123456789" * 231070
 big_post_body_file = open(os.path.join(Test.RunDirectory, "big_post_body"), 
"w")
 big_post_body_file.write(big_post_body)
@@ -59,22 +82,25 @@ big_post_body_file.close()
 # The third case has an explicit multi-second sleep which ensures the early 
response path is exercised
 test_run = Test.AddTestRun("http1.1 Post with small body early return")
 test_run.Processes.Default.StartBefore(Test.Processes.ts)
-test_run.Processes.Default.Command = '(nc -o output --sh-exec \'printf 
\"HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n\"; sleep 1\' -l 127.0.0.1 
{} & ) ; sleep 1 ; curl -v -o /dev/null --http1.1 -d "small body" -k 
https://127.0.0.1:{}/post'.format(
-    Test.Variables.upstream_port, ts.Variables.ssl_port)
+test_run.Processes.Default.StartBefore(server1)
+test_run.Processes.Default.Command = 'curl -v -o /dev/null --http1.1 -d "small 
body" -k https://127.0.0.1:{}/one'.format(
+    ts.Variables.ssl_port)
 test_run.Processes.Default.Streams.All = Testers.ContainsExpression("HTTP/1.1 
420 Be Calm", "Receive the early response")
 test_run.StillRunningAfter = ts
 test_run.Processes.Default.ReturnCode = 0
 
 test_run = Test.AddTestRun("http1.1 Post with large body early return")
-test_run.Processes.Default.Command = '(nc -o output2 --sh-exec \'printf 
\"HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n\"; sleep 1\' -l 127.0.0.1 
{} & ) ; sleep 1 ; curl -H "Expect:" -v -o /dev/null --http1.1 -d 
@big_post_body -k 
https://127.0.0.1:{}/post'.format(Test.Variables.upstream_port,
-                                                                               
                                                                                
                                                                                
                             ts.Variables.ssl_port)
+test_run.Processes.Default.StartBefore(server2)
+test_run.Processes.Default.Command = 'curl -H "Expect:" -v -o /dev/null 
--http1.1 -d @big_post_body -k https://127.0.0.1:{}/two'.format(
+    ts.Variables.ssl_port)
 test_run.Processes.Default.Streams.All = Testers.ContainsExpression("HTTP/1.1 
420 Be Calm", "Receive the early response")
 test_run.StillRunningAfter = ts
 test_run.Processes.Default.ReturnCode = 0
 
 test_run = Test.AddTestRun("http2 Post with large body, small window and early 
return")
-test_run.Processes.Default.Command = '(nc -o output2 --sh-exec \'printf 
\"HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n\"; sleep 1\' -l 127.0.0.1 
{} & ) ; sleep 1 ; curl -v -o /dev/null --http2 -d @big_post_body -k 
https://127.0.0.1:{}/post-http2'.format(
-    Test.Variables.upstream_port, ts.Variables.ssl_port)
+test_run.Processes.Default.StartBefore(server3)
+test_run.Processes.Default.Command = 'curl -v -o /dev/null --http2 -d 
@big_post_body -k https://127.0.0.1:{}/three'.format(
+    ts.Variables.ssl_port)
 test_run.Processes.Default.Streams.All = Testers.ContainsExpression("HTTP/2 
420", "Receive the early response")
 test_run.StillRunningAfter = ts
 test_run.Processes.Default.ReturnCode = 0
@@ -95,19 +121,22 @@ client_out3.Content += 
Testers.ContainsExpression("HTTP/1.1 420 Be Calm", "Recei
 client_out3.Content += Testers.ContainsExpression("Connection: close", "ATS 
marks the client connection to close")
 
 test_run = Test.AddTestRun("http1.1 Post with paused body")
-test_run.Processes.Default.Command = '(nc -o output3 --sh-exec \'printf 
\"HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n\"; sleep 1\' -l 127.0.0.1 
{} & ) ; sleep 1 ; nc -o clientout --sh-exec \' printf \"POST /post 
HTTP/1.1\r\nHost: bob\r\nContent-Length: 20\r\n\r\n1234567890\"; sleep 4; 
printf \"0123456789\"\' 127.0.0.1 {}'.format(Test.Variables.upstream_port,
-                                                                               
                                                                                
                                                                                
                                                                                
                  ts.Variables.port)
+test_run.Processes.Default.StartBefore(server4)
+test_run.Setup.Copy("delay_client.sh")
+test_run.Processes.Default.Command = "sh ./delay_client.sh {} 
clientout".format(ts.Variables.port)
 test_run.StillRunningAfter = ts
 test_run.Processes.Default.ReturnCode = 0
 
 test_run = Test.AddTestRun("http1.1 Post with delayed and paused body")
-test_run.Processes.Default.Command = '(nc -o output3 --sh-exec \'printf 
\"HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n\"; sleep 1\' -l 127.0.0.1 
{} & ) ; sleep 1 ; nc -o clientout3 --sh-exec \' printf \"POST /post 
HTTP/1.1\r\nHost: bob\r\nContent-Length: 20\r\n\r\n\"; sleep 1; printf 
\"1234567890\"; sleep 4; printf \"0123456789\"\' 127.0.0.1 
{}'.format(Test.Variables.upstream_port,
-                                                                               
                                                                                
                                                                                
                                                                                
                                         ts.Variables.port)
+test_run.Processes.Default.StartBefore(server5)
+test_run.Setup.Copy("delay_client2.sh")
+test_run.Processes.Default.Command = "sh ./delay_client2.sh {} 
clientout2".format(ts.Variables.port)
 test_run.StillRunningAfter = ts
 test_run.Processes.Default.ReturnCode = 0
 
 test_run = Test.AddTestRun("http1.1 Post with paused body and no delay on 
server")
-test_run.Processes.Default.Command = '(nc -o output4 --sh-exec \'printf 
\"HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n\"\' -l 127.0.0.1 {} & ) ; 
sleep 1 ; nc -o clientout2 --sh-exec \' printf \"POST /post HTTP/1.1\r\nHost: 
bob\r\nContent-Length: 20\r\n\r\n1234567890\"; sleep 4; printf \"0123456789\"\' 
127.0.0.1 {}'.format(Test.Variables.upstream_port,
-                                                                               
                                                                                
                                                                                
                                                                                
          ts.Variables.port)
+test_run.Processes.Default.StartBefore(server6)
+test_run.Setup.Copy("delay_client3.sh")
+test_run.Processes.Default.Command = "sh ./delay_client3.sh {} 
clientout3".format(ts.Variables.port)
 test_run.StillRunningAfter = ts
 test_run.Processes.Default.ReturnCode = 0
diff --git a/tests/gold_tests/post/server1.sh b/tests/gold_tests/post/server1.sh
new file mode 100755
index 0000000000..13d9bab695
--- /dev/null
+++ b/tests/gold_tests/post/server1.sh
@@ -0,0 +1,41 @@
+#  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 very simple cleartext server for one HTTP transaction.  Does no validation 
of the Request message.
+# Sends a fixed response message
+
+
+response ()
+{
+  # Wait for end of Request message.
+  #
+  while (( 1 == 1 ))
+  do
+    if [[ -f $outfile ]] ; then
+      if tr '\r\n' '=!' < $outfile | grep '=!=!' > /dev/null
+      then
+        break;
+      fi
+    fi
+    sleep 1
+  done
+
+
+  printf "HTTP/1.1 420 Be Calm\r\nContent-Length: 0\r\n\r\n"
+
+}
+outfile=$2
+response | nc -l $1 > "$outfile"

Reply via email to