use dynamo_llm::namespace::{GLOBAL_NAMESPACE, is_global_namespace};
use dynamo_runtime::protocols::EndpointId;
fn create_test_endpoint(namespace: &str, component: &str, endpoint_name: &str) -> EndpointId {
EndpointId {
namespace: namespace.to_string(),
component: component.to_string(),
name: endpoint_name.to_string(),
}
}
#[test]
fn test_endpoint_id_namespace_extraction() {
let test_cases = vec![
("vllm-agg.frontend.http", "vllm-agg", "frontend", "http"),
(
"sglang-prod.backend.generate",
"sglang-prod",
"backend",
"generate",
),
("dynamo.frontend.http", "dynamo", "frontend", "http"),
(
"tensorrt-llm.backend.inference",
"tensorrt-llm",
"backend",
"inference",
),
(
"test-namespace.component.endpoint",
"test-namespace",
"component",
"endpoint",
),
];
for (endpoint_str, expected_namespace, expected_component, expected_name) in test_cases {
let endpoint: EndpointId = endpoint_str.parse().expect("Failed to parse endpoint");
assert_eq!(endpoint.namespace, expected_namespace);
assert_eq!(endpoint.component, expected_component);
assert_eq!(endpoint.name, expected_name);
let is_global = is_global_namespace(&endpoint.namespace);
if expected_namespace == GLOBAL_NAMESPACE {
assert!(
is_global,
"Namespace '{}' should be classified as global",
expected_namespace
);
} else {
assert!(
!is_global,
"Namespace '{}' should not be classified as global",
expected_namespace
);
}
}
}
#[test]
fn test_model_discovery_scoping_scenarios() {
let frontend_namespace = "vllm-agg";
let available_models = vec![
create_test_endpoint("vllm-agg", "backend", "generate"),
create_test_endpoint("vllm-agg", "backend", "generate"),
create_test_endpoint("sglang-prod", "backend", "generate"),
create_test_endpoint("dynamo", "backend", "generate"),
];
let visible_models: Vec<&EndpointId> = available_models
.iter()
.filter(|endpoint| {
let is_global = is_global_namespace(frontend_namespace);
is_global || endpoint.namespace == frontend_namespace
})
.collect();
assert_eq!(visible_models.len(), 2);
assert!(visible_models.iter().all(|m| m.namespace == "vllm-agg"));
let frontend_namespace = GLOBAL_NAMESPACE;
let visible_models_global: Vec<&EndpointId> = available_models
.iter()
.filter(|endpoint| {
let is_global = is_global_namespace(frontend_namespace);
is_global || endpoint.namespace == frontend_namespace
})
.collect();
assert_eq!(visible_models_global.len(), 4);
let frontend_namespace = "non-existent-namespace";
let visible_models_none: Vec<&EndpointId> = available_models
.iter()
.filter(|endpoint| {
let is_global = is_global_namespace(frontend_namespace);
is_global || endpoint.namespace == frontend_namespace
})
.collect();
assert_eq!(visible_models_none.len(), 0); }
#[test]
fn test_namespace_boundary_conditions() {
let test_models = vec![
create_test_endpoint("", "backend", "generate"), create_test_endpoint("dynamo", "backend", "generate"), create_test_endpoint("ns-with-special-chars_123", "backend", "generate"),
];
let target_namespace = "";
let is_global = is_global_namespace(target_namespace);
assert!(is_global);
let filtered_empty: Vec<&EndpointId> = test_models
.iter()
.filter(|model| is_global || model.namespace == target_namespace)
.collect();
assert_eq!(filtered_empty.len(), 3);
let target_namespace = "dynamo";
let is_global = is_global_namespace(target_namespace);
assert!(is_global);
let filtered_global: Vec<&EndpointId> = test_models
.iter()
.filter(|model| is_global || model.namespace == target_namespace)
.collect();
assert_eq!(filtered_global.len(), 3);
let target_namespace = "DYNAMO";
let is_global = is_global_namespace(target_namespace);
assert!(!is_global);
let filtered_uppercase: Vec<&EndpointId> = test_models
.iter()
.filter(|model| is_global || model.namespace == target_namespace)
.collect();
assert_eq!(filtered_uppercase.len(), 0); }