]> git.ipfire.org Git - thirdparty/httpx.git/commitdiff
More HTTP/2 tests
authorTom Christie <tom@tomchristie.com>
Thu, 25 Apr 2019 11:23:20 +0000 (12:23 +0100)
committerTom Christie <tom@tomchristie.com>
Thu, 25 Apr 2019 11:23:20 +0000 (12:23 +0100)
httpcore/http2.py
tests/test_http2.py

index 41a0900cad70f690b42401c777e4d87cb6467a42..f8d2b648bfc89ffee19b2c3b855f7630ef4beddd 100644 (file)
@@ -144,4 +144,4 @@ class HTTP2Connection(Client):
             await self.on_release(self)
 
     async def close(self) -> None:
-        self.writer.close()
+        await self.writer.close()
index 7bfe301316b1f8321f6f74e4efe7e2f7fabee547..fbdb52d8b3b04b2db83667ad487d5bf5601f45dc 100644 (file)
@@ -2,6 +2,7 @@ import h2.config
 import h2.connection
 import h2.events
 import pytest
+import json
 
 import httpcore
 
@@ -53,24 +54,61 @@ class MockServer(httpcore.BaseReader, httpcore.BaseWriter):
         self.requests[stream_id][-1]["data"] += data
 
     def stream_complete(self, stream_id):
-        requests = self.requests[stream_id].pop(0)
+        request = self.requests[stream_id].pop(0)
         if not self.requests[stream_id]:
             del self.requests[stream_id]
 
+        request_headers = dict(request["headers"])
+        request_data = request["data"]
+
+        response_body = json.dumps({
+            "method": request_headers[b":method"].decode(),
+            "path": request_headers[b":path"].decode(),
+            "body": request_data.decode()
+        }).encode()
+
         response_headers = (
             (b":status", b"200"),
         )
-        response_body = b"Hello, world!"
         self.conn.send_headers(stream_id, response_headers)
         self.conn.send_data(stream_id, response_body, end_stream=True)
         self.buffer += self.conn.data_to_send()
 
 
 @pytest.mark.asyncio
-async def test_http2():
+async def test_http2_get_request():
+    server = MockServer()
+    origin = httpcore.Origin("http://example.org")
+    async with httpcore.HTTP2Connection(reader=server, writer=server, origin=origin) as client:
+        response = await client.request("GET", "http://example.org")
+    assert response.status_code == 200
+    assert json.loads(response.body) == {"method": "GET", "path": "/", "body": ""}
+
+
+@pytest.mark.asyncio
+async def test_http2_post_request():
     server = MockServer()
     origin = httpcore.Origin("http://example.org")
-    client = httpcore.HTTP2Connection(reader=server, writer=server, origin=origin)
-    response = await client.request("GET", "http://example.org")
+    async with httpcore.HTTP2Connection(reader=server, writer=server, origin=origin) as client:
+        response = await client.request("POST", "http://example.org", body=b"<data>")
     assert response.status_code == 200
-    assert response.body == b"Hello, world!"
+    assert json.loads(response.body) == {"method": "POST", "path": "/", "body": "<data>"}
+
+
+@pytest.mark.asyncio
+async def test_http2_multiple_requests():
+    server = MockServer()
+    origin = httpcore.Origin("http://example.org")
+    async with httpcore.HTTP2Connection(reader=server, writer=server, origin=origin) as client:
+        response_1 = await client.request("GET", "http://example.org/1")
+        response_2 = await client.request("GET", "http://example.org/2")
+        response_3 = await client.request("GET", "http://example.org/3")
+
+    assert response_1.status_code == 200
+    assert json.loads(response_1.body) == {"method": "GET", "path": "/1", "body": ""}
+
+    assert response_2.status_code == 200
+    assert json.loads(response_2.body) == {"method": "GET", "path": "/2", "body": ""}
+
+    assert response_3.status_code == 200
+    assert json.loads(response_3.body) == {"method": "GET", "path": "/3", "body": ""}