From fb5f36c849c417647bce77af13a27838f69bc513 Mon Sep 17 00:00:00 2001 From: Martin Hierholzer <martin.hierholzer@desy.de> Date: Fri, 30 Sep 2022 09:15:53 +0200 Subject: [PATCH] fix testControlSystemAccessors --- .../testControlSystemAccessors.cc | 264 +----------------- 1 file changed, 12 insertions(+), 252 deletions(-) diff --git a/tests/executables_src/testControlSystemAccessors.cc b/tests/executables_src/testControlSystemAccessors.cc index 8491aeed..0f5d7d51 100644 --- a/tests/executables_src/testControlSystemAccessors.cc +++ b/tests/executables_src/testControlSystemAccessors.cc @@ -6,14 +6,12 @@ #include "Application.h" #include "ApplicationModule.h" -#include "DeviceModule.h" #include "ScalarAccessor.h" #include <ChimeraTK/BackendFactory.h> #include <ChimeraTK/ControlSystemAdapter/ControlSystemPVManager.h> #include <ChimeraTK/ControlSystemAdapter/DevicePVManager.h> #include <ChimeraTK/ControlSystemAdapter/PVManager.h> -#include <ChimeraTK/Device.h> #include <boost/mpl/list.hpp> #include <boost/test/included/unit_test.hpp> @@ -70,7 +68,6 @@ struct TestApplication : public ctk::Application { TestModule<T> testModule{this, "TestModule", "The test module"}; - ctk::DeviceModule dev{this, "Dummy0"}; }; /*********************************************************************************************************************/ @@ -84,13 +81,17 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(testFeedToCS, T, test_types) { // app.testModule.feeder >> app.cs("myFeeder"); app.initialise(); + + auto myFeeder = pvManagers.first->getProcessArray<T>("/TestModule/feeder"); + auto consumer = pvManagers.first->getProcessArray<T>("/TestModule/consumer"); + app.run(); + consumer->write(); // send initial value so the application module can start up app.testModule.mainLoopStarted.wait(); // make sure the module's mainLoop() is entered - auto myFeeder = pvManagers.first->getProcessArray<T>("/myFeeder"); - BOOST_CHECK(myFeeder->getName() == "/myFeeder"); - BOOST_CHECK(myFeeder->getUnit() == "MV/m"); - BOOST_CHECK(myFeeder->getDescription() == "The test module - Some fancy explanation about this variable"); + BOOST_TEST(myFeeder->getName() == "/TestModule/feeder"); + BOOST_TEST(myFeeder->getUnit() == "MV/m"); + BOOST_TEST(myFeeder->getDescription() == "The test module - Some fancy explanation about this variable"); app.testModule.feeder = 42; BOOST_CHECK_EQUAL(myFeeder->readNonBlocking(), false); @@ -119,10 +120,10 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(testConsumeFromCS, T, test_types) { // app.cs("myConsumer") >> app.testModule.consumer; app.initialise(); - auto myConsumer = pvManagers.first->getProcessArray<T>("/myConsumer"); - BOOST_CHECK(myConsumer->getName() == "/myConsumer"); - BOOST_CHECK(myConsumer->getUnit() == ""); - BOOST_CHECK(myConsumer->getDescription() == "The test module - No comment."); + auto myConsumer = pvManagers.first->getProcessArray<T>("/TestModule/consumer"); + BOOST_TEST(myConsumer->getName() == "/TestModule/consumer"); + BOOST_TEST(myConsumer->getUnit() == ""); + BOOST_TEST(myConsumer->getDescription() == "The test module - No comment."); myConsumer->accessData(0) = 123; // set inital value myConsumer->write(); @@ -144,244 +145,3 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(testConsumeFromCS, T, test_types) { } /*********************************************************************************************************************/ -/* test multiple publications of the same variable */ - -BOOST_AUTO_TEST_CASE_TEMPLATE(testMultiplePublications, T, test_types) { - TestApplication<T> app; - - auto pvManagers = ctk::createPVManager(); - app.setPVManager(pvManagers.second); - - // app.testModule.feeder >> app.cs("myFeeder0"); - // app.testModule.feeder >> app.cs("myFeeder1"); - // app.testModule.feeder >> app.cs("myFeeder2"); - // app.testModule.feeder >> app.cs("myFeeder3"); - app.initialise(); - app.run(); // make the connections and start the FanOut threads - app.testModule.mainLoopStarted.wait(); // make sure the module's mainLoop() is entered - - auto myFeeder0 = pvManagers.first->getProcessArray<T>("/myFeeder0"); - auto myFeeder1 = pvManagers.first->getProcessArray<T>("/myFeeder1"); - auto myFeeder2 = pvManagers.first->getProcessArray<T>("/myFeeder2"); - auto myFeeder3 = pvManagers.first->getProcessArray<T>("/myFeeder3"); - - BOOST_CHECK(myFeeder0->getName() == "/myFeeder0"); - BOOST_CHECK(myFeeder0->getUnit() == "MV/m"); - BOOST_CHECK(myFeeder0->getDescription() == "The test module - Some fancy explanation about this variable"); - - BOOST_CHECK(myFeeder1->getName() == "/myFeeder1"); - BOOST_CHECK(myFeeder1->getUnit() == "MV/m"); - BOOST_CHECK(myFeeder1->getDescription() == "The test module - Some fancy explanation about this variable"); - - BOOST_CHECK(myFeeder2->getName() == "/myFeeder2"); - BOOST_CHECK(myFeeder2->getUnit() == "MV/m"); - BOOST_CHECK(myFeeder2->getDescription() == "The test module - Some fancy explanation about this variable"); - - BOOST_CHECK(myFeeder3->getName() == "/myFeeder3"); - BOOST_CHECK(myFeeder3->getUnit() == "MV/m"); - BOOST_CHECK(myFeeder3->getDescription() == "The test module - Some fancy explanation about this variable"); - - app.testModule.feeder = 42; - BOOST_CHECK(myFeeder0->readNonBlocking() == false); - BOOST_CHECK(myFeeder1->readNonBlocking() == false); - BOOST_CHECK(myFeeder2->readNonBlocking() == false); - BOOST_CHECK(myFeeder3->readNonBlocking() == false); - app.testModule.feeder.write(); - usleep(200000); - BOOST_CHECK(myFeeder0->readNonBlocking() == true); - BOOST_CHECK(myFeeder1->readNonBlocking() == true); - BOOST_CHECK(myFeeder2->readNonBlocking() == true); - BOOST_CHECK(myFeeder3->readNonBlocking() == true); - BOOST_CHECK(myFeeder0->accessData(0) == 42); - BOOST_CHECK(myFeeder1->accessData(0) == 42); - BOOST_CHECK(myFeeder2->accessData(0) == 42); - BOOST_CHECK(myFeeder3->accessData(0) == 42); - BOOST_CHECK(myFeeder0->readNonBlocking() == false); - BOOST_CHECK(myFeeder1->readNonBlocking() == false); - BOOST_CHECK(myFeeder2->readNonBlocking() == false); - BOOST_CHECK(myFeeder3->readNonBlocking() == false); - - app.testModule.feeder = 120; - BOOST_CHECK(myFeeder0->readNonBlocking() == false); - BOOST_CHECK(myFeeder1->readNonBlocking() == false); - BOOST_CHECK(myFeeder2->readNonBlocking() == false); - BOOST_CHECK(myFeeder3->readNonBlocking() == false); - app.testModule.feeder.write(); - usleep(200000); - BOOST_CHECK(myFeeder0->readNonBlocking() == true); - BOOST_CHECK(myFeeder1->readNonBlocking() == true); - BOOST_CHECK(myFeeder2->readNonBlocking() == true); - BOOST_CHECK(myFeeder3->readNonBlocking() == true); - BOOST_CHECK(myFeeder0->accessData(0) == 120); - BOOST_CHECK(myFeeder1->accessData(0) == 120); - BOOST_CHECK(myFeeder2->accessData(0) == 120); - BOOST_CHECK(myFeeder3->accessData(0) == 120); - BOOST_CHECK(myFeeder0->readNonBlocking() == false); - BOOST_CHECK(myFeeder1->readNonBlocking() == false); - BOOST_CHECK(myFeeder2->readNonBlocking() == false); - BOOST_CHECK(myFeeder3->readNonBlocking() == false); - - // resend same number - BOOST_CHECK(myFeeder0->readNonBlocking() == false); - BOOST_CHECK(myFeeder1->readNonBlocking() == false); - BOOST_CHECK(myFeeder2->readNonBlocking() == false); - BOOST_CHECK(myFeeder3->readNonBlocking() == false); - app.testModule.feeder.write(); - usleep(200000); - BOOST_CHECK(myFeeder0->readNonBlocking() == true); - BOOST_CHECK(myFeeder1->readNonBlocking() == true); - BOOST_CHECK(myFeeder2->readNonBlocking() == true); - BOOST_CHECK(myFeeder3->readNonBlocking() == true); - BOOST_CHECK(myFeeder0->accessData(0) == 120); - BOOST_CHECK(myFeeder1->accessData(0) == 120); - BOOST_CHECK(myFeeder2->accessData(0) == 120); - BOOST_CHECK(myFeeder3->accessData(0) == 120); - BOOST_CHECK(myFeeder0->readNonBlocking() == false); - BOOST_CHECK(myFeeder1->readNonBlocking() == false); - BOOST_CHECK(myFeeder2->readNonBlocking() == false); - BOOST_CHECK(myFeeder3->readNonBlocking() == false); -} - -/*********************************************************************************************************************/ -/* test multiple re-publications of a variable fed from the control system */ - -BOOST_AUTO_TEST_CASE_TEMPLATE(testMultipleRePublications, T, test_types) { - TestApplication<T> app; - - auto pvManagers = ctk::createPVManager(); - app.setPVManager(pvManagers.second); - - // app.cs("myConsumer") >> app.testModule.consumer; - // app.testModule.consumer >> app.cs("myConsumer_copy1"); - // app.testModule.consumer >> app.cs("myConsumer_copy2"); - // app.testModule.consumer >> app.cs("myConsumer_copy3"); - - app.initialise(); - - auto myConsumer = pvManagers.first->getProcessArray<T>("/myConsumer"); - auto myConsumer_copy1 = pvManagers.first->getProcessArray<T>("/myConsumer_copy1"); - auto myConsumer_copy2 = pvManagers.first->getProcessArray<T>("/myConsumer_copy2"); - auto myConsumer_copy3 = pvManagers.first->getProcessArray<T>("/myConsumer_copy3"); - - myConsumer->accessData(0) = 66; // set inital value - myConsumer->write(); - - app.run(); // make the connections, start the FanOut threads and propagate initial value - app.testModule.mainLoopStarted.wait(); // make sure the module's mainLoop() is entered - - BOOST_CHECK(app.testModule.consumer == 66); - myConsumer_copy1->read(); - myConsumer_copy2->read(); - myConsumer_copy3->read(); - BOOST_CHECK(myConsumer_copy1->accessData(0) == 66); - BOOST_CHECK(myConsumer_copy2->accessData(0) == 66); - BOOST_CHECK(myConsumer_copy3->accessData(0) == 66); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - - BOOST_CHECK(myConsumer->getName() == "/myConsumer"); - BOOST_CHECK(myConsumer->getUnit() == ""); - BOOST_CHECK(myConsumer->getDescription() == "The test module - No comment."); - - BOOST_CHECK(myConsumer_copy1->getName() == "/myConsumer_copy1"); - BOOST_CHECK(myConsumer_copy1->getUnit() == ""); - BOOST_CHECK(myConsumer_copy1->getDescription() == "The test module - No comment."); - - BOOST_CHECK(myConsumer_copy2->getName() == "/myConsumer_copy2"); - BOOST_CHECK(myConsumer_copy2->getUnit() == ""); - BOOST_CHECK(myConsumer_copy2->getDescription() == "The test module - No comment."); - - BOOST_CHECK(myConsumer_copy3->getName() == "/myConsumer_copy3"); - BOOST_CHECK(myConsumer_copy3->getUnit() == ""); - BOOST_CHECK(myConsumer_copy3->getDescription() == "The test module - No comment."); - - myConsumer->accessData(0) = 42; - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - myConsumer->write(); - usleep(200000); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy1->accessData(0) == 42); - BOOST_CHECK(myConsumer_copy2->accessData(0) == 42); - BOOST_CHECK(myConsumer_copy3->accessData(0) == 42); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - app.testModule.consumer.read(); - BOOST_CHECK(app.testModule.consumer == 42); - - myConsumer->accessData(0) = 120; - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - myConsumer->write(); - usleep(200000); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy1->accessData(0) == 120); - BOOST_CHECK(myConsumer_copy2->accessData(0) == 120); - BOOST_CHECK(myConsumer_copy3->accessData(0) == 120); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - app.testModule.consumer.read(); - BOOST_CHECK(app.testModule.consumer == 120); - - // resend same number - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - myConsumer->write(); - usleep(200000); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == true); - BOOST_CHECK(myConsumer_copy1->accessData(0) == 120); - BOOST_CHECK(myConsumer_copy2->accessData(0) == 120); - BOOST_CHECK(myConsumer_copy3->accessData(0) == 120); - BOOST_CHECK(myConsumer_copy1->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy2->readNonBlocking() == false); - BOOST_CHECK(myConsumer_copy3->readNonBlocking() == false); - app.testModule.consumer.read(); - BOOST_CHECK(app.testModule.consumer == 120); -} - -/*********************************************************************************************************************/ -/* test direct control system to control system connections */ - -BOOST_AUTO_TEST_CASE_TEMPLATE(testDirectCStoCS, T, test_types) { - TestApplication<T> app; - - auto pvManagers = ctk::createPVManager(); - app.setPVManager(pvManagers.second); - - // app.cs("mySender", typeid(T), 1) >> app.cs("myReceiver"); - app.initialise(); - app.run(); - app.testModule.mainLoopStarted.wait(); // make sure the module's mainLoop() is entered - - auto mySender = pvManagers.first->getProcessArray<T>("/mySender"); - BOOST_CHECK(mySender->getName() == "/mySender"); - auto myReceiver = pvManagers.first->getProcessArray<T>("/myReceiver"); - BOOST_CHECK(myReceiver->getName() == "/myReceiver"); - - mySender->accessData(0) = 22; - mySender->write(); - myReceiver->read(); - BOOST_CHECK_EQUAL(myReceiver->accessData(0), 22); - - mySender->accessData(0) = 23; - mySender->write(); - myReceiver->read(); - BOOST_CHECK_EQUAL(myReceiver->accessData(0), 23); - - mySender->accessData(0) = 24; - mySender->write(); - myReceiver->read(); - BOOST_CHECK_EQUAL(myReceiver->accessData(0), 24); -} -- GitLab