diff --git a/server-rs/crates/api-server/src/tripo3d/provider.rs b/server-rs/crates/api-server/src/tripo3d/provider.rs index 640f3cdc6..7f8d5d23a 100644 --- a/server-rs/crates/api-server/src/tripo3d/provider.rs +++ b/server-rs/crates/api-server/src/tripo3d/provider.rs @@ -118,6 +118,15 @@ pub(crate) fn tripo_settings(config: &AppConfig) -> Result TRIPO_MAX_RETRIES { + return Err(not_configured(&format!( + "TRIPO_RETRIES 不能超过 {TRIPO_MAX_RETRIES},当前为 {}。", + config.tripo_retries + ))); + } + // 取值原样交给构造器:零超时或越界重试是配置错误,由 `TripoSettings::validate` // 判失败并映射成 503,不再在这里静默钳制(启动期门禁已经先一步拒掉这种配置)。 TripoSettings::new( @@ -272,6 +281,20 @@ mod tests { assert_eq!(error.status_code(), StatusCode::SERVICE_UNAVAILABLE); } + /// 越过重试上限的配置必须在请求前就 503,不能落进 artifact_retries 拉长挂起时间。 + #[test] + fn request_path_rejects_out_of_range_retries() { + let mut config = AppConfig::default(); + config.tripo_base_url = "https://openapi.tripo3d.com/v3".to_string(); + config.tripo_api_key = Some("test-key".to_string()); + config.tripo_retries = TRIPO_MAX_RETRIES + 1; + let error = tripo_settings(&config).expect_err("越界重试必须拒绝"); + assert_eq!(error.status_code(), StatusCode::SERVICE_UNAVAILABLE); + + config.tripo_retries = TRIPO_MAX_RETRIES; + assert!(tripo_settings(&config).is_ok(), "上限本身必须放行"); + } + #[test] fn configured_settings_trim_trailing_slash() { let mut config = AppConfig::default();