in src/storage/seg/src/tests.rs [330:381]
fn expiration() {
let segments = 64;
let segment_size = 2 * 1024;
let heap_size = segments * segment_size as usize;
let mut cache = Seg::builder()
.segment_size(segment_size)
.heap_size(heap_size)
.hash_power(16)
.build()
.expect("failed to create cache");
assert_eq!(cache.items(), 0);
assert_eq!(cache.segments.free(), segments);
assert!(cache
.insert(b"latte", b"", None, Duration::from_secs(5))
.is_ok());
assert!(cache
.insert(b"espresso", b"", None, Duration::from_secs(15))
.is_ok());
assert!(cache.get(b"latte").is_some());
assert!(cache.get(b"espresso").is_some());
assert_eq!(cache.items(), 2);
assert_eq!(cache.segments.free(), segments - 2);
// not enough time elapsed, not removed by expire
cache.expire();
assert!(cache.get(b"latte").is_some());
assert!(cache.get(b"espresso").is_some());
assert_eq!(cache.items(), 2);
assert_eq!(cache.segments.free(), segments - 2);
// wait and expire again
std::thread::sleep(std::time::Duration::from_secs(5));
cache.expire();
assert!(cache.get(b"latte").is_none());
assert!(cache.get(b"espresso").is_some());
assert_eq!(cache.items(), 1);
assert_eq!(cache.segments.free(), segments - 1);
// wait and expire again
std::thread::sleep(std::time::Duration::from_secs(10));
cache.expire();
assert!(cache.get(b"latte").is_none());
assert!(cache.get(b"espresso").is_none());
assert_eq!(cache.items(), 0);
assert_eq!(cache.segments.free(), segments);
}