diff options
| author | Gary Wilson Jr <gary.wilson@gmail.com> | 2009-05-08 05:52:44 +0000 |
|---|---|---|
| committer | Gary Wilson Jr <gary.wilson@gmail.com> | 2009-05-08 05:52:44 +0000 |
| commit | e93b3a7b02ab3c8fb04a794458c85a5f6d7f26b1 (patch) | |
| tree | 284dc55b39c07944b8f83fcea82ddeb9abe497c1 /tests | |
| parent | 1b9893f991aa87062dc483cec242356804b632bb (diff) | |
[1.0.X]: Fixed #9610 -- Fixed duplicate uploaded file name mangling when directory contained a dot and file didn't. Based on patches from fadlytabrani and adurdin.
Backport of r10701 from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10702 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/file_storage/tests.py | 47 |
1 files changed, 43 insertions, 4 deletions
diff --git a/tests/regressiontests/file_storage/tests.py b/tests/regressiontests/file_storage/tests.py index 6b219f064e..594277797e 100644 --- a/tests/regressiontests/file_storage/tests.py +++ b/tests/regressiontests/file_storage/tests.py @@ -84,11 +84,12 @@ u'custom_storage.2' """ # Tests for a race condition on file saving (#4948). -# This is written in such a way that it'll always pass on platforms +# This is written in such a way that it'll always pass on platforms # without threading. import os import time import shutil +import sys import tempfile from unittest import TestCase from django.conf import settings @@ -109,13 +110,13 @@ class FileSaveRaceConditionTest(TestCase): self.storage_dir = tempfile.mkdtemp() self.storage = FileSystemStorage(self.storage_dir) self.thread = threading.Thread(target=self.save_file, args=['conflict']) - + def tearDown(self): shutil.rmtree(self.storage_dir) - + def save_file(self, name): name = self.storage.save(name, SlowFile("Data")) - + def test_race_condition(self): self.thread.start() name = self.save_file('conflict') @@ -141,3 +142,41 @@ class FileStoragePermissions(TestCase): actual_mode = os.stat(self.storage.path(name))[0] & 0777 self.assertEqual(actual_mode, 0666) + +class FileStoragePathParsing(TestCase): + def setUp(self): + self.storage_dir = tempfile.mkdtemp() + self.storage = FileSystemStorage(self.storage_dir) + + def tearDown(self): + shutil.rmtree(self.storage_dir) + + def test_directory_with_dot(self): + """Regression test for #9610. + + If the directory name contains a dot and the file name doesn't, make + sure we still mangle the file name instead of the directory name. + """ + + self.storage.save('dotted.path/test', ContentFile("1")) + self.storage.save('dotted.path/test', ContentFile("2")) + + self.assertFalse(os.path.exists(os.path.join(self.storage_dir, 'dotted_.path'))) + self.assertTrue(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test'))) + self.assertTrue(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/test_'))) + + def test_first_character_dot(self): + """ + File names with a dot as their first character don't have an extension, + and the underscore should get added to the end. + """ + self.storage.save('dotted.path/.test', ContentFile("1")) + self.storage.save('dotted.path/.test', ContentFile("2")) + + self.assertTrue(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/.test'))) + # Before 2.6, a leading dot was treated as an extension, and so + # underscore gets added to beginning instead of end. + if sys.version_info < (2, 6): + self.assertTrue(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/_.test'))) + else: + self.assertTrue(os.path.exists(os.path.join(self.storage_dir, 'dotted.path/.test_'))) |
