commonware-storage 2026.7.0

Persist and retrieve data from an abstract store.
Documentation
//! Metadata storage conformance tests.

use crate::metadata::{Config, Error, Metadata};
use commonware_codec::RangeCfg;
use commonware_conformance::conformance_tests;
use commonware_runtime::{
    conformance::{StorageConformance, StorageWorkload},
    Supervisor as _,
};
use commonware_utils::sequence::U64;
use rand::RngExt as _;

struct MetadataWorkload;

impl StorageWorkload for MetadataWorkload {
    type Error = Error;

    async fn run(
        mut context: commonware_runtime::deterministic::Context,
        seed: u64,
    ) -> Result<(), Self::Error> {
        let cfg = Config {
            partition: format!("metadata-conformance-{seed}"),
            codec_config: (RangeCfg::new(0..512), ()),
        };
        let mut metadata =
            Metadata::<_, U64, Vec<u8>>::init(context.child("metadata"), cfg).await?;

        let items = context.random_range(16..64);
        for i in 0..items {
            let mut value = vec![0; context.random_range(0..512)];
            context.fill(value.as_mut_slice());
            metadata.put(U64::new(i), value);
        }
        metadata.sync().await?;

        for i in (0..items).step_by(3) {
            let mut value = vec![0; context.random_range(0..512)];
            context.fill(value.as_mut_slice());
            metadata.put(U64::new(i), value);
        }
        metadata.sync().await
    }
}

conformance_tests! {
    StorageConformance<MetadataWorkload> => 256,
}