volli-server 0.1.10

Server for volli
Documentation
#![allow(unused_crate_dependencies)]
use ed25519_dalek::{Signer, Verifier};
use ed25519_dalek::{SigningKey, VerifyingKey};
use serial_test::serial;
use std::convert::TryFrom;
use std::fs;
use volli_server::{bootstrap_keypair, default_secret_dir};

#[test]
#[serial]
fn default_secret_dir_env_overrides() {
    let tmp = tempfile::TempDir::new().unwrap();
    unsafe {
        std::env::set_var("VOLLI_CONFIG_DIR", tmp.path());
    }
    let mut expected = std::path::PathBuf::from(tmp.path());
    expected.push("profiles");
    expected.push("coordinator");
    let dir = default_secret_dir();
    assert_eq!(dir, expected);
    unsafe {
        std::env::remove_var("VOLLI_CONFIG_DIR");
    }
}

#[test]
#[serial]
fn default_secret_dir_fallback() {
    unsafe {
        std::env::remove_var("VOLLI_CONFIG_DIR");
    }
    let mut expected = volli_core::config_dir();
    expected.push("profiles");
    expected.push("coordinator");
    assert_eq!(default_secret_dir(), expected);
}

#[test]
#[serial]
fn bootstrap_keypair_creates_keys() {
    let dir = tempfile::TempDir::new().unwrap();
    bootstrap_keypair(Some(dir.path())).unwrap();
    let sk_data = fs::read(dir.path().join("coord_sk")).unwrap();
    let pk_data = fs::read(dir.path().join("coord_pk")).unwrap();
    let sk_bytes = hex::decode(sk_data).unwrap();
    let pk_bytes = hex::decode(pk_data).unwrap();
    let signing = SigningKey::try_from(&sk_bytes[..]).unwrap();
    let verifying = VerifyingKey::from(&signing);
    assert_eq!(verifying.to_bytes().as_slice(), pk_bytes.as_slice());
}

#[test]
#[serial]
fn bootstrap_keypair_fails_if_exists() {
    let dir = tempfile::TempDir::new().unwrap();
    bootstrap_keypair(Some(dir.path())).unwrap();
    let err = bootstrap_keypair(Some(dir.path())).unwrap_err();
    assert!(err.to_string().contains("exists"));
}

#[test]
#[serial]
fn bootstrap_keypair_uses_default_dir() {
    let dir = tempfile::TempDir::new().unwrap();
    unsafe {
        std::env::set_var("VOLLI_CONFIG_DIR", dir.path());
    }
    let expected = default_secret_dir();
    bootstrap_keypair(None).unwrap();
    assert!(expected.join("coord_sk").exists());
    assert!(expected.join("coord_pk").exists());
    unsafe {
        std::env::remove_var("VOLLI_CONFIG_DIR");
    }
}

#[test]
#[serial]
fn load_keypair_roundtrip() {
    let dir = tempfile::TempDir::new().unwrap();
    volli_server::bootstrap_keypair(Some(dir.path())).unwrap();
    let sk = volli_server::load_signing_key(Some(dir.path())).unwrap();
    let pk = volli_server::load_verifying_key(Some(dir.path())).unwrap();
    let msg = b"test";
    let sig = sk.sign(msg);
    pk.verify(msg, &sig).unwrap();
}

#[test]
#[serial]
fn load_or_generate_cert_persists() {
    let dir = tempfile::TempDir::new().unwrap();
    let (c1, _, f1) = volli_server::load_or_generate_cert(None, None, Some(dir.path())).unwrap();
    let (c2, _, f2) = volli_server::load_or_generate_cert(None, None, Some(dir.path())).unwrap();
    assert_eq!(c1[0].0, c2[0].0);
    assert_eq!(f1, f2);
}