|
4 | 4 | import errno |
5 | 5 | import os |
6 | 6 | import shutil |
| 7 | +import sys |
7 | 8 | import tempfile |
8 | 9 | import time |
9 | 10 | from datetime import datetime, timedelta |
|
23 | 24 | from django.test import SimpleTestCase |
24 | 25 | from django.utils import six |
25 | 26 | from django.utils import unittest |
| 27 | +from django.test.utils import override_settings |
26 | 28 | from ..servers.tests import LiveServerBase |
27 | 29 |
|
28 | 30 | # Try to import PIL in either of the two ways it can end up installed. |
@@ -433,22 +435,29 @@ def test_race_condition(self): |
433 | 435 | self.storage.delete('conflict') |
434 | 436 | self.storage.delete('conflict_1') |
435 | 437 |
|
| 438 | +@unittest.skipIf(sys.platform.startswith('win'), "Windows only partially supports umasks and chmod.") |
436 | 439 | class FileStoragePermissions(unittest.TestCase): |
437 | 440 | def setUp(self): |
438 | | - self.old_perms = settings.FILE_UPLOAD_PERMISSIONS |
439 | | - settings.FILE_UPLOAD_PERMISSIONS = 0o666 |
| 441 | + self.umask = 0o027 |
| 442 | + self.old_umask = os.umask(self.umask) |
440 | 443 | self.storage_dir = tempfile.mkdtemp() |
441 | 444 | self.storage = FileSystemStorage(self.storage_dir) |
442 | 445 |
|
443 | 446 | def tearDown(self): |
444 | | - settings.FILE_UPLOAD_PERMISSIONS = self.old_perms |
445 | 447 | shutil.rmtree(self.storage_dir) |
| 448 | + os.umask(self.old_umask) |
446 | 449 |
|
| 450 | + @override_settings(FILE_UPLOAD_PERMISSIONS=0o654) |
447 | 451 | def test_file_upload_permissions(self): |
448 | 452 | name = self.storage.save("the_file", ContentFile("data")) |
449 | 453 | actual_mode = os.stat(self.storage.path(name))[0] & 0o777 |
450 | | - self.assertEqual(actual_mode, 0o666) |
| 454 | + self.assertEqual(actual_mode, 0o654) |
451 | 455 |
|
| 456 | + @override_settings(FILE_UPLOAD_PERMISSIONS=None) |
| 457 | + def test_file_upload_default_permissions(self): |
| 458 | + fname = self.storage.save("some_file", ContentFile("data")) |
| 459 | + mode = os.stat(self.storage.path(fname))[0] & 0o777 |
| 460 | + self.assertEqual(mode, 0o666 & ~self.umask) |
452 | 461 |
|
453 | 462 | class FileStoragePathParsing(unittest.TestCase): |
454 | 463 | def setUp(self): |
|
0 commit comments