mirror of
https://github.com/django/daphne.git
synced 2025-07-30 16:59:46 +03:00
Allow runworker to be used without staticfiles (#569)
* Allow runworker to be used without staticfiles * Split too long line * Reset binding_classes at start of runworker tests
This commit is contained in:
parent
10398780a3
commit
613153cbc6
|
@ -1,5 +1,6 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.apps import apps
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.management import BaseCommand, CommandError
|
from django.core.management import BaseCommand, CommandError
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ class Command(BaseCommand):
|
||||||
)
|
)
|
||||||
# Check a handler is registered for http reqs
|
# Check a handler is registered for http reqs
|
||||||
# Serve static files if Django in debug mode
|
# Serve static files if Django in debug mode
|
||||||
if settings.DEBUG:
|
if settings.DEBUG and apps.is_installed('django.contrib.staticfiles'):
|
||||||
self.channel_layer.router.check_default(http_consumer=StaticFilesConsumer())
|
self.channel_layer.router.check_default(http_consumer=StaticFilesConsumer())
|
||||||
else:
|
else:
|
||||||
self.channel_layer.router.check_default()
|
self.channel_layer.router.check_default()
|
||||||
|
|
|
@ -7,6 +7,9 @@ from django.core.management import CommandError, call_command
|
||||||
from django.test import TestCase, mock
|
from django.test import TestCase, mock
|
||||||
from six import StringIO
|
from six import StringIO
|
||||||
|
|
||||||
|
from channels.asgi import channel_layers, ChannelLayerWrapper
|
||||||
|
from channels.binding.base import BindingMetaclass
|
||||||
|
from channels.handler import ViewConsumer
|
||||||
from channels.management.commands import runserver
|
from channels.management.commands import runserver
|
||||||
from channels.staticfiles import StaticFilesConsumer
|
from channels.staticfiles import StaticFilesConsumer
|
||||||
|
|
||||||
|
@ -25,6 +28,18 @@ class RunWorkerTests(TestCase):
|
||||||
import channels.log
|
import channels.log
|
||||||
self.stream = StringIO()
|
self.stream = StringIO()
|
||||||
channels.log.handler = logging.StreamHandler(self.stream)
|
channels.log.handler = logging.StreamHandler(self.stream)
|
||||||
|
BindingMetaclass.binding_classes = []
|
||||||
|
self._old_layer = channel_layers.set(
|
||||||
|
'fake_channel',
|
||||||
|
ChannelLayerWrapper(
|
||||||
|
FakeChannelLayer(),
|
||||||
|
'fake_channel',
|
||||||
|
channel_layers['fake_channel'].routing[:],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
channel_layers.set('fake_channel', self._old_layer)
|
||||||
|
|
||||||
def test_runworker_no_local_only(self, mock_worker):
|
def test_runworker_no_local_only(self, mock_worker):
|
||||||
"""
|
"""
|
||||||
|
@ -37,7 +52,11 @@ class RunWorkerTests(TestCase):
|
||||||
"""
|
"""
|
||||||
Test that the StaticFilesConsumer is used in debug mode.
|
Test that the StaticFilesConsumer is used in debug mode.
|
||||||
"""
|
"""
|
||||||
with self.settings(DEBUG=True, STATIC_URL='/static/'):
|
with self.settings(
|
||||||
|
DEBUG=True,
|
||||||
|
STATIC_URL='/static/',
|
||||||
|
INSTALLED_APPS=['channels', 'django.contrib.staticfiles'],
|
||||||
|
):
|
||||||
# Use 'fake_channel' that bypasses the 'inmemory' check
|
# Use 'fake_channel' that bypasses the 'inmemory' check
|
||||||
call_command('runworker', '--layer', 'fake_channel')
|
call_command('runworker', '--layer', 'fake_channel')
|
||||||
mock_worker.assert_called_with(
|
mock_worker.assert_called_with(
|
||||||
|
@ -51,6 +70,25 @@ class RunWorkerTests(TestCase):
|
||||||
static_consumer = channel_layer.router.root.routing[0].consumer
|
static_consumer = channel_layer.router.root.routing[0].consumer
|
||||||
self.assertIsInstance(static_consumer, StaticFilesConsumer)
|
self.assertIsInstance(static_consumer, StaticFilesConsumer)
|
||||||
|
|
||||||
|
def test_debug_without_staticfiles(self, mock_worker):
|
||||||
|
"""
|
||||||
|
Test that the StaticFilesConsumer is not used in debug mode when staticfiles app is not configured.
|
||||||
|
"""
|
||||||
|
with self.settings(DEBUG=True, STATIC_URL=None, INSTALLED_APPS=['channels']):
|
||||||
|
# Use 'fake_channel' that bypasses the 'inmemory' check
|
||||||
|
call_command('runworker', '--layer', 'fake_channel')
|
||||||
|
mock_worker.assert_called_with(
|
||||||
|
only_channels=None,
|
||||||
|
exclude_channels=None,
|
||||||
|
callback=None,
|
||||||
|
channel_layer=mock.ANY,
|
||||||
|
)
|
||||||
|
|
||||||
|
channel_layer = mock_worker.call_args[1]['channel_layer']
|
||||||
|
static_consumer = channel_layer.router.root.routing[0].consumer
|
||||||
|
self.assertNotIsInstance(static_consumer, StaticFilesConsumer)
|
||||||
|
self.assertIsInstance(static_consumer, ViewConsumer)
|
||||||
|
|
||||||
def test_runworker(self, mock_worker):
|
def test_runworker(self, mock_worker):
|
||||||
# Use 'fake_channel' that bypasses the 'inmemory' check
|
# Use 'fake_channel' that bypasses the 'inmemory' check
|
||||||
call_command('runworker', '--layer', 'fake_channel')
|
call_command('runworker', '--layer', 'fake_channel')
|
||||||
|
|
Loading…
Reference in New Issue
Block a user