24 #include <gtest/gtest.h> 25 #include <gmock/gmock.h> 29 #include <pilz_testutils/async_test.h> 34 #define EXPECT_RECOVER \ 35 EXPECT_CALL(*this, recover_func()) \ 36 .WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(RECOVER_SRV_CALLED_EVENT), Return(true))) 38 #define EXPECT_UNHOLD \ 39 EXPECT_CALL(*this, unhold_func()) \ 40 .WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(UNHOLD_SRV_CALLED_EVENT), Return(true))) 43 EXPECT_CALL(*this, hold_func()) \ 44 .WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(HOLD_SRV_CALLED_EVENT), Return(true))) 47 EXPECT_CALL(*this, halt_func()) \ 48 .WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(HALT_SRV_CALLED_EVENT), Return(true))) 56 using ::testing::DoAll;
57 using ::testing::InSequence;
58 using ::testing::Invoke;
59 using ::testing::InvokeWithoutArgs;
60 using ::testing::Return;
61 using ::testing::AtLeast;
78 :
Stop1Executor(hold_func, unhold_func, recover_func, halt_func)
94 MOCK_METHOD0(hold_func,
bool());
95 MOCK_METHOD0(unhold_func,
bool());
96 MOCK_METHOD0(recover_func,
bool());
97 MOCK_METHOD0(halt_func,
bool());
104 std::bind(&Stop1ExecutorTest::unhold_func,
this),
105 std::bind(&Stop1ExecutorTest::recover_func,
this),
106 std::bind(&Stop1ExecutorTest::halt_func,
this) );
117 std::shared_ptr<Stop1Executor> adapter_run_permitted {
new Stop1Executor( std::bind(&Stop1ExecutorTest::hold_func,
this),
118 std::bind(&Stop1ExecutorTest::unhold_func,
this),
119 std::bind(&Stop1ExecutorTest::recover_func,
this),
120 std::bind(&Stop1ExecutorTest::halt_func,
this) ) };
124 Stop1Executor adapter_run_permitted( std::bind(&Stop1ExecutorTest::hold_func,
this),
125 std::bind(&Stop1ExecutorTest::unhold_func,
this),
126 std::bind(&Stop1ExecutorTest::recover_func,
this),
127 std::bind(&Stop1ExecutorTest::halt_func,
this) );
152 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
153 adapter_run_permitted->updateRunPermitted(
true);
191 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
192 adapter_run_permitted->updateRunPermitted(
true);
205 adapter_run_permitted->updateRunPermitted(
false);
218 std::atomic_bool keep_spamming{
true};
219 std::thread spam_enable{[&adapter_run_permitted, &keep_spamming]() {
while (keep_spamming) { adapter_run_permitted->updateRunPermitted(
true); } }};
223 keep_spamming =
false;
262 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
264 std::atomic_bool keep_spamming{
true};
265 std::thread spam_enable{[&adapter_run_permitted, &keep_spamming]() {
while (keep_spamming) { adapter_run_permitted->updateRunPermitted(
true); } }};
269 keep_spamming =
false;
276 adapter_run_permitted->updateRunPermitted(
true);
287 adapter_run_permitted->updateRunPermitted(
false);
327 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
329 adapter_run_permitted->updateRunPermitted(
true);
342 std::atomic_bool keep_spamming{
true};
343 std::thread spam_disable{[&adapter_run_permitted, &keep_spamming]() {
while (keep_spamming) { adapter_run_permitted->updateRunPermitted(
false); } }};
347 keep_spamming =
false;
359 keep_spamming =
true;
360 std::thread spam_enable{[&adapter_run_permitted, &keep_spamming]() {
while (keep_spamming) { adapter_run_permitted->updateRunPermitted(
true); } }};
364 keep_spamming =
false;
394 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
397 auto run_permitted_false_during_recover_action = [
this, &adapter_run_permitted]() {
399 adapter_run_permitted->updateRunPermitted(
false);
403 auto halt_action = [
this]() {
414 EXPECT_CALL(*
this, recover_func())
415 .WillOnce(InvokeWithoutArgs(run_permitted_false_during_recover_action));
417 EXPECT_CALL(*
this, halt_func())
418 .WillOnce(InvokeWithoutArgs(halt_action));
421 adapter_run_permitted->updateRunPermitted(
true);
434 std::atomic_bool keep_spamming{
true};
435 std::thread spam_enable{[&adapter_run_permitted, &keep_spamming]() {
while (keep_spamming) { adapter_run_permitted->updateRunPermitted(
true); } }};
439 keep_spamming =
false;
464 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
466 auto enable_during_hold_action = [
this, &adapter_run_permitted]() {
467 adapter_run_permitted->updateRunPermitted(
true);
482 adapter_run_permitted->updateRunPermitted(
true);
489 EXPECT_CALL(*
this, hold_func())
490 .WillOnce(InvokeWithoutArgs(enable_during_hold_action));
497 adapter_run_permitted->updateRunPermitted(
false);
522 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
525 auto run_permitted_false_during_recover_action = [
this, &adapter_run_permitted]() {
527 adapter_run_permitted->updateRunPermitted(
false);
531 auto enable_during_halt_action = [
this, &adapter_run_permitted]() {
533 adapter_run_permitted->updateRunPermitted(
true);
541 const std::string RECOVER_SRV_CALLED_EVENT2{
"recover_srv_called2"};
542 const std::string UNHOLD_SRV_CALLED_EVENT2{
"unhold_srv_called2"};
546 EXPECT_CALL(*
this, recover_func())
547 .WillOnce(InvokeWithoutArgs(run_permitted_false_during_recover_action));
549 EXPECT_CALL(*
this, halt_func())
550 .WillOnce(InvokeWithoutArgs(enable_during_halt_action));
552 EXPECT_CALL(*
this, recover_func())
553 .WillOnce(InvokeWithoutArgs([
this, RECOVER_SRV_CALLED_EVENT2]() {
554 this->triggerClearEvent(RECOVER_SRV_CALLED_EVENT2);
558 EXPECT_CALL(*
this, unhold_func())
559 .WillOnce(InvokeWithoutArgs([
this, UNHOLD_SRV_CALLED_EVENT2]() {
560 this->triggerClearEvent(UNHOLD_SRV_CALLED_EVENT2);
565 adapter_run_permitted->updateRunPermitted(
true);
591 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
594 auto run_permitted_false_during_recover_action = [
this, &adapter_run_permitted]() {
596 adapter_run_permitted->updateRunPermitted(
false);
600 auto enable_during_halt_action = [
this, &adapter_run_permitted]() {
602 adapter_run_permitted->updateRunPermitted(
true);
603 adapter_run_permitted->updateRunPermitted(
false);
614 EXPECT_CALL(*
this, recover_func())
616 .WillOnce(InvokeWithoutArgs(run_permitted_false_during_recover_action));
618 EXPECT_CALL(*
this, halt_func())
620 .WillOnce(InvokeWithoutArgs(enable_during_halt_action));
623 adapter_run_permitted->updateRunPermitted(
true);
657 EXPECT_CALL(*
this, recover_func())
659 .WillRepeatedly(Return(
false));
662 EXPECT_CALL(*
this, unhold_func())
663 .WillRepeatedly(Return(
true));
665 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
667 adapter_run_permitted->updateRunPermitted(
true);
678 EXPECT_CALL(*
this, hold_func())
679 .WillRepeatedly(Return(
true));
684 adapter_run_permitted->updateRunPermitted(
false);
698 std::atomic_bool keep_spamming{
true};
699 std::thread spam_enable{[&adapter_run_permitted, &keep_spamming]() {
while (keep_spamming) { adapter_run_permitted->updateRunPermitted(
true); } }};
703 keep_spamming =
false;
732 EXPECT_CALL(*
this, unhold_func())
734 .WillRepeatedly(Return(
false));
737 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
738 adapter_run_permitted->updateRunPermitted(
true);
752 adapter_run_permitted->updateRunPermitted(
false);
784 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
786 adapter_run_permitted->updateRunPermitted(
true);
796 EXPECT_CALL(*
this, hold_func())
798 .WillRepeatedly(Return(
false));
800 EXPECT_CALL(*
this, halt_func())
802 .WillRepeatedly(Return(
false));
805 adapter_run_permitted->updateRunPermitted(
false);
825 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
828 auto unhold_action = [
this, &adapter_run_permitted]() {
830 adapter_run_permitted->updateRunPermitted(
false);
842 EXPECT_CALL(*
this, unhold_func())
843 .WillOnce(InvokeWithoutArgs(unhold_action));
849 adapter_run_permitted->updateRunPermitted(
true);
869 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
872 auto recover_action = [
this, &adapter_run_permitted]() {
873 adapter_run_permitted->stopStateMachine();
881 EXPECT_CALL(*
this, recover_func())
882 .WillOnce(InvokeWithoutArgs(recover_action));
885 EXPECT_CALL(*
this, unhold_func())
886 .WillRepeatedly(Return(
true));
889 adapter_run_permitted->updateRunPermitted(
true);
911 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
923 adapter_run_permitted->updateRunPermitted(
true);
931 auto hold_action = [
this, &adapter_run_permitted]() {
932 adapter_run_permitted->stopStateMachine();
940 EXPECT_CALL(*
this, hold_func())
941 .WillOnce(InvokeWithoutArgs(hold_action));
944 EXPECT_CALL(*
this, halt_func())
945 .WillRepeatedly(Return(
true));
948 adapter_run_permitted->updateRunPermitted(
false);
968 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
971 auto recover_action = [
this, &adapter_run_permitted]() {
972 adapter_run_permitted->updateRunPermitted(
false);
973 adapter_run_permitted->stopStateMachine();
984 EXPECT_CALL(*
this, recover_func())
985 .WillOnce(InvokeWithoutArgs(recover_action));
988 EXPECT_CALL(*
this, halt_func())
989 .WillRepeatedly(Return(
true));
992 adapter_run_permitted->updateRunPermitted(
true);
1015 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted {createStop1Executor()};
1027 adapter_run_permitted->updateRunPermitted(
true);
1035 auto enable_during_hold_action = [
this, &adapter_run_permitted]() {
1036 adapter_run_permitted->updateRunPermitted(
true);
1037 adapter_run_permitted->stopStateMachine();
1045 EXPECT_CALL(*
this, hold_func())
1046 .WillOnce(InvokeWithoutArgs(enable_during_hold_action));
1049 EXPECT_CALL(*
this, halt_func())
1050 .WillRepeatedly(Return(
true));
1051 EXPECT_CALL(*
this, recover_func())
1052 .WillRepeatedly(Return(
true));
1053 EXPECT_CALL(*
this, unhold_func())
1054 .WillRepeatedly(Return(
true));
1057 adapter_run_permitted->updateRunPermitted(
false);
1070 testing::InitGoogleMock(&argc, argv);
1071 return RUN_ALL_TESTS();
TEST_F(Stop1ExecutorTest, testDestructor)
Test increases function coverage by ensuring that all Dtor variants are called.
Stop1ExecutorForTests(const TServiceCallFunc &hold_func, const TServiceCallFunc &unhold_func, const TServiceCallFunc &recover_func, const TServiceCallFunc &halt_func)
const std::string UNHOLD_SRV_CALLED_EVENT
const std::string RECOVER_SRV_CALLED_EVENT
int main(int argc, char **argv)
Stop1ExecutorForTests * createStop1Executor()
const std::string HALT_SRV_CALLED_EVENT
const std::string HOLD_SRV_CALLED_EVENT
Performs service calls for Stop1 and the respective reversal, that is enabling the manipulator...
std::function< bool()> TServiceCallFunc