[router] add cargo clippy in CI and fix-up linting errors (#9242)
This commit is contained in:
@@ -718,7 +718,7 @@ mod worker_management_tests {
|
||||
// Add the worker
|
||||
let req = Request::builder()
|
||||
.method("POST")
|
||||
.uri(&format!("/add_worker?url={}", url))
|
||||
.uri(format!("/add_worker?url={}", url))
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
|
||||
@@ -776,7 +776,7 @@ mod worker_management_tests {
|
||||
// Remove the worker
|
||||
let req = Request::builder()
|
||||
.method("POST")
|
||||
.uri(&format!("/remove_worker?url={}", worker_url))
|
||||
.uri(format!("/remove_worker?url={}", worker_url))
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
|
||||
@@ -856,7 +856,7 @@ mod worker_management_tests {
|
||||
// Add worker first time
|
||||
let req = Request::builder()
|
||||
.method("POST")
|
||||
.uri(&format!("/add_worker?url={}", url))
|
||||
.uri(format!("/add_worker?url={}", url))
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
let resp = app.clone().oneshot(req).await.unwrap();
|
||||
@@ -867,7 +867,7 @@ mod worker_management_tests {
|
||||
// Try to add same worker again
|
||||
let req = Request::builder()
|
||||
.method("POST")
|
||||
.uri(&format!("/add_worker?url={}", url))
|
||||
.uri(format!("/add_worker?url={}", url))
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
let resp = app.oneshot(req).await.unwrap();
|
||||
@@ -896,7 +896,7 @@ mod worker_management_tests {
|
||||
// Try to add unhealthy worker
|
||||
let req = Request::builder()
|
||||
.method("POST")
|
||||
.uri(&format!("/add_worker?url={}", url))
|
||||
.uri(format!("/add_worker?url={}", url))
|
||||
.body(Body::empty())
|
||||
.unwrap();
|
||||
let resp = app.oneshot(req).await.unwrap();
|
||||
@@ -1412,7 +1412,7 @@ mod pd_mode_tests {
|
||||
// Extract port from prefill URL
|
||||
let prefill_port = prefill_url
|
||||
.split(':')
|
||||
.last()
|
||||
.next_back()
|
||||
.and_then(|p| p.trim_end_matches('/').parse::<u16>().ok())
|
||||
.unwrap_or(9000);
|
||||
|
||||
|
||||
@@ -116,6 +116,7 @@ fn default_completion_request() -> CompletionRequest {
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn create_test_worker() -> BasicWorker {
|
||||
BasicWorker::new(
|
||||
"http://test-server:8000".to_string(),
|
||||
|
||||
@@ -8,6 +8,7 @@ use sglang_router_rs::{
|
||||
use std::sync::Arc;
|
||||
|
||||
/// Create a test Axum application using the actual server's build_app function
|
||||
#[allow(dead_code)]
|
||||
pub fn create_test_app(
|
||||
router: Arc<dyn RouterTrait>,
|
||||
client: Client,
|
||||
|
||||
@@ -99,7 +99,7 @@ impl TestContext {
|
||||
let worker_url = &worker_urls[0];
|
||||
|
||||
let response = client
|
||||
.post(&format!("{}{}", worker_url, endpoint))
|
||||
.post(format!("{}{}", worker_url, endpoint))
|
||||
.json(&body)
|
||||
.send()
|
||||
.await
|
||||
|
||||
@@ -100,7 +100,7 @@ impl TestContext {
|
||||
let worker_url = &worker_urls[0];
|
||||
|
||||
let response = client
|
||||
.post(&format!("{}{}", worker_url, endpoint))
|
||||
.post(format!("{}{}", worker_url, endpoint))
|
||||
.json(&body)
|
||||
.send()
|
||||
.await
|
||||
@@ -128,8 +128,8 @@ impl TestContext {
|
||||
if let Ok(bytes) = chunk {
|
||||
let text = String::from_utf8_lossy(&bytes);
|
||||
for line in text.lines() {
|
||||
if line.starts_with("data: ") {
|
||||
events.push(line[6..].to_string());
|
||||
if let Some(stripped) = line.strip_prefix("data: ") {
|
||||
events.push(stripped.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#[cfg(test)]
|
||||
mod test_pd_routing {
|
||||
use rand::Rng;
|
||||
use serde_json::json;
|
||||
use sglang_router_rs::config::{
|
||||
CircuitBreakerConfig, PolicyConfig, RetryConfig, RouterConfig, RoutingMode,
|
||||
@@ -421,41 +420,6 @@ mod test_pd_routing {
|
||||
assert_eq!(received_loads.get("http://decode2:8080"), Some(&15));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_power_of_two_load_selection() {
|
||||
// Test the power-of-two selection logic with different load scenarios
|
||||
|
||||
// Scenario 1: Clear winner for both prefill and decode
|
||||
let _loads = vec![
|
||||
("prefill1", 100),
|
||||
("prefill2", 10), // Should be selected
|
||||
("decode1", 50),
|
||||
("decode2", 5), // Should be selected
|
||||
];
|
||||
|
||||
// In actual implementation, the lower load should be selected
|
||||
assert!(10 < 100);
|
||||
assert!(5 < 50);
|
||||
|
||||
// Scenario 2: Equal loads (should select first)
|
||||
let _equal_loads = vec![
|
||||
("prefill1", 20),
|
||||
("prefill2", 20), // Either could be selected
|
||||
("decode1", 30),
|
||||
("decode2", 30), // Either could be selected
|
||||
];
|
||||
|
||||
// When loads are equal, <= comparison means first is selected
|
||||
assert!(20 <= 20);
|
||||
assert!(30 <= 30);
|
||||
|
||||
// Scenario 3: Missing load data (should default to usize::MAX)
|
||||
// This tests the unwrap_or(usize::MAX) behavior
|
||||
let missing_load = usize::MAX;
|
||||
assert!(10 < missing_load);
|
||||
assert!(missing_load > 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_load_monitoring_configuration() {
|
||||
// Test that load monitoring is only enabled for PowerOfTwo policy
|
||||
@@ -605,12 +569,10 @@ mod test_pd_routing {
|
||||
#[test]
|
||||
fn test_streaming_response_parsing() {
|
||||
// Test SSE format parsing from streaming responses
|
||||
let sse_chunks = vec![
|
||||
"data: {\"text\":\"Hello\",\"meta_info\":{\"completion_tokens\":1,\"finish_reason\":null}}",
|
||||
let sse_chunks = ["data: {\"text\":\"Hello\",\"meta_info\":{\"completion_tokens\":1,\"finish_reason\":null}}",
|
||||
"data: {\"text\":\" world\",\"meta_info\":{\"completion_tokens\":2,\"finish_reason\":null}}",
|
||||
"data: {\"text\":\"!\",\"meta_info\":{\"completion_tokens\":3,\"finish_reason\":{\"type\":\"length\"}}}",
|
||||
"data: [DONE]",
|
||||
];
|
||||
"data: [DONE]"];
|
||||
|
||||
for chunk in &sse_chunks[..3] {
|
||||
assert!(chunk.starts_with("data: "));
|
||||
@@ -848,7 +810,7 @@ mod test_pd_routing {
|
||||
large_batch_request["bootstrap_host"] = json!(vec![hostname; batch_size]);
|
||||
large_batch_request["bootstrap_port"] = json!(vec![bootstrap_port; batch_size]);
|
||||
large_batch_request["bootstrap_room"] = json!((0..batch_size)
|
||||
.map(|_| rand::thread_rng().gen::<u64>())
|
||||
.map(|_| rand::random::<u64>())
|
||||
.collect::<Vec<_>>());
|
||||
|
||||
let elapsed = start.elapsed();
|
||||
|
||||
Reference in New Issue
Block a user