Пример #1
0
 def setUp(self):
     super(SockJSSubscriberTestCase, self).setUp()
     self.publisher = self._new_client()
     self.subscriber = SockJSSubscriber(self.client)
Пример #2
0
class SockJSSubscriberTestCase(RedisTestCase):

    def setUp(self):
        super(SockJSSubscriberTestCase, self).setUp()
        self.publisher = self._new_client()
        self.subscriber = SockJSSubscriber(self.client)

    def tearDown(self):
        if self.subscriber.is_subscribed():
            self.subscriber.close()
        try:
            self.publisher.connection.disconnect()
            del self.publisher
        except AttributeError:
            pass
        super(SockJSSubscriberTestCase, self).tearDown()

    @async_test
    @gen.engine
    def test_subscribe(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        data = {'foo': randint(0, 1000)}
        self.subscriber.publish('test.channel', data, client=self.publisher)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.stop()

    @async_test
    @gen.engine
    def test_subscribe_unicode(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, u'test.channel', broadcaster)
        data = {'foo': randint(0, 1000)}
        self.subscriber.publish(u'test.channel', data, client=self.publisher)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.stop()

    @async_test
    @gen.engine
    def test_publish_unicode(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        data = u'лабуда-ерунда'
        self.publisher.publish('test.channel', data)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)
        self.assertEqual(broadcaster.messages[0], data)

        self.stop()

    @async_test
    @gen.engine
    def test_unsubscribe(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        self.subscriber.unsubscribe('test.channel', broadcaster)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, 'test.channel', data,
                       client=self.publisher)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        self.stop()

    @async_test
    @gen.engine
    def test_unsubscribe_unicode(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, u'test.channel', broadcaster)
        self.subscriber.unsubscribe(u'test.channel', broadcaster)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, u'test.channel', data,
                       client=self.publisher)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        self.stop()

    @async_test
    @gen.engine
    def test_sequental_subscribe(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        yield gen.Task(self.subscriber.subscribe, 'test.channel2', broadcaster)
        self.subscriber.unsubscribe(u'test.channel2', broadcaster)
        self.subscriber.unsubscribe(u'test.channel', broadcaster)
        yield gen.Task(self.pause)
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, 'test.channel', data,
                       client=self.publisher)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)

        self.stop()

    @async_test
    @gen.engine
    def test_subscribe_multiple(self):
        broadcaster = DummyConnection()
        broadcaster2 = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        yield gen.Task(self.subscriber.subscribe, 'test.channel2', broadcaster)
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster2)
        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, 'test.channel', data,
                       client=self.publisher)
        data2 = {'foo2': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, 'test.channel2', data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 3)
        self.assertEqual(len(broadcaster.messages), 2)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.subscriber.unsubscribe('test.channel', broadcaster2)

        data2 = {'foo': randint(0, 1000)}

        yield gen.Task(self.subscriber.publish, 'test.channel', data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 4)
        self.assertEqual(len(broadcaster.messages), 3)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[2], json.dumps(data2))

        self.stop()

    @async_test
    @gen.engine
    def test_subscribe_list(self):
        broadcaster = DummyConnection()
        broadcaster2 = DummyConnection()
        channels = ['test.channel', 'test.channel2']
        yield gen.Task(self.subscriber.subscribe, channels, broadcaster)
        yield gen.Task(self.subscriber.subscribe,
                       ('test.channel', ),
                       broadcaster2)
        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, 'test.channel', data,
                       client=self.publisher)
        data2 = {'foo2': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish, 'test.channel2', data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 3)
        self.assertEqual(len(broadcaster.messages), 2)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.subscriber.unsubscribe('test.channel', broadcaster2)

        data2 = {'foo': randint(0, 1000)}

        yield gen.Task(self.subscriber.publish, 'test.channel', data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 4)
        self.assertEqual(len(broadcaster.messages), 3)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[2], json.dumps(data2))

        self.stop()
Пример #3
0
class SockJSSubscriberTestCase(RedisTestCase):
    def setUp(self):
        super(SockJSSubscriberTestCase, self).setUp()
        self.publisher = self._new_client()
        self.subscriber = SockJSSubscriber(self.client)

    def tearDown(self):
        if self.subscriber.is_subscribed():
            self.subscriber.close()
        try:
            self.publisher.connection.disconnect()
            del self.publisher
        except AttributeError:
            pass
        super(SockJSSubscriberTestCase, self).tearDown()

    @async_test
    @gen.engine
    def test_subscribe(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        data = {'foo': randint(0, 1000)}
        self.subscriber.publish('test.channel', data, client=self.publisher)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.stop()

    @async_test
    @gen.engine
    def test_subscribe_unicode(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, u'test.channel', broadcaster)
        data = {'foo': randint(0, 1000)}
        self.subscriber.publish(u'test.channel', data, client=self.publisher)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.stop()

    @async_test
    @gen.engine
    def test_unsubscribe(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        self.subscriber.unsubscribe('test.channel', broadcaster)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       'test.channel',
                       data,
                       client=self.publisher)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        self.stop()

    @async_test
    @gen.engine
    def test_unsubscribe_unicode(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, u'test.channel', broadcaster)
        self.subscriber.unsubscribe(u'test.channel', broadcaster)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       u'test.channel',
                       data,
                       client=self.publisher)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        self.stop()

    @async_test
    @gen.engine
    def test_sequental_subscribe(self):
        broadcaster = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        yield gen.Task(self.subscriber.subscribe, 'test.channel2', broadcaster)
        self.subscriber.unsubscribe(u'test.channel2', broadcaster)
        self.subscriber.unsubscribe(u'test.channel', broadcaster)
        yield gen.Task(self.pause)
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)

        yield gen.Task(self.pause)

        self.assertFalse(broadcaster.messages)

        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       'test.channel',
                       data,
                       client=self.publisher)

        yield gen.Task(self.pause)

        self.assertTrue(broadcaster.messages)

        self.stop()

    @async_test
    @gen.engine
    def test_subscribe_multiple(self):
        broadcaster = DummyConnection()
        broadcaster2 = DummyConnection()
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster)
        yield gen.Task(self.subscriber.subscribe, 'test.channel2', broadcaster)
        yield gen.Task(self.subscriber.subscribe, 'test.channel', broadcaster2)
        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       'test.channel',
                       data,
                       client=self.publisher)
        data2 = {'foo2': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       'test.channel2',
                       data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 3)
        self.assertEqual(len(broadcaster.messages), 2)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.subscriber.unsubscribe('test.channel', broadcaster2)

        data2 = {'foo': randint(0, 1000)}

        yield gen.Task(self.subscriber.publish,
                       'test.channel',
                       data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 4)
        self.assertEqual(len(broadcaster.messages), 3)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[2], json.dumps(data2))

        self.stop()

    @async_test
    @gen.engine
    def test_subscribe_list(self):
        broadcaster = DummyConnection()
        broadcaster2 = DummyConnection()
        channels = ['test.channel', 'test.channel2']
        yield gen.Task(self.subscriber.subscribe, channels, broadcaster)
        yield gen.Task(self.subscriber.subscribe, ('test.channel', ),
                       broadcaster2)
        data = {'foo': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       'test.channel',
                       data,
                       client=self.publisher)
        data2 = {'foo2': randint(0, 1000)}
        yield gen.Task(self.subscriber.publish,
                       'test.channel2',
                       data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 3)
        self.assertEqual(len(broadcaster.messages), 2)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[0], json.dumps(data))

        self.subscriber.unsubscribe('test.channel', broadcaster2)

        data2 = {'foo': randint(0, 1000)}

        yield gen.Task(self.subscriber.publish,
                       'test.channel',
                       data2,
                       client=self.publisher)

        yield gen.Task(self.pause)

        msgs = broadcaster.messages + broadcaster2.messages
        self.assertEqual(len(msgs), 4)
        self.assertEqual(len(broadcaster.messages), 3)
        self.assertEqual(len(broadcaster2.messages), 1)
        self.assertEqual(broadcaster.messages[2], json.dumps(data2))

        self.stop()
Пример #4
0
 def setUp(self):
     super(SockJSSubscriberTestCase, self).setUp()
     self.publisher = self._new_client()
     self.subscriber = SockJSSubscriber(self.client)
Пример #5
0
from tornado.web import StaticFileHandler, FallbackHandler, RedirectHandler,\
    Application
from tornado.wsgi import WSGIContainer
from sockjs.tornado import SockJSConnection, SockJSRouter
from tornadoredis import Client as RedisClient
from tornadoredis.pubsub import SockJSSubscriber

from .. import config
toolname = config.toolname
from .oauth_handler import app as oauth_wsgi  # noqa
from ..celery import app as celery_app  # noqa

# Create the tornadoredis.Client instance
# and use it for redis channel subscriptions
subscriber = SockJSSubscriber(
    RedisClient(host=config.redis_server,
                port=config.redis_port,
                selected_db=config.redis_db))


class SockConnection(SockJSConnection):
    def on_open(self, info):
        self.channel = str(uuid4())
        subscriber.subscribe(self.channel, self)

    def on_close(self):
        subscriber.unsubscribe(self.channel, self)

    def on_message(self, message):
        data = json.loads(message)
        data['redis_channel'] = self.channel
        if data['action'] == 'watchlist':