This is an automated email from the ASF dual-hosted git repository.
wkaras 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 c8b6400a04 Add Au testing for statichit.so plugin. (#11293)
c8b6400a04 is described below
commit c8b6400a04e8b163191843173c6d9f028ae0bf09
Author: Walt Karas <[email protected]>
AuthorDate: Tue Apr 30 11:12:50 2024 -0400
Add Au testing for statichit.so plugin. (#11293)
---
tests/gold_tests/pluginTest/statichit/empty.txt | 0
.../gold_tests/pluginTest/statichit/small_body.txt | 1 +
.../pluginTest/statichit/statichit.replay.yaml | 168 +++++++++
.../pluginTest/statichit/statichit.test.py | 88 +++++
.../gold_tests/pluginTest/statichit/story_16.json | 395 +++++++++++++++++++++
5 files changed, 652 insertions(+)
diff --git a/tests/gold_tests/pluginTest/statichit/empty.txt
b/tests/gold_tests/pluginTest/statichit/empty.txt
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/tests/gold_tests/pluginTest/statichit/small_body.txt
b/tests/gold_tests/pluginTest/statichit/small_body.txt
new file mode 100644
index 0000000000..9858bc75e7
--- /dev/null
+++ b/tests/gold_tests/pluginTest/statichit/small_body.txt
@@ -0,0 +1 @@
+small body content
diff --git a/tests/gold_tests/pluginTest/statichit/statichit.replay.yaml
b/tests/gold_tests/pluginTest/statichit/statichit.replay.yaml
new file mode 100644
index 0000000000..175435ae48
--- /dev/null
+++ b/tests/gold_tests/pluginTest/statichit/statichit.replay.yaml
@@ -0,0 +1,168 @@
+# 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.
+
+# This replay file tests the stale response plugin when no
+# --stale-while-revalidate-default and no --stale-if-error-default are
+# specified.
+
+sessions:
+
+- transactions:
+
+ - client-request:
+ method: GET
+ url: /
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn1 ]
+ - [ uuid, 1 ]
+
+ proxy-response:
+ status: 200
+ headers:
+ fields:
+ - [ Content-Length, { value: 19, as: equal } ]
+ - [ Cache-Control, { value: no-cache, as: equal } ]
+ - [ Content-Type, { value: text/plain, as: equal } ]
+ - [ Server, { value: ATS, as: contains } ]
+ content:
+ encoding: plain
+ data: |
+ small body content
+ verify: { as: equal }
+
+ - client-request:
+ method: GET
+ url: /path
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn1 ]
+ - [ uuid, 2 ]
+
+ proxy-response:
+ status: 404
+ headers:
+ fields:
+ - [ Cache-Control, { value: no-store, as: equal } ]
+ - [ Content-Type, { value: text/html, as: equal } ]
+ - [ Server, { value: ATS, as: contains } ]
+ content:
+ encoding: plain
+ data: Error
+ verify: { as: contains }
+
+ - client-request:
+ method: GET
+ url: /
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn2 ]
+ - [ uuid, 3 ]
+
+ proxy-response:
+ status: 200
+ headers:
+ fields:
+ - [ Content-Length, { value: 19, as: equal } ]
+ - [ Cache-Control, { value: max-age=123, as: equal } ]
+ - [ Content-Type, { value: text/plain, as: equal } ]
+ - [ Server, { value: ATS, as: contains } ]
+ content:
+ encoding: plain
+ data: |
+ small body content
+ verify: { as: equal }
+
+ - client-request:
+ method: GET
+ url: /path
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn3 ]
+ - [ uuid, 4 ]
+
+ proxy-response:
+ status: 200
+ headers:
+ fields:
+ - [ Content-Length, { value: 19, as: equal } ]
+ - [ Cache-Control, { value: no-cache, as: equal } ]
+ - [ Content-Type, { value: text/plain, as: equal } ]
+ - [ Server, { value: ATS, as: contains } ]
+ content:
+ encoding: plain
+ data: |
+ small body content
+ verify: { as: equal }
+
+ - client-request:
+ method: GET
+ url: /
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn4 ]
+ - [ uuid, 5 ]
+
+ proxy-response:
+ status: 412
+ headers:
+ fields:
+ - [ Server, { value: ATS, as: contains } ]
+
+ - client-request:
+ method: GET
+ url: /
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn5 ]
+ - [ uuid, 6 ]
+
+ proxy-response:
+ status: 200
+ headers:
+ fields:
+ - [ Content-Length, { value: 10917, as: equal } ]
+ - [ Cache-Control, { value: no-cache, as: equal } ]
+ - [ Content-Type, { value: application/json, as: equal } ]
+ - [ Server, { value: ATS, as: contains } ]
+ content:
+ encoding: plain
+ data: http://en.wikipedia.org/wiki/Main_Page
+ verify: { as: contains }
+
+ - client-request:
+ method: GET
+ url: /
+ version: '1.1'
+ headers:
+ fields:
+ - [ Host, fqdn6 ]
+ - [ uuid, 7 ]
+
+ proxy-response:
+ status: 200
+ headers:
+ fields:
+ - [ Content-Length, { value: 0, as: equal } ]
+ - [ Cache-Control, { value: no-cache, as: equal } ]
+ - [ Content-Type, { value: text/plain, as: equal } ]
+ - [ Server, { value: ATS, as: contains } ]
diff --git a/tests/gold_tests/pluginTest/statichit/statichit.test.py
b/tests/gold_tests/pluginTest/statichit/statichit.test.py
new file mode 100644
index 0000000000..35552d9976
--- /dev/null
+++ b/tests/gold_tests/pluginTest/statichit/statichit.test.py
@@ -0,0 +1,88 @@
+'''
+Verify correct statichit plugin behavior
+'''
+# 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.
+
+import os
+
+Test.Summary = '''
+Verify correct statichit plugin behavior
+'''
+
+Test.SkipUnless(Condition.PluginExists('statichit.so'),)
+
+
+class RemapData:
+ """Data for each remap rule"""
+
+ @staticmethod
+ def setup():
+ Test.Setup.Copy('small_body.txt', Test.RunDirectory)
+ RemapData.small_body_path = os.path.join(Test.RunDirectory,
'small_body.txt')
+
+ Test.Setup.Copy('story_16.json', Test.RunDirectory)
+ RemapData.json_body_path = os.path.join(Test.RunDirectory,
'story_16.json')
+
+ Test.Setup.Copy('empty.txt', Test.RunDirectory)
+ RemapData.empty_body_path = os.path.join(Test.RunDirectory,
'empty.txt')
+
+ def __init__(self, from_url, *args) -> None:
+ self.remap_from = from_url
+ self.plugin_args = args
+ self.body = RemapData.small_body_path
+
+ def bad_body(self):
+ self.body = 'invalid'
+ return self
+
+ def json_body(self):
+ self.body = RemapData.json_body_path
+ return self
+
+ def empty_body(self):
+ self.body = RemapData.empty_body_path
+ return self
+
+
+RemapData.setup()
+
+remap_data = [
+ RemapData('http://fqdn1'),
+ RemapData('http://fqdn2', 'max-age=123'),
+ RemapData('http://fqdn3', 'success-code=200', 'disable-exact',
'failure-code=222'),
+ RemapData('http://fqdn4', 'success-code=200',
'failure-code=412').bad_body(),
+ RemapData('http://fqdn5', 'success-code=200', 'failure-code=412',
"mime-type=application/json").json_body(),
+ RemapData('http://fqdn6', 'success-code=200',
'failure-code=222').empty_body()
+]
+
+ts = Test.MakeATSProcess('ts')
+
+ts.Disk.records_config.update({
+ "proxy.config.diags.debug.enabled": 1,
+ "proxy.config.diags.debug.tags": "statichit",
+})
+
+for d in remap_data:
+ arg_str = ''
+ for arg in d.plugin_args:
+ arg_str += ' @pparam=--' + arg
+ ts.Disk.remap_config.AddLine(f'map {d.remap_from} http://127.0.0.1/
@plugin=statichit.so @pparam=--file-path={d.body}{arg_str}')
+
+tr = Test.AddTestRun()
+p = tr.AddVerifierClientProcess('client', 'statichit.replay.yaml',
http_ports=[ts.Variables.port], other_args='--thread-limit 1')
+p.StartBefore(ts)
+p.StillRunningAfter = ts
diff --git a/tests/gold_tests/pluginTest/statichit/story_16.json
b/tests/gold_tests/pluginTest/statichit/story_16.json
new file mode 100644
index 0000000000..38e589636b
--- /dev/null
+++ b/tests/gold_tests/pluginTest/statichit/story_16.json
@@ -0,0 +1,395 @@
+{
+ "cases": [
+ {
+ "seqnum": 0,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "en.wikipedia.org"
+ },
+ {
+ ":path": "/"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept":
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "cookie": "centralnotice_bucket=1;
clicktracking-session=eJko6IiUcEm69ehQfaakQlJfiLy9lShNP;
mediaWiki.user.bucket%3Aext.articleFeedback-tracking=10%3Atrack;
mediaWiki.user.id=EM83jsjaqPzIMLwBTiKF3aLiiTKeweez;
mediaWiki.user.bucket%3Aext.articleFeedback-options=8%3Ashow"
+ }
+ ],
+ "wire":
"8286418c2d4bf8375356590c35cf64df847abcd07f66a281b0dae053fad0321aa49d13fda992a49685340c8a6adca7e28102ef7da9677b8171707f6a62293a9d810020004015309ac2ca7f2c05c5c153b0497ca589d34d1f43aeba0c41a4c7a98f33a69a3fdf9a68fa1d75d0620d263d4c79a68fbed00177febe58f9fbed00177b518b2d4b70ddf45abefb4005db90408721eaa8a4498f5788ea52d6b0e83772ff60ff3d216a4d83a2a3a4c42c51da4ea54c01fb5094189d5360c9d4d54cb20a8418f5405cbd4ee64370260a5c7cb3ec9463ebb28cb29b3fa7e8dd3e9d7f6a52590c3e46ea65ed416c5e3b49d4a95
[...]
+ },
+ {
+ "seqnum": 1,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "en.wikipedia.org"
+ },
+ {
+ ":path": "/wiki/Main_Page"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept":
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "cookie": "centralnotice_bucket=1;
clicktracking-session=eJko6IiUcEm69ehQfaakQlJfiLy9lShNP;
mediaWiki.user.bucket%3Aext.articleFeedback-tracking=10%3Atrack;
mediaWiki.user.id=EM83jsjaqPzIMLwBTiKF3aLiiTKeweez;
mediaWiki.user.bucket%3Aext.articleFeedback-options=8%3Ashow"
+ }
+ ],
+ "wire": "8286c3448b63c1ba998d0335516b1cc5c3c2c190c0bf"
+ },
+ {
+ "seqnum": 2,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "bits.wikimedia.org"
+ },
+ {
+ ":path": "/en.wikipedia.org/load.php"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "text/css,*/*;q=0.1"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Wed, 31 Oct 2012 17:52:04 GMT"
+ }
+ ],
+ "wire":
"8286418d8cc942fe0dd4d496430d73d937449360b52fe0dd4d596430d73d933141c722f5cf5fc5538e497ca582211f5f2c7cfdf6800b87c490c3739c9d29aee30c16a5fc1ba9ab2c861ae7b2663c1ba998d0335516b1cc5f6896e4593e94642a6a225410022502edc6c5700d298b46ff"
+ },
+ {
+ "seqnum": 3,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "bits.wikimedia.org"
+ },
+ {
+ ":path": "/en.wikipedia.org/load.php"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "text/css,*/*;q=0.1"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Thu, 01 Nov 2012 09:33:27 GMT"
+ }
+ ],
+ "wire":
"8286c2c1c8c0c690c5bf6896df3dbf4a002a693f75040089403f71966e09d53168df"
+ },
+ {
+ "seqnum": 4,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "bits.wikimedia.org"
+ },
+ {
+ ":path": "/en.wikipedia.org/load.php"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "*/*"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Sat, 03 Nov 2012 12:53:27 GMT"
+ }
+ ],
+ "wire":
"8286c3c2c95383f963e7c890c7c16896dc34fd280654d27eea0801128115c6d9b82754c5a37f"
+ },
+ {
+ "seqnum": 5,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "bits.wikimedia.org"
+ },
+ {
+ ":path": "/en.wikipedia.org/load.php"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "*/*"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Wed, 31 Oct 2012 17:52:04 GMT"
+ }
+ ],
+ "wire": "8286c5c4cbbfc990c8c2c1"
+ },
+ {
+ "seqnum": 6,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "bits.wikimedia.org"
+ },
+ {
+ ":path": "/en.wikipedia.org/load.php"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "*/*"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Thu, 01 Nov 2012 09:33:27 GMT"
+ }
+ ],
+ "wire": "8286c5c4cbbfc990c8c2c0"
+ },
+ {
+ "seqnum": 7,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "upload.wikimedia.org"
+ },
+ {
+ ":path": "/wikipedia/en/c/ca/Kanthirava_cropped.png"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "image/png,image/*;q=0.8,*/*;q=0.5"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Fri, 02 Nov 2012 23:46:59 GMT"
+ },
+ {
+ "if-none-match": "288bdb2fd5e5a4f7272f58fcb083a7e1"
+ }
+ ],
+ "wire":
"8286418fb6ba0e3917f06ea6a4b2186b9ec9bf449e63c1ba9ab2c861b05a9823041b198752673583ee388961ebacb22f5d537fcd539a352398ac5754df46a473158f9fbed00177bebe58f9fbed00176fcc90cbc56896c361be940094d27eea0801128266e34e5c6df53168df699713cf4724629646cad8da95d13a295b7a524607991ba50f"
+ },
+ {
+ "seqnum": 8,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "upload.wikimedia.org"
+ },
+ {
+ ":path":
"/wikipedia/commons/thumb/d/d2/Dancing_girl_ajanta_%28cropped%29.jpg/72px-Dancing_girl_ajanta_%28cropped%29.jpg"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "image/png,image/*;q=0.8,*/*;q=0.5"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Tue, 30 Oct 2012 17:37:15 GMT"
+ },
+ {
+ "if-none-match": "6e8d56df9be35494b4d9f0ea72ed1a3e"
+ }
+ ],
+ "wire":
"8286c244cf63c1ba9ab2c861b043d349ea43099eda636246241317c7510d54d14c6b28887d07524712a278961ebacb22a27d7e95ccc3a2afcad7c7510d54d14c6b28887d07524712a278961ebacb22a27d7e95cdd1c1cf90cec86896df697e94640a6a225410022502edc65db816d4c5a37f699770af48db924afc6565b69f6a36a47e50146e88b2046c97"
+ },
+ {
+ "seqnum": 9,
+ "headers": [
+ {
+ ":method": "GET"
+ },
+ {
+ ":scheme": "http"
+ },
+ {
+ ":authority": "bits.wikimedia.org"
+ },
+ {
+ ":path": "/en.wikipedia.org/load.php"
+ },
+ {
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0)
Gecko/20100101 Firefox/16.0"
+ },
+ {
+ "accept": "*/*"
+ },
+ {
+ "accept-language": "en-US,en;q=0.5"
+ },
+ {
+ "accept-encoding": "gzip, deflate"
+ },
+ {
+ "connection": "keep-alive"
+ },
+ {
+ "referer": "http://en.wikipedia.org/wiki/Main_Page"
+ },
+ {
+ "if-modified-since": "Sat, 03 Nov 2012 12:53:27 GMT"
+ }
+ ],
+ "wire": "8286cdccd3c7d190d0cac6"
+ }
+ ],
+ "description": "Apache Traffic Server"
+}