#![cfg(e2e_test)]
mod common;
use common::{REGION, TestHelper, generate_bucket_name, run, s7cmd_cmd};
const PROFILE: &str = "s7cmd-e2e-test";
#[tokio::test]
async fn request_payment_round_trip() {
let helper = TestHelper::new().await;
let bucket = generate_bucket_name();
helper.create_bucket(&bucket, REGION).await;
let bucket_arg = format!("s3://{bucket}");
let (code, stdout, stderr) = run(s7cmd_cmd().args([
"get-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
]));
assert_eq!(
code,
Some(0),
"get-bucket-request-payment should succeed; stderr: {stderr}"
);
let json: serde_json::Value =
serde_json::from_str(&stdout).expect("get-bucket-request-payment stdout must be JSON");
assert_eq!(
json.get("Payer").and_then(|v| v.as_str()),
Some("BucketOwner"),
"expected default Payer=BucketOwner; got: {json}"
);
let (code, stdout, stderr) = run(s7cmd_cmd().args([
"put-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
"--requester",
]));
assert_eq!(
code,
Some(0),
"put --requester should succeed; stderr: {stderr}"
);
assert_eq!(
stdout.trim(),
"",
"put-bucket-request-payment must produce no stdout"
);
let (code, stdout, _stderr) = run(s7cmd_cmd().args([
"get-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
]));
assert_eq!(code, Some(0));
let json: serde_json::Value = serde_json::from_str(&stdout).unwrap();
assert_eq!(
json.get("Payer").and_then(|v| v.as_str()),
Some("Requester")
);
let (code, _stdout, _stderr) = run(s7cmd_cmd().args([
"put-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
"--bucket-owner",
]));
assert_eq!(code, Some(0));
let (code, stdout, _stderr) = run(s7cmd_cmd().args([
"get-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
]));
assert_eq!(code, Some(0));
let json: serde_json::Value = serde_json::from_str(&stdout).unwrap();
assert_eq!(
json.get("Payer").and_then(|v| v.as_str()),
Some("BucketOwner")
);
helper.delete_bucket_with_cascade(&bucket).await;
}
#[tokio::test]
async fn put_request_payment_on_missing_bucket_exits_1() {
let bucket = generate_bucket_name();
let bucket_arg = format!("s3://{bucket}");
let (code, _stdout, _stderr) = run(s7cmd_cmd().args([
"put-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
"--requester",
]));
assert_eq!(code, Some(1));
}
#[tokio::test]
async fn get_request_payment_on_missing_bucket_exits_4() {
let bucket = generate_bucket_name();
let bucket_arg = format!("s3://{bucket}");
let (code, _stdout, _stderr) = run(s7cmd_cmd().args([
"get-bucket-request-payment",
"--target-profile",
PROFILE,
"--target-region",
REGION,
&bucket_arg,
]));
assert_eq!(code, Some(4), "missing bucket must exit 4 (NoSuchBucket)");
}