I have this code:
import asyncio
import json
from base64 import b64encode, b64decode
from autobahn.asyncio.websocket import WebSocketServerProtocol, \
WebSocketServerFactory
from .abstract import AbstractRouter
from .routers import RestWSRouter
from .validators import validate_subclass
class RestWSServerProtocol(WebSocketServerProtocol):
def _decode_message(self, payload, isBinary=False):
if isBinary:
payload = b64decode(payload)
input_data = payload.decode('utf-8')
return json.loads(input_data)
def _encode_message(self, response, isBinary=False):
if isBinary:
response = b64encode(response)
return response
@asyncio.coroutine
def onMessage(self, payload, isBinary):
request = self._decode_message(payload, isBinary)
response = self.factory.router.dispatch(request)
out_payload = self._encode_message(response, isBinary)
self.sendMessage(out_payload, isBinary=isBinary)
class RestWSServerFactory(WebSocketServerFactory):
def __init__(self, *args, **kwargs):
super(RestWSServerFactory, self).__init__(*args, **kwargs)
self._router = kwargs.get('router', RestWSRouter())
@property
def router(self):
return self._router
@router.setter
def router(self, router):
validate_subclass(self, '_router', router, AbstractRouter)
How can I testing this code (custom factories and protocols) which using Autobahn.WS and asyncio library via unittest/py.test? For example, for user function/properties/methods, I've just create instance of implemented factory or protocol and invoke. But what about onMessage, connectionMade, etc. methods?
Aucun commentaire:
Enregistrer un commentaire