summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Paroz <claude@2xlibre.net>2015-05-22 19:43:08 +0200
committerTim Graham <timograham@gmail.com>2015-05-23 14:58:03 -0400
commit0bfe322bacfdc7f09bc6600e4e475e3d4fbfc0e5 (patch)
tree1b52cc706ab3df6c1e63e8fab7dfecc99180b887
parentae03d1ac5b07f6b20bf8a8159fbd19303d7de3e0 (diff)
[1.8.x] Fixed #24826 -- Accounted for filesystem-dependent filename max length
Thanks Raphaƫl Hertzog for the report and help on the patch, and Tim Graham for the review. Backport of 170f7115bbae45f26ca8078e749dfe67445a57ea from master
-rw-r--r--tests/file_storage/tests.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/tests/file_storage/tests.py b/tests/file_storage/tests.py
index 18987c25c5..0800d49038 100644
--- a/tests/file_storage/tests.py
+++ b/tests/file_storage/tests.py
@@ -435,6 +435,18 @@ class FileFieldStorageTests(TestCase):
def tearDown(self):
shutil.rmtree(temp_storage_location)
+ def _storage_max_filename_length(self, storage):
+ """
+ Query filesystem for maximum filename length (e.g. AUFS has 242).
+ """
+ dir_to_test = storage.location
+ while not os.path.exists(dir_to_test):
+ dir_to_test = os.path.dirname(dir_to_test)
+ try:
+ return os.pathconf(dir_to_test, 'PC_NAME_MAX')
+ except Exception:
+ return 255 # Should be safe on most backends
+
def test_files(self):
# Attempting to access a FileField from the class raises a descriptive
# error
@@ -536,7 +548,7 @@ class FileFieldStorageTests(TestCase):
def test_extended_length_storage(self):
# Testing FileField with max_length > 255. Most systems have filename
# length limitation of 255. Path takes extra chars.
- filename = 251 * 'a' # 4 chars for extension.
+ filename = (self._storage_max_filename_length(temp_storage) - 4) * 'a' # 4 chars for extension.
obj = Storage()
obj.extended_length.save('%s.txt' % filename, ContentFile('Same Content'))
self.assertEqual(obj.extended_length.name, 'tests/%s.txt' % filename)