Crate awaitility

Source
Expand description

§Awaitility for Rust

Fast, Simple, Straightforward Test utility for async functionalities.

§Basic Usage

awaitility::at_most(Duration::from_millis(100)).until(|| {test_something_is_true()});
awaitility::at_least(Duration::from_millis(50)).always(|| {test_something_is_true()});
awaitility::at_most(Duration::from_millis(100)).until_no_panic(|| {assert_eq!(1, 1)});
// ...

§Examples

use std::sync::atomic::{AtomicUsize, Ordering};
use std::sync::Arc;
use std::time::Duration;
 
fn at_most_test() {
 let counter = Arc::new(AtomicUsize::new(5));
 let tcounter = counter.clone();
 std::thread::spawn(move || {
   while tcounter.load(Ordering::SeqCst) < 15 {
     tcounter.fetch_add(1, Ordering::SeqCst);
   }
 });
 awaitility::at_most(Duration::from_millis(100)).until(|| counter.load(Ordering::SeqCst) > 10);
}

§Async function

#[tokio::test]
async fn always_async_test() {
   super::at_least(Duration::from_millis(100)).always_async(|| async {
       1 < 2
   }).await;    
}

§Return result

let res = awaitility::new().set_return().at_most(Duration::from_millis(10)).until(|| 1 > 2).result();
assert!(res.is_err());

§Config

awaitility::at_most(Duration::from_millis(100))
           .poll_interval(Duration::from_millis(45))
           .describe("Becomes sunny..")
           .until(|| 2 > 1);

§Share configured instance

use std::time::Duration;
 
let aw = awaitility::new().poll_interval(Duration::from_millis(45));
aw.at_least(Duration::from_millis(10)).always(|| 2 > 1);
aw.at_least(Duration::from_millis(10)).once(|| 2 > 1);

Further configs made after at_least will not be reflected on instance aw.

Functions§

at_least
Create an at-least wait directive with default configs.
at_most
Create an at-most wait directive with default configs.
new
Create an awaitility instance with shared configs.