Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F9697188
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
View Options
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 64feecc..0237089 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -1,177 +1,179 @@
#!/bin/bash
# Main script to run high level tests on the Software Heritage stack
# Use a temporary directory as working directory
WORKDIR=/tmp/swh-docker-dev_tests
# Create it if it does not exist
mkdir $WORKDIR 2>/dev/null
# Ensure it is empty before running the tests
rm -rf $WORKDIR/*
# We want the script to exit at the first encountered error
set -e
# Get test scripts directory
TEST_SCRIPTS_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
# Set the docker-compose.yml file to use
export COMPOSE_FILE=$TEST_SCRIPTS_DIR/../docker-compose.yml
# Useful global variables
SWH_WEB_API_BASEURL="http://localhost:5004/api/1"
CURRENT_TEST_SCRIPT=""
# Colored output related variables and functions (only if stdout is a terminal)
if test -t 1; then
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'
+else
+ DOCO_OPTIONS='--no-ansi'
fi
# Remove previously dumped service logs file if any
rm -f $TEST_SCRIPTS_DIR/swh-docker-compose.logs
function colored_output {
local msg="$2"
if [ "$CURRENT_TEST_SCRIPT" != "" ]; then
msg="[$CURRENT_TEST_SCRIPT] $msg"
fi
echo -e "${1}${msg}${NC}"
}
function status_message {
colored_output ${GREEN} "$1"
}
function error_message {
colored_output ${RED} "$1"
}
function dump_docker_logs {
error_message "Dumping logs for all services in file $TEST_SCRIPTS_DIR/swh-docker-compose.logs"
docker-compose logs > $TEST_SCRIPTS_DIR/swh-docker-compose.logs
}
# Exit handler that will get called when this script terminates
function finish {
if [ $? -ne 0 ] && [ "$CURRENT_TEST_SCRIPT" != "" ]; then
local SCRIPT_NAME=$CURRENT_TEST_SCRIPT
CURRENT_TEST_SCRIPT=""
error_message "An error occurred when running test script ${SCRIPT_NAME}"
dump_docker_logs
fi
- docker-compose down
+ docker-compose $DOCO_OPTIONS down
rm -rf $WORKDIR
}
trap finish EXIT
# Docker-compose events listener that will be executed in background
# Parameters:
# $1: PID of parent process
function listen_docker_events {
- docker-compose events | while read event
+ docker-compose $DOCO_OPTIONS events | while read event
do
service=$(echo $event | cut -d " " -f7 | sed 's/^name=swh-docker-dev_\(.*\)_1)/\1/')
event_type=$(echo $event | cut -d ' ' -f4)
# "docker-compose down" has been called, exiting this child process
if [ "$event_type" = "kill" ] ; then
exit
# a swh service crashed, sending signal to parent process to exit with error
elif [ "$event_type" = "die" ] ; then
if [[ "$service" =~ ^swh.* ]]; then
error_message "Service $service died unexpectedly, exiting"
dump_docker_logs
kill -s SIGUSR1 $1; exit
fi
fi
done
}
trap "exit 1" SIGUSR1
declare -A SERVICE_LOGS_NB_LINES_READ
# Function to wait for a specific string to be outputted in a specific
# docker-compose service logs.
# When called multiple times on the same service, only the newly outputted
# logs since the last call will be processed.
# Parameters:
# $1: a timeout value in seconds to stop waiting and exit with error
# $2: docker-compose service name
# $3: the string to look for in the produced logs
function wait_for_service_output {
local nb_lines_to_skip=0
if [[ -v "SERVICE_LOGS_NB_LINES_READ[$2]" ]]; then
let nb_lines_to_skip=${SERVICE_LOGS_NB_LINES_READ[$2]}+1
fi
SECONDS=0
- local service_logs=$(docker-compose logs $2 | tail -n +$nb_lines_to_skip)
+ local service_logs=$(docker-compose $DOCO_OPTIONS logs $2 | tail -n +$nb_lines_to_skip)
until echo -ne "$service_logs" | grep -m 1 "$3" >/dev/null ; do
sleep 1;
if (( $SECONDS > $1 )); then
error_message "Could not find pattern \"$3\" in $2 service logs after $1 seconds"
exit 1
fi
let nb_lines_to_skip+=$(echo -ne "$service_logs" | wc -l)
- service_logs=$(docker-compose logs $2 | tail -n +$nb_lines_to_skip)
+ service_logs=$(docker-compose $DOCO_OPTIONS logs $2 | tail -n +$nb_lines_to_skip)
done
let nb_lines_to_skip+=$(echo -ne "$service_logs" | wc -l)
SERVICE_LOGS_NB_LINES_READ[$2]=$nb_lines_to_skip
}
# Function to make an HTTP request and gets its response.
# It should be used the following way:
# response=$(http_request <method> <url>)
# Parameters:
# $1: http method name (GET, POST, ...)
# $2: request url
function http_request {
local response=$(curl -sS -X $1 $2)
echo $response
}
# Function to check that an HTTP request ends up with no errors.
# If the HTTP response code is different from 200, an error will
# be raised and the main script will terminate
# Parameters:
# $1: http method name (GET, POST, ...)
# $2: request url
function http_request_check {
curl -sSf -X $1 $2 > /dev/null
}
# Function to run the content of a script dedicated to test a specific
# part of the Software Heritage stack.
function run_test_script {
local SCRIPT_NAME=$(basename $1)
status_message "Executing test script $SCRIPT_NAME"
CURRENT_TEST_SCRIPT=$SCRIPT_NAME
source $1
}
# Move to work directory
cd $WORKDIR
# Start the docker-compose event handler as a background process
status_message "Starting docker-compose events listener"
listen_docker_events $$ &
# Start the docker-compose environment including the full Software Heritage stack
status_message "Starting swh docker-compose environment"
-docker-compose up -d
+docker-compose $DOCO_OPTIONS up -d
# Ensure all swh services are up before running tests
status_message "Waiting for swh services to be up"
-docker-compose exec -T swh-storage wait-for-it localhost:5002 -s --timeout=0
-docker-compose exec -T swh-objstorage wait-for-it localhost:5003 -s --timeout=0
-docker-compose exec -T swh-web wait-for-it localhost:5004 -s --timeout=0
-docker-compose exec -T swh-vault-api wait-for-it localhost:5005 -s --timeout=0
-docker-compose exec -T swh-deposit wait-for-it localhost:5006 -s --timeout=0
-docker-compose exec -T swh-idx-storage wait-for-it localhost:5007 -s --timeout=0
-docker-compose exec -T swh-scheduler-api wait-for-it localhost:5008 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-storage wait-for-it localhost:5002 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-objstorage wait-for-it localhost:5003 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-web wait-for-it localhost:5004 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-vault-api wait-for-it localhost:5005 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-deposit wait-for-it localhost:5006 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-idx-storage wait-for-it localhost:5007 -s --timeout=0
+docker-compose $DOCO_OPTIONS exec -T swh-scheduler-api wait-for-it localhost:5008 -s --timeout=0
# Execute test scripts
for test_script in $TEST_SCRIPTS_DIR/test_*; do
run_test_script ${test_script}
CURRENT_TEST_SCRIPT=""
done
diff --git a/tests/test_01_loader_git.sh b/tests/test_01_loader_git.sh
index ac8f44c..7342050 100644
--- a/tests/test_01_loader_git.sh
+++ b/tests/test_01_loader_git.sh
@@ -1,70 +1,70 @@
#!/bin/bash
shopt -s nullglob extglob
TEST_GIT_REPO_NAME="swh-loader-tar"
TEST_GIT_REPO_URL="https://forge.softwareheritage.org/source/${TEST_GIT_REPO_NAME}.git"
status_message "Scheduling the loading of the git repository located at ${TEST_GIT_REPO_URL}"
-docker-compose exec -T swh-scheduler-api swh-scheduler task add origin-update-git repo_url=$TEST_GIT_REPO_URL
+docker-compose $DOCO_OPTIONS exec -T swh-scheduler-api swh-scheduler task add origin-update-git repo_url=$TEST_GIT_REPO_URL
status_message "Waiting for the git loading task to complete"
wait_for_service_output 300 swh-loader "swh.loader.git.tasks.UpdateGitRepository.*succeeded"
status_message "The loading task has been successfully executed"
status_message "Getting all git objects contained in the repository"
git clone $TEST_GIT_REPO_URL
cd $TEST_GIT_REPO_NAME
cd "$(git rev-parse --git-path objects)"
for p in pack/pack-*([0-9a-f]).idx ; do
git show-index < $p | cut -f 2 -d ' ' > $WORKDIR/git_objects
done
for o in [0-9a-f][0-9a-f]/*([0-9a-f]) ; do
echo ${o/\/} >> $WORKDIR/git_objects
done
declare -ga CONTENTS
declare -ga DIRECTORIES
declare -ga REVISIONS
declare -ga RELEASES
while IFS='' read -r object || [[ -n "$object" ]]; do
object_type=$(git cat-file -t $object)
if [ "$object_type" = "blob" ]; then
CONTENTS+=($object)
elif [ "$object_type" = "tree" ]; then
DIRECTORIES+=($object)
elif [ "$object_type" = "commit" ]; then
REVISIONS+=($object)
elif [ "$object_type" = "tag" ]; then
RELEASES+=($object)
fi
done < $WORKDIR/git_objects
status_message "Checking all git objects have been successfully loaded into the archive"
status_message "Checking contents"
for content in "${CONTENTS[@]}"; do
http_request_check GET ${SWH_WEB_API_BASEURL}/content/sha1_git:$content/
done
status_message "All contents have been successfully loaded into the archive"
status_message "Checking directories"
for directory in "${DIRECTORIES[@]}"; do
http_request_check GET ${SWH_WEB_API_BASEURL}/directory/$directory/
done
status_message "All directories have been successfully loaded into the archive"
status_message "Checking revisions"
for revision in "${REVISIONS[@]}"; do
http_request_check GET ${SWH_WEB_API_BASEURL}/revision/$revision/
done
status_message "All revisions have been successfully loaded into the archive"
status_message "Checking releases"
for release in "${RELEASES[@]}"; do
http_request_check GET ${SWH_WEB_API_BASEURL}/release/$release/
done
status_message "All releases have been successfully loaded into the archive"
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Mon, Aug 18, 11:04 PM (1 w, 4 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3263793
Attached To
rCDFD Dockerfiles for developers
Event Timeline
Log In to Comment