nodo_cask 0.18.5

Message recording to MCPA for NODO
Documentation
// Copyright 2025 David Weikersdorfer

use crate::common::*;
use nodo::{codelet::ScheduleBuilder, prelude::*};
use nodo_cask::{
    CaskChannel, CaskRecord, CaskRecordConfig, CaskWriterConfigBuilder, SharedCaskControl,
};
use nodo_runtime::Runtime;
use tempfile::tempdir;

#[allow(dead_code)]
mod common;

#[test]
fn test_cask_record() -> eyre::Result<()> {
    let tmp_dir = tempdir()?;

    for count in [0, 1, 10, 100, 1000] {
        let path = {
            let cask_ctrl = SharedCaskControl::new(&tmp_dir.path());
            let path = cask_ctrl.start_recording(
                "test_cask_record",
                &CaskWriterConfigBuilder::default()
                    .with_timestamp_filename(&format!("test_cask_record_{count}"))
                    .with_channel(CaskChannel {
                        topic: "foo".into(),
                    })
                    .into(),
            )?;

            let mut rt = Runtime::new();

            let mut alice = FooPub::instantiate("alice", ());
            let mut rec = CaskRecord::new(cask_ctrl.clone())
                .into_instance("rec", CaskRecordConfig::default());
            rec.rx.connect("foo", &mut alice.tx.foo)?;

            rt.add_codelet_schedule(
                ScheduleBuilder::new()
                    .with_max_step_count(count)
                    .with(alice)
                    .with(rec)
                    .into(),
            );

            rt.spin();

            path
        };

        assert_foo_cask(&path, count);
    }

    Ok(())
}