optimal & fix file cmake
This commit is contained in:
@@ -96,6 +96,71 @@ TEST(MissionAdapterBridgeConversion, ActionOnlyMissionKeepsHasGoalFalse)
|
||||
EXPECT_EQ(request.actions.size(), 3U);
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridgeConversion, CarriesDockingMarkerIndependentlyOfGoalFrame)
|
||||
{
|
||||
auto mission = makeMission(10);
|
||||
mission->motion_hint = "docking";
|
||||
mission->marker = "charger";
|
||||
mission->goal_frame = "charger_02_goal";
|
||||
|
||||
const NavigationRequest request = MissionAdapterBridge::toRequest(*mission);
|
||||
EXPECT_EQ(request.profile, move_base2::MotionProfile::kDocking);
|
||||
EXPECT_EQ(request.marker, "charger");
|
||||
EXPECT_EQ(request.goal_frame, "charger_02_goal");
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridgeConversion, OrderLegCarriesItsOwnNodesAndEdges)
|
||||
{
|
||||
// Global planner của profile position (`CustomPlanner`) CHỈ hiện thực nhánh
|
||||
// makePlan(Order, ...); nhánh ba tham số của nó là stub trả false. Chặng đi xuống mà không mang
|
||||
// order thì fail ngay lượt lập plan đầu và chạy thẳng vào recovery cho tới ABORTED — đã xảy ra
|
||||
// thật ngày 2026-07-31.
|
||||
auto mission = makeMission(4, 2.0);
|
||||
mission->type = mission_adapters::MissionType::VDA5050_ORDER;
|
||||
|
||||
robot_protocol_msgs::Node n0;
|
||||
n0.nodeId = "n0";
|
||||
robot_protocol_msgs::Node n1;
|
||||
n1.nodeId = "n1";
|
||||
mission->nodes = { n0, n1 };
|
||||
|
||||
robot_protocol_msgs::Edge e0;
|
||||
e0.edgeId = "e0";
|
||||
e0.startNodeId = "n0";
|
||||
e0.endNodeId = "n1";
|
||||
e0.trajectory.degree = 1;
|
||||
mission->edges = { e0 };
|
||||
|
||||
const NavigationRequest request = MissionAdapterBridge::toRequest(*mission);
|
||||
|
||||
ASSERT_NE(request.order, nullptr);
|
||||
ASSERT_EQ(request.order->nodes.size(), 2U);
|
||||
EXPECT_EQ(request.order->nodes[1].nodeId, "n1");
|
||||
|
||||
// Edge của CHẶNG, không phải của cả order: planner tra edge theo startNodeId/endNodeId trong tập
|
||||
// node nó nhận được, nên tập hai bên phải khớp nhau.
|
||||
ASSERT_EQ(request.order->edges.size(), 1U);
|
||||
EXPECT_EQ(request.order->edges[0].startNodeId, "n0");
|
||||
EXPECT_EQ(request.order->edges[0].trajectory.degree, 1U);
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridgeConversion, SimpleGoalMissionCarriesNoOrder)
|
||||
{
|
||||
const auto mission = makeMission(2); // mặc định SIMPLE_GOAL
|
||||
const NavigationRequest request = MissionAdapterBridge::toRequest(*mission);
|
||||
EXPECT_EQ(request.order, nullptr);
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridgeConversion, ActionOnlyLegCarriesNoOrder)
|
||||
{
|
||||
// Không có quãng đường nào để lập plan, nên cũng không có gì để đưa cho planner.
|
||||
auto mission = makeMission(3, 0.0, 1, /*has_goal=*/false);
|
||||
mission->type = mission_adapters::MissionType::VDA5050_ORDER;
|
||||
|
||||
const NavigationRequest request = MissionAdapterBridge::toRequest(*mission);
|
||||
EXPECT_EQ(request.order, nullptr);
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridgeConversion, LeavesToleranceAtProfileDefault)
|
||||
{
|
||||
// Quy ước của NavigationRequest: sai số <= 0 nghĩa "dùng default của profile trong config".
|
||||
@@ -103,8 +168,6 @@ TEST(MissionAdapterBridgeConversion, LeavesToleranceAtProfileDefault)
|
||||
const auto mission = makeMission(1);
|
||||
const NavigationRequest request = MissionAdapterBridge::toRequest(*mission);
|
||||
|
||||
EXPECT_FALSE(request.tolerance.hasXy());
|
||||
EXPECT_FALSE(request.tolerance.hasYaw());
|
||||
}
|
||||
|
||||
// ================================================================================================
|
||||
@@ -118,7 +181,8 @@ TEST(MissionAdapterBridge, DispatchDoesNotReachNavigationUntilPumped)
|
||||
Fixture fixture;
|
||||
|
||||
ASSERT_TRUE(fixture.bridge_.dispatch(makeMission(3)));
|
||||
EXPECT_TRUE(fixture.received_.empty()) << "dispatch đi thẳng xuống navigation, bỏ qua biên thread";
|
||||
EXPECT_TRUE(fixture.received_.empty()) << "dispatch went straight down to navigation, skipping "
|
||||
"the thread boundary";
|
||||
|
||||
EXPECT_TRUE(fixture.bridge_.pumpPendingRequest());
|
||||
ASSERT_EQ(fixture.received_.size(), 1U);
|
||||
@@ -139,7 +203,7 @@ TEST(MissionAdapterBridge, EachMissionIsPushedDownExactlyOnce)
|
||||
|
||||
ASSERT_TRUE(fixture.bridge_.dispatch(makeMission(4)));
|
||||
EXPECT_TRUE(fixture.bridge_.pumpPendingRequest());
|
||||
EXPECT_FALSE(fixture.bridge_.pumpPendingRequest()) << "cùng một mission bị đẩy xuống hai lần";
|
||||
EXPECT_FALSE(fixture.bridge_.pumpPendingRequest()) << "the same mission was pushed down twice";
|
||||
EXPECT_EQ(fixture.received_.size(), 1U);
|
||||
}
|
||||
|
||||
@@ -192,7 +256,7 @@ TEST(MissionAdapterBridge, OverwritingAWaitingMissionIsCounted)
|
||||
|
||||
ASSERT_TRUE(fixture.bridge_.pumpPendingRequest());
|
||||
ASSERT_EQ(fixture.received_.size(), 1U);
|
||||
EXPECT_EQ(fixture.received_[0].mission_sequence_id, 2U) << "mission cũ thắng mission mới";
|
||||
EXPECT_EQ(fixture.received_[0].mission_sequence_id, 2U) << "the old mission won over the new one";
|
||||
}
|
||||
|
||||
// ================================================================================================
|
||||
@@ -238,7 +302,8 @@ TEST(MissionAdapterBridge, DirectGoalWithoutMissionIdIsNotReported)
|
||||
|
||||
fixture.bridge_.reportOutcome(0, NavigationOutcome::kSucceeded);
|
||||
|
||||
EXPECT_EQ(fixture.bridge_.staleOutcomes(), 0U) << "goal trực tiếp bị đem báo lên mission layer";
|
||||
EXPECT_EQ(fixture.bridge_.staleOutcomes(), 0U) << "a direct goal was reported up to the mission "
|
||||
"layer";
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridge, SuccessReachesTheManagerAsNavigationDone)
|
||||
@@ -249,13 +314,13 @@ TEST(MissionAdapterBridge, SuccessReachesTheManagerAsNavigationDone)
|
||||
|
||||
manager.submit({ makeMission(0) });
|
||||
const auto running = manager.nextMission();
|
||||
ASSERT_TRUE(running) << "manager không giao mission nào để chạy";
|
||||
ASSERT_TRUE(running) << "manager handed over no mission to run";
|
||||
|
||||
fixture.bridge_.reportOutcome(running->id, NavigationOutcome::kSucceeded);
|
||||
|
||||
EXPECT_EQ(fixture.bridge_.staleOutcomes(), 0U);
|
||||
EXPECT_EQ(manager.currentMissionId(), mission_adapters::kInvalidMissionId)
|
||||
<< "mission vẫn còn đang chạy sau khi đã báo hoàn tất";
|
||||
<< "mission is still running after completion was reported";
|
||||
}
|
||||
|
||||
TEST(MissionAdapterBridge, OutcomeForAMissionThatIsNoLongerRunningIsCounted)
|
||||
|
||||
Reference in New Issue
Block a user