forked from istio/istio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
go-ordered-test
executable file
·58 lines (49 loc) · 1.72 KB
/
go-ordered-test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/env bash
# Copyright Istio Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# This script runs go tests in a package, but each test is run individually. This helps
# isolate tests that are improperly depending on global state modification of other tests
# Usage: `go test -p 1 -exec $PWD/tools/go-ordered-test ./...`
# Supported `go test` flags: -v, -race, -run, -count. All others are ignored (-timeout, etc)
set -u
red='\e[0;31m'
green='\e[0;32m'
yellow='\e[0;33m'
clr='\e[0m'
binary="${1}"
RUN="."
COUNT=1
VERBOSE=""
while [[ "$#" -gt 0 ]]; do
case $1 in
-test.v=true) VERBOSE=true ;;
-test.run=*) RUN="${1#-test.run=}" ;;
-test.count=*) COUNT="${1#-test.count=}" ;;
esac
shift
done
RESULTS=/tmp/test-results"$(dirname ${binary})"
mkdir -p "${RESULTS}"
code=0
for testname in $("${binary}" -test.list "${RUN}" | grep '^Test'); do
"${binary}" -test.run '^'"${testname}"'$' -test.count "${COUNT}" -test.v &> "${RESULTS}/${testname}"
# shellcheck disable=SC2181
if [[ $? != 0 ]]; then
echo -e "--- ${red}FAIL:${clr} ${testname}. See ${RESULTS}/${testname} for full logs"
code=1
elif [[ "${VERBOSE}" == true ]]; then
echo -e "--- ${green}PASS:${clr} ${testname}"
fi
done
exit ${code}