summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh')
-rwxr-xr-xsrc/pybind/mgr/dashboard/run-frontend-e2e-tests.sh85
1 files changed, 85 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 00000000..280debdc
--- /dev/null
+++ b/src/pybind/mgr/dashboard/run-frontend-e2e-tests.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+
+set -e
+
+stop() {
+ if [ "$REMOTE" == "false" ]; then
+ cd $BUILD_DIR
+ ../src/stop.sh
+ fi
+ exit $1
+}
+
+BASE_URL=''
+DEVICE=''
+REMOTE='false'
+
+while getopts 'd:r:' flag; do
+ case "${flag}" in
+ d) DEVICE=$OPTARG;;
+ r) REMOTE='true'
+ # jq is expecting a string literal, otherwise it will fail on the url ':'.
+ # We need to ensure that jq gets a json string for assignment; we achieve
+ # that by introducing literal double quotes (i.e., '"').
+ BASE_URL='"'$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`
+
+cd ../../../../build
+BUILD_DIR=`pwd`
+
+if [ "$BASE_URL" == "" ]; then
+ 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
+ RGW_ACCESS_KEY_FILE="/tmp/rgw-user-access-key.txt"
+ printf "$(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].access_key)" > "${RGW_ACCESS_KEY_FILE}"
+ ./bin/ceph dashboard set-rgw-api-access-key -i "${RGW_ACCESS_KEY_FILE}"
+ RGW_SECRET_KEY_FILE="/tmp/rgw-user-secret-key.txt"
+ printf "$(./bin/radosgw-admin user info --uid=dev | jq -r .keys[0].secret_key)" > "${RGW_SECRET_KEY_FILE}"
+ ./bin/ceph dashboard set-rgw-api-secret-key -i "${RGW_SECRET_KEY_FILE}"
+ # Set SSL verify to False
+ ./bin/ceph dashboard set-rgw-api-ssl-verify False
+
+ BASE_URL=`./bin/ceph mgr services | jq .dashboard`
+fi
+
+cd $DASH_DIR/frontend
+jq .[].target=$BASE_URL proxy.conf.json.sample > proxy.conf.json
+
+[ -z $(command -v npm) ] && . $BUILD_DIR/src/pybind/mgr/dashboard/node-env/bin/activate
+npm ci
+
+if [ $DEVICE == "chrome" ]; then
+ npm run e2e -- --dev-server-target --baseUrl=$(echo $BASE_URL | tr -d '"') || stop 1
+ stop 0
+elif [ $DEVICE == "docker" ]; then
+ failed=0
+ docker run -d -v $(pwd):/workdir --net=host --name angular-e2e-container rogargon/angular-e2e || failed=1
+ docker exec angular-e2e-container npm run e2e || failed=1
+ docker stop angular-e2e-container
+ docker rm angular-e2e-container
+ stop $failed
+else
+ echo "ERROR: Device not recognized. Valid devices are 'chrome' and 'docker'."
+ stop 1
+fi