| Index: appengine/findit/common/test/cache_decorator_test.py
 | 
| diff --git a/appengine/findit/common/test/cache_decorator_test.py b/appengine/findit/common/test/cache_decorator_test.py
 | 
| deleted file mode 100644
 | 
| index a3a2fd467c7e0b29790a484bd2e45b31d958614c..0000000000000000000000000000000000000000
 | 
| --- a/appengine/findit/common/test/cache_decorator_test.py
 | 
| +++ /dev/null
 | 
| @@ -1,164 +0,0 @@
 | 
| -# Copyright 2015 The Chromium Authors. All rights reserved.
 | 
| -# Use of this source code is governed by a BSD-style license that can be
 | 
| -# found in the LICENSE file.
 | 
| -
 | 
| -import pickle
 | 
| -import zlib
 | 
| -
 | 
| -from google.appengine.api import memcache
 | 
| -
 | 
| -from testing_utils import testing
 | 
| -
 | 
| -from common import cache_decorator
 | 
| -
 | 
| -
 | 
| -class _DummyCacher(cache_decorator.Cacher):
 | 
| -  def __init__(self, cached_data):
 | 
| -    self.cached_data = cached_data
 | 
| -
 | 
| -  def Get(self, key):
 | 
| -    return self.cached_data.get(key)
 | 
| -
 | 
| -  def Set(self, key, data, expire_time=0):
 | 
| -    self.cached_data[key] = data
 | 
| -
 | 
| -
 | 
| -def _DummyKeyGenerator(func, *_):
 | 
| -  return func.__name__
 | 
| -
 | 
| -
 | 
| -class CacheDecoratorTest(testing.AppengineTestCase):
 | 
| -  def testPickledMemCacher(self):
 | 
| -    cacher = cache_decorator.PickledMemCacher()
 | 
| -    cacher.Set('a', 'd')
 | 
| -    self.assertEquals('d', cacher.Get('a'))
 | 
| -
 | 
| -  def _MockPickleAndZlib(self):
 | 
| -    def Func(string, *_, **__):
 | 
| -      return string
 | 
| -    self.mock(pickle, 'dumps', Func)
 | 
| -    self.mock(pickle, 'loads', Func)
 | 
| -    self.mock(zlib, 'compress', Func)
 | 
| -    self.mock(zlib, 'decompress', Func)
 | 
| -
 | 
| -  def testCachingSmallDataInCompressedMemCacher(self):
 | 
| -    self._MockPickleAndZlib()
 | 
| -    cacher = cache_decorator.CompressedMemCacher()
 | 
| -    data = 'A' * 1024 # A string of size 1KB.
 | 
| -    cacher.Set('a', data)
 | 
| -    self.assertEquals(data, cacher.Get('a'))
 | 
| -
 | 
| -  def testCachingLargeDataInCompressedMemCacher(self):
 | 
| -    self._MockPickleAndZlib()
 | 
| -    cacher = cache_decorator.CompressedMemCacher()
 | 
| -    data = 'A' * (1024 * 1024 * 2)  # A string of size 2MB.
 | 
| -    cacher.Set('a', data)
 | 
| -    self.assertEquals(data, cacher.Get('a'))
 | 
| -
 | 
| -  def testMissingSubPieceOfLargeDataInCompressedMemCacher(self):
 | 
| -    self._MockPickleAndZlib()
 | 
| -    cacher = cache_decorator.CompressedMemCacher()
 | 
| -    data = 'A' * (1024 * 1024 * 2)  # A string of size 2MB.
 | 
| -    cacher.Set('a', data)
 | 
| -    memcache.delete('a-0')
 | 
| -    self.assertEquals(None, cacher.Get('a'))
 | 
| -
 | 
| -  def testDefaultKeyGenerator(self):
 | 
| -    expected_params = {
 | 
| -        'id1': 'fi',
 | 
| -        'id2': 'pi',
 | 
| -        'url': 'http://url',
 | 
| -    }
 | 
| -    # Hexadecimal digits of MD5 digest of "pickled_params".
 | 
| -    expected_key = 'f5f173c811f7c537a80d44511903a3e0'
 | 
| -
 | 
| -    def MockPickleDumps(params):
 | 
| -      self.assertEqual(expected_params, params)
 | 
| -      return 'pickled_params'
 | 
| -
 | 
| -    def Func(id1, id2, url=None):  # Unused parameters-pylint: disable=W0613
 | 
| -      return 1  # pragma: no cover.
 | 
| -
 | 
| -    class CallableIdentifier(object):
 | 
| -      def identifier(self):
 | 
| -        return 'fi'
 | 
| -
 | 
| -    class PropertyIdentifier(object):
 | 
| -      @property
 | 
| -      def identifier(self):
 | 
| -        return 'pi'
 | 
| -
 | 
| -    self.mock(pickle, 'dumps', MockPickleDumps)
 | 
| -
 | 
| -    args = (CallableIdentifier(), PropertyIdentifier())
 | 
| -    kwargs = {'url': 'http://url'}
 | 
| -    key = cache_decorator._DefaultKeyGenerator(Func, args, kwargs)
 | 
| -    self.assertEqual(expected_key, key)
 | 
| -
 | 
| -  def testCachedDecoratorWhenResultIsAlreadyCached(self):
 | 
| -    cacher = _DummyCacher({'n-Func': 1})
 | 
| -
 | 
| -    @cache_decorator.Cached(
 | 
| -        namespace='n', key_generator=_DummyKeyGenerator, cacher=cacher)
 | 
| -    def Func():
 | 
| -      return 2  # pragma: no cover.
 | 
| -
 | 
| -    self.assertEqual(1, Func())
 | 
| -    self.assertEqual({'n-Func': 1}, cacher.cached_data)
 | 
| -
 | 
| -  def testCachedDecoratorWhenResultIsNotCachedYet(self):
 | 
| -    cacher = _DummyCacher({})
 | 
| -
 | 
| -    @cache_decorator.Cached(
 | 
| -        namespace='n', key_generator=_DummyKeyGenerator, cacher=cacher)
 | 
| -    def Func():
 | 
| -      return 2
 | 
| -
 | 
| -    self.assertEqual(2, Func())
 | 
| -    self.assertEqual({'n-Func': 2}, cacher.cached_data)
 | 
| -
 | 
| -  def testCachedDecoratorWhenResultShouldNotBeCached(self):
 | 
| -    cacher = _DummyCacher({})
 | 
| -
 | 
| -    results = [None, 0, [], {}, '']
 | 
| -
 | 
| -    @cache_decorator.Cached(
 | 
| -        namespace='n', key_generator=_DummyKeyGenerator, cacher=cacher)
 | 
| -    def Func():
 | 
| -      return results.pop()
 | 
| -
 | 
| -    self.assertEqual('', Func())
 | 
| -    self.assertEqual({}, cacher.cached_data)
 | 
| -    self.assertEqual({}, Func())
 | 
| -    self.assertEqual({}, cacher.cached_data)
 | 
| -    self.assertEqual([], Func())
 | 
| -    self.assertEqual({}, cacher.cached_data)
 | 
| -    self.assertEqual(0, Func())
 | 
| -    self.assertEqual({}, cacher.cached_data)
 | 
| -    self.assertIsNone(Func())
 | 
| -    self.assertEqual({}, cacher.cached_data)
 | 
| -
 | 
| -  def testCachedDecoratorWithMethodInAClass(self):
 | 
| -    class A(object):
 | 
| -      def __init__(self, url, retries):
 | 
| -        self.url = url
 | 
| -        self.retries = retries
 | 
| -        self.runs = 0
 | 
| -
 | 
| -      @property
 | 
| -      def identifier(self):
 | 
| -        return self.url
 | 
| -
 | 
| -      @cache_decorator.Cached()
 | 
| -      def Func(self, path):
 | 
| -        self.runs += 1
 | 
| -        return self.url + '/' + path
 | 
| -
 | 
| -    a1 = A('http://test', 3)
 | 
| -    self.assertEqual('http://test/p1', a1.Func('p1'))
 | 
| -    self.assertEqual('http://test/p1', a1.Func('p1'))
 | 
| -    self.assertEqual(1, a1.runs)
 | 
| -
 | 
| -    a2 = A('http://test', 5)
 | 
| -    self.assertEqual('http://test/p1', a2.Func('p1'))
 | 
| -    self.assertEqual(0, a2.runs)
 | 
| 
 |