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