use qcomm_core::transport::qssh::{
QsshTransport, QsshConfig, SessionState, TransportTier,
PqAlgorithm, SecurityTier,
};
use qcomm_core::transport::{Transport, TransportCapability};
use qcomm_core::crypto::qkd::{QkdClient, QkdProtocol, enhance_key};
#[tokio::test]
async fn test_qssh_transport_with_library_types() {
let config = QsshConfig {
listen_port: 4242,
pq_algorithm: PqAlgorithm::Falcon512,
security_tier: SecurityTier::HardenedPQ,
quantum_native: true,
..Default::default()
};
let transport = QsshTransport::new(config);
let caps = transport.capabilities();
assert!(caps.contains(&TransportCapability::PostQuantum));
assert!(caps.contains(&TransportCapability::Send));
assert!(caps.contains(&TransportCapability::Receive));
assert_eq!(transport.security_tier(), SecurityTier::HardenedPQ);
}
#[test]
fn test_security_tier_mapping() {
assert_eq!(
TransportTier::from_security_tier(SecurityTier::HardenedPQ),
TransportTier::PqSecured
);
assert_eq!(
TransportTier::from_security_tier(SecurityTier::PostQuantum),
TransportTier::PqSecured
);
assert_eq!(
TransportTier::from_security_tier(SecurityTier::QuantumSecured),
TransportTier::PqSecured
);
assert_eq!(TransportTier::PqSecured.display_name(), "PQ-SECURED");
assert_eq!(TransportTier::Hybrid.display_name(), "HYBRID");
assert_eq!(TransportTier::Tls.display_name(), "TLS");
}
#[test]
fn test_config_to_qssh_lib_config() {
let config = QsshConfig {
listen_port: 2222,
pq_algorithm: PqAlgorithm::Falcon512,
security_tier: SecurityTier::QuantumSecured,
qkd_endpoint: Some("https://qkd.example.com".into()),
..Default::default()
};
let lib_config = config.to_lib_config("192.168.1.100:2222", "alice");
assert_eq!(lib_config.server, "192.168.1.100:2222");
assert_eq!(lib_config.username, "alice");
assert_eq!(lib_config.pq_algorithm, PqAlgorithm::Falcon512);
assert_eq!(lib_config.security_tier, SecurityTier::QuantumSecured);
assert!(lib_config.use_qkd);
assert!(lib_config.quantum_native);
}
#[tokio::test]
async fn test_qkd_key_enhancement() {
let client = QkdClient::new(QkdProtocol::BB84);
client.add_simulated_keys(3).await;
assert_eq!(client.keys_available().await, 3);
let qkd_key = client.get_key().await.unwrap().unwrap();
let classical_key = vec![0xAA; 32];
let enhanced = enhance_key(&classical_key, Some(&qkd_key));
assert_ne!(enhanced, classical_key);
assert_eq!(enhanced.len(), 32);
}
#[tokio::test]
#[cfg(feature = "native-crypto")]
async fn test_qkd_qssh_bridge() {
use qcomm_core::crypto::qkd::qssh_bridge;
let is_configured = qssh_bridge::is_qssh_qkd_configured();
if !is_configured {
let client = QkdClient::with_qssh_endpoint("https://qkd.test.local");
assert_eq!(client.protocol(), QkdProtocol::EtsiNetwork);
}
}
#[tokio::test]
async fn test_transport_lifecycle() {
let config = QsshConfig::default();
let mut transport = QsshTransport::new(config);
assert!(!transport.is_connected().await);
transport.connect().await.unwrap();
assert!(transport.is_connected().await);
let sessions = transport.active_sessions().await;
assert!(sessions.is_empty());
transport.disconnect().await.unwrap();
}
#[tokio::test]
async fn test_all_security_tiers() {
let tiers = [
SecurityTier::PostQuantum,
SecurityTier::HardenedPQ,
SecurityTier::EntropyEnhanced,
SecurityTier::QuantumSecured,
SecurityTier::HybridQuantum,
];
for tier in tiers {
let config = QsshConfig {
security_tier: tier,
..Default::default()
};
let transport = QsshTransport::new(config);
assert_eq!(transport.security_tier(), tier);
let transport_tier = TransportTier::from_security_tier(tier);
assert_eq!(transport_tier, TransportTier::PqSecured);
}
}
#[test]
fn test_pq_algorithm_selection() {
let config = QsshConfig {
pq_algorithm: PqAlgorithm::Falcon512,
..Default::default()
};
let lib_config = config.to_lib_config("host:22", "user");
assert_eq!(lib_config.pq_algorithm, PqAlgorithm::Falcon512);
let config = QsshConfig {
pq_algorithm: PqAlgorithm::SphincsPlus,
..Default::default()
};
let lib_config = config.to_lib_config("host:22", "user");
assert_eq!(lib_config.pq_algorithm, PqAlgorithm::SphincsPlus);
let config = QsshConfig {
pq_algorithm: PqAlgorithm::Falcon1024,
..Default::default()
};
let lib_config = config.to_lib_config("host:22", "user");
assert_eq!(lib_config.pq_algorithm, PqAlgorithm::Falcon1024);
}