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

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

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
parent 6d549263
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',
+14 −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)

+8 −0
Original line number Diff line number Diff line
# -*- 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 @@ True
{'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 @@ u'instance value'
datetime.date(1969, 4, 4)
>>> instance_form.initial['value']
12
>>> shutil.rmtree(temp_storage_location)
"""}