]> git.proxmox.com Git - ceph.git/blame - ceph/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh
import ceph 15.2.10
[ceph.git] / ceph / src / pybind / mgr / dashboard / run-frontend-e2e-tests.sh
CommitLineData
11fdf7f2
TL
1#!/usr/bin/env bash
2
3set -e
4
e306af50
TL
5start_ceph() {
6 cd $FULL_PATH_BUILD_DIR
7
8 MGR=2 RGW=1 ../src/vstart.sh -n -d
9 sleep 10
10
11 # Create an Object Gateway User
12 ./bin/radosgw-admin user create --uid=dev --display-name=Developer --system
13 # Set the user-id
14 ./bin/ceph dashboard set-rgw-api-user-id dev
15 # Obtain and set access and secret key for the previously created user. $() is safer than backticks `..`
cd265ab1
TL
16 RGW_ACCESS_KEY_FILE="/tmp/rgw-user-access-key.txt"
17 printf "$(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].access_key)" > "${RGW_ACCESS_KEY_FILE}"
18 ./bin/ceph dashboard set-rgw-api-access-key -i "${RGW_ACCESS_KEY_FILE}"
19 RGW_SECRET_KEY_FILE="/tmp/rgw-user-secret-key.txt"
20 printf "$(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].secret_key)" > "${RGW_SECRET_KEY_FILE}"
21 ./bin/ceph dashboard set-rgw-api-secret-key -i "${RGW_SECRET_KEY_FILE}"
e306af50
TL
22 # Set SSL verify to False
23 ./bin/ceph dashboard set-rgw-api-ssl-verify False
24
25 CYPRESS_BASE_URL=$(./bin/ceph mgr services | jq -r .dashboard)
26}
27
11fdf7f2
TL
28stop() {
29 if [ "$REMOTE" == "false" ]; then
9f95a23c 30 cd ${FULL_PATH_BUILD_DIR}
11fdf7f2
TL
31 ../src/stop.sh
32 fi
33 exit $1
34}
35
e306af50
TL
36check_device_available() {
37 failed=false
38
39 if [ "$DEVICE" == "docker" ]; then
40 [ -x "$(command -v docker)" ] || failed=true
41 else
42 cd $DASH_DIR/frontend
43 npx cypress verify
44
45 case "$DEVICE" in
46 chrome)
47 [ -x "$(command -v chrome)" ] || [ -x "$(command -v google-chrome)" ] ||
48 [ -x "$(command -v google-chrome-stable)" ] || failed=true
49 ;;
50 chromium)
51 [ -x "$(command -v chromium)" ] || [ -x "$(command -v chromium-browser)" ] || failed=true
52 ;;
53 esac
54 fi
55
56 if [ "$failed" = "true" ]; then
57 echo "ERROR: $DEVICE not found. You need to install $DEVICE or \
58 use a different device. Supported devices: chrome (default), chromium, electron or docker."
59 stop 1
60 fi
61}
62
63: ${CYPRESS_BASE_URL:=''}
64: ${CYPRESS_LOGIN_PWD:=''}
65: ${CYPRESS_LOGIN_USER:=''}
66: ${DEVICE:="chrome"}
67: ${NO_COLOR:=1}
68: ${CYPRESS_ARGS:=''}
69: ${REMOTE:='false'}
11fdf7f2 70
9f95a23c 71while getopts 'd:p:r:u:' flag; do
11fdf7f2
TL
72 case "${flag}" in
73 d) DEVICE=$OPTARG;;
e306af50 74 p) CYPRESS_LOGIN_PWD=$OPTARG;;
11fdf7f2 75 r) REMOTE='true'
e306af50
TL
76 CYPRESS_BASE_URL=$OPTARG;;
77 u) CYPRESS_LOGIN_USER=$OPTARG;;
11fdf7f2
TL
78 esac
79done
80
11fdf7f2 81DASH_DIR=`pwd`
9f95a23c 82[ -z "$BUILD_DIR" ] && BUILD_DIR=build
9f95a23c
TL
83cd ../../../../${BUILD_DIR}
84FULL_PATH_BUILD_DIR=`pwd`
11fdf7f2 85
e306af50 86[[ "$(command -v npm)" == '' ]] && . ${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/node-env/bin/activate
11fdf7f2 87
e306af50 88: ${CYPRESS_CACHE_FOLDER:="${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/cypress"}
11fdf7f2 89
e306af50
TL
90export CYPRESS_BASE_URL CYPRESS_CACHE_FOLDER CYPRESS_LOGIN_USER CYPRESS_LOGIN_PWD NO_COLOR
91
92check_device_available
11fdf7f2 93
e306af50
TL
94if [ "$CYPRESS_BASE_URL" == "" ]; then
95 start_ceph
96fi
9f95a23c 97
11fdf7f2 98cd $DASH_DIR/frontend
11fdf7f2 99
e306af50
TL
100case "$DEVICE" in
101 docker)
102 failed=0
103 docker run \
104 -v $(pwd):/e2e \
105 -w /e2e \
106 --env CYPRESS_BASE_URL \
107 --env CYPRESS_LOGIN_USER \
108 --env CYPRESS_LOGIN_PWD \
109 --name=e2e \
110 --network=host \
111 cypress/included:4.4.0 || failed=1
112 stop $failed
113 ;;
114 *)
115 npx cypress run $CYPRESS_ARGS --browser $DEVICE --headless || stop 1
116 ;;
117esac
11fdf7f2 118
e306af50 119stop 0