Exemple #1
0
class WsClientSendingTestCase(unittest.TestCase):
    def setUp(self):
        self.transport = StringTransport()
        self.handler = Handler()
        self.factory = WebSocketFactory(self.handler)
    
    def test_buildProtocol(self):
        proto = self.factory.buildProtocol(None)
        self.assertIsInstance(proto, WebSocketDeviceHiveProtocol)
    
    def test_send_message(self):
        # testing headers sending
        # this should result in connected event

        proto = self.factory.buildProtocol(None)
        proto.makeConnection(self.transport)

        origin = ''.join((
            'GET /device HTTP/1.1\r\n',
            'Host: localhost\r\n',
            'Upgrade: websocket\r\n',
            'Connection: Upgrade\r\n',
            'Sec-WebSocket-Key: {0}\r\n'.format(proto.socket.security_key),
            'Origin: http://localhost\r\n',
            'Sec-WebSocket-Protocol: device-hive, devicehive\r\n',
            'Sec-WebSocket-Version: 13\r\n\r\n',
        ))
        self.assertEquals(origin, self.transport.value())

        proto.dataReceived('HTTP/1.1 101 OK\r\n\r\n')
        self.assertTrue(self.handler.is_connected)

        self.transport.clear()
        # testing message sending
        proto.socket.rand = Random(1)
        defer = self.factory.send_message({'test': True})
        self.assertIsInstance(defer, Deferred)
        self.assertEquals('{{"test": true, "requestId": {0}}}'.format(max(proto.msg_callbacks.keys())), decode_ws_message(self.transport.value()))
        self.assertFalse(defer.called)
        # testing message response
        request_id = max(proto.msg_callbacks.keys())
        proto.socket.frame_received(WS_OPCODE_TEXT_FRAME, '{{"requestId":{0},"done":1}}'.format(request_id))
        self.assertTrue(defer.called)