123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- #!/usr/bin/env bash
- # Function to perform cleanup
- cleanup() {
- echo "Cleaning up..."
- echo "Killing the cdk regtest and mints"
- if [ ! -z "$CDK_REGTEST_PID" ]; then
- # First try graceful shutdown with SIGTERM
- kill -15 $CDK_REGTEST_PID 2>/dev/null
- sleep 2
-
- # Check if process is still running, if so force kill with SIGKILL
- if ps -p $CDK_REGTEST_PID > /dev/null 2>&1; then
- echo "Process still running, force killing..."
- kill -9 $CDK_REGTEST_PID 2>/dev/null
- fi
-
- # Wait for process to terminate
- wait $CDK_REGTEST_PID 2>/dev/null || true
- fi
- echo "Mint binary terminated"
- # Remove the temporary directory
- if [ ! -z "$CDK_ITESTS_DIR" ] && [ -d "$CDK_ITESTS_DIR" ]; then
- rm -rf "$CDK_ITESTS_DIR"
- echo "Temp directory removed: $CDK_ITESTS_DIR"
- fi
-
- # Unset all environment variables
- unset CDK_ITESTS_DIR
- unset CDK_ITESTS_MINT_ADDR
- unset CDK_ITESTS_MINT_PORT_0
- unset CDK_ITESTS_MINT_PORT_1
- unset CDK_MINTD_DATABASE
- unset CDK_TEST_MINT_URL
- unset CDK_TEST_MINT_URL_2
- unset CDK_REGTEST_PID
- unset RUST_BACKTRACE
- unset CDK_TEST_REGTEST
- }
- # Set up trap to call cleanup on script exit
- trap cleanup EXIT
- export CDK_TEST_REGTEST=1
- # Create a temporary directory
- export CDK_ITESTS_DIR=$(mktemp -d)
- export CDK_ITESTS_MINT_ADDR="127.0.0.1"
- export CDK_ITESTS_MINT_PORT_0=8085
- export CDK_ITESTS_MINT_PORT_1=8087
- # Check if the temporary directory was created successfully
- if [[ ! -d "$CDK_ITESTS_DIR" ]]; then
- echo "Failed to create temp directory"
- exit 1
- fi
- echo "Temp directory created: $CDK_ITESTS_DIR"
- export CDK_MINTD_DATABASE="$1"
- cargo build -p cdk-integration-tests
- cargo build --bin start_regtest_mints
- echo "Starting regtest and mints"
- # Run the binary in background
- cargo r --bin start_regtest_mints -- --enable-logging "$CDK_MINTD_DATABASE" "$CDK_ITESTS_DIR" "$CDK_ITESTS_MINT_ADDR" "$CDK_ITESTS_MINT_PORT_0" "$CDK_ITESTS_MINT_PORT_1" &
- export CDK_REGTEST_PID=$!
- # Give it a moment to start - reduced from 5 to 2 seconds since we have better waiting mechanisms now
- sleep 2
- # Look for the .env file in the current directory
- ENV_FILE_PATH="$CDK_ITESTS_DIR/.env"
- # Wait for the .env file to be created in the current directory
- max_wait=120
- wait_count=0
- while [ $wait_count -lt $max_wait ]; do
- if [ -f "$ENV_FILE_PATH" ]; then
- echo ".env file found at: $ENV_FILE_PATH"
- break
- fi
- wait_count=$((wait_count + 1))
- sleep 1
- done
- # Check if we found the .env file
- if [ ! -f "$ENV_FILE_PATH" ]; then
- echo "ERROR: Could not find .env file at $ENV_FILE_PATH"
- exit 1
- fi
- # Source the environment variables from the .env file
- echo "Sourcing environment variables from $ENV_FILE_PATH"
- source "$ENV_FILE_PATH"
- echo "Sourced environment variables:"
- echo "CDK_TEST_MINT_URL=$CDK_TEST_MINT_URL"
- echo "CDK_TEST_MINT_URL_2=$CDK_TEST_MINT_URL_2"
- echo "CDK_ITESTS_DIR=$CDK_ITESTS_DIR"
- # Validate that we sourced the variables
- if [ -z "$CDK_TEST_MINT_URL" ] || [ -z "$CDK_TEST_MINT_URL_2" ] || [ -z "$CDK_ITESTS_DIR" ]; then
- echo "ERROR: Failed to source environment variables from the .env file"
- exit 1
- fi
- # Export all variables so they're available to the tests
- export CDK_TEST_MINT_URL
- export CDK_TEST_MINT_URL_2
- URL="$CDK_TEST_MINT_URL/v1/info"
- TIMEOUT=100
- START_TIME=$(date +%s)
- # Loop until the endpoint 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
- # Make a request to the endpoint and capture the HTTP status code
- HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" $URL)
- # Check if the HTTP status is 200 OK
- if [ "$HTTP_STATUS" -eq 200 ]; then
- echo "Received 200 OK from $URL"
- break
- else
- echo "Waiting for 200 OK response, current status: $HTTP_STATUS"
- sleep 2 # Wait for 2 seconds before retrying
- fi
- done
- URL="$CDK_TEST_MINT_URL_2/v1/info"
- TIMEOUT=100
- START_TIME=$(date +%s)
- # Loop until the endpoint 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
- # Make a request to the endpoint and capture the HTTP status code
- HTTP_STATUS=$(curl -o /dev/null -s -w "%{http_code}" $URL)
- # Check if the HTTP status is 200 OK
- if [ "$HTTP_STATUS" -eq 200 ]; then
- echo "Received 200 OK from $URL"
- break
- else
- echo "Waiting for 200 OK response, current status: $HTTP_STATUS"
- sleep 2 # Wait for 2 seconds before retrying
- fi
- done
- # Run cargo test
- echo "Running regtest test with CLN mint"
- cargo test -p cdk-integration-tests --test regtest
- if [ $? -ne 0 ]; then
- echo "regtest test failed, exiting"
- exit 1
- fi
- echo "Running happy_path_mint_wallet test with CLN mint"
- cargo test -p cdk-integration-tests --test happy_path_mint_wallet
- if [ $? -ne 0 ]; then
- echo "happy_path_mint_wallet test failed, exiting"
- exit 1
- fi
- # Run cargo test with the http_subscription feature
- echo "Running regtest test with http_subscription feature"
- cargo test -p cdk-integration-tests --test regtest --features http_subscription
- if [ $? -ne 0 ]; then
- echo "regtest test with http_subscription failed, exiting"
- exit 1
- fi
- echo "Running regtest test with cln mint for bolt12"
- cargo test -p cdk-integration-tests --test bolt12
- if [ $? -ne 0 ]; then
- echo "regtest test failed, exiting"
- exit 1
- fi
- # Switch Mints: Run tests with LND mint
- echo "Switching to LND mint for tests"
- echo "Running regtest test with LND mint"
- CDK_TEST_MINT_URL_SWITCHED=$CDK_TEST_MINT_URL_2
- CDK_TEST_MINT_URL_2_SWITCHED=$CDK_TEST_MINT_URL
- export CDK_TEST_MINT_URL=$CDK_TEST_MINT_URL_SWITCHED
- export CDK_TEST_MINT_URL_2=$CDK_TEST_MINT_URL_2_SWITCHED
- cargo test -p cdk-integration-tests --test regtest
- if [ $? -ne 0 ]; then
- echo "regtest test with LND mint failed, exiting"
- exit 1
- fi
- echo "Running happy_path_mint_wallet test with LND mint"
- cargo test -p cdk-integration-tests --test happy_path_mint_wallet
- if [ $? -ne 0 ]; then
- echo "happy_path_mint_wallet test with LND mint failed, exiting"
- exit 1
- fi
- echo "All tests passed successfully"
- exit 0
|