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()
|