Skip to content

Commit 3bfd3ac

Browse files
committed
Added ProxyServer test fixture
1 parent 60923e1 commit 3bfd3ac

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

tests/helpers/proxy_server.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import asyncio
2+
3+
from websockets.asyncio.server import serve, ServerConnection
4+
from websockets.asyncio.client import connect
5+
6+
7+
class ProxyServer:
8+
def __init__(self, upstream: str, time_til_pause: float, time_til_resume: float):
9+
self.upstream_server = upstream
10+
self.time_til_pause = time_til_pause
11+
self.time_til_resume = time_til_resume
12+
self.upstream_connection = None
13+
self.connection_time = 0
14+
self.shutdown_time = 0
15+
self.resume_time = 0
16+
17+
async def connect(self):
18+
self.upstream_connection = await connect(self.upstream_server)
19+
self.connection_time = asyncio.get_running_loop().time()
20+
self.shutdown_time = self.connection_time + self.time_til_pause
21+
self.resume_time = self.shutdown_time + self.time_til_resume
22+
23+
async def close(self):
24+
if self.upstream_connection:
25+
await self.upstream_connection.close()
26+
27+
async def proxy_request(self, websocket: ServerConnection):
28+
async for message in websocket:
29+
print(websocket)
30+
await self.upstream_connection.send(message)
31+
recd = await self.upstream_connection.recv()
32+
current_time = asyncio.get_running_loop().time()
33+
if self.shutdown_time < current_time < self.resume_time:
34+
print("Pausing")
35+
await asyncio.sleep(self.time_til_resume)
36+
await websocket.send(recd)
37+
# await websocket.send(message)
38+
39+
async def serve(self):
40+
async with serve(self.proxy_request, "localhost", 8080) as server:
41+
await server.serve_forever()
42+
43+
44+
async def main():
45+
proxy = ProxyServer("wss://archive.sub.latent.to", 20, 30)
46+
await proxy.connect()
47+
await proxy.serve()
48+
49+
50+
if __name__ == "__main__":
51+
asyncio.run(main())

0 commit comments

Comments
 (0)