From 32c82c5128ea59e59327c223883a2a5e29265202 Mon Sep 17 00:00:00 2001 From: jonas Date: Wed, 22 Jul 2026 16:35:14 +0200 Subject: [PATCH] refactor(navigator): add test to confirm that new data invalidates old data --- src/modules/navigator/mission_route_cache.h | 4 ++++ src/modules/navigator/test/test_mission_route_cache.cpp | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/src/modules/navigator/mission_route_cache.h b/src/modules/navigator/mission_route_cache.h index 43166e63253..22f712f2524 100644 --- a/src/modules/navigator/mission_route_cache.h +++ b/src/modules/navigator/mission_route_cache.h @@ -94,6 +94,10 @@ public: /** True after queuing, reading, or validating the current mission land item failed. */ bool missionLandItemAttemptFailed() const { return _mission_land.retry.retry_count > 0; } + /** + * Returns the item count of the complete, validated safe-point generation. + * Returns zero while a replacement is pending (check safePointsReady()) and for a ready empty set. + */ int safePointCount() const override; bool loadSafePointItem(int index, mission_item_s &safe_point_item) const override; diff --git a/src/modules/navigator/test/test_mission_route_cache.cpp b/src/modules/navigator/test/test_mission_route_cache.cpp index bed0b85c5b9..eeb0a88b266 100644 --- a/src/modules/navigator/test/test_mission_route_cache.cpp +++ b/src/modules/navigator/test/test_mission_route_cache.cpp @@ -325,8 +325,17 @@ TEST_F(MissionRouteCacheTest, SafePointIdChangeReloadsReplacementSet) mission.safe_points_id = 101; mission.timestamp = hrt_absolute_time(); + // A source change immediately hides the old generation instead of blocking or exposing stale data. + _cache.update(mission); + EXPECT_EQ(_cache.safePointsId(), mission.safe_points_id); + EXPECT_FALSE(_cache.safePointsReady()); + EXPECT_TRUE(_cache.safePointUpdatePending()); + EXPECT_EQ(_cache.safePointCount(), 0); + EXPECT_FALSE(_cache.loadSafePointItem(0, safe_point)); + ASSERT_TRUE(MissionRouteCacheTestPeer::runCacheUntil(_cache, mission, [&] { return _cache.safePointsReady(); })) << "safe-point cache did not become ready"; + EXPECT_FALSE(_cache.safePointUpdatePending()); // The stale set is replaced. ASSERT_TRUE(_cache.loadSafePointItem(0, safe_point));