def test_parse_wss_scheme_when_missing_resource(self): c = WebSocketBaseClient(url="wss://127.0.0.1") self.assertEqual(c.scheme, "wss") self.assertEqual(c.host, "127.0.0.1") self.assertEqual(c.port, 443) self.assertEqual(c.resource, "/") self.assertEqual(c.bind_addr, ("127.0.0.1", 443))
def test_parse_wss_scheme_with_port(self): c = WebSocketBaseClient(url="wss://127.0.0.1:9090") self.assertEqual(c.scheme, "wss") self.assertEqual(c.host, "127.0.0.1") self.assertEqual(c.port, 9090) self.assertEqual(c.resource, "/") self.assertEqual(c.bind_addr, ("127.0.0.1", 9090))
def test_parse_ws_scheme(self): c = WebSocketBaseClient(url="ws://127.0.0.1/") self.assertEqual(c.scheme, "ws") self.assertEqual(c.host, "127.0.0.1") self.assertEqual(c.port, 80) self.assertEqual(c.resource, "/") self.assertEqual(c.bind_addr, ("127.0.0.1", 80))
def test_parse_ws_scheme_with_query_string(self): c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value") self.assertEqual(c.scheme, "ws") self.assertEqual(c.host, "127.0.0.1") self.assertEqual(c.port, 80) self.assertEqual(c.resource, "/?token=value") self.assertEqual(c.bind_addr, ("127.0.0.1", 80))
def test_invalid_response_headers(self, sock): for key_header, invalid_value in ((b'upgrade', b'boom'), (b'connection', b'bim')): s = MagicMock() sock.socket.return_value = s sock.getaddrinfo.return_value = [ (socket.AF_INET, socket.SOCK_STREAM, 0, "", ("127.0.0.1", 80, 0, 0)) ] c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value") status_line = b"HTTP/1.1 101 Switching Protocols" headers = { b"connection": b"Upgrade", b"Sec-Websocket-Version": b"13", b"Content-Type": b"text/plain;charset=utf-8", b"Sec-Websocket-Accept": b64encode(sha1(c.key + WS_KEY).digest()), b"upgrade": b"websocket", b"Date": b"Sun, 26 Jul 2015 12:32:55 GMT", b"Server": b"ws4py/test" } headers[key_header] = invalid_value request = [status_line ] + [k + b" : " + v for (k, v) in headers.items()] + [b'\r\n'] s.recv.return_value = b"\r\n".join(request) self.assertRaises(HandshakeError, c.connect) s.shutdown.assert_called_once_with(socket.SHUT_RDWR) s.close.assert_called_once_with() sock.reset_mock()
def test_parse_unix_schemes(self): c = WebSocketBaseClient(url="ws+unix:///my.socket") self.assertEqual(c.scheme, "ws+unix") self.assertEqual(c.host, "localhost") self.assertIsNone(c.port) self.assertEqual(c.unix_socket_path, "/my.socket") self.assertEqual(c.resource, "/") self.assertEqual(c.bind_addr, "/my.socket") c = WebSocketBaseClient(url="wss+unix:///my.socket") self.assertEqual(c.scheme, "wss+unix") self.assertEqual(c.host, "localhost") self.assertIsNone(c.port) self.assertEqual(c.unix_socket_path, "/my.socket") self.assertEqual(c.resource, "/") self.assertEqual(c.bind_addr, "/my.socket")
def test_connect_and_close(self, sock): s = MagicMock() sock.socket.return_value = s sock.getaddrinfo.return_value = [(socket.AF_INET, socket.SOCK_STREAM, 0, "", ("127.0.0.1", 80, 0, 0))] c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value") s.recv.return_value = b"\r\n".join([ b"HTTP/1.1 101 Switching Protocols", b"Connection: Upgrade", b"Sec-Websocket-Version: 13", b"Content-Type: text/plain;charset=utf-8", b"Sec-Websocket-Accept: " + b64encode(sha1(c.key + WS_KEY).digest()), b"Upgrade: websocket", b"Date: Sun, 26 Jul 2015 12:32:55 GMT", b"Server: ws4py/test", b"\r\n" ]) c.connect() s.connect.assert_called_once_with(("127.0.0.1", 80)) s.reset_mock() c.close(code=1006, reason="boom") args = s.sendall.call_args_list[0] f = Frame() f.parser.send(args[0][0]) f.parser.close() self.assertIn(b'boom', f.unmask(f.body))
def test_empty_response(self, sock): s = MagicMock() sock.socket.return_value = s sock.getaddrinfo.return_value = [(socket.AF_INET, socket.SOCK_STREAM, 0, "", ("127.0.0.1", 80, 0, 0))] c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value") s.recv.return_value = b"" self.assertRaises(HandshakeError, c.connect) s.shutdown.assert_called_once_with(socket.SHUT_RDWR) s.close.assert_called_once_with()
def test_invdalid_response_code(self, sock): s = MagicMock() sock.socket.return_value = s sock.getaddrinfo.return_value = [(socket.AF_INET, socket.SOCK_STREAM, 0, "", ("127.0.0.1", 80, 0, 0))] c = WebSocketBaseClient(url="ws://127.0.0.1/?token=value") s.recv.return_value = b"\r\n".join([ b"HTTP/1.1 200 Switching Protocols", b"Connection: Upgrade", b"Sec-Websocket-Version: 13", b"Content-Type: text/plain;charset=utf-8", b"Sec-Websocket-Accept: " + b64encode(sha1(c.key + WS_KEY).digest()), b"Upgrade: websocket", b"Date: Sun, 26 Jul 2015 12:32:55 GMT", b"Server: ws4py/test", b"\r\n" ]) self.assertRaises(HandshakeError, c.connect) s.shutdown.assert_called_once_with(socket.SHUT_RDWR) s.close.assert_called_once_with()
from ws4py.client import WebSocketBaseClient import json import ssl ws = WebSocketBaseClient(url='wss://localhost:8888/websocket', ssl_options={ "cert_reqs": ssl.CERT_NONE, "ssl_version": ssl.PROTOCOL_TLSv1_2 }) info = {'Type': 'Client', 'Request': 'EnvironmentInfo'} print("trying to connect") ws.connect() ws.send(json.dumps(info))
#!/usr/bin/python #cat file | ./replay.py from ws4py.client import WebSocketBaseClient import time import sys import json ws = WebSocketBaseClient('ws://127.0.0.1:9001/') ws.connect() k = 0 data = {'CMD': [], 'DATA': []} for line in sys.stdin: line2 = line.replace(':', ',').rstrip() rawdata = line2.split(',') pixels = [] pixels.append(rawdata[1]) pixels.append(rawdata[2]) pixels.append(rawdata[3]) data["DATA"].append(pixels) data.update({"CMD": "DRAW"}) json_data = json.dumps(data) ws.send(json_data) time.sleep(0.007) k = 0 data["DATA"] *= 0
def _new_ws(self, ws_url): con = WebSocketBaseClient(ws_url) con.connect() return con