diff --git a/tests/executables_src/testProcessVariableRecovery.cc b/tests/executables_src/testProcessVariableRecovery.cc index faffe35b30703b32ba670395c13b9685a6fee03e..2c7c87ccb12475034be2820195c1516f3d1a5f84 100644 --- a/tests/executables_src/testProcessVariableRecovery.cc +++ b/tests/executables_src/testProcessVariableRecovery.cc @@ -47,7 +47,7 @@ struct ReaderModule : public ctk::ApplicationModule { using ctk::ApplicationModule::ApplicationModule; ctk::ScalarPushInput<int32_t> trigger{this, "trigger2", "", "This is my trigger."}; - ctk::ScalarPollInput<int32_t> input{this, "FORM_DEV_SCALAR1", "", "Here I read a scalar"}; + ctk::ScalarPollInput<int32_t> input{this, "FROM_DEV_SCALAR1", "", "Here I read a scalar"}; ctk::ScalarOutput<int32_t> output{this, "twoTimesInput", "", "Twice what I read."}; void mainLoop() override { @@ -126,33 +126,27 @@ BOOST_AUTO_TEST_CASE(testProcessVariableRecovery) { dummy.write("/TEST/TO_DEV_ARRAY1", array); dummy.write("/TEST/TO_DEV_ARRAY2", array); - /* - * Set the device to throw on write so that when application module - * tries to update the device register device goes into error state. - */ dummyBackend->throwExceptionWrite = true; - trigger = 100; - trigger.write(); + dummyBackend->throwExceptionRead = true; + + // Now we trigger the reading module. This should put the device into an error state + auto trigger2 = test.getScalar<int32_t>("/TEST/trigger2"); + trigger2.write(); //Verify that the device is in error state. - CHECK_EQUAL_TIMEOUT(test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / deviceCDD / "status"), 1, 3000); + CHECK_EQUAL_TIMEOUT(test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / deviceCDD / "status"), 1, 5000); //Set device back to normal. - dummyBackend->throwExceptionOpen = false; dummyBackend->throwExceptionWrite = false; + dummyBackend->throwExceptionRead = false; + dummyBackend->throwExceptionOpen = false; //Verify if the device is ready. - CHECK_EQUAL_TIMEOUT(dummyBackend->isFunctional(), 1, 3000); + CHECK_EQUAL_TIMEOUT(test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / deviceCDD / "status"), 0, 3000); - //Device should have the correct values now. - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_SCALAR2"), 42, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 1, 0)[0], 99, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 1, 1)[0], 99, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 1, 2)[0], 99, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 1, 3)[0], 99, 3000); + //Device should have the correct values now. Notice that we did not trigger the writer module! + BOOST_CHECK_EQUAL(dummy.read<int32_t>("/TEST/TO_DEV_SCALAR2"), 42); + BOOST_CHECK((dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 0) == std::vector<int32_t>{99, 99, 99, 99})); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_SCALAR1"), 100, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY1", 1, 0)[0], 100, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY1", 1, 1)[0], 100, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY1", 1, 2)[0], 100, 3000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY1", 1, 3)[0], 100, 3000); + BOOST_CHECK_EQUAL(dummy.read<int32_t>("/TEST/TO_DEV_SCALAR1"), 100); + BOOST_CHECK((dummy.read<int32_t>("/TEST/TO_DEV_ARRAY1", 0) == std::vector<int32_t>{100, 100, 100, 100})); }