use qssh::{QsshConfig, QsshClient, QsshServer, PqAlgorithm};
use qssh::server::QsshServerConfig;
use std::sync::Arc;
use tokio::time::{timeout, Duration};
#[tokio::test]
async fn test_client_server_handshake() {
let _ = env_logger::try_init();
let mut server_config = QsshServerConfig::new("127.0.0.1:0").unwrap();
let server = Arc::new(QsshServer::new(server_config.clone()));
let server_handle = {
let server = server.clone();
tokio::spawn(async move {
let _ = server.start().await;
})
};
tokio::time::sleep(Duration::from_millis(100)).await;
let client_config = QsshConfig {
server: server_config.listen_addr.clone(),
username: "testuser".to_string(),
password: None,
port_forwards: vec![],
use_qkd: false, pq_algorithm: PqAlgorithm::Falcon512,
key_rotation_interval: 3600,
};
let mut client = QsshClient::new(client_config);
server_handle.abort();
}
#[tokio::test]
async fn test_vault_integration() {
let config = QsshConfig::default();
let client = QsshClient::new(config)
.with_vault(b"test-master-key")
.await
.unwrap();
}
#[test]
fn test_config_defaults() {
let config = QsshConfig::default();
assert_eq!(config.server, "localhost:22222");
assert_eq!(config.username, "user");
assert!(!config.use_qkd);
assert_eq!(config.pq_algorithm, PqAlgorithm::Falcon512);
assert_eq!(config.key_rotation_interval, 3600);
}
#[test]
fn test_quantum_capabilities() {
use qssh::QuantumCapabilities;
let caps = QuantumCapabilities {
supports_qkd: true,
supports_sphincs: true,
supports_kyber: false, supports_falcon: true,
qkd_endpoints: vec![
"qkd://alice.quantum.net".to_string(),
"qkd://bob.quantum.net".to_string(),
],
};
assert!(caps.supports_qkd);
assert!(caps.supports_falcon);
assert_eq!(caps.qkd_endpoints.len(), 2);
}