def test_dataset_cache(self, mockcache):
        mockcache.get_cache = Mock(return_value=Cache('TEST'))
        from etl.model.dataset import DST_CACHE, DEFAULT_LIMIT_FOR_PERFORMANCE
        dataset = model.DBSession.query(model.DataSet).get(self.dataset)
        cache_key = dataset.cache_key(DEFAULT_LIMIT_FOR_PERFORMANCE)
        assert dataset.sample is DST_CACHE.get_value(cache_key)

        dataset.query = 'SELECT * FROM tg_user LIMIT 10'
        model.DBSession.add(dataset)
        model.DBSession.flush()
        transaction.commit()

        assert_raises(
            KeyError,
            DST_CACHE.get_value,
            cache_key
        )
        dataset = model.DBSession.query(model.DataSet).get(self.dataset)
        assert dataset.sample is DST_CACHE.get_value(cache_key)
        model.DBSession.delete(dataset)
        model.DBSession.flush()
        transaction.commit()

        assert_raises(
            KeyError,
            DST_CACHE.get_value,
            cache_key
        )
Пример #2
0
def test_clear():
    cache = Cache('test', data_dir='./cache', url=db_url, type='ext:database')
    o = object()
    cache.set_value("test", o)
    assert "test" in cache
    cache.clear()
    assert "test" not in cache
Пример #3
0
def make_cache():
    """Return a ``Cache`` for use by the unit tests."""
    return Cache('test',
                 data_dir='./cache',
                 bind=engine,
                 table=cache_table,
                 type='ext:sqla')
Пример #4
0
def test_clear():
    cache = Cache('test', url=db_url, type=db_type, database=db_name)
    o = object()
    cache.set_value("test", o)
    assert "test" in cache
    cache.clear()
    assert "test" not in cache
Пример #5
0
def test_clear():
    cache = Cache('test', url=db_url, type=db_type, database=db_name)
    o = object()
    cache.set_value("test", o)
    assert cache.has_key("test")
    cache.clear()
    assert not cache.has_key("test")
Пример #6
0
def test_dropping_keys():
    cache = Cache('test',
                  data_dir='./cache',
                  url=uri,
                  type='mongodb',
                  sparse_collection=True)
    cache.set_value('test', 20)
    cache.set_value('fred', 10)
    assert cache.has_key('test')
    assert 'test' in cache
    assert cache.has_key('fred')

    # Directly nuke the actual key, to simulate it being removed by mongodb
    cache.namespace.mongo.update({'_id': {
        'namespace': 'test',
        'key': 'test'
    }}, {'$unset': {
        'data': True
    }},
                                 safe=True)
    assert not cache.has_key('test')
    assert cache.has_key('fred')

    # Nuke the keys dict, it might die, who knows
    cache.namespace.mongo.remove(
        {
            '_id': 'test',
            'data.test': {
                '$exists': True
            }
        }, safe=True)
    assert cache.has_key('fred')

    # And we still need clear to work, even if it won't work well
    cache.clear()
Пример #7
0
 def test_uses_mongo_client(self):
     from mongodb_gridfs_beaker import MongoDBGridFSNamespaceManager
     cache = Cache('test',
                   data_dir='./cache',
                   url=uri,
                   type="mongodb_gridfs")
     assert isinstance(cache.namespace, MongoDBGridFSNamespaceManager)
Пример #8
0
def test_multi_keys():
    cache = Cache('newtests', data_dir='./cache', type='dbm')
    cache.clear()
    called = {}

    def create_func():
        called['here'] = True
        return 'howdy'

    try:
        cache.get_value('key1')
    except KeyError:
        pass
    else:
        raise Exception("Failed to keyerror on nonexistent key")

    assert 'howdy' == cache.get_value('key2', createfunc=create_func)
    assert called['here'] == True
    del called['here']

    try:
        cache.get_value('key3')
    except KeyError:
        pass
    else:
        raise Exception("Failed to keyerror on nonexistent key")
    try:
        cache.get_value('key1')
    except KeyError:
        pass
    else:
        raise Exception("Failed to keyerror on nonexistent key")

    assert 'howdy' == cache.get_value('key2', createfunc=create_func)
    assert called == {}
Пример #9
0
    def test_createfunc(self):
        cache = Cache('test', **self.CACHE_ARGS)

        def createfunc():
            createfunc.count += 1
            return createfunc.count
        createfunc.count = 0

        def keepitlocked():
            lock = cache.namespace.get_creation_lock('test')
            lock.acquire()
            time.sleep(1.0)
            lock.release()

        v0 = cache.get_value('test', createfunc=createfunc)
        self.assertEqual(v0, 1)

        v0 = cache.get_value('test', createfunc=createfunc)
        self.assertEqual(v0, 1)

        cache.remove_value('test')

        begin = datetime.datetime.utcnow()
        t = threading.Thread(target=keepitlocked)
        t.start()

        v0 = cache.get_value('test', createfunc=createfunc)
        self.assertEqual(v0, 2)

        # Ensure that the `get_value` was blocked by the concurrent thread.
        assert datetime.datetime.utcnow() - begin > datetime.timedelta(seconds=1)

        t.join()
Пример #10
0
 def test_spaces_in_unicode_keys(self):
     cache = Cache("test", **self.CACHE_ARGS)
     o = object()
     cache.set_value(u_("hi ŏ"), o)
     assert u_("hi ŏ") in cache
     assert u_("hŏa") not in cache
     cache.remove_value(u_("hi ŏ"))
     assert u_("hi ŏ") not in cache
Пример #11
0
def test_unicode_keys():
    cache = Cache('test', url=db_url, type=db_type, database=db_name)
    o = object()
    cache.set_value('hiŏ', o)
    assert 'hiŏ' in cache
    assert 'hŏa' not in cache
    cache.remove_value('hiŏ')
    assert 'hiŏ' not in cache
Пример #12
0
def test_spaces_in_keys():
    cache = Cache("test", data_dir="./cache", url=mc_url, type="ext:memcached")
    cache.set_value("has space", 24)
    assert cache.has_key("has space")
    assert 24 == cache.get_value("has space")
    cache.set_value("hasspace", 42)
    assert cache.has_key("hasspace")
    assert 42 == cache.get_value("hasspace")
Пример #13
0
def test_spaces_in_unicode_keys():
    cache = Cache("test", data_dir="./cache", url=mc_url, type="ext:memcached")
    o = object()
    cache.set_value(u_("hi ŏ"), o)
    assert u_("hi ŏ") in cache
    assert u_("hŏa") not in cache
    cache.remove_value(u_("hi ŏ"))
    assert u_("hi ŏ") not in cache
Пример #14
0
 def test_uses_pylibmc_client(self):
     from beaker.ext import memcached
     cache = Cache('test',
                   data_dir='./cache',
                   memcache_module='pylibmc',
                   url=mc_url,
                   type="ext:memcached")
     assert isinstance(cache.namespace, memcached.PyLibMCNamespaceManager)
Пример #15
0
def test_unicode_keys():
    cache = Cache('test', data_dir='./cache', url=db_url, type='ext:database')
    o = object()
    cache.set_value(u_('hiŏ'), o)
    assert u_('hiŏ') in cache
    assert u_('hŏa') not in cache
    cache.remove_value(u_('hiŏ'))
    assert u_('hiŏ') not in cache
Пример #16
0
def test_spaces_in_unicode_keys():
    cache = Cache('test', data_dir='./cache', url=mc_url, type='ext:memcached')
    o = object()
    cache.set_value(u_('hi ŏ'), o)
    assert u_('hi ŏ') in cache
    assert u_('hŏa') not in cache
    cache.remove_value(u_('hi ŏ'))
    assert u_('hi ŏ') not in cache
Пример #17
0
def test_spaces_in_keys():
    cache = Cache('test', data_dir='./cache', url=mc_url, type='ext:memcached')
    cache.set_value("has space", 24)
    assert cache.has_key("has space")
    assert 24 == cache.get_value("has space")
    cache.set_value("hasspace", 42)
    assert cache.has_key("hasspace")
    assert 42 == cache.get_value("hasspace")
Пример #18
0
def test_unicode_keys():
    cache = Cache('test', data_dir='./cache', url=mc_url, type='ext:memcached')
    o = object()
    cache.set_value(u'hiŏ', o)
    assert u'hiŏ' in cache
    assert u'hŏa' not in cache
    cache.remove_value(u'hiŏ')
    assert u'hiŏ' not in cache
Пример #19
0
 def test_uses_mongo_client(self):
     from beaker_mongodb import MongoDBNamespaceManager
     cache = Cache('test',
                   data_dir='./cache',
                   url=uri,
                   type="mongodb",
                   sparse_collection=True)
     assert isinstance(cache.namespace, MongoDBNamespaceManager)
Пример #20
0
def test_spaces_in_unicode_keys():
    cache = Cache('test', data_dir='./cache', url=uri, type='mongodb')
    o = object()
    cache.set_value(u'hi ŏ', o)
    assert u'hi ŏ' in cache
    assert u'hŏa' not in cache
    cache.remove_value(u'hi ŏ')
    assert u'hi ŏ' not in cache
Пример #21
0
def test_spaces_in_keys():
    cache = Cache('test', data_dir='./cache', url=uri, type='mongodb')
    cache.set_value("has space", 24)
    assert cache.has_key("has space")
    assert 24 == cache.get_value("has space")
    cache.set_value("hasspace", 42)
    assert cache.has_key("hasspace")
    assert 42 == cache.get_value("hasspace")
Пример #22
0
def test_unicode_keys():
    cache = Cache("test", data_dir="./cache", type="dbm")
    o = object()
    cache.set_value(u_("hiŏ"), o)
    assert u_("hiŏ") in cache
    assert u_("hŏa") not in cache
    cache.remove_value(u_("hiŏ"))
    assert u_("hiŏ") not in cache
Пример #23
0
 def test_spaces_in_keys(self):
     cache = Cache('test', **self.CACHE_ARGS)
     cache.set_value("has space", 24)
     assert cache.has_key("has space")
     assert 24 == cache.get_value("has space")
     cache.set_value("hasspace", 42)
     assert cache.has_key("hasspace")
     assert 42 == cache.get_value("hasspace")
Пример #24
0
 def test_spaces_in_unicode_keys(self):
     cache = Cache('test', **self.CACHE_ARGS)
     o = object()
     cache.set_value(u_('hi ŏ'), o)
     assert u_('hi ŏ') in cache
     assert u_('hŏa') not in cache
     cache.remove_value(u_('hi ŏ'))
     assert u_('hi ŏ') not in cache
Пример #25
0
def test_expiretime():
    cache = Cache('test', data_dir='./cache', url=uri, type='mongodb_gridfs')
    cache.set_value('test', 20, expiretime=-10)
    cache.set_value('foo', 20)
    assert not cache.has_key('test')
    assert 'test' not in cache
    assert cache.has_key('foo')
    assert 'foo' in cache
Пример #26
0
def test_has_key_multicache():
    cache = Cache('test',
                  data_dir='./cache',
                  url=uri,
                  type='mongodb',
                  sparse_collection=True,
                  skip_pickle=True)
    o = object()
    cache.set_value("test", o)
    assert cache.has_key("test")
    assert "test" in cache
    cache = Cache('test',
                  data_dir='./cache',
                  url=uri,
                  type='mongodb',
                  sparse_collection=True,
                  skip_pickle=True)
    assert cache.has_key("test")
Пример #27
0
    def test_dont_use_pylibmc_client(self):
        from beaker.ext.memcached import _load_client

        load_mock = mock.Mock()
        load_mock.return_value = _load_client("memcache")
        with mock.patch("beaker.ext.memcached._load_client", load_mock):
            cache = Cache("test", data_dir="./cache", url=mc_url, type="ext:memcached")
            assert not isinstance(cache.namespace, memcached.PyLibMCNamespaceManager)
            assert isinstance(cache.namespace, memcached.MemcachedNamespaceManager)
Пример #28
0
 def test_clear(self):
     cache = Cache('test', **self.CACHE_ARGS)
     cache.set_value('test', 20)
     cache.set_value('fred', 10)
     assert cache.has_key('test')
     assert 'test' in cache
     assert cache.has_key('fred')
     cache.clear()
     assert not cache.has_key("test")
Пример #29
0
 def test_clear(self):
     cache = Cache("test", **self.CACHE_ARGS)
     cache.set_value("test", 20)
     cache.set_value("fred", 10)
     assert cache.has_key("test")
     assert "test" in cache
     assert cache.has_key("fred")
     cache.clear()
     assert not cache.has_key("test")
Пример #30
0
    def test_expiretime_automatic(self):
        if not self.SUPPORTS_EXPIRATION:
            self.skipTest("NamespaceManager does not support automatic expiration")

        cache = Cache("test", **self.CACHE_ARGS)
        cache.set_value("has space", 24, expiretime=1)
        assert cache.namespace.has_key("has space")
        time.sleep(1.1)
        assert not cache.namespace.has_key("has space")