xref: /aosp_15_r20/external/ot-br-posix/script/test (revision 4a64e381480ef79f0532b2421e44e6ee336b8e0d)
1*4a64e381SAndroid Build Coastguard Worker#!/bin/bash
2*4a64e381SAndroid Build Coastguard Worker#
3*4a64e381SAndroid Build Coastguard Worker#  Copyright (c) 2017, The OpenThread Authors.
4*4a64e381SAndroid Build Coastguard Worker#  All rights reserved.
5*4a64e381SAndroid Build Coastguard Worker#
6*4a64e381SAndroid Build Coastguard Worker#  Redistribution and use in source and binary forms, with or without
7*4a64e381SAndroid Build Coastguard Worker#  modification, are permitted provided that the following conditions are met:
8*4a64e381SAndroid Build Coastguard Worker#  1. Redistributions of source code must retain the above copyright
9*4a64e381SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer.
10*4a64e381SAndroid Build Coastguard Worker#  2. Redistributions in binary form must reproduce the above copyright
11*4a64e381SAndroid Build Coastguard Worker#     notice, this list of conditions and the following disclaimer in the
12*4a64e381SAndroid Build Coastguard Worker#     documentation and/or other materials provided with the distribution.
13*4a64e381SAndroid Build Coastguard Worker#  3. Neither the name of the copyright holder nor the
14*4a64e381SAndroid Build Coastguard Worker#     names of its contributors may be used to endorse or promote products
15*4a64e381SAndroid Build Coastguard Worker#     derived from this software without specific prior written permission.
16*4a64e381SAndroid Build Coastguard Worker#
17*4a64e381SAndroid Build Coastguard Worker#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18*4a64e381SAndroid Build Coastguard Worker#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19*4a64e381SAndroid Build Coastguard Worker#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20*4a64e381SAndroid Build Coastguard Worker#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21*4a64e381SAndroid Build Coastguard Worker#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22*4a64e381SAndroid Build Coastguard Worker#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23*4a64e381SAndroid Build Coastguard Worker#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24*4a64e381SAndroid Build Coastguard Worker#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25*4a64e381SAndroid Build Coastguard Worker#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26*4a64e381SAndroid Build Coastguard Worker#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27*4a64e381SAndroid Build Coastguard Worker#  POSSIBILITY OF SUCH DAMAGE.
28*4a64e381SAndroid Build Coastguard Worker#
29*4a64e381SAndroid Build Coastguard Worker#   Description:
30*4a64e381SAndroid Build Coastguard Worker#       This script runs border router tests.
31*4a64e381SAndroid Build Coastguard Worker#
32*4a64e381SAndroid Build Coastguard Worker
33*4a64e381SAndroid Build Coastguard Worker# shellcheck source=script/_initrc
34*4a64e381SAndroid Build Coastguard Worker. "$(dirname "$0")"/_initrc
35*4a64e381SAndroid Build Coastguard Worker
36*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_VERBOSE=${OTBR_VERBOSE:-0}
37*4a64e381SAndroid Build Coastguard Worker
38*4a64e381SAndroid Build Coastguard WorkerOTBR_COLOR_PASS='\033[0;32m'
39*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_COLOR_PASS
40*4a64e381SAndroid Build Coastguard Worker
41*4a64e381SAndroid Build Coastguard WorkerOTBR_COLOR_FAIL='\033[0;31m'
42*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_COLOR_FAIL
43*4a64e381SAndroid Build Coastguard Worker
44*4a64e381SAndroid Build Coastguard WorkerOTBR_COLOR_NONE='\033[0m'
45*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_COLOR_NONE
46*4a64e381SAndroid Build Coastguard Worker
47*4a64e381SAndroid Build Coastguard WorkerQUIET=${QUIET:-1}
48*4a64e381SAndroid Build Coastguard Workerreadonly QUIET
49*4a64e381SAndroid Build Coastguard Worker
50*4a64e381SAndroid Build Coastguard WorkerOTBR_BUILD_TYPE="${OTBR_BUILD_TYPE:-Debug}"
51*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_BUILD_TYPE
52*4a64e381SAndroid Build Coastguard Worker
53*4a64e381SAndroid Build Coastguard WorkerOTBR_COVERAGE="${OTBR_COVERAGE:-0}"
54*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_COVERAGE
55*4a64e381SAndroid Build Coastguard Worker
56*4a64e381SAndroid Build Coastguard WorkerOTBR_MDNS="${OTBR_MDNS-}"
57*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_MDNS
58*4a64e381SAndroid Build Coastguard Worker
59*4a64e381SAndroid Build Coastguard WorkerOTBR_REST="${OTBR_REST-}"
60*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_REST
61*4a64e381SAndroid Build Coastguard Worker
62*4a64e381SAndroid Build Coastguard WorkerOTBR_OPTIONS="${OTBR_OPTIONS-}"
63*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_OPTIONS
64*4a64e381SAndroid Build Coastguard Worker
65*4a64e381SAndroid Build Coastguard WorkerOTBR_TOP_BUILDDIR="${OTBR_TOP_BUILDDIR:-${BUILD_DIR}/otbr}"
66*4a64e381SAndroid Build Coastguard Workerreadonly OTBR_TOP_BUILDDIR
67*4a64e381SAndroid Build Coastguard Worker
68*4a64e381SAndroid Build Coastguard Worker#######################################
69*4a64e381SAndroid Build Coastguard Worker# Run test and print result.
70*4a64e381SAndroid Build Coastguard Worker# Globals:
71*4a64e381SAndroid Build Coastguard Worker#   OTBR_COLOR_PASS
72*4a64e381SAndroid Build Coastguard Worker#   OTBR_COLOR_FAIL
73*4a64e381SAndroid Build Coastguard Worker#   OTBR_COLOR_NONE
74*4a64e381SAndroid Build Coastguard Worker# Arguments:
75*4a64e381SAndroid Build Coastguard Worker#   $@  - Test command
76*4a64e381SAndroid Build Coastguard Worker# Returns:
77*4a64e381SAndroid Build Coastguard Worker#   0           - Test passed.
78*4a64e381SAndroid Build Coastguard Worker#   Otherwise   - Test failed!
79*4a64e381SAndroid Build Coastguard Worker#######################################
80*4a64e381SAndroid Build Coastguard Workerprint_result()
81*4a64e381SAndroid Build Coastguard Worker{
82*4a64e381SAndroid Build Coastguard Worker    local exit_code=0
83*4a64e381SAndroid Build Coastguard Worker
84*4a64e381SAndroid Build Coastguard Worker    echo -e "$(date) Running $*"
85*4a64e381SAndroid Build Coastguard Worker
86*4a64e381SAndroid Build Coastguard Worker    if [[ ${OTBR_VERBOSE} == 0 ]]; then
87*4a64e381SAndroid Build Coastguard Worker        "$@" &>test.log || exit_code=$?
88*4a64e381SAndroid Build Coastguard Worker    else
89*4a64e381SAndroid Build Coastguard Worker        "$@" || exit_code=$?
90*4a64e381SAndroid Build Coastguard Worker    fi
91*4a64e381SAndroid Build Coastguard Worker
92*4a64e381SAndroid Build Coastguard Worker    if [[ $exit_code == 0 ]]; then
93*4a64e381SAndroid Build Coastguard Worker        prefix="${OTBR_COLOR_PASS}PASS${OTBR_COLOR_NONE}"
94*4a64e381SAndroid Build Coastguard Worker    else
95*4a64e381SAndroid Build Coastguard Worker        prefix="${OTBR_COLOR_FAIL}FAIL${OTBR_COLOR_NONE}"
96*4a64e381SAndroid Build Coastguard Worker    fi
97*4a64e381SAndroid Build Coastguard Worker
98*4a64e381SAndroid Build Coastguard Worker    echo -e "${prefix} $*"
99*4a64e381SAndroid Build Coastguard Worker
100*4a64e381SAndroid Build Coastguard Worker    # only output log on failure
101*4a64e381SAndroid Build Coastguard Worker    if [[ ${OTBR_VERBOSE} == 0 && ${exit_code} != 0 ]]; then
102*4a64e381SAndroid Build Coastguard Worker        cat test.log
103*4a64e381SAndroid Build Coastguard Worker    fi
104*4a64e381SAndroid Build Coastguard Worker
105*4a64e381SAndroid Build Coastguard Worker    return ${exit_code}
106*4a64e381SAndroid Build Coastguard Worker}
107*4a64e381SAndroid Build Coastguard Worker
108*4a64e381SAndroid Build Coastguard Workerprint_usage()
109*4a64e381SAndroid Build Coastguard Worker{
110*4a64e381SAndroid Build Coastguard Worker    cat <<EOF
111*4a64e381SAndroid Build Coastguard WorkerUSAGE: $0 COMMAND
112*4a64e381SAndroid Build Coastguard Worker
113*4a64e381SAndroid Build Coastguard WorkerCOMMAND:
114*4a64e381SAndroid Build Coastguard Worker    build       Build project for running tests. This can be used to rebuild the project for changes.
115*4a64e381SAndroid Build Coastguard Worker    clean       Clean built files to prepare new build.
116*4a64e381SAndroid Build Coastguard Worker    meshcop     Run MeshCoP tests.
117*4a64e381SAndroid Build Coastguard Worker    openwrt     Run OpenWRT tests.
118*4a64e381SAndroid Build Coastguard Worker    help        Print this help.
119*4a64e381SAndroid Build Coastguard Worker
120*4a64e381SAndroid Build Coastguard WorkerEXAMPLES:
121*4a64e381SAndroid Build Coastguard Worker    $0 clean build
122*4a64e381SAndroid Build Coastguard WorkerEOF
123*4a64e381SAndroid Build Coastguard Worker    exit "$1"
124*4a64e381SAndroid Build Coastguard Worker}
125*4a64e381SAndroid Build Coastguard Worker
126*4a64e381SAndroid Build Coastguard Workerdo_build()
127*4a64e381SAndroid Build Coastguard Worker{
128*4a64e381SAndroid Build Coastguard Worker    otbr_options=(
129*4a64e381SAndroid Build Coastguard Worker        "-DCMAKE_BUILD_TYPE=${OTBR_BUILD_TYPE}"
130*4a64e381SAndroid Build Coastguard Worker        "-DCMAKE_INSTALL_PREFIX=/usr"
131*4a64e381SAndroid Build Coastguard Worker        "-DOT_THREAD_VERSION=1.3"
132*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_DBUS=ON"
133*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_FEATURE_FLAGS=ON"
134*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_TELEMETRY_DATA_API=ON"
135*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_WEB=ON"
136*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_UNSECURE_JOIN=ON"
137*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_TREL=ON"
138*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_LINK_METRICS_TELEMETRY=ON"
139*4a64e381SAndroid Build Coastguard Worker        ${otbr_options[@]+"${otbr_options[@]}"}
140*4a64e381SAndroid Build Coastguard Worker    )
141*4a64e381SAndroid Build Coastguard Worker
142*4a64e381SAndroid Build Coastguard Worker    ./script/cmake-build "${otbr_options[@]}"
143*4a64e381SAndroid Build Coastguard Worker}
144*4a64e381SAndroid Build Coastguard Worker
145*4a64e381SAndroid Build Coastguard Workerdo_clean()
146*4a64e381SAndroid Build Coastguard Worker{
147*4a64e381SAndroid Build Coastguard Worker    echo "Removing ${BUILD_DIR} (requiring sudo)"
148*4a64e381SAndroid Build Coastguard Worker    rm -rf "${BUILD_DIR}" || sudo rm -rf "${BUILD_DIR}"
149*4a64e381SAndroid Build Coastguard Worker}
150*4a64e381SAndroid Build Coastguard Worker
151*4a64e381SAndroid Build Coastguard Workerdo_check()
152*4a64e381SAndroid Build Coastguard Worker{
153*4a64e381SAndroid Build Coastguard Worker    (cd "${OTBR_TOP_BUILDDIR}" \
154*4a64e381SAndroid Build Coastguard Worker        && ninja && sudo ninja install \
155*4a64e381SAndroid Build Coastguard Worker        && CTEST_OUTPUT_ON_FAILURE=1 ctest -LE sudo \
156*4a64e381SAndroid Build Coastguard Worker        && CTEST_OUTPUT_ON_FAILURE=1 sudo ctest -L sudo) # Seperate running tests for sudo and non-sudo cases.
157*4a64e381SAndroid Build Coastguard Worker}
158*4a64e381SAndroid Build Coastguard Worker
159*4a64e381SAndroid Build Coastguard Workerdo_doxygen()
160*4a64e381SAndroid Build Coastguard Worker{
161*4a64e381SAndroid Build Coastguard Worker    otbr_options=(
162*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_DOC=ON"
163*4a64e381SAndroid Build Coastguard Worker    )
164*4a64e381SAndroid Build Coastguard Worker
165*4a64e381SAndroid Build Coastguard Worker    OTBR_TARGET="doxygen" ./script/cmake-build "${otbr_options[@]}"
166*4a64e381SAndroid Build Coastguard Worker}
167*4a64e381SAndroid Build Coastguard Worker
168*4a64e381SAndroid Build Coastguard Workerdo_prepare()
169*4a64e381SAndroid Build Coastguard Worker{
170*4a64e381SAndroid Build Coastguard Worker    if [[ ${OTBR_OPTIONS} ]]; then
171*4a64e381SAndroid Build Coastguard Worker        read -r -a otbr_options <<<"${OTBR_OPTIONS}"
172*4a64e381SAndroid Build Coastguard Worker    else
173*4a64e381SAndroid Build Coastguard Worker        otbr_options=()
174*4a64e381SAndroid Build Coastguard Worker    fi
175*4a64e381SAndroid Build Coastguard Worker
176*4a64e381SAndroid Build Coastguard Worker    if [[ -n ${OTBR_MDNS} ]]; then
177*4a64e381SAndroid Build Coastguard Worker        otbr_options+=("-DOTBR_MDNS=${OTBR_MDNS}")
178*4a64e381SAndroid Build Coastguard Worker    fi
179*4a64e381SAndroid Build Coastguard Worker
180*4a64e381SAndroid Build Coastguard Worker    if [[ ${OTBR_COVERAGE} == 1 ]]; then
181*4a64e381SAndroid Build Coastguard Worker        otbr_options+=("-DOTBR_COVERAGE=ON")
182*4a64e381SAndroid Build Coastguard Worker    fi
183*4a64e381SAndroid Build Coastguard Worker
184*4a64e381SAndroid Build Coastguard Worker    if [[ ${OTBR_REST} == "rest-off" ]]; then
185*4a64e381SAndroid Build Coastguard Worker        otbr_options+=("-DOTBR_REST=OFF")
186*4a64e381SAndroid Build Coastguard Worker    else
187*4a64e381SAndroid Build Coastguard Worker        otbr_options+=("-DOTBR_REST=ON")
188*4a64e381SAndroid Build Coastguard Worker    fi
189*4a64e381SAndroid Build Coastguard Worker}
190*4a64e381SAndroid Build Coastguard Worker
191*4a64e381SAndroid Build Coastguard Workerdo_package()
192*4a64e381SAndroid Build Coastguard Worker{
193*4a64e381SAndroid Build Coastguard Worker    otbr_options=(
194*4a64e381SAndroid Build Coastguard Worker        "-DBUILD_TESTING=OFF"
195*4a64e381SAndroid Build Coastguard Worker        "-DCMAKE_INSTALL_PREFIX=/usr"
196*4a64e381SAndroid Build Coastguard Worker        "-DCMAKE_BUILD_TYPE=Release"
197*4a64e381SAndroid Build Coastguard Worker        "-DOTBR_WEB=ON"
198*4a64e381SAndroid Build Coastguard Worker        ${otbr_options[@]+"${otbr_options[@]}"}
199*4a64e381SAndroid Build Coastguard Worker    )
200*4a64e381SAndroid Build Coastguard Worker
201*4a64e381SAndroid Build Coastguard Worker    OTBR_TARGET="package" ./script/cmake-build "${otbr_options[@]}"
202*4a64e381SAndroid Build Coastguard Worker}
203*4a64e381SAndroid Build Coastguard Worker
204*4a64e381SAndroid Build Coastguard Workerdo_simulation()
205*4a64e381SAndroid Build Coastguard Worker{
206*4a64e381SAndroid Build Coastguard Worker    export top_builddir="${OTBR_TOP_BUILDDIR}"
207*4a64e381SAndroid Build Coastguard Worker
208*4a64e381SAndroid Build Coastguard Worker    print_result tests/scripts/auto-attach
209*4a64e381SAndroid Build Coastguard Worker    print_result tests/scripts/infra-link-selector
210*4a64e381SAndroid Build Coastguard Worker}
211*4a64e381SAndroid Build Coastguard Worker
212*4a64e381SAndroid Build Coastguard Workermain()
213*4a64e381SAndroid Build Coastguard Worker{
214*4a64e381SAndroid Build Coastguard Worker    if [[ $# == 0 ]]; then
215*4a64e381SAndroid Build Coastguard Worker        print_usage 1
216*4a64e381SAndroid Build Coastguard Worker    fi
217*4a64e381SAndroid Build Coastguard Worker
218*4a64e381SAndroid Build Coastguard Worker    do_prepare
219*4a64e381SAndroid Build Coastguard Worker
220*4a64e381SAndroid Build Coastguard Worker    while [[ $# != 0 ]]; do
221*4a64e381SAndroid Build Coastguard Worker        case "$1" in
222*4a64e381SAndroid Build Coastguard Worker            build)
223*4a64e381SAndroid Build Coastguard Worker                do_build
224*4a64e381SAndroid Build Coastguard Worker                ;;
225*4a64e381SAndroid Build Coastguard Worker            check)
226*4a64e381SAndroid Build Coastguard Worker                do_check
227*4a64e381SAndroid Build Coastguard Worker                ;;
228*4a64e381SAndroid Build Coastguard Worker            clean)
229*4a64e381SAndroid Build Coastguard Worker                do_clean
230*4a64e381SAndroid Build Coastguard Worker                ;;
231*4a64e381SAndroid Build Coastguard Worker            doxygen)
232*4a64e381SAndroid Build Coastguard Worker                do_doxygen
233*4a64e381SAndroid Build Coastguard Worker                ;;
234*4a64e381SAndroid Build Coastguard Worker            help)
235*4a64e381SAndroid Build Coastguard Worker                print_usage
236*4a64e381SAndroid Build Coastguard Worker                ;;
237*4a64e381SAndroid Build Coastguard Worker            meshcop)
238*4a64e381SAndroid Build Coastguard Worker                top_builddir="${OTBR_TOP_BUILDDIR}" print_result ./tests/scripts/meshcop
239*4a64e381SAndroid Build Coastguard Worker                ;;
240*4a64e381SAndroid Build Coastguard Worker            ncp_mode)
241*4a64e381SAndroid Build Coastguard Worker                top_builddir="${OTBR_TOP_BUILDDIR}" print_result ./tests/scripts/ncp_mode
242*4a64e381SAndroid Build Coastguard Worker                ;;
243*4a64e381SAndroid Build Coastguard Worker            openwrt)
244*4a64e381SAndroid Build Coastguard Worker                print_result ./tests/scripts/openwrt
245*4a64e381SAndroid Build Coastguard Worker                ;;
246*4a64e381SAndroid Build Coastguard Worker            simulation)
247*4a64e381SAndroid Build Coastguard Worker                do_simulation
248*4a64e381SAndroid Build Coastguard Worker                ;;
249*4a64e381SAndroid Build Coastguard Worker            package)
250*4a64e381SAndroid Build Coastguard Worker                do_package
251*4a64e381SAndroid Build Coastguard Worker                ;;
252*4a64e381SAndroid Build Coastguard Worker            *)
253*4a64e381SAndroid Build Coastguard Worker                echo "Unknown test: ${1}"
254*4a64e381SAndroid Build Coastguard Worker                print_usage 1
255*4a64e381SAndroid Build Coastguard Worker                ;;
256*4a64e381SAndroid Build Coastguard Worker        esac
257*4a64e381SAndroid Build Coastguard Worker        shift
258*4a64e381SAndroid Build Coastguard Worker    done
259*4a64e381SAndroid Build Coastguard Worker}
260*4a64e381SAndroid Build Coastguard Worker
261*4a64e381SAndroid Build Coastguard Workermain "$@"
262