Esempio n. 1
0
    def test_compare_and_swap_w_expires():
        redis = mock.Mock(spec=())
        cache = global_cache.RedisCache(redis)
        pipe1 = mock.Mock(spec=("multi", "setex", "execute", "reset"))
        pipe2 = mock.Mock(spec=("multi", "setex", "execute", "reset"))
        pipe2.execute.side_effect = redis_module.exceptions.WatchError
        cache._pipes.pipes = {
            "foo": pipe1,
            "bar": pipe2,
        }

        result = cache.compare_and_swap(
            {
                "foo": "moo",
                "bar": "car",
                "baz": "maz",
            },
            expires=5,
        )
        assert result == {"foo": True, "bar": False, "baz": False}

        pipe1.multi.assert_called_once_with()
        pipe1.setex.assert_called_once_with("foo", 5, "moo")
        pipe1.execute.assert_called_once_with()
        pipe1.reset.assert_called_once_with()

        pipe2.multi.assert_called_once_with()
        pipe2.setex.assert_called_once_with("bar", 5, "car")
        pipe2.execute.assert_called_once_with()
        pipe2.reset.assert_called_once_with()
Esempio n. 2
0
    def test_compare_and_swap():
        redis = mock.Mock(spec=())
        cache = global_cache.RedisCache(redis)
        pipe1 = mock.Mock(spec=("multi", "mset", "execute", "reset"))
        pipe2 = mock.Mock(spec=("multi", "mset", "execute", "reset"))
        cache.pipes = {
            "ay": global_cache._Pipeline(pipe1, "abc123"),
            "be": global_cache._Pipeline(pipe1, "abc123"),
            "see": global_cache._Pipeline(pipe2, "def456"),
            "dee": global_cache._Pipeline(pipe2, "def456"),
            "whatevs": global_cache._Pipeline(None, "himom!"),
        }
        pipe2.execute.side_effect = redis_module.exceptions.WatchError

        items = {"ay": "foo", "be": "bar", "see": "baz", "wut": "huh?"}
        cache.compare_and_swap(items)

        pipe1.multi.assert_called_once_with()
        pipe2.multi.assert_called_once_with()
        pipe1.mset.assert_called_once_with({"ay": "foo", "be": "bar"})
        pipe2.mset.assert_called_once_with({"see": "baz"})
        pipe1.execute.assert_called_once_with()
        pipe2.execute.assert_called_once_with()
        pipe1.reset.assert_called_once_with()
        pipe2.reset.assert_called_once_with()

        assert cache.pipes == {
            "whatevs": global_cache._Pipeline(None, "himom!")
        }
Esempio n. 3
0
 def test_get():
     redis = mock.Mock(spec=("mget", ))
     cache_keys = [object(), object()]
     cache_value = redis.mget.return_value
     cache = global_cache.RedisCache(redis)
     assert cache.get(cache_keys) is cache_value
     redis.mget.assert_called_once_with(cache_keys)
Esempio n. 4
0
    def test_watch():
        def mock_redis_get(key):
            if key == "foo":
                return "moo"

            return "nope"

        redis = mock.Mock(pipeline=mock.Mock(spec=("watch", "get", "reset")),
                          spec=("pipeline", ))
        pipe = redis.pipeline.return_value
        pipe.get.side_effect = mock_redis_get
        items = {"foo": "moo", "bar": "car"}
        cache = global_cache.RedisCache(redis)
        cache.watch(items)

        pipe.watch.assert_has_calls(
            [
                mock.call("foo"),
                mock.call("bar"),
            ],
            any_order=True,
        )

        pipe.get.assert_has_calls(
            [
                mock.call("foo"),
                mock.call("bar"),
            ],
            any_order=True,
        )

        assert cache.pipes == {"foo": pipe}
Esempio n. 5
0
 def test_set_if_not_exists():
     redis = mock.Mock(spec=("setnx", ))
     redis.setnx.side_effect = (True, False)
     cache_items = collections.OrderedDict([("a", "foo"), ("b", "bar")])
     cache = global_cache.RedisCache(redis)
     results = cache.set_if_not_exists(cache_items)
     assert results == {"a": True, "b": False}
     redis.setnx.assert_has_calls([
         mock.call("a", "foo"),
         mock.call("b", "bar"),
     ])
Esempio n. 6
0
    def test_set_w_expires():
        expired = {}

        def mock_expire(key, expires):
            expired[key] = expires

        redis = mock.Mock(expire=mock_expire, spec=("mset", "expire"))
        cache_items = {"a": "foo", "b": "bar"}
        cache = global_cache.RedisCache(redis)
        cache.set(cache_items, expires=32)
        redis.mset.assert_called_once_with(cache_items)
        assert expired == {"a": 32, "b": 32}
Esempio n. 7
0
    def test_watch(uuid):
        uuid.uuid4.return_value = "abc123"
        redis = mock.Mock(pipeline=mock.Mock(spec=("watch",)), spec=("pipeline",))
        pipe = redis.pipeline.return_value
        keys = ["foo", "bar"]
        cache = global_cache.RedisCache(redis)
        cache.watch(keys)

        pipe.watch.assert_called_once_with("foo", "bar")
        assert cache.pipes == {
            "foo": global_cache._Pipeline(pipe, "abc123"),
            "bar": global_cache._Pipeline(pipe, "abc123"),
        }
Esempio n. 8
0
    def test_unwatch():
        redis = mock.Mock(spec=())
        cache = global_cache.RedisCache(redis)
        pipe = mock.Mock(spec=("reset", ))
        cache._pipes.pipes = {
            "ay": pipe,
            "be": pipe,
            "see": pipe,
            "dee": pipe,
            "whatevs": "himom!",
        }

        cache.unwatch(["ay", "be", "see", "dee", "nuffin"])
        assert cache.pipes == {"whatevs": "himom!"}
        pipe.reset.assert_has_calls([mock.call()] * 4)
Esempio n. 9
0
    def test_unwatch():
        redis = mock.Mock(spec=())
        cache = global_cache.RedisCache(redis)
        pipe1 = mock.Mock(spec=("reset", ))
        pipe2 = mock.Mock(spec=("reset", ))
        cache._pipes.pipes = {
            "ay": global_cache._Pipeline(pipe1, "abc123"),
            "be": global_cache._Pipeline(pipe1, "abc123"),
            "see": global_cache._Pipeline(pipe2, "def456"),
            "dee": global_cache._Pipeline(pipe2, "def456"),
            "whatevs": global_cache._Pipeline(None, "himom!"),
        }

        cache.unwatch(["ay", "be", "see", "dee", "nuffin"])
        assert cache.pipes == {
            "whatevs": global_cache._Pipeline(None, "himom!")
        }
Esempio n. 10
0
 def test_delete():
     redis = mock.Mock(spec=("delete", ))
     cache_keys = [object(), object()]
     cache = global_cache.RedisCache(redis)
     cache.delete(cache_keys)
     redis.delete.assert_called_once_with(*cache_keys)
Esempio n. 11
0
 def test_set():
     redis = mock.Mock(spec=("mset", ))
     cache_items = {"a": "foo", "b": "bar"}
     cache = global_cache.RedisCache(redis)
     cache.set(cache_items)
     redis.mset.assert_called_once_with(cache_items)
Esempio n. 12
0
 def test_constructor():
     redis = object()
     cache = global_cache.RedisCache(redis)
     assert cache.redis is redis
Esempio n. 13
0
 def test_clear():
     redis = mock.Mock(spec=("flushdb", ))
     cache = global_cache.RedisCache(redis)
     cache.clear()
     redis.flushdb.assert_called_once_with()