reifydb_catalog/store/ringbuffer/
get.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use 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}