![Felipe Monteiro](/assets/img/avatar_default.png)
This PS simply reorganizes Deckhand's functional test directory to make it more maintainable and readable as right now it is hard to figure out what is covered by a functional test and what isn't. Additionally, the entrypoint for these tests in tools/functional-tests.sh has also been refactored slightly. Change-Id: I262c7e1f7cbce248c12ee013a9bab4e32b89adee
117 lines
3.3 KiB
Bash
Executable File
117 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Script intended for running Deckhand functional tests via gabbi. Requires
|
|
# Docker CE (at least) to run.
|
|
|
|
set -xe
|
|
|
|
# Meant for capturing output of Deckhand image. This requires that logging
|
|
# in the image be set up to pipe everything out to stdout/stderr.
|
|
STDOUT=$(mktemp)
|
|
|
|
# NOTE(fmontei): `DECKHAND_IMAGE` should only be specified if the desire is to
|
|
# run Deckhand functional tests against a specific Deckhand image, which is
|
|
# useful for CICD (as validating the image is vital). However, if the
|
|
# `DECKHAND_IMAGE` is not specified, then this implies that the most current
|
|
# version of the code should be used, which is in the repo itself.
|
|
DECKHAND_IMAGE=${DECKHAND_IMAGE:-}
|
|
ROOTDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
source $ROOTDIR/common-tests.sh
|
|
|
|
|
|
function cleanup_deckhand {
|
|
set +e
|
|
|
|
if [ -n "$POSTGRES_ID" ]; then
|
|
sudo docker stop $POSTGRES_ID
|
|
fi
|
|
if [ -n "$DECKHAND_ID" ]; then
|
|
sudo docker stop $DECKHAND_ID
|
|
fi
|
|
if [ -d "$CONF_DIR" ]; then
|
|
rm -rf $CONF_DIR
|
|
fi
|
|
|
|
# Kill all processes and child processes (for example, if workers > 1)
|
|
# if using uwsgi only.
|
|
PGID=$(ps -o comm -o pgid | grep uwsgi | grep -o [0-9]* | head -n 1)
|
|
if [ -n "$PGID" ]; then
|
|
setsid kill -- -$PGID
|
|
fi
|
|
}
|
|
|
|
|
|
trap cleanup_deckhand EXIT
|
|
|
|
|
|
function deploy_deckhand {
|
|
gen_config "http://localhost:9000"
|
|
gen_paste true
|
|
gen_policy
|
|
|
|
if [ -z "$DECKHAND_IMAGE" ]; then
|
|
log_section "Running Deckhand via uwsgi."
|
|
|
|
alembic upgrade head
|
|
# NOTE(fmontei): Deckhand's database is not configured to work with
|
|
# multiprocessing. Currently there is a data race on acquiring shared
|
|
# SQLAlchemy engine pooled connection strings when workers > 1. As a
|
|
# workaround, we use multiple threads but only 1 worker. For more
|
|
# information, see: https://github.com/att-comdev/deckhand/issues/20
|
|
export DECKHAND_API_WORKERS=1
|
|
export DECKHAND_API_THREADS=4
|
|
source $ROOTDIR/../entrypoint.sh server &
|
|
else
|
|
log_section "Running Deckhand via Docker."
|
|
sudo docker run \
|
|
--rm \
|
|
--net=host \
|
|
-v $CONF_DIR:/etc/deckhand \
|
|
$DECKHAND_IMAGE alembic upgrade head &> $STDOUT &
|
|
sudo docker run \
|
|
--rm \
|
|
--net=host \
|
|
-p 9000:9000 \
|
|
-v $CONF_DIR:/etc/deckhand \
|
|
$DECKHAND_IMAGE server &> $STDOUT &
|
|
fi
|
|
|
|
# Give the server a chance to come up. Better to poll a health check.
|
|
sleep 5
|
|
|
|
DECKHAND_ID=$(sudo docker ps | grep deckhand | awk '{print $1}')
|
|
echo $DECKHAND_ID
|
|
}
|
|
|
|
|
|
# Deploy Deckhand and PostgreSQL and run tests.
|
|
deploy_postgre
|
|
deploy_deckhand
|
|
|
|
log_section Running tests
|
|
|
|
# Create folder for saving HTML test results.
|
|
if [ ! -d $ROOTDIR/results ]; then
|
|
mkdir $ROOTDIR/results
|
|
fi
|
|
|
|
set +e
|
|
posargs=$@
|
|
if [ ${#posargs} -ge 1 ]; then
|
|
py.test -k $1 -svx $( dirname $ROOTDIR )/deckhand/tests/functional/test_gabbi.py --html=results/index.html
|
|
else
|
|
py.test -svx $( dirname $ROOTDIR )/deckhand/tests/functional/test_gabbi.py --html=results/index.html
|
|
fi
|
|
TEST_STATUS=$?
|
|
set -e
|
|
|
|
if [ "x$TEST_STATUS" = "x0" ]; then
|
|
log_section Done SUCCESS
|
|
else
|
|
log_section Deckhand Server Log
|
|
cat $STDOUT
|
|
log_section Done FAILURE
|
|
exit $TEST_STATUS
|
|
fi
|