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(())
}