You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2019/11/08 21:08:14 UTC

[trafficserver] 04/04: tests: Adds autest for WebSocket mappings

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

zwoop pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 3115d02c16286e4180dfca7261b0e65f4ac3039c
Author: Randall Meyer <rr...@apache.org>
AuthorDate: Mon Nov 4 18:08:35 2019 -0800

    tests: Adds autest for WebSocket mappings
    
    (cherry picked from commit 5902d863869e7cc5147866d96bb8efe30b241668)
---
 .../remap/gold/remap-ws-upgrade-400.gold           |  7 ++
 tests/gold_tests/remap/gold/remap-ws-upgrade.gold  | 11 ++++
 tests/gold_tests/remap/remap_ws.test.py            | 77 ++++++++++++++++++++++
 3 files changed, 95 insertions(+)

diff --git a/tests/gold_tests/remap/gold/remap-ws-upgrade-400.gold b/tests/gold_tests/remap/gold/remap-ws-upgrade-400.gold
new file mode 100644
index 0000000..a46a249
--- /dev/null
+++ b/tests/gold_tests/remap/gold/remap-ws-upgrade-400.gold
@@ -0,0 +1,7 @@
+``
+> GET /chat HTTP/1.1
+> Host: ``
+> User-Agent: curl/``
+``
+< HTTP/1.1 400 Invalid Upgrade Request
+``
diff --git a/tests/gold_tests/remap/gold/remap-ws-upgrade.gold b/tests/gold_tests/remap/gold/remap-ws-upgrade.gold
new file mode 100644
index 0000000..317fee1
--- /dev/null
+++ b/tests/gold_tests/remap/gold/remap-ws-upgrade.gold
@@ -0,0 +1,11 @@
+``
+> GET /chat HTTP/1.1
+> Host: ``
+> User-Agent: curl/``
+``
+< HTTP/1.1 101 Switching Protocols
+< Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
+< Date: ``
+< Connection: Upgrade
+< Upgrade: websocket
+``
diff --git a/tests/gold_tests/remap/remap_ws.test.py b/tests/gold_tests/remap/remap_ws.test.py
new file mode 100644
index 0000000..5379c4d
--- /dev/null
+++ b/tests/gold_tests/remap/remap_ws.test.py
@@ -0,0 +1,77 @@
+'''
+'''
+#  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 a basic remap of a websocket connections
+'''
+
+Test.ContinueOnFail = True
+
+ts = Test.MakeATSProcess("ts", select_ports=False)
+server = Test.MakeOriginServer("server")
+
+testName = "Test WebSocket Remaps"
+request_header = {"headers": "GET /chat HTTP/1.1\r\nHost: www.example.com\r\nUpgrade: websocket\r\nConnection: Upgrade\r\n\r\n",
+                  "body": None}
+response_header = {"headers": "HTTP/1.1 101 OK\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n\r\n",
+                   "body": None}
+server.addResponse("sessionlog.json", request_header, response_header)
+
+ts.addSSLfile("ssl/server.pem")
+ts.addSSLfile("ssl/server.key")
+
+ts.Disk.records_config.update({
+    'proxy.config.ssl.server.cert.path': '{0}'.format(ts.Variables.SSLDir),
+    'proxy.config.ssl.server.private_key.path': '{0}'.format(ts.Variables.SSLDir),
+    'proxy.config.http.server_ports': '{0} {1}:proto=http2;http:ssl'.format(ts.Variables.port, ts.Variables.ssl_port),
+})
+
+ts.Disk.remap_config.AddLines([
+    'map ws://www.example.com:{1} ws://127.0.0.1:{0}'.format(server.Variables.Port, ts.Variables.port),
+    'map wss://www.example.com:{1} ws://127.0.0.1:{0}'.format(server.Variables.Port, ts.Variables.ssl_port)
+])
+
+ts.Disk.ssl_multicert_config.AddLine(
+    'dest_ip=* ssl_cert_name=server.pem ssl_key_name=server.key'
+)
+
+# wss mapping
+tr = Test.AddTestRun()
+tr.Processes.Default.StartBefore(server)
+tr.Processes.Default.StartBefore(Test.Processes.ts, ready=1)
+tr.Processes.Default.Command = 'curl --max-time 2 -v -s -q -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" -H "Sec-WebSocket-Version: 13" --http1.1 --resolve www.example.com:{0}:127.0.0.1 -k https://www.example.com:{0}/chat'.format(ts.Variables.ssl_port)
+tr.Processes.Default.ReturnCode = 28
+tr.Processes.Default.Streams.stderr = "gold/remap-ws-upgrade.gold"
+tr.StillRunningAfter = server
+tr.StillRunningAfter = ts
+
+# ws mapping
+tr = Test.AddTestRun()
+tr.Processes.Default.Command = 'curl --max-time 2 -v -s -q -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" -H "Sec-WebSocket-Version: 13" --http1.1 --resolve www.example.com:{0}:127.0.0.1 -k http://www.example.com:{0}/chat'.format(ts.Variables.port)
+tr.Processes.Default.ReturnCode = 28
+tr.Processes.Default.Streams.stderr = "gold/remap-ws-upgrade.gold"
+tr.StillRunningAfter = server
+tr.StillRunningAfter = ts
+
+# Missing required headers (should result in 400)
+tr = Test.AddTestRun()
+tr.Processes.Default.Command = 'curl --max-time 2 -v -s -q -H "Connection: Upgrade" -H "Upgrade: websocket" --http1.1 --resolve www.example.com:{0}:127.0.0.1 -k http://www.example.com:{0}/chat'.format(ts.Variables.port)
+tr.Processes.Default.ReturnCode = 0
+tr.Processes.Default.Streams.stderr = "gold/remap-ws-upgrade-400.gold"
+tr.StillRunningAfter = server
+tr.StillRunningAfter = ts