From ce400083483e839ee093ba25fbb0e4c86662c251 Mon Sep 17 00:00:00 2001 From: overtrue Date: Tue, 12 May 2026 21:08:52 +0800 Subject: [PATCH] test(alias): cover missing RC_HOST credentials --- crates/cli/tests/env_alias.rs | 38 +++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/crates/cli/tests/env_alias.rs b/crates/cli/tests/env_alias.rs index 013bd28..26375b1 100644 --- a/crates/cli/tests/env_alias.rs +++ b/crates/cli/tests/env_alias.rs @@ -225,6 +225,44 @@ fn alias_list_rejects_empty_rc_host_alias_name_as_usage_error() { assert_eq!(payload["details"]["type"], "usage_error"); } +#[test] +fn alias_list_rejects_rc_host_missing_secret_key_as_usage_error() { + let config_dir = tempfile::tempdir().expect("create config dir"); + + let output = rc_command() + .args(["alias", "list", "--json"]) + .env("RC_CONFIG_DIR", config_dir.path()) + .env("RC_HOST_badalias", "https://ACCESS_KEY@rustfs.local:9000") + .output() + .expect("run rc command"); + + assert_eq!( + output.status.code(), + Some(2), + "stdout: {}\nstderr: {}", + String::from_utf8_lossy(&output.stdout), + String::from_utf8_lossy(&output.stderr) + ); + assert!( + output.stdout.is_empty(), + "usage JSON errors should be emitted on stderr" + ); + + let stderr = String::from_utf8(output.stderr).expect("stderr should be UTF-8"); + assert!(!stderr.contains("ACCESS_KEY")); + + let payload: serde_json::Value = serde_json::from_str(&stderr).expect("JSON error output"); + assert!( + payload["error"] + .as_str() + .expect("error message") + .contains("must include access key and secret key credentials"), + "payload: {payload}" + ); + assert_eq!(payload["code"], 2); + assert_eq!(payload["details"]["type"], "usage_error"); +} + #[test] fn alias_list_rejects_invalid_rc_host_scheme_without_credentials() { let config_dir = tempfile::tempdir().expect("create config dir");