volli-server 0.1.10

Server for volli
Documentation
#![allow(unused_crate_dependencies)]
use getrandom;
use rcgen::generate_simple_self_signed;
use serial_test::serial;
use tokio::io::{AsyncReadExt, AsyncWriteExt, BufReader};
use tokio::net::UnixStream;
use volli_core::BootstrapSecret;

#[tokio::test]
#[serial]
async fn coord_token_command_produces_valid_secret() {
    let dir = tempfile::TempDir::new().unwrap();
    let socket_path = dir.path().join("cmd.sock");

    let mut csk = [0u8; 32];
    getrandom::getrandom(&mut csk).unwrap();

    let cert = generate_simple_self_signed(vec!["volli".into()]).unwrap();
    let cert_der = cert.serialize_der().unwrap();

    let handle = tokio::spawn(volli_server::command_socket(
        socket_path.clone(),
        csk,
        "127.0.0.1".into(),
        4243,
        4242,
        cert_der.clone(),
    ));

    tokio::time::sleep(std::time::Duration::from_millis(10)).await;

    let mut stream = UnixStream::connect(&socket_path).await.unwrap();
    stream.write_all(b"coord_token\n").await.unwrap();
    let mut resp = String::new();
    BufReader::new(stream)
        .read_to_string(&mut resp)
        .await
        .unwrap();

    handle.abort();

    assert!(resp.starts_with("volli serve --join "));
    let secret_enc = resp.trim().strip_prefix("volli serve --join ").unwrap();
    let _bs = BootstrapSecret::decode(secret_enc).unwrap();
}