You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
4.4 KiB
124 lines
4.4 KiB
#!/usr/bin/env bash
|
|
#
|
|
# Copyright 2019 HAProxy Technologies
|
|
#
|
|
# 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.
|
|
#
|
|
set -eo pipefail
|
|
|
|
export BASE_PATH="/v3"
|
|
|
|
HAPROXY_VERSION=${HAPROXY_VERSION:-2.9}
|
|
DOCKER_BASE_IMAGE="${DOCKER_BASE_IMAGE:-haproxytech/haproxy-debian}:${HAPROXY_VERSION}"
|
|
DOCKER_CONTAINER_NAME="dataplaneapi-e2e"
|
|
export DOCKER_CONTAINER_NAME
|
|
|
|
ROOT_DIR=$(git rev-parse --show-toplevel)
|
|
export E2E_PORT=${E2E_PORT:-8042}
|
|
export E2E_DIR=${ROOT_DIR}/e2e
|
|
export LOCAL_IP_ADDRESS=${LOCAL_IP_ADDRESS:-127.0.0.1}
|
|
|
|
source "${E2E_DIR}/libs/cleanup.bash"
|
|
|
|
if ! docker version > /dev/null 2>&1; then
|
|
echo '>>> Docker is not installed: cannot proceed for e2e test suite'
|
|
fi
|
|
|
|
if ! docker inspect "${DOCKER_BASE_IMAGE}" > /dev/null 2>&1; then
|
|
echo '>>> Downloading base Docker image'
|
|
docker pull "${DOCKER_BASE_IMAGE}"
|
|
fi
|
|
|
|
if [ ! -z $PREWIPE ] && [ "$PREWIPE" == "y" ]; then
|
|
cleanup ${DOCKER_CONTAINER_NAME}
|
|
fi
|
|
|
|
# Custom configuration to run tests with the master socket.
|
|
IFS='.' read -ra version_parts <<< "$HAPROXY_VERSION"
|
|
major="${version_parts[0]}"
|
|
minor="${version_parts[1]}"
|
|
|
|
if [[ "$major" -eq "2" && "$minor" -ge "7" || "$major" -gt "2" ]] ; then
|
|
HAPROXY_FLAGS="-W -db -S /var/lib/haproxy/master -f /usr/local/etc/haproxy/haproxy.cfg"
|
|
VARIANT="-master-socket"
|
|
fi
|
|
|
|
if [ ! -z $(docker ps -q -f name=${DOCKER_CONTAINER_NAME}) ]; then
|
|
echo ">>> Skipping provisioning the e2e environment, ${DOCKER_CONTAINER_NAME} already present"
|
|
else
|
|
echo '>>> Provisioning the e2e environment'
|
|
docker run \
|
|
--rm \
|
|
--detach \
|
|
--name ${DOCKER_CONTAINER_NAME} \
|
|
--publish "${E2E_PORT}":8080 \
|
|
--security-opt seccomp=unconfined \
|
|
"${DOCKER_BASE_IMAGE}" $HAPROXY_FLAGS > /dev/null 2>&1
|
|
docker cp "${ROOT_DIR}/build/dataplaneapi" ${DOCKER_CONTAINER_NAME}:/usr/local/bin/dataplaneapi
|
|
docker cp "${E2E_DIR}/fixtures/dataplaneapi${VARIANT}.yaml" ${DOCKER_CONTAINER_NAME}:/etc/haproxy/dataplaneapi.yaml
|
|
docker cp "${E2E_DIR}/fixtures/haproxy.cfg" ${DOCKER_CONTAINER_NAME}:/etc/haproxy/haproxy.cfg
|
|
docker cp "${E2E_DIR}/fixtures/userlist.cfg" ${DOCKER_CONTAINER_NAME}:/etc/haproxy/userlist.cfg
|
|
docker exec -d ${DOCKER_CONTAINER_NAME} sh -c "CI_DATAPLANE_RELOAD_DELAY_OVERRIDE=1 dataplaneapi -f /etc/haproxy/dataplaneapi.yaml"
|
|
fi
|
|
|
|
echo '>>> Waiting dataplane API to be up and running'
|
|
count=1
|
|
DATAPLANE_USER=$(grep insecure-password ${E2E_DIR}/fixtures/userlist.cfg | awk '{print $2}')
|
|
DATAPLANE_PASS=$(grep insecure-password ${E2E_DIR}/fixtures/userlist.cfg | awk '{print $4}')
|
|
until curl -s "${DATAPLANE_USER}:${DATAPLANE_PASS}@${LOCAL_IP_ADDRESS}":"${E2E_PORT}${BASE_PATH}/specification" 2>&1 1>/dev/null; do
|
|
sleep 1;
|
|
((count++))
|
|
if [ $count -eq 10 ]; then
|
|
echo ">>> timeout waiting for dataplaneapi to start"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# deferring Docker container removal
|
|
# shellcheck disable=SC1090
|
|
|
|
if [ ! -z $SKIP_CLEANUP ] && [ "$SKIP_CLEANUP" == "y" ]; then
|
|
echo ">>> Container will be left running: ${DOCKER_CONTAINER_NAME}"
|
|
else
|
|
trap 'cleanup ${DOCKER_CONTAINER_NAME}' EXIT
|
|
fi
|
|
|
|
echo '>>> Starting test suite'
|
|
if [ ! -z $TESTNAME ]; then
|
|
bats -t "${E2E_DIR}"/tests/${TESTNAME}
|
|
elif [ ! -z $TESTPART ]; then
|
|
set +e
|
|
echo $TESTPART | grep -q -e "[[:digit:]]/[[:digit:]]"
|
|
if [ $? != 0 ]; then
|
|
echo "invalid TESTPART argument: ${TESTPART}"
|
|
exit 1
|
|
fi
|
|
set -e
|
|
PARALLEL_RUNS=$(echo $TESTPART | cut -d\/ -f 2)
|
|
THIS_RUN=$(($(echo $TESTPART | cut -d\/ -f 1) - 1))
|
|
|
|
declare -a SELECTED_TESTS
|
|
|
|
echo ">>> Selected partial run via TESTPART variable, running ${TESTPART} of tests:"
|
|
ALL_TESTS=($(ls "${E2E_DIR}"/tests))
|
|
ALL_TESTS_COUNT=${#ALL_TESTS[@]}
|
|
for TESTNR in $(seq 0 $(( $ALL_TESTS_COUNT - 1 )) ); do
|
|
if [ $(($TESTNR % $PARALLEL_RUNS)) == $THIS_RUN ]; then
|
|
echo ">>> -> ${ALL_TESTS[$TESTNR]}"
|
|
SELECTED_TESTS+=("${E2E_DIR}"/tests/${ALL_TESTS[$TESTNR]})
|
|
fi
|
|
done
|
|
bats -t ${SELECTED_TESTS[*]}
|
|
else
|
|
bats -t "${E2E_DIR}"/tests/*
|
|
fi
|
|
|