#![cfg(test)]
use std::path::PathBuf;
fn repo_root() -> PathBuf {
let dir = env!("CARGO_MANIFEST_DIR");
PathBuf::from(dir)
}
fn root_cargo_toml() -> String {
let path = repo_root().join("Cargo.toml");
std::fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("failed to read {}: {e}", path.display()))
}
fn embed_cargo_toml() -> String {
let path = repo_root()
.join("crates")
.join("leindex-embed")
.join("Cargo.toml");
std::fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("failed to read {}: {e}", path.display()))
}
fn cargo_config_toml() -> String {
let path = repo_root().join(".cargo").join("config.toml");
std::fs::read_to_string(&path).unwrap_or_default()
}
fn bin_blocks(cargo_toml: &str) -> Vec<String> {
let mut blocks = Vec::new();
let mut current: Option<Vec<&str>> = None;
for line in cargo_toml.lines() {
let t = line.trim();
if t == "[[bin]]" {
if let Some(b) = current.take() {
blocks.push(b.join("\n"));
}
current = Some(Vec::new());
} else if t.starts_with("[[")
|| (t.starts_with('[') && !t.starts_with("[[") && current.is_some())
{
if let Some(b) = current.take() {
blocks.push(b.join("\n"));
}
} else if let Some(ref mut b) = current {
if !t.is_empty() && !t.starts_with('#') {
b.push(line);
}
}
}
if let Some(b) = current {
blocks.push(b.join("\n"));
}
blocks
}
mod binary_targets {
use super::*;
#[test]
fn root_declares_leindex_embed_bin_target() {
let toml = root_cargo_toml();
let bins = bin_blocks(&toml);
let embed_bin = bins.iter().find(|b| b.contains("name = \"leindex-embed\""));
assert!(
embed_bin.is_some(),
"Root Cargo.toml MUST declare a [[bin]] target named 'leindex-embed' \
so cargo install co-installs the worker. Found bin blocks: {:?}",
bins.iter()
.map(|b| b.lines().next().unwrap_or(""))
.collect::<Vec<_>>()
);
let embed = embed_bin.unwrap();
assert!(
embed.contains("path = \"src/bin/leindex-embed.rs\""),
"leindex-embed bin target should point to src/bin/leindex-embed.rs, got: {}",
embed
);
assert!(
embed.contains("required-features = [\"onnx\"]"),
"leindex-embed bin target must have required-features = [\"onnx\"], got: {}",
embed
);
}
#[test]
fn root_declares_leindex_bin_target() {
let toml = root_cargo_toml();
let bins = bin_blocks(&toml);
let main_bin = bins.iter().find(|b| b.contains("name = \"leindex\""));
assert!(
main_bin.is_some(),
"Root Cargo.toml MUST declare [[bin]] 'leindex'. Found: {:?}",
bins.iter()
.map(|b| b.lines().next().unwrap_or(""))
.collect::<Vec<_>>()
);
}
#[test]
fn root_has_exactly_two_bin_targets() {
let toml = root_cargo_toml();
let bins = bin_blocks(&toml);
assert_eq!(
bins.len(),
2,
"Expected exactly 2 [[bin]] targets (leindex, leindex-embed), got {}: {:?}",
bins.len(),
bins.iter()
.map(|b| b.lines().next().unwrap_or(""))
.collect::<Vec<_>>()
);
}
#[test]
fn root_embed_wrapper_source_exists() {
let path = repo_root().join("src").join("bin").join("leindex-embed.rs");
assert!(path.exists(), "src/bin/leindex-embed.rs must exist");
let src = std::fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("failed to read {}: {e}", path.display()));
assert!(
src.contains("leindex_embed::worker_main::run"),
"Wrapper must call leindex_embed::worker_main::run()"
);
}
#[test]
fn worker_main_module_exists() {
let path = repo_root()
.join("crates")
.join("leindex-embed")
.join("src")
.join("worker_main.rs");
assert!(
path.exists(),
"crates/leindex-embed/src/worker_main.rs must exist"
);
let src = std::fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("failed to read {}: {e}", path.display()));
assert!(src.contains("pub fn run()"));
assert!(
src.contains("--version"),
"worker_main must handle --version"
);
}
#[test]
fn lib_exports_worker_main() {
let path = repo_root()
.join("crates")
.join("leindex-embed")
.join("src")
.join("lib.rs");
let src = std::fs::read_to_string(&path)
.unwrap_or_else(|e| panic!("failed to read {}: {e}", path.display()));
assert!(
src.contains("pub mod worker_main"),
"lib.rs must export worker_main module"
);
}
}
mod feature_propagation {
use super::*;
#[test]
fn onnx_feature_propagates_to_leindex_embed() {
let toml = root_cargo_toml();
let onnx_line = toml
.lines()
.find(|l| l.trim_start().starts_with("onnx = ["))
.expect("root Cargo.toml must define an 'onnx' feature");
assert!(
onnx_line.contains("leindex-embed/onnx"),
"The root 'onnx' feature MUST include 'leindex-embed/onnx' so the worker \
binary gets ONNX support. Got: {}",
onnx_line
);
}
#[test]
fn onnx_migraphx_feature_includes_migraphx() {
let toml = root_cargo_toml();
let migraphx_line = toml
.lines()
.find(|l| l.trim_start().starts_with("onnx-migraphx = ["))
.expect("root Cargo.toml must define 'onnx-migraphx' feature");
assert!(migraphx_line.contains("leindex-embed/onnx-migraphx"));
}
#[test]
fn ort_uses_load_dynamic() {
let toml = embed_cargo_toml();
let ort_line = toml
.lines()
.find(|l| {
let t = l.trim();
t.starts_with("ort = ") || t.starts_with("ort = {")
})
.expect("leindex-embed must declare an ort dependency");
assert!(
ort_line.contains("load-dynamic"),
"leindex-embed ort dependency must use load-dynamic feature. Got: {}",
ort_line
);
assert!(
!ort_line.contains("download-binaries"),
"leindex-embed ort dependency must NOT use download-binaries. Got: {}",
ort_line
);
assert!(
!ort_line.contains("copy-dylibs"),
"leindex-embed ort dependency must NOT use copy-dylibs. Got: {}",
ort_line
);
}
}
mod setup_command {
use super::*;
#[test]
fn setup_command_declared_in_cli() {
let cli_path = repo_root().join("src").join("cli").join("cli.rs");
let src = std::fs::read_to_string(&cli_path)
.unwrap_or_else(|e| panic!("failed to read {}: {e}", cli_path.display()));
assert!(
src.contains("Setup {") || src.contains("Setup{"),
"cli.rs must declare a Setup subcommand variant"
);
for flag in ["--neural", "--cpu", "--gpu", "--no-neural", "--check"] {
let as_long = format!("long = \"{}\"", flag.trim_start_matches("--"));
assert!(
src.contains(&as_long),
"cli.rs setup must declare flag '{}' (as '{}')",
flag,
as_long
);
}
}
}
mod no_ort_vendoring {
use super::*;
#[test]
fn cargo_config_has_no_ort_env_entries() {
let cfg = cargo_config_toml();
assert!(
!cfg.contains("ORT_LIB_PATH"),
".cargo/config.toml must not set ORT_LIB_PATH (obsolete under load-dynamic)"
);
assert!(
!cfg.contains("ORT_PREFER_DYNAMIC_LINK"),
".cargo/config.toml must not set ORT_PREFER_DYNAMIC_LINK"
);
}
#[test]
fn ort_lib_directory_removed() {
let ort_lib = repo_root().join("ort-lib");
assert!(
!ort_lib.exists(),
"ort-lib/ directory must not exist (it was the old build-time ORT cache)"
);
}
#[test]
fn no_source_references_to_ort_lib() {
for rel in ["build.rs", "crates/leindex-embed/build.rs"] {
let path = repo_root().join(rel);
if let Ok(src) = std::fs::read_to_string(&path) {
for line in src.lines() {
let trimmed = line.trim();
if trimmed.starts_with("//") || trimmed.starts_with("#") {
continue;
}
assert!(
!trimmed.contains("ort-lib"),
"Build script {} references ort-lib/ in code: {}",
rel,
trimmed
);
}
}
}
}
#[test]
fn build_scripts_have_no_origin_rpath() {
for rel in ["build.rs", "crates/leindex-embed/build.rs"] {
let path = repo_root().join(rel);
if let Ok(src) = std::fs::read_to_string(&path) {
for line in src.lines() {
let trimmed = line.trim();
if trimmed.starts_with("//") {
continue;
}
assert!(
!trimmed.contains("$ORIGIN"),
"Build script {} still uses $ORIGIN rpath: {}",
rel,
trimmed
);
}
}
}
}
}
mod version_parity {
use super::*;
fn extract_version(toml: &str) -> Option<String> {
for line in toml.lines() {
let trimmed = line.trim();
if let Some(rest) = trimmed.strip_prefix("version = ") {
let v = rest.trim().trim_matches('"');
if !v.is_empty() {
return Some(v.to_string());
}
}
}
None
}
#[test]
fn versions_match_across_crates() {
let root = root_cargo_toml();
let embed = embed_cargo_toml();
let root_v = extract_version(&root).expect("root Cargo.toml missing version");
let embed_v = extract_version(&embed).expect("embed Cargo.toml missing version");
assert_eq!(
root_v, embed_v,
"Version mismatch: root={} embed={}",
root_v, embed_v
);
}
}
mod docs_packaging {
use super::*;
#[test]
fn crate_package_includes_neural_setup_doc() {
let cargo = root_cargo_toml();
assert!(
cargo.contains("/docs/NEURAL_SETUP.md"),
"crate package include list must contain docs/NEURAL_SETUP.md because README points to it"
);
}
}