Skip to main content

camel_core/cache/
mod.rs

1//! Pluggable cache repository implementations.
2//!
3//! Each backend implements [`camel_api::cache::CacheRepository`] and is
4//! registered with the runtime through the cache registry.
5
6pub mod disk_offload;
7pub mod memory;
8pub mod redb;
9
10pub use disk_offload::DiskOffloadRepository;
11pub use memory::MemoryCacheRepository;
12pub use redb::RedbCacheRepository;
13
14#[cfg(test)]
15mod tests {
16    use std::sync::Arc;
17
18    use crate::cache::MemoryCacheRepository;
19    use crate::context::CamelContext;
20    use crate::registry::RegistryError;
21
22    #[tokio::test]
23    async fn memory_cache_registered_as_default() {
24        let ctx = CamelContext::builder()
25            .build()
26            .await
27            .expect("build context");
28        let repo = ctx.cache_repository("memory");
29        assert!(repo.is_some());
30        assert_eq!(repo.unwrap().name(), "memory");
31    }
32
33    #[tokio::test]
34    async fn custom_backend_registered_alongside_memory() {
35        let mut ctx = CamelContext::builder()
36            .build()
37            .await
38            .expect("build context");
39        let custom = Arc::new(MemoryCacheRepository::new("custom", 100));
40        ctx.register_cache_repository("custom", custom)
41            .expect("custom cache repository registration should succeed");
42        assert!(ctx.cache_repository("custom").is_some());
43        assert!(ctx.cache_repository("memory").is_some());
44    }
45
46    #[tokio::test]
47    async fn duplicate_registration_rejected() {
48        let mut ctx = CamelContext::builder()
49            .build()
50            .await
51            .expect("build context");
52        let dup = Arc::new(MemoryCacheRepository::new("memory-dup", 100));
53        let err = ctx.register_cache_repository("memory", dup).unwrap_err();
54        assert!(
55            matches!(&err, RegistryError::AlreadyRegistered(name) if name == "memory"),
56            "expected AlreadyRegistered('memory'), got {err:?}"
57        );
58    }
59}