LCOV - code coverage report
Current view: top level - listrev/unittest - RandomDataListGenerator_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 74 74
Test Date: 2025-12-21 13:07:08 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * @file RandomDataListGenerator_test.cxx RandomDataListGenerator plugin Unit Tests
       3              :  *
       4              :  * This is part of the DUNE DAQ Application Framework, copyright 2020.
       5              :  * Licensing/copyright details are in the COPYING file that you should have
       6              :  * received with this code.
       7              :  */
       8              : 
       9              : #include "RandomDataListGenerator.hpp"
      10              : 
      11              : #include "appfwk/ConfigurationManager.hpp"
      12              : #include "opmonlib/TestOpMonManager.hpp"
      13              : #include "serialization/Serialization.hpp"
      14              : 
      15              : #define BOOST_TEST_MODULE RandomDataListGenerator_test // NOLINT
      16              : 
      17              : #include "boost/test/unit_test.hpp"
      18              : 
      19              : #include <string>
      20              : #include <vector>
      21              : 
      22              : using namespace dunedaq::listrev;
      23              : 
      24              : BOOST_AUTO_TEST_SUITE(RandomDataListGenerator_test)
      25              : 
      26              : struct ConfigurationTestFixture
      27              : {
      28            2 :   ConfigurationTestFixture()
      29            2 :   {
      30            2 :     std::string sessionName = "lr-session";
      31            2 :     std::string appName = "listrev";
      32            2 :     std::string TEST_OKS_DB = "oksconflibs:config/lrSession-singleapp.data.xml";
      33            2 :     cfgmgr = std::make_shared<dunedaq::appfwk::ConfigurationManager>(TEST_OKS_DB, appName, sessionName);
      34            2 :     dunedaq::get_iomanager()->configure(sessionName, cfgmgr->get_queues(), cfgmgr->get_networkconnections(), nullptr, opmgr);
      35            2 :   }
      36            2 :   ~ConfigurationTestFixture()
      37              :   {
      38            2 :     dunedaq::get_iomanager()->reset();
      39            2 :     cfgmgr = nullptr;
      40            2 :   }
      41              : 
      42              :   ConfigurationTestFixture(ConfigurationTestFixture const&) = default;
      43              :   ConfigurationTestFixture(ConfigurationTestFixture&&) = default;
      44              :   ConfigurationTestFixture& operator=(ConfigurationTestFixture const&) = default;
      45              :   ConfigurationTestFixture& operator=(ConfigurationTestFixture&&) = default;
      46              : 
      47              :   dunedaq::opmonlib::TestOpMonManager opmgr;
      48              :   std::shared_ptr<dunedaq::appfwk::ConfigurationManager> cfgmgr;
      49              : };
      50              : 
      51            2 : BOOST_FIXTURE_TEST_CASE(Commands, ConfigurationTestFixture)
      52              : {
      53            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("RandomDataListGenerator", "rdlg0");
      54            1 :   opmgr.register_node("rdlg0", mod);
      55            1 :   BOOST_REQUIRE(mod->has_command("conf"));
      56            1 :   BOOST_REQUIRE(mod->has_command("start"));
      57            1 :   BOOST_REQUIRE(mod->has_command("stop"));
      58            1 :   BOOST_REQUIRE(mod->has_command("scrap"));
      59            1 :   BOOST_REQUIRE(mod->has_command("hello"));
      60              : 
      61            1 :   mod->init(cfgmgr);
      62            1 :   mod->execute_command("conf");
      63            1 :   mod->execute_command("start");
      64            1 :   mod->execute_command("hello");
      65            1 :   auto metrics = opmgr.collect();
      66            1 :   mod->execute_command("stop");
      67            1 :   mod->execute_command("scrap");
      68              : 
      69            1 :   auto facility = opmgr.get_backend_facility();
      70            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.RandomListGeneratorInfo"));
      71            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
      72              : 
      73            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("new_generated_numbers").uint8_value(), 0);
      74            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("new_lists_sent").uint8_value(), 0);
      75            6 : }
      76              : 
      77            2 : BOOST_FIXTURE_TEST_CASE(Lists, ConfigurationTestFixture)
      78              : {
      79            1 :   std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("RandomDataListGenerator", "rdlg0");
      80            1 :   opmgr.register_node("rdlg0", mod);
      81            1 :   auto facility = opmgr.get_backend_facility();
      82              : 
      83            1 :   auto listReceiver = dunedaq::get_iomanager()->get_receiver<IntList>("lr0_list_queue");
      84              : 
      85            1 :   mod->init(cfgmgr);
      86            1 :   mod->execute_command("conf");
      87            1 :   mod->execute_command("start");
      88              : 
      89            1 :   auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("rdlg0_request_queue");
      90            1 :   auto createsSender = dunedaq::get_iomanager()->get_sender<CreateList>("creates_queue");
      91              : 
      92            1 :   RequestList requestOne(1, "lr0_list_queue");
      93            1 :   RequestList requestTwo(2, "lr0_list_queue");
      94            1 :   RequestList requestThree(3, "lr0_list_queue");
      95            1 :   CreateList createTwo(2, 1);
      96            1 :   CreateList createThree(3, 20);
      97              : 
      98              :   // Send a request before create message
      99            1 :   requestSender->send(std::move(requestOne), std::chrono::milliseconds(1000));
     100            3 :   BOOST_REQUIRE_EXCEPTION(listReceiver->receive(std::chrono::milliseconds(11000)),
     101              :                           dunedaq::iomanager::TimeoutExpired,
     102              :                           [&](dunedaq::iomanager::TimeoutExpired) { return true; });
     103              : 
     104            1 :   createsSender->send(std::move(createTwo), std::chrono::milliseconds(1000));
     105            1 :   createsSender->send(std::move(createThree), std::chrono::milliseconds(1000));
     106              : 
     107              :   // No request -> no response
     108            3 :   BOOST_REQUIRE_EXCEPTION(listReceiver->receive(std::chrono::milliseconds(1000)),
     109              :                           dunedaq::iomanager::TimeoutExpired,
     110              :                           [&](dunedaq::iomanager::TimeoutExpired) { return true; });
     111              : 
     112            1 :   auto metrics = opmgr.collect();
     113            1 :   auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.RandomListGeneratorInfo"));
     114            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     115            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("new_generated_numbers").uint8_value(), 2);
     116            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("new_lists_sent").uint8_value(), 0);
     117              : 
     118            1 :   requestSender->send(std::move(requestTwo), std::chrono::milliseconds(1000));
     119            1 :   auto listTwo = listReceiver->receive(std::chrono::milliseconds(1000));
     120            1 :   BOOST_REQUIRE_EQUAL(listTwo.list_id, 2);
     121            1 :   BOOST_REQUIRE_EQUAL(listTwo.list.size(), 1);
     122              : 
     123            1 :   requestSender->send(std::move(requestThree), std::chrono::milliseconds(1000));
     124            1 :   auto listThree = listReceiver->receive(std::chrono::milliseconds(1000));
     125            1 :   BOOST_REQUIRE_EQUAL(listThree.list_id, 3);
     126            1 :   BOOST_REQUIRE_EQUAL(listThree.list.size(), 20);
     127              : 
     128            1 :   metrics = opmgr.collect();
     129            1 :   entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.RandomListGeneratorInfo"));
     130            1 :   mod->execute_command("stop");
     131            1 :   mod->execute_command("scrap");
     132              : 
     133            1 :   BOOST_REQUIRE_EQUAL(entries.size(), 1);
     134            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("new_generated_numbers").uint8_value(), 0);
     135            1 :   BOOST_REQUIRE_EQUAL(entries.front().data().at("new_lists_sent").uint8_value(), 2);
     136            5 : }
     137              : 
     138              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1