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()).WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(RECOVER_SRV_CALLED_EVENT), Return(true))) 37 #define EXPECT_UNHOLD \ 38 EXPECT_CALL(*this, unhold_func()).WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(UNHOLD_SRV_CALLED_EVENT), Return(true))) 41 EXPECT_CALL(*this, hold_func()).WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(HOLD_SRV_CALLED_EVENT), Return(true))) 44 EXPECT_CALL(*this, halt_func()).WillOnce(DoAll(ACTION_OPEN_BARRIER_VOID(HALT_SRV_CALLED_EVENT), Return(true))) 51 using ::testing::AtLeast;
52 using ::testing::DoAll;
53 using ::testing::InSequence;
54 using ::testing::Invoke;
55 using ::testing::InvokeWithoutArgs;
56 using ::testing::Return;
71 :
Stop1Executor(hold_func, unhold_func, recover_func, halt_func)
87 MOCK_METHOD0(hold_func,
bool());
88 MOCK_METHOD0(unhold_func,
bool());
89 MOCK_METHOD0(recover_func,
bool());
90 MOCK_METHOD0(halt_func,
bool());
96 std::bind(&Stop1ExecutorTest::hold_func,
this), std::bind(&Stop1ExecutorTest::unhold_func,
this),
97 std::bind(&Stop1ExecutorTest::recover_func,
this), std::bind(&Stop1ExecutorTest::halt_func,
this));
108 std::shared_ptr<Stop1Executor> adapter_run_permitted{
new Stop1Executor(
109 std::bind(&Stop1ExecutorTest::hold_func,
this), std::bind(&Stop1ExecutorTest::unhold_func,
this),
110 std::bind(&Stop1ExecutorTest::recover_func,
this), std::bind(&Stop1ExecutorTest::halt_func,
this)) };
115 std::bind(&Stop1ExecutorTest::hold_func,
this), std::bind(&Stop1ExecutorTest::unhold_func,
this),
116 std::bind(&Stop1ExecutorTest::recover_func,
this), std::bind(&Stop1ExecutorTest::halt_func,
this));
141 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
142 adapter_run_permitted->updateRunPermitted(
true);
180 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
181 adapter_run_permitted->updateRunPermitted(
true);
194 adapter_run_permitted->updateRunPermitted(
false);
207 std::atomic_bool keep_spamming{
true };
208 std::thread spam_enable{ [&adapter_run_permitted, &keep_spamming]() {
209 while (keep_spamming)
211 adapter_run_permitted->updateRunPermitted(
true);
217 keep_spamming =
false;
256 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
258 std::atomic_bool keep_spamming{
true };
259 std::thread spam_enable{ [&adapter_run_permitted, &keep_spamming]() {
260 while (keep_spamming)
262 adapter_run_permitted->updateRunPermitted(
true);
268 keep_spamming =
false;
275 adapter_run_permitted->updateRunPermitted(
true);
286 adapter_run_permitted->updateRunPermitted(
false);
326 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
328 adapter_run_permitted->updateRunPermitted(
true);
341 std::atomic_bool keep_spamming{
true };
342 std::thread spam_disable{ [&adapter_run_permitted, &keep_spamming]() {
343 while (keep_spamming)
345 adapter_run_permitted->updateRunPermitted(
false);
351 keep_spamming =
false;
363 keep_spamming =
true;
364 std::thread spam_enable{ [&adapter_run_permitted, &keep_spamming]() {
365 while (keep_spamming)
367 adapter_run_permitted->updateRunPermitted(
true);
373 keep_spamming =
false;
403 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
406 auto run_permitted_false_during_recover_action = [
this, &adapter_run_permitted]() {
408 adapter_run_permitted->updateRunPermitted(
false);
412 auto halt_action = [
this]() {
423 EXPECT_CALL(*
this, recover_func()).WillOnce(InvokeWithoutArgs(run_permitted_false_during_recover_action));
425 EXPECT_CALL(*
this, halt_func()).WillOnce(InvokeWithoutArgs(halt_action));
428 adapter_run_permitted->updateRunPermitted(
true);
441 std::atomic_bool keep_spamming{
true };
442 std::thread spam_enable{ [&adapter_run_permitted, &keep_spamming]() {
443 while (keep_spamming)
445 adapter_run_permitted->updateRunPermitted(
true);
451 keep_spamming =
false;
476 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
478 auto enable_during_hold_action = [
this, &adapter_run_permitted]() {
479 adapter_run_permitted->updateRunPermitted(
true);
494 adapter_run_permitted->updateRunPermitted(
true);
501 EXPECT_CALL(*
this, hold_func()).WillOnce(InvokeWithoutArgs(enable_during_hold_action));
508 adapter_run_permitted->updateRunPermitted(
false);
533 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
536 auto run_permitted_false_during_recover_action = [
this, &adapter_run_permitted]() {
538 adapter_run_permitted->updateRunPermitted(
false);
542 auto enable_during_halt_action = [
this, &adapter_run_permitted]() {
544 adapter_run_permitted->updateRunPermitted(
true);
552 const std::string recover_srv_called_event2{
"recover_srv_called2" };
553 const std::string unhold_srv_called_event2{
"unhold_srv_called2" };
557 EXPECT_CALL(*
this, recover_func()).WillOnce(InvokeWithoutArgs(run_permitted_false_during_recover_action));
559 EXPECT_CALL(*
this, halt_func()).WillOnce(InvokeWithoutArgs(enable_during_halt_action));
561 EXPECT_CALL(*
this, recover_func()).WillOnce(InvokeWithoutArgs([
this, recover_srv_called_event2]() {
562 this->triggerClearEvent(recover_srv_called_event2);
566 EXPECT_CALL(*
this, unhold_func()).WillOnce(InvokeWithoutArgs([
this, unhold_srv_called_event2]() {
567 this->triggerClearEvent(unhold_srv_called_event2);
572 adapter_run_permitted->updateRunPermitted(
true);
598 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
601 auto run_permitted_false_during_recover_action = [
this, &adapter_run_permitted]() {
603 adapter_run_permitted->updateRunPermitted(
false);
607 auto enable_during_halt_action = [
this, &adapter_run_permitted]() {
609 adapter_run_permitted->updateRunPermitted(
true);
610 adapter_run_permitted->updateRunPermitted(
false);
621 EXPECT_CALL(*
this, recover_func()).Times(1).WillOnce(InvokeWithoutArgs(run_permitted_false_during_recover_action));
623 EXPECT_CALL(*
this, halt_func()).Times(1).WillOnce(InvokeWithoutArgs(enable_during_halt_action));
626 adapter_run_permitted->updateRunPermitted(
true);
660 EXPECT_CALL(*
this, recover_func())
662 .WillRepeatedly(Return(
false));
665 EXPECT_CALL(*
this, unhold_func()).WillRepeatedly(Return(
true));
667 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
669 adapter_run_permitted->updateRunPermitted(
true);
680 EXPECT_CALL(*
this, hold_func()).WillRepeatedly(Return(
true));
685 adapter_run_permitted->updateRunPermitted(
false);
699 std::atomic_bool keep_spamming{
true };
700 std::thread spam_enable{ [&adapter_run_permitted, &keep_spamming]() {
701 while (keep_spamming)
703 adapter_run_permitted->updateRunPermitted(
true);
709 keep_spamming =
false;
738 EXPECT_CALL(*
this, unhold_func())
740 .WillRepeatedly(Return(
false));
743 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
744 adapter_run_permitted->updateRunPermitted(
true);
758 adapter_run_permitted->updateRunPermitted(
false);
790 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
792 adapter_run_permitted->updateRunPermitted(
true);
802 EXPECT_CALL(*
this, hold_func())
804 .WillRepeatedly(Return(
false));
806 EXPECT_CALL(*
this, halt_func())
808 .WillRepeatedly(Return(
false));
811 adapter_run_permitted->updateRunPermitted(
false);
831 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
834 auto unhold_action = [
this, &adapter_run_permitted]() {
836 adapter_run_permitted->updateRunPermitted(
false);
848 EXPECT_CALL(*
this, unhold_func()).WillOnce(InvokeWithoutArgs(unhold_action));
854 adapter_run_permitted->updateRunPermitted(
true);
874 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
877 auto recover_action = [
this, &adapter_run_permitted]() {
878 adapter_run_permitted->stopStateMachine();
886 EXPECT_CALL(*
this, recover_func()).WillOnce(InvokeWithoutArgs(recover_action));
889 EXPECT_CALL(*
this, unhold_func()).WillRepeatedly(Return(
true));
892 adapter_run_permitted->updateRunPermitted(
true);
914 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
926 adapter_run_permitted->updateRunPermitted(
true);
934 auto hold_action = [
this, &adapter_run_permitted]() {
935 adapter_run_permitted->stopStateMachine();
943 EXPECT_CALL(*
this, hold_func()).WillOnce(InvokeWithoutArgs(hold_action));
946 EXPECT_CALL(*
this, halt_func()).WillRepeatedly(Return(
true));
949 adapter_run_permitted->updateRunPermitted(
false);
969 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
972 auto recover_action = [
this, &adapter_run_permitted]() {
973 adapter_run_permitted->updateRunPermitted(
false);
974 adapter_run_permitted->stopStateMachine();
985 EXPECT_CALL(*
this, recover_func()).WillOnce(InvokeWithoutArgs(recover_action));
988 EXPECT_CALL(*
this, halt_func()).WillRepeatedly(Return(
true));
991 adapter_run_permitted->updateRunPermitted(
true);
1014 std::unique_ptr<Stop1ExecutorForTests> adapter_run_permitted{ createStop1Executor() };
1026 adapter_run_permitted->updateRunPermitted(
true);
1034 auto enable_during_hold_action = [
this, &adapter_run_permitted]() {
1035 adapter_run_permitted->updateRunPermitted(
true);
1036 adapter_run_permitted->stopStateMachine();
1044 EXPECT_CALL(*
this, hold_func()).WillOnce(InvokeWithoutArgs(enable_during_hold_action));
1047 EXPECT_CALL(*
this, halt_func()).WillRepeatedly(Return(
true));
1048 EXPECT_CALL(*
this, recover_func()).WillRepeatedly(Return(
true));
1049 EXPECT_CALL(*
this, unhold_func()).WillRepeatedly(Return(
true));
1052 adapter_run_permitted->updateRunPermitted(
false);
1064 testing::InitGoogleMock(&argc, argv);
1065 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