예제 #1
0
def test_redis_event_manager_subscription():
    """Test that RedisEventManager subscribing works."""
    class RedisConfig(TestingConfig):
        REDIS_URL = "redis://localhost:6379/2"
        CACHE_REDIS_URL = "redis://localhost:6379/2"
        CACHE_TYPE = "redis"

    try:
        app = create_ctfd(config=RedisConfig)
    except ConnectionError:
        print("Failed to connect to redis. Skipping test.")
    else:
        with app.app_context():
            saved_data = {
                u"data": {
                    u"content": u"asdf",
                    u"date": u"2019-01-28T05:02:19.830906+00:00",
                    u"id": 13,
                    u"team": None,
                    u"team_id": None,
                    u"title": u"asdf",
                    u"user": None,
                    u"user_id": None,
                },
                u"type": u"notification",
            }

            saved_event = {
                "pattern": None,
                "type": "message",
                "channel": "ctf",
                "data": json.dumps(saved_data),
            }
            with patch.object(redis.client.PubSub,
                              "listen") as fake_pubsub_listen:
                fake_pubsub_listen.return_value = [saved_event]
                event_manager = RedisEventManager()

                events = event_manager.subscribe()
                message = next(events)
                assert isinstance(message, ServerSentEvent)
                assert message.to_dict() == {"data": "", "type": "ping"}
                assert message.__str__().startswith("event:ping")

                message = next(events)
                assert isinstance(message, ServerSentEvent)
                assert message.to_dict() == saved_data
                assert message.__str__().startswith(
                    "event:notification\ndata:")
        destroy_ctfd(app)
예제 #2
0
def test_redis_event_manager_subscription():
    """Test that RedisEventManager subscribing works."""

    # TODO: This test is flaky.
    class RedisConfig(TestingConfig):
        REDIS_URL = 'redis://localhost:6379'
        CACHE_REDIS_URL = 'redis://localhost:6379'
        CACHE_TYPE = 'redis'

    try:
        app = create_ctfd(config=RedisConfig)
        with app.app_context():
            saved_data = {
                u'data': {
                    u'content': u'asdf',
                    u'date': u'2019-01-28T05:02:19.830906+00:00',
                    u'id': 13,
                    u'team': None,
                    u'team_id': None,
                    u'title': u'asdf',
                    u'user': None,
                    u'user_id': None
                },
                u'type': u'notification'
            }

            saved_event = {
                'pattern': None,
                'type': 'message',
                'channel': 'ctf',
                'data': json.dumps(saved_data)
            }
            with patch.object(redis.client.PubSub,
                              'listen') as fake_pubsub_listen:
                fake_pubsub_listen.return_value = [saved_event]
                event_manager = RedisEventManager()
                for message in event_manager.subscribe():
                    assert isinstance(message, ServerSentEvent)
                    assert message.to_dict() == saved_data
                    assert message.__str__().startswith(
                        'event:notification\ndata:')
                    break
        destroy_ctfd(app)
    except ConnectionError:
        print("Failed to connect to redis. Skipping test.")
def test_redis_event_manager_subscription():
    """Test that RedisEventManager subscribing works."""
    class RedisConfig(TestingConfig):
        REDIS_URL = "redis://localhost:6379/2"
        CACHE_REDIS_URL = "redis://localhost:6379/2"
        CACHE_TYPE = "redis"

    try:
        app = create_ctfd(config=RedisConfig)
    except ConnectionError:
        print("Failed to connect to redis. Skipping test.")
    else:
        with app.app_context():
            saved_data = {
                "user_id": None,
                "title": "asdf",
                "content": "asdf",
                "team_id": None,
                "user": None,
                "team": None,
                "date": "2019-01-28T01:20:46.017649+00:00",
                "id": 10,
            }
            saved_event = {"type": "notification", "data": saved_data}

            with patch.object(Queue, "get") as fake_queue:
                fake_queue.return_value = saved_event
                event_manager = RedisEventManager()

                events = event_manager.subscribe()
                message = next(events)
                assert isinstance(message, ServerSentEvent)
                assert message.to_dict() == {"data": "", "type": "ping"}
                assert message.__str__().startswith("event:ping")

                message = next(events)
                assert isinstance(message, ServerSentEvent)
                assert message.to_dict() == saved_event
                assert message.__str__().startswith(
                    "event:notification\ndata:")
        destroy_ctfd(app)