blob: 5c21932d1595914eb945abaeb1c37f39ae7d00fe [file] [log] [blame]
#!/bin/bash
# Copyright 2016 The Transicator Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
export script_dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export working_dir="$( cd "${script_dir}"/.. && pwd)"
if [ ! $TEST_PG_PW ]
then
echo "TEST_PG_PW not set. Enter Postgres password:"
read -s TEST_PG_PW
fi
finalExitCode=0
rm -rf ${working_dir}/docker-test-reports
mkdir ${working_dir}/docker-test-reports
netName=transicator-tests-$$
dbName=transicator-test-pg-$$
testName=transicator-test-$$
ssName=snapshot-test-$$
csName=changeserver-test-$$
slotName=changeserver_test_slot
# Build postgresql image
docker build --tag ${dbName} ./pgoutput
# Launch it
docker run -d \
--name ${dbName} \
-e POSTGRES_PASSWORD=${TEST_PG_PW} \
${dbName}
# Build a test container
docker build --tag ${testName} -f ${working_dir}/test/Dockerfile ${working_dir}
# Run the unit tests in it
docker run -i \
--name ${testName} \
--link ${dbName}:postgres \
-e PGPASSWORD=${TEST_PG_PW} \
-e DBHOST=postgres \
-e TEST_COVERAGE=true \
-e TEST_COVERAGE_FILENAME=coverage_container_test.txt \
${testName} \
/go/src/github.com/apigee-labs/transicator/test/container_test_script.sh
if [ $? -ne 0 ]
then
finalExitCode=$?
fi
# Copy JUnit test files and rm container
docker cp ${testName}:/go/src/github.com/apigee-labs/transicator/test-reports/. ./docker-test-reports
docker rm ${testName}
# Build changeserver and snapshot server images
docker build --tag ${ssName} -f ${working_dir}/Dockerfile.snapshotserver ${working_dir}
docker build --tag ${csName} -f ${working_dir}/Dockerfile.changeserver ${working_dir}
if [[ -z "$TEST_PG_PW" ]]; then
POSTGRES_URL=postgres://postgres@${dbName}/postgres
else
POSTGRES_URL=postgres://postgres:${TEST_PG_PW}@${dbName}/postgres
fi
# Launch them
docker run -d \
--name ${csName} \
--link ${dbName}:postgres \
-v ${PWD}/test/keys:/keys \
${csName} \
-t 9443 --key /keys/clearkey.pem --cert /keys/clearcert.pem \
-s ${slotName} -u $POSTGRES_URL
docker run -d \
--name ${ssName} \
--link ${dbName}:postgres \
-v ${PWD}/test/keys:/keys \
${ssName} \
-t 9444 --key /keys/clearkey.pem --cert /keys/clearcert.pem \
-u $POSTGRES_URL
# Run tests of the combined servers and Postgres
docker run -i \
--name ${testName} \
--link ${dbName}:postgres \
--link ${csName}:changeserver \
--link ${ssName}:snapshotserver \
-e PGPASSWORD=${TEST_PG_PW} \
-e DBHOST=postgres \
-e CHANGE_HOST=changeserver \
-e SNAPSHOT_HOST=snapshotserver \
-e CHANGE_PORT=9443 \
-e SNAPSHOT_PORT=9444 \
-e TEST_COVERAGE=true \
-e TEST_COVERAGE_FILENAME=coverage_combined_test.txt \
${testName} \
/go/src/github.com/apigee-labs/transicator/test/combined_test_script.sh
if [ $? -ne 0 ]
then
finalExitCode=$?
fi
# No test-reports to get. Combined tests are black box and won't show coverage
docker rm ${testName}
# make coverage report
go get github.com/axw/gocov/gocov
go get github.com/AlekSi/gocov-xml
(cd docker-test-reports \
&& mkdir -p coverage \
&& $GOPATH/bin/gocov convert coverage_container_test.txt | $GOPATH/bin/gocov-xml > coverage/coverage_container_test.xml)
echo "*** changeserver logs ***"
docker logs ${csName}
echo "*** snapshotserver logs ***"
docker logs ${ssName}
# Uncomment this to see a lot of logs...
#echo "*** PG logs ***"
#docker logs ${dbName}
# Clean up
docker rm -f ${csName}
docker rm -f ${ssName}
docker rm -f ${dbName}
# --no-prune here will leave intermediate images around, which speeds
# up rebuild on a developer box
RMCMD="docker rmi --no-prune"
if [ $# -ge 1 ]
then
if [ $1 == "fullcleanup" ]
then
RMCMD="docker rmi"
fi
fi
${RMCMD} ${testName} ${ssName} ${csName} ${dbName}
exit ${finalExitCode}