|
6 | 6 | This file defines integration-type tests for hyper. These are still not fully
|
7 | 7 | hitting the network, so that's alright.
|
8 | 8 | """
|
| 9 | +import requests |
9 | 10 | import ssl
|
10 | 11 | import threading
|
11 | 12 | import hyper
|
12 | 13 | from hyper import HTTP20Connection
|
| 14 | +from hyper.contrib import HTTP20Adapter |
13 | 15 | from hyper.http20.frame import (
|
14 |
| - Frame, SettingsFrame, WindowUpdateFrame, DataFrame |
| 16 | + Frame, SettingsFrame, WindowUpdateFrame, DataFrame, HeadersFrame |
15 | 17 | )
|
16 | 18 | from server import SocketLevelTest
|
17 | 19 |
|
@@ -197,3 +199,49 @@ def socket_handler(listener):
|
197 | 199 | assert conn._sock == None
|
198 | 200 |
|
199 | 201 | self.tear_down()
|
| 202 | + |
| 203 | + |
| 204 | +class TestRequestsAdapter(SocketLevelTest): |
| 205 | + def test_adapter_received_values(self): |
| 206 | + self.set_up() |
| 207 | + |
| 208 | + data = [] |
| 209 | + send_event = threading.Event() |
| 210 | + |
| 211 | + def socket_handler(listener): |
| 212 | + sock = listener.accept()[0] |
| 213 | + |
| 214 | + # Do the handshake: conn header, settings, send settings, recv ack. |
| 215 | + sock.recv(65535) |
| 216 | + sock.recv(65535) |
| 217 | + sock.send(SettingsFrame(0).serialize()) |
| 218 | + sock.recv(65535) |
| 219 | + |
| 220 | + # Now expect some data. One headers frame. |
| 221 | + data.append(sock.recv(65535)) |
| 222 | + |
| 223 | + # Respond! |
| 224 | + h = HeadersFrame(1) |
| 225 | + h.data = self.get_encoder().encode({':status': 200, 'Content-Type': 'not/real', 'Content-Length': 20}) |
| 226 | + h.flags.add('END_HEADERS') |
| 227 | + sock.send(h.serialize()) |
| 228 | + d = DataFrame(1) |
| 229 | + d.data = b'1234567890' * 2 |
| 230 | + d.flags.add('END_STREAM') |
| 231 | + sock.send(d.serialize()) |
| 232 | + |
| 233 | + send_event.set() |
| 234 | + sock.close() |
| 235 | + |
| 236 | + self._start_server(socket_handler) |
| 237 | + |
| 238 | + s = requests.Session() |
| 239 | + s.mount('https://%s' % self.host, HTTP20Adapter()) |
| 240 | + r = s.get('https://%s:%s/some/path' % (self.host, self.port)) |
| 241 | + |
| 242 | + # Assert about the received values. |
| 243 | + assert r.status_code == 200 |
| 244 | + assert r.headers['Content-Type'] == 'not/real' |
| 245 | + assert r.content == b'1234567890' * 2 |
| 246 | + |
| 247 | + self.tear_down() |
0 commit comments