]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh
import 15.2.4
[ceph.git] / ceph / src / pybind / mgr / dashboard / run-frontend-e2e-tests.sh
index 043e4e00a3cff095772a637094f949fa28e8f3aa..6512cb1bf1abcd414ff3e4b485b84aa0b8a62934 100755 (executable)
@@ -2,6 +2,25 @@
 
 set -e
 
+start_ceph() {
+    cd $FULL_PATH_BUILD_DIR
+
+    MGR=2 RGW=1 ../src/vstart.sh -n -d
+    sleep 10
+
+    # Create an Object Gateway User
+    ./bin/radosgw-admin user create --uid=dev --display-name=Developer --system
+    # Set the user-id
+    ./bin/ceph dashboard set-rgw-api-user-id dev
+    # Obtain and set access and secret key for the previously created user. $() is safer than backticks `..`
+    ./bin/ceph dashboard set-rgw-api-access-key $(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].access_key)
+    ./bin/ceph dashboard set-rgw-api-secret-key $(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].secret_key)
+    # Set SSL verify to False
+    ./bin/ceph dashboard set-rgw-api-ssl-verify False
+
+    CYPRESS_BASE_URL=$(./bin/ceph mgr services | jq -r .dashboard)
+}
+
 stop() {
     if [ "$REMOTE" == "false" ]; then
         cd ${FULL_PATH_BUILD_DIR}
@@ -10,78 +29,87 @@ stop() {
     exit $1
 }
 
-BASE_URL=''
-DEVICE=''
-E2E_LOGIN_USER=''
-E2E_LOGIN_PWD=''
-REMOTE='false'
+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_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) E2E_LOGIN_PWD=$OPTARG;;
+    p) CYPRESS_LOGIN_PWD=$OPTARG;;
     r) REMOTE='true'
-       BASE_URL=$OPTARG;;
-    u) E2E_LOGIN_USER=$OPTARG;;
+       CYPRESS_BASE_URL=$OPTARG;;
+    u) CYPRESS_LOGIN_USER=$OPTARG;;
   esac
 done
 
-if [ "$DEVICE" == "" ]; then
-    if [ -x "$(command -v google-chrome)" ] || [ -x "$(command -v google-chrome-stable)" ]; then
-        DEVICE="chrome"
-    elif [ -x "$(command -v docker)" ]; then
-        DEVICE="docker"
-    else
-        echo "ERROR: Chrome and Docker not found. You need to install one of  \
-them to run the e2e frontend tests."
-        stop 1
-    fi
-fi
-
 DASH_DIR=`pwd`
-
 [ -z "$BUILD_DIR" ] && BUILD_DIR=build
-
 cd ../../../../${BUILD_DIR}
 FULL_PATH_BUILD_DIR=`pwd`
 
-if [ "$BASE_URL" == "" ]; then
-    MGR=2 RGW=1 ../src/vstart.sh -n -d
-    sleep 10
+[[ "$(command -v npm)" == '' ]] && . ${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/node-env/bin/activate
 
-    # Create an Object Gateway User
-    ./bin/radosgw-admin user create --uid=dev --display-name=Developer --system
-    # Set the user-id
-    ./bin/ceph dashboard set-rgw-api-user-id dev
-    # Obtain and set access and secret key for the previously created user. $() is safer than backticks `..`
-    ./bin/ceph dashboard set-rgw-api-access-key $(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].access_key)
-    ./bin/ceph dashboard set-rgw-api-secret-key $(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].secret_key)
-    # Set SSL verify to False
-    ./bin/ceph dashboard set-rgw-api-ssl-verify False
+: ${CYPRESS_CACHE_FOLDER:="${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/cypress"}
 
-    BASE_URL=$(./bin/ceph mgr services | jq -r .dashboard)
-fi
+export CYPRESS_BASE_URL CYPRESS_CACHE_FOLDER CYPRESS_LOGIN_USER CYPRESS_LOGIN_PWD NO_COLOR
+
+check_device_available
 
-export BASE_URL E2E_LOGIN_USER E2E_LOGIN_PWD
+if [ "$CYPRESS_BASE_URL" == "" ]; then
+    start_ceph
+fi
 
 cd $DASH_DIR/frontend
 
-[[ "$(command -v npm)" == '' ]] && . ${FULL_PATH_BUILD_DIR}/src/pybind/mgr/dashboard/node-env/bin/activate
+case "$DEVICE" in
+    docker)
+        failed=0
+        docker run \
+            -v $(pwd):/e2e \
+            -w /e2e \
+            --env CYPRESS_BASE_URL \
+            --env CYPRESS_LOGIN_USER \
+            --env CYPRESS_LOGIN_PWD \
+            --name=e2e \
+            --network=host \
+            cypress/included:4.4.0 || failed=1
+        stop $failed
+        ;;
+    *)
+        npx cypress run $CYPRESS_ARGS --browser $DEVICE --headless || stop 1
+        ;;
+esac
 
-if [ "$DEVICE" == "chrome" ]; then
-    npm run e2e:ci || stop 1
-    stop 0
-elif [ "$DEVICE" == "docker" ]; then
-    failed=0
-    cat <<EOF > .env
-BASE_URL
-E2E_LOGIN_USER
-E2E_LOGIN_PWD
-EOF
-    docker run --rm -v $(pwd):/ceph --env-file .env --name=e2e --network=host --entrypoint "" \
-        docker.io/rhcsdashboard/e2e npm run e2e:ci || failed=1
-    stop $failed
-else
-    echo "ERROR: Device not recognized. Valid devices are 'chrome' and 'docker'."
-    stop 1
-fi
+stop 0