Skip to content

Commit 49641a0

Browse files
add test_websocket.py
1 parent 032505d commit 49641a0

File tree

1 file changed

+93
-0
lines changed

1 file changed

+93
-0
lines changed

tests/test_websocket.py

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import unittest
2+
import _thread
3+
import time
4+
5+
from mpos import App, PackageManager
6+
import mpos.apps
7+
8+
from websocket import WebSocketApp
9+
10+
class TestWebsocket(unittest.TestCase):
11+
12+
ws = None
13+
14+
on_open_called = None
15+
on_message_called = None
16+
on_ping_called = None
17+
on_close_called = None
18+
19+
def on_message(self, wsapp, message: str):
20+
print(f"on_message received: {message}")
21+
self.on_message_called = True
22+
23+
def on_open(self, wsapp):
24+
print(f"on_open called: {wsapp}")
25+
self.on_open_called = True
26+
self.ws.send('{"type": "subscribe","product_ids": ["BTC-USD"],"channels": ["ticker_batch"]}')
27+
28+
def on_ping(wsapp, message):
29+
print("Got a ping!")
30+
self.on_ping_called = True
31+
32+
def on_close(self, wsapp, close_status_code, close_msg):
33+
print(f"on_close called: {wsapp}")
34+
self.on_close_called = True
35+
36+
def websocket_thread(self):
37+
wsurl = "wss://ws-feed.exchange.coinbase.com"
38+
39+
self.ws = WebSocketApp(
40+
wsurl,
41+
on_open=self.on_open,
42+
on_close=self.on_close,
43+
on_message=self.on_message,
44+
on_ping=self.on_ping
45+
) # maybe add other callbacks to reconnect when disconnected etc.
46+
self.ws.run_forever()
47+
48+
def wait_for_ping(self):
49+
self.on_ping_called = False
50+
for _ in range(60):
51+
print("Waiting for on_ping to be called...")
52+
if self.on_ping_called:
53+
print("yes, it was called!")
54+
break
55+
time.sleep(1)
56+
self.assertTrue(self.on_ping_called)
57+
58+
def test_it(self):
59+
on_open_called = False
60+
_thread.stack_size(mpos.apps.good_stack_size())
61+
_thread.start_new_thread(self.websocket_thread, ())
62+
63+
self.on_open_called = False
64+
self.on_message_called = False # message might be received very quickly, before we expect it
65+
for _ in range(5):
66+
print("Waiting for on_open to be called...")
67+
if self.on_open_called:
68+
print("yes, it was called!")
69+
break
70+
time.sleep(1)
71+
self.assertTrue(self.on_open_called)
72+
73+
self.on_message_called = False # message might be received very quickly, before we expect it
74+
for _ in range(5):
75+
print("Waiting for on_message to be called...")
76+
if self.on_message_called:
77+
print("yes, it was called!")
78+
break
79+
time.sleep(1)
80+
self.assertTrue(self.on_message_called)
81+
82+
# Disabled because not all servers send pings:
83+
# self.wait_for_ping()
84+
85+
self.on_close_called = False
86+
self.ws.close()
87+
for _ in range(5):
88+
print("Waiting for on_close to be called...")
89+
if self.on_close_called:
90+
print("yes, it was called!")
91+
break
92+
time.sleep(1)
93+
self.assertTrue(self.on_close_called)

0 commit comments

Comments
 (0)