summaryrefslogtreecommitdiff
path: root/tests/cache
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cache')
-rw-r--r--tests/cache/tests.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/tests/cache/tests.py b/tests/cache/tests.py
index c26183f5b2..d5532fa1e6 100644
--- a/tests/cache/tests.py
+++ b/tests/cache/tests.py
@@ -6,12 +6,13 @@ import os
import pickle
import re
import shutil
+import sys
import tempfile
import threading
import time
import unittest
from pathlib import Path
-from unittest import mock
+from unittest import mock, skipIf
from django.conf import settings
from django.core import management, signals
@@ -1494,6 +1495,28 @@ class FileBasedCacheTests(BaseCacheTests, TestCase):
# Returns the default instead of erroring.
self.assertEqual(cache.get('foo', 'baz'), 'baz')
+ @skipIf(
+ sys.platform == 'win32',
+ 'Windows only partially supports umasks and chmod.',
+ )
+ def test_cache_dir_permissions(self):
+ os.rmdir(self.dirname)
+ dir_path = Path(self.dirname) / 'nested' / 'filebasedcache'
+ for cache_params in settings.CACHES.values():
+ cache_params['LOCATION'] = dir_path
+ setting_changed.send(self.__class__, setting='CACHES', enter=False)
+ cache.set('foo', 'bar')
+ self.assertIs(dir_path.exists(), True)
+ tests = [
+ dir_path,
+ dir_path.parent,
+ dir_path.parent.parent,
+ ]
+ for directory in tests:
+ with self.subTest(directory=directory):
+ dir_mode = directory.stat().st_mode & 0o777
+ self.assertEqual(dir_mode, 0o700)
+
def test_get_does_not_ignore_non_filenotfound_exceptions(self):
with mock.patch('builtins.open', side_effect=OSError):
with self.assertRaises(OSError):