mirror of https://github.com/django/django.git
Fixed #32437 -- Fixed cleaning up ALLOWED_HOSTS in LiveServerTestCase on setUpClass() failure.
This commit is contained in:
parent
e412b28845
commit
694deff82f
|
@ -1573,11 +1573,12 @@ class LiveServerTestCase(TransactionTestCase):
|
||||||
for conn in cls.server_thread.connections_override.values():
|
for conn in cls.server_thread.connections_override.values():
|
||||||
conn.dec_thread_sharing()
|
conn.dec_thread_sharing()
|
||||||
|
|
||||||
|
cls._live_server_modified_settings.disable()
|
||||||
|
super().tearDownClass()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def tearDownClass(cls):
|
def tearDownClass(cls):
|
||||||
cls._tearDownClassInternal()
|
cls._tearDownClassInternal()
|
||||||
cls._live_server_modified_settings.disable()
|
|
||||||
super().tearDownClass()
|
|
||||||
|
|
||||||
|
|
||||||
class SerializeMixin:
|
class SerializeMixin:
|
||||||
|
|
|
@ -9,6 +9,7 @@ from urllib.error import HTTPError
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
from urllib.request import urlopen
|
from urllib.request import urlopen
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.core.servers.basehttp import WSGIServer
|
from django.core.servers.basehttp import WSGIServer
|
||||||
from django.test import LiveServerTestCase, override_settings
|
from django.test import LiveServerTestCase, override_settings
|
||||||
from django.test.testcases import LiveServerThread, QuietWSGIRequestHandler
|
from django.test.testcases import LiveServerThread, QuietWSGIRequestHandler
|
||||||
|
@ -39,6 +40,42 @@ class LiveServerBase(LiveServerTestCase):
|
||||||
return urlopen(self.live_server_url + url)
|
return urlopen(self.live_server_url + url)
|
||||||
|
|
||||||
|
|
||||||
|
class FailingLiveServerThread(LiveServerThread):
|
||||||
|
def _create_server(self):
|
||||||
|
raise RuntimeError('Error creating server.')
|
||||||
|
|
||||||
|
|
||||||
|
class LiveServerTestCaseSetupTest(LiveServerBase):
|
||||||
|
server_thread_class = FailingLiveServerThread
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def check_allowed_hosts(cls, expected):
|
||||||
|
if settings.ALLOWED_HOSTS != expected:
|
||||||
|
raise RuntimeError(f'{settings.ALLOWED_HOSTS} != {expected}')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
cls.check_allowed_hosts(['testserver'])
|
||||||
|
try:
|
||||||
|
super().setUpClass()
|
||||||
|
except RuntimeError:
|
||||||
|
# LiveServerTestCase's change to ALLOWED_HOSTS should be reverted.
|
||||||
|
cls.check_allowed_hosts(['testserver'])
|
||||||
|
else:
|
||||||
|
raise RuntimeError('Server did not fail.')
|
||||||
|
cls.set_up_called = True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
# Make tearDownClass() a no-op because setUpClass() was already cleaned
|
||||||
|
# up, and because the error inside setUpClass() was handled, which will
|
||||||
|
# cause tearDownClass() to be called when it normally wouldn't.
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_set_up_class(self):
|
||||||
|
self.assertIs(self.set_up_called, True)
|
||||||
|
|
||||||
|
|
||||||
class LiveServerAddress(LiveServerBase):
|
class LiveServerAddress(LiveServerBase):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
Loading…
Reference in New Issue