Skip to content
Snippets Groups Projects
Commit e3665db4 authored by Martin Christoph Hierholzer's avatar Martin Christoph Hierholzer
Browse files

added tests for multiple publications

parent a348443c
No related branches found
No related tags found
No related merge requests found
......@@ -86,7 +86,7 @@ BOOST_AUTO_TEST_CASE_TEMPLATE( testFeedToCS, T, test_types ) {
}
/*********************************************************************************************************************/
/*test consuming a scalar from the control system adapter */
/* test consuming a scalar from the control system adapter */
BOOST_AUTO_TEST_CASE_TEMPLATE( testConsumeFromCS, T, test_types ) {
......@@ -114,3 +114,167 @@ 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 app("Test Suite");
TestModule<T> testModule;
auto pvManagers = mtca4u::createPVManager();
app.setPVManager(pvManagers.second);
testModule.feeder.feedToControlSystem("myFeeder0");
testModule.feeder.feedToControlSystem("myFeeder1");
testModule.feeder.feedToControlSystem("myFeeder2");
testModule.feeder.feedToControlSystem("myFeeder3");
app.run(); // make the connections and start the FanOut threads
BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 4);
auto myFeeder0 = pvManagers.first->getProcessScalar<T>("myFeeder0");
auto myFeeder1 = pvManagers.first->getProcessScalar<T>("myFeeder1");
auto myFeeder2 = pvManagers.first->getProcessScalar<T>("myFeeder2");
auto myFeeder3 = pvManagers.first->getProcessScalar<T>("myFeeder3");
testModule.feeder = 42;
BOOST_CHECK(myFeeder0->receive() == false);
BOOST_CHECK(myFeeder1->receive() == false);
BOOST_CHECK(myFeeder2->receive() == false);
BOOST_CHECK(myFeeder3->receive() == false);
testModule.feeder.write();
usleep(200000);
BOOST_CHECK(myFeeder0->receive() == true);
BOOST_CHECK(myFeeder1->receive() == true);
BOOST_CHECK(myFeeder2->receive() == true);
BOOST_CHECK(myFeeder3->receive() == true);
BOOST_CHECK(*myFeeder0 == 42);
BOOST_CHECK(*myFeeder1 == 42);
BOOST_CHECK(*myFeeder2 == 42);
BOOST_CHECK(*myFeeder3 == 42);
BOOST_CHECK(myFeeder0->receive() == false);
BOOST_CHECK(myFeeder1->receive() == false);
BOOST_CHECK(myFeeder2->receive() == false);
BOOST_CHECK(myFeeder3->receive() == false);
testModule.feeder = 120;
BOOST_CHECK(myFeeder0->receive() == false);
BOOST_CHECK(myFeeder1->receive() == false);
BOOST_CHECK(myFeeder2->receive() == false);
BOOST_CHECK(myFeeder3->receive() == false);
testModule.feeder.write();
usleep(200000);
BOOST_CHECK(myFeeder0->receive() == true);
BOOST_CHECK(myFeeder1->receive() == true);
BOOST_CHECK(myFeeder2->receive() == true);
BOOST_CHECK(myFeeder3->receive() == true);
BOOST_CHECK(*myFeeder0 == 120);
BOOST_CHECK(*myFeeder1 == 120);
BOOST_CHECK(*myFeeder2 == 120);
BOOST_CHECK(*myFeeder3 == 120);
BOOST_CHECK(myFeeder0->receive() == false);
BOOST_CHECK(myFeeder1->receive() == false);
BOOST_CHECK(myFeeder2->receive() == false);
BOOST_CHECK(myFeeder3->receive() == false);
// resend same number
BOOST_CHECK(myFeeder0->receive() == false);
BOOST_CHECK(myFeeder1->receive() == false);
BOOST_CHECK(myFeeder2->receive() == false);
BOOST_CHECK(myFeeder3->receive() == false);
testModule.feeder.write();
usleep(200000);
BOOST_CHECK(myFeeder0->receive() == true);
BOOST_CHECK(myFeeder1->receive() == true);
BOOST_CHECK(myFeeder2->receive() == true);
BOOST_CHECK(myFeeder3->receive() == true);
BOOST_CHECK(*myFeeder0 == 120);
BOOST_CHECK(*myFeeder1 == 120);
BOOST_CHECK(*myFeeder2 == 120);
BOOST_CHECK(*myFeeder3 == 120);
BOOST_CHECK(myFeeder0->receive() == false);
BOOST_CHECK(myFeeder1->receive() == false);
BOOST_CHECK(myFeeder2->receive() == false);
BOOST_CHECK(myFeeder3->receive() == false);
}
/*********************************************************************************************************************/
/* test multiple re-publications of a variable fed from teh control system */
BOOST_AUTO_TEST_CASE_TEMPLATE( testMultipleRePublications, T, test_types ) {
TestApplication app("Test Suite");
TestModule<T> testModule;
auto pvManagers = mtca4u::createPVManager();
app.setPVManager(pvManagers.second);
testModule.consumer.consumeFromControlSystem("myConsumer");
testModule.consumer.feedToControlSystem("myConsumer_copy1");
testModule.consumer.feedToControlSystem("myConsumer_copy2");
testModule.consumer.feedToControlSystem("myConsumer_copy3");
app.run(); // make the connections and start the FanOut threads
BOOST_CHECK_EQUAL(pvManagers.first->getAllProcessVariables().size(), 4);
auto myConsumer = pvManagers.first->getProcessScalar<T>("myConsumer");
auto myConsumer_copy1 = pvManagers.first->getProcessScalar<T>("myConsumer_copy1");
auto myConsumer_copy2 = pvManagers.first->getProcessScalar<T>("myConsumer_copy2");
auto myConsumer_copy3 = pvManagers.first->getProcessScalar<T>("myConsumer_copy3");
*myConsumer = 42;
BOOST_CHECK(myConsumer_copy1->receive() == false);
BOOST_CHECK(myConsumer_copy2->receive() == false);
BOOST_CHECK(myConsumer_copy3->receive() == false);
myConsumer->send();
usleep(200000);
BOOST_CHECK(myConsumer_copy1->receive() == true);
BOOST_CHECK(myConsumer_copy2->receive() == true);
BOOST_CHECK(myConsumer_copy3->receive() == true);
BOOST_CHECK(*myConsumer_copy1 == 42);
BOOST_CHECK(*myConsumer_copy2 == 42);
BOOST_CHECK(*myConsumer_copy3 == 42);
BOOST_CHECK(myConsumer_copy1->receive() == false);
BOOST_CHECK(myConsumer_copy2->receive() == false);
BOOST_CHECK(myConsumer_copy3->receive() == false);
testModule.consumer.read();
BOOST_CHECK(testModule.consumer == 42);
*myConsumer = 120;
BOOST_CHECK(myConsumer_copy1->receive() == false);
BOOST_CHECK(myConsumer_copy2->receive() == false);
BOOST_CHECK(myConsumer_copy3->receive() == false);
myConsumer->send();
usleep(200000);
BOOST_CHECK(myConsumer_copy1->receive() == true);
BOOST_CHECK(myConsumer_copy2->receive() == true);
BOOST_CHECK(myConsumer_copy3->receive() == true);
BOOST_CHECK(*myConsumer_copy1 == 120);
BOOST_CHECK(*myConsumer_copy2 == 120);
BOOST_CHECK(*myConsumer_copy3 == 120);
BOOST_CHECK(myConsumer_copy1->receive() == false);
BOOST_CHECK(myConsumer_copy2->receive() == false);
BOOST_CHECK(myConsumer_copy3->receive() == false);
testModule.consumer.read();
BOOST_CHECK(testModule.consumer == 120);
// resend same number
BOOST_CHECK(myConsumer_copy1->receive() == false);
BOOST_CHECK(myConsumer_copy2->receive() == false);
BOOST_CHECK(myConsumer_copy3->receive() == false);
myConsumer->send();
usleep(200000);
BOOST_CHECK(myConsumer_copy1->receive() == true);
BOOST_CHECK(myConsumer_copy2->receive() == true);
BOOST_CHECK(myConsumer_copy3->receive() == true);
BOOST_CHECK(*myConsumer_copy1 == 120);
BOOST_CHECK(*myConsumer_copy2 == 120);
BOOST_CHECK(*myConsumer_copy3 == 120);
BOOST_CHECK(myConsumer_copy1->receive() == false);
BOOST_CHECK(myConsumer_copy2->receive() == false);
BOOST_CHECK(myConsumer_copy3->receive() == false);
testModule.consumer.read();
BOOST_CHECK(testModule.consumer == 120);
}
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