Skip to content

Commit 75a0f5c

Browse files
committed
Add websocket header test
1 parent f7b16a3 commit 75a0f5c

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

tests/test_ws_headers.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from __future__ import print_function
2+
import threading
3+
import time
4+
5+
from autobahn.twisted.websocket import WebSocketServerProtocol, WebSocketServerFactory
6+
from twisted.internet import reactor
7+
8+
from roslibpy import Ros
9+
10+
headers = {
11+
'cookie': 'token=rosbridge',
12+
'authorization': 'Some auth'
13+
}
14+
15+
class TestWebSocketServerProtocol(WebSocketServerProtocol):
16+
def onConnect(self, request):
17+
for key, value in headers.items():
18+
assert request.headers.get(key) == value, f"Header {key} did not match expected value {value}"
19+
self.factory.context['wait'].set()
20+
21+
def onOpen(self):
22+
self.sendClose()
23+
24+
def run_server(context):
25+
factory = WebSocketServerFactory()
26+
factory.protocol = TestWebSocketServerProtocol
27+
factory.context = context
28+
29+
reactor.listenTCP(9000, factory)
30+
reactor.run(installSignalHandlers=False)
31+
32+
def run_client():
33+
client = Ros('127.0.0.1', 9000, headers=headers)
34+
client.run()
35+
client.close()
36+
37+
def test_websocket_headers():
38+
context = dict(wait=threading.Event())
39+
40+
server_thread = threading.Thread(target=run_server, args=(context,))
41+
server_thread.start()
42+
43+
time.sleep(1) # Give the server time to start
44+
45+
client_thread = threading.Thread(target=run_client)
46+
client_thread.start()
47+
48+
if not context["wait"].wait(10):
49+
raise Exception("Headers were not as expected")
50+
51+
client_thread.join()
52+
reactor.callFromThread(reactor.stop)
53+
server_thread.join()
54+
55+
if __name__ == "__main__":
56+
test_websocket_headers()

0 commit comments

Comments
 (0)