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 offload;
9pub mod redb;
10
11pub use disk_offload::DiskPayloadStore;
12pub use memory::MemoryCacheRepository;
13pub use offload::{OffloadRepository, PayloadStore};
14pub use redb::RedbCacheRepository;
15
16#[cfg(test)]
17mod tests {
18    use std::sync::Arc;
19
20    use crate::cache::MemoryCacheRepository;
21    use crate::context::CamelContext;
22    use crate::registry::RegistryError;
23
24    #[tokio::test]
25    async fn memory_cache_registered_as_default() {
26        let ctx = CamelContext::builder()
27            .build()
28            .await
29            .expect("build context");
30        let repo = ctx.cache_repository("memory");
31        assert!(repo.is_some());
32        assert_eq!(repo.unwrap().name(), "memory");
33    }
34
35    #[tokio::test]
36    async fn custom_backend_registered_alongside_memory() {
37        let mut ctx = CamelContext::builder()
38            .build()
39            .await
40            .expect("build context");
41        let custom = Arc::new(MemoryCacheRepository::new("custom", 100));
42        ctx.register_cache_repository("custom", custom)
43            .expect("custom cache repository registration should succeed");
44        assert!(ctx.cache_repository("custom").is_some());
45        assert!(ctx.cache_repository("memory").is_some());
46    }
47
48    #[tokio::test]
49    async fn duplicate_registration_rejected() {
50        let mut ctx = CamelContext::builder()
51            .build()
52            .await
53            .expect("build context");
54        let dup = Arc::new(MemoryCacheRepository::new("memory-dup", 100));
55        let err = ctx.register_cache_repository("memory", dup).unwrap_err();
56        assert!(
57            matches!(&err, RegistryError::AlreadyRegistered(name) if name == "memory"),
58            "expected AlreadyRegistered('memory'), got {err:?}"
59        );
60    }
61}