From 55c8afc31a237387e3145e4f3189eafaba691bbf Mon Sep 17 00:00:00 2001 From: Martin Killenberg <martin.killenberg@desy.de> Date: Thu, 9 Jul 2020 18:00:23 +0200 Subject: [PATCH] Don't use dummy raw accessors without lock. It causes subtile race condition (part2). - Replaced all of them with normal DUMMY_WRITEABLE registers. --- .../testPropagateDataFaultFlag.cc | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/tests/executables_src/testPropagateDataFaultFlag.cc b/tests/executables_src/testPropagateDataFaultFlag.cc index 97e15b33..07d721e2 100644 --- a/tests/executables_src/testPropagateDataFaultFlag.cc +++ b/tests/executables_src/testPropagateDataFaultFlag.cc @@ -459,8 +459,9 @@ BOOST_AUTO_TEST_CASE(testThreadedFanout) { threadedFanoutInput = 20; threadedFanoutInput.write(); // write to register: m1.i1 linked with the consumingFanout. - auto consumingFanoutSource = device1DummyBackend->getRawAccessor("m1", "i1"); + auto consumingFanoutSource = app.device1.device.getScalarRegisterAccessor<int>("/m1/i1_DUMMY_WRITEABLE"); consumingFanoutSource = 10; + consumingFanoutSource.write(); auto pollRegister = app.device2.device.getScalarRegisterAccessor<int>("/m1/i2_DUMMY_WRITEABLE"); pollRegister = 5; @@ -504,8 +505,9 @@ BOOST_AUTO_TEST_CASE(testThreadedFanout) { BOOST_AUTO_TEST_CASE(testInvalidTrigger) { std::cout << "testInvalidTrigger" << std::endl; - auto deviceRegister = device1DummyBackend->getRawAccessor("m1", "i3"); + auto deviceRegister = app.device1.device.getScalarRegisterAccessor<int>("/m1/i3_DUMMY_WRITEABLE"); deviceRegister = 20; + deviceRegister.write(); auto trigger = test.getScalar<int>("trigger"); auto result = test.getScalar<int>("i3"); //Cs hook into reg: m1.i3 @@ -524,6 +526,7 @@ BOOST_AUTO_TEST_CASE(testInvalidTrigger) { //----------------------------------------------------------------// // faulty trigger deviceRegister = 30; + deviceRegister.write(); trigger = 1; trigger.setDataValidity(ctk::DataValidity::faulty); trigger.write(); @@ -537,6 +540,7 @@ BOOST_AUTO_TEST_CASE(testInvalidTrigger) { //----------------------------------------------------------------// // recovery deviceRegister = 50; + deviceRegister.write(); trigger = 1; trigger.setDataValidity(ctk::DataValidity::ok); @@ -593,7 +597,7 @@ BOOST_FIXTURE_TEST_SUITE(data_validity_propagation_noTestFacility, Fixture_noTes BOOST_AUTO_TEST_CASE(testDeviceReadFailure) { std::cout << "testDeviceReadFailure" << std::endl; - auto consumingFanoutSource = device1DummyBackend->getRawAccessor("m1", "i1"); + auto consumingFanoutSource = app.device1.device.getScalarRegisterAccessor<int>("/m1/i1_DUMMY_WRITEABLE"); auto pollRegister = app.device2.device.getScalarRegisterAccessor<int>("/m1/i2_DUMMY_WRITEABLE"); auto threadedFanoutInput = test.getScalar<int>("m1/o1"); @@ -604,6 +608,7 @@ BOOST_AUTO_TEST_CASE(testDeviceReadFailure) { threadedFanoutInput = 10000; consumingFanoutSource = 1000; + consumingFanoutSource.write(); pollRegister = 1; pollRegister.write(); @@ -664,8 +669,9 @@ BOOST_AUTO_TEST_CASE(testReadDeviceWithTrigger) { // trigger works as expected trigger = 1; - auto deviceRegister = device1DummyBackend->getRawAccessor("m1", "i3"); + auto deviceRegister = app.device1.device.getScalarRegisterAccessor<int>("/m1/i3_DUMMY_WRITEABLE"); deviceRegister = 30; + deviceRegister.write(); trigger.write(); @@ -676,6 +682,8 @@ BOOST_AUTO_TEST_CASE(testReadDeviceWithTrigger) { //----------------------------------------------------------------// // Device module exception deviceRegister = 10; + deviceRegister.write(); + device1DummyBackend->throwExceptionRead = true; trigger = 1; @@ -712,8 +720,9 @@ BOOST_AUTO_TEST_CASE(testConsumingFanout) { threadedFanoutInput = 10; - auto consumingFanoutSource = device1DummyBackend->getRawAccessor("m1", "i1"); + auto consumingFanoutSource = app.device1.device.getScalarRegisterAccessor<int>("/m1/i1_DUMMY_WRITEABLE"); consumingFanoutSource = 1; + consumingFanoutSource.write(); //----------------------------------------------------------// // no device module exception @@ -730,6 +739,7 @@ BOOST_AUTO_TEST_CASE(testConsumingFanout) { // --------------------------------------------------------// // device exception on consuming fanout source read consumingFanoutSource = 0; + consumingFanoutSource.write(); device1DummyBackend->throwExceptionRead = true; threadedFanoutInput = 20; @@ -770,8 +780,9 @@ BOOST_AUTO_TEST_CASE(testDataFlowOnDeviceException) { auto m1_result = test.getScalar<int>("m1/Module1_result"); auto m2_result = test.getScalar<int>("m2/Module2_result"); - auto consumingFanoutSource = device1DummyBackend->getRawAccessor("m1", "i1"); + auto consumingFanoutSource = app.device1.device.getScalarRegisterAccessor<int>("/m1/i1_DUMMY_WRITEABLE"); consumingFanoutSource = 1000; + consumingFanoutSource.write(); auto pollRegister = app.device2.device.getScalarRegisterAccessor<int>("/m1/i2_DUMMY_WRITEABLE"); pollRegister = 100; -- GitLab