Пример #1
0
    def test_clear_all_namespaces(self):
        self.request_cache.set(TEST_KEY, EXPECTED_VALUE)
        self.other_request_cache.set(TEST_KEY, EXPECTED_VALUE)
        RequestCache.clear_all_namespaces()
        cached_response = self.request_cache.get_cached_response(TEST_KEY)
        self.assertFalse(cached_response.is_found)

        cached_response = self.other_request_cache.get_cached_response(
            TEST_KEY)
        self.assertFalse(cached_response.is_found)
Пример #2
0
class TestTieredCacheMiddleware(TestCase):
    @override_settings(MIDDLEWARE=[
        'edx_django_utils.cache.middleware.RequestCacheMiddleware',
        'edx_django_utils.cache.middleware.TieredCacheMiddleware'
    ])
    def setUp(self):
        super(TestTieredCacheMiddleware, self).setUp()
        self.middleware = middleware.TieredCacheMiddleware()
        self.request = RequestFactory().get('/')
        self.request.user = self._mock_user(is_staff=True)

        self.request_cache = RequestCache()
        self.request_cache.clear_all_namespaces()

    def test_process_request(self):
        self.middleware.process_request(self.request)

        self.assertFalse(
            self.request_cache.get_cached_response(
                SHOULD_FORCE_CACHE_MISS_KEY).value)

    def test_process_request_force_django_cache_miss(self):
        request = RequestFactory().get(
            '/?{}=tRuE'.format(FORCE_CACHE_MISS_PARAM))
        request.user = self._mock_user(is_staff=True)

        self.middleware.process_request(request)

        self.assertTrue(
            self.request_cache.get_cached_response(
                SHOULD_FORCE_CACHE_MISS_KEY).value)

    def test_process_request_force_django_cache_miss_non_staff(self):
        request = RequestFactory().get(
            '/?{}=tRuE'.format(FORCE_CACHE_MISS_PARAM))
        request.user = self._mock_user(is_staff=False)

        self.middleware.process_request(request)

        self.assertFalse(
            self.request_cache.get_cached_response(
                SHOULD_FORCE_CACHE_MISS_KEY).value)

    @override_settings(MIDDLEWARE=['some.Middleware'])
    def test_tiered_cache_missing_middleware(self):
        with self.assertRaises(AssertionError):
            middleware.TieredCacheMiddleware()

    def _mock_user(self, is_staff=True):
        mock_user = MagicMock()
        mock_user.is_active = True
        mock_user.is_staff = is_staff
        return mock_user
Пример #3
0
class TestTieredCacheMiddleware(TestCase):  # pylint: disable=missing-class-docstring
    def setUp(self):
        super(TestTieredCacheMiddleware, self).setUp()
        self.middleware = middleware.TieredCacheMiddleware()
        self.request = RequestFactory().get('/')
        self.request.user = self._mock_user(is_staff=True)

        self.request_cache = RequestCache()
        self.request_cache.clear_all_namespaces()

    def test_process_request(self):
        self.middleware.process_request(self.request)

        self.assertFalse(
            self.request_cache.get_cached_response(
                SHOULD_FORCE_CACHE_MISS_KEY).value)

    def test_process_request_force_cache_miss(self):
        request = RequestFactory().get(
            '/?{}=tRuE'.format(FORCE_CACHE_MISS_PARAM))
        request.user = self._mock_user(is_staff=True)

        self.middleware.process_request(request)

        self.assertTrue(
            self.request_cache.get_cached_response(
                SHOULD_FORCE_CACHE_MISS_KEY).value)

    def test_process_request_force_cache_miss_non_staff(self):
        request = RequestFactory().get(
            '/?{}=tRuE'.format(FORCE_CACHE_MISS_PARAM))
        request.user = self._mock_user(is_staff=False)

        self.middleware.process_request(request)

        self.assertFalse(
            self.request_cache.get_cached_response(
                SHOULD_FORCE_CACHE_MISS_KEY).value)

    def _mock_user(self, is_staff=True):
        mock_user = MagicMock()
        mock_user.is_active = True
        mock_user.is_staff = is_staff
        return mock_user
Пример #4
0
    def test_clear_all_namespaces_other_thread(self):
        """
        Clearing all namespaces for a different thread should not clear this
        request cache.
        """
        self.request_cache.set(TEST_KEY, EXPECTED_VALUE)
        other_thread = Thread(
            target=lambda: RequestCache.clear_all_namespaces())  # pylint: disable=unnecessary-lambda
        other_thread.start()
        other_thread.join()

        cached_response = self.request_cache.get_cached_response(TEST_KEY)
        self.assertTrue(cached_response.is_found)
Пример #5
0
 def setUp(self):
     super().setUp()
     RequestCache.clear_all_namespaces()
     self.request_cache = RequestCache()
     self.other_request_cache = RequestCache(TEST_NAMESPACE)