1 #define BOOST_TEST_MODULE RoundRobin_policy_t
2 #include <boost/test/unit_test.hpp>
4 #include "artdaq/RoutingPolicies/RoutingManagerPolicy.hh"
5 #include "artdaq/RoutingPolicies/makeRoutingManagerPolicy.hh"
6 #include "fhiclcpp/ParameterSet.h"
8 BOOST_AUTO_TEST_SUITE(RoundRobin_policy_t)
12 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case VerifyRMPSharedPtr BEGIN";
13 auto ps4 = fhicl::ParameterSet::make(
"");
14 auto ps3 = fhicl::ParameterSet::make(
"");
15 auto ps2 = fhicl::ParameterSet::make(
"");
20 BOOST_REQUIRE_EQUAL(rrA, rrB);
23 BOOST_REQUIRE(rrA != rrB);
28 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case VerifyRMPSharedPtr END";
33 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case Simple BEGIN";
34 fhicl::ParameterSet ps = fhicl::ParameterSet::make(
"");
39 rr->AddReceiverToken(1, 1);
40 rr->AddReceiverToken(3, 1);
41 rr->AddReceiverToken(2, 1);
42 rr->AddReceiverToken(4, 1);
43 rr->AddReceiverToken(2, 1);
44 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 4);
45 auto secondTable = rr->GetCurrentTable();
46 BOOST_REQUIRE_EQUAL(secondTable.size(), 4);
47 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
48 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
49 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
50 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 4);
51 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 1);
52 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 2);
53 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 3);
54 BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 4);
56 rr->AddReceiverToken(1, 0);
58 auto thirdTable = rr->GetCurrentTable();
59 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
61 rr->AddReceiverToken(1, 2);
62 rr->AddReceiverToken(2, 1);
63 rr->AddReceiverToken(3, 1);
64 rr->AddReceiverToken(4, 2);
65 auto fourthTable = rr->GetCurrentTable();
66 BOOST_REQUIRE_EQUAL(fourthTable.size(), 4);
67 BOOST_REQUIRE_EQUAL(fourthTable[0].destination_rank, 1);
69 rr->AddReceiverToken(3, 1);
70 auto fifthTable = rr->GetCurrentTable();
71 BOOST_REQUIRE_EQUAL(fifthTable.size(), 4);
72 BOOST_REQUIRE_EQUAL(fifthTable[0].destination_rank, 1);
74 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case Simple END";
79 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case MinimumParticipants BEGIN";
80 fhicl::ParameterSet ps = fhicl::ParameterSet::make(
"minimum_participants: 2");
85 rr->AddReceiverToken(1, 1);
86 rr->AddReceiverToken(3, 1);
87 rr->AddReceiverToken(2, 1);
88 rr->AddReceiverToken(4, 1);
89 rr->AddReceiverToken(2, 1);
90 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 4);
91 auto secondTable = rr->GetCurrentTable();
92 BOOST_REQUIRE_EQUAL(secondTable.size(), 4);
93 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
94 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
95 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
96 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 4);
97 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 1);
98 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 2);
99 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 3);
100 BOOST_REQUIRE_EQUAL(secondTable[3].sequence_id, 4);
102 rr->AddReceiverToken(1, 0);
104 auto thirdTable = rr->GetCurrentTable();
105 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
107 rr->AddReceiverToken(1, 1);
108 auto fourthTable = rr->GetCurrentTable();
109 BOOST_REQUIRE_EQUAL(fourthTable.size(), 2);
111 BOOST_REQUIRE_EQUAL(fourthTable[0].destination_rank, 1);
112 BOOST_REQUIRE_EQUAL(fourthTable[1].destination_rank, 2);
113 BOOST_REQUIRE_EQUAL(fourthTable[0].sequence_id, 5);
114 BOOST_REQUIRE_EQUAL(fourthTable[1].sequence_id, 6);
116 rr->AddReceiverToken(1, 2);
117 rr->AddReceiverToken(2, 2);
118 rr->AddReceiverToken(3, 1);
119 rr->AddReceiverToken(4, 2);
120 auto fifthTable = rr->GetCurrentTable();
121 BOOST_REQUIRE_EQUAL(fifthTable.size(), 7);
122 BOOST_REQUIRE_EQUAL(fifthTable[0].destination_rank, 1);
124 rr->AddReceiverToken(3, 1);
125 auto sixthTable = rr->GetCurrentTable();
126 BOOST_REQUIRE_EQUAL(sixthTable.size(), 0);
128 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case MinimumParticipants END";
134 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case LargeMinimumParticipants BEGIN";
135 fhicl::ParameterSet ps = fhicl::ParameterSet::make(
"minimum_participants: 5");
140 rr->AddReceiverToken(1, 1);
141 rr->AddReceiverToken(3, 1);
142 rr->AddReceiverToken(2, 1);
143 rr->AddReceiverToken(3, 1);
144 rr->AddReceiverToken(2, 1);
145 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
146 auto firstTable = rr->GetCurrentTable();
147 BOOST_REQUIRE_EQUAL(firstTable.size(), 0);
149 rr->AddReceiverToken(5, 1);
150 rr->AddReceiverToken(6, 1);
152 auto secondTable = rr->GetCurrentTable();
153 BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
154 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
155 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 2);
156 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 3);
157 BOOST_REQUIRE_EQUAL(secondTable[3].destination_rank, 5);
158 BOOST_REQUIRE_EQUAL(secondTable[4].destination_rank, 6);
160 rr->AddReceiverToken(1, 1);
161 auto thirdTable = rr->GetCurrentTable();
162 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
164 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case LargeMinimumParticipants END";
169 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case ManyMissingParticipants BEGIN";
170 fhicl::ParameterSet ps = fhicl::ParameterSet::make(
"minimum_participants: -5");
175 rr->AddReceiverToken(1, 1);
176 rr->AddReceiverToken(3, 1);
177 rr->AddReceiverToken(2, 1);
178 rr->AddReceiverToken(3, 1);
179 rr->AddReceiverToken(2, 1);
180 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
181 auto secondTable = rr->GetCurrentTable();
182 BOOST_REQUIRE_EQUAL(secondTable.size(), 5);
183 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 1);
185 rr->AddReceiverToken(1, 1);
186 auto thirdTable = rr->GetCurrentTable();
187 BOOST_REQUIRE_EQUAL(thirdTable.size(), 1);
189 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case ManyMissingParticipants END";
194 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case DataFlowMode BEGIN";
195 fhicl::ParameterSet ps = fhicl::ParameterSet::make(
"routing_manager_mode: DataFlow");
200 rr->AddReceiverToken(1, 1);
201 rr->AddReceiverToken(3, 1);
202 rr->AddReceiverToken(2, 1);
203 rr->AddReceiverToken(3, 1);
204 rr->AddReceiverToken(2, 1);
205 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
206 auto route = rr->GetRouteForSequenceID(1, 4);
207 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
208 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
211 route = rr->GetRouteForSequenceID(1, 5);
212 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
213 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
216 route = rr->GetRouteForSequenceID(1, 5);
217 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
218 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
220 route = rr->GetRouteForSequenceID(2, 4);
221 BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
222 BOOST_REQUIRE_EQUAL(route.sequence_id, 2);
224 route = rr->GetRouteForSequenceID(2, 5);
225 BOOST_REQUIRE_EQUAL(route.destination_rank, -1);
227 rr->AddReceiverToken(1, 1);
228 route = rr->GetRouteForSequenceID(2, 5);
229 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
230 BOOST_REQUIRE_EQUAL(route.sequence_id, 2);
233 route = rr->GetRouteForSequenceID(1, 6);
234 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
235 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
238 route = rr->GetRouteForSequenceID(10343, 4);
239 BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
240 BOOST_REQUIRE_EQUAL(route.sequence_id, 10343);
242 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case DataFlowMode END";
247 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case RequestBasedEventBuilding BEGIN";
248 fhicl::ParameterSet ps = fhicl::ParameterSet::make(
"routing_manager_mode: RequestBasedEventBuilding routing_cache_size: 2");
253 rr->AddReceiverToken(1, 1);
254 rr->AddReceiverToken(3, 1);
255 rr->AddReceiverToken(2, 1);
256 rr->AddReceiverToken(3, 1);
257 rr->AddReceiverToken(2, 1);
258 BOOST_REQUIRE_EQUAL(rr->GetReceiverCount(), 3);
260 auto route = rr->GetRouteForSequenceID(1, 4);
261 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
262 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
265 route = rr->GetRouteForSequenceID(1, 5);
266 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
267 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
270 auto firstTable = rr->GetCurrentTable();
271 BOOST_REQUIRE_EQUAL(firstTable.size(), 1);
272 BOOST_REQUIRE_EQUAL(firstTable[0].destination_rank, 1);
275 route = rr->GetRouteForSequenceID(12343, 4);
276 BOOST_REQUIRE_EQUAL(route.destination_rank, 2);
277 BOOST_REQUIRE_EQUAL(route.sequence_id, 12343);
280 route = rr->GetRouteForSequenceID(4, 5);
281 BOOST_REQUIRE_EQUAL(route.destination_rank, 3);
282 BOOST_REQUIRE_EQUAL(route.sequence_id, 4);
285 route = rr->GetRouteForSequenceID(1, 6);
286 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
287 BOOST_REQUIRE_EQUAL(route.sequence_id, 1);
290 route = rr->GetRouteForSequenceID(50, 4);
291 BOOST_REQUIRE_EQUAL(route.destination_rank, -1);
293 rr->AddReceiverToken(1, 1);
294 route = rr->GetRouteForSequenceID(50, 4);
295 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
296 BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
298 route = rr->GetRouteForSequenceID(50, 5);
299 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
300 BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
303 auto secondTable = rr->GetCurrentTable();
304 BOOST_REQUIRE_EQUAL(secondTable.size(), 3);
305 BOOST_REQUIRE_EQUAL(secondTable[0].destination_rank, 3);
306 BOOST_REQUIRE_EQUAL(secondTable[0].sequence_id, 4);
307 BOOST_REQUIRE_EQUAL(secondTable[1].destination_rank, 1);
308 BOOST_REQUIRE_EQUAL(secondTable[1].sequence_id, 50);
309 BOOST_REQUIRE_EQUAL(secondTable[2].destination_rank, 2);
310 BOOST_REQUIRE_EQUAL(secondTable[2].sequence_id, 12343);
313 BOOST_REQUIRE_EQUAL(rr->GetCacheSize(), 2);
314 auto thirdTable = rr->GetCurrentTable();
315 BOOST_REQUIRE_EQUAL(thirdTable.size(), 0);
317 BOOST_REQUIRE(rr->CacheHasRoute(50));
318 BOOST_REQUIRE(!rr->CacheHasRoute(4));
319 route = rr->GetRouteForSequenceID(50, 6);
320 BOOST_REQUIRE_EQUAL(route.destination_rank, 1);
321 BOOST_REQUIRE_EQUAL(route.sequence_id, 50);
323 TLOG(TLVL_INFO) <<
"RoundRobin_policy_t Test Case RequestBasedEventBuilding END";
326 BOOST_AUTO_TEST_SUITE_END()
std::shared_ptr< RoutingManagerPolicy > makeRoutingManagerPolicy(std::string const &policy_plugin_spec, fhicl::ParameterSet const &ps)
Load a RoutingManagerPolicy plugin.