From 16f0d924d8a456196fd426a58c69c6d1a3eb65f4 Mon Sep 17 00:00:00 2001 From: Martin Killenberg <martin.killenberg@desy.de> Date: Mon, 23 Mar 2020 23:19:25 +0100 Subject: [PATCH] added test to create ConsumingFanOut with triggered device --- .../executables_src/testFanoutConnections.cc | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 tests/executables_src/testFanoutConnections.cc diff --git a/tests/executables_src/testFanoutConnections.cc b/tests/executables_src/testFanoutConnections.cc new file mode 100644 index 00000000..41158497 --- /dev/null +++ b/tests/executables_src/testFanoutConnections.cc @@ -0,0 +1,88 @@ +#define BOOST_TEST_MODULE testFanoutConnections + +#include <boost/mpl/list.hpp> +#include <boost/test/included/unit_test.hpp> + +#include "Application.h" +#include "ApplicationModule.h" +#include "ScalarAccessor.h" +#include "TestFacility.h" +#include <ChimeraTK/ExceptionDummyBackend.h> + +namespace ctk = ChimeraTK; + +struct TestModule1 : ctk::ApplicationModule { + using ctk::ApplicationModule::ApplicationModule; + ctk::ScalarPushInput<int> moduleTrigger{this, "moduleTrigger", "", ""}; + + ctk::ScalarPollInput<int> i3{this, "i3", "", ""}; + + ctk::ScalarOutput<int> moduleOutput{this, "moduleOutput", "", ""}; + + void mainLoop() override { + while(true) { + moduleTrigger.read(); + + i3.readLatest(); + + moduleOutput = int(i3); + + writeAll(); + } + } +}; + +struct TestApplication1 : ctk::Application { + TestApplication1() : Application("testApp") {} + ~TestApplication1() { shutdown(); } + + void defineConnections() { + findTag(".*").connectTo(cs); + device.connectTo(cs, cs("deviceTrigger", typeid(int), 1)); + } + constexpr static char const* dummyCDD1 = "(dummy?map=testDataValidity1.map)"; + + TestModule1 m1{this, "m1", ""}; + ctk::DeviceModule device{this, dummyCDD1}; + + ctk::ControlSystemModule cs; +}; + +BOOST_AUTO_TEST_CASE(testConnectConsumingFanout) { + TestApplication1 theApp; + ctk::TestFacility testFacility; + ChimeraTK::Device dummy(TestApplication1::dummyCDD1); + + // write iniial values to the dummy before starting the application + dummy.open(); + dummy.write("m1/i1/DUMMY_WRITEABLE", 12); + dummy.write("m1/i3/DUMMY_WRITEABLE", 32); + + testFacility.runApplication(); + + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 12); + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 32); + + // check that the trigger only affects i1 + dummy.write("m1/i1/DUMMY_WRITEABLE", 13); + dummy.write("m1/i3/DUMMY_WRITEABLE", 33); + + testFacility.writeScalar<int>("deviceTrigger", 1); + testFacility.stepApplication(); + + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 13); + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 32); + + // check that the module trigger updates i3 + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/moduleOutput"), 0); + + dummy.write("m1/i1/DUMMY_WRITEABLE", 14); + dummy.write("m1/i3/DUMMY_WRITEABLE", 34); + + testFacility.writeScalar<int>("m1/moduleTrigger", 1); + testFacility.stepApplication(); + + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 13); + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 34); + BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/moduleOutput"), 34); +} -- GitLab