mirror of
				https://github.com/django/daphne.git
				synced 2025-11-04 09:37:32 +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
 |