88import sys
99from django .conf import settings
1010from django .test import RequestFactory , override_settings
11- from django .http import HttpResponse , StreamingHttpResponse
11+ from django .http import HttpResponse , StreamingHttpResponse , QueryDict
1212
1313import request_logging
1414from request_logging .middleware import LoggingMiddleware , DEFAULT_LOG_LEVEL , DEFAULT_COLORIZE , DEFAULT_MAX_BODY_LENGTH ,\
@@ -59,6 +59,7 @@ def test_no_exception_risen(self, mock_log):
5959 body = u"some body"
6060 request = self .factory .post ("/a-missing-route-somewhere" , data = {"file" : body })
6161 self .middleware .process_request (request )
62+ self .middleware .process_body (request )
6263 self ._assert_logged (mock_log , body )
6364
6465
@@ -79,13 +80,15 @@ def test_request_body_logged(self, mock_log):
7980 body = u"some body"
8081 request = self .factory .post ("/somewhere" , data = {"file" : body })
8182 self .middleware .process_request (request )
83+ self .middleware .process_body (request )
8284 self ._assert_logged (mock_log , body )
8385
8486 def test_request_binary_logged (self , mock_log ):
8587 body = u"some body"
8688 datafile = io .StringIO (body )
8789 request = self .factory .post ("/somewhere" , data = {"file" : datafile })
8890 self .middleware .process_request (request )
91+ self .middleware .process_body (request )
8992 self ._assert_logged (mock_log , "(binary data)" )
9093
9194 def test_request_jpeg_logged (self , mock_log ):
@@ -96,6 +99,7 @@ def test_request_jpeg_logged(self, mock_log):
9699 datafile = io .BytesIO (body )
97100 request = self .factory .post ("/somewhere" , data = {"file" : datafile })
98101 self .middleware .process_request (request )
102+ self .middleware .process_body (request )
99103 self ._assert_logged (mock_log , "(multipart/form)" )
100104
101105 def test_request_headers_logged (self , mock_log ):
@@ -315,7 +319,7 @@ def test_default_max_body_length(self, mock_log):
315319
316320 body = DEFAULT_MAX_BODY_LENGTH * "0" + "1"
317321 request = factory .post ("/somewhere" , data = {"file" : body })
318- middleware .process_request (request )
322+ middleware .process_body (request )
319323
320324 request_body_str = request .body if isinstance (request .body , str ) else request .body .decode ()
321325 self ._assert_logged (mock_log , re .sub (r'\r?\n' , '' , request_body_str [:DEFAULT_MAX_BODY_LENGTH ]))
@@ -328,7 +332,7 @@ def test_customized_max_body_length(self, mock_log):
328332
329333 body = 150 * "0" + "1"
330334 request = factory .post ("/somewhere" , data = {"file" : body })
331- middleware .process_request (request )
335+ middleware .process_body (request )
332336
333337 request_body_str = request .body if isinstance (request .body , str ) else request .body .decode ()
334338 self ._assert_logged (mock_log , re .sub (r'\r?\n' , '' , request_body_str [:150 ]))
@@ -400,6 +404,31 @@ def test_still_logs_path(self, mock_log):
400404 self ._assert_logged (mock_log , uri )
401405
402406
407+ @mock .patch .object (request_logging .middleware , "request_logger" )
408+ class DjangoDecoratorTestCase (BaseLogTestCase ):
409+ def setUp (self ):
410+ self .factory = RequestFactory ()
411+ def get_response (request ):
412+ response = mock .MagicMock ()
413+ response .status_code = 200
414+ response .get .return_value = 'application/json'
415+ return response
416+ self .middleware = LoggingMiddleware (get_response )
417+
418+ # Because django isn't actually processing this test this test stubbed
419+ # out the important parts of what it does which is processes a decorator
420+ # like @sensitive_post_parameters('pass__word'), which gets added
421+ # to the request object, and then I also created the QueryDict that is
422+ # the underlying POST data.
423+ def test_log_sensitive_post_parameters (self , mock_log ):
424+ uri = "/dont_log_sensitive_parameter"
425+ request = self .factory .post (uri )
426+ request .POST = QueryDict ('pass_word=foo' )
427+ request .sensitive_post_parameters = ["pass_word" ]
428+ self .middleware .__call__ (request )
429+ self ._assert_not_logged (mock_log , "foo" )
430+
431+
403432@mock .patch .object (request_logging .middleware , "request_logger" )
404433class DRFTestCase (BaseLogTestCase ):
405434 def setUp (self ):
0 commit comments