Line data Source code
1 : /**
2 : * @file ListReverser_test.cxx ListReverser 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 "ListReverser.hpp"
10 :
11 : #include "appfwk/ConfigurationManager.hpp"
12 : #include "opmonlib/TestOpMonManager.hpp"
13 : #include "serialization/Serialization.hpp"
14 :
15 : #define BOOST_TEST_MODULE ListReverser_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(ListReverser_test)
25 :
26 : struct ConfigurationTestFixture
27 : {
28 3 : ConfigurationTestFixture()
29 3 : {
30 3 : std::string sessionName = "lr-session";
31 3 : std::string appName = "listrev";
32 3 : std::string TEST_OKS_DB = "oksconflibs:config/lrSession-singleapp.data.xml";
33 3 : cfgmgr = std::make_shared<dunedaq::appfwk::ConfigurationManager>(TEST_OKS_DB, appName, sessionName);
34 3 : dunedaq::get_iomanager()->configure(sessionName, cfgmgr->get_queues(), cfgmgr->get_networkconnections(), nullptr, opmgr);
35 3 : }
36 3 : ~ConfigurationTestFixture()
37 : {
38 3 : dunedaq::get_iomanager()->reset();
39 3 : cfgmgr = nullptr;
40 3 : }
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("ListReverser", "lr0");
54 1 : opmgr.register_node("lr0", mod);
55 1 : BOOST_REQUIRE(mod->has_command("start"));
56 1 : BOOST_REQUIRE(mod->has_command("stop"));
57 :
58 1 : mod->init(cfgmgr);
59 1 : mod->execute_command("start");
60 1 : auto metrics = opmgr.collect();
61 1 : mod->execute_command("stop");
62 :
63 1 : auto facility = opmgr.get_backend_facility();
64 1 : auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
65 1 : BOOST_REQUIRE_EQUAL(entries.size(), 1);
66 :
67 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 0);
68 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 0);
69 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 0);
70 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 0);
71 3 : }
72 :
73 2 : BOOST_FIXTURE_TEST_CASE(Requests, ConfigurationTestFixture)
74 : {
75 1 : std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
76 1 : opmgr.register_node("lr0", mod);
77 :
78 1 : auto requestReceiver = dunedaq::get_iomanager()->get_receiver<RequestList>("rdlg0_request_queue");
79 1 : auto listReceiver = dunedaq::get_iomanager()->get_receiver<ReversedList>("validator_list_queue");
80 :
81 1 : mod->init(cfgmgr);
82 1 : mod->execute_command("start");
83 :
84 1 : auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("lr0_request_queue");
85 :
86 : // ListReverser receives request and forwards to data list generator
87 1 : RequestList theRequest(1, "validator_list_queue");
88 1 : requestSender->send(std::move(theRequest), std::chrono::milliseconds(1000));
89 1 : auto received = requestReceiver->receive(std::chrono::milliseconds(1000));
90 1 : BOOST_REQUIRE_EQUAL(received.list_id, 1);
91 1 : BOOST_REQUIRE_EQUAL(received.destination, "lr0_list_queue");
92 :
93 1 : auto metrics = opmgr.collect();
94 1 : mod->execute_command("stop");
95 :
96 1 : auto facility = opmgr.get_backend_facility();
97 1 : auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
98 1 : BOOST_REQUIRE_EQUAL(entries.size(), 1);
99 :
100 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 1);
101 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 1);
102 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 0);
103 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 0);
104 3 : }
105 :
106 2 : BOOST_FIXTURE_TEST_CASE(Lists, ConfigurationTestFixture)
107 : {
108 1 : std::shared_ptr<dunedaq::appfwk::DAQModule> mod = dunedaq::appfwk::make_module("ListReverser", "lr0");
109 1 : opmgr.register_node("lr0", mod);
110 :
111 1 : auto requestReceiver = dunedaq::get_iomanager()->get_receiver<RequestList>("rdlg0_request_queue");
112 1 : auto listReceiver = dunedaq::get_iomanager()->get_receiver<ReversedList>("validator_list_queue");
113 :
114 1 : mod->init(cfgmgr);
115 1 : mod->execute_command("start");
116 :
117 1 : auto requestSender = dunedaq::get_iomanager()->get_sender<RequestList>("lr0_request_queue");
118 1 : auto listSender = dunedaq::get_iomanager()->get_sender<IntList>("lr0_list_queue");
119 :
120 1 : RequestList theRequest(2, "validator_list_queue");
121 1 : IntList theList(2, 0, { 3, 4, 5, 6 });
122 :
123 1 : requestSender->send(std::move(theRequest), std::chrono::milliseconds(1000));
124 1 : auto receivedRequest = requestReceiver->receive(std::chrono::milliseconds(1000));
125 1 : BOOST_REQUIRE_EQUAL(receivedRequest.list_id, 2);
126 1 : BOOST_REQUIRE_EQUAL(receivedRequest.destination, "lr0_list_queue");
127 :
128 1 : listSender->send(std::move(theList), std::chrono::milliseconds(1000));
129 1 : auto receivedList = listReceiver->receive(std::chrono::milliseconds(1000));
130 :
131 1 : BOOST_REQUIRE_EQUAL(receivedList.list_id, 2);
132 1 : BOOST_REQUIRE_EQUAL(receivedList.reverser_id, 0);
133 1 : BOOST_REQUIRE_EQUAL(receivedList.lists.size(), 1);
134 1 : BOOST_REQUIRE_EQUAL(receivedList.lists[0].original.list[0], 3);
135 1 : BOOST_REQUIRE_EQUAL(receivedList.lists[0].reversed.list[0], 6);
136 :
137 1 : auto metrics = opmgr.collect();
138 1 : mod->execute_command("stop");
139 :
140 1 : auto facility = opmgr.get_backend_facility();
141 1 : auto entries = facility->get_entries(std::regex("dunedaq.listrev.opmon.ListReverserInfo"));
142 1 : BOOST_REQUIRE_EQUAL(entries.size(), 1);
143 :
144 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_received").uint8_value(), 1);
145 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("requests_sent").uint8_value(), 1);
146 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_received").uint8_value(), 1);
147 1 : BOOST_REQUIRE_EQUAL(entries.front().data().at("lists_sent").uint8_value(), 1);
148 3 : }
149 :
150 : BOOST_AUTO_TEST_SUITE_END()
|