108 lines
4.6 KiB
Bash
108 lines
4.6 KiB
Bash
#!/bin/bash
|
|
|
|
# NextGen node/javascript top-level bindings test/s - there are a few stages of test here..
|
|
|
|
# 1. ensure we've got the dependencies pre-built, such as js bindings, C bindings, and minimal compiled c targets.
|
|
# 2. run the static pre-canned JS create/pack tests in the 'mavlink.tests.js' files (ie assembling packets for sending)
|
|
# 3. capture all the packets that the C bindings test suite make, and try to parse them all with JS. ( incoming packet parsing)
|
|
# 4. make and run the complete autogenerated 'mocha' test suite/s that does byte-level verification of JS against the C bindings.
|
|
|
|
# We use '.tests.js' autogenerated javascript to build/pack one of each packet with test data for nominally sending
|
|
|
|
# utilise the C bindings and test suite to generate a bunch of mavlink data that we can run through the node/javascript parser
|
|
# we do this by executing ./generator/C/test/posix/testmav2.0_ardupilotmega to
|
|
# run mavlink_test_all() from generator/C/include_v2.0/ardupilotmega/testsuite.h
|
|
|
|
# this script can be called manually by a human, or it can be triggered by a 'npm test' from the generator/javascript/ folder, so we handle either.
|
|
|
|
set -e
|
|
#set -x
|
|
RED='\033[1;31m'
|
|
GRN='\033[1;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 0 means low; 1 means some; 2 means high verbosity
|
|
VERBOSITY='0'
|
|
OUT0="/dev/stdout"
|
|
OUT1="/dev/null"
|
|
OUT2="/dev/null"
|
|
|
|
if [ "$VERBOSITY" = "1" ]; then
|
|
OUT1="/dev/stdout"
|
|
fi
|
|
if [ "$VERBOSITY" = "2" ]; then
|
|
OUT1="/dev/stdout"
|
|
OUT2="/dev/stdout"
|
|
fi
|
|
|
|
|
|
test -z "$MDEF" && MDEF="../message_definitions"
|
|
|
|
|
|
# build js bindings we want to test
|
|
printf "${RED}Generating JS-NextGen bindings to test...${NC}\n\n"
|
|
sleep 1
|
|
cd generator
|
|
./gen_js.sh > $OUT2
|
|
cd ..
|
|
|
|
|
|
# build C bindings to test the testsuite.js 'recieve' tester against.
|
|
# we quieten them as we really aren't testing THEM here.
|
|
printf "${RED}Generating C bindings to test JS-NextGen against...${NC}\n\n"
|
|
sleep 1
|
|
./tools/mavgen.py --lang C $MDEF/v1.0/ardupilotmega.xml -o generator/C/include_v1.0 --wire-protocol=1.0 > $OUT2
|
|
./tools/mavgen.py --lang C $MDEF/v1.0/ardupilotmega.xml -o generator/C/include_v2.0 --wire-protocol=2.0 > $OUT2
|
|
|
|
|
|
# we quieten them as we really aren't testing THEM here.
|
|
printf "${RED}Compiling C bindings to test JS-NextGen against...${NC}\n\n"
|
|
sleep 1
|
|
pushd generator/C/test/posix > $OUT2
|
|
make clean testmav1.0_ardupilotmega testmav2.0_ardupilotmega testmav1.0_common testmav2.0_common > $OUT2
|
|
popd > $OUT2
|
|
|
|
# need to install the bindings first to test them?
|
|
printf "${RED}Installing just-generated npm package...${NC}\n\n"
|
|
cd generator/javascript
|
|
npm install 2>/dev/null > /dev/null
|
|
cd ../..
|
|
|
|
printf "${RED}JS-NextGen PRETEST setup done.${NC}\n\n"
|
|
|
|
|
|
|
|
|
|
# run the automatically generated tool for build/pack, ie create and pack one of everything, no byte-level checking of the packed results tho, comes later.
|
|
printf "${RED}Running non-NPM JS-NextGen create/pack tests ...${NC}\n\n"
|
|
sleep 1
|
|
node generator/javascript/implementations/mavlink_ardupilotmega_v2.0/mavlink.tests.js > $OUT1
|
|
node generator/javascript/implementations/mavlink_ardupilotmega_v1.0/mavlink.tests.js > $OUT1
|
|
node generator/javascript/implementations/mavlink_common_v2.0/mavlink.tests.js > $OUT1
|
|
node generator/javascript/implementations/mavlink_common_v1.0/mavlink.tests.js > $OUT1
|
|
|
|
|
|
# piping the wire-ready hex-output from the C bindings into the node bindings per-packet and receive each of them.
|
|
printf "${RED}Streaming C test data into JS-NextGen for pushBuffer/parseBuffer tests${NC}\n\n"
|
|
sleep 1
|
|
pushd generator/C/test/posix > $OUT2
|
|
make testmav1.0_common testmav2.0_common testmav1.0_ardupilotmega testmav2.0_ardupilotmega
|
|
./testmav1.0_ardupilotmega | grep '^fe' | node ../../../../examples/testparser.js ardupilotmega 1.0 $VERBOSITY
|
|
./testmav2.0_ardupilotmega | grep '^fd' | node ../../../../examples/testparser.js ardupilotmega 2.0 $VERBOSITY
|
|
./testmav1.0_common | grep '^fe' | node ../../../../examples/testparser.js common 1.0 $VERBOSITY
|
|
./testmav2.0_common | grep '^fd' | node ../../../../examples/testparser.js common 2.0 $VERBOSITY
|
|
popd > $OUT2
|
|
|
|
|
|
# we also have a big collection ~990 of mocha tests based on C output like the above but more thorough, this includes byte-level
|
|
# checking of the packed results etc.
|
|
# u can/should also run the ~990 or more mocha tests we just made:
|
|
#( this uses generator/javascript/package.json -> runs make_tests.py -> outputs made_tests.js -> which are then executed by 'mocha test' )
|
|
echo "tip: if not bring auto-run as a auto-test, u can run the next-stage of tests with mocha here:"
|
|
echo "cd generator/javascript"
|
|
echo "npm test"
|
|
echo "cd -"
|
|
|
|
|
|
printf "\n${RED}JS-NextGen Testing done.${NC}\n\n"
|