def test_expire_at(self, cache: RedisCache): # Test settings expiration time 1 hour ahead by datetime. cache.set("foo", "bar", timeout=None) expiration_time = datetime.datetime.now() + timedelta(hours=1) assert cache.expire_at("foo", expiration_time) is True ttl = cache.ttl("foo") assert pytest.approx(ttl, 1) == timedelta(hours=1).total_seconds() # Test settings expiration time 1 hour ahead by Unix timestamp. cache.set("foo", "bar", timeout=None) expiration_time = datetime.datetime.now() + timedelta(hours=2) assert cache.expire_at("foo", int(expiration_time.timestamp())) is True ttl = cache.ttl("foo") assert pytest.approx(ttl, 1) == timedelta(hours=1).total_seconds() * 2 # Test settings expiration time 1 hour in past, which effectively # deletes the key. expiration_time = datetime.datetime.now() - timedelta(hours=2) assert cache.expire_at("foo", expiration_time) is True value = cache.get("foo") assert value is None expiration_time = datetime.datetime.now() + timedelta(hours=2) assert cache.expire_at("not-existent-key", expiration_time) is False
def test_touch_forever(self, cache: RedisCache): cache.set("test_key", "foo", timeout=1) result = cache.touch("test_key", None) assert result is True assert cache.ttl("test_key") is None time.sleep(2) assert cache.get("test_key") == "foo"
def test_persist(self, cache: RedisCache): cache.set("foo", "bar", timeout=20) assert cache.persist("foo") is True ttl = cache.ttl("foo") assert ttl is None assert cache.persist("not-existent-key") is False
def test_ttl(self, cache: RedisCache): cache.set("foo", "bar", 10) ttl = cache.ttl("foo") if isinstance(cache.client, herd.HerdClient): assert pytest.approx(ttl) == 12 else: assert pytest.approx(ttl) == 10 # Test ttl None cache.set("foo", "foo", timeout=None) ttl = cache.ttl("foo") assert ttl is None # Test ttl with expired key cache.set("foo", "foo", timeout=-1) ttl = cache.ttl("foo") assert ttl == 0 # Test ttl with not existent key ttl = cache.ttl("not-existent-key") assert ttl == 0
def test_expire(self, cache: RedisCache): cache.set("foo", "bar", timeout=None) assert cache.expire("foo", 20) is True ttl = cache.ttl("foo") assert pytest.approx(ttl) == 20 assert cache.expire("not-existent-key", 20) is False