103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
|
from __future__ import with_statement
|
||
|
|
||
|
from django.core.exceptions import ImproperlyConfigured
|
||
|
from django.core.servers.basehttp import get_internal_wsgi_application
|
||
|
from django.core.wsgi import get_wsgi_application
|
||
|
from django.test import TestCase
|
||
|
from django.test.client import RequestFactory
|
||
|
from django.test.utils import override_settings
|
||
|
from django.utils import unittest
|
||
|
|
||
|
|
||
|
class WSGITest(TestCase):
|
||
|
urls = "regressiontests.wsgi.urls"
|
||
|
|
||
|
def test_get_wsgi_application(self):
|
||
|
"""
|
||
|
Verify that ``get_wsgi_application`` returns a functioning WSGI
|
||
|
callable.
|
||
|
|
||
|
"""
|
||
|
application = get_wsgi_application()
|
||
|
|
||
|
environ = RequestFactory()._base_environ(
|
||
|
PATH_INFO="/",
|
||
|
CONTENT_TYPE="text/html; charset=utf-8",
|
||
|
REQUEST_METHOD="GET"
|
||
|
)
|
||
|
|
||
|
response_data = {}
|
||
|
|
||
|
def start_response(status, headers):
|
||
|
response_data["status"] = status
|
||
|
response_data["headers"] = headers
|
||
|
|
||
|
response = application(environ, start_response)
|
||
|
|
||
|
self.assertEqual(response_data["status"], "200 OK")
|
||
|
self.assertEqual(
|
||
|
response_data["headers"],
|
||
|
[('Content-Type', 'text/html; charset=utf-8')])
|
||
|
self.assertEqual(
|
||
|
unicode(response),
|
||
|
u"Content-Type: text/html; charset=utf-8\n\nHello World!")
|
||
|
|
||
|
|
||
|
class GetInternalWSGIApplicationTest(unittest.TestCase):
|
||
|
@override_settings(WSGI_APPLICATION="regressiontests.wsgi.wsgi.application")
|
||
|
def test_success(self):
|
||
|
"""
|
||
|
If ``WSGI_APPLICATION`` is a dotted path, the referenced object is
|
||
|
returned.
|
||
|
|
||
|
"""
|
||
|
app = get_internal_wsgi_application()
|
||
|
|
||
|
from .wsgi import application
|
||
|
|
||
|
self.assertTrue(app is application)
|
||
|
|
||
|
|
||
|
@override_settings(WSGI_APPLICATION=None)
|
||
|
def test_default(self):
|
||
|
"""
|
||
|
If ``WSGI_APPLICATION`` is ``None``, the return value of
|
||
|
``get_wsgi_application`` is returned.
|
||
|
|
||
|
"""
|
||
|
# Mock out get_wsgi_application so we know its return value is used
|
||
|
fake_app = object()
|
||
|
def mock_get_wsgi_app():
|
||
|
return fake_app
|
||
|
from django.core.servers import basehttp
|
||
|
_orig_get_wsgi_app = basehttp.get_wsgi_application
|
||
|
basehttp.get_wsgi_application = mock_get_wsgi_app
|
||
|
|
||
|
try:
|
||
|
app = get_internal_wsgi_application()
|
||
|
|
||
|
self.assertTrue(app is fake_app)
|
||
|
finally:
|
||
|
basehttp.get_wsgi_application = _orig_get_wsgi_app
|
||
|
|
||
|
|
||
|
@override_settings(WSGI_APPLICATION="regressiontests.wsgi.noexist.app")
|
||
|
def test_bad_module(self):
|
||
|
with self.assertRaises(ImproperlyConfigured) as cm:
|
||
|
get_internal_wsgi_application()
|
||
|
|
||
|
self.assertEqual(
|
||
|
str(cm.exception),
|
||
|
"WSGI application 'regressiontests.wsgi.noexist.app' could not be loaded; could not import module 'regressiontests.wsgi.noexist': No module named noexist")
|
||
|
|
||
|
|
||
|
@override_settings(WSGI_APPLICATION="regressiontests.wsgi.wsgi.noexist")
|
||
|
def test_bad_name(self):
|
||
|
with self.assertRaises(ImproperlyConfigured) as cm:
|
||
|
get_internal_wsgi_application()
|
||
|
|
||
|
self.assertEqual(
|
||
|
str(cm.exception),
|
||
|
"WSGI application 'regressiontests.wsgi.wsgi.noexist' could not be loaded; can't find 'noexist' in module 'regressiontests.wsgi.wsgi': 'module' object has no attribute 'noexist'")
|
||
|
|