test(core): 使用隔离会话验证二十次打包冷启动

This commit is contained in:
2026-09-08 20:02:30 +08:00
parent 9e295b9a5d
commit 4ff8fdbd70
2 changed files with 65 additions and 0 deletions
+52
View File
@@ -19,3 +19,55 @@ fn bundle_rejects_modified_missing_and_extra_files() {
std::fs::remove_file(file).unwrap();
assert!(verify_bundle(dir.path(), manifest).is_err());
}
#[test]
#[ignore = "requires scripts/build-core.py; run explicitly after building the isolated Core"]
fn packaged_core_twenty_cold_starts_use_isolated_data_and_rotate_sessions() {
use notesagent_host::core::CoreSupervisor;
use std::{
collections::HashSet,
io::{Read, Write},
path::Path,
time::Duration,
};
let output = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../.build/sidecar");
let bundle = output.join("dist/opennexus-core").canonicalize().unwrap();
let manifest = std::fs::read_to_string(output.join("manifest.json")).unwrap();
let executable = bundle.join(if cfg!(windows) {
"opennexus-core.exe"
} else {
"opennexus-core"
});
let temp = tempfile::tempdir().unwrap();
let mut generations = HashSet::new();
for attempt in 0..20 {
let mut core = CoreSupervisor::new(
executable.clone(),
vec![],
bundle.clone(),
temp.path().join(format!("run-{attempt}")),
)
.with_bundle_manifest(manifest.clone());
let request = core.request_session("/health").unwrap();
assert!(generations.insert(request.generation.clone()));
let endpoint = request
.url
.trim_start_matches("http://")
.trim_end_matches("/health");
let mut stream = std::net::TcpStream::connect(endpoint).unwrap();
stream
.set_read_timeout(Some(Duration::from_secs(20)))
.unwrap();
write!(stream, "GET /health HTTP/1.1\r\nHost: {endpoint}\r\nAuthorization: {}\r\nX-Core-Generation: {}\r\nConnection: close\r\n\r\n", request.authorization.as_str(), request.generation).unwrap();
let mut response = String::new();
stream.read_to_string(&mut response).unwrap();
assert!(
response.starts_with("HTTP/1.1 200"),
"packaged health failed on attempt {attempt}"
);
assert!(!response.contains(request.authorization.as_str()));
drop(stream);
drop(core);
assert!(std::net::TcpStream::connect(endpoint).is_err());
}
}