Skip to content

Commit 58d085d

Browse files
committed
test(storage): ensure clap enforced having key and secret
1 parent 7e20c2a commit 58d085d

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

modules/storage/src/config.rs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,51 @@ pub struct S3Config {
128128
)]
129129
pub path_style: bool,
130130
}
131+
132+
#[cfg(test)]
133+
mod test {
134+
use super::*;
135+
use clap::Parser;
136+
use rstest::rstest;
137+
138+
#[derive(Parser)]
139+
struct Wrapper {
140+
#[command(flatten)]
141+
storage: StorageConfig,
142+
}
143+
144+
#[rstest]
145+
#[case::both_omitted(None, None, true)]
146+
#[case::access_key_only(Some("my-access-key"), None, false)]
147+
#[case::secret_key_only(None, Some("my-secret-key"), false)]
148+
#[case::both_provided(Some("my-access-key"), Some("my-secret-key"), true)]
149+
fn s3_credentials(
150+
#[case] access_key: Option<&str>,
151+
#[case] secret_key: Option<&str>,
152+
#[case] expect_ok: bool,
153+
) {
154+
let mut args = vec![
155+
"test",
156+
"--storage-strategy",
157+
"s3",
158+
"--s3-bucket",
159+
"b",
160+
"--s3-region",
161+
"r",
162+
];
163+
if let Some(ak) = access_key {
164+
args.extend(["--s3-access-key", ak]);
165+
}
166+
if let Some(sk) = secret_key {
167+
args.extend(["--s3-secret-key", sk]);
168+
}
169+
170+
let result = Wrapper::try_parse_from(&args);
171+
172+
assert_eq!(result.is_ok(), expect_ok);
173+
if let Ok(wrapper) = result {
174+
assert_eq!(wrapper.storage.s3_config.access_key.as_deref(), access_key);
175+
assert_eq!(wrapper.storage.s3_config.secret_key.as_deref(), secret_key);
176+
}
177+
}
178+
}

0 commit comments

Comments
 (0)