@@ -67,12 +67,6 @@ class MockUGVSystem : public husarion_ugv_hardware_interfaces::UGVSystem
6767 MOCK_METHOD (void , DiagnoseErrors, (diagnostic_updater::DiagnosticStatusWrapper &), (override ));
6868 MOCK_METHOD (void , DiagnoseStatus, (diagnostic_updater::DiagnosticStatusWrapper &), (override ));
6969
70- void DefaultDefineRobotDriver ()
71- {
72- robot_driver_ =
73- std::make_shared<husarion_ugv_hardware_interfaces_test::MockRobotDriver::NiceMock>();
74- }
75-
7670 void SetHwCommandVelocity (const std::vector<double > & velocity)
7771 {
7872 hw_commands_velocities_ = velocity;
@@ -140,27 +134,36 @@ TEST_F(TestUGVSystem, OnInit)
140134
141135TEST_F (TestUGVSystem, OnConfigure)
142136{
137+ rclcpp::init (0 , nullptr );
138+
143139 ASSERT_NO_THROW (ugv_system_->on_init (hardware_info_));
144140
145- EXPECT_CALL (*ugv_system_, DefineRobotDriver ()).WillOnce (::testing::Invoke ([&]() {
146- ugv_system_->DefaultDefineRobotDriver ();
147- }));
141+ EXPECT_CALL (*ugv_system_, DefineRobotDriver ()).Times (1 );
148142 EXPECT_CALL (*ugv_system_, ConfigureGPIOController ()).Times (1 );
149143 EXPECT_CALL (*ugv_system_, ConfigureEStop ()).Times (1 );
144+ EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), Activate ()).Times (1 );
145+ EXPECT_CALL (*ugv_system_->GetMockGPIOController (), QueryControlInterfaceIOStates ()).Times (1 );
146+ EXPECT_CALL (*ugv_system_->GetMockEStop (), ReadEStopState ()).Times (1 );
150147 auto callback_return = ugv_system_->on_configure (rclcpp_lifecycle::State ());
151148
152149 EXPECT_EQ (callback_return, hardware_interface::CallbackReturn::SUCCESS );
150+
151+ rclcpp::shutdown ();
153152}
154153
155154TEST_F (TestUGVSystem, OnCleanup)
156155{
156+ rclcpp::init (0 , nullptr );
157+
157158 ASSERT_NO_THROW (ugv_system_->on_init (hardware_info_));
158159 ASSERT_NO_THROW (ugv_system_->on_configure (rclcpp_lifecycle::State ()));
159160
160161 EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), Deinitialize ()).Times (1 );
161162 auto callback_return = ugv_system_->on_cleanup (rclcpp_lifecycle::State ());
162163
163164 EXPECT_EQ (callback_return, hardware_interface::CallbackReturn::SUCCESS );
165+
166+ rclcpp::shutdown ();
164167}
165168
166169TEST_F (TestUGVSystem, OnActivate)
@@ -169,10 +172,6 @@ TEST_F(TestUGVSystem, OnActivate)
169172
170173 ASSERT_NO_THROW (ugv_system_->on_init (hardware_info_));
171174 ASSERT_NO_THROW (ugv_system_->on_configure (rclcpp_lifecycle::State ()));
172-
173- EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), Activate ()).Times (1 );
174- EXPECT_CALL (*ugv_system_->GetMockGPIOController (), QueryControlInterfaceIOStates ()).Times (1 );
175- EXPECT_CALL (*ugv_system_->GetMockEStop (), ReadEStopState ()).Times (1 );
176175 auto callback_return = ugv_system_->on_activate (rclcpp_lifecycle::State ());
177176
178177 EXPECT_EQ (callback_return, hardware_interface::CallbackReturn::SUCCESS );
@@ -198,6 +197,8 @@ TEST_F(TestUGVSystem, OnDeactivate)
198197
199198TEST_F (TestUGVSystem, OnShutdown)
200199{
200+ rclcpp::init (0 , nullptr );
201+
201202 ASSERT_NO_THROW (ugv_system_->on_init (hardware_info_));
202203 ASSERT_NO_THROW (ugv_system_->on_configure (rclcpp_lifecycle::State ()));
203204
@@ -206,10 +207,14 @@ TEST_F(TestUGVSystem, OnShutdown)
206207 auto callback_return = ugv_system_->on_shutdown (rclcpp_lifecycle::State ());
207208
208209 EXPECT_EQ (callback_return, hardware_interface::CallbackReturn::SUCCESS );
210+
211+ rclcpp::shutdown ();
209212}
210213
211214TEST_F (TestUGVSystem, OnError)
212215{
216+ rclcpp::init (0 , nullptr );
217+
213218 ASSERT_NO_THROW (ugv_system_->on_init (hardware_info_));
214219 ASSERT_NO_THROW (ugv_system_->on_configure (rclcpp_lifecycle::State ()));
215220
@@ -218,6 +223,8 @@ TEST_F(TestUGVSystem, OnError)
218223 auto callback_return = ugv_system_->on_error (rclcpp_lifecycle::State ());
219224
220225 EXPECT_EQ (callback_return, hardware_interface::CallbackReturn::SUCCESS );
226+
227+ rclcpp::shutdown ();
221228}
222229
223230TEST_F (TestUGVSystem, ExportStateInterfacesInitialValues)
@@ -359,19 +366,42 @@ TEST_F(TestUGVSystem, Write)
359366
360367 const auto velocity = std::vector<float >{1.0 , 2.0 , 3.0 , 4.0 };
361368
369+ // System is deactivated, no speed commands sent
362370 ASSERT_NO_THROW (ugv_system_->on_init (hardware_info_));
363371 ASSERT_NO_THROW (ugv_system_->on_configure (rclcpp_lifecycle::State ()));
364- ASSERT_NO_THROW (ugv_system_->on_activate (rclcpp_lifecycle::State ()));
365372
366- EXPECT_CALL (*ugv_system_, GetSpeedCommands ()).WillOnce (::testing::Return (velocity));
367373 EXPECT_CALL (*ugv_system_->GetMockEStop (), ReadEStopState ()).Times (1 );
368- EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), SendSpeedCommands (velocity)).Times (1 );
374+ EXPECT_CALL (*ugv_system_, GetSpeedCommands ()).Times (0 );
375+ EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), SendSpeedCommands (velocity)).Times (0 );
369376
370377 auto callback_return = ugv_system_->write (
371378 rclcpp::Time (0 , 0 , RCL_ROS_TIME ), rclcpp::Duration (0 , 0 ));
372379
373380 EXPECT_EQ (callback_return, hardware_interface::return_type::OK );
374381
382+ // System is activated, speed commands sent
383+ ugv_system_->set_lifecycle_state (
384+ rclcpp_lifecycle::State (lifecycle_msgs::msg::State::PRIMARY_STATE_ACTIVE , " test_active" ));
385+
386+ ASSERT_NO_THROW (ugv_system_->on_activate (rclcpp_lifecycle::State ()));
387+
388+ EXPECT_CALL (*ugv_system_->GetMockEStop (), ReadEStopState ()).Times (1 );
389+ EXPECT_CALL (*ugv_system_, GetSpeedCommands ()).WillOnce (::testing::Return (velocity));
390+ EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), SendSpeedCommands (velocity)).Times (1 );
391+
392+ callback_return = ugv_system_->write (rclcpp::Time (0 , 0 , RCL_ROS_TIME ), rclcpp::Duration (0 , 0 ));
393+
394+ EXPECT_EQ (callback_return, hardware_interface::return_type::OK );
395+
396+ // System is activated, but e-stop was triggered
397+ EXPECT_CALL (*ugv_system_->GetMockEStop (), ReadEStopState ()).WillOnce (::testing::Return (true ));
398+ EXPECT_CALL (*ugv_system_, GetSpeedCommands ()).Times (0 );
399+ EXPECT_CALL (*ugv_system_->GetMockRobotDriver (), SendSpeedCommands (velocity)).Times (0 );
400+
401+ callback_return = ugv_system_->write (rclcpp::Time (0 , 0 , RCL_ROS_TIME ), rclcpp::Duration (0 , 0 ));
402+
403+ EXPECT_EQ (callback_return, hardware_interface::return_type::OK );
404+
375405 rclcpp::shutdown ();
376406}
377407
0 commit comments