Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
gitpod-io
GitHub Repository: gitpod-io/gitpod
Path: blob/main/test/run.sh
2486 views
1
#!/usr/bin/env bash
2
#
3
# Convenience script to run our integration tests suites.
4
#
5
# Usage:
6
#
7
# run.sh --suite [suite] --report [report_file]
8
#
9
# Examples
10
#
11
# run.sh This will run all test suites
12
# run.sh -s ide This will run just the 'ide' test suite
13
# run.sh -s ide -r report.csv This will run just the 'ide' test suite with the report for the quality assurance
14
#
15
16
set -euo pipefail
17
set -x
18
19
REPORT=""
20
TEST_SUITE=all
21
opt=""
22
optarg=""
23
while getopts rs-: opt; do
24
optarg="${!OPTIND}"
25
[[ "$opt" = - ]] && opt="-$OPTARG"
26
case "-$opt" in
27
-r|--report)
28
REPORT=${optarg}
29
shift
30
;;
31
-s|--suit)
32
TEST_SUITE=${optarg}
33
shift
34
;;
35
*) ;;
36
esac
37
done
38
shift $((OPTIND - 1))
39
40
THIS_DIR="$(dirname "$(readlink -f "$0")")"
41
FAILURE_COUNT=0
42
LOGS_DIR=$(mktemp -d)
43
44
WEBAPP_TEST_LIST="$THIS_DIR/tests/components/database $THIS_DIR/tests/components/server"
45
JETBRAINS_TESTS="$THIS_DIR/tests/ide/jetbrains"
46
VSCODE_TESTS="$THIS_DIR/tests/ide/vscode"
47
SSH_TESTS="$THIS_DIR/tests/ide/ssh"
48
IDE_TEST_LIST="$SSH_TESTS $VSCODE_TESTS $JETBRAINS_TESTS"
49
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"
50
51
case $TEST_SUITE in
52
"webapp")
53
TEST_LIST="$WEBAPP_TEST_LIST"
54
;;
55
"ide")
56
TEST_LIST="$IDE_TEST_LIST"
57
;;
58
"jetbrains")
59
TEST_LIST="$JETBRAINS_TESTS"
60
;;
61
"vscode")
62
TEST_LIST="$VSCODE_TESTS"
63
;;
64
"ssh")
65
TEST_LIST="$SSH_TESTS"
66
;;
67
"workspace")
68
TEST_LIST="${WORKSPACE_TEST_LIST}"
69
;;
70
"" | "all")
71
TEST_LIST="${WEBAPP_TEST_LIST} ${IDE_TEST_LIST} ${WORKSPACE_TEST_LIST}"
72
;;
73
*)
74
echo "Unknown test suite '${TEST_SUITE}'"
75
exit 1
76
esac
77
78
args=()
79
if [ "${REPORT}" != "" ]; then
80
args+=( "--json" )
81
fi
82
args+=( "-kubeconfig=${KUBECONFIG:-/home/gitpod/.kube/config}" )
83
args+=( "-namespace=${NAMESPACE:-default}" )
84
args+=( "-timeout=120m" )
85
86
if [[ "${GITPOD_REPO_ROOT:-}" != "" ]]; then
87
echo "Running in Gitpod workspace. Fetching USER_NAME and USER_TOKEN"
88
USER_NAME="$(kubectl --context=dev -n werft get secret integration-test-user -o jsonpath='{.data.username}' | base64 -d)"
89
USER_TOKEN="$(kubectl --context=dev -n werft get secret integration-test-user -o jsonpath='{.data.token}' | base64 -d)"
90
export USER_NAME
91
export USER_TOKEN
92
else
93
echo "Using INTEGRATION_TEST_USERNAME and INTEGRATION_TEST_USER_TOKEN for USER_NAME and USER_TOKEN"
94
USER_NAME="${INTEGRATION_TEST_USERNAME}"
95
USER_TOKEN="${INTEGRATION_TEST_USER_TOKEN}"
96
export USER_NAME
97
export USER_TOKEN
98
fi
99
100
[[ "$USER_NAME" != "" ]] && args+=( "-username=$USER_NAME" )
101
102
go install github.com/jstemmer/go-junit-report/v2@latest
103
104
if ! npm list -g xunit-viewer; then npm install -g xunit-viewer; fi
105
106
RESULTS_DIR="${THIS_DIR}/results/$(date +%Y-%m-%d-%H-%M-%S)"
107
mkdir -p "${RESULTS_DIR}"
108
109
if [ "$TEST_SUITE" == "workspace" ]; then
110
TEST_NAME="workspace"
111
LOG_FILE="${LOGS_DIR}/${TEST_NAME}.log"
112
113
cd "$THIS_DIR"
114
echo "running integration for ${TEST_NAME}"
115
116
set +e
117
# shellcheck disable=SC2086
118
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
119
RC=${PIPESTATUS[0]}
120
set -e
121
122
if [ "${RC}" -ne "0" ]; then
123
FAILURE_COUNT=$((FAILURE_COUNT+1))
124
fi
125
126
set +e
127
# shellcheck disable=SC2086
128
go test -v $TEST_LIST "${args[@]}" -labels="type=maintenance" 2>&1
129
RC=${PIPESTATUS[0]}
130
set -e
131
132
if [ "${RC}" -ne "0" ]; then
133
FAILURE_COUNT=$((FAILURE_COUNT+1))
134
fi
135
136
cd -
137
if [ "${REPORT}" != "" ]; then
138
"${THIS_DIR}/report.sh" "${LOG_FILE}" > "$REPORT"
139
fi
140
else
141
for TEST_PATH in ${TEST_LIST}
142
do
143
TEST_NAME=$(basename "${TEST_PATH}")
144
LOG_FILE="${LOGS_DIR}/${TEST_NAME}.log"
145
echo "running integration for ""${TEST_NAME}"""
146
147
cd "${TEST_PATH}"
148
set +e
149
go test -parallel=3 -v ./... "${args[@]}" 2>&1 | go-junit-report -subtest-mode=exclude-parents -set-exit-code -out "${RESULTS_DIR}/TEST-${TEST_NAME}.xml" -iocopy
150
RC=${PIPESTATUS[0]}
151
set -e
152
cd -
153
154
if [ "${RC}" -ne "0" ]; then
155
FAILURE_COUNT=$((FAILURE_COUNT+1))
156
fi
157
done
158
fi
159
160
set +e
161
xunit-viewer -r "${RESULTS_DIR}" -o "${THIS_DIR}/test-output.html"
162
pkill -f "port-forward"
163
set -e
164
165
exit $FAILURE_COUNT
166
167