changeset 5:b34cd6619316

new test. server has to be able to exit between tests.
author drewp@bigasterisk.com
date Sat, 16 Mar 2024 12:11:32 -0700
parents ddf021c87083
children d885fce5e4e7
files examples/run_server_make_request.py examples/serve_custom_root_page.py examples/serve_custom_root_page_test.py src/rdferry/server.py
diffstat 4 files changed, 27 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/examples/run_server_make_request.py	Sat Mar 16 12:02:40 2024 -0700
+++ b/examples/run_server_make_request.py	Sat Mar 16 12:11:32 2024 -0700
@@ -17,7 +17,7 @@
 
     async def __aexit__(self, exc_type, exc, tb):
         self.subprocess.terminate()
-
+        await self.subprocess.wait()
     async def get(self, url: str) -> aiohttp.ClientResponse:
         while True:
             try:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/serve_custom_root_page.py	Sat Mar 16 12:11:32 2024 -0700
@@ -0,0 +1,12 @@
+from rdferry import StarletteServer
+from starlette.requests import Request
+from starlette.responses import PlainTextResponse
+
+
+def hello(request: Request) -> PlainTextResponse:
+    return PlainTextResponse('hello world')
+
+
+server = StarletteServer()
+server.add_route('/', hello)
+server.serve()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/serve_custom_root_page_test.py	Sat Mar 16 12:11:32 2024 -0700
@@ -0,0 +1,13 @@
+from pathlib import Path
+
+import pytest
+
+from examples.run_server_make_request import HttpServer
+
+
+@pytest.mark.asyncio
+async def test_http_request_to_subprocess():
+    async with HttpServer(
+            Path('examples/serve_custom_root_page.py')) as http_server:
+        response = await http_server.get('http://localhost:8005/')
+        assert (await response.text()) == 'hello world'
--- a/src/rdferry/server.py	Sat Mar 16 12:02:40 2024 -0700
+++ b/src/rdferry/server.py	Sat Mar 16 12:11:32 2024 -0700
@@ -17,8 +17,7 @@
         if path == '/':
             self.root_route_is_set = True
 
-    def serve(self) -> NoReturn:
+    def serve(self):
         if not self.root_route_is_set:
             self.add_route('/', lambda req: PlainTextResponse('todo'))
         uvicorn.run(self.app, host="0.0.0.0", port=8005)
-        raise NotImplementedError()