Skip to content
Snippets Groups Projects
Commit 778eba4f authored by Martin Killenberg's avatar Martin Killenberg
Browse files

testFanoutConnections: check two different connection scenarios

parent 16f0d924
No related branches found
No related tags found
No related merge requests found
...@@ -32,13 +32,21 @@ struct TestModule1 : ctk::ApplicationModule { ...@@ -32,13 +32,21 @@ struct TestModule1 : ctk::ApplicationModule {
} }
}; };
// the connection code has to create a consuming fan out because m1.i3 is a poll type consumer,
// and a trigger fan out because m1.i1 only has one push type consumer in the CS
struct TestApplication1 : ctk::Application { struct TestApplication1 : ctk::Application {
TestApplication1() : Application("testApp") {} TestApplication1(bool connectDeviceFirst) : Application("testApp"), _connectDeviceFirst(connectDeviceFirst) {}
~TestApplication1() { shutdown(); } ~TestApplication1() { shutdown(); }
void defineConnections() { void defineConnections() {
findTag(".*").connectTo(cs); if(_connectDeviceFirst) {
device.connectTo(cs, cs("deviceTrigger", typeid(int), 1)); device.connectTo(cs, cs("deviceTrigger", typeid(int), 1));
findTag(".*").connectTo(cs);
}
else {
findTag(".*").connectTo(cs);
device.connectTo(cs, cs("deviceTrigger", typeid(int), 1));
}
} }
constexpr static char const* dummyCDD1 = "(dummy?map=testDataValidity1.map)"; constexpr static char const* dummyCDD1 = "(dummy?map=testDataValidity1.map)";
...@@ -46,43 +54,46 @@ struct TestApplication1 : ctk::Application { ...@@ -46,43 +54,46 @@ struct TestApplication1 : ctk::Application {
ctk::DeviceModule device{this, dummyCDD1}; ctk::DeviceModule device{this, dummyCDD1};
ctk::ControlSystemModule cs; ctk::ControlSystemModule cs;
bool _connectDeviceFirst;
}; };
BOOST_AUTO_TEST_CASE(testConnectConsumingFanout) { BOOST_AUTO_TEST_CASE(testConnectConsumingFanout) {
TestApplication1 theApp; for(int deviceFirst = 0; deviceFirst < 2; ++deviceFirst) {
ctk::TestFacility testFacility; TestApplication1 theApp(deviceFirst);
ChimeraTK::Device dummy(TestApplication1::dummyCDD1); ctk::TestFacility testFacility;
ChimeraTK::Device dummy(TestApplication1::dummyCDD1);
// write iniial values to the dummy before starting the application // write iniial values to the dummy before starting the application
dummy.open(); dummy.open();
dummy.write("m1/i1/DUMMY_WRITEABLE", 12); dummy.write("m1/i1/DUMMY_WRITEABLE", 12);
dummy.write("m1/i3/DUMMY_WRITEABLE", 32); dummy.write("m1/i3/DUMMY_WRITEABLE", 32);
testFacility.runApplication(); testFacility.runApplication();
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 12); BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 12);
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 32); BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 32);
// check that the trigger only affects i1 // check that the trigger only affects i1
dummy.write("m1/i1/DUMMY_WRITEABLE", 13); dummy.write("m1/i1/DUMMY_WRITEABLE", 13);
dummy.write("m1/i3/DUMMY_WRITEABLE", 33); dummy.write("m1/i3/DUMMY_WRITEABLE", 33);
testFacility.writeScalar<int>("deviceTrigger", 1); testFacility.writeScalar<int>("deviceTrigger", 1);
testFacility.stepApplication(); testFacility.stepApplication();
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 13); BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 13);
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 32); BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i3"), 32);
// check that the module trigger updates i3 // check that the module trigger updates i3
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/moduleOutput"), 0); BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/moduleOutput"), 0);
dummy.write("m1/i1/DUMMY_WRITEABLE", 14); dummy.write("m1/i1/DUMMY_WRITEABLE", 14);
dummy.write("m1/i3/DUMMY_WRITEABLE", 34); dummy.write("m1/i3/DUMMY_WRITEABLE", 34);
testFacility.writeScalar<int>("m1/moduleTrigger", 1); testFacility.writeScalar<int>("m1/moduleTrigger", 1);
testFacility.stepApplication(); testFacility.stepApplication();
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/i1"), 13); 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/i3"), 34);
BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/moduleOutput"), 34); BOOST_CHECK_EQUAL(testFacility.readScalar<int>("m1/moduleOutput"), 34);
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment