blob: 80a7d44dcce40a3705e028f8121201a4c7382976 [file]
'''
'''
# 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 = 'Testing ATS inactivity timeout'
Test.SkipUnless(
Condition.HasCurlFeature('http2'), Condition.HasProgram("telnet", "Need telnet to shutdown when server shuts down tcp"),
Condition.HasProgram("nc", "Need nc to send data to server"))
Test.SkipIf(Condition.CurlUsingUnixDomainSocket())
ts = Test.MakeATSProcess("ts", enable_tls=True)
ts.addSSLfile("../tls/ssl/server.pem")
ts.addSSLfile("../tls/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.transaction_no_activity_timeout_in': 6,
'proxy.config.http.accept_no_activity_timeout': 2,
'proxy.config.net.default_inactivity_timeout': 10,
'proxy.config.net.defer_accept': 0 # Must turn off defer accept to test the raw TCP case
})
ts.Disk.ssl_multicert_yaml.AddLines(
"""
ssl_multicert:
- dest_ip: "*"
ssl_cert_name: server.pem
ssl_key_name: server.key
""".split("\n"))
# case 1 TLS with no data
tr = Test.AddTestRun("tr")
tr.Setup.Copy("time_client.sh")
tr.Processes.Default.StartBefore(ts)
tr.Processes.Default.Command = 'sh ./time_client.sh \'openssl s_client -ign_eof -connect 127.0.0.1:{0}\''.format(
ts.Variables.ssl_port)
tr.Processes.Default.Streams.stdout = Testers.ContainsExpression("Accept timeout", "Request should fail from the accept timeout")
# case 2 TLS with incomplete request header
tr2 = Test.AddTestRun("tr")
tr2.Processes.Default.Command = 'echo "GET /.html HTTP/1.1" | sh ./time_client.sh \'openssl s_client -ign_eof -connect 127.0.0.1:{0}\''.format(
ts.Variables.ssl_port)
tr2.Processes.Default.Streams.stdout = Testers.ContainsExpression(
"Transaction inactivity timeout", "Request should fail with transaction inactivity timeout")
# case 3 TCP with no data
tr3 = Test.AddTestRun("tr")
tr3.Processes.Default.Command = 'sh ./time_client.sh \'telnet 127.0.0.1 {0}\''.format(ts.Variables.port)
tr3.Processes.Default.Streams.stdout = Testers.ContainsExpression("Accept timeout", "Request should fail from the accept timeout")
# case 4 TCP with incomplete request header
tr4 = Test.AddTestRun("tr")
tr4.Setup.Copy("create_request.sh")
tr4.Processes.Default.Command = 'sh ./time_client.sh \'nc -c ./create_request.sh 127.0.0.1 {0}\''.format(ts.Variables.port)
tr4.Processes.Default.Streams.stdout = Testers.ContainsExpression(
"Transaction inactivity timeout", "Request should fail with transaction inactivity timeout")