Skip to content

Commit 6337a75

Browse files
committed
example of mocking the datasource for unit testing
1 parent 9fcad7a commit 6337a75

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

example/mocking_data_source.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
from ws4py import configure_logger
2+
from ws4py.websocket import WebSocket
3+
from ws4py.messaging import Message, TextMessage
4+
5+
logger = configure_logger(stdout=True)
6+
7+
class DataSource(object):
8+
def __init__(self):
9+
self.frames = set()
10+
self.frame = None
11+
self.remaining_bytes = None
12+
13+
def setblocking(self, flag):
14+
pass
15+
16+
def feed(self, message):
17+
if isinstance(message, Message):
18+
message = message.single(mask=True)
19+
else:
20+
message = TextMessage(message).single(mask=True)
21+
self.frames.add(message)
22+
23+
def recv(self, size):
24+
if not self.frame:
25+
if not self.frames:
26+
return b''
27+
self.frame = self.frames.pop()
28+
self.remaining_bytes = self.frame
29+
30+
current_bytes = self.remaining_bytes[:size]
31+
self.remaining_bytes = self.remaining_bytes[size:]
32+
33+
if self.remaining_bytes is b'':
34+
self.frame = None
35+
self.remaining_bytes = None
36+
37+
return current_bytes
38+
39+
class LogWebSocket(WebSocket):
40+
def opened(self):
41+
logger.info("WebSocket now ready")
42+
43+
def closed(self, code=1000, reason="Burp, done!"):
44+
logger.info("Terminated with reason '%s'" % reason)
45+
46+
def received_message(self, m):
47+
logger.info("Received message: %s" % m)
48+
49+
if __name__ == '__main__':
50+
source = DataSource()
51+
ws = LogWebSocket(sock=source)
52+
53+
source.feed(u'hello there')
54+
source.feed(u'a bit more')
55+
56+
ws.run()

0 commit comments

Comments
 (0)