f7a720204a
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
76 lines
2.3 KiB
Rust
76 lines
2.3 KiB
Rust
//! Provider health-check route auth and validation tests.
|
|
|
|
mod common;
|
|
|
|
use axum::body::Body;
|
|
use axum::http::{Request, StatusCode};
|
|
use serde_json::json;
|
|
use tower::ServiceExt;
|
|
|
|
use common::{body_json, build_app, json_with_token, setup_and_login};
|
|
|
|
#[tokio::test]
|
|
async fn provider_health_check_unauthenticated_is_rejected() {
|
|
let (app, _services) = build_app().await;
|
|
|
|
let req = Request::builder()
|
|
.method("POST")
|
|
.uri("/api/agents/provider-health-check")
|
|
.header("content-type", "application/json")
|
|
.body(Body::from(
|
|
serde_json::to_vec(&json!({"provider_id": "p1", "model": "gpt-4o"})).unwrap(),
|
|
))
|
|
.unwrap();
|
|
let resp = app.oneshot(req).await.unwrap();
|
|
|
|
assert!(
|
|
resp.status() == StatusCode::UNAUTHORIZED || resp.status() == StatusCode::FORBIDDEN,
|
|
"expected auth rejection, got {}",
|
|
resp.status()
|
|
);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn provider_health_check_requires_csrf_for_post() {
|
|
let (mut app, services) = build_app().await;
|
|
let (token, _csrf) = setup_and_login(&mut app, &services, "admin", "StrongP@ss1").await;
|
|
|
|
let req = Request::builder()
|
|
.method("POST")
|
|
.uri("/api/agents/provider-health-check")
|
|
.header("content-type", "application/json")
|
|
.header("authorization", format!("Bearer {token}"))
|
|
.body(Body::from(
|
|
serde_json::to_vec(&json!({"provider_id": "p1", "model": "gpt-4o"})).unwrap(),
|
|
))
|
|
.unwrap();
|
|
let resp = app.oneshot(req).await.unwrap();
|
|
|
|
assert_eq!(resp.status(), StatusCode::FORBIDDEN);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn provider_health_check_validates_required_fields() {
|
|
let (mut app, services) = build_app().await;
|
|
let (token, csrf) = setup_and_login(&mut app, &services, "admin", "StrongP@ss1").await;
|
|
|
|
let req = json_with_token(
|
|
"POST",
|
|
"/api/agents/provider-health-check",
|
|
json!({"provider_id": "", "model": "gpt-4o"}),
|
|
&token,
|
|
&csrf,
|
|
);
|
|
let resp = app.oneshot(req).await.unwrap();
|
|
|
|
assert_eq!(resp.status(), StatusCode::BAD_REQUEST);
|
|
let json = body_json(resp).await;
|
|
assert_eq!(json["code"], "BAD_REQUEST");
|
|
assert!(
|
|
json["error"]
|
|
.as_str()
|
|
.is_some_and(|message| message.contains("provider_id is required")),
|
|
"expected provider_id validation error, got {json}"
|
|
);
|
|
}
|