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 84f3177 Autest - Proxy Verifier Extension, add context template
$-base string substitution in the replay file. (#7866)
84f3177 is described below
commit 84f3177f5c0a23ed65418e0a14dab6d0d655a6ec
Author: Damian Meden <[email protected]>
AuthorDate: Mon May 24 19:02:22 2021 +0100
Autest - Proxy Verifier Extension, add context template $-base string
substitution in the replay file. (#7866)
---
.../autest-site/verifier_client.test.ext | 26 +++++++++++++++---
tests/gold_tests/autest-site/verifier_common.py | 24 +++++++++++++++++
.../autest-site/verifier_server.test.ext | 31 +++++++++++++++++-----
3 files changed, 70 insertions(+), 11 deletions(-)
diff --git a/tests/gold_tests/autest-site/verifier_client.test.ext
b/tests/gold_tests/autest-site/verifier_client.test.ext
index cbe4c02..52d676a 100755
--- a/tests/gold_tests/autest-site/verifier_client.test.ext
+++ b/tests/gold_tests/autest-site/verifier_client.test.ext
@@ -19,12 +19,13 @@ Implement the Proxy Verifier client extensions.
import os
-from verifier_common import create_address_argument
+from verifier_common import create_address_argument,
substitute_context_in_replay_file
def _configure_client(obj, process, name, replay_path, http_ports=None,
https_ports=None, http3_ports=None, keys=None,
- ssl_cert='', ca_cert='', verbose=True, other_args=''):
+ ssl_cert='', ca_cert='', verbose=True, other_args='',
+ context=None):
"""
Configure the process for running the verifier-client.
@@ -53,6 +54,10 @@ def _configure_client(obj, process, name, replay_path,
http_ports=None,
# Configure the verifier-client command line arguments.
command = "verifier-client run "
if replay_path:
+ if context:
+ # replace the passed replay file with the new one generated using
the passed
+ # context
+ replay_path = substitute_context_in_replay_file(process,
replay_path, context)
# Create a copy of the replay directory in the run directory.
run_replay_path = os.path.join(client_dir,
os.path.basename(replay_path))
process.Setup.Copy(replay_path, run_replay_path, CopyLogic.SoftFiles)
@@ -133,7 +138,8 @@ def _configure_client(obj, process, name, replay_path,
http_ports=None,
def AddVerifierClientProcess(run, name, replay_path, http_ports=None,
https_ports=None, http3_ports=None, keys=None,
- ssl_cert='', ca_cert='', verbose=True,
other_args=''):
+ ssl_cert='', ca_cert='', verbose=True,
other_args='',
+ context=None):
"""
Set the Default process of the test run to a verifier-client Process.
@@ -163,15 +169,27 @@ def AddVerifierClientProcess(run, name, replay_path,
http_ports=None,
other_args: (str) Any other arbitrary options to pass to
verifier-client.
+ context: Any dictionary-like object with keys that match the
placeholders
+ in the replay file.
+ Template strings support $-based substitutions in the replay
file.
+ You can refer to
https://docs.python.org/3/library/string.html#template-strings
+ for more information how to add template strings to the
replay file.
Returns:
The newly constructed verifier-client for the test run, which is also
the
Default Process of the test run.
+ Throws:
+ ValueError:
+ If context substitution is expected to be done but a directory is
passed as a
+ replay_path.
+ OSError in case of any issues related to I/O error, ie: File Not found
for the replay
+ file when a context substitution is expected.
+ KeyError if placeholders are missing from the mapping between context
and the replay file.
"""
p = run.Processes.Default
_configure_client(run, p, name, replay_path, http_ports, https_ports,
http3_ports, keys, ssl_cert, ca_cert, verbose,
- other_args)
+ other_args, context)
return p
diff --git a/tests/gold_tests/autest-site/verifier_common.py
b/tests/gold_tests/autest-site/verifier_common.py
index e15098e..946e9c2 100644
--- a/tests/gold_tests/autest-site/verifier_common.py
+++ b/tests/gold_tests/autest-site/verifier_common.py
@@ -16,6 +16,9 @@ Common utilities for the Proxy Verifier extensions.
# 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
+import tempfile
+from string import Template
def create_address_argument(ports):
@@ -33,3 +36,24 @@ def create_address_argument(ports):
argument += "127.0.0.1:{}".format(port)
argument += '"'
return argument
+
+
+def substitute_context_in_replay_file(process, replay_path, context):
+ '''
+ Perform substitution base on the passed context dict.
+ This function will return the new replay_path file
+ '''
+ # Only files for now
+ if os.path.isdir(replay_path):
+ raise ValueError(f"Mapping substitution not supported for
directories.")
+
+ with open(os.path.join(process.TestDirectory, replay_path), 'r') as
replay_file:
+ replay_template = Template(replay_file.read())
+ replay_content = replay_template.substitute(context)
+ tf = tempfile.NamedTemporaryFile(delete=False,
dir=process.RunDirectory, suffix=f"_{os.path.basename(replay_path)}")
+ replay_path = tf.name
+ with open(replay_path, "w") as new_replay_file:
+ new_replay_file.write(replay_content)
+
+ # use this as replay_path
+ return replay_path
diff --git a/tests/gold_tests/autest-site/verifier_server.test.ext
b/tests/gold_tests/autest-site/verifier_server.test.ext
index 1ad922d..96240de 100755
--- a/tests/gold_tests/autest-site/verifier_server.test.ext
+++ b/tests/gold_tests/autest-site/verifier_server.test.ext
@@ -18,13 +18,14 @@ Implement the Proxy Verifier test server extension.
# limitations under the License.
import os
+
from ports import get_port
-from verifier_common import create_address_argument
+from verifier_common import create_address_argument,
substitute_context_in_replay_file
def _configure_server(obj, process, name, replay_path, http_ports=None,
https_ports=None,
http3_ports=None, ssl_cert='', ca_cert='', verbose=True,
- other_args=''):
+ other_args='', context=None):
"""
Configure the provided process to run a verifier-server command.
@@ -119,8 +120,13 @@ def _configure_server(obj, process, name, replay_path,
http_ports=None, https_po
command += ' --ca-certs "{}" '.format(run_ca_cert)
if replay_path:
- # Create a copy of the replay directory in the run directory.
+ if context:
+ # replace the passed replay file with the new one generated using
the passed
+ # context
+ replay_path = substitute_context_in_replay_file(process,
replay_path, context)
+
run_replay_path = os.path.join(server_dir,
os.path.basename(replay_path))
+ # Create a copy of the replay directory in the run directory.
process.Setup.Copy(replay_path, run_replay_path, CopyLogic.SoftFiles)
command += "{} ".format(run_replay_path)
@@ -141,7 +147,7 @@ def _configure_server(obj, process, name, replay_path,
http_ports=None, https_po
def MakeVerifierServerProcess(test, name, replay_path, http_ports=None,
https_ports=None, http3_ports=None, ssl_cert='',
- ca_cert='', verbose=True, other_args=''):
+ ca_cert='', verbose=True, other_args='',
context=None):
"""
Create a verifier-server process for the Test.
@@ -174,19 +180,30 @@ def MakeVerifierServerProcess(test, name, replay_path,
http_ports=None,
other_args: (str) Any other arbitrary options to pass to
verifier-server.
+ context: Any dictionary-like object with keys that match the
placeholders
+ in the replay file.
+ Template strings support $-based substitutions in the
+ replay file.
+ You can refer to
https://docs.python.org/3/library/string.html#template-strings
+ for more information how to add template strings to the
replay file.
Raises:
ValueError if https_ports is non-empty and a valid ssl_cert could not
be derived.
+ If context substitution is expected to be done but a directory is
passed as a
+ replay_path.
+ OSError in case of any issues related to I/O error, ie: File Not found
for the replay
+ file when a context substitution is expected.
+ KeyError if placeholders are missing from the mapping between context
and the replay file.
"""
server = test.Processes.Process(name)
_configure_server(test, server, name, replay_path, http_ports, https_ports,
- http3_ports, ssl_cert, ca_cert, verbose, other_args)
+ http3_ports, ssl_cert, ca_cert, verbose, other_args,
context)
return server
def AddVerifierServerProcess(run, name, replay_path, http_ports=None,
https_ports=None, http3_ports=None, ssl_cert='',
- ca_cert='', verbose=True, other_args=''):
+ ca_cert='', verbose=True, other_args='',
context=None):
"""
Create a verifier-server process and configure it for the given TestRun.
@@ -201,7 +218,7 @@ def AddVerifierServerProcess(run, name, replay_path,
http_ports=None,
server = run.Processes.Process(name)
_configure_server(run, server, name, replay_path, http_ports, https_ports,
- http3_ports, ssl_cert, ca_cert, verbose, other_args)
+ http3_ports, ssl_cert, ca_cert, verbose, other_args,
context)
client = run.Processes.Default
client.StartBefore(server)