diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index f6a419a..52743ad 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,9 +3,6 @@ find_package(rostest REQUIRED) # will test takeoff in mrs simulator add_subdirectory(takeoff) -# will test takeoff in gazebo -add_subdirectory(gazebo_takeoff) - # will test if takeoff is not allowed outside of safety area add_subdirectory(outside_safety_area) diff --git a/test/compile_tests.sh b/test/compile_tests.sh index efbc058..a93d8bf 100755 --- a/test/compile_tests.sh +++ b/test/compile_tests.sh @@ -6,5 +6,5 @@ trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG trap 'echo "$0: \"${last_command}\" command failed with exit code $?"' ERR # build the package -catkin build --this # it has to be fully built normally before building with --catkin-make-args tests +catkin build --this -DMRS_ENABLE_TESTING=1 --no-deps # it has to be fully built normally before building with --catkin-make-args tests catkin build --this -DMRS_ENABLE_TESTING=1 --no-deps --catkin-make-args tests diff --git a/test/gazebo_takeoff/CMakeLists.txt b/test/gazebo_takeoff/CMakeLists.txt deleted file mode 100644 index bf8f985..0000000 --- a/test/gazebo_takeoff/CMakeLists.txt +++ /dev/null @@ -1,16 +0,0 @@ -get_filename_component(TEST_NAME "${CMAKE_CURRENT_SOURCE_DIR}" NAME) - -catkin_add_executable_with_gtest(test_${TEST_NAME} - test.cpp - ) - -target_link_libraries(test_${TEST_NAME} - ${catkin_LIBRARIES} - ) - -add_dependencies(test_${TEST_NAME} - ${${PROJECT_NAME}_EXPORTED_TARGETS} - ${catkin_EXPORTED_TARGETS} - ) - -add_rostest(${TEST_NAME}.test) diff --git a/test/gazebo_takeoff/gazebo_takeoff.test b/test/gazebo_takeoff/gazebo_takeoff.test deleted file mode 100644 index cc740a5..0000000 --- a/test/gazebo_takeoff/gazebo_takeoff.test +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/gazebo_takeoff/test.cpp b/test/gazebo_takeoff/test.cpp deleted file mode 100644 index 6eb2ab8..0000000 --- a/test/gazebo_takeoff/test.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include - -#include - -class Tester : public mrs_uav_testing::TestGeneric { - -public: - bool test(); -}; - -bool Tester::test() { - - { - auto [success, message] = spawnGazeboUav(); - - if (!success) { - ROS_ERROR("[%s]: gazebo UAV spawning failed with message: '%s'", ros::this_node::getName().c_str(), message.c_str()); - return false; - } - } - - { - auto [success, message] = takeoff(); - - if (!success) { - ROS_ERROR("[%s]: takeoff failed with message: '%s'", ros::this_node::getName().c_str(), message.c_str()); - return false; - } - } - - this->sleep(5.0); - - if (this->isFlyingNormally()) { - return true; - } else { - ROS_ERROR("[%s]: not flying normally", ros::this_node::getName().c_str()); - return false; - } -} - - -TEST(TESTSuite, test) { - - Tester tester; - - bool result = tester.test(); - - if (result) { - GTEST_SUCCEED(); - } else { - GTEST_FAIL(); - } -} - -int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv) { - - ros::init(argc, argv, "test"); - - testing::InitGoogleTest(&argc, argv); - - return RUN_ALL_TESTS(); -} diff --git a/test/moving_drone/test.cpp b/test/moving_drone/test.cpp index 7b9eeb3..6f5ae79 100644 --- a/test/moving_drone/test.cpp +++ b/test/moving_drone/test.cpp @@ -36,13 +36,28 @@ void Tester::timerMain([[maybe_unused]] const ros::TimerEvent& event) { bool Tester::test() { - auto [success, message] = takeoff(); + std::shared_ptr uh; - if (!success) { - return true; - } else { - ROS_ERROR("[%s]: takeoff initiated, this should not be possible", ros::this_node::getName().c_str()); - return false; + { + auto [uhopt, message] = getUAVHandler(_uav_name_); + + if (!uhopt) { + ROS_ERROR("[%s]: Failed obtain handler for '%s': '%s'", ros::this_node::getName().c_str(), _uav_name_.c_str(), message.c_str()); + return false; + } + + uh = uhopt.value(); + } + + { + auto [success, message] = uh->takeoff(); + + if (!success) { + return true; + } else { + ROS_ERROR("[%s]: takeoff initiated, this should not be possible", ros::this_node::getName().c_str()); + return false; + } } } diff --git a/test/outside_safety_area/test.cpp b/test/outside_safety_area/test.cpp index 10dc8e8..88d992b 100644 --- a/test/outside_safety_area/test.cpp +++ b/test/outside_safety_area/test.cpp @@ -10,13 +10,28 @@ class Tester : public mrs_uav_testing::TestGeneric { bool Tester::test() { - auto [success, message] = takeoff(); + std::shared_ptr uh; - if (!success) { - return true; - } else { - ROS_ERROR("[%s]: takeoff initiated, this should not be possible", ros::this_node::getName().c_str()); - return false; + { + auto [uhopt, message] = getUAVHandler(_uav_name_); + + if (!uhopt) { + ROS_ERROR("[%s]: Failed obtain handler for '%s': '%s'", ros::this_node::getName().c_str(), _uav_name_.c_str(), message.c_str()); + return false; + } + + uh = uhopt.value(); + } + + { + auto [success, message] = uh->takeoff(); + + if (!success) { + return true; + } else { + ROS_ERROR("[%s]: takeoff initiated, this should not be possible", ros::this_node::getName().c_str()); + return false; + } } } diff --git a/test/takeoff/test.cpp b/test/takeoff/test.cpp index 13b8599..0fd0c14 100644 --- a/test/takeoff/test.cpp +++ b/test/takeoff/test.cpp @@ -10,16 +10,31 @@ class Tester : public mrs_uav_testing::TestGeneric { bool Tester::test() { - auto [success, message] = takeoff(); + std::shared_ptr uh; - if (!success) { - ROS_ERROR("[%s]: takeoff failed with message: '%s'", ros::this_node::getName().c_str(), message.c_str()); - return false; + { + auto [uhopt, message] = getUAVHandler(_uav_name_); + + if (!uhopt) { + ROS_ERROR("[%s]: Failed obtain handler for '%s': '%s'", ros::this_node::getName().c_str(), _uav_name_.c_str(), message.c_str()); + return false; + } + + uh = uhopt.value(); + } + + { + auto [success, message] = uh->takeoff(); + + if (!success) { + ROS_ERROR("[%s]: takeoff failed with message: '%s'", ros::this_node::getName().c_str(), message.c_str()); + return false; + } } this->sleep(5.0); - if (this->isFlyingNormally()) { + if (uh->isFlyingNormally()) { return true; } else { ROS_ERROR("[%s]: not flying normally", ros::this_node::getName().c_str()); diff --git a/test/topic_check/test.cpp b/test/topic_check/test.cpp index f0cda40..07bfd56 100644 --- a/test/topic_check/test.cpp +++ b/test/topic_check/test.cpp @@ -10,13 +10,28 @@ class Tester : public mrs_uav_testing::TestGeneric { bool Tester::test() { - auto [success, message] = takeoff(); + std::shared_ptr uh; - if (!success) { - return true; - } else { - ROS_ERROR("[%s]: takeoff initiated, this should not be possible: '%s'", ros::this_node::getName().c_str(), message.c_str()); - return false; + { + auto [uhopt, message] = getUAVHandler(_uav_name_); + + if (!uhopt) { + ROS_ERROR("[%s]: Failed obtain handler for '%s': '%s'", ros::this_node::getName().c_str(), _uav_name_.c_str(), message.c_str()); + return false; + } + + uh = uhopt.value(); + } + + { + auto [success, message] = uh->takeoff(); + + if (!success) { + return true; + } else { + ROS_ERROR("[%s]: takeoff initiated, this should not be possible: '%s'", ros::this_node::getName().c_str(), message.c_str()); + return false; + } } } diff --git a/test/without_takeoff/test.cpp b/test/without_takeoff/test.cpp index 9b33f3c..14939a3 100644 --- a/test/without_takeoff/test.cpp +++ b/test/without_takeoff/test.cpp @@ -20,6 +20,19 @@ Tester::Tester() : mrs_uav_testing::TestGeneric() { bool Tester::test() { + std::shared_ptr uh; + + { + auto [uhopt, message] = getUAVHandler(_uav_name_); + + if (!uhopt) { + ROS_ERROR("[%s]: Failed obtain handler for '%s': '%s'", ros::this_node::getName().c_str(), _uav_name_.c_str(), message.c_str()); + return false; + } + + uh = uhopt.value(); + } + // | ---------------- wait for ready to takeoff --------------- | while (true) { @@ -30,7 +43,7 @@ bool Tester::test() { ROS_INFO_THROTTLE(1.0, "[%s]: waiting for the MRS UAV System", name_.c_str()); - if (mrsSystemReady()) { + if (uh->mrsSystemReady()) { ROS_INFO("[%s]: MRS UAV System is ready", name_.c_str()); break; } @@ -47,7 +60,7 @@ bool Tester::test() { srv.request.data = true; { - bool service_call = sch_arming_.call(srv); + bool service_call = uh->sch_arming_.call(srv); if (!service_call || !srv.response.success) { return false; @@ -61,7 +74,7 @@ bool Tester::test() { // | --------------------- check if armed --------------------- | - if (!sh_hw_api_status_.getMsg()->armed) { + if (!uh->sh_hw_api_status_.getMsg()->armed) { return false; } @@ -71,7 +84,7 @@ bool Tester::test() { std_srvs::Trigger srv; { - bool service_call = sch_offboard_.call(srv); + bool service_call = uh->sch_offboard_.call(srv); if (!service_call || !srv.response.success) { return false; @@ -85,7 +98,7 @@ bool Tester::test() { // | ------------------ check if in offboard ------------------ | - if (!sh_hw_api_status_.getMsg()->offboard) { + if (!uh->sh_hw_api_status_.getMsg()->offboard) { return false; } @@ -115,7 +128,7 @@ bool Tester::test() { ROS_INFO_THROTTLE(1.0, "[%s]: waiting for the takeoff to finish", name_.c_str()); - if (sh_control_manager_diag_.getMsg()->flying_normally) { + if (uh->sh_control_manager_diag_.getMsg()->flying_normally) { return true; }