source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/gluon/tests/test_cache.py

main
Last change on this file was 42bd667, checked in by David Fuertes <dfuertes@…>, 4 years ago

Historial Limpio

  • Property mode set to 100755
File size: 4.8 KB
Line 
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4"""
5    Unit tests for gluon.cache
6"""
7import os
8import unittest
9
10from gluon.storage import Storage
11from gluon.cache import CacheInRam, CacheOnDisk, Cache
12from gluon.dal import DAL, Field
13
14oldcwd = None
15
16
17def setUpModule():
18    global oldcwd
19    if oldcwd is None:
20        oldcwd = os.getcwd()
21        if not os.path.isdir('gluon'):
22            os.chdir(os.path.realpath('../../'))
23
24
25def tearDownModule():
26    global oldcwd
27    if oldcwd:
28        os.chdir(oldcwd)
29        oldcwd = None
30    try:
31        os.unlink('dummy.db')
32    except:
33        pass
34
35
36class TestCache(unittest.TestCase):
37
38    # TODO: test_CacheAbstract(self):
39
40    def test_CacheInRam(self):
41
42        # defaults to mode='http'
43        cache = CacheInRam()
44        self.assertEqual(cache('a', lambda: 1, 0), 1)
45        self.assertEqual(cache('a', lambda: 2, 100), 1)
46        cache.clear('b')
47        self.assertEqual(cache('a', lambda: 2, 100), 1)
48        cache.clear('a')
49        self.assertEqual(cache('a', lambda: 2, 100), 2)
50        cache.clear()
51        self.assertEqual(cache('a', lambda: 3, 100), 3)
52        self.assertEqual(cache('a', lambda: 4, 0), 4)
53        # test singleton behaviour
54        cache = CacheInRam()
55        cache.clear()
56        self.assertEqual(cache('a', lambda: 3, 100), 3)
57        self.assertEqual(cache('a', lambda: 4, 0), 4)
58        # test key deletion
59        cache('a', None)
60        self.assertEqual(cache('a', lambda: 5, 100), 5)
61        # test increment
62        self.assertEqual(cache.increment('a'), 6)
63        self.assertEqual(cache('a', lambda: 1, 100), 6)
64        cache.increment('b')
65        self.assertEqual(cache('b', lambda: 'x', 100), 1)
66
67    def test_CacheOnDisk(self):
68
69        # defaults to mode='http'
70        s = Storage({'application': 'admin',
71                     'folder': 'applications/admin'})
72        cache = CacheOnDisk(s)
73        self.assertEqual(cache('a', lambda: 1, 0), 1)
74        self.assertEqual(cache('a', lambda: 2, 100), 1)
75        cache.clear('b')
76        self.assertEqual(cache('a', lambda: 2, 100), 1)
77        cache.clear('a')
78        self.assertEqual(cache('a', lambda: 2, 100), 2)
79        cache.clear()
80        self.assertEqual(cache('a', lambda: 3, 100), 3)
81        self.assertEqual(cache('a', lambda: 4, 0), 4)
82        # test singleton behaviour
83        cache = CacheOnDisk(s)
84        cache.clear()
85        self.assertEqual(cache('a', lambda: 3, 100), 3)
86        self.assertEqual(cache('a', lambda: 4, 0), 4)
87        # test key deletion
88        cache('a', None)
89        self.assertEqual(cache('a', lambda: 5, 100), 5)
90        # test increment
91        self.assertEqual(cache.increment('a'), 6)
92        self.assertEqual(cache('a', lambda: 1, 100), 6)
93        cache.increment('b')
94        self.assertEqual(cache('b', lambda: 'x', 100), 1)
95
96    # TODO: def test_CacheAction(self):
97
98    # TODO: def test_Cache(self):
99
100    # TODO: def test_lazy_cache(self):
101
102    def test_CacheWithPrefix(self):
103        s = Storage({'application': 'admin',
104                     'folder': 'applications/admin'})
105        cache = Cache(s)
106        prefix = cache.with_prefix(cache.ram, 'prefix')
107        self.assertEqual(prefix('a', lambda: 1, 0), 1)
108        self.assertEqual(prefix('a', lambda: 2, 100), 1)
109        self.assertEqual(cache.ram('prefixa', lambda: 2, 100), 1)
110
111    def test_Regex(self):
112        cache = CacheInRam()
113        self.assertEqual(cache('a1', lambda: 1, 0), 1)
114        self.assertEqual(cache('a2', lambda: 2, 100), 2)
115        cache.clear(regex=r'a*')
116        self.assertEqual(cache('a1', lambda: 2, 0), 2)
117        self.assertEqual(cache('a2', lambda: 3, 100), 3)
118
119    def test_DALcache(self):
120        s = Storage({'application': 'admin',
121                     'folder': 'applications/admin'})
122        cache = Cache(s)
123        db = DAL('sqlite:memory', check_reserved=['all'])
124        db.define_table('t_a', Field('f_a'))
125        db.t_a.insert(f_a='test')
126        db.commit()
127        a = db(db.t_a.id > 0).select(cache=(cache.ram, 60), cacheable=True)
128        b = db(db.t_a.id > 0).select(cache=(cache.ram, 60), cacheable=True)
129        self.assertEqual(a.as_csv(), b.as_csv())
130        c = db(db.t_a.id > 0).select(cache=(cache.disk, 60), cacheable=True)
131        d = db(db.t_a.id > 0).select(cache=(cache.disk, 60), cacheable=True)
132        self.assertEqual(c.as_csv(), d.as_csv())
133        self.assertEqual(a.as_csv(), c.as_csv())
134        self.assertEqual(b.as_csv(), d.as_csv())
135        e = db(db.t_a.id > 0).select(cache=(cache.disk, 60))
136        f = db(db.t_a.id > 0).select(cache=(cache.disk, 60))
137        self.assertEqual(e.as_csv(), f.as_csv())
138        self.assertEqual(a.as_csv(), f.as_csv())
139        g = db(db.t_a.id > 0).select(cache=(cache.ram, 60))
140        h = db(db.t_a.id > 0).select(cache=(cache.ram, 60))
141        self.assertEqual(g.as_csv(), h.as_csv())
142        self.assertEqual(a.as_csv(), h.as_csv())
143        db.t_a.drop()
144        db.close()
Note: See TracBrowser for help on using the repository browser.