From 5b4678b3832d20cfd901b53375994ce9fb0035e5 Mon Sep 17 00:00:00 2001 From: Jens Georg <jens.georg@desy.de> Date: Wed, 12 Oct 2022 18:10:24 +0200 Subject: [PATCH] Fix testProcessVariableRecovery --- .../testProcessVariableRecovery.cc | 52 ++++++++----------- 1 file changed, 21 insertions(+), 31 deletions(-) diff --git a/tests/executables_src/testProcessVariableRecovery.cc b/tests/executables_src/testProcessVariableRecovery.cc index 94d0265a..133ff216 100644 --- a/tests/executables_src/testProcessVariableRecovery.cc +++ b/tests/executables_src/testProcessVariableRecovery.cc @@ -63,26 +63,22 @@ struct TestApplication : public ctk::Application { TestApplication() : Application("testSuite") {} ~TestApplication() { shutdown(); } - ctk::DeviceModule dev{this, deviceCDD}; + ctk::DeviceModule dev{this, deviceCDD, "/deviceTrigger"}; TestModule module{this, "TEST", "The test module"}; }; -/* Test application for the specific case of wrinting to a read-only +#if 0 +/* Test application for the specific case of writing to a read-only * accessor. Provides an input to an ApplicationModule from a read-only * accessor of the device. For the test, the accessor must not be routed - * through the control system, the illegal write would be catched by the + * through the control system, the illegal write would be caught by the * ControlSystemAdapter, not by the ExceptionHandlingDecorator under test here. */ struct ReadOnlyTestApplication : public ctk::Application { ReadOnlyTestApplication() : Application("ReadOnlytestApp") {} - ~ReadOnlyTestApplication() { shutdown(); } + ~ReadOnlyTestApplication() override { shutdown(); } - /* void defineConnections() { - dev["TEST"]("FROM_DEV_SCALAR2") >> module("FROM_DEV_SCALAR2"); - findTag("CS").connectTo(cs); - }*/ - - ctk::DeviceModule dev{this, deviceCDD}; + ctk::DeviceModule dev{this, deviceCDD, "/weNowNeedATriggerHere"}; struct TestModule : public ctk::ApplicationModule { using ctk::ApplicationModule::ApplicationModule; @@ -117,6 +113,10 @@ struct ReadOnlyTestApplication : public ctk::Application { /*********************************************************************************************************************/ +// FIXME: This case cannot be created any more with the current setup. +// It might be possible that it is doable again when implementing optimiseConnections() +// which might prune the CS connections + BOOST_AUTO_TEST_CASE(testWriteToReadOnly) { std::cout << "testWriteToReadOnly" << std::endl; @@ -132,6 +132,7 @@ BOOST_AUTO_TEST_CASE(testWriteToReadOnly) { // here, as the exception gets thrown in the thread of the module. test.writeScalar("/READ_ONLY_TEST/startTest", 1); } +#endif /*********************************************************************************************************************/ @@ -139,17 +140,6 @@ BOOST_AUTO_TEST_CASE(testProcessVariableRecovery) { std::cout << "testProcessVariableRecovery" << std::endl; TestApplication app; - /* app.findTag(".*").connectTo(app.cs); // creates /TEST/TO_DEV_SCALAR1 and /TEST/TO/DEV/ARRAY1 - // devices are not automatically connected (yet) - app.dev.connectTo(app.cs, - app.cs("deviceTrigger", typeid(int), - 1)); // In TEST it connects to TO_DEV_SCALAR1 and TO_DEV_ARRAY1, and creates TO_DEV_SCALAR2, FROM_DEV1, - // FROM_DEV2, TO_DEV_AREA2, FROM_DEV_AREA1 and FROM_DEV_AREA2 - - // make a constant and connect to the device - auto constante = ctk::VariableNetworkNode::makeConstant(1, 44252, 1); - constante >> app.dev["CONSTANT"]("VAR32");*/ - ctk::TestFacility test{app, false}; // Write initial values manually since we do not use the testable mode. // Otherwise the main loops never start. @@ -170,12 +160,11 @@ BOOST_AUTO_TEST_CASE(testProcessVariableRecovery) { // wait for the device to be opened successfully so the access to the dummy does not throw // (as they use the same backend it now throws if there has been an exception somewhere else) - CHECK_EQUAL_TIMEOUT(test.readScalar<int32_t>(std::string("/Devices/") + deviceCDD + "/status"), 0, 10000); + CHECK_EQUAL_TIMEOUT( + test.readScalar<int32_t>(std::string("/Devices/") + ctk::Utilities::stripName(deviceCDD, false) + "/status"), 0, + 10000); // Check that the initial values are there. - // auto reg2 = dummy.getScalarRegisterAccessor<int32_t>("/TEST/TO_DEV_SCALAR2"); - // CHECK_EQUAL_TIMEOUT([=]()mutable{reg2.readLatest(); return int32_t(reg2);},0,10000); - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/CONSTANT/VAR32"), 44252, 10000); CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_SCALAR2"), 42, 10000); CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 1, 0)[0], 99, 10000); CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/TEST/TO_DEV_ARRAY2", 1, 1)[0], 99, 10000); @@ -212,18 +201,22 @@ BOOST_AUTO_TEST_CASE(testProcessVariableRecovery) { dummyBackend->throwExceptionRead = true; // Now we trigger the reading module. This should put the device into an error state - auto trigger2 = test.getScalar<int32_t>("/deviceTrigger"); + auto trigger2 = test.getVoid("/deviceTrigger"); trigger2.write(); // Verify that the device is in error state. - CHECK_EQUAL_TIMEOUT(test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / deviceCDD / "status"), 1, 10000); + CHECK_EQUAL_TIMEOUT( + test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / ctk::Utilities::stripName(deviceCDD, false) / "status"), + 1, 10000); // Set device back to normal. dummyBackend->throwExceptionWrite = false; dummyBackend->throwExceptionRead = false; dummyBackend->throwExceptionOpen = false; // Verify if the device is ready. - CHECK_EQUAL_TIMEOUT(test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / deviceCDD / "status"), 0, 10000); + CHECK_EQUAL_TIMEOUT( + test.readScalar<int32_t>(ctk::RegisterPath("/Devices") / ctk::Utilities::stripName(deviceCDD, false) / "status"), + 0, 10000); // 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); @@ -231,7 +224,4 @@ BOOST_AUTO_TEST_CASE(testProcessVariableRecovery) { 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})); - - // check if the constant is written back after recovery - CHECK_EQUAL_TIMEOUT(dummy.read<int32_t>("/CONSTANT/VAR32"), 44252, 10000); } -- GitLab