21 #include <gtest/gtest.h> 22 #include <gmock/gmock.h> 24 #include <std_srvs/Trigger.h> 26 #include <pilz_msgs/BrakeTest.h> 29 #include <prbt_hardware_support/BrakeTestErrorCodes.h> 37 using std::placeholders::_1;
42 MOCK_METHOD0(detectMotion,
bool());
43 MOCK_METHOD0(holdController,
void());
44 MOCK_METHOD0(executeBrakeTest, BrakeTest::Response());
45 MOCK_METHOD0(unholdController,
void());
46 MOCK_METHOD1(sendBrakeTestResult,
bool(
const bool brake_test_result));
63 TEST(BrakeTestExecutorTest, testBrakeTestTriggeringRobotNotMoving)
67 std::bind(&SystemMock::detectMotion, &mock), std::bind(&SystemMock::holdController, &mock),
68 std::bind(&SystemMock::executeBrakeTest, &mock), std::bind(&SystemMock::unholdController, &mock),
69 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1));
74 EXPECT_CALL(mock, detectMotion()).Times(1).WillOnce(Return(
false));
75 EXPECT_CALL(mock, holdController()).Times(1);
76 EXPECT_CALL(mock, executeBrakeTest()).Times(1).WillOnce(testing::Invoke([]() {
77 BrakeTest::Response res;
81 EXPECT_CALL(mock, unholdController()).Times(1);
82 EXPECT_CALL(mock, sendBrakeTestResult(_)).Times(1).WillOnce(Return(
true));
85 pilz_msgs::BrakeTest brake_test_srv;
86 EXPECT_TRUE(brake_test_executor.
executeBrakeTest(brake_test_srv.request, brake_test_srv.response)) <<
"Failed to " 89 EXPECT_TRUE(brake_test_srv.response.success)
90 <<
"Brake tests failed unexpectedly. Message: " << brake_test_srv.response.error_msg;
105 TEST(BrakeTestExecutorTest, testBrakeTestServiceWithRobotMotion)
109 std::bind(&SystemMock::detectMotion, &mock), std::bind(&SystemMock::holdController, &mock),
110 std::bind(&SystemMock::executeBrakeTest, &mock), std::bind(&SystemMock::unholdController, &mock),
111 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1));
113 EXPECT_CALL(mock, detectMotion()).Times(1).WillOnce(Return(
true));
114 EXPECT_CALL(mock, holdController()).Times(0);
115 EXPECT_CALL(mock, executeBrakeTest()).Times(0);
116 EXPECT_CALL(mock, unholdController()).Times(0);
117 EXPECT_CALL(mock, sendBrakeTestResult(_)).Times(0);
119 pilz_msgs::BrakeTest brake_test_srv;
120 EXPECT_TRUE(brake_test_executor.
executeBrakeTest(brake_test_srv.request, brake_test_srv.response));
121 EXPECT_FALSE(brake_test_srv.response.success) <<
"Brake tests was unexpectedly successful";
139 TEST(BrakeTestExecutorTest, testBrakeTestServiceTriggerFails)
143 std::bind(&SystemMock::detectMotion, &mock), std::bind(&SystemMock::holdController, &mock),
144 std::bind(&SystemMock::executeBrakeTest, &mock), std::bind(&SystemMock::unholdController, &mock),
145 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1));
150 EXPECT_CALL(mock, detectMotion()).Times(1).WillOnce(Return(
false));
151 EXPECT_CALL(mock, holdController()).Times(1);
152 EXPECT_CALL(mock, executeBrakeTest()).Times(1).WillOnce(testing::Invoke([]() {
153 BrakeTest::Response res;
155 res.error_msg =
"Test error message";
156 res.error_code.value = BrakeTestErrorCodes::FAILURE;
159 EXPECT_CALL(mock, unholdController()).Times(1);
160 EXPECT_CALL(mock, sendBrakeTestResult(_)).Times(1).WillOnce(Return(
true));
163 pilz_msgs::BrakeTest brake_test_srv;
164 EXPECT_TRUE(brake_test_executor.
executeBrakeTest(brake_test_srv.request, brake_test_srv.response));
165 EXPECT_FALSE(brake_test_srv.response.success);
179 TEST(BrakeTestExecutorTest, testBrakeTestResultServiceFails)
183 std::bind(&SystemMock::detectMotion, &mock), std::bind(&SystemMock::holdController, &mock),
184 std::bind(&SystemMock::executeBrakeTest, &mock), std::bind(&SystemMock::unholdController, &mock),
185 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1));
190 EXPECT_CALL(mock, detectMotion()).Times(1).WillOnce(Return(
false));
191 EXPECT_CALL(mock, holdController()).Times(1);
192 EXPECT_CALL(mock, executeBrakeTest()).Times(1).WillOnce(testing::Invoke([]() {
193 BrakeTest::Response res;
197 EXPECT_CALL(mock, unholdController()).Times(1);
198 EXPECT_CALL(mock, sendBrakeTestResult(_)).Times(1).WillOnce(Return(
false));
201 pilz_msgs::BrakeTest brake_test_srv;
202 EXPECT_TRUE(brake_test_executor.
executeBrakeTest(brake_test_srv.request, brake_test_srv.response));
203 EXPECT_FALSE(brake_test_srv.response.success);
210 TEST(BrakeTestExecutorTest, testMissingHoldFunc)
213 EXPECT_THROW(
BrakeTestExecutor(std::bind(&SystemMock::detectMotion, &mock),
nullptr,
214 std::bind(&SystemMock::executeBrakeTest, &mock),
215 std::bind(&SystemMock::unholdController, &mock),
216 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1)),
224 TEST(BrakeTestExecutorTest, testMissingUnholdFunc)
228 std::bind(&SystemMock::holdController, &mock),
229 std::bind(&SystemMock::executeBrakeTest, &mock),
nullptr,
230 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1)),
238 TEST(BrakeTestExecutorTest, testMissingDetectMotionFunc)
241 EXPECT_THROW(
BrakeTestExecutor(
nullptr, std::bind(&SystemMock::holdController, &mock),
242 std::bind(&SystemMock::executeBrakeTest, &mock),
243 std::bind(&SystemMock::unholdController, &mock),
244 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1)),
252 TEST(BrakeTestExecutorTest, testMissingExecuteBrakeTestFunc)
256 std::bind(&SystemMock::holdController, &mock),
nullptr,
257 std::bind(&SystemMock::unholdController, &mock),
258 std::bind(&SystemMock::sendBrakeTestResult, &mock, _1)),
266 TEST(BrakeTestExecutorTest, testMissingSendBrakeTestResultFunc)
270 std::bind(&SystemMock::holdController, &mock),
271 std::bind(&SystemMock::executeBrakeTest, &mock),
272 std::bind(&SystemMock::unholdController, &mock),
nullptr),
280 TEST(BrakeTestExecutorTest, testDtorBrakeTestExecutorException)
288 MOCK_METHOD1(
call,
bool(std_srvs::Trigger& srv));
289 MOCK_METHOD0(getService, std::string());
295 TEST(BrakeTestExecutorTest, testTriggerServiceCallFailure)
298 EXPECT_CALL(mock, getService()).WillRepeatedly(Return(
"TestServiceName"));
299 EXPECT_CALL(mock,
call(_)).Times(1).WillOnce(Return(
false));
301 triggerServiceCall<TriggerServiceMock>(mock);
308 TEST(BrakeTestExecutorTest, testTriggerServiceCallResponseFalse)
311 EXPECT_CALL(mock, getService()).WillRepeatedly(Return(
"TestServiceName"));
312 std_srvs::Trigger exp_srv;
313 exp_srv.response.success =
false;
314 EXPECT_CALL(mock,
call(_)).Times(1).WillOnce(DoAll(SetArgReferee<0>(exp_srv), Return(
true)));
316 triggerServiceCall<TriggerServiceMock>(mock);
322 MOCK_METHOD1(
call,
bool(BrakeTest& srv));
323 MOCK_METHOD0(getService, std::string());
331 TEST(BrakeTestExecutorTest, testExecuteBrakeTestCallFailure)
334 EXPECT_CALL(mock, getService()).WillRepeatedly(Return(
"TestServiceName"));
335 EXPECT_CALL(mock,
call(_)).Times(1).WillOnce(Return(
false));
337 BrakeTest::Response res{ executeBrakeTestCall<BrakeTestServiceMock>(mock) };
338 EXPECT_FALSE(res.success);
339 EXPECT_EQ(res.error_code.value, BrakeTestErrorCodes::TRIGGER_BRAKETEST_SERVICE_FAILURE);
345 MOCK_METHOD1(
call,
bool(SendBrakeTestResult& srv));
346 MOCK_METHOD0(getService, std::string());
352 TEST(BrakeTestExecutorTest, testSendBrakeTestResultCallFailure)
355 EXPECT_CALL(mock, getService()).WillRepeatedly(Return(
"TestServiceName"));
356 EXPECT_CALL(mock,
call(_)).Times(1).WillOnce(Return(
false));
358 EXPECT_FALSE(sendBrakeTestResultCall<SendBrakeTestResltServiceMock>(mock,
true));
363 return !arg.request.result;
369 TEST(BrakeTestExecutorTest, testSendBrakeTestResultCallSuccess)
372 EXPECT_CALL(mock, getService()).WillRepeatedly(Return(
"TestServiceName"));
373 EXPECT_CALL(mock,
call(IsRequestResultFalse())).Times(1).WillOnce(Return(
true));
375 EXPECT_TRUE(sendBrakeTestResultCall<SendBrakeTestResltServiceMock>(mock,
false));
380 int main(
int argc,
char* argv[])
382 testing::InitGoogleMock(&argc, argv);
383 return RUN_ALL_TESTS();
bool executeBrakeTest(pilz_msgs::BrakeTest::Request &req, pilz_msgs::BrakeTest::Response &response)
bool call(const std::string &service_name, MReq &req, MRes &res)
Triggers execution of brake tests only if the controller is not executing a trajectory.
MATCHER(IsRequestResultFalse, "")
TEST(BrakeTestExecutorTest, testBrakeTestTriggeringRobotNotMoving)
int main(int argc, char *argv[])