use cachet::{Cache, CacheEntry, InsertPolicy, MockCache};
use tick::Clock;
#[cfg_attr(miri, ignore)]
#[tokio::test]
async fn logging_enabled_without_subscriber_does_not_panic() {
tracing::dispatcher::get_default(|dispatch| {
assert!(
dispatch.is::<tracing::subscriber::NoSubscriber>(),
"test precondition violated: a tracing subscriber is installed, \
but this test must run with no subscriber to exercise the \
no-subscriber code paths; got {dispatch:?}"
);
});
let clock = Clock::new_frozen();
let failing: MockCache<String, i32> = MockCache::new();
failing.fail_when(|_| true);
let failing_cache: Cache<String, i32> = Cache::builder::<String, i32>(clock.clone())
.name("no_sub_failing")
.storage(failing)
.enable_logs()
.build();
failing_cache.get(&"k".to_string()).await.unwrap_err();
failing_cache.insert("k".to_string(), CacheEntry::new(1)).await.unwrap_err();
failing_cache.invalidate(&"k".to_string()).await.unwrap_err();
failing_cache.clear().await.unwrap_err();
let rejecting_cache: Cache<String, i32> = Cache::builder::<String, i32>(clock.clone())
.name("no_sub_rejecting")
.storage(MockCache::<String, i32>::new())
.insert_policy(InsertPolicy::never())
.enable_logs()
.build();
assert!(rejecting_cache.get(&"k".to_string()).await.unwrap().is_none());
rejecting_cache.insert("k".to_string(), CacheEntry::new(1)).await.unwrap();
assert!(rejecting_cache.get(&"k".to_string()).await.unwrap().is_none());
let working_cache: Cache<String, i32> = Cache::builder::<String, i32>(clock)
.name("no_sub_working")
.storage(MockCache::<String, i32>::new())
.enable_logs()
.build();
working_cache.insert("k".to_string(), CacheEntry::<i32>::new(1)).await.unwrap();
assert!(working_cache.get(&"k".to_string()).await.unwrap().is_some());
}