photoncloud-monorepo/testing/run-s3-test.sh

84 lines
No EOL
2.5 KiB
Bash

#!/usr/bin/env bash
set -e
# Configuration
CHAINFIRE_PORT=10000
IAM_PORT=10010
LIGHTNINGSTOR_PORT=10020
S3_PORT=10021
DATA_DIR=$(mktemp -d)
echo "Building services..."
(cd chainfire && cargo build -p chainfire-server)
(cd iam && cargo build -p iam-server)
(cd lightningstor && cargo build -p lightningstor-server)
CHAINFIRE_BIN="./chainfire/target/debug/chainfire"
IAM_BIN="./iam/target/debug/iam-server"
LIGHTNINGSTOR_BIN="./lightningstor/target/debug/lightningstor-server"
echo "Starting Chainfire..."
$CHAINFIRE_BIN \
--node-id 1 \
--data-dir "$DATA_DIR/chainfire" \
--api-addr "127.0.0.1:$CHAINFIRE_PORT" \
--raft-addr "127.0.0.1:$((CHAINFIRE_PORT + 1))" \
--gossip-addr "127.0.0.1:$((CHAINFIRE_PORT + 2))" \
--initial-cluster "1=127.0.0.1:$((CHAINFIRE_PORT + 1))" \
--metrics-port $((CHAINFIRE_PORT + 3)) &
CHAINFIRE_PID=$!
echo "Starting IAM..."
export IAM_CRED_MASTER_KEY=$(openssl rand -base64 32)
$IAM_BIN \
--addr "127.0.0.1:$IAM_PORT" \
--metrics-port $((IAM_PORT + 1)) &
IAM_PID=$!
echo "Starting LightningStor..."
export DEFAULT_ORG_ID=org1
export DEFAULT_PROJECT_ID=proj1
$LIGHTNINGSTOR_BIN \
--grpc-addr "127.0.0.1:$LIGHTNINGSTOR_PORT" \
--s3-addr "127.0.0.1:$S3_PORT" \
--chainfire-endpoint "http://127.0.0.1:$CHAINFIRE_PORT" \
--data-dir "$DATA_DIR/lightningstor" \
--metrics-port $((LIGHTNINGSTOR_PORT + 2)) \
--in-memory-metadata &
LIGHTNINGSTOR_PID=$!
# Cleanup function
cleanup() {
echo "Cleaning up..."
kill $CHAINFIRE_PID $IAM_PID $LIGHTNINGSTOR_PID 2>/dev/null || true
rm -rf "$DATA_DIR"
}
trap cleanup EXIT
# Wait for services to start
echo "Waiting for services to start..."
sleep 5
# Test S3 functionality
echo "Running S3 tests..."
# Use credentials from environment or default dummy values
export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-AKIAIOSFODNN7EXAMPLE}
export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY}
export AWS_DEFAULT_REGION=us-east-1
ENDPOINT_URL="http://localhost:$S3_PORT"
echo "1. Create bucket"
aws --endpoint-url "$ENDPOINT_URL" s3 mb s3://test-bucket
echo "2. Upload object"
echo "Hello, LightningStor!" > "$DATA_DIR/testfile.txt"
aws --endpoint-url "$ENDPOINT_URL" s3 cp "$DATA_DIR/testfile.txt" s3://test-bucket/hello.txt
echo "3. Download object"
aws --endpoint-url "$ENDPOINT_URL" s3 cp s3://test-bucket/hello.txt "$DATA_DIR/downloaded.txt"
echo "4. Verify content"
diff "$DATA_DIR/testfile.txt" "$DATA_DIR/downloaded.txt"
echo "S3 tests passed successfully!"