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 b422872  Adds autest to test error cases loading ssl_multicert.config 
(#8532)
b422872 is described below

commit b422872c50ef2952bf969e91cb7b015d1ceed1c4
Author: Randall Meyer <[email protected]>
AuthorDate: Tue Nov 23 09:38:05 2021 -0800

    Adds autest to test error cases loading ssl_multicert.config (#8532)
    
    With this test in place, we might've caught #8515 and #8256 earlier
    
    (cherry picked from commit 7bc025c13ae4b2e842d379df551a153f1ae0bff7)
---
 tests/gold_tests/tls/ssl_multicert_loader.test.py | 113 ++++++++++++++++++++++
 1 file changed, 113 insertions(+)

diff --git a/tests/gold_tests/tls/ssl_multicert_loader.test.py 
b/tests/gold_tests/tls/ssl_multicert_loader.test.py
new file mode 100644
index 0000000..1c79e7c
--- /dev/null
+++ b/tests/gold_tests/tls/ssl_multicert_loader.test.py
@@ -0,0 +1,113 @@
+#  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 reloading ssl_multicert.config with errors and keeping around the old ssl 
config structure
+'''
+
+sni_domain = 'example.com'
+
+ts = Test.MakeATSProcess("ts", command="traffic_manager", select_ports=True, 
enable_tls=True)
+server = Test.MakeOriginServer("server")
+server2 = Test.MakeOriginServer("server3")
+request_header = {"headers": f"GET / HTTP/1.1\r\nHost: {sni_domain}\r\n\r\n", 
"timestamp": "1469733493.993", "body": ""}
+
+response_header = {"headers": "HTTP/1.1 200 OK\r\nConnection: close\r\n\r\n", 
"timestamp": "1469733493.993", "body": ""}
+server.addResponse("sessionlog.json", request_header, response_header)
+
+ts.Disk.records_config.update({
+    'proxy.config.ssl.server.cert.path': f'{ts.Variables.SSLDir}',
+    'proxy.config.ssl.server.private_key.path': f'{ts.Variables.SSLDir}',
+})
+
+ts.addDefaultSSLFiles()
+
+ts.Disk.remap_config.AddLine(
+    f'map / http://127.0.0.1:{server.Variables.Port}'
+)
+
+ts.Disk.ssl_multicert_config.AddLine(
+    'dest_ip=* ssl_cert_name=server.pem ssl_key_name=server.key'
+)
+
+tr = Test.AddTestRun("ensure we can connect for SNI $sni_domain")
+tr.Processes.Default.StartBefore(Test.Processes.ts)
+tr.Processes.Default.StartBefore(server)
+tr.StillRunningAfter = ts
+tr.StillRunningAfter = server
+tr.Processes.Default.Command = f"curl -q -s -v -k --resolve 
'{sni_domain}:{ts.Variables.ssl_port}:127.0.0.1' 
https://{sni_domain}:{ts.Variables.ssl_port}";
+tr.Processes.Default.ReturnCode = 0
+tr.Processes.Default.Streams.stdout = Testers.ExcludesExpression("Could Not 
Connect", "Check response")
+tr.Processes.Default.Streams.stderr = 
Testers.IncludesExpression(f"CN={sni_domain}", "Check response")
+
+
+tr2 = Test.AddTestRun("Update config files")
+# Update the configs
+sslcertpath = ts.Disk.ssl_multicert_config.AbsPath
+
+tr2.Disk.File(sslcertpath, id="ssl_multicert_config", typename="ats:config")
+tr2.Disk.ssl_multicert_config.AddLines([
+    'ssl_cert_name=server_does_not_exist.pem 
ssl_key_name=server_does_not_exist.key',
+    'dest_ip=* ssl_cert_name=server.pem_doesnotexist ssl_key_name=server.key',
+])
+tr2.StillRunningAfter = ts
+tr2.StillRunningAfter = server
+tr2.Processes.Default.Command = 'echo Updated configs'
+tr2.Processes.Default.Env = ts.Env
+tr2.Processes.Default.ReturnCode = 0
+
+tr2reload = Test.AddTestRun("Reload config")
+tr2reload.StillRunningAfter = ts
+tr2reload.StillRunningAfter = server
+tr2reload.Processes.Default.Command = 'traffic_ctl config reload'
+tr2reload.Processes.Default.Env = ts.Env
+tr2reload.Processes.Default.ReturnCode = 0
+ts.Disk.diags_log.Content = Testers.ContainsExpression('ERROR: ', 'ERROR')
+
+# Reload of ssl_multicert.config should fail, BUT the old config structure
+# should be in place to successfully answer for the test domain
+tr3 = Test.AddTestRun("Make request again for $sni_domain")
+# Wait for the reload to complete
+tr3.Processes.Default.StartBefore(server2, 
ready=When.FileContains(ts.Disk.diags_log.Name, 'failed to load certificate ', 
1))
+tr3.StillRunningAfter = ts
+tr3.StillRunningAfter = server
+tr3.Processes.Default.Command = f"curl -q -s -v -k --resolve 
'{sni_domain}:{ts.Variables.ssl_port}:127.0.0.1' 
https://{sni_domain}:{ts.Variables.ssl_port}";
+tr3.Processes.Default.ReturnCode = 0
+tr3.Processes.Default.Streams.stdout = Testers.ExcludesExpression("Could Not 
Connect", "Check response")
+tr3.Processes.Default.Streams.stderr = 
Testers.IncludesExpression(f"CN={sni_domain}", "Check response")
+
+
+##########################################################################
+# Ensure ATS fails/exits when non-existent cert is specified
+# Also, not explicitly setting 
proxy.config.ssl.server.multicert.exit_on_load_fail
+# to catch if the current default (1) changes in the future
+
+ts2 = Test.MakeATSProcess("ts2", command="traffic_manager", select_ports=True, 
enable_tls=True)
+ts2.Disk.ssl_multicert_config.AddLines([
+    'dest_ip=* ssl_cert_name=server.pem_doesnotexist ssl_key_name=server.key',
+])
+
+tr4 = Test.AddTestRun()
+tr4.Processes.Default.Command = 'echo Waiting'
+tr4.Processes.Default.ReturnCode = 0
+tr4.Processes.Default.StartBefore(ts2)
+
+ts2.ReturnCode = 2
+ts2.Ready = 0  # Need this to be 0 because we are testing shutdown, this is to 
make autest not think ats went away for a bad reason.
+ts2.Streams.All = Testers.ExcludesExpression(
+    'Traffic Server is fully initialized',
+    'process should fail when invalid certificate specified')
+ts2.Disk.diags_log.Content = Testers.IncludesExpression('FATAL: failed to load 
SSL certificate file', 'check diags.log"')

Reply via email to