def testStandardApiVkey(self): """Test dzialania danych powiazanych kluczemwersji """ vkey = self.key_prefix + "StandardApi.vkey.vkey" key1 = self.key_prefix + "StandardApi.timeout.k1" key2 = self.key_prefix + "StandardApi.timeout.k2" data = "vkey-test" self.to_delete.extend([key1, key2, vkey]) # Wrzucamy dane do obu kluczy (z vkey) i pobieramy je put(key1, data, 0, vkey, False) put(key2, data, 0, vkey, False) for key in (key1, key2): gdata = get(key, False) self.assertEqual(data, gdata, u"Problem z danymi w memoize. key=%s, %s != %s" % (key, data, gdata)) # Sprawdzamy czy dane wrzucone do cache dobrze zostaly zapisane gdata = _get(key1, False) #self.assertTrue(isinstance(gdata, tuple), u"Dane w cache powinny miec krotke przy vkey. gdata=%s" % str(gdata)) # Wcale ze nie self.assertTrue(isinstance(gdata, dict), u"Dane w cache powinny byc w slowniku przy vkey. gdata=%s" % str(gdata)) gdata = get(key1, False) self.assertEqual(data, gdata, u"Problem z danymi w memoize. gdata=%s" % str(gdata)) # incalidujemy klucz wersi i sprawdzamy czy invalidowalo klucze invalidatev(vkey) self.assertNotEqual(data, get(key1, False), u"Dane w cache salej sa mimo invalidate") self.assertNotEqual(data, get(key2, False), u"Dane w cache salej sa mimo invalidate")
def testStandardApiNone(self): """Test sprawdzajacy wrzucanie None do cache """ key = self.key_prefix + "StandardApi.none" self.to_delete.append(key) # Wrzucamy none i sprawdamy czy odpowie mi MEMCACHE_NONE put(key, None) gdata = get(key) self.assertEqual(gdata, MEMCACHE_NONE, u"Dane w cache inne niz oczekiwalismy.")
def testLocalcacheClear(self): """Test czyszczenia lokalnego cache""" key = self.key_prefix + "localcache.k1" test_data = 'test-localclear' put(key, test_data, l1=True) data = localcache_get(key) self.assertEqual(data['value'] if isinstance(data, dict) else data, test_data, "Dane w lokalnym keszu sa rozne od danych wejsciowych %s=%s" % (data, test_data)) localcache_clear() data = localcache_get(key) self.assertEqual(data, None, "Nie dziala czyszczenie lokalnego cache")
def testStandardApiBase(self): """Test dla funkcji put i get bez zadnych dodatkowych ustawien """ key = self.key_prefix + "StandardApi.Base" self.to_delete.append(key) data = "proba" # Sprawdzenie czy po wrzuceinu do cache otrzymam dane spowrotem (bez cache lokalnego) put(key, data, 0, None, False) gdata = get(key, False) self.assertEqual(data, gdata, u"Blad zwracanych danych z memoize: %s != %s" % (data, gdata)) # Ten sam test tylko z cache lokaklnym put(key, data) gdata = get(key) self.assertEqual(data, gdata, u"Blad zwracanych danych z memoize: %s != %s" % (data, gdata))
def _wrapper(*args, **kwargs): add_to_cache = optionaladd # 1. Utworzenie kluczy key = key_function vkey = vkey_function time_out = timeout # opcjonalny argument MEMOIZE_REFRESH powoduje pominięcie cache # przy odczycie i wymuszenie zapisu danych do cache refresh = False if kwargs.has_key('MEMOIZE_REFRESH'): add_to_cache = False refresh = kwargs['MEMOIZE_REFRESH'] del kwargs['MEMOIZE_REFRESH'] if callable(key_function): key = key_function(*args, **kwargs) if key is not None: if callable(vkey_function): vkey = vkey_function(*args, **kwargs) if callable(timeout): time_out = timeout() log.debug("KEY %s", key) if not refresh: # 2. Pobranie danych z memoize i zwrocenie jesli je mamy result = get(key, l1, use_deepcopy=use_deepcopy) if result is not None or result == MEMCACHE_NONE: if result == MEMCACHE_NONE: return log.debug("Z CACHE") return result # 3. Generowanie danych na nowo result = f(*args, **kwargs) if not allow_none and result is None: return if key is not None: put(key, result, time_out, vkey, l1, add_to_cache) return result
def testStandardApiTimeout(self): """Test dla funkcji put i get z timeout (localcache False bo on nie ma timeout tylko memcache) """ key1 = self.key_prefix + "StandardApi.timeout.k1" key2 = self.key_prefix + "StandardApi.timeout.k2" self.to_delete.extend([key1, key2]) data = "proba" # dlugi timeout ktorego nie przekroczymy put(key1, data, 100, None, False) gdata = get(key1, False) self.assertEqual(data, gdata, u"Błąd zwracanych danych z memoize. 100 sekund jeszcze chyba nie upłuneło. [data=%s, gdata=%s]" % (data, gdata)) # przekroczenie timeoutu i sprawdzenei czy invalidowalo dane put(key2, data, 1, None, False) sleep(2) gdata = get(key2, False) self.assertNotEqual(data, gdata, u"Memoize zwrócił dane a powinny być już przeterminowane. [data=%s, gdata=%s]" % (data, gdata))
def testMany(self): keys = [self.key_prefix + "StandardApi.Many.%d" % i for i in range(100)] self.to_delete.extend(keys) data = "proba" # Sprawdzenie czy po wrzuceinu do cache otrzymam dane spowrotem (bez cache lokalnego) for key in keys: put(key, data, 0, None, False) gdata = get_many(keys, False) self.assertEqual(len(gdata), len(keys), u"Zwrócono jedynie %d z %d elementów." % (len(data), len(keys))) for (k, v) in gdata.iteritems(): self.assertEqual(data, v, u"Blad zwracanych danych z memoize: %s != %s" % (data, v)) # Ten sam test tylko z cache lokaklnym for key in keys: put(key, data) gdata = get_many(keys) self.assertEqual(len(gdata), len(keys), u"Zwrócono jedynie %d z %d elementów." % (len(data), len(keys))) for (k, v) in gdata.iteritems(): self.assertEqual(data, v, u"Blad zwracanych danych z memoize: %s != %s" % (data, v))