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 6 : {
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(
35 : sessionName, cfgmgr->get_queues(), cfgmgr->get_networkconnections(), nullptr, opmgr);
36 2 : }
37 2 : ~ConfigurationTestFixture()
38 : {
39 2 : dunedaq::get_iomanager()->reset();
40 2 : cfgmgr = nullptr;
41 2 : }
42 :
43 : ConfigurationTestFixture(ConfigurationTestFixture const&) = default;
44 : ConfigurationTestFixture(ConfigurationTestFixture&&) = default;
45 : ConfigurationTestFixture& operator=(ConfigurationTestFixture const&) = default;
46 : ConfigurationTestFixture& operator=(ConfigurationTestFixture&&) = default;
47 :
48 : dunedaq::opmonlib::TestOpMonManager opmgr;
49 : std::shared_ptr<dunedaq::appfwk::ConfigurationManager> cfgmgr;
50 : };
51 :
52 2 : BOOST_FIXTURE_TEST_CASE(Commands, ConfigurationTestFixture)
53 : {
54 1 : std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("RandomDataListGenerator", "rdlg0");
55 1 : opmgr.register_node("rdlg0", mod);
56 1 : BOOST_REQUIRE(mod->has_command("conf"));
57 1 : BOOST_REQUIRE(mod->has_command("start"));
58 1 : BOOST_REQUIRE(mod->has_command("stop"));
59 1 : BOOST_REQUIRE(mod->has_command("scrap"));
60 1 : BOOST_REQUIRE(mod->has_command("hello"));
61 :
62 1 : mod->init(cfgmgr);
63 1 : mod->execute_command("conf");
64 1 : mod->execute_command("start");
65 1 : mod->execute_command("hello");
66 1 : auto metrics = opmgr.collect();
67 1 : mod->execute_command("stop");
68 1 : mod->execute_command("scrap");
69 :
70 1 : auto facility = opmgr.get_backend_facility();
71 1 : auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.RandomListGeneratorInfo"));
72 1 : BOOST_REQUIRE_EQUAL(entries.size(), 1);
73 :
74 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("new_generated_numbers").uint8_value(), 0);
75 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("new_lists_sent").uint8_value(), 0);
76 6 : }
77 :
78 2 : BOOST_FIXTURE_TEST_CASE(Lists, ConfigurationTestFixture)
79 : {
80 1 : std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("RandomDataListGenerator", "rdlg0");
81 1 : opmgr.register_node("rdlg0", mod);
82 1 : auto facility = opmgr.get_backend_facility();
83 :
84 1 : auto listReceiver = dunedaq::get_iomanager()->get_receiver<IntList>("lr0_list_queue");
85 :
86 1 : mod->init(cfgmgr);
87 1 : mod->execute_command("conf");
88 1 : mod->execute_command("start");
89 :
90 1 : auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("rdlg0_request_queue");
91 1 : auto createsSender = dunedaq::get_iomanager()->get_sender<CreateList>("creates_queue");
92 :
93 1 : RequestList requestOne(1, "lr0_list_queue");
94 1 : RequestList requestTwo(2, "lr0_list_queue");
95 1 : RequestList requestThree(3, "lr0_list_queue");
96 1 : CreateList createTwo(2, 1);
97 1 : CreateList createThree(3, 20);
98 :
99 : // Send a request before create message
100 1 : requestSender->send(std::move(requestOne), std::chrono::milliseconds(1000));
101 1 : BOOST_REQUIRE_EXCEPTION(listReceiver->receive(std::chrono::milliseconds(11000)),
102 : dunedaq::iomanager::TimeoutExpired,
103 : [&](dunedaq::iomanager::TimeoutExpired) { return true; });
104 :
105 1 : createsSender->send(std::move(createTwo), std::chrono::milliseconds(1000));
106 1 : createsSender->send(std::move(createThree), std::chrono::milliseconds(1000));
107 :
108 : // No request -> no response
109 1 : BOOST_REQUIRE_EXCEPTION(listReceiver->receive(std::chrono::milliseconds(1000)),
110 : dunedaq::iomanager::TimeoutExpired,
111 : [&](dunedaq::iomanager::TimeoutExpired) { return true; });
112 :
113 1 : auto metrics = opmgr.collect();
114 1 : auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.RandomListGeneratorInfo"));
115 1 : BOOST_REQUIRE_EQUAL(entries.size(), 1);
116 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("new_generated_numbers").uint8_value(), 2);
117 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("new_lists_sent").uint8_value(), 0);
118 :
119 1 : requestSender->send(std::move(requestTwo), std::chrono::milliseconds(1000));
120 1 : auto listTwo = listReceiver->receive(std::chrono::milliseconds(1000));
121 1 : BOOST_REQUIRE_EQUAL(listTwo.list_id, 2);
122 1 : BOOST_REQUIRE_EQUAL(listTwo.list.size(), 1);
123 :
124 1 : requestSender->send(std::move(requestThree), std::chrono::milliseconds(1000));
125 1 : auto listThree = listReceiver->receive(std::chrono::milliseconds(1000));
126 1 : BOOST_REQUIRE_EQUAL(listThree.list_id, 3);
127 1 : BOOST_REQUIRE_EQUAL(listThree.list.size(), 20);
128 :
129 1 : metrics = opmgr.collect();
130 1 : entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.RandomListGeneratorInfo"));
131 1 : mod->execute_command("stop");
132 1 : mod->execute_command("scrap");
133 :
134 1 : BOOST_REQUIRE_EQUAL(entries.size(), 1);
135 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("new_generated_numbers").uint8_value(), 0);
136 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("new_lists_sent").uint8_value(), 2);
137 5 : }
138 :
139 : BOOST_AUTO_TEST_SUITE_END()
|