lundi 27 juillet 2015

How to testing autobahn protocol classes?

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