aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_protocol_http.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_protocol_http.py')
-rw-r--r--test/test_protocol_http.py45
1 files changed, 36 insertions, 9 deletions
diff --git a/test/test_protocol_http.py b/test/test_protocol_http.py
index ea6cf3fd..16870777 100644
--- a/test/test_protocol_http.py
+++ b/test/test_protocol_http.py
@@ -23,7 +23,7 @@ def test_stripped_chunked_encoding_no_content():
class TestHTTPRequest:
- def test_asterisk_form(self):
+ def test_asterisk_form_in(self):
s = StringIO("OPTIONS * HTTP/1.1")
f = tutils.tflow(req=None)
f.request = HTTPRequest.from_stream(s)
@@ -31,9 +31,11 @@ class TestHTTPRequest:
f.request.host = f.server_conn.address.host
f.request.port = f.server_conn.address.port
f.request.scheme = "http"
- assert f.request.assemble() == "OPTIONS * HTTP/1.1\r\nHost: address:22\r\n\r\n"
+ assert f.request.assemble() == ("OPTIONS * HTTP/1.1\r\n"
+ "Host: address:22\r\n"
+ "Content-Length: 0\r\n\r\n")
- def test_origin_form(self):
+ def test_relative_form_in(self):
s = StringIO("GET /foo\xff HTTP/1.1")
tutils.raises("Bad HTTP request line", HTTPRequest.from_stream, s)
s = StringIO("GET /foo HTTP/1.1\r\nConnection: Upgrade\r\nUpgrade: h2c")
@@ -52,22 +54,47 @@ class TestHTTPRequest:
r.update_host_header()
assert "Host" in r.headers
-
- def test_authority_form(self):
+ def test_authority_form_in(self):
s = StringIO("CONNECT oops-no-port.com HTTP/1.1")
tutils.raises("Bad HTTP request line", HTTPRequest.from_stream, s)
s = StringIO("CONNECT address:22 HTTP/1.1")
r = HTTPRequest.from_stream(s)
r.scheme, r.host, r.port = "http", "address", 22
- assert r.assemble() == "CONNECT address:22 HTTP/1.1\r\nHost: address:22\r\n\r\n"
+ assert r.assemble() == ("CONNECT address:22 HTTP/1.1\r\n"
+ "Host: address:22\r\n"
+ "Content-Length: 0\r\n\r\n")
assert r.pretty_url(False) == "address:22"
- def test_absolute_form(self):
+ def test_absolute_form_in(self):
s = StringIO("GET oops-no-protocol.com HTTP/1.1")
tutils.raises("Bad HTTP request line", HTTPRequest.from_stream, s)
s = StringIO("GET http://address:22/ HTTP/1.1")
r = HTTPRequest.from_stream(s)
- assert r.assemble() == "GET http://address:22/ HTTP/1.1\r\nHost: address:22\r\n\r\n"
+ assert r.assemble() == "GET http://address:22/ HTTP/1.1\r\nHost: address:22\r\nContent-Length: 0\r\n\r\n"
+
+ def test_http_options_relative_form_in(self):
+ """
+ Exercises fix for Issue #392.
+ """
+ s = StringIO("OPTIONS /secret/resource HTTP/1.1")
+ r = HTTPRequest.from_stream(s)
+ r.host = 'address'
+ r.port = 80
+ r.scheme = "http"
+ assert r.assemble() == ("OPTIONS /secret/resource HTTP/1.1\r\n"
+ "Host: address\r\n"
+ "Content-Length: 0\r\n\r\n")
+
+ def test_http_options_absolute_form_in(self):
+ s = StringIO("OPTIONS http://address/secret/resource HTTP/1.1")
+ r = HTTPRequest.from_stream(s)
+ r.host = 'address'
+ r.port = 80
+ r.scheme = "http"
+ assert r.assemble() == ("OPTIONS http://address:80/secret/resource HTTP/1.1\r\n"
+ "Host: address\r\n"
+ "Content-Length: 0\r\n\r\n")
+
def test_assemble_unknown_form(self):
r = tutils.treq()
@@ -133,4 +160,4 @@ class TestInvalidRequests(tservers.HTTPProxTest):
p.connect()
r = p.request("get:/p/200")
assert r.status_code == 400
- assert "Invalid HTTP request form" in r.content \ No newline at end of file
+ assert "Invalid HTTP request form" in r.content