mirror of
https://github.com/django/daphne.git
synced 2025-04-25 03:03:47 +03:00
96 lines
3.2 KiB
Python
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
|