From 9200e83a0ae6e548db9dcd1a507650c13a7e6c7a Mon Sep 17 00:00:00 2001 From: Adrian Heine Date: Fri, 4 Sep 2020 12:43:32 +0200 Subject: [PATCH] Add DelayingSymbolRunner for testing --- src/lib.rs | 3 ++- src/setup/mod.rs | 3 ++- src/setup/symbol_runner.rs | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 70496ad..f5f883d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -50,5 +50,6 @@ mod to_artifact; pub use builder::{DefaultBuilder, ImplementationBuilder}; pub use locator::{DefaultLocator, DefaultPolicy, Policy, ResourceLocator}; pub use setup::{ - DrySymbolRunner, InitializingSymbolRunner, ReportingSymbolRunner, Setup, SymbolRunner, + DelayingSymbolRunner, DrySymbolRunner, InitializingSymbolRunner, ReportingSymbolRunner, Setup, + SymbolRunner, }; diff --git a/src/setup/mod.rs b/src/setup/mod.rs index f414fc8..7032339 100644 --- a/src/setup/mod.rs +++ b/src/setup/mod.rs @@ -3,7 +3,8 @@ mod util; pub use util::{AddResult, AddableResource}; mod symbol_runner; pub use symbol_runner::{ - DrySymbolRunner, InitializingSymbolRunner, ReportingSymbolRunner, SymbolRunner, + DelayingSymbolRunner, DrySymbolRunner, InitializingSymbolRunner, ReportingSymbolRunner, + SymbolRunner, }; mod runnable; mod setup; diff --git a/src/setup/symbol_runner.rs b/src/setup/symbol_runner.rs index 8e6ce83..5448521 100644 --- a/src/setup/symbol_runner.rs +++ b/src/setup/symbol_runner.rs @@ -1,9 +1,11 @@ +use crate::async_utils::sleep; use crate::loggers::Logger; use crate::symbols::Symbol; use async_trait::async_trait; use std::error::Error; use std::fmt; use std::fmt::Debug; +use std::time::Duration; #[async_trait(?Send)] pub trait SymbolRunner { @@ -96,6 +98,41 @@ impl SymbolRunner for InitializingSymbolRunner { } } +#[derive(Clone, Debug)] +pub struct DelayingSymbolRunner(R); + +impl DelayingSymbolRunner { + pub fn new(symbol_runner: R) -> Self { + Self(symbol_runner) + } +} + +#[async_trait(?Send)] +impl SymbolRunner for DelayingSymbolRunner +where + R: SymbolRunner, +{ + async fn run_symbol( + &self, + symbol: &S, + logger: &L, + force: bool, + ) -> Result> { + sleep(Duration::from_millis( + (((std::time::SystemTime::now() + .duration_since(std::time::UNIX_EPOCH) + .unwrap() + .subsec_micros() + % 20) as f32 + / 2.0) + .exp() + / 8.0) as u64, + )) + .await; + self.0.run_symbol(symbol, logger, force).await + } +} + #[derive(Clone, Debug, Default)] pub struct DrySymbolRunner;