oskr 1.0.0-rc.5

High performance distributed works collection
Documentation
use std::time::Duration;

use tokio::{spawn, sync::oneshot, time::timeout};

use crate::{
    app::mock::App, facade::Invoke, framework::tokio::AsyncEcosystem, simulated::Transport,
    tests::TRACING,
};

use super::{Client, Replica};

#[tokio::test(start_paused = true)]
async fn single_request() {
    *TRACING;
    let config = Transport::config_builder(4, 1);
    let mut transport = Transport::new(config());

    for i in 0..4 {
        Replica::register_new(config(), &mut transport, i, App::default(), 1, true);
    }
    let mut client: Client<_, AsyncEcosystem> = Client::register_new(config(), &mut transport);

    let (stop_tx, stop) = oneshot::channel();
    spawn(async move { transport.deliver_until(stop).await });
    let request = spawn(async move { client.invoke(b"hello".to_vec()).await });

    assert_eq!(
        timeout(Duration::from_millis(1), request)
            .await
            .unwrap()
            .unwrap(),
        b"reply: hello".to_vec()
    );
    stop_tx.send(()).unwrap();
}