示例#1
0
class BaseCacheCase(TestCase):
    def setUp(self):
        self.locmem_cache = LocMemCache('default', {})
        self.locmem_cache.clear()
        self.patch = patch.object(decorators, 'cache', self.locmem_cache)
        self.patch.start()

    def tearDown(self):
        self.patch.stop()
class TestCachedTemplate(SimpleTestCase):
    """Test the single cached angular template tag."""
    def setUp(self):
        """Patch in a local memory cache."""
        self.locmem_cache = LocMemCache('default', {})
        self.locmem_cache.clear()
        self.patch = mock.patch.object(angular, 'cache', self.locmem_cache)
        self.patch.start()

    def tearDown(self):
        """Stop the patch."""
        self.patch.stop()

    @tag('unit')
    @mock.patch('web.templatetags.angular.finders.get_finders')
    @mock.patch(
        'builtins.open',
        new_callable=mock.mock_open,
        read_data='some_data'
    )
    def test_not_cached(self, m_file, m_get_finders):
        """Test behaviour of a template that is not cached."""
        m_get_finders.return_value = [FakeFinder(['a'])]
        key = '_angular_template_a'
        self.assertFalse(self.locmem_cache.get(key))
        html = CAT('a')
        expected = (
            '<script type="text/ng-template" id="/static/a">'
            'some_data'
            '</script>'
        )
        self.assertEqual(html, expected)
        self.assertEqual(self.locmem_cache.get(key), expected)

    @tag('unit')
    @mock.patch('web.templatetags.angular.finders.get_finders')
    @mock.patch(
        'builtins.open',
        new_callable=mock.mock_open,
        read_data='some_data'
    )
    def test_cached(self, m_file, m_get_finders):
        """Test behavior of a template that is cached."""
        m_get_finders.return_value = [FakeFinder(['a'])]
        key = '_angular_template_a'
        self.locmem_cache.add(key, 'the_data')
        html = CAT('a')
        expected = 'the_data'
        self.assertEqual(html, expected)
        self.assertEqual(self.locmem_cache.get(key), expected)
示例#3
0
def check_code_token_throttler(rf):
    with freeze_time('2020-01-02 13:00:00') as frozen_datetime:
        cache = LocMemCache('test_cache', {})
        cache.clear()
        throttler = get_code_token_throttler(cache)
        request = rf.get('/')

        assert inspect_cache(cache) == {}

        # First two requests should be allowed
        assert throttler.allow_request(request, None) is True
        assert inspect_cache(cache) == {
            ':1:drf_jwt_2fa-tc-SHA1(127.0.0.1)': [1577970000.0],
        }

        frozen_datetime.tick(delta=datetime.timedelta(seconds=1))
        throttler = get_code_token_throttler(cache)
        assert throttler.allow_request(request, None) is True
        assert inspect_cache(cache) == {
            ':1:drf_jwt_2fa-tc-SHA1(127.0.0.1)': [1577970001.0, 1577970000.0],
        }

        # Third request should be throttled
        throttler = get_code_token_throttler(cache)
        frozen_datetime.tick(delta=datetime.timedelta(seconds=1))
        assert throttler.allow_request(request, None) is False
        assert inspect_cache(cache) == {
            ':1:drf_jwt_2fa-tc-SHA1(127.0.0.1)': [1577970001.0, 1577970000.0],
        }

        # After 8s more, total 11s have passed and a new request should
        # be allowed
        throttler = get_code_token_throttler(cache)
        frozen_datetime.tick(delta=datetime.timedelta(seconds=8))
        assert throttler.allow_request(request, None) is True
        assert inspect_cache(cache) == {
            ':1:drf_jwt_2fa-tc-SHA1(127.0.0.1)': [1577970010.0, 1577970001.0],
        }
 def store(self):
     c = LocMemCache('test', {})
     c.clear()
     return OptionsStore(cache=c)
示例#5
0
class TransactionCacheTestCase(base.JohnnyTestCase):
    def setUp(self):
        self.backend = LocMemCache('', {})
        self.cache = TransactionCache(self.backend)
        self.cache.timeout = 1000

    def test_get(self):
        self.backend.set('a', '1')
        self.assertEqual(self.cache.get('a'), '1')
        self.assertIsNone(self.cache.get('missing'))

    def test_local_caching(self):
        self.backend.set('a', '1')
        self.assertEqual(self.cache.get('a'), '1')
        self.backend.clear()
        self.assertEqual(self.cache.get('a'), '1')

    def test_get_many_local_caching(self):
        self.backend.set('a', '1')
        self.backend.set('b', '2')
        self.assertEqual(
            self.cache.get_many(['a', 'b', 'c']),
            {'a': '1', 'b': '2'},
        )
        self.backend.clear()
        self.backend.set('c', '3')
        self.assertEqual(
            self.cache.get_many(['a', 'b', 'c']),
            {'a': '1', 'b': '2'},
        )

    def test_get_many_looks_up_missing(self):
        self.cache.get('a')
        with patch.object(self.backend, 'get_many') as get_many:
            self.cache.get_many(['a', 'b', 'c'])
            get_many.assert_called_with(['b', 'c'])

    def test_set_get(self):
        self.backend.set('a', '1')
        self.assertEqual(self.cache.get('a'), '1')
        self.cache.set('a', '2')
        self.assertEqual(self.cache.get('a'), '2')
        self.assertEqual(self.backend.get('a'), '1')

    def test_set_many(self):
        self.cache.set_many({'a': '1', 'b': '2'})
        self.assertEqual(self.cache.get('a'), '1')
        self.assertEqual(self.cache.get('b'), '2')

    def test_delete_get(self):
        self.backend.set('a', '1')
        self.assertEqual(self.cache.get('a'), '1')
        self.cache.delete('a')
        self.assertIsNone(self.cache.get('a'))
        self.assertEqual(self.backend.get('a'), '1')

    def test_delete_many(self):
        self.backend.set_many({'a': '1', 'b': '2'})
        self.cache.delete_many(['a', 'b'])
        self.assertIsNone(self.cache.get('a'))
        self.assertIsNone(self.cache.get('b'))

    def test_rollback(self):
        self.backend.set('a', '1')
        self.assertEqual(self.cache.get('a'), '1')
        self.backend.set('a', '2')
        self.assertEqual(self.cache.get('a'), '1')
        self.cache.rollback()
        self.assertEqual(self.cache.get('a'), '2')

    def test_commit(self):
        self.backend.set('a', '1')
        self.backend.set('b', '2')
        self.cache.set('a', '3')
        self.cache.delete('b')
        self.assertEqual(self.backend.get('a'), '1')
        self.assertEqual(self.backend.get('b'), '2')
        self.cache.commit()
        self.assertEqual(self.backend.get('a'), '3')
        self.assertIsNone(self.backend.get('b'))

    def test_rollback_savepoint(self):
        self.cache.set('a', '1')
        self.cache.savepoint('sp1')
        self.cache.set('a', '2')
        self.cache.savepoint('sp2')
        self.cache.set('a', '3')

        self.assertEqual(self.cache.get('a'), '3')
        self.cache.rollback_savepoint('sp2')
        self.assertEqual(self.cache.get('a'), '2')
        self.cache.rollback_savepoint('sp1')
        self.assertEqual(self.cache.get('a'), '1')

        self.assertRaises(IndexError, self.cache.rollback_savepoint, 'sp0')

    def test_rollback_savepoint_skip(self):
        self.cache.set('a', '1')
        self.cache.savepoint('sp1')
        self.cache.set('a', '2')
        self.cache.savepoint('sp2')
        self.cache.set('a', '3')

        self.assertEqual(self.cache.get('a'), '3')
        self.cache.rollback_savepoint('sp1')
        self.assertEqual(self.cache.get('a'), '1')

        self.assertRaises(IndexError, self.cache.rollback_savepoint, 'sp2')

    def test_rollback_savepoint_same_name(self):
        self.cache.set('a', '1')
        self.cache.savepoint('sp')
        self.cache.set('a', '2')
        self.cache.savepoint('sp')
        self.cache.set('a', '3')

        self.assertEqual(self.cache.get('a'), '3')
        self.cache.rollback_savepoint('sp')
        self.assertEqual(self.cache.get('a'), '2')
        self.cache.rollback_savepoint('sp')
        self.assertEqual(self.cache.get('a'), '1')

        self.assertRaises(IndexError, self.cache.rollback_savepoint, 'sp')

    def test_commit_savepoint(self):
        self.cache.set('a', '1')
        self.cache.savepoint('sp1')
        self.cache.set('a', '2')

        self.assertEqual(self.cache.get('a'), '2')
        self.cache.commit_savepoint('sp1')
        self.assertEqual(self.cache.get('a'), '2')

        self.assertRaises(IndexError, self.cache.rollback_savepoint, 'sp1')

    def test_commit_savepoint_same_name(self):
        self.cache.set('a', '1')
        self.cache.savepoint('sp')
        self.cache.set('a', '2')
        self.cache.savepoint('sp')
        self.cache.set('a', '3')

        self.assertEqual(self.cache.get('a'), '3')
        self.cache.commit_savepoint('sp')
        self.assertEqual(self.cache.get('a'), '3')
        self.cache.rollback_savepoint('sp')
        self.assertEqual(self.cache.get('a'), '1')

        self.assertRaises(IndexError, self.cache.rollback_savepoint, 'sp')
示例#6
0
 def store(self):
     c = LocMemCache("test", settings.CACHES["default"])
     c.clear()
     return OptionsStore(cache=c)