Skip to content

Commit f12f7e4

Browse files
committed
raw_socket_proxy: add simple echo tests
1 parent 2944bc9 commit f12f7e4

File tree

3 files changed

+59
-0
lines changed

3 files changed

+59
-0
lines changed

tests/resources/jupyter_server_config.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,15 @@ def my_env():
127127
"rewrite_response": [cats_only, dog_to_cat],
128128
},
129129
"python-proxyto54321-no-command": {"port": 54321},
130+
"python-rawsocket-tcp": {
131+
"command": [sys.executable, "./tests/resources/rawsocket.py", "{port}"],
132+
"raw_socket_proxy": True
133+
},
134+
"python-rawsocket-unix": {
135+
"command": [sys.executable, "./tests/resources/rawsocket.py", "{unix_socket}"],
136+
"unix_socket": True,
137+
"raw_socket_proxy": True
138+
},
130139
}
131140

132141
c.ServerProxy.non_service_rewrite_response = hello_to_foo

tests/resources/rawsocket.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
import socket
5+
import sys
6+
7+
if len(sys.argv) != 2:
8+
print(f"Usage: {sys.argv[0]} TCPPORT|SOCKPATH")
9+
sys.exit(1)
10+
where = sys.argv[1]
11+
try:
12+
port = int(where)
13+
family = socket.AF_INET
14+
addr = ('localhost', port)
15+
except ValueError:
16+
family = socket.AF_UNIX
17+
addr = where
18+
19+
with socket.create_server(addr, family=family, reuse_port=True) as serv:
20+
while True:
21+
# only handle a single connection at a time
22+
sock, caddr = serv.accept()
23+
while True:
24+
s = sock.recv(1024)
25+
if not s:
26+
break
27+
sock.send(s.swapcase())
28+
sock.close()

tests/test_proxies.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,3 +469,25 @@ def test_callable_environment_formatting(
469469
PORT, TOKEN = a_server_port_and_token
470470
r = request_get(PORT, "/python-http-callable-env/test", TOKEN)
471471
assert r.code == 200
472+
473+
474+
@pytest.mark.parametrize("rawsocket_type", [
475+
"tcp",
476+
pytest.param(
477+
"unix",
478+
marks=pytest.mark.skipif(
479+
sys.platform == "win32", reason="Unix socket not supported on Windows"
480+
),
481+
),
482+
])
483+
async def test_server_proxy_rawsocket(
484+
rawsocket_type: str,
485+
a_server_port_and_token: Tuple[int, str]
486+
) -> None:
487+
PORT, TOKEN = a_server_port_and_token
488+
url = f"ws://{LOCALHOST}:{PORT}/python-rawsocket-{rawsocket_type}/?token={TOKEN}"
489+
conn = await websocket_connect(url)
490+
for msg in [b"Hello,", b"world!"]:
491+
await conn.write_message(msg)
492+
res = await conn.read_message()
493+
assert res == msg.swapcase()

0 commit comments

Comments
 (0)