freja 0.0.1

Command-line toolbox integrating multiple utilities; includes a WebSocket tester
Documentation
use freja::commands::websocket::{self, WebsocketOpts};
use std::sync::{
    Arc,
    atomic::{AtomicBool, Ordering},
};

#[tokio::test]
async fn run_with_calls_client() {
    let opts = WebsocketOpts {
        listen: false,
        url: "host".into(),
        port: 1234,
    };
    let called = Arc::new(AtomicBool::new(false));
    let called_clone = called.clone();
    let client = move |h: String, p: u16| {
        assert_eq!(h, "host");
        assert_eq!(p, 1234);
        called_clone.store(true, Ordering::SeqCst);
        async { Ok(()) }
    };
    let server = |_opts: WebsocketOpts| async { Ok(()) };
    websocket::run_with(opts, client, server).await.unwrap();
    assert!(called.load(Ordering::SeqCst));
}

#[tokio::test]
async fn run_with_calls_server() {
    let opts = WebsocketOpts {
        listen: true,
        url: "host".into(),
        port: 4321,
    };
    let called = Arc::new(AtomicBool::new(false));
    let called_clone = called.clone();
    let client = |_h: String, _p: u16| async { Ok(()) };
    let server = move |o: WebsocketOpts| {
        assert!(o.listen);
        assert_eq!(o.url, "host");
        assert_eq!(o.port, 4321);
        called_clone.store(true, Ordering::SeqCst);
        async { Ok(()) }
    };
    websocket::run_with(opts, client, server).await.unwrap();
    assert!(called.load(Ordering::SeqCst));
}