1764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline#!/usr/bin/env bash
2764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
3764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinereadonly PROJECT_TOP="system/netd"
4764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
5764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline# TODO:
6764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline#   - add Android.bp test targets
7764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline#   - switch away from runtest.py
8764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinereadonly ALL_TESTS="
9764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    server/netd_unit_test.cpp
10764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    tests/netd_integration_test.cpp
11764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline"
12764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
13764e66635f0476873ddee55dc43e2d892d9746c8Erik KlineREPO_TOP=""
14764e66635f0476873ddee55dc43e2d892d9746c8Erik KlineDEBUG=""
15764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
16764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinefunction logToStdErr() {
17764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "$1" >&2
18764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline}
19764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
20764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinefunction testAndSetRepoTop() {
21764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    if [[ -n "$1" && -d "$1/.repo" ]]; then
22764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        REPO_TOP="$1"
23764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        return 0
24764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    fi
25764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    return 1
26764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline}
27764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
28764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinefunction gotoRepoTop() {
29764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    if testAndSetRepoTop "$ANDROID_BUILD_TOP"; then
30764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        return
31764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    fi
32764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
33764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    while ! testAndSetRepoTop "$PWD"; do
34764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        if [[ "$PWD" == "/" ]]; then
35764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline            break
36764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        fi
37764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        cd ..
38764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    done
39764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline}
40764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
41764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinefunction runOneTest() {
42764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    local testName="$1"
43764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    local cmd="$REPO_TOP/development/testrunner/runtest.py -x $PROJECT_TOP/$testName"
44764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "###"
45764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "# $testName"
46764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "#"
47764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "# $cmd"
48764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "###"
49764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo ""
50764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    $DEBUG $cmd
51764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    local rval=$?
52764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo ""
53764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
54764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    # NOTE: currently runtest.py returns 0 even for failed tests.
55764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    return $rval
56764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline}
57764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
58764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinefunction main() {
59764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    gotoRepoTop
60764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    if ! testAndSetRepoTop "$REPO_TOP"; then
61764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        logToStdErr "Could not find useful top of repo directory"
62764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        return 1
63764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    fi
64764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    logToStdErr "using REPO_TOP=$REPO_TOP"
65764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
66764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    if [[ -n "$1" ]]; then
67764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        case "$1" in
68764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline            "-n")
69764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline                DEBUG=echo
70764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline                shift
71764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline                ;;
72764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        esac
73764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    fi
74764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
75764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    # Allow us to do things like "runtests.sh integration", etc.
76764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    readonly TEST_REGEX="$1"
77764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
78764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    failures=0
79764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    for testName in $ALL_TESTS; do
80764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        if [[ -z "$TEST_REGEX" || "$testName" =~ "$TEST_REGEX" ]]; then
81764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline            runOneTest "$testName"
82764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline            let failures+=$?
83764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        else
84764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline            logToStdErr "Skipping $testName"
85764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline        fi
86764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    done
87764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
88764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    echo "Number of tests failing: $failures"
89764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline    return $failures
90764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline}
91764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
92764e66635f0476873ddee55dc43e2d892d9746c8Erik Kline
93764e66635f0476873ddee55dc43e2d892d9746c8Erik Klinemain "$@"
94764e66635f0476873ddee55dc43e2d892d9746c8Erik Klineexit $?
95