forked from Archive/PX4-Autopilot
140 lines
3.4 KiB
Bash
Executable File
140 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Starts tests from within the container
|
|
#
|
|
# License: according to LICENSE.md in the root directory of the PX4 Firmware repository
|
|
set -e
|
|
|
|
# TODO move to docker image
|
|
pip install px4tools pymavlink -q
|
|
|
|
# A POSIX variable
|
|
OPTIND=1 # Reset in case getopts has been used previously in the shell.
|
|
|
|
# Initialize our own variables:
|
|
do_clean=true
|
|
gui=false
|
|
|
|
while getopts "h?og" opt; do
|
|
case "$opt" in
|
|
h|\?)
|
|
echo """
|
|
$0 [-h] [-o] [-g]
|
|
-h show help
|
|
-o don't clean before building (to save time)
|
|
-g run gazebo gui
|
|
"""
|
|
exit 0
|
|
;;
|
|
o) do_clean=false
|
|
echo "not cleaning"
|
|
;;
|
|
g) gui=true
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
# determine the directory of the source given the directory of this script
|
|
pushd `dirname $0` > /dev/null
|
|
SCRIPTPATH=`pwd`
|
|
popd > /dev/null
|
|
ORIG_SRC=$(dirname $SCRIPTPATH)
|
|
|
|
# set paths
|
|
JOB_DIR=$(dirname $ORIG_SRC)
|
|
CATKIN_DIR=$JOB_DIR/catkin
|
|
BUILD_DIR=$CATKIN_DIR/build/px4
|
|
SRC_DIR=${CATKIN_DIR}/src/px4
|
|
|
|
echo setting up ROS paths
|
|
if [ -f /opt/ros/indigo/setup.bash ]
|
|
then
|
|
source /opt/ros/indigo/setup.bash
|
|
elif [ -f /opt/ros/kinetic/setup.bash ]
|
|
then
|
|
source /opt/ros/kinetic/setup.bash
|
|
else
|
|
echo "could not find /opt/ros/{ros-distro}/setup.bash"
|
|
exit 1
|
|
fi
|
|
export ROS_HOME=$JOB_DIR/.ros
|
|
export ROS_LOG_DIR=$ROS_HOME/log
|
|
export ROS_TEST_RESULT_DIR=$ROS_HOME/test_results/px4
|
|
export PX4_LOG_DIR=$ROS_HOME/rootfs/fs/microsd/log
|
|
TEST_RESULT_TARGET_DIR=$JOB_DIR/test_results
|
|
|
|
# TODO
|
|
# BAGS=$ROS_HOME
|
|
# CHARTS=$ROS_HOME/charts
|
|
# EXPORT_CHARTS=/sitl/testing/export_charts.py
|
|
|
|
if $do_clean
|
|
then
|
|
echo cleaning
|
|
rm -rf $CATKIN_DIR
|
|
rm -rf $ROS_HOME
|
|
rm -rf $TEST_RESULT_TARGET_DIR
|
|
else
|
|
echo skipping clean step
|
|
fi
|
|
|
|
echo "=====> compile ($SRC_DIR)"
|
|
mkdir -p $ROS_HOME
|
|
mkdir -p $CATKIN_DIR/src
|
|
mkdir -p $TEST_RESULT_TARGET_DIR
|
|
if ! [ -d $SRC_DIR ]
|
|
then
|
|
ln -s $ORIG_SRC $SRC_DIR
|
|
ln -s $ORIG_SRC/Tools/sitl_gazebo ${CATKIN_DIR}/src/mavlink_sitl_gazebo
|
|
fi
|
|
cd $CATKIN_DIR
|
|
catkin_make
|
|
. ./devel/setup.bash
|
|
echo "<====="
|
|
|
|
# print paths to user
|
|
echo -e "JOB_DIR\t\t: $JOB_DIR"
|
|
echo -e "ROS_HOME\t: $ROS_HOME"
|
|
echo -e "CATKIN_DIR\t: $CATKIN_DIR"
|
|
echo -e "BUILD_DIR\t: $BUILD_DIR"
|
|
echo -e "SRC_DIR\t\t: $SRC_DIR"
|
|
echo -e "ROS_TEST_RESULT_DIR\t: $ROS_TEST_RESULT_DIR"
|
|
echo -e "ROS_LOG_DIR\t\t: $ROS_LOG_DIR"
|
|
echo -e "PX4_LOG_DIR\t\t: $PX4_LOG_DIR"
|
|
echo -e "TEST_RESULT_TARGET_DIR\t: $TEST_RESULT_TARGET_DIR"
|
|
|
|
# don't exit on error anymore (because single tests or exports might fail)
|
|
# however, stop executing tests after the first failure
|
|
set +e
|
|
echo "=====> run tests"
|
|
test $? -eq 0 && rostest px4 mavros_posix_tests_iris.launch gui:=$gui
|
|
|
|
# commented out optical flow test for now since ci server has
|
|
# an issue producing the simulated flow camera currently
|
|
#test $? -eq 0 && rostest px4 mavros_posix_tests_iris_opt_flow.launch gui:=$gui
|
|
|
|
test $? -eq 0 && rostest px4 mavros_posix_tests_standard_vtol.launch gui:=$gui
|
|
TEST_RESULT=$?
|
|
echo "<====="
|
|
|
|
# TODO
|
|
echo "=====> process test results"
|
|
# cd $BAGS
|
|
# for bag in `ls *.bag`
|
|
# do
|
|
# echo "processing bag: $bag"
|
|
# python $EXPORT_CHARTS $CHARTS $bag
|
|
# done
|
|
|
|
echo "copy build test results to job directory"
|
|
cp -r $ROS_TEST_RESULT_DIR/* ${TEST_RESULT_TARGET_DIR}
|
|
cp -r $ROS_LOG_DIR/* ${TEST_RESULT_TARGET_DIR}
|
|
cp -r $PX4_LOG_DIR/* ${TEST_RESULT_TARGET_DIR}
|
|
# cp $BAGS/*.bag ${TEST_RESULT_TARGET_DIR}/
|
|
# cp -r $CHARTS ${TEST_RESULT_TARGET_DIR}/
|
|
echo "<====="
|
|
|
|
# need to return error if tests failed, else Jenkins won't notice the failure
|
|
exit $TEST_RESULT
|