Skip to content
This repository was archived by the owner on Jan 13, 2021. It is now read-only.

Commit 8f3b8c5

Browse files
committed
adding itegration tests for HTTPConnection
1 parent e76f185 commit 8f3b8c5

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

test/test_integration.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from h2.frame_buffer import FrameBuffer
1616
from hyper.compat import ssl
1717
from hyper.contrib import HTTP20Adapter
18+
from hyper.common.util import HTTPVersion
1819
from hyperframe.frame import (
1920
Frame, SettingsFrame, WindowUpdateFrame, DataFrame, HeadersFrame,
2021
GoAwayFrame, RstStreamFrame
@@ -935,6 +936,97 @@ def socket_handler(listener):
935936

936937
self.tear_down()
937938

939+
def test_version_after_tls_upgrade(self):
940+
self.set_up()
941+
942+
recv_event = threading.Event()
943+
944+
def socket_handler(listener):
945+
sock = listener.accept()[0]
946+
947+
receive_preamble(sock)
948+
sock.recv(65535)
949+
950+
# Now, send the headers for the response. This response has no body
951+
f = build_headers_frame(
952+
[(':status', '204'), ('content-length', '0')]
953+
)
954+
f.flags.add('END_STREAM')
955+
f.stream_id = 1
956+
sock.send(f.serialize())
957+
958+
# Wait for the message from the main thread.
959+
recv_event.set()
960+
sock.close()
961+
962+
self._start_server(socket_handler)
963+
c = hyper.HTTPConnection(self.host, self.port, secure=True)
964+
965+
assert c.version is HTTPVersion.http11
966+
assert c.version is not HTTPVersion.http20
967+
c.request('GET', '/')
968+
recv_event.set()
969+
assert c.version is HTTPVersion.http20
970+
971+
self.tear_down()
972+
973+
def test_version_after_http_upgrade(self):
974+
self.set_up()
975+
self.secure = False
976+
977+
send_event = threading.Event()
978+
979+
def socket_handler(listener):
980+
sock = listener.accept()[0]
981+
982+
# We should get the initial request.
983+
data = b''
984+
while not data.endswith(b'\r\n\r\n'):
985+
data += sock.recv(65535)
986+
assert b'upgrade: h2c\r\n' in data
987+
988+
send_event.wait()
989+
990+
# We need to send back a response.
991+
resp = (
992+
b'HTTP/1.1 101 Upgrade\r\n'
993+
b'Server: socket-level-server\r\n'
994+
b'Content-Length: 0\r\n'
995+
b'Connection: upgrade\r\n'
996+
b'Upgrade: h2c\r\n'
997+
b'\r\n'
998+
)
999+
sock.sendall(resp)
1000+
1001+
# We get a message for connection open, specifically the preamble.
1002+
receive_preamble(sock)
1003+
1004+
# Now, send the headers for the response. This response has a body.
1005+
f = build_headers_frame([(':status', '200')])
1006+
f.stream_id = 1
1007+
sock.sendall(f.serialize())
1008+
1009+
# Send the first two chunks.
1010+
f = DataFrame(1)
1011+
f.data = b'hello'
1012+
sock.sendall(f.serialize())
1013+
f = DataFrame(1)
1014+
f.data = b'there'
1015+
f.flags.add('END_STREAM')
1016+
sock.sendall(f.serialize())
1017+
1018+
self._start_server(socket_handler)
1019+
1020+
c = hyper.HTTPConnection(self.host, self.port)
1021+
assert c.version is HTTPVersion.http11
1022+
c.request('GET', '/')
1023+
send_event.set()
1024+
resp = c.get_response()
1025+
assert c.version is HTTPVersion.http20
1026+
assert resp.version is HTTPVersion.http20
1027+
1028+
self.tear_down()
1029+
9381030

9391031
class TestRequestsAdapter(SocketLevelTest):
9401032
# This uses HTTP/2.

0 commit comments

Comments
 (0)