daphne/channels/tests/test_backends.py
2015-11-09 13:01:02 +01:00

96 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.test import TestCase
from ..backends.database import DatabaseChannelBackend
from ..backends.memory import InMemoryChannelBackend
from ..backends.redis_py import RedisChannelBackend
class MemoryBackendTests(TestCase):
backend_class = InMemoryChannelBackend
def setUp(self):
self.backend = self.backend_class(routing={})
self.backend.flush()
def test_send_recv(self):
"""
Tests that channels can send and receive messages.
"""
self.backend.send("test", {"value": "blue"})
self.backend.send("test", {"value": "green"})
self.backend.send("test2", {"value": "red"})
# Get just one first
channel, message = self.backend.receive_many(["test"])
self.assertEqual(channel, "test")
self.assertEqual(message, {"value": "blue"})
# And the second
channel, message = self.backend.receive_many(["test"])
self.assertEqual(channel, "test")
self.assertEqual(message, {"value": "green"})
# And the other channel with multi select
channel, message = self.backend.receive_many(["test", "test2"])
self.assertEqual(channel, "test2")
self.assertEqual(message, {"value": "red"})
def test_message_expiry(self):
self.backend = self.backend_class(routing={}, expiry=-100)
self.backend.send("test", {"value": "blue"})
channel, message = self.backend.receive_many(["test"])
self.assertIs(channel, None)
self.assertIs(message, None)
def test_groups(self):
"""
Tests that group addition and removal and listing works
"""
self.backend.group_add("tgroup", "test")
self.backend.group_add("tgroup", "test2€")
self.backend.group_add("tgroup2", "test3")
self.assertEqual(
set(self.backend.group_channels("tgroup")),
{"test", "test2€"},
)
self.backend.group_discard("tgroup", "test2€")
self.backend.group_discard("tgroup", "test2€")
self.assertEqual(
list(self.backend.group_channels("tgroup")),
["test"],
)
def test_group_send(self):
"""
Tests sending to groups.
"""
self.backend.group_add("tgroup", "test")
self.backend.group_add("tgroup", "test2")
self.backend.send_group("tgroup", {"value": "orange"})
channel, message = self.backend.receive_many(["test"])
self.assertEqual(channel, "test")
self.assertEqual(message, {"value": "orange"})
channel, message = self.backend.receive_many(["test2"])
self.assertEqual(channel, "test2")
self.assertEqual(message, {"value": "orange"})
def test_group_expiry(self):
self.backend = self.backend_class(routing={}, expiry=-100)
self.backend.group_add("tgroup", "test")
self.backend.group_add("tgroup", "test2")
self.assertEqual(
list(self.backend.group_channels("tgroup")),
[],
)
class RedisBackendTests(MemoryBackendTests):
backend_class = RedisChannelBackend
class DatabaseBackendTests(MemoryBackendTests):
backend_class = DatabaseChannelBackend