Files
shared-SQS/hardcore_test.sh
T

123 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
# hardcore_test.sh — public compatibility test for shared-SQS
set -euo pipefail
BASE_URL="${BASE_URL:-https://qu.kube5s.ru}"
AWS_ACCESS_KEY_ID="${AWS_ACCESS_KEY_ID:-}"
AWS_SECRET_ACCESS_KEY="${AWS_SECRET_ACCESS_KEY:-}"
AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}"
ENDPOINT="--endpoint-url ${BASE_URL}"
TS=$(date +%s)
QUEUE_NAME="hardcore-${TS}"
PASS=0
FAIL=0
require_env() {
local name="$1"
if [[ -z "${!name:-}" ]]; then
echo "Missing required env: $name"
exit 2
fi
}
ok() {
echo " [PASS] $1"
PASS=$((PASS + 1))
}
fail() {
echo " [FAIL] $1"
FAIL=$((FAIL + 1))
}
check() {
local label="$1"
local body="$2"
local pattern="$3"
if echo "$body" | grep -qE "$pattern"; then
ok "$label"
else
fail "$label :: $(echo "$body" | head -3 | tr '\n' ' ')"
fi
}
require_env AWS_ACCESS_KEY_ID
require_env AWS_SECRET_ACCESS_KEY
export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION
echo "═══════════════════════════════════════════"
echo " shared-SQS Hardcore Test"
echo " Endpoint: $BASE_URL"
echo " Queue: $QUEUE_NAME"
echo "═══════════════════════════════════════════"
R=$(aws sqs create-queue --queue-name "$QUEUE_NAME" $ENDPOINT 2>&1)
check "CreateQueue" "$R" "QueueUrl"
QURL=$(echo "$R" | python3 -c 'import sys,json; print(json.load(sys.stdin)["QueueUrl"])' 2>/dev/null || true)
R=$(aws sqs list-queues $ENDPOINT 2>&1)
check "ListQueues" "$R" "$QUEUE_NAME"
R=$(aws sqs get-queue-url --queue-name "$QUEUE_NAME" $ENDPOINT 2>&1)
check "GetQueueUrl" "$R" "QueueUrl"
R=$(aws sqs get-queue-attributes --queue-url "$QURL" --attribute-names All $ENDPOINT 2>&1)
check "GetQueueAttributes" "$R" "Attributes|VisibilityTimeout"
aws sqs set-queue-attributes --queue-url "$QURL" --attributes '{"VisibilityTimeout":"45"}' $ENDPOINT >/dev/null 2>&1 && ok "SetQueueAttributes" || fail "SetQueueAttributes"
aws sqs tag-queue --queue-url "$QURL" --tags env=test,team=qa $ENDPOINT >/dev/null 2>&1 && ok "TagQueue" || fail "TagQueue"
R=$(aws sqs list-queue-tags --queue-url "$QURL" $ENDPOINT 2>&1)
check "ListQueueTags" "$R" "env|team|test|qa"
aws sqs untag-queue --queue-url "$QURL" --tag-keys env $ENDPOINT >/dev/null 2>&1 && ok "UntagQueue" || fail "UntagQueue"
R=$(aws sqs send-message --queue-url "$QURL" --message-body "single-$TS" $ENDPOINT 2>&1)
check "SendMessage" "$R" "MessageId"
R=$(aws sqs receive-message --queue-url "$QURL" --visibility-timeout 30 $ENDPOINT 2>&1)
check "ReceiveMessage" "$R" "single-$TS"
RH=$(echo "$R" | python3 -c 'import sys,json; msgs=json.load(sys.stdin).get("Messages", []); print(msgs[0]["ReceiptHandle"] if msgs else "")' 2>/dev/null || true)
if [[ -n "$RH" ]]; then
aws sqs change-message-visibility --queue-url "$QURL" --receipt-handle "$RH" --visibility-timeout 60 $ENDPOINT >/dev/null 2>&1 && ok "ChangeMessageVisibility" || fail "ChangeMessageVisibility"
aws sqs delete-message --queue-url "$QURL" --receipt-handle "$RH" $ENDPOINT >/dev/null 2>&1 && ok "DeleteMessage" || fail "DeleteMessage"
else
fail "ReceiptHandle for single message"
fi
BATCH='[{"Id":"1","MessageBody":"b1"},{"Id":"2","MessageBody":"b2"},{"Id":"3","MessageBody":"b3"}]'
R=$(aws sqs send-message-batch --queue-url "$QURL" --entries "$BATCH" $ENDPOINT 2>&1)
check "SendMessageBatch" "$R" "Successful"
R=$(aws sqs receive-message --queue-url "$QURL" --max-number-of-messages 3 $ENDPOINT 2>&1)
check "ReceiveMessage batch" "$R" "Messages|ReceiptHandle"
RECEIPTS=$(echo "$R" | python3 -c 'import sys,json; msgs=json.load(sys.stdin).get("Messages", []); print("\n".join(m["ReceiptHandle"] for m in msgs))' 2>/dev/null || true)
if [[ -n "$RECEIPTS" ]]; then
CMV_ENTRIES=$(echo "$RECEIPTS" | python3 -c 'import sys,json; entries=[]
for i,rh in enumerate(sys.stdin.read().strip().split("\n"), 1):
if rh:
entries.append({"Id": f"c{i}", "ReceiptHandle": rh, "VisibilityTimeout": 60})
print(json.dumps(entries))' 2>/dev/null || echo '[]')
R=$(aws sqs change-message-visibility-batch --queue-url "$QURL" --entries "$CMV_ENTRIES" $ENDPOINT 2>&1)
check "ChangeMessageVisibilityBatch" "$R" "Successful"
DEL_ENTRIES=$(echo "$RECEIPTS" | python3 -c 'import sys,json; entries=[]
for i,rh in enumerate(sys.stdin.read().strip().split("\n"), 1):
if rh:
entries.append({"Id": f"d{i}", "ReceiptHandle": rh})
print(json.dumps(entries))' 2>/dev/null || echo '[]')
R=$(aws sqs delete-message-batch --queue-url "$QURL" --entries "$DEL_ENTRIES" $ENDPOINT 2>&1)
check "DeleteMessageBatch" "$R" "Successful"
else
fail "Batch receipts"
fi
aws sqs send-message --queue-url "$QURL" --message-body "purge-me" $ENDPOINT >/dev/null 2>&1 || true
aws sqs purge-queue --queue-url "$QURL" $ENDPOINT >/dev/null 2>&1 && ok "PurgeQueue" || fail "PurgeQueue"
aws sqs delete-queue --queue-url "$QURL" $ENDPOINT >/dev/null 2>&1 && ok "DeleteQueue" || fail "DeleteQueue"
echo "═══════════════════════════════════════════"
echo " RESULT: PASS=$PASS FAIL=$FAIL"
echo "═══════════════════════════════════════════"
[[ $FAIL -eq 0 ]]