123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #!/usr/bin/env bash
- set -e
- # Configuration
- MINT_PORT=8085
- WALLET_PORT=4448
- MINT_CONTAINER_NAME="nutshell-mint"
- WALLET_CONTAINER_NAME="nutshell-wallet"
- # Use host.docker.internal for the mint URL so containers can access it
- MINT_URL="http://0.0.0.0:${MINT_PORT}"
- WALLET_URL="http://localhost:${WALLET_PORT}"
- CDK_MINTD_PID=""
- # Function to clean up resources
- cleanup() {
- echo "Cleaning up resources..."
-
- if docker ps -a | grep -q ${WALLET_CONTAINER_NAME}; then
- echo "Stopping and removing Docker container '${WALLET_CONTAINER_NAME}'..."
- docker stop ${WALLET_CONTAINER_NAME} >/dev/null 2>&1
- docker rm ${WALLET_CONTAINER_NAME} >/dev/null 2>&1
- fi
-
- if [ -n "$CDK_MINTD_PID" ]; then
- echo "Stopping mintd process (PID: $CDK_MINTD_PID)..."
- kill -TERM $CDK_MINTD_PID >/dev/null 2>&1 || true
- fi
-
- # Unset variables
- unset MINT_URL WALLET_URL MINT_PORT WALLET_PORT MINT_CONTAINER_NAME WALLET_CONTAINER_NAME
- unset CDK_MINTD_PID CDK_MINTD_URL CDK_MINTD_WORK_DIR CDK_MINTD_LISTEN_HOST CDK_MINTD_LISTEN_PORT
- unset CDK_MINTD_LN_BACKEND CDK_MINTD_FAKE_WALLET_SUPPORTED_UNITS CDK_MINTD_MNEMONIC
- unset CDK_MINTD_FAKE_WALLET_FEE_PERCENT CDK_MINTD_FAKE_WALLET_RESERVE_FEE_MIN CDK_MINTD_DATABASE
- unset TEST_STATUS
- unset CDK_MINTD_INPUT_FEE_PPK
- echo "Cleanup complete."
- }
- # Set up trap to call cleanup function on script exit
- trap cleanup EXIT INT TERM
- # Create a temporary directory for mintd
- CDK_ITESTS=$(mktemp -d)
- echo "Created temporary directory for mintd: $CDK_ITESTS"
- export CDK_MINTD_URL="$MINT_URL"
- export CDK_MINTD_WORK_DIR="$CDK_ITESTS"
- export CDK_MINTD_LISTEN_HOST="127.0.0.1"
- export CDK_MINTD_LISTEN_PORT="8085"
- export CDK_MINTD_LN_BACKEND="fakewallet"
- export CDK_MINTD_FAKE_WALLET_SUPPORTED_UNITS="sat,usd"
- export CDK_MINTD_MNEMONIC="eye survey guilt napkin crystal cup whisper salt luggage manage unveil loyal"
- export CDK_MINTD_FAKE_WALLET_FEE_PERCENT="0"
- export CDK_MINTD_FAKE_WALLET_RESERVE_FEE_MIN="1"
- export CDK_MINTD_DATABASE="redb"
- export CDK_MINTD_INPUT_FEE_PPK="100"
- echo "Starting fake mintd"
- cargo run --bin cdk-mintd --features "redb" &
- CDK_MINTD_PID=$!
- # Wait for the mint to be ready
- echo "Waiting for mintd to start..."
- TIMEOUT=300
- START_TIME=$(date +%s)
- # Try different URLs since the endpoint might vary
- URLS=("http://localhost:${MINT_PORT}/v1/info" "http://127.0.0.1:${MINT_PORT}/v1/info" "http://0.0.0.0:${MINT_PORT}/v1/info")
- # Loop until one of the endpoints returns a 200 OK status or timeout is reached
- while true; do
- # Get the current time
- CURRENT_TIME=$(date +%s)
-
- # Calculate the elapsed time
- ELAPSED_TIME=$((CURRENT_TIME - START_TIME))
- # Check if the elapsed time exceeds the timeout
- if [ $ELAPSED_TIME -ge $TIMEOUT ]; then
- echo "Timeout of $TIMEOUT seconds reached. Exiting..."
- exit 1
- fi
- # Try each URL
- for URL in "${URLS[@]}"; do
- # Make a request to the endpoint and capture the HTTP status code
- HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" "$URL" || echo "000")
-
- # Check if the HTTP status is 200 OK
- if [ "$HTTP_STATUS" -eq 200 ]; then
- echo "Received 200 OK from $URL"
- MINT_URL=$(echo "$URL" | sed 's|/v1/info||')
- echo "Setting MINT_URL to $MINT_URL"
- export MINT_URL
- break 2 # Break out of both loops
- else
- echo "Waiting for 200 OK response from $URL, current status: $HTTP_STATUS"
- fi
- done
-
- # Wait before retrying
- sleep 5
- done
- # Check if Docker is available and accessible
- if docker info > /dev/null 2>&1; then
- echo "Docker is available, starting Nutshell wallet container"
- # Use the MINT_URL which is already set to host.docker.internal
- docker run -d --name ${WALLET_CONTAINER_NAME} \
- --network=host \
- -p ${WALLET_PORT}:${WALLET_PORT} \
- -e MINT_URL=${MINT_URL} \
- cashubtc/nutshell:latest \
- poetry run cashu -d
- else
- echo "Docker is not accessible, skipping Nutshell wallet container setup"
- # Set a flag to indicate we're not using Docker
- export NO_DOCKER=true
- fi
- # Wait for the mint to be ready
- echo "Waiting for Nutshell Mint to start..."
- sleep 5
- # Check if the Mint API is responding (use localhost for local curl check)
- echo "Checking if Nutshell Mint API is available..."
- if curl -s "http://localhost:${MINT_PORT}/v1/info" > /dev/null; then
- echo "Nutshell Mint is running and accessible at ${MINT_URL}"
- else
- echo "Warning: Nutshell Mint API is not responding. It might not be ready yet."
- fi
- # Only check wallet if Docker is available
- if [ -z "$NO_DOCKER" ]; then
- # Check if the Wallet API is responding
- echo "Checking if Nutshell Wallet API is available..."
- if curl -s "${WALLET_URL}/info" > /dev/null; then
- echo "Nutshell Wallet is running in container '${WALLET_CONTAINER_NAME}'"
- echo "You can access it at ${WALLET_URL}"
- else
- echo "Warning: Nutshell Wallet API is not responding. The container might not be ready yet."
- fi
- fi
- # Export URLs as environment variables
- export MINT_URL=${MINT_URL}
- export WALLET_URL=${WALLET_URL}
- export CDK_TEST_MINT_URL=${MINT_URL}
- # Run the integration test
- echo "Running integration test..."
- cargo test -p cdk-integration-tests --test nutshell_wallet
- cargo test -p cdk-integration-tests --test test_fees
- TEST_STATUS=$?
- # Exit with the test status
- echo "Integration test completed with status: $TEST_STATUS"
- exit $TEST_STATUS
|