This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch 9.2.x in repository https://gitbox.apache.org/repos/asf/trafficserver.git
The following commit(s) were added to refs/heads/9.2.x by this push: new 2c78bc5ef0 fix: require RSRC_CLIENT_REQUEST_HEADERS in ConditionMethod (#9976) 2c78bc5ef0 is described below commit 2c78bc5ef07b60773c78b5553ead09e70df8fe5f Author: Katsutoshi Ikenoya <kiken...@yahoo-corp.jp> AuthorDate: Sun Jul 23 07:40:13 2023 +0900 fix: require RSRC_CLIENT_REQUEST_HEADERS in ConditionMethod (#9976) (cherry picked from commit 195ef2f2c1e23dc9cafe60785b23fbec4a1a0a3b) --- plugins/header_rewrite/conditions.cc | 2 + .../gold/header_rewrite_cond_method.gold | 8 +++ .../header_rewrite_cond_method.test.py | 73 ++++++++++++++++++++++ .../header_rewrite/rules/rule_cond_method.conf | 24 +++++++ 4 files changed, 107 insertions(+) diff --git a/plugins/header_rewrite/conditions.cc b/plugins/header_rewrite/conditions.cc index 11760f107c..9394ef04d1 100644 --- a/plugins/header_rewrite/conditions.cc +++ b/plugins/header_rewrite/conditions.cc @@ -90,6 +90,8 @@ ConditionMethod::initialize(Parser &p) match->set(p.get_arg()); _matcher = match; + + require_resources(RSRC_CLIENT_REQUEST_HEADERS); } bool diff --git a/tests/gold_tests/pluginTest/header_rewrite/gold/header_rewrite_cond_method.gold b/tests/gold_tests/pluginTest/header_rewrite/gold/header_rewrite_cond_method.gold new file mode 100644 index 0000000000..3fb44fbfe3 --- /dev/null +++ b/tests/gold_tests/pluginTest/header_rewrite/gold/header_rewrite_cond_method.gold @@ -0,0 +1,8 @@ +`` +> `` http://www.example.com/ HTTP/1.1 +> Host: www.example.com +`` +< HTTP/1.1 200 OK +`` +< Via:`` +`` diff --git a/tests/gold_tests/pluginTest/header_rewrite/header_rewrite_cond_method.test.py b/tests/gold_tests/pluginTest/header_rewrite/header_rewrite_cond_method.test.py new file mode 100644 index 0000000000..2e6ae69f37 --- /dev/null +++ b/tests/gold_tests/pluginTest/header_rewrite/header_rewrite_cond_method.test.py @@ -0,0 +1,73 @@ +''' +''' +# 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. + +Test.Summary = ''' +Test header_rewrite with METHOD conditions and operators. +''' + +Test.ContinueOnFail = True +# Define default ATS +ts = Test.MakeATSProcess("ts") +server = Test.MakeOriginServer("server") + +Test.testName = "header_rewrite_method_condition" +request_get = {"headers": "GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n", "timestamp": "1469733493.993", "body": ""} +request_delete = {"headers": "DELETE / HTTP/1.1\r\nHost: www.example.com\r\n\r\n", "timestamp": "1469733493.993", "body": ""} +# expected response from the origin server +response = {"headers": "HTTP/1.1 200 OK\r\nConnection: close\r\n\r\n", "timestamp": "1469733493.993", "body": ""} + +# add response to the server dictionary +session_file = "sessionfile.log" +server.addResponse(session_file, request_get, response) +server.addResponse(session_file, request_delete, response) +ts.Disk.records_config.update({ + 'proxy.config.diags.debug.enabled': 1, + 'proxy.config.diags.debug.tags': 'header.*', + 'proxy.config.http.insert_response_via_str': 0, +}) +# The following rule inserts a via header if the request method is a GET or DELETE +conf_name = "rule_cond_method.conf" +ts.Setup.CopyAs('rules/{0}'.format(conf_name), Test.RunDirectory) +ts.Disk.plugin_config.AddLine( + 'header_rewrite.so {0}/{1}'.format(Test.RunDirectory, conf_name) +) +ts.Disk.remap_config.AddLine( + 'map http://www.example.com http://127.0.0.1:{0}'.format(server.Variables.Port) +) + +# Test method in READ_REQUEST_HDR_HOOK. +expected_output = "gold/header_rewrite_cond_method.gold" +expected_log = "gold/header_rewrite-tag.gold" +tr = Test.AddTestRun() +tr.Processes.Default.Command = 'curl --proxy 127.0.0.1:{0} "http://www.example.com" -H "Proxy-Connection: keep-alive" --verbose'.format( + ts.Variables.port) +tr.Processes.Default.ReturnCode = 0 +tr.Processes.Default.StartBefore(server, ready=When.PortOpen(server.Variables.Port)) +tr.Processes.Default.StartBefore(Test.Processes.ts) +tr.Processes.Default.Streams.stderr = expected_output +tr.StillRunningAfter = server +ts.Disk.traffic_out.Content = expected_log + +# Test method in SEND_REQUEST_HDR_HOOK. +tr = Test.AddTestRun() +tr.Processes.Default.Command = 'curl --request DELETE --proxy 127.0.0.1:{0} "http://www.example.com" -H "Proxy-Connection: keep-alive" --verbose'.format( + ts.Variables.port) +tr.Processes.Default.ReturnCode = 0 +tr.Processes.Default.Streams.stderr = expected_output +tr.StillRunningAfter = server +ts.Disk.traffic_out.Content = expected_log diff --git a/tests/gold_tests/pluginTest/header_rewrite/rules/rule_cond_method.conf b/tests/gold_tests/pluginTest/header_rewrite/rules/rule_cond_method.conf new file mode 100644 index 0000000000..deb77ab539 --- /dev/null +++ b/tests/gold_tests/pluginTest/header_rewrite/rules/rule_cond_method.conf @@ -0,0 +1,24 @@ +# +# 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. + +cond %{READ_REQUEST_HDR_HOOK} +cond %{METHOD} =GET +set-config proxy.config.http.insert_response_via_str 1 [L] + +cond %{SEND_REQUEST_HDR_HOOK} +cond %{METHOD} =DELETE +set-config proxy.config.http.insert_response_via_str 1 [L]