| #!/bin/bash |
| # |
| # Copyright (c) 2018, The OpenThread Authors. |
| # All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # 3. Neither the name of the copyright holder nor the |
| # names of its contributors may be used to endorse or promote products |
| # derived from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| # POSSIBILITY OF SUCH DAMAGE. |
| # |
| # Description: |
| # This file runs various tests of OpenThread. |
| # |
| |
| set -e |
| set -o pipefail |
| |
| readonly SYSTEM_TRIPLET="$(third_party/nlbuild-autotools/repo/third_party/autoconf/config.guess | sed -e 's/[[:digit:].]*$//g')" |
| export top_builddir="build/${SYSTEM_TRIPLET}" |
| |
| do_build() { |
| if [[ -n "${RADIO_DEVICE}" && "${VIRTUAL_TIME}" = 1 ]]; then |
| VIRTUAL_TIME_UART=1 make -f examples/Makefile-posix |
| else |
| make -f examples/Makefile-posix |
| fi |
| |
| if [[ -n "${RADIO_DEVICE}" ]]; then |
| make -f src/posix/Makefile-posix |
| fi |
| } |
| |
| do_clean() { |
| rm -rfv "build/${SYSTEM_TRIPLET}" "build/posix/${SYSTEM_TRIPLET}" |
| } |
| |
| do_cert() { |
| [[ ! -d tmp ]] || rm -rvf tmp |
| PYTHONUNBUFFERED=1 "$1" |
| } |
| |
| print_usage() { |
| echo "USAGE: [ENVIRONMENTS] $0 COMMANDS |
| |
| ENVIRONMENTS: |
| NODE_TYPE 'sim' for CLI, 'ncp-sim' for NCP. The default is 'sim'. |
| NODE_MODE 'transceiver' for transceiver mode, otherwise for standalone mode. The default is standalone mode. |
| VIRTUAL_TIME 1 for virtual time, otherwise real time. The default is 1 |
| |
| COMMANDS: |
| clean Clean built files to prepare for new build. |
| build Build project for running tests. This can be used to rebuild the project for changes. |
| cert Run a single thread-cert test. ENVIRONMENTS should be the same as those given to build or update. |
| help Print this help. |
| |
| EXAMPLES: |
| # Test CLI with default settings |
| $0 clean build cert tests/scripts/thread-cert/Cert_5_1_01_RouterAttach.py |
| $0 cert tests/scripts/thread-cert/Cert_5_1_02_ChildAddressTimeout.py |
| |
| # Test NCP with default settings |
| NODE_TYPE=ncp-sim $0 clean build cert tests/scripts/thread-cert/Cert_5_1_01_RouterAttach.py |
| NODE_TYPE=ncp-sim $0 cert tests/scripts/thread-cert/Cert_5_1_02_ChildAddressTimeout.py |
| |
| # Test CLI with radio only |
| NODE_MODE=transceiver $0 clean build cert tests/scripts/thread-cert/Cert_5_1_01_RouterAttach.py |
| NODE_MODE=transceiver $0 cert tests/scripts/thread-cert/Cert_5_1_02_ChildAddressTimeout.py |
| |
| # Test CLI with real time |
| VIRTUAL_TIME=0 $0 clean build cert tests/scripts/thread-cert/Cert_5_1_01_RouterAttach.py |
| VIRTUAL_TIME=0 $0 cert tests/scripts/thread-cert/Cert_5_1_02_ChildAddressTimeout.py |
| " |
| |
| exit $1 |
| } |
| |
| main() |
| { |
| export NODE_TYPE="${NODE_TYPE:-sim}" |
| export VERBOSE="${VERBOSE:-1}" |
| export VIRTUAL_TIME="${VIRTUAL_TIME:-1}" |
| |
| if [[ "${NODE_MODE}" = 'transceiver' ]] ; then |
| export RADIO_DEVICE="build/${SYSTEM_TRIPLET}/examples/apps/ncp/ot-rcp" |
| export OT_CLI_PATH="build/posix/${SYSTEM_TRIPLET}/src/posix/ot-cli" |
| export OT_NCP_PATH="build/posix/${SYSTEM_TRIPLET}/src/posix/ot-ncp" |
| fi |
| |
| if [[ -z "$1" ]]; then |
| print_usage 1 |
| fi |
| |
| [[ -n "${RADIO_DEVICE}" ]] && echo "Using transceiver mode" || echo "Using standalone mode" |
| [[ "${NODE_TYPE}" = "ncp-sim" ]] && echo "Using NCP node" || echo "Using CLI node" |
| [[ "${VIRTUAL_TIME}" = 1 ]] && echo "Using virtual time" || echo "Using real time" |
| |
| while [[ -n "$1" ]]; do |
| case "$1" in |
| clean) |
| do_clean |
| ;; |
| build) |
| do_build |
| ;; |
| cert) |
| shift |
| do_cert "$1" |
| ;; |
| help) |
| print_usage |
| ;; |
| esac |
| shift |
| done |
| } |
| |
| main "$@" |