diff options
Diffstat (limited to '')
-rwxr-xr-x | src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh b/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh new file mode 100755 index 000000000..a481a983f --- /dev/null +++ b/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh @@ -0,0 +1,151 @@ +#!/usr/bin/env bash + +set -e + +CLUSTERS=("1" "2") + +ceph() { + ${FULL_PATH_BUILD_DIR}/../src/mrun 1 ceph $@ +} + +ceph2() { + ${FULL_PATH_BUILD_DIR}/../src/mrun 2 ceph $@ +} + +ceph_all() { + ceph $@ + ceph2 $@ +} + +start_ceph() { + cd $FULL_PATH_BUILD_DIR + + for cluster in ${CLUSTERS[@]}; do + export CEPH_OUT_CLIENT_DIR=${FULL_PATH_BUILD_DIR}/run/${cluster}/out/client + MGR=2 RGW=1 ../src/mstart.sh $cluster -n -d + done + + set -x + + # Create an Object Gateway User + ceph_all dashboard set-rgw-credentials + + # Set SSL verify to False + ceph_all dashboard set-rgw-api-ssl-verify False + + CYPRESS_BASE_URL=$(ceph mgr services | jq -r .dashboard) + CYPRESS_CEPH2_URL=$(ceph2 mgr services | jq -r .dashboard) + + # start rbd-mirror daemon in the cluster + KEY=$(ceph auth get client.admin --format=json | jq -r .[0].key) + MON_CLUSTER_1=$(grep "mon host" ${FULL_PATH_BUILD_DIR}/run/1/ceph.conf | awk '{print $4}') + ${FULL_PATH_BUILD_DIR}/bin/rbd-mirror --mon_host $MON_CLUSTER_1 --key $KEY -c ${FULL_PATH_BUILD_DIR}/run/1/ceph.conf + + set +x +} + +stop() { + if [ "$REMOTE" == "false" ]; then + cd ${FULL_PATH_BUILD_DIR} + for cluster in ${CLUSTERS[@]}; do + ../src/mstop.sh $cluster + done + pids=$(pgrep rbd-mirror) + if [ -n "$pids" ]; then + echo Killing rbd-mirror processes: $pids + kill -9 $pids + fi + fi + exit $1 +} + +check_device_available() { + failed=false + + if [ "$DEVICE" == "docker" ]; then + [ -x "$(command -v docker)" ] || failed=true + else + cd $DASH_DIR/frontend + npx cypress verify + + case "$DEVICE" in + chrome) + [ -x "$(command -v chrome)" ] || [ -x "$(command -v google-chrome)" ] || + [ -x "$(command -v google-chrome-stable)" ] || failed=true + ;; + chromium) + [ -x "$(command -v chromium)" ] || [ -x "$(command -v chromium-browser)" ] || failed=true + ;; + esac + fi + + if [ "$failed" = "true" ]; then + echo "ERROR: $DEVICE not found. You need to install $DEVICE or \ + use a different device. Supported devices: chrome (default), chromium, electron or docker." + stop 1 + fi +} + +: ${CYPRESS_BASE_URL:=''} +: ${CYPRESS_CEPH2_URL:=''} +: ${CYPRESS_LOGIN_PWD:=''} +: ${CYPRESS_LOGIN_USER:=''} +: ${DEVICE:="chrome"} +: ${NO_COLOR:=1} +: ${CYPRESS_ARGS:=''} +: ${REMOTE:='false'} + +while getopts 'd:p:r:u:' flag; do + case "${flag}" in + d) DEVICE=$OPTARG;; + p) CYPRESS_LOGIN_PWD=$OPTARG;; + r) REMOTE='true' + CYPRESS_BASE_URL=$OPTARG;; + u) CYPRESS_LOGIN_USER=$OPTARG;; + esac +done + +DASH_DIR=`pwd` +[ -z "$BUILD_DIR" ] && BUILD_DIR=build +cd ../../../../${BUILD_DIR} +FULL_PATH_BUILD_DIR=`pwd` + +[[ "$(command -v npm)" == '' ]] && . ${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/frontend/node-env/bin/activate + +: ${CYPRESS_CACHE_FOLDER:="${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/cypress"} + +export CYPRESS_BASE_URL CYPRESS_CACHE_FOLDER CYPRESS_LOGIN_USER CYPRESS_LOGIN_PWD NO_COLOR CYPRESS_CEPH2_URL + +check_device_available + +if [ "$CYPRESS_BASE_URL" == "" ]; then + start_ceph +fi + +cd $DASH_DIR/frontend + +# Remove existing XML results +rm -f cypress/reports/results-*.xml || true + +case "$DEVICE" in + docker) + failed=0 + CYPRESS_VERSION=$(cat package.json | grep '"cypress"' | grep -o "[0-9]\.[0-9]\.[0-9]") + docker run \ + -v $(pwd):/e2e \ + -w /e2e \ + --env CYPRESS_BASE_URL \ + --env CYPRESS_LOGIN_USER \ + --env CYPRESS_LOGIN_PWD \ + --env CYPRESS_CEPH2_URL \ + --name=e2e \ + --network=host \ + cypress/included:${CYPRESS_VERSION} || failed=1 + stop $failed + ;; + *) + npx cypress run $CYPRESS_ARGS --browser $DEVICE --headless || stop 1 + ;; +esac + +stop 0 |