use std::time::Duration;
use phoxal_runtime_contract::identity::{ParticipantId, ParticipantIdError};
pub use crate::participant::clock::ClockSource;
pub use crate::participant::clock::test::TestClock;
pub use crate::participant::runner::{run_test_harness, run_test_harness_with_clock};
pub use phoxal_runtime_contract::origin::ExecutionOrigin;
#[doc(hidden)]
#[derive(Clone, Debug)]
pub struct TestHarness {
pub(crate) participant_id: ParticipantId,
pub(crate) execution_origin: ExecutionOrigin,
pub(crate) shutdown_grace: Duration,
pub(crate) query_reply_delay: Option<Duration>,
}
impl TestHarness {
pub fn new(participant_id: impl Into<String>) -> std::result::Result<Self, ParticipantIdError> {
Ok(Self {
participant_id: ParticipantId::new(participant_id)?,
execution_origin: ExecutionOrigin::mint(),
shutdown_grace: Duration::from_millis(
crate::participant::launch::DEFAULT_SHUTDOWN_GRACE_MS,
),
query_reply_delay: None,
})
}
#[must_use]
pub fn with_execution_origin(mut self, origin: ExecutionOrigin) -> Self {
self.execution_origin = origin;
self
}
#[doc(hidden)]
#[must_use]
pub fn with_query_reply_delay(mut self, delay: Duration) -> Self {
self.query_reply_delay = Some(delay);
self
}
}