#![allow(dead_code)]
use std::env;
pub const DEFAULT_VSOCK_SERVER_CID: u32 = 103;
pub const DEFAULT_VSOCK_PORT: u32 = 9999;
pub fn get_vsock_cid() -> u32 {
env::var("VSOCK_CID")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(DEFAULT_VSOCK_SERVER_CID)
}
pub fn get_vsock_port() -> u32 {
env::var("VSOCK_PORT")
.ok()
.and_then(|s| s.parse().ok())
.unwrap_or(DEFAULT_VSOCK_PORT)
}
#[cfg(test)]
mod tests {
use super::*;
use std::env;
#[test]
fn test_default_vsock_cid() {
unsafe { env::remove_var("VSOCK_CID") };
let cid = get_vsock_cid();
assert_eq!(
cid, DEFAULT_VSOCK_SERVER_CID,
"默认 CID 应该为 {}",
DEFAULT_VSOCK_SERVER_CID
);
}
#[test]
fn test_default_vsock_port() {
unsafe { env::remove_var("VSOCK_PORT") };
let port = get_vsock_port();
assert_eq!(
port, DEFAULT_VSOCK_PORT,
"默认 Port 应该为 {}",
DEFAULT_VSOCK_PORT
);
}
#[test]
fn test_custom_vsock_cid() {
let old_value = env::var("VSOCK_CID").ok();
unsafe { env::set_var("VSOCK_CID", "200") };
let cid = get_vsock_cid();
assert_eq!(cid, 200, "自定义 CID 应该为 200");
match old_value {
Some(val) => unsafe { env::set_var("VSOCK_CID", val) },
None => unsafe { env::remove_var("VSOCK_CID") },
}
}
#[test]
fn test_custom_vsock_port() {
let old_value = env::var("VSOCK_PORT").ok();
unsafe { env::set_var("VSOCK_PORT", "8888") };
let port = get_vsock_port();
assert_eq!(port, 8888, "自定义 Port 应该为 8888");
match old_value {
Some(val) => unsafe { env::set_var("VSOCK_PORT", val) },
None => unsafe { env::remove_var("VSOCK_PORT") },
}
}
#[test]
fn test_invalid_vsock_cid() {
let old_value = env::var("VSOCK_CID").ok();
unsafe { env::set_var("VSOCK_CID", "invalid") };
let cid = get_vsock_cid();
assert_eq!(cid, DEFAULT_VSOCK_SERVER_CID, "无效 CID 应该回退到默认值");
match old_value {
Some(val) => unsafe { env::set_var("VSOCK_CID", val) },
None => unsafe { env::remove_var("VSOCK_CID") },
}
}
#[test]
fn test_invalid_vsock_port() {
let old_value = env::var("VSOCK_PORT").ok();
unsafe { env::set_var("VSOCK_PORT", "not_a_number") };
let port = get_vsock_port();
assert_eq!(port, DEFAULT_VSOCK_PORT, "无效 Port 应该回退到默认值");
match old_value {
Some(val) => unsafe { env::set_var("VSOCK_PORT", val) },
None => unsafe { env::remove_var("VSOCK_PORT") },
}
}
}