def setUp(self):
        environment.TEST = True

        lru_clear_all()

        if testbed:
            self.testbed = testbed.Testbed()
            self.testbed.setup_env(current_version_id='testbed.version')
            self.testbed.activate()

            # init stubs
            self.testbed.init_logservice_stub()
            self.testbed.init_memcache_stub()
            self.testbed.init_app_identity_stub()
            self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(
                probability=0)
            self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
            self.testbed.init_blobstore_stub()
            self.testbed.init_mail_stub()

            # get stubs
            self.task_queue_stub = self.testbed.get_stub(
                testbed.TASKQUEUE_SERVICE_NAME)
            self.mail_stub = self.testbed.get_stub(testbed.MAIL_SERVICE_NAME)

            # disable ndb cache
            context = ndb.get_context()
            context.set_cache_policy(lambda key: False)
            context.set_memcache_policy(lambda key: False)

        # api mock
        self.api_mock = ApiMock()
    def test_email(self):
        self.policy.SetProbability(1)

        user.User.create(email="*****@*****.**", password="******")
        self.assertRaises(
            user.EmailTaken,
            lambda: user.User.create(email="*****@*****.**", password="******"))

        user.User.create(email="*****@*****.**", password="******")
        cache.lru_clear_all()
        self.assertRaises(
            user.EmailTaken,
            lambda: user.User.create(email="*****@*****.**", password="******"))
Пример #3
0
    def test_lru(self):
        @lru_cache()
        def func(*args, **kwargs):
            return args, kwargs, uuid.uuid4()

        class Cls(object):
            @classmethod
            @lru_cache()
            def cls_method(cls, *args, **kwargs):
                return args, kwargs, uuid.uuid4()

            @lru_cache()
            def method(self, *args, **kwargs):
                return args, kwargs, uuid.uuid4()

        class ClsWithHash(object):
            def __hash__(self):
                return 0

        class ClsWithoutHash(object):
            pass

        # test func
        ret = func('func_test')
        self.assertEqual(ret, func('func_test'))
        self.assertTrue(ret != func('func_test2'))
        self.assertEqual(func(), func())

        self.assertEqual(func.lru_size(), 3)
        self.assertEqual(func.lru_hits(), 2)
        self.assertEqual(func.lru_misses(), 3)

        # test hash
        func.lru_clear_all()
        ret = func(ClsWithHash())
        self.assertEqual(ret, func(ClsWithHash()))

        self.assertEqual(func.lru_size(), 1)
        self.assertEqual(func.lru_hits(), 1)
        self.assertEqual(func.lru_misses(), 1)

        # test list
        func.lru_clear_all()
        ret = func([1, 2, 3], test=[])
        self.assertEqual(ret, func([1, 2, 3], test=[]))
        func([1, 2, 3], test=["test"])
        func([1, 2], test=["test"])

        self.assertEqual(func.lru_size(), 3)
        self.assertEqual(func.lru_hits(), 1)
        self.assertEqual(func.lru_misses(), 3)

        # test set
        func.lru_clear_all()
        ret = func(set([1, 2, 3]), test=set([]))
        self.assertEqual(ret, func(set([1, 2, 3]), test=set([])))
        func(set([1, 2, 3]), test=set(["test"]))
        func(set([1, 2]), test=set(["test"]))

        self.assertEqual(func.lru_size(), 3)
        self.assertEqual(func.lru_hits(), 1)
        self.assertEqual(func.lru_misses(), 3)

        # test cls method
        ret = Cls.cls_method('cls_method_test')
        self.assertEqual(ret, Cls.cls_method('cls_method_test'))
        self.assertTrue(ret != Cls.cls_method('cls_method_test2'))
        self.assertEqual(Cls.cls_method(), Cls.cls_method())

        # test method
        cls = Cls()
        ret = cls.method('method_test')
        self.assertTrue(
            Cls.cls_method('method_test') != cls.method('method_test'))
        self.assertEqual(ret, cls.method('method_test'))
        self.assertTrue(ret != cls.method('method_test2'))
        self.assertEqual(cls.method(), cls.method())

        # test clear
        self.assertEqual(ret, cls.method('method_test'))
        cls.method.lru_clear_all()
        self.assertTrue(ret != cls.method('method_test'))
        ret = cls.method('method_test')
        self.assertEqual(ret, cls.method('method_test'))
        cls.method.lru_clear(args=[cls, 'method_test'])
        self.assertTrue(ret != cls.method('method_test'))

        # test set
        func.lru_set("123")
        self.assertEqual("123", func())

        cls.method.lru_set("123", args=[cls, 'method_set_test'])
        self.assertEqual("123", cls.method('method_set_test'))

        cls.method.lru_set("456", args=[cls])
        self.assertEqual("456", cls.method())

        Cls.cls_method.lru_set("123", args=[Cls, 'cls_method_set_test'])
        self.assertEqual("123", Cls.cls_method('cls_method_set_test'))

        # test clear all
        lru_clear_all()
        self.assertTrue("123" != Cls.cls_method('cls_method_set_test'))