second first commit
This commit is contained in:
@@ -0,0 +1,238 @@
|
||||
#!/usr/bin/env bats
|
||||
# ACM integration tests
|
||||
|
||||
setup() {
|
||||
load 'test_helper/common-setup'
|
||||
CERT_ARN=""
|
||||
IMPORTED_CERT_ARN=""
|
||||
}
|
||||
|
||||
teardown() {
|
||||
if [ -n "$CERT_ARN" ]; then
|
||||
aws_cmd acm delete-certificate --certificate-arn "$CERT_ARN" >/dev/null 2>&1 || true
|
||||
fi
|
||||
if [ -n "$IMPORTED_CERT_ARN" ]; then
|
||||
aws_cmd acm delete-certificate --certificate-arn "$IMPORTED_CERT_ARN" >/dev/null 2>&1 || true
|
||||
fi
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# US1: Certificate Lifecycle
|
||||
# ============================================
|
||||
|
||||
@test "ACM: request certificate" {
|
||||
run aws_cmd acm request-certificate --domain-name "cli-test.example.com" --validation-method DNS
|
||||
assert_success
|
||||
CERT_ARN=$(json_get "$output" '.CertificateArn')
|
||||
[ -n "$CERT_ARN" ]
|
||||
[[ "$CERT_ARN" =~ ^arn:aws:acm: ]]
|
||||
}
|
||||
|
||||
@test "ACM: describe certificate" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-test.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm describe-certificate --certificate-arn "$CERT_ARN"
|
||||
assert_success
|
||||
domain=$(json_get "$output" '.Certificate.DomainName')
|
||||
status=$(json_get "$output" '.Certificate.Status')
|
||||
[ "$domain" = "cli-test.example.com" ]
|
||||
[ "$status" = "ISSUED" ]
|
||||
}
|
||||
|
||||
@test "ACM: get certificate" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-test.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm get-certificate --certificate-arn "$CERT_ARN"
|
||||
assert_success
|
||||
cert=$(json_get "$output" '.Certificate')
|
||||
[ -n "$cert" ]
|
||||
[[ "$cert" =~ "BEGIN CERTIFICATE" ]]
|
||||
}
|
||||
|
||||
@test "ACM: list certificates" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-test.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm list-certificates
|
||||
assert_success
|
||||
found=$(echo "$output" | jq --arg arn "$CERT_ARN" '.CertificateSummaryList | any(.CertificateArn == $arn)')
|
||||
[ "$found" = "true" ]
|
||||
}
|
||||
|
||||
@test "ACM: delete certificate" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-test.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm delete-certificate --certificate-arn "$CERT_ARN"
|
||||
assert_success
|
||||
CERT_ARN=""
|
||||
|
||||
# Verify it's gone
|
||||
run aws_cmd acm describe-certificate --certificate-arn "$(json_get "$out" '.CertificateArn')"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# US2: Import and Export
|
||||
# ============================================
|
||||
|
||||
@test "ACM: import certificate" {
|
||||
# Generate self-signed certificate with openssl
|
||||
local key_file cert_file
|
||||
key_file=$(mktemp)
|
||||
cert_file=$(mktemp)
|
||||
openssl req -x509 -newkey rsa:2048 -keyout "$key_file" -out "$cert_file" \
|
||||
-days 365 -nodes -subj "/CN=cli-import.example.com" 2>/dev/null
|
||||
|
||||
run aws_cmd acm import-certificate \
|
||||
--certificate "fileb://$cert_file" \
|
||||
--private-key "fileb://$key_file"
|
||||
rm -f "$key_file" "$cert_file"
|
||||
assert_success
|
||||
IMPORTED_CERT_ARN=$(json_get "$output" '.CertificateArn')
|
||||
[ -n "$IMPORTED_CERT_ARN" ]
|
||||
}
|
||||
|
||||
@test "ACM: get imported certificate" {
|
||||
local key_file cert_file
|
||||
key_file=$(mktemp)
|
||||
cert_file=$(mktemp)
|
||||
openssl req -x509 -newkey rsa:2048 -keyout "$key_file" -out "$cert_file" \
|
||||
-days 365 -nodes -subj "/CN=cli-import.example.com" 2>/dev/null
|
||||
|
||||
out=$(aws_cmd acm import-certificate \
|
||||
--certificate "fileb://$cert_file" \
|
||||
--private-key "fileb://$key_file")
|
||||
rm -f "$key_file" "$cert_file"
|
||||
IMPORTED_CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm get-certificate --certificate-arn "$IMPORTED_CERT_ARN"
|
||||
assert_success
|
||||
cert=$(json_get "$output" '.Certificate')
|
||||
[[ "$cert" =~ "BEGIN CERTIFICATE" ]]
|
||||
}
|
||||
|
||||
@test "ACM: export certificate" {
|
||||
local key_file cert_file
|
||||
key_file=$(mktemp)
|
||||
cert_file=$(mktemp)
|
||||
openssl req -x509 -newkey rsa:2048 -keyout "$key_file" -out "$cert_file" \
|
||||
-days 365 -nodes -subj "/CN=cli-export.example.com" 2>/dev/null
|
||||
|
||||
out=$(aws_cmd acm import-certificate \
|
||||
--certificate "fileb://$cert_file" \
|
||||
--private-key "fileb://$key_file")
|
||||
rm -f "$key_file" "$cert_file"
|
||||
IMPORTED_CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm export-certificate \
|
||||
--certificate-arn "$IMPORTED_CERT_ARN" \
|
||||
--passphrase "dGVzdC1wYXNzcGhyYXNl"
|
||||
assert_success
|
||||
cert=$(json_get "$output" '.Certificate')
|
||||
[ -n "$cert" ]
|
||||
pk=$(json_get "$output" '.PrivateKey')
|
||||
[ -n "$pk" ]
|
||||
}
|
||||
|
||||
@test "ACM: export requested certificate fails" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-noexport.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm export-certificate \
|
||||
--certificate-arn "$CERT_ARN" \
|
||||
--passphrase "dGVzdC1wYXNzcGhyYXNl"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# US3: Tagging
|
||||
# ============================================
|
||||
|
||||
@test "ACM: add and list tags" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-tag.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm add-tags-to-certificate \
|
||||
--certificate-arn "$CERT_ARN" \
|
||||
--tags Key=Env,Value=test Key=Project,Value=floci
|
||||
assert_success
|
||||
|
||||
run aws_cmd acm list-tags-for-certificate --certificate-arn "$CERT_ARN"
|
||||
assert_success
|
||||
env_tag=$(echo "$output" | jq '.Tags[] | select(.Key == "Env") | .Value' -r)
|
||||
[ "$env_tag" = "test" ]
|
||||
project_tag=$(echo "$output" | jq '.Tags[] | select(.Key == "Project") | .Value' -r)
|
||||
[ "$project_tag" = "floci" ]
|
||||
}
|
||||
|
||||
@test "ACM: remove tags" {
|
||||
out=$(aws_cmd acm request-certificate --domain-name "cli-untag.example.com" --validation-method DNS)
|
||||
CERT_ARN=$(json_get "$out" '.CertificateArn')
|
||||
|
||||
aws_cmd acm add-tags-to-certificate \
|
||||
--certificate-arn "$CERT_ARN" \
|
||||
--tags Key=Env,Value=test Key=Project,Value=floci
|
||||
|
||||
run aws_cmd acm remove-tags-from-certificate \
|
||||
--certificate-arn "$CERT_ARN" \
|
||||
--tags Key=Env
|
||||
assert_success
|
||||
|
||||
run aws_cmd acm list-tags-for-certificate --certificate-arn "$CERT_ARN"
|
||||
assert_success
|
||||
env_gone=$(echo "$output" | jq '.Tags[] | select(.Key == "Env")' 2>/dev/null)
|
||||
[ -z "$env_gone" ]
|
||||
project_tag=$(echo "$output" | jq '.Tags[] | select(.Key == "Project") | .Value' -r)
|
||||
[ "$project_tag" = "floci" ]
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# US4: Account Configuration
|
||||
# ============================================
|
||||
|
||||
@test "ACM: put and get account configuration" {
|
||||
run aws_cmd acm put-account-configuration \
|
||||
--expiry-events DaysBeforeExpiry=45 \
|
||||
--idempotency-token "cli-test-$(date +%s)"
|
||||
assert_success
|
||||
|
||||
run aws_cmd acm get-account-configuration
|
||||
assert_success
|
||||
days=$(json_get "$output" '.ExpiryEvents.DaysBeforeExpiry')
|
||||
[ "$days" = "45" ]
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# US5: Error Handling
|
||||
# ============================================
|
||||
|
||||
@test "ACM: describe non-existent certificate" {
|
||||
run aws_cmd acm describe-certificate \
|
||||
--certificate-arn "arn:aws:acm:us-east-1:000000000000:certificate/00000000-0000-0000-0000-000000000000"
|
||||
assert_failure
|
||||
}
|
||||
|
||||
@test "ACM: request certificate with SANs" {
|
||||
run aws_cmd acm request-certificate \
|
||||
--domain-name "cli-san.example.com" \
|
||||
--validation-method DNS \
|
||||
--subject-alternative-names "alt1.example.com" "alt2.example.com"
|
||||
assert_success
|
||||
CERT_ARN=$(json_get "$output" '.CertificateArn')
|
||||
|
||||
run aws_cmd acm describe-certificate --certificate-arn "$CERT_ARN"
|
||||
assert_success
|
||||
sans=$(json_get "$output" '.Certificate.SubjectAlternativeNames')
|
||||
[[ "$sans" =~ "alt1.example.com" ]]
|
||||
[[ "$sans" =~ "alt2.example.com" ]]
|
||||
}
|
||||
|
||||
@test "ACM: import invalid PEM" {
|
||||
run aws_cmd acm import-certificate \
|
||||
--certificate "not-valid-pem-data" \
|
||||
--private-key "also-not-valid-pem"
|
||||
assert_failure
|
||||
}
|
||||
Reference in New Issue
Block a user