go.ligato.io/vpp-agent/v3@v3.5.0/tests/e2e/e2etest/run_e2e.sh (about) 1 #!/usr/bin/env bash 2 set -Eeuo pipefail 3 4 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 5 6 args=($*) 7 8 echo "Preparing e2e tests.." 9 10 export VPP_AGENT="${VPP_AGENT:-ligato/vpp-agent:latest}" 11 export VPP_AGENT_CUSTOM="vppagent.test.ligato.io:custom" 12 export TESTDATA_DIR="$SCRIPT_DIR/resources" 13 export TESTLOGS_DIR="${TESTLOGS_DIR:-$SCRIPT_DIR/logs}" 14 export TESTREPORT_DIR="${TESTREPORT_DIR:-$SCRIPT_DIR/reports}" 15 export GOTESTSUM_FORMAT="${GOTESTSUM_FORMAT:-testname}" 16 export GOTESTSUM_JUNITFILE="${GOTESTSUM_JUNITFILE:-}" 17 export DOCKER_BUILDKIT=1 18 19 testname="vpp-agent-e2e-test" 20 imgname="vpp-agent-e2e-tests" 21 vppagentcontainernameprefix="e2e-test-vppagent-agent" 22 microservicecontainernameprefix="e2e-test-ms" 23 etcdcontainername="e2e-test-etcd" 24 dnsservercontainername="e2e-test-dns" 25 sharevolumename="share-for-vpp-agent-e2e-tests" 26 27 # Compile agentctl for testing 28 go build -o ${SCRIPT_DIR}/agentctl.test \ 29 -tags 'osusergo netgo' \ 30 -ldflags '-w -s -extldflags "-static"' \ 31 -trimpath \ 32 ./cmd/agentctl 33 34 # Compile testing suite 35 go test -c -o "${SCRIPT_DIR}"/e2e.test \ 36 -tags 'osusergo netgo e2e' \ 37 -ldflags '-w -s -extldflags "-static"' \ 38 -trimpath \ 39 ./tests/e2e/ 40 41 # Build testing image 42 docker build \ 43 -f "${SCRIPT_DIR}"/Dockerfile.e2e \ 44 --tag "${imgname}" \ 45 "${SCRIPT_DIR}" 46 47 # Build custom VPP-Agent image (needed in some tests) 48 docker run -d -e ETCD_CONFIG=disabled --name customVPPAgent ${VPP_AGENT} 49 docker exec -i customVPPAgent sh -c "apt-get update && apt-get install -y iptables" 50 docker commit customVPPAgent ${VPP_AGENT_CUSTOM} 51 docker rm -f customVPPAgent 52 53 run_e2e() { 54 gotestsum --raw-command -- \ 55 go tool test2json -t -p "e2e" \ 56 "${SCRIPT_DIR}"/e2e.test -test.v "$@" 57 } 58 59 cleanup() { 60 echo "Cleaning up e2e tests.." 61 set -x 62 docker stop -t 1 "${testname}" 2>/dev/null 63 docker rm -v "${testname}" 2>/dev/null 64 set +x 65 66 echo "Stopping microservice containers if running" 67 if [ "$(docker ps -a | grep "${microservicecontainernameprefix}")" ]; then 68 msContainerIDs=$(docker container ls -q --filter name=${microservicecontainernameprefix}) 69 set -x 70 docker stop -t 1 ${msContainerIDs} 2>/dev/null 71 docker rm -v ${msContainerIDs} 2>/dev/null 72 set +x 73 fi 74 75 echo "Stopping vpp-agent containers if running" 76 if [ "$(docker ps -a | grep "${vppagentcontainernameprefix}")" ]; then 77 vppagentContainerIDs=$(docker container ls -q --filter name=${vppagentcontainernameprefix}) 78 set -x 79 docker stop -t 1 ${vppagentContainerIDs} 2>/dev/null 80 docker rm -v ${vppagentContainerIDs} 2>/dev/null 81 set +x 82 fi 83 84 echo "Stopping etcd container if running" 85 if [ "$(docker ps -a | grep "${etcdcontainername}")" ]; then 86 set -x 87 docker stop -t 1 "${etcdcontainername}" 2>/dev/null 88 docker rm -v "${etcdcontainername}" 2>/dev/null 89 set +x 90 fi 91 92 echo "Stopping DNS server container if running" 93 if [ "$(docker ps -a | grep "${dnsservercontainername}")" ]; then 94 set -x 95 docker stop -t 1 "${dnsservercontainername}" 2>/dev/null 96 docker rm -v "${dnsservercontainername}" 2>/dev/null 97 set +x 98 fi 99 100 echo "Removing volume for sharing files between containers" 101 if [ "$(docker volume ls | grep "${sharevolumename}")" ]; then 102 set -x 103 docker volume rm -f "${sharevolumename}" 104 set +x 105 fi 106 107 } 108 109 trap 'cleanup' EXIT 110 111 echo "Creating volume for sharing files between containers.." 112 if docker volume create "${sharevolumename}" 113 then 114 echo >&2 -e "\e[32m...created\e[0m" 115 else 116 res=$? 117 echo >&2 -e "\e[31m...volume creation failed!\e[0m (exit code: $res)" 118 exit $res 119 fi 120 121 mkdir -vp "${TESTREPORT_DIR}" 122 mkdir -vp "${TESTLOGS_DIR}" 123 124 vppver=$(docker run --rm -i "$VPP_AGENT" dpkg-query -f '${Version}' -W vpp) 125 126 echo "==========================================================================" 127 echo -e " E2E TEST - $(date) " 128 echo "==========================================================================" 129 echo "- VPP_AGENT: $VPP_AGENT" 130 echo "- image ID: $(docker inspect $VPP_AGENT -f '{{.Id}}')" 131 echo "- created: $(docker inspect $VPP_AGENT -f '{{.Created}}')" 132 echo "- VPP version: $vppver" 133 echo "--------------------------------------------------------------------------" 134 135 # Run e2e tests 136 #if run_e2e ${args[@]:-} 137 if docker run -i \ 138 --name "${testname}" \ 139 --pid=host \ 140 --privileged \ 141 --label io.ligato.vpp-agent.testsuite=e2e \ 142 --label io.ligato.vpp-agent.testname="${testname}" \ 143 --volume "${TESTREPORT_DIR}":/testreport \ 144 --volume "${TESTLOGS_DIR}":/testlogs \ 145 --volume "${TESTDATA_DIR}":/testdata:ro \ 146 --volume /var/run/docker.sock:/var/run/docker.sock \ 147 --volume "${sharevolumename}":/test-share \ 148 --env TESTDATA_DIR \ 149 --env INITIAL_LOGLVL \ 150 --env VPP_AGENT \ 151 --env GOTESTSUM_FORMAT \ 152 --env GOTESTSUM_JUNITFILE \ 153 --env RUNNER_DEBUG \ 154 --env GITHUB_WORKFLOW \ 155 ${DOCKER_ARGS-} \ 156 "${imgname}" ${args[@]:-} 157 then 158 echo >&2 "-------------------------------------------------------------" 159 echo >&2 -e " \e[32mPASSED\e[0m (took: ${SECONDS}s)" 160 echo >&2 "-------------------------------------------------------------" 161 exit 0 162 else 163 res=$? 164 echo >&2 "-------------------------------------------------------------" 165 echo >&2 -e " \e[31mFAILED!\e[0m (exit code: $res)" 166 echo >&2 "-------------------------------------------------------------" 167 exit $res 168 fi