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