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