Skip to content

Commit 1069928

Browse files
authored
Run test webserver within main async loop (#1266)
1 parent ee2d44f commit 1069928

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

src/reactpy/testing/backend.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import asyncio
44
import logging
55
from contextlib import AsyncExitStack
6-
from threading import Thread
76
from types import TracebackType
87
from typing import Any, Callable
98
from urllib.parse import urlencode, urlunparse
@@ -16,7 +15,6 @@
1615
from reactpy.config import REACTPY_TESTS_DEFAULT_TIMEOUT
1716
from reactpy.core.component import component
1817
from reactpy.core.hooks import use_callback, use_effect, use_state
19-
from reactpy.testing.common import GITHUB_ACTIONS
2018
from reactpy.testing.logs import (
2119
LogAssertionError,
2220
capture_reactpy_logs,
@@ -121,7 +119,8 @@ async def __aenter__(self) -> BackendFixture:
121119
self.log_records = self._exit_stack.enter_context(capture_reactpy_logs())
122120

123121
# Wait for the server to start
124-
Thread(target=self.webserver.run, daemon=True).start()
122+
self.webserver.config.setup_event_loop()
123+
self.webserver_task = asyncio.create_task(self.webserver.serve())
125124
await asyncio.sleep(1)
126125

127126
return self
@@ -139,9 +138,8 @@ async def __aexit__(
139138
msg = "Unexpected logged exception"
140139
raise LogAssertionError(msg) from logged_errors[0]
141140

142-
await asyncio.wait_for(
143-
self.webserver.shutdown(), timeout=90 if GITHUB_ACTIONS else 5
144-
)
141+
await self.webserver.shutdown()
142+
self.webserver_task.cancel()
145143

146144
async def restart(self) -> None:
147145
"""Restart the server"""

tests/test_asgi/test_standalone.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
from collections.abc import MutableMapping
23

34
import pytest
@@ -155,8 +156,8 @@ def sample():
155156
async with DisplayFixture(backend=server, driver=page) as new_display:
156157
await new_display.show(sample)
157158
url = f"http://{server.host}:{server.port}"
158-
response = request(
159-
"HEAD", url, timeout=REACTPY_TESTS_DEFAULT_TIMEOUT.current
159+
response = await asyncio.to_thread(
160+
request, "HEAD", url, timeout=REACTPY_TESTS_DEFAULT_TIMEOUT.current
160161
)
161162
assert response.status_code == 200
162163
assert response.headers["content-type"] == "text/html; charset=utf-8"

0 commit comments

Comments
 (0)