Browse Source

autopilot_tester: don't poll mission progress

Instead use subscription here as well in order not to miss an update.
release/1.12
Julian Oes 4 years ago committed by Lorenz Meier
parent
commit
4184c204c4
  1. 23
      test/mavsdk_tests/autopilot_tester.cpp
  2. 1
      test/mavsdk_tests/autopilot_tester.h

23
test/mavsdk_tests/autopilot_tester.cpp

@ -226,13 +226,7 @@ void AutopilotTester::execute_mission() @@ -226,13 +226,7 @@ void AutopilotTester::execute_mission()
// TODO: Adapt time limit based on mission size, flight speed, sim speed factor, etc.
REQUIRE(poll_condition_with_timeout(
[this]() {
auto result = _mission->is_mission_finished();
return result.first == Mission::Result::Success && result.second;
}, std::chrono::seconds(60)));
REQUIRE(fut.wait_for(std::chrono::seconds(1)) == std::future_status::ready);
wait_for_mission_finished(std::chrono::seconds(60));
}
void AutopilotTester::execute_mission_and_lose_gps()
@ -611,6 +605,21 @@ void AutopilotTester::wait_for_landed_state(Telemetry::LandedState landed_state, @@ -611,6 +605,21 @@ void AutopilotTester::wait_for_landed_state(Telemetry::LandedState landed_state,
REQUIRE(fut.wait_for(timeout) == std::future_status::ready);
}
void AutopilotTester::wait_for_mission_finished(std::chrono::seconds timeout)
{
auto prom = std::promise<void> {};
auto fut = prom.get_future();
_mission->subscribe_mission_progress([&prom, this](Mission::MissionProgress progress) {
if (progress.current == progress.total) {
_mission->subscribe_mission_progress(nullptr);
prom.set_value();
}
});
REQUIRE(fut.wait_for(timeout) == std::future_status::ready);
}
std::chrono::milliseconds AutopilotTester::adjust_to_lockstep_speed(std::chrono::milliseconds duration_ms)
{
if (_info == nullptr) {

1
test/mavsdk_tests/autopilot_tester.h

@ -129,6 +129,7 @@ private: @@ -129,6 +129,7 @@ private:
void start_and_wait_for_first_mission_item();
void wait_for_flight_mode(Telemetry::FlightMode flight_mode, std::chrono::seconds timeout);
void wait_for_landed_state(Telemetry::LandedState landed_state, std::chrono::seconds timeout);
void wait_for_mission_finished(std::chrono::seconds timeout);
std::chrono::milliseconds adjust_to_lockstep_speed(std::chrono::milliseconds duration_ms);

Loading…
Cancel
Save