summaryrefslogtreecommitdiff
path: root/tests/logging_tests
diff options
context:
space:
mode:
authorPreston Holmes <preston@ptone.com>2013-05-15 16:14:28 -0700
committerPreston Holmes <preston@ptone.com>2013-05-25 16:27:34 -0700
commitd228c1192ed59ab0114d9eba82ac99df611652d2 (patch)
treee9ae061d032f269bcd3914b50ef200c1fd4a208e /tests/logging_tests
parent36d47f72e300321c4a328a643d489436535d1442 (diff)
Fixed #19866 -- Added security logger and return 400 for SuspiciousOperation.
SuspiciousOperations have been differentiated into subclasses, and are now logged to a 'django.security.*' logger. SuspiciousOperations that reach django.core.handlers.base.BaseHandler will now return a 400 instead of a 500. Thanks to tiwoc for the report, and Carl Meyer and Donald Stufft for review.
Diffstat (limited to 'tests/logging_tests')
-rw-r--r--tests/logging_tests/tests.py24
-rw-r--r--tests/logging_tests/urls.py10
-rw-r--r--tests/logging_tests/views.py11
3 files changed, 43 insertions, 2 deletions
diff --git a/tests/logging_tests/tests.py b/tests/logging_tests/tests.py
index 8e5445cd42..0c2d269464 100644
--- a/tests/logging_tests/tests.py
+++ b/tests/logging_tests/tests.py
@@ -8,9 +8,10 @@ import warnings
from django.conf import LazySettings
from django.core import mail
from django.test import TestCase, RequestFactory
-from django.test.utils import override_settings
+from django.test.utils import override_settings, patch_logger
from django.utils.encoding import force_text
-from django.utils.log import CallbackFilter, RequireDebugFalse, RequireDebugTrue
+from django.utils.log import (CallbackFilter, RequireDebugFalse,
+ RequireDebugTrue)
from django.utils.six import StringIO
from django.utils.unittest import skipUnless
@@ -354,3 +355,22 @@ class SettingsConfigureLogging(TestCase):
settings.configure(
LOGGING_CONFIG='logging_tests.tests.dictConfig')
self.assertTrue(dictConfig.called)
+
+
+class SecurityLoggerTest(TestCase):
+
+ urls = 'logging_tests.urls'
+
+ def test_suspicious_operation_creates_log_message(self):
+ with self.settings(DEBUG=True):
+ with patch_logger('django.security.SuspiciousOperation', 'error') as calls:
+ response = self.client.get('/suspicious/')
+ self.assertEqual(len(calls), 1)
+ self.assertEqual(calls[0], 'dubious')
+
+ def test_suspicious_operation_uses_sublogger(self):
+ with self.settings(DEBUG=True):
+ with patch_logger('django.security.DisallowedHost', 'error') as calls:
+ response = self.client.get('/suspicious_spec/')
+ self.assertEqual(len(calls), 1)
+ self.assertEqual(calls[0], 'dubious')
diff --git a/tests/logging_tests/urls.py b/tests/logging_tests/urls.py
new file mode 100644
index 0000000000..c738bd565c
--- /dev/null
+++ b/tests/logging_tests/urls.py
@@ -0,0 +1,10 @@
+from __future__ import unicode_literals
+
+from django.conf.urls import patterns, url
+
+from . import views
+
+urlpatterns = patterns('',
+ url(r'^suspicious/$', views.suspicious),
+ url(r'^suspicious_spec/$', views.suspicious_spec),
+)
diff --git a/tests/logging_tests/views.py b/tests/logging_tests/views.py
new file mode 100644
index 0000000000..c685bcc005
--- /dev/null
+++ b/tests/logging_tests/views.py
@@ -0,0 +1,11 @@
+from __future__ import unicode_literals
+
+from django.core.exceptions import SuspiciousOperation, DisallowedHost
+
+
+def suspicious(request):
+ raise SuspiciousOperation('dubious')
+
+
+def suspicious_spec(request):
+ raise DisallowedHost('dubious')