blob: 63576b0f261f01d8705158b8aad44ba0399a0454 [file] [log] [blame]
Erik Kline1b4e4042015-02-04 17:33:41 +09001#!/bin/bash
2
3# Copyright 2014 The Android Open Source Project
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16
17readonly PREFIX="#####"
Erik Kline8dd83bd2016-08-26 16:13:36 +090018readonly RETRIES=2
Benedict Wongf23efc02018-01-09 15:16:01 -080019test_prefix=
20
21function checkArgOrExit() {
22 if [[ $# -lt 2 ]]; then
23 echo "Missing argument for option $1" >&2
24 exit 1
25 fi
26}
27
28function usageAndExit() {
29 cat >&2 << EOF
30 all_tests.sh - test runner with support for flake testing
31
32 all_tests.sh [options]
33
34 options:
35 -h, --help show this menu
36 -p, --prefix=TEST_PREFIX specify a prefix for the tests to be run
37EOF
38 exit 0
39}
Erik Kline1b4e4042015-02-04 17:33:41 +090040
41function maybePlural() {
42 # $1 = integer to use for plural check
43 # $2 = singular string
44 # $3 = plural string
45 if [ $1 -ne 1 ]; then
46 echo "$3"
47 else
48 echo "$2"
49 fi
50}
51
Erik Kline8dd83bd2016-08-26 16:13:36 +090052function runTest() {
53 local cmd="$1"
54
55 if $cmd; then
56 return 0
57 fi
58
59 for iteration in $(seq $RETRIES); do
60 if ! $cmd; then
61 echo >&2 "'$cmd' failed more than once, giving up"
62 return 1
63 fi
64 done
65
66 echo >&2 "Warning: '$cmd' FLAKY, passed $RETRIES/$((RETRIES + 1))"
67}
68
Benedict Wongf23efc02018-01-09 15:16:01 -080069# Parse arguments
70while [ -n "$1" ]; do
71 case "$1" in
72 -h|--help)
73 usageAndExit
74 ;;
75 -p|--prefix)
76 checkArgOrExit $@
77 test_prefix=$2
78 shift 2
79 ;;
80 *)
81 echo "Unknown option $1" >&2
82 echo >&2
83 usageAndExit
84 ;;
85 esac
86done
Erik Kline8dd83bd2016-08-26 16:13:36 +090087
Benedict Wongf23efc02018-01-09 15:16:01 -080088# Find the relevant tests
89if [[ -z $test_prefix ]]; then
90 readonly tests=$(eval "find . -name '*_test.py' -type f -executable")
91else
92 readonly tests=$(eval "find . -name '$test_prefix*' -type f -executable")
93fi
94
95# Give some readable status messages
Erik Kline1b4e4042015-02-04 17:33:41 +090096readonly count=$(echo $tests | wc -w)
Benedict Wongf23efc02018-01-09 15:16:01 -080097if [[ -z $test_prefix ]]; then
98 echo "$PREFIX Found $count $(maybePlural $count test tests)."
99else
100 echo "$PREFIX Found $count $(maybePlural $count test tests) with prefix $test_prefix."
101fi
Erik Kline1b4e4042015-02-04 17:33:41 +0900102
103exit_code=0
104
105i=0
106for test in $tests; do
107 i=$((i + 1))
108 echo ""
109 echo "$PREFIX $test ($i/$count)"
110 echo ""
Erik Kline8dd83bd2016-08-26 16:13:36 +0900111 runTest $test || exit_code=$(( exit_code + 1 ))
Erik Kline1b4e4042015-02-04 17:33:41 +0900112 echo ""
113done
114
115echo "$PREFIX $exit_code failed $(maybePlural $exit_code test tests)."
116exit $exit_code