diff options
Diffstat (limited to 'tests/file_uploads')
| -rw-r--r-- | tests/file_uploads/tests.py | 31 | ||||
| -rw-r--r-- | tests/file_uploads/urls.py | 1 | ||||
| -rw-r--r-- | tests/file_uploads/views.py | 6 |
3 files changed, 38 insertions, 0 deletions
diff --git a/tests/file_uploads/tests.py b/tests/file_uploads/tests.py index cb2a6dd92f..c933d38236 100644 --- a/tests/file_uploads/tests.py +++ b/tests/file_uploads/tests.py @@ -327,6 +327,37 @@ class FileUploadTests(TestCase): self.assertEqual(got.get('file1'), 1) self.assertEqual(got.get('file2'), 2) + def test_fileuploads_closed_at_request_end(self): + file = tempfile.NamedTemporaryFile + with file() as f1, file() as f2a, file() as f2b: + response = self.client.post('/fd_closing/t/', { + 'file': f1, + 'file2': (f2a, f2b), + }) + + request = response.wsgi_request + # Check that the files got actually parsed. + self.assertTrue(hasattr(request, '_files')) + + file = request._files['file'] + self.assertTrue(file.closed) + + files = request._files.getlist('file2') + self.assertTrue(files[0].closed) + self.assertTrue(files[1].closed) + + def test_no_parsing_triggered_by_fd_closing(self): + file = tempfile.NamedTemporaryFile + with file() as f1, file() as f2a, file() as f2b: + response = self.client.post('/fd_closing/f/', { + 'file': f1, + 'file2': (f2a, f2b), + }) + + request = response.wsgi_request + # Check that the fd closing logic doesn't trigger parsing of the stream + self.assertFalse(hasattr(request, '_files')) + def test_file_error_blocking(self): """ The server should not block when there are upload errors (bug #8622). diff --git a/tests/file_uploads/urls.py b/tests/file_uploads/urls.py index a6f446bf55..b5f90c88c8 100644 --- a/tests/file_uploads/urls.py +++ b/tests/file_uploads/urls.py @@ -15,4 +15,5 @@ urlpatterns = patterns('', (r'^getlist_count/$', views.file_upload_getlist_count), (r'^upload_errors/$', views.file_upload_errors), (r'^filename_case/$', views.file_upload_filename_case_view), + (r'^fd_closing/(?P<access>t|f)/$', views.file_upload_fd_closing), ) diff --git a/tests/file_uploads/views.py b/tests/file_uploads/views.py index a29391af6e..de195f4d39 100644 --- a/tests/file_uploads/views.py +++ b/tests/file_uploads/views.py @@ -157,3 +157,9 @@ def file_upload_content_type_extra(request): (k, smart_str(v)) for k, v in uploadedfile.content_type_extra.items() ]) return HttpResponse(json.dumps(params)) + + +def file_upload_fd_closing(request, access): + if access == 't': + request.FILES # Trigger file parsing. + return HttpResponse('') |
