diff --git a/tests/executables_src/testPropagateDataFaultFlag.cc b/tests/executables_src/testPropagateDataFaultFlag.cc index 0ac5c7b6752e0d05a2ad96932cc38bf28a710c4b..9db0e62c4af5f6518c69d77c0a1b28f6f54bd79f 100644 --- a/tests/executables_src/testPropagateDataFaultFlag.cc +++ b/tests/executables_src/testPropagateDataFaultFlag.cc @@ -544,7 +544,6 @@ BOOST_AUTO_TEST_CASE(testInvalidTrigger){ BOOST_CHECK(result.dataValidity() == ctk::DataValidity::ok); } -BOOST_AUTO_TEST_CASE(testTrigger){} BOOST_AUTO_TEST_SUITE_END() @@ -606,4 +605,45 @@ BOOST_AUTO_TEST_CASE(testDeviceReadFailure) { BOOST_CHECK_EQUAL(result, 11000); BOOST_CHECK(result.dataValidity() == ctk::DataValidity::ok); } + +BOOST_AUTO_TEST_CASE(testreadDeviceWithTrigger) { + auto trigger = test.getScalar<int>("trigger"); + auto fromDevice = test.getScalar<int>("i3"); // cs side display: m1.i3 + //----------------------------------------------------------------// + // trigger works as expected + trigger = 1; + + auto deviceRegister = device1->getRawAccessor("m1", "i3"); + deviceRegister = 30; + + app.run(); + trigger.write(); + + CHECK_TIMEOUT(fromDevice.readLatest(), 10000); + BOOST_CHECK_EQUAL(fromDevice, 30); + BOOST_CHECK(fromDevice.dataValidity() == ctk::DataValidity::ok); + + //----------------------------------------------------------------// + // Device module exception + deviceRegister = 10; + device1->throwExceptionRead = true; + + trigger = 1; + trigger.write(); + + CHECK_TIMEOUT(fromDevice.readLatest(), 10000); + BOOST_CHECK_EQUAL(fromDevice, 30); + BOOST_CHECK(fromDevice.dataValidity() == ctk::DataValidity::faulty); + //----------------------------------------------------------------// + // Recovery + device1->throwExceptionRead = false; + + trigger = 1; + trigger.write(); + + CHECK_TIMEOUT(fromDevice.readLatest(), 10000); + BOOST_CHECK_EQUAL(fromDevice, 10); + BOOST_CHECK(fromDevice.dataValidity() == ctk::DataValidity::ok); +} + BOOST_AUTO_TEST_SUITE_END()