From bece837829eafbc22f2598dadf82c9a8364b085a Mon Sep 17 00:00:00 2001 From: Nadège Michel Date: Tue, 6 Dec 2016 20:38:43 +0100 Subject: Fixed #20238 -- Added threading support to LiveServerTestCase. --- tests/servers/tests.py | 16 ++++++++++++++++ tests/servers/urls.py | 3 +++ tests/servers/views.py | 17 +++++++++++++++++ 3 files changed, 36 insertions(+) (limited to 'tests') diff --git a/tests/servers/tests.py b/tests/servers/tests.py index 5052f57908..b114b968df 100644 --- a/tests/servers/tests.py +++ b/tests/servers/tests.py @@ -130,3 +130,19 @@ class LiveServerPort(LiveServerBase): finally: if hasattr(TestCase, 'server_thread'): TestCase.server_thread.terminate() + + +class LiverServerThreadedTests(LiveServerBase): + """If LiverServerTestCase isn't threaded, these tests will hang.""" + + def test_view_calls_subview(self): + url = '/subview_calling_view/?%s' % urlencode({'url': self.live_server_url}) + with self.urlopen(url) as f: + self.assertEqual(f.read(), b'subview calling view: subview') + + def test_check_model_instance_from_subview(self): + url = '/check_model_instance_from_subview/?%s' % urlencode({ + 'url': self.live_server_url, + }) + with self.urlopen(url) as f: + self.assertIn(b'emily', f.read()) diff --git a/tests/servers/urls.py b/tests/servers/urls.py index 868ecc34f9..4963bde357 100644 --- a/tests/servers/urls.py +++ b/tests/servers/urls.py @@ -7,4 +7,7 @@ urlpatterns = [ url(r'^model_view/$', views.model_view), url(r'^create_model_instance/$', views.create_model_instance), url(r'^environ_view/$', views.environ_view), + url(r'^subview_calling_view/$', views.subview_calling_view), + url(r'^subview/$', views.subview), + url(r'^check_model_instance_from_subview/$', views.check_model_instance_from_subview), ] diff --git a/tests/servers/views.py b/tests/servers/views.py index f1fb8714c5..3fa99380b1 100644 --- a/tests/servers/views.py +++ b/tests/servers/views.py @@ -1,3 +1,5 @@ +from urllib.request import urlopen + from django.http import HttpResponse from .models import Person @@ -20,3 +22,18 @@ def create_model_instance(request): def environ_view(request): return HttpResponse("\n".join("%s: %r" % (k, v) for k, v in request.environ.items())) + + +def subview(request): + return HttpResponse('subview') + + +def subview_calling_view(request): + response = urlopen(request.GET['url'] + '/subview/') + return HttpResponse('subview calling view: {}'.format(response.read().decode())) + + +def check_model_instance_from_subview(request): + urlopen(request.GET['url'] + '/create_model_instance/') + response = urlopen(request.GET['url'] + '/model_view/') + return HttpResponse('subview calling view: {}'.format(response.read().decode())) -- cgit v1.3