#![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();
}