From 702dcf681c96720dfa490f66356f7f9454f6ab47 Mon Sep 17 00:00:00 2001 From: vargheseg <19566373+vargheseg@users.noreply.github.com> Date: Thu, 23 Jan 2020 09:09:53 +0100 Subject: [PATCH] implement testConsumingFanout --- .../testPropagateDataFaultFlag.cc | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tests/executables_src/testPropagateDataFaultFlag.cc b/tests/executables_src/testPropagateDataFaultFlag.cc index 9db0e62c..8df58345 100644 --- a/tests/executables_src/testPropagateDataFaultFlag.cc +++ b/tests/executables_src/testPropagateDataFaultFlag.cc @@ -646,4 +646,57 @@ BOOST_AUTO_TEST_CASE(testreadDeviceWithTrigger) { BOOST_CHECK(fromDevice.dataValidity() == ctk::DataValidity::ok); } +BOOST_AUTO_TEST_CASE(testConsumingFanout){ + auto threadedFanoutInput = test.getScalar<int>("m1/o1"); + auto fromConsumingFanout = test.getScalar<int>("m1/i1"); // consumingfanout variable on cs side + auto result = test.getScalar<int>("m1/Module1_result"); + + auto pollRegisterSource = device2->getRawAccessor("m1","i2"); + pollRegisterSource = 100; + + threadedFanoutInput = 10; + + auto consumingFanoutSource = device1->getRawAccessor("m1", "i1"); + consumingFanoutSource = 1; + + //----------------------------------------------------------// + // no device module exception + app.run(); + threadedFanoutInput.write(); + + CHECK_TIMEOUT(result.readLatest(), 10000); + BOOST_CHECK_EQUAL(result, 111); + BOOST_CHECK(result.dataValidity() == ctk::DataValidity::ok); + + CHECK_TIMEOUT(fromConsumingFanout.readLatest(), 10000); + BOOST_CHECK_EQUAL(fromConsumingFanout, 1); + BOOST_CHECK(fromConsumingFanout.dataValidity() == ctk::DataValidity::ok); + + // --------------------------------------------------------// + // device exception on consuming fanout source read + consumingFanoutSource = 0; + + device1->throwExceptionRead = true; + threadedFanoutInput.write(); + + CHECK_TIMEOUT(result.readLatest(), 10000); + BOOST_CHECK_EQUAL(result, 111); + BOOST_CHECK(result.dataValidity() == ctk::DataValidity::faulty); + + CHECK_TIMEOUT(fromConsumingFanout.readLatest(), 10000); + BOOST_CHECK_EQUAL(fromConsumingFanout, 1); + BOOST_CHECK(fromConsumingFanout.dataValidity() == ctk::DataValidity::faulty); + + // --------------------------------------------------------// + // Recovery + device1->throwExceptionRead = true; + + CHECK_TIMEOUT(result.readLatest(), 10000); + BOOST_CHECK_EQUAL(result, 110); + BOOST_CHECK(result.dataValidity() == ctk::DataValidity::ok); + + CHECK_TIMEOUT(fromConsumingFanout.readLatest(), 10000); + BOOST_CHECK_EQUAL(fromConsumingFanout, 0); + BOOST_CHECK(fromConsumingFanout.dataValidity() == ctk::DataValidity::ok); +} BOOST_AUTO_TEST_SUITE_END() -- GitLab