#!/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}
