#!/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!"