def test_update(self):
     c = RAMCache()
     c.update(1, 2, 3)
     s = c._getStorage()
     self.assertEqual(s.maxEntries, 1, "maxEntries not set")
     self.assertEqual(s.maxAge, 2, "maxAge not set")
     self.assertEqual(s.cleanupInterval, 3, "cleanupInterval not set")
 def test_getStatistics(self):
     c = RAMCache()
     c.set(42, "object", key={'foo': 'bar'})
     c.set(43, "object", key={'foo': 'bar'})
     c.query("object")
     c.query("object", key={'foo': 'bar'})
     r1 = c._getStorage().getStatistics()
     r2 = c.getStatistics()
     self.assertEqual(r1, r2, "see Storage.getStatistics() tests")
 def test_timedCleanup(self):
     from time import sleep
     c = RAMCache()
     c.update(cleanupInterval=1, maxAge=2)
     lastCleanup = c._getStorage().lastCleanup
     sleep(2)
     c.set(42, "object", key={'foo': 'bar'})
     # last cleanup should now be updated
     self.failUnless(lastCleanup < c._getStorage().lastCleanup)
    def test_getStorage(self):
        c = RAMCache()
        c.maxAge = 123
        c.maxEntries = 2002
        c.cleanupInterval = 42
        storage1 = c._getStorage()
        storage2 = c._getStorage()
        self.assertEqual(storage1, storage2,
                         "_getStorage returns different storages")

        self.assertEqual(storage1.maxAge, 123,
                         "maxAge not set (expected 123, got %s)"
                         % storage1.maxAge)
        self.assertEqual(storage1.maxEntries, 2002,
                         "maxEntries not set (expected 2002, got %s)"
                         % storage1.maxEntries)
        self.assertEqual(storage1.cleanupInterval, 42,
                         "cleanupInterval not set (expected 42, got %s)"
                         % storage1.cleanupInterval)

        # Simulate persisting and restoring the RamCache which removes
        # all _v_ attributes.
        for k in c.__dict__.keys():
            if k.startswith('_v_'):
                del c.__dict__[k]
        storage2 = c._getStorage()
        self.assertEqual(storage1, storage2,
                         "_getStorage returns different storages")
    def test_set(self):
        ob = ('path',)
        keywords = {"answer": 42}
        value = "true"
        c = RAMCache()
        c.requestVars = ('foo', 'bar')
        key = RAMCache._buildKey(keywords)

        c.set(value, ob, keywords)
        self.assertEqual(c._getStorage().getEntry(ob, key), value,
                         "Not stored correctly")
    def test_query(self):
        ob = ('aaa',)

        keywords = {"answer": 42}
        value = "true"
        c = RAMCache()
        key = RAMCache._buildKey(keywords)
        c._getStorage().setEntry(ob, key, value)

        self.assertEqual(c.query(ob, keywords), value,
                         "incorrect value")

        self.assertEqual(c.query(ob, None), None, "defaults incorrect")
        self.assertEqual(c.query(ob, {"answer": 2}, default="bummer"),
                         "bummer", "default doesn't work")
 def test_init(self):
     c1 = RAMCache()._cacheId
     c2 = RAMCache()._cacheId
     self.assertNotEquals(c1, c2, "The cacheId is not unique")
 def test_interface(self):
     verifyObject(IRAMCache, RAMCache())
     verifyClass(ICache, RAMCache)
 def _Test__new(self):
     return RAMCache()
    def test_invalidate(self):
        ob1 = ("loc1",)
        ob2 = ("loc2",)
        keywords = {"answer": 42}
        keywords2 = {"answer": 41}
        value = "true"
        c = RAMCache()
        key1 = RAMCache._buildKey(keywords)
        key2 = RAMCache._buildKey(keywords)
        key3 = RAMCache._buildKey(keywords2)

        # Test invalidating entries with a keyword
        c._getStorage().setEntry(ob1, key1, value)
        c._getStorage().setEntry(ob2, key2, value)
        c._getStorage().setEntry(ob2, key3, value)

        c.invalidate(ob2, keywords)

        c._getStorage().getEntry(ob1, key1)
        self.assertRaises(KeyError, c._getStorage().getEntry, ob2, key2)
        c._getStorage().getEntry(ob2, key3)

        # Test deleting the whole object
        c._getStorage().setEntry(ob1, key1, value)
        c._getStorage().setEntry(ob2, key2, value)
        c._getStorage().setEntry(ob2, key3, value)

        c.invalidate(ob2)
        self.assertRaises(KeyError, c._getStorage().getEntry, ob2, key2)
        self.assertRaises(KeyError, c._getStorage().getEntry, ob2, key3)
        c._getStorage().getEntry(ob1, key1)

        # Try something that's not there
        c.invalidate(('yadda',))
 def test_buildKey(self):
     kw = {'foo': 1, 'bar': 2, 'baz': 3}
     key = RAMCache._buildKey(kw)
     self.assertEqual(key, (('bar',2), ('baz',3), ('foo',1)), "wrong key")
Example #12
0
from five import grok

from itertools import groupby, imap, ifilter
from Products.CMFCore.utils import getToolByName

from zope.ramcache.ram import RAMCache

from seantis.dir.base.interfaces import (IDirectoryItemBase, IDirectoryBase,
                                         IDirectoryCatalog)
from seantis.dir.base import utils

item_cache = RAMCache()
item_cache.update(maxAge=0, maxEntries=10000)

uncached = object()


def directory_cachekey(directory):
    return ''.join(
        map(str,
            (directory.id, directory.modified(), directory.child_modified)))


def directory_item_cachekey(directory, item):
    return directory_cachekey(directory) + str(item.getRID())


def get_object(directory, result):

    cachekey = directory_item_cachekey(directory, result)
Example #13
0
from five import grok

from itertools import groupby, imap, ifilter
from Products.CMFCore.utils import getToolByName

from zope.ramcache.ram import RAMCache

from seantis.dir.base.interfaces import (
    IDirectoryItemBase,
    IDirectoryBase,
    IDirectoryCatalog
)
from seantis.dir.base import utils

item_cache = RAMCache()
item_cache.update(maxAge=0, maxEntries=10000)

uncached = object()


def directory_cachekey(directory):
    return ''.join(map(str, (
        directory.id,
        directory.modified(),
        directory.child_modified
    )))


def directory_item_cachekey(directory, item):
    return directory_cachekey(directory) + str(item.getRID())