2014-07-24 07:16:50 -04:00
|
|
|
from misc.colour_terminal import print_green
|
|
|
|
from server.http.http_server import HTTPd, HTTPSd
|
|
|
|
from test.base_test import BaseTest, HTTP, HTTPS
|
|
|
|
|
|
|
|
|
|
|
|
class HTTPTest(BaseTest):
|
|
|
|
|
|
|
|
""" Class for HTTP Tests. """
|
|
|
|
|
2014-08-08 01:54:08 -04:00
|
|
|
# Temp Notes: It is expected that when pre-hook functions are executed,
|
|
|
|
# only an empty test-dir exists. pre-hook functions are executed just prior
|
|
|
|
# to the call to Wget is made. post-hook functions will be executed
|
|
|
|
# immediately after the call to Wget returns.
|
2014-07-24 07:16:50 -04:00
|
|
|
|
|
|
|
def __init__(self,
|
|
|
|
name="Unnamed Test",
|
|
|
|
pre_hook=None,
|
|
|
|
test_params=None,
|
|
|
|
post_hook=None,
|
Enhancements in testsuite engine + new HSTS test.
* testenv/Makefile.am: added new test 'Test-hsts.py'.
* testenv/Test-hsts.py: new test for HSTS.
* testenv/conf/domains.py: new hook to override domain list.
* testenv/test/base_test.py: (__init__): new optional parameter
for tests 'req_protocols'.
(get_domain_addr): set the instance variables 'addr' and 'port'.
Return address as an array (domain, port) instead of string.
(gen_cmd_line): take into account domain and port.
* testenv/test/http_test.py (__init__): new optional parameter
'req_protocols'.
(setup): new function. Call to server_setup() decoupled from
begin() and moved here.
(begin): call to superclass to maintain backward compatibility.
Removed call to server_setup().
This patch adds a new parameter to the test suite called 'req_protocols',
and a new function called 'setup'. The ability for tests to be able to set some
extra parameters such as the actual requested protocols (with 'req_protocols')
became obvious when support for HSTS was added to Wget, where the requested URI
and the actual executed URI do not have to be the same. This new parameter is optional
and if not specified, the test suite behaves as before. Also, the new function 'setup'
is provided as a means to start the test HTTP server, but not launch the test yet
(this is done when calling 'begin', as usual), in case we want to query the address
and port in which the test server listens. If 'setup' is not called, it is automatically
invoked when calling 'begin'. With these measures, we preserve backward-compatibility with
existing tests.
2015-07-05 14:04:42 -04:00
|
|
|
protocols=(HTTP,),
|
|
|
|
req_protocols=None):
|
2014-07-24 07:16:50 -04:00
|
|
|
super(HTTPTest, self).__init__(name,
|
|
|
|
pre_hook,
|
|
|
|
test_params,
|
|
|
|
post_hook,
|
Enhancements in testsuite engine + new HSTS test.
* testenv/Makefile.am: added new test 'Test-hsts.py'.
* testenv/Test-hsts.py: new test for HSTS.
* testenv/conf/domains.py: new hook to override domain list.
* testenv/test/base_test.py: (__init__): new optional parameter
for tests 'req_protocols'.
(get_domain_addr): set the instance variables 'addr' and 'port'.
Return address as an array (domain, port) instead of string.
(gen_cmd_line): take into account domain and port.
* testenv/test/http_test.py (__init__): new optional parameter
'req_protocols'.
(setup): new function. Call to server_setup() decoupled from
begin() and moved here.
(begin): call to superclass to maintain backward compatibility.
Removed call to server_setup().
This patch adds a new parameter to the test suite called 'req_protocols',
and a new function called 'setup'. The ability for tests to be able to set some
extra parameters such as the actual requested protocols (with 'req_protocols')
became obvious when support for HSTS was added to Wget, where the requested URI
and the actual executed URI do not have to be the same. This new parameter is optional
and if not specified, the test suite behaves as before. Also, the new function 'setup'
is provided as a means to start the test HTTP server, but not launch the test yet
(this is done when calling 'begin', as usual), in case we want to query the address
and port in which the test server listens. If 'setup' is not called, it is automatically
invoked when calling 'begin'. With these measures, we preserve backward-compatibility with
existing tests.
2015-07-05 14:04:42 -04:00
|
|
|
protocols,
|
|
|
|
req_protocols)
|
|
|
|
|
|
|
|
def setup(self):
|
2015-06-15 05:47:51 -04:00
|
|
|
self.server_setup()
|
Enhancements in testsuite engine + new HSTS test.
* testenv/Makefile.am: added new test 'Test-hsts.py'.
* testenv/Test-hsts.py: new test for HSTS.
* testenv/conf/domains.py: new hook to override domain list.
* testenv/test/base_test.py: (__init__): new optional parameter
for tests 'req_protocols'.
(get_domain_addr): set the instance variables 'addr' and 'port'.
Return address as an array (domain, port) instead of string.
(gen_cmd_line): take into account domain and port.
* testenv/test/http_test.py (__init__): new optional parameter
'req_protocols'.
(setup): new function. Call to server_setup() decoupled from
begin() and moved here.
(begin): call to superclass to maintain backward compatibility.
Removed call to server_setup().
This patch adds a new parameter to the test suite called 'req_protocols',
and a new function called 'setup'. The ability for tests to be able to set some
extra parameters such as the actual requested protocols (with 'req_protocols')
became obvious when support for HSTS was added to Wget, where the requested URI
and the actual executed URI do not have to be the same. This new parameter is optional
and if not specified, the test suite behaves as before. Also, the new function 'setup'
is provided as a means to start the test HTTP server, but not launch the test yet
(this is done when calling 'begin', as usual), in case we want to query the address
and port in which the test server listens. If 'setup' is not called, it is automatically
invoked when calling 'begin'. With these measures, we preserve backward-compatibility with
existing tests.
2015-07-05 14:04:42 -04:00
|
|
|
self.ready = True
|
2015-06-15 05:47:51 -04:00
|
|
|
|
|
|
|
def begin(self):
|
Enhancements in testsuite engine + new HSTS test.
* testenv/Makefile.am: added new test 'Test-hsts.py'.
* testenv/Test-hsts.py: new test for HSTS.
* testenv/conf/domains.py: new hook to override domain list.
* testenv/test/base_test.py: (__init__): new optional parameter
for tests 'req_protocols'.
(get_domain_addr): set the instance variables 'addr' and 'port'.
Return address as an array (domain, port) instead of string.
(gen_cmd_line): take into account domain and port.
* testenv/test/http_test.py (__init__): new optional parameter
'req_protocols'.
(setup): new function. Call to server_setup() decoupled from
begin() and moved here.
(begin): call to superclass to maintain backward compatibility.
Removed call to server_setup().
This patch adds a new parameter to the test suite called 'req_protocols',
and a new function called 'setup'. The ability for tests to be able to set some
extra parameters such as the actual requested protocols (with 'req_protocols')
became obvious when support for HSTS was added to Wget, where the requested URI
and the actual executed URI do not have to be the same. This new parameter is optional
and if not specified, the test suite behaves as before. Also, the new function 'setup'
is provided as a means to start the test HTTP server, but not launch the test yet
(this is done when calling 'begin', as usual), in case we want to query the address
and port in which the test server listens. If 'setup' is not called, it is automatically
invoked when calling 'begin'. With these measures, we preserve backward-compatibility with
existing tests.
2015-07-05 14:04:42 -04:00
|
|
|
if not self.ready:
|
|
|
|
# this is to maintain compatibility with scripts that
|
|
|
|
# don't call setup()
|
|
|
|
self.setup()
|
2014-07-24 07:16:50 -04:00
|
|
|
with self:
|
Enhancements in testsuite engine + new HSTS test.
* testenv/Makefile.am: added new test 'Test-hsts.py'.
* testenv/Test-hsts.py: new test for HSTS.
* testenv/conf/domains.py: new hook to override domain list.
* testenv/test/base_test.py: (__init__): new optional parameter
for tests 'req_protocols'.
(get_domain_addr): set the instance variables 'addr' and 'port'.
Return address as an array (domain, port) instead of string.
(gen_cmd_line): take into account domain and port.
* testenv/test/http_test.py (__init__): new optional parameter
'req_protocols'.
(setup): new function. Call to server_setup() decoupled from
begin() and moved here.
(begin): call to superclass to maintain backward compatibility.
Removed call to server_setup().
This patch adds a new parameter to the test suite called 'req_protocols',
and a new function called 'setup'. The ability for tests to be able to set some
extra parameters such as the actual requested protocols (with 'req_protocols')
became obvious when support for HSTS was added to Wget, where the requested URI
and the actual executed URI do not have to be the same. This new parameter is optional
and if not specified, the test suite behaves as before. Also, the new function 'setup'
is provided as a means to start the test HTTP server, but not launch the test yet
(this is done when calling 'begin', as usual), in case we want to query the address
and port in which the test server listens. If 'setup' is not called, it is automatically
invoked when calling 'begin'. With these measures, we preserve backward-compatibility with
existing tests.
2015-07-05 14:04:42 -04:00
|
|
|
# If any exception occurs, self.__exit__ will be immediately called.
|
|
|
|
# We must call the parent method in the end in order to verify
|
|
|
|
# whether the tests succeeded or not.
|
|
|
|
if self.ready:
|
|
|
|
self.do_test()
|
|
|
|
print_green("Test Passed.")
|
|
|
|
else:
|
|
|
|
self.tests_passed = False
|
|
|
|
super(HTTPTest, self).begin()
|
2014-07-24 07:16:50 -04:00
|
|
|
|
|
|
|
def instantiate_server_by(self, protocol):
|
|
|
|
server = {HTTP: HTTPd,
|
|
|
|
HTTPS: HTTPSd}[protocol]()
|
|
|
|
server.start()
|
|
|
|
|
|
|
|
return server
|
|
|
|
|
|
|
|
def request_remaining(self):
|
|
|
|
return [s.server_inst.get_req_headers()
|
|
|
|
for s in self.servers]
|
|
|
|
|
|
|
|
def stop_server(self):
|
|
|
|
for server in self.servers:
|
|
|
|
server.server_inst.shutdown()
|
|
|
|
# vim: set ts=4 sts=4 sw=4 tw=80 et :
|