mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
* Enable leader election in ws-manager-mk2 * Update go modules * Move workspace activity to CRD * Remove workspace activity * Cleanup * Update ws-manager-mk2 CRD * Cleanup * Restore lastActivity logic * TEST * Disable observability * Start the grpc server after leader election * Bount the source of subscribers to an informer * Cleanup * Avoid deepCopy * Remove goroutine to execute OnReconcile * Refactor last activity to be consistent acrtoss the controllers * Address feedback
166 lines
4.3 KiB
Bash
Executable File
166 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Convenience script to run our integration tests suites.
|
|
#
|
|
# Usage:
|
|
#
|
|
# run.sh --suite [suite] --report [report_file]
|
|
#
|
|
# Examples
|
|
#
|
|
# run.sh This will run all test suites
|
|
# run.sh -s ide This will run just the 'ide' test suite
|
|
# run.sh -s ide -r report.csv This will run just the 'ide' test suite with the report for the quality assurance
|
|
#
|
|
|
|
set -euo pipefail
|
|
set -x
|
|
|
|
REPORT=""
|
|
TEST_SUITE=all
|
|
opt=""
|
|
optarg=""
|
|
while getopts rs-: opt; do
|
|
optarg="${!OPTIND}"
|
|
[[ "$opt" = - ]] && opt="-$OPTARG"
|
|
case "-$opt" in
|
|
-r|--report)
|
|
REPORT=${optarg}
|
|
shift
|
|
;;
|
|
-s|--suit)
|
|
TEST_SUITE=${optarg}
|
|
shift
|
|
;;
|
|
*) ;;
|
|
esac
|
|
done
|
|
shift $((OPTIND - 1))
|
|
|
|
THIS_DIR="$(dirname "$(readlink -f "$0")")"
|
|
FAILURE_COUNT=0
|
|
LOGS_DIR=$(mktemp -d)
|
|
|
|
WEBAPP_TEST_LIST="$THIS_DIR/tests/components/database $THIS_DIR/tests/components/server"
|
|
JETBRAINS_TESTS="$THIS_DIR/tests/ide/jetbrains"
|
|
VSCODE_TESTS="$THIS_DIR/tests/ide/vscode"
|
|
SSH_TESTS="$THIS_DIR/tests/ide/ssh"
|
|
IDE_TEST_LIST="$SSH_TESTS $VSCODE_TESTS $JETBRAINS_TESTS"
|
|
WORKSPACE_TEST_LIST="$THIS_DIR/tests/components/ws-manager $THIS_DIR/tests/components/image-builder $THIS_DIR/tests/components/content-service $THIS_DIR/tests/components/ws-daemon $THIS_DIR/tests/workspace"
|
|
|
|
case $TEST_SUITE in
|
|
"webapp")
|
|
TEST_LIST="$WEBAPP_TEST_LIST"
|
|
;;
|
|
"ide")
|
|
TEST_LIST="$IDE_TEST_LIST"
|
|
;;
|
|
"jetbrains")
|
|
TEST_LIST="$JETBRAINS_TESTS"
|
|
;;
|
|
"vscode")
|
|
TEST_LIST="$VSCODE_TESTS"
|
|
;;
|
|
"ssh")
|
|
TEST_LIST="$SSH_TESTS"
|
|
;;
|
|
"workspace")
|
|
TEST_LIST="${WORKSPACE_TEST_LIST}"
|
|
;;
|
|
"" | "all")
|
|
TEST_LIST="${WEBAPP_TEST_LIST} ${IDE_TEST_LIST} ${WORKSPACE_TEST_LIST}"
|
|
;;
|
|
*)
|
|
echo "Unknown test suite '${TEST_SUITE}'"
|
|
exit 1
|
|
esac
|
|
|
|
args=()
|
|
if [ "${REPORT}" != "" ]; then
|
|
args+=( "--json" )
|
|
fi
|
|
args+=( "-kubeconfig=${KUBECONFIG:-/home/gitpod/.kube/config}" )
|
|
args+=( "-namespace=${NAMESPACE:-default}" )
|
|
args+=( "-timeout=60m" )
|
|
|
|
if [[ "${GITPOD_REPO_ROOT:-}" != "" ]]; then
|
|
echo "Running in Gitpod workspace. Fetching USER_NAME and USER_TOKEN"
|
|
USER_NAME="$(kubectl --context=dev -n werft get secret integration-test-user -o jsonpath='{.data.username}' | base64 -d)"
|
|
USER_TOKEN="$(kubectl --context=dev -n werft get secret integration-test-user -o jsonpath='{.data.token}' | base64 -d)"
|
|
export USER_NAME
|
|
export USER_TOKEN
|
|
else
|
|
echo "Using INTEGRATION_TEST_USERNAME and INTEGRATION_TEST_USER_TOKEN for USER_NAME and USER_TOKEN"
|
|
USER_NAME="${INTEGRATION_TEST_USERNAME}"
|
|
USER_TOKEN="${INTEGRATION_TEST_USER_TOKEN}"
|
|
export USER_NAME
|
|
export USER_TOKEN
|
|
fi
|
|
|
|
[[ "$USER_NAME" != "" ]] && args+=( "-username=$USER_NAME" )
|
|
|
|
go install github.com/jstemmer/go-junit-report/v2@latest
|
|
|
|
if ! npm list -g xunit-viewer; then npm install -g xunit-viewer; fi
|
|
|
|
RESULTS_DIR="${THIS_DIR}/results/$(date +%Y-%m-%d-%H-%M-%S)"
|
|
mkdir -p "${RESULTS_DIR}"
|
|
|
|
if [ "$TEST_SUITE" == "workspace" ]; then
|
|
TEST_NAME="workspace"
|
|
LOG_FILE="${LOGS_DIR}/${TEST_NAME}.log"
|
|
|
|
cd "$THIS_DIR"
|
|
echo "running integration for ${TEST_NAME}"
|
|
|
|
set +e
|
|
# shellcheck disable=SC2086
|
|
go test -p 4 -v $TEST_LIST "${args[@]}" -parallel-features=true -skip-labels="type=maintenance" 2>&1 | go-junit-report -subtest-mode=exclude-parents -set-exit-code -out "${RESULTS_DIR}/TEST-${TEST_NAME}.xml" -iocopy
|
|
RC=${PIPESTATUS[0]}
|
|
set -e
|
|
|
|
if [ "${RC}" -ne "0" ]; then
|
|
FAILURE_COUNT=$((FAILURE_COUNT+1))
|
|
fi
|
|
|
|
set +e
|
|
# shellcheck disable=SC2086
|
|
go test -v $TEST_LIST "${args[@]}" -labels="type=maintenance" 2>&1
|
|
RC=${PIPESTATUS[0]}
|
|
set -e
|
|
|
|
if [ "${RC}" -ne "0" ]; then
|
|
FAILURE_COUNT=$((FAILURE_COUNT+1))
|
|
fi
|
|
|
|
cd -
|
|
if [ "${REPORT}" != "" ]; then
|
|
"${THIS_DIR}/report.sh" "${LOG_FILE}" > "$REPORT"
|
|
fi
|
|
else
|
|
for TEST_PATH in ${TEST_LIST}
|
|
do
|
|
TEST_NAME=$(basename "${TEST_PATH}")
|
|
LOG_FILE="${LOGS_DIR}/${TEST_NAME}.log"
|
|
echo "running integration for ""${TEST_NAME}"""
|
|
|
|
cd "${TEST_PATH}"
|
|
set +e
|
|
go test -v ./... "${args[@]}" 2>&1 | go-junit-report -subtest-mode=exclude-parents -set-exit-code -out "${RESULTS_DIR}/TEST-${TEST_NAME}.xml" -iocopy
|
|
RC=${PIPESTATUS[0]}
|
|
set -e
|
|
cd -
|
|
|
|
if [ "${RC}" -ne "0" ]; then
|
|
FAILURE_COUNT=$((FAILURE_COUNT+1))
|
|
fi
|
|
done
|
|
fi
|
|
|
|
set +e
|
|
xunit-viewer -r "${RESULTS_DIR}" -o "${THIS_DIR}/test-output.html"
|
|
pkill -f "port-forward"
|
|
set -e
|
|
|
|
exit $FAILURE_COUNT
|