Add tests for testing timeout behaviour
This commit is contained in:
@@ -2,9 +2,10 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
import uuid
|
|
||||||
import unittest
|
|
||||||
import socket
|
import socket
|
||||||
|
import ssl
|
||||||
|
import unittest
|
||||||
|
import uuid
|
||||||
|
|
||||||
# websocket-client
|
# websocket-client
|
||||||
import websocket as ws
|
import websocket as ws
|
||||||
@@ -14,32 +15,34 @@ TRACABLE=False
|
|||||||
def create_mask_key(n):
|
def create_mask_key(n):
|
||||||
return "abcd"
|
return "abcd"
|
||||||
|
|
||||||
class StringSockMock:
|
class SockMock(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.set_data("")
|
self.data = []
|
||||||
self.sent = []
|
self.sent = []
|
||||||
|
|
||||||
def set_data(self, data):
|
def add_packet(self, data):
|
||||||
self.data = data
|
self.data.append(data)
|
||||||
self.pos = 0
|
|
||||||
self.len = len(data)
|
|
||||||
|
|
||||||
def recv(self, bufsize):
|
def recv(self, bufsize):
|
||||||
if self.len < self.pos:
|
if self.data:
|
||||||
return
|
e = self.data.pop(0)
|
||||||
buf = self.data[self.pos: self.pos + bufsize]
|
if isinstance(e, Exception):
|
||||||
self.pos += bufsize
|
raise e
|
||||||
return buf
|
if len(e) > bufsize:
|
||||||
|
self.data.insert(0, e[bufsize:])
|
||||||
|
return e[:bufsize]
|
||||||
|
|
||||||
def send(self, data):
|
def send(self, data):
|
||||||
self.sent.append(data)
|
self.sent.append(data)
|
||||||
return len(data)
|
return len(data)
|
||||||
|
|
||||||
|
|
||||||
class HeaderSockMock(StringSockMock):
|
class HeaderSockMock(SockMock):
|
||||||
|
|
||||||
def __init__(self, fname):
|
def __init__(self, fname):
|
||||||
self.set_data(open(fname).read())
|
SockMock.__init__(self)
|
||||||
self.sent = []
|
self.add_packet(open(fname).read())
|
||||||
|
|
||||||
|
|
||||||
class WebSocketTest(unittest.TestCase):
|
class WebSocketTest(unittest.TestCase):
|
||||||
@@ -173,15 +176,49 @@ class WebSocketTest(unittest.TestCase):
|
|||||||
def testRecv(self):
|
def testRecv(self):
|
||||||
# TODO: add longer frame data
|
# TODO: add longer frame data
|
||||||
sock = ws.WebSocket()
|
sock = ws.WebSocket()
|
||||||
s = sock.sock = StringSockMock()
|
s = sock.sock = SockMock()
|
||||||
s.set_data("\x81\x8fabcd\x82\xe3\xf0\x87\xe3\xf1\x80\xe5\xca\x81\xe2\xc5\x82\xe3\xcc")
|
s.add_packet("\x81\x8fabcd\x82\xe3\xf0\x87\xe3\xf1\x80\xe5\xca\x81\xe2\xc5\x82\xe3\xcc")
|
||||||
data = sock.recv()
|
data = sock.recv()
|
||||||
self.assertEquals(data, "こんにちは")
|
self.assertEquals(data, "こんにちは")
|
||||||
|
|
||||||
s.set_data("\x81\x85abcd)\x07\x0f\x08\x0e")
|
s.add_packet("\x81\x85abcd)\x07\x0f\x08\x0e")
|
||||||
data = sock.recv()
|
data = sock.recv()
|
||||||
self.assertEquals(data, "Hello")
|
self.assertEquals(data, "Hello")
|
||||||
|
|
||||||
|
def testInternalRecvStrict(self):
|
||||||
|
sock = ws.WebSocket()
|
||||||
|
s = sock.sock = SockMock()
|
||||||
|
s.add_packet("foo")
|
||||||
|
s.add_packet(socket.timeout())
|
||||||
|
s.add_packet("bar")
|
||||||
|
s.add_packet(ssl.SSLError("The read operation timed out"))
|
||||||
|
s.add_packet("baz")
|
||||||
|
with self.assertRaises(ws.WebSocketTimeoutException):
|
||||||
|
data = sock._recv_strict(9)
|
||||||
|
with self.assertRaises(ws.WebSocketTimeoutException):
|
||||||
|
data = sock._recv_strict(9)
|
||||||
|
data = sock._recv_strict(9)
|
||||||
|
self.assertEquals(data, "foobarbaz")
|
||||||
|
with self.assertRaises(ws.WebSocketConnectionClosedException):
|
||||||
|
data = sock._recv_strict(1)
|
||||||
|
|
||||||
|
def testRecvTimeout(self):
|
||||||
|
sock = ws.WebSocket()
|
||||||
|
s = sock.sock = SockMock()
|
||||||
|
s.add_packet("\x81")
|
||||||
|
s.add_packet(socket.timeout())
|
||||||
|
s.add_packet("\x8dabcd\x29\x07\x0f\x08\x0e")
|
||||||
|
s.add_packet(socket.timeout())
|
||||||
|
s.add_packet("\x4e\x43\x33\x0e\x10\x0f\x00\x40")
|
||||||
|
with self.assertRaises(ws.WebSocketTimeoutException):
|
||||||
|
data = sock.recv()
|
||||||
|
with self.assertRaises(ws.WebSocketTimeoutException):
|
||||||
|
data = sock.recv()
|
||||||
|
data = sock.recv()
|
||||||
|
self.assertEquals(data, "Hello, World!")
|
||||||
|
with self.assertRaises(ws.WebSocketConnectionClosedException):
|
||||||
|
data = sock.recv()
|
||||||
|
|
||||||
def testWebSocket(self):
|
def testWebSocket(self):
|
||||||
s = ws.create_connection("ws://echo.websocket.org/")
|
s = ws.create_connection("ws://echo.websocket.org/")
|
||||||
self.assertNotEquals(s, None)
|
self.assertNotEquals(s, None)
|
||||||
|
Reference in New Issue
Block a user