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