blob: 7408566dedffb6f3a843d803b8b282e8da7b26e5 [file]
'''Verify ts.client_response.set_error_resp functionality.'''
# 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 = '''
Test lua functionality
'''
Test.SkipUnless(Condition.PluginExists('tslua.so'),)
class TestLuaSetErrorResponse:
'''Verify ts.client_response.set_error_resp functionality.'''
replay_file: str = 'set_error_response.replay.yaml'
lua_script: str = 'set_error_response.lua'
def __init__(self):
tr = Test.AddTestRun("Lua ts.client_response.set_error_resp")
self._configure_dns(tr)
self._configure_server(tr)
self._configure_ts(tr)
self._configure_client(tr)
def _configure_dns(self, tr: 'TestRun') -> 'Process':
'''Configure the DNS server.
:param tr: The test run to configure the DNS server in.
:return: The newly created DNS process.
'''
dns = tr.MakeDNServer("dns", default='127.0.0.1')
self._dns = dns
return dns
def _configure_server(self, tr: 'TestRun') -> 'Process':
'''Configure the origin server.
:param tr: The test run to configure the server in.
:return: The newly created server process.
'''
server = tr.AddVerifierServerProcess("server", self.replay_file)
self._server = server
return server
def _configure_ts(self, tr: 'TestRun') -> 'Process':
'''Configure the ATS process.
:param tr: The test run to configure the ATS process in.
:return: The newly created ATS process.
'''
ts = tr.MakeATSProcess("ts", enable_cache=False)
self._ts = ts
ts.Setup.Copy(self.lua_script, ts.Variables.CONFIGDIR)
port = self._server.Variables.http_port
ts.Disk.remap_config.AddLine(f'map / http://backend.example.com:{port}/ @plugin=tslua.so @pparam={self.lua_script}')
ts.Disk.records_config.update(
{
'proxy.config.diags.debug.enabled': 1,
'proxy.config.diags.debug.tags': 'ts_lua|http',
'proxy.config.dns.nameservers': f"127.0.0.1:{self._dns.Variables.Port}",
'proxy.config.dns.resolv_conf': 'NULL'
})
return ts
def _configure_client(self, tr: 'TestRun') -> 'Process':
'''Configure the client process.
:param tr: The test run to configure the client process in.
:return: The newly created client process.
'''
port = self._ts.Variables.port
client = tr.AddVerifierClientProcess('client', self.replay_file, http_ports=[port])
self._client = client
client.StartBefore(self._server)
client.StartBefore(self._dns)
client.StartBefore(self._ts)
client.Streams.All += Testers.ContainsExpression(
'HTTP/1.1 418', 'The modified HTTP 418 response should be received by the client.')
client.Streams.All += Testers.ContainsExpression('bad luck', 'The modified HTTP response body should contain "bad luck".')
return client
TestLuaSetErrorResponse()