Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Made a set of small test changes to avoid leaving temp files hanging …

…around after running the test suite. First, fixed a couple of places where temp dirs were (or could be) created without later being deleted. Second, added a missing close() before unlink() since Windows raises an error on an attempt to remove an open file. Finally, in the file_uploads tests, avoided opening-by-name temporary files that we already have a descriptor for. Doing additional opens seems to run afoul of the Windows issue with deleting open files, so it generally works better to just seek back to 0 instead of calling open multiple times.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@10406 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit d0c897d6605a95c3e7826ee7f01ef20979977ebb 1 parent 6d54926
Karen Tracey kmtracey authored
3  tests/regressiontests/bug639/models.py
View
@@ -4,7 +4,8 @@
from django.core.files.storage import FileSystemStorage
from django.forms import ModelForm
-temp_storage = FileSystemStorage(tempfile.gettempdir())
+temp_storage_dir = tempfile.mkdtemp()
+temp_storage = FileSystemStorage(temp_storage_dir)
class Photo(models.Model):
title = models.CharField(max_length=30)
4 tests/regressiontests/bug639/tests.py
View
@@ -5,10 +5,11 @@
"""
import os
+import shutil
import unittest
from django.core.files.uploadedfile import SimpleUploadedFile
-from regressiontests.bug639.models import Photo, PhotoForm
+from regressiontests.bug639.models import Photo, PhotoForm, temp_storage_dir
class Bug639Test(unittest.TestCase):
@@ -37,3 +38,4 @@ def tearDown(self):
"""
p = Photo.objects.get()
p.image.delete(save=False)
+ shutil.rmtree(temp_storage_dir)
6 tests/regressiontests/file_storage/models.py
View
@@ -5,9 +5,6 @@
from django.core.files.storage import FileSystemStorage
from django.core.files.base import ContentFile
-temp_storage_dir = tempfile.mkdtemp()
-temp_storage = FileSystemStorage(temp_storage_dir)
-
# Test for correct behavior of width_field/height_field.
# Of course, we can't run this without PIL.
@@ -20,6 +17,9 @@
# If we have PIL, do these tests
if Image:
+ temp_storage_dir = tempfile.mkdtemp()
+ temp_storage = FileSystemStorage(temp_storage_dir)
+
class Person(models.Model):
name = models.CharField(max_length=50)
mugshot = models.ImageField(storage=temp_storage, upload_to='tests',
21 tests/regressiontests/file_uploads/tests.py
View
@@ -37,8 +37,8 @@ def test_large_upload(self):
post_data = {
'name': 'Ringo',
- 'file_field1': open(file1.name),
- 'file_field2': open(file2.name),
+ 'file_field1': file1,
+ 'file_field2': file2,
}
for key in post_data.keys():
@@ -66,6 +66,7 @@ def test_unicode_file_name(self):
response = self.client.post('/file_uploads/unicode_name/', post_data)
+ file1.close()
try:
os.unlink(file1.name)
except:
@@ -150,51 +151,57 @@ def test_custom_upload_handler(self):
# A small file (under the 5M quota)
smallfile = tempfile.NamedTemporaryFile()
smallfile.write('a' * (2 ** 21))
+ smallfile.seek(0)
# A big file (over the quota)
bigfile = tempfile.NamedTemporaryFile()
bigfile.write('a' * (10 * 2 ** 20))
+ bigfile.seek(0)
# Small file posting should work.
- response = self.client.post('/file_uploads/quota/', {'f': open(smallfile.name)})
+ response = self.client.post('/file_uploads/quota/', {'f': smallfile})
got = simplejson.loads(response.content)
self.assert_('f' in got)
# Large files don't go through.
- response = self.client.post("/file_uploads/quota/", {'f': open(bigfile.name)})
+ response = self.client.post("/file_uploads/quota/", {'f': bigfile})
got = simplejson.loads(response.content)
self.assert_('f' not in got)
def test_broken_custom_upload_handler(self):
f = tempfile.NamedTemporaryFile()
f.write('a' * (2 ** 21))
+ f.seek(0)
# AttributeError: You cannot alter upload handlers after the upload has been processed.
self.assertRaises(
AttributeError,
self.client.post,
'/file_uploads/quota/broken/',
- {'f': open(f.name)}
+ {'f': f}
)
def test_fileupload_getlist(self):
file1 = tempfile.NamedTemporaryFile()
file1.write('a' * (2 ** 23))
+ file1.seek(0)
file2 = tempfile.NamedTemporaryFile()
file2.write('a' * (2 * 2 ** 18))
+ file2.seek(0)
file2a = tempfile.NamedTemporaryFile()
file2a.write('a' * (5 * 2 ** 20))
+ file2a.seek(0)
response = self.client.post('/file_uploads/getlist_count/', {
- 'file1': open(file1.name),
+ 'file1': file1,
'field1': u'test',
'field2': u'test3',
'field3': u'test5',
'field4': u'test6',
'field5': u'test7',
- 'file2': (open(file2.name), open(file2a.name))
+ 'file2': (file2, file2a)
})
got = simplejson.loads(response.content)
8 tests/regressiontests/forms/models.py
View
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import datetime
import tempfile
+import shutil
from django.db import models
# Can't import as "forms" due to implementation details in the test suite (the
@@ -41,6 +42,12 @@ class FileForm(django_forms.Form):
{'file1': <SimpleUploadedFile: 我隻氣墊船裝滿晒鱔.txt (text/plain)>}
>>> m = FileModel.objects.create(file=f.cleaned_data['file1'])
+# It's enough that m gets created without error. Preservation of the exotic name is checked
+# in a file_uploads test; it's hard to do that correctly with doctest's unicode issues. So
+# we create and then immediately delete m so as to not leave the exotically named file around
+# for shutil.rmtree (on Windows) to have trouble with later.
+>>> m.delete()
+
# Boundary conditions on a PostitiveIntegerField #########################
>>> class BoundaryForm(ModelForm):
... class Meta:
@@ -78,4 +85,5 @@ class FileForm(django_forms.Form):
datetime.date(1969, 4, 4)
>>> instance_form.initial['value']
12
+>>> shutil.rmtree(temp_storage_location)
"""}
Please sign in to comment.
Something went wrong with that request. Please try again.