diff --git a/nym-api/src/nym_nodes/handlers/v2.rs b/nym-api/src/nym_nodes/handlers/v2.rs index 75f60d1316..168c6ebae2 100644 --- a/nym-api/src/nym_nodes/handlers/v2.rs +++ b/nym-api/src/nym_nodes/handlers/v2.rs @@ -15,7 +15,7 @@ use tower_http::compression::CompressionLayer; pub(crate) fn routes() -> Router { Router::new() .route("/described", get(get_described_nodes)) - .route("/annotation/:node_id", get(get_node_annotation)) + .route("/annotation/{node_id}", get(get_node_annotation)) .layer(CompressionLayer::new()) } diff --git a/nym-api/src/nym_nodes/handlers/v3.rs b/nym-api/src/nym_nodes/handlers/v3.rs index 20dbfe9bdc..0e003c1df3 100644 --- a/nym-api/src/nym_nodes/handlers/v3.rs +++ b/nym-api/src/nym_nodes/handlers/v3.rs @@ -169,7 +169,7 @@ async fn known_network_monitor( fn stress_testing_routes() -> Router { Router::new() .route("/batch-submit", post(batch_submit_stress_testing_results)) - .route("/known-monitors/:identity_key", get(known_network_monitor)) + .route("/known-monitors/{identity_key}", get(known_network_monitor)) } /// Build the `/v3/nym-nodes` subtree hosting the v3 network-monitor endpoints. diff --git a/nym-api/src/support/http/router.rs b/nym-api/src/support/http/router.rs index 411aab7345..693cada180 100644 --- a/nym-api/src/support/http/router.rs +++ b/nym-api/src/support/http/router.rs @@ -167,3 +167,17 @@ impl ApiHttpServer { .await } } + +#[cfg(test)] +mod tests { + use super::*; + + /// Axum 0.8 panics inside `.route(...)` when given the legacy `:param` + /// path syntax. That panic never fires at `cargo check` time, so a regression + /// only surfaces when nym-api boots. This test exercises the whole route tree + /// to catch such regressions in CI. + #[test] + fn default_router_builds_without_panic() { + let _ = RouterBuilder::with_default_routes(false, None); + } +} diff --git a/nym-network-monitor-v3/nym-network-monitor-orchestrator-requests/src/lib.rs b/nym-network-monitor-v3/nym-network-monitor-orchestrator-requests/src/lib.rs index 34b32f9c01..3d688de98a 100644 --- a/nym-network-monitor-v3/nym-network-monitor-orchestrator-requests/src/lib.rs +++ b/nym-network-monitor-v3/nym-network-monitor-orchestrator-requests/src/lib.rs @@ -61,9 +61,9 @@ pub mod routes { pub mod results { use super::*; - pub const TESTRUN_BY_ID: &str = "/testrun/:id"; - pub const NYM_NODE_BY_NODE_ID: &str = "/nym-node/:node_id"; - pub const NYM_NODE_TESTRUNS: &str = "/nym-node/:node_id/testruns"; + pub const TESTRUN_BY_ID: &str = "/testrun/{id}"; + pub const NYM_NODE_BY_NODE_ID: &str = "/nym-node/{node_id}"; + pub const NYM_NODE_TESTRUNS: &str = "/nym-node/{node_id}/testruns"; pub const TESTRUNS_IN_PROGRESS: &str = "/testruns-in-progress"; pub const TESTRUNS: &str = "/testruns"; pub const NYM_NODES: &str = "/nym-nodes"; diff --git a/nym-network-monitor-v3/nym-network-monitor-orchestrator/src/http/api/v1/mod.rs b/nym-network-monitor-v3/nym-network-monitor-orchestrator/src/http/api/v1/mod.rs index 26b039adc3..cf948f6766 100644 --- a/nym-network-monitor-v3/nym-network-monitor-orchestrator/src/http/api/v1/mod.rs +++ b/nym-network-monitor-v3/nym-network-monitor-orchestrator/src/http/api/v1/mod.rs @@ -27,3 +27,20 @@ pub(crate) fn routes( .route_layer(metrics_and_results_auth), ) } + +#[cfg(test)] +mod tests { + use super::*; + use std::sync::Arc; + use zeroize::Zeroizing; + + /// Axum 0.8 panics inside `.route(...)` when given the legacy `:param` + /// path syntax. That panic never fires at `cargo check` time, so a regression + /// only surfaces when the orchestrator boots. This test exercises the whole + /// v1 route tree to catch such regressions in CI. + #[test] + fn v1_router_builds_without_panic() { + let dummy_auth = || AuthLayer::new(Arc::new(Zeroizing::new(String::new()))); + let _ = routes(dummy_auth(), dummy_auth()); + } +}