Files
rustfs/scripts/test_entrypoint_credentials.sh
T
2026-07-05 10:31:28 +08:00

78 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT
ENTRYPOINT="$ROOT_DIR/entrypoint.sh"
DOCKERFILE_GLIBC="$ROOT_DIR/Dockerfile.glibc"
if grep -Eq 'RUSTFS_(ACCESS|SECRET)_KEY=' "$DOCKERFILE_GLIBC"; then
echo "Dockerfile.glibc must not bake root credentials into image ENV" >&2
exit 1
fi
run_expect_failure() {
label="$1"
expected="$2"
shift 2
log_file="$TMP_DIR/$label.log"
if env -i PATH="$PATH" RUSTFS_VOLUMES="$TMP_DIR/data" RUSTFS_OBS_LOG_DIRECTORY= "$@" sh "$ENTRYPOINT" rustfs >"$log_file" 2>&1; then
echo "Expected $label to fail" >&2
exit 1
fi
if ! grep -q "$expected" "$log_file"; then
echo "Expected $label output to contain: $expected" >&2
cat "$log_file" >&2
exit 1
fi
}
missing_log="$TMP_DIR/missing.log"
if env -i PATH="$PATH" RUSTFS_VOLUMES="$TMP_DIR/data" RUSTFS_OBS_LOG_DIRECTORY= sh "$ENTRYPOINT" >"$missing_log" 2>&1; then
echo "Expected missing credentials to fail" >&2
exit 1
fi
grep -q "RUSTFS_ACCESS_KEY or RUSTFS_ACCESS_KEY_FILE must be set explicitly" "$missing_log"
run_expect_failure \
"missing-secret" \
"RUSTFS_SECRET_KEY or RUSTFS_SECRET_KEY_FILE must be set explicitly" \
RUSTFS_ACCESS_KEY=custom-access
run_expect_failure \
"default-access-env" \
"RUSTFS_ACCESS_KEY must not use the default rustfsadmin credential" \
RUSTFS_ACCESS_KEY=rustfsadmin \
RUSTFS_SECRET_KEY=custom-secret
default_access_cli_log="$TMP_DIR/default-access-cli.log"
if env -i PATH="$PATH" RUSTFS_VOLUMES="$TMP_DIR/data" RUSTFS_OBS_LOG_DIRECTORY= RUSTFS_SECRET_KEY=custom-secret sh "$ENTRYPOINT" rustfs --access-key rustfsadmin >"$default_access_cli_log" 2>&1; then
echo "Expected default-access-cli to fail" >&2
exit 1
fi
grep -q "RUSTFS_ACCESS_KEY must not use the default rustfsadmin credential" "$default_access_cli_log"
default_access_file="$TMP_DIR/default-access-key"
printf 'rustfsadmin\n' >"$default_access_file"
run_expect_failure \
"default-access-file" \
"RUSTFS_ACCESS_KEY_FILE must not contain the default rustfsadmin credential" \
RUSTFS_ACCESS_KEY_FILE="$default_access_file" \
RUSTFS_SECRET_KEY=custom-secret
cargo_log="$TMP_DIR/cargo.log"
if ! env -i PATH="$PATH" RUSTFS_VOLUMES="$TMP_DIR/data" RUSTFS_OBS_LOG_DIRECTORY= sh "$ENTRYPOINT" cargo --version >"$cargo_log" 2>&1; then
echo "Expected cargo passthrough to skip server credential checks" >&2
cat "$cargo_log" >&2
exit 1
fi
if grep -q "must be set explicitly" "$cargo_log"; then
echo "Cargo passthrough must not require server credentials" >&2
cat "$cargo_log" >&2
exit 1
fi