use super::*;
#[test]
fn native_variant_delegates_backend_traits() {
let backend = StorageBackend::Native(NativeFileBackend::new());
let direct = NativeFileBackend::new();
assert_eq!(
backend
.capabilities()
.supports(StorageCapability::Persistent),
direct
.capabilities()
.supports(StorageCapability::Persistent)
);
assert_eq!(
backend
.capabilities()
.supports(StorageCapability::ObjectWrite),
direct
.capabilities()
.supports(StorageCapability::ObjectWrite)
);
}
#[test]
fn object_store_variant_dispatches_byte_ops_and_rejects_the_rest() {
use crate::object_store::InMemoryObjectStore;
let backend = StorageBackend::ObjectStore(ObjectStoreBackend::new(Arc::new(
InMemoryObjectStore::new(),
)));
let id = StorageObjectId::native_file(StorageObjectKind::Table, "/db/0001.trinet");
poll_ready_storage_future(backend.write_object(
id.clone(),
Arc::from(b"hi".as_slice()),
DurabilityMode::Flush,
))
.expect("write");
assert_eq!(
poll_ready_storage_future(backend.read_object_bytes(id.clone()))
.expect("read")
.as_deref(),
Some(b"hi".as_slice())
);
assert!(
backend
.capabilities()
.supports(StorageCapability::ObjectWrite)
);
assert!(!backend.capabilities().supports(StorageCapability::Append));
assert!(
poll_ready_storage_future(
backend.create_directory_all(StorageDirectoryId::native_file("/db"))
)
.is_err()
);
assert!(
backend.open_read_blocking(id).is_err(),
"object store is async-only"
);
}