Commit bb558539 authored by Karen Tracey's avatar Karen Tracey
Browse files

[1.0.X] Made a set of small test changes to avoid leaving temp files hanging...

[1.0.X] 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.

Backport/merge of r10406.  Also updated svnmerge metadata.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10407 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 520c670b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@ from django.db import models
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)
+3 −1
Original line number Diff line number Diff line
@@ -5,10 +5,11 @@ ModelForm's save() method causes Model.save() to be called more than once.
"""

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 @@ class Bug639Test(unittest.TestCase):
        """
        p = Photo.objects.get()
        p.image.delete(save=False)
        shutil.rmtree(temp_storage_dir)
+3 −3
Original line number Diff line number Diff line
@@ -5,9 +5,6 @@ from django.db import models
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 @@ except ImportError:

# 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 −7
Original line number Diff line number Diff line
@@ -37,8 +37,8 @@ class FileUploadTests(TestCase):

        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 @@ class FileUploadTests(TestCase):

        response = self.client.post('/file_uploads/unicode_name/', post_data)

        file1.close()
        try:
            os.unlink(file1.name)
        except:
@@ -150,51 +151,57 @@ class FileUploadTests(TestCase):
        # 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)

@@ -242,6 +249,13 @@ class FileUploadTests(TestCase):
            # CustomUploadError is the error that should have been raised
            self.assertEqual(err.__class__, uploadhandler.CustomUploadError)

    def setUp(self):
        if not os.path.isdir(temp_storage.location):
            os.makedirs(temp_storage.location)

    def tearDown(self):
        shutil.rmtree(temp_storage.location)

class DirectoryCreationTests(unittest.TestCase):
    """
    Tests for error handling during directory creation