You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

175 lines
5.6 KiB

#!/bin/bash
# Parse command line arguments
GENERATE_ONLY=false
ALL_TESTS=false
while getopts "ga" opt; do
case $opt in
g) GENERATE_ONLY=true ;;
a) ALL_TESTS=true ;;
\?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
esac
done
# Directory for storing generated DIDs
mkdir -p .generated
# Function to validate environment variables
validate_env() {
local missing=false
for var in CONTACT1_DID CONTACT1_KEY CONTACT2_DID CONTACT2_KEY ISSUER_DID ISSUER_KEY; do
if [ -z "${!var}" ]; then
echo "Error: $var is not set" >&2
missing=true
fi
done
if [ "$missing" = true ]; then
rm -f .generated/test-env.sh # Remove invalid env file
echo "Please regenerate DIDs by running:" >&2
echo "./test-scripts/run-deeplink-tests.sh -g" >&2
return 1
fi
return 0
}
# Check if we already have generated DIDs
if [ -f .generated/test-env.sh ] && [ "$GENERATE_ONLY" = false ]; then
echo "Using existing DIDs from .generated/test-env.sh"
source .generated/test-env.sh
validate_env || exit 1
else
# Function to extract DID info from did_generator.sh output
extract_did_info() {
local output="$1"
# Debug: Show what we received
echo "DEBUG: extract_did_info received: '$output'" >&2
# Parse and validate JSON
if ! printf '%s' "$output" | jq -e 'if type == "object" and .status == "success" then true else false end' >/dev/null 2>&1; then
echo "Error: DID generation failed" >&2
echo "Error details:" >&2
if ! printf '%s' "$output" | jq -e . >/dev/null 2>&1; then
echo "Invalid JSON output: $output" >&2
else
printf '%s' "$output" | jq -r '"\(.stage): \(.error // "Unknown error")"' >&2
fi
return 1
fi
# Return the successful JSON
printf '%s' "$output"
}
echo "Generating first contact DID..."
# Debug: Show raw command output
DEBUG_OUTPUT=$(DEBUG=0 ./test-scripts/did_generator.sh)
GEN_STATUS=$?
echo "DEBUG: Raw did_generator.sh output: '$DEBUG_OUTPUT'" >&2
if [ $GEN_STATUS -ne 0 ]; then
echo "Error: did_generator.sh failed with status $GEN_STATUS" >&2
exit 1
fi
CONTACT1_OUTPUT=$(printf '%s' "$DEBUG_OUTPUT" | tr -d '\r')
echo "DEBUG: After tr command: '$CONTACT1_OUTPUT'" >&2
# Debug: Show what we're passing to extract_did_info
echo "DEBUG: Calling extract_did_info with: '$CONTACT1_OUTPUT'" >&2
CONTACT1_INFO=$(extract_did_info "$CONTACT1_OUTPUT")
EXTRACT_STATUS=$?
echo "DEBUG: extract_did_info returned status: $EXTRACT_STATUS" >&2
echo "DEBUG: CONTACT1_INFO: '$CONTACT1_INFO'" >&2
if [ $EXTRACT_STATUS -ne 0 ]; then
echo "DEBUG: extract_did_info failed" >&2
exit 1
fi
CONTACT1_DID=$(printf '%s' "$CONTACT1_INFO" | jq -r .did)
CONTACT1_KEY=$(printf '%s' "$CONTACT1_INFO" | jq -r .privateKey)
echo "Generating second contact DID (Jordan)..."
DEBUG_OUTPUT=$(DEBUG=0 ./test-scripts/did_generator.sh)
CONTACT2_OUTPUT=$(printf '%s' "$DEBUG_OUTPUT" | tr -d '\r')
CONTACT2_INFO=$(extract_did_info "$CONTACT2_OUTPUT")
if [ $? -ne 0 ]; then
exit 1
fi
CONTACT2_DID=$(printf '%s' "$CONTACT2_INFO" | jq -r .did)
CONTACT2_KEY=$(printf '%s' "$CONTACT2_INFO" | jq -r .privateKey)
echo "Generating issuer DID..."
DEBUG_OUTPUT=$(DEBUG=0 ./test-scripts/did_generator.sh)
ISSUER_OUTPUT=$(printf '%s' "$DEBUG_OUTPUT" | tr -d '\r')
ISSUER_INFO=$(extract_did_info "$ISSUER_OUTPUT")
if [ $? -ne 0 ]; then
exit 1
fi
ISSUER_DID=$(printf '%s' "$ISSUER_INFO" | jq -r .did)
ISSUER_KEY=$(printf '%s' "$ISSUER_INFO" | jq -r .privateKey)
# Add some visual feedback about the generated DIDs
echo
echo "Generated DIDs:"
echo " Contact 1: ${CONTACT1_DID:0:20}..."
echo " Contact 2: ${CONTACT2_DID:0:20}..."
echo " Issuer: ${ISSUER_DID:0:20}..."
echo
# Create a temporary env file with the generated DIDs
echo "Creating test-env.sh with generated DIDs..."
cat > .generated/test-env.sh << EOF
#!/bin/bash
# Generated $(date)
export CONTACT1_DID="$CONTACT1_DID"
export CONTACT1_KEY="$CONTACT1_KEY"
export CONTACT2_DID="$CONTACT2_DID"
export CONTACT2_KEY="$CONTACT2_KEY"
export ISSUER_DID="$ISSUER_DID"
export ISSUER_KEY="$ISSUER_KEY"
EOF
# Debug output
echo "Contents of generated test-env.sh:"
cat .generated/test-env.sh
# Make sure file is executable
chmod +x .generated/test-env.sh
# Source and validate the newly created env file
echo "Sourcing generated test-env.sh..."
source .generated/test-env.sh
validate_env || exit 1
fi
if [ "$GENERATE_ONLY" = true ]; then
echo "Generated DIDs and created environment file at .generated/test-env.sh"
echo "To use these DIDs, run:"
echo "source .generated/test-env.sh"
exit 0
fi
# Create contacts JSON for deep links
CONTACTS_JSON=$(jq -n \
--arg did1 "$CONTACT1_DID" \
--arg did2 "$CONTACT2_DID" \
'[
{"did": $did1},
{
"did": $did2,
"name": "Jordan",
"nextPubKeyHashB64": "IBfRZfwdzeKOzqCx8b+WlLpMJHOAT9ZknIDJo7F3rZE=",
"publicKeyBase64": "A1eIndfaxgMpVwyD5dYe74DgjuIo5SwPZFCcLdOemjf"
}
]')
export CONTACTS_JSON
export TEST_MODE=${TEST_MODE:-print} # Use TEST_MODE from environment or default to print
# Run deep link tests in order
if [ "$ALL_TESTS" = true ]; then
./test-scripts/test-deeplinks.sh -t 5 -a
else
./test-scripts/test-deeplinks.sh -t 5
fi