reifydb_catalog/store/ringbuffer/
get.rs1use reifydb_core::interface::{QueryTransaction, RingBufferDef, RingBufferId, RingBufferMetadata};
5use reifydb_type::{Error, internal};
6
7use crate::CatalogStore;
8
9impl CatalogStore {
10 pub async fn get_ringbuffer(
11 rx: &mut impl QueryTransaction,
12 ringbuffer: RingBufferId,
13 ) -> crate::Result<RingBufferDef> {
14 Self::find_ringbuffer(rx, ringbuffer).await?.ok_or_else(|| {
15 Error(internal!(
16 "Ring buffer with ID {:?} not found in catalog. This indicates a critical catalog inconsistency.",
17 ringbuffer
18 ))
19 })
20 }
21
22 pub async fn get_ringbuffer_metadata(
23 rx: &mut impl QueryTransaction,
24 ringbuffer: RingBufferId,
25 ) -> crate::Result<RingBufferMetadata> {
26 Self::find_ringbuffer_metadata(rx, ringbuffer).await?.ok_or_else(|| {
27 Error(internal!(
28 "Ring buffer metadata for ID {:?} not found. This indicates a critical catalog inconsistency.",
29 ringbuffer
30 ))
31 })
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use reifydb_core::interface::RingBufferId;
38 use reifydb_engine::test_utils::create_test_command_transaction;
39
40 use crate::{CatalogStore, test_utils::ensure_test_ringbuffer};
41
42 #[tokio::test]
43 async fn test_get_ringbuffer_exists() {
44 let mut txn = create_test_command_transaction().await;
45 let ringbuffer = ensure_test_ringbuffer(&mut txn).await;
46
47 let result = CatalogStore::get_ringbuffer(&mut txn, ringbuffer.id).await.unwrap();
48
49 assert_eq!(result.id, ringbuffer.id);
50 assert_eq!(result.name, ringbuffer.name);
51 }
52
53 #[tokio::test]
54 async fn test_get_ringbuffer_not_exists() {
55 let mut txn = create_test_command_transaction().await;
56
57 let result = CatalogStore::get_ringbuffer(&mut txn, RingBufferId(999)).await;
58
59 assert!(result.is_err());
60 let err = result.unwrap_err();
61 assert_eq!(err.code, "INTERNAL_ERROR");
62 assert!(err.message.contains("RingBufferId(999)"));
63 assert!(err.message.contains("not found in catalog"));
64 }
65
66 #[tokio::test]
67 async fn test_get_ringbuffer_metadata_exists() {
68 let mut txn = create_test_command_transaction().await;
69 let ringbuffer = ensure_test_ringbuffer(&mut txn).await;
70
71 let result = CatalogStore::get_ringbuffer_metadata(&mut txn, ringbuffer.id).await.unwrap();
72
73 assert_eq!(result.id, ringbuffer.id);
74 assert_eq!(result.capacity, ringbuffer.capacity);
75 }
76
77 #[tokio::test]
78 async fn test_get_ringbuffer_metadata_not_exists() {
79 let mut txn = create_test_command_transaction().await;
80
81 let result = CatalogStore::get_ringbuffer_metadata(&mut txn, RingBufferId(999)).await;
82
83 assert!(result.is_err());
84 let err = result.unwrap_err();
85 assert_eq!(err.code, "INTERNAL_ERROR");
86 assert!(err.message.contains("RingBufferId(999)"));
87 assert!(err.message.contains("not found"));
88 }
89}