(app: App, driver: Driver)
| 117 | indirect=True, |
| 118 | ) |
| 119 | async def test_websocket_server(app: App, driver: Driver): |
| 120 | assert isinstance(driver, ASGIMixin) |
| 121 | |
| 122 | async def _handle_ws(ws: WebSocket) -> None: |
| 123 | await ws.accept() |
| 124 | data = await ws.receive() |
| 125 | assert data == "ping" |
| 126 | await ws.send("pong") |
| 127 | |
| 128 | data = await ws.receive() |
| 129 | assert data == b"ping" |
| 130 | await ws.send(b"pong") |
| 131 | |
| 132 | data = await ws.receive_text() |
| 133 | assert data == "ping" |
| 134 | await ws.send("pong") |
| 135 | |
| 136 | data = await ws.receive_bytes() |
| 137 | assert data == b"ping" |
| 138 | await ws.send(b"pong") |
| 139 | |
| 140 | with pytest.raises(WebSocketClosed, match=r"code=1000"): |
| 141 | await ws.receive() |
| 142 | |
| 143 | ws_setup = WebSocketServerSetup(URL("/ws_test"), "ws_test", _handle_ws) |
| 144 | driver.setup_websocket_server(ws_setup) |
| 145 | |
| 146 | async with app.test_server(driver.asgi) as ctx: |
| 147 | client = ctx.get_client() |
| 148 | |
| 149 | async with client.websocket_connect("/ws_test") as ws: |
| 150 | await ws.send_text("ping") |
| 151 | assert await ws.receive_text() == "pong" |
| 152 | await ws.send_bytes(b"ping") |
| 153 | assert await ws.receive_bytes() == b"pong" |
| 154 | |
| 155 | await ws.send_text("ping") |
| 156 | assert await ws.receive_text() == "pong" |
| 157 | |
| 158 | await ws.send_bytes(b"ping") |
| 159 | assert await ws.receive_bytes() == b"pong" |
| 160 | |
| 161 | await ws.close(code=1000) |
| 162 | |
| 163 | await anyio.sleep(1) |
| 164 | |
| 165 | |
| 166 | @pytest.mark.anyio |
nothing calls this directly
no test coverage detected