148 lines
4.7 KiB
Bash
Executable File
148 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
MAIN_DIR=$(cd "${SCRIPT_DIR}/.." && pwd)
|
|
|
|
# Variables for cleanup
|
|
COMPOSE_FILE="${SCRIPT_DIR}/compose.yaml"
|
|
CLEANUP_NEEDED=false
|
|
|
|
# FUNCTIONS
|
|
function title() {
|
|
echo "----------------------------------------"
|
|
# Center the text
|
|
local text="$1"
|
|
local line_length=40
|
|
local text_length=${#text}
|
|
local padding=$(( (line_length - text_length) / 2 ))
|
|
printf "%*s%s%*s\n" $padding "" "$text" $padding ""
|
|
echo "----------------------------------------"
|
|
}
|
|
|
|
function cleanup() {
|
|
if [ "$CLEANUP_NEEDED" = true ]; then
|
|
echo ""
|
|
title "Cleaning up containers"
|
|
|
|
# Stop and remove the test container
|
|
docker stop sos-test 2>/dev/null || true
|
|
docker rm -v sos-test 2>/dev/null || true
|
|
|
|
# Use docker compose to clean up
|
|
if [ -f "${COMPOSE_FILE}" ]; then
|
|
docker compose -f "${COMPOSE_FILE}" down 2>/dev/null || true
|
|
docker compose -f "${COMPOSE_FILE}" rm -v -f 2>/dev/null || true
|
|
fi
|
|
|
|
echo "Cleanup completed"
|
|
fi
|
|
}
|
|
|
|
function die() {
|
|
title "error: $1"
|
|
cleanup
|
|
exit 1
|
|
}
|
|
|
|
# Set up trap to ensure cleanup on exit
|
|
trap cleanup EXIT INT TERM
|
|
|
|
function wait_for_container {
|
|
container_id="$1"
|
|
container_name="$(docker inspect "${container_id}" --format '{{ .Name }}')"
|
|
echo "Waiting for container: ${container_name} [${container_id}]"
|
|
waiting_done="false"
|
|
while [[ "${waiting_done}" != "true" ]]; do
|
|
container_state="$(docker inspect "${container_id}" --format '{{ .State.Status }}')"
|
|
if [[ "${container_state}" == "running" ]]; then
|
|
health_status="$(docker inspect "${container_id}" --format '{{ .State.Health.Status }}')"
|
|
echo "${container_name}: container_state=${container_state}, health_status=${health_status}"
|
|
if [[ ${health_status} == "healthy" ]]; then
|
|
waiting_done="true"
|
|
fi
|
|
else
|
|
echo "${container_name}: container_state=${container_state}"
|
|
health_status="${container_state}"
|
|
waiting_done="true"
|
|
fi
|
|
sleep 1;
|
|
done;
|
|
[ "${health_status}" == "healthy" ]
|
|
}
|
|
|
|
|
|
title "Building"
|
|
"${SCRIPT_DIR}/../build.sh" || die "Build failed"
|
|
|
|
|
|
#------------------------------------------------------------------------------------------------
|
|
# Use static test configuration with known tokens for Docker testing
|
|
title "Setting up test configuration"
|
|
# Use the static Docker config with known hashes
|
|
cp "${SCRIPT_DIR}/sos_config_docker.json" "${SCRIPT_DIR}/sos_config.json"
|
|
|
|
# Export the known plaintext tokens that correspond to the hashes in sos_config_docker.json
|
|
export TEST_TOKEN1="t570H7DmK2VBfCwUmtFaUXyzVklL90E1"
|
|
export TEST_TOKEN2="U3x9V39Y7rjXdRK0oxZsCz5lD6jFFDtm"
|
|
export TEST_TOKEN3="UhtchhGDEGXlJ37GumimFtPe0imjAvak"
|
|
|
|
echo "Using static test configuration with known tokens"
|
|
|
|
#------------------------------------------------------------------------------------------------
|
|
# run the docker container
|
|
title "Running docker container"
|
|
|
|
# Config file is always in SCRIPT_DIR after the copy above
|
|
LOCALCONFIG="${SCRIPT_DIR}/sos_config.json"
|
|
|
|
[ -f "${LOCALCONFIG}" ] || die "Config file not found: ${LOCALCONFIG}"
|
|
[ -f "${COMPOSE_FILE}" ] || die "Compose file not found: ${COMPOSE_FILE}"
|
|
|
|
#------------------------------------------------------------------------------------------------
|
|
title "Running tests"
|
|
|
|
PREV_DIR=$(pwd)
|
|
cd "${SCRIPT_DIR}"
|
|
|
|
# Clean up any existing containers before starting
|
|
docker stop sos-test 2>/dev/null || true
|
|
docker rm -v sos-test 2>/dev/null || true
|
|
|
|
# Start the container (without config volume mount)
|
|
docker compose -f "${COMPOSE_FILE}" up -d
|
|
|
|
# Mark that we need cleanup from this point on
|
|
CLEANUP_NEEDED=true
|
|
|
|
# Copy the config file into the running container
|
|
echo "Copying config file into container..."
|
|
docker cp "${LOCALCONFIG}" sos-test:/testing/sos_config.json
|
|
|
|
# wait until healthy.
|
|
if ! wait_for_container "sos-test"; then
|
|
echo "----------------------------------------"
|
|
echo "Container sos-test is not healthy"
|
|
echo "----------------------------------------"
|
|
docker logs sos-test
|
|
die "Container sos-test is not healthy"
|
|
fi
|
|
|
|
# Verify the config and test files are accessible
|
|
echo "Verifying test environment..."
|
|
docker exec sos-test ls -la /testing/ || die "Cannot access /testing directory in container"
|
|
|
|
# Run the tests inside the container
|
|
echo "Running tests inside container..."
|
|
docker exec -i \
|
|
-e TEST_TOKEN1="${TEST_TOKEN1:-}" \
|
|
-e TEST_TOKEN2="${TEST_TOKEN2:-}" \
|
|
-e TEST_TOKEN3="${TEST_TOKEN3:-}" \
|
|
sos-test /bin/bash -c "cd /testing && ./test.sh http://127.0.0.1:7703"
|
|
RESULT=$?
|
|
|
|
cd "${PREV_DIR}"
|
|
|
|
# Cleanup will be handled by the trap
|
|
exit $RESULT
|