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