2727O2_DECLARE_DYNAMIC_LOG (forwarding);
2828using namespace o2 ::framework;
2929
30+ // Build a vector of spans over an existing vector-of-vectors for tests that
31+ // construct currentSetOfInputs locally (rather than via consumeAllInputsForTimeslice).
32+ static std::vector<std::span<fair::mq::MessagePtr>> asSpans (std::vector<std::vector<fair::mq::MessagePtr>>& vecs)
33+ {
34+ std::vector<std::span<fair::mq::MessagePtr>> spans;
35+ spans.reserve (vecs.size ());
36+ for (auto & v : vecs) {
37+ spans.emplace_back (v);
38+ }
39+ return spans;
40+ }
41+
3042TEST_CASE (" ForwardInputsEmpty" )
3143{
3244 o2::header::DataHeader dh;
@@ -45,7 +57,8 @@ TEST_CASE("ForwardInputsEmpty")
4557
4658 std::vector<std::vector<fair::mq::MessagePtr>> currentSetOfInputs;
4759
48- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
60+ auto spans = asSpans (currentSetOfInputs);
61+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
4962 REQUIRE (result.empty ());
5063}
5164
@@ -96,7 +109,8 @@ TEST_CASE("ForwardInputsSingleMessageSingleRoute")
96109 REQUIRE ((messageSet | count_parts{}) == 1 );
97110 currentSetOfInputs.emplace_back (std::move (messageSet));
98111
99- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
112+ auto spans = asSpans (currentSetOfInputs);
113+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
100114 REQUIRE (result.size () == 1 ); // One route
101115 REQUIRE (result[0 ].Size () == 2 ); // Two messages for that route
102116}
@@ -148,7 +162,8 @@ TEST_CASE("ForwardInputsSingleMessageSingleRouteNoConsume")
148162 REQUIRE ((messageSet | count_parts{}) == 1 );
149163 currentSetOfInputs.emplace_back (std::move (messageSet));
150164
151- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, true );
165+ auto spans = asSpans (currentSetOfInputs);
166+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, true );
152167 REQUIRE (result.size () == 1 );
153168 REQUIRE (result[0 ].Size () == 0 ); // Because there is a nullptr, we do not forward this as it was already consumed.
154169}
@@ -204,7 +219,8 @@ TEST_CASE("ForwardInputsSingleMessageSingleRouteAtEOS")
204219 REQUIRE ((messageSet | count_parts{}) == 1 );
205220 currentSetOfInputs.emplace_back (std::move (messageSet));
206221
207- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
222+ auto spans = asSpans (currentSetOfInputs);
223+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
208224 REQUIRE (result.size () == 1 ); // One route
209225 REQUIRE (result[0 ].Size () == 0 ); // FIXME: this is an actual error. It should be 2. However it cannot really happen.
210226 // Correct behavior below:
@@ -263,7 +279,8 @@ TEST_CASE("ForwardInputsSingleMessageSingleRouteWithOldestPossible")
263279 REQUIRE ((messageSet | count_parts{}) == 1 );
264280 currentSetOfInputs.emplace_back (std::move (messageSet));
265281
266- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
282+ auto spans = asSpans (currentSetOfInputs);
283+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
267284 REQUIRE (result.size () == 1 ); // One route
268285 REQUIRE (result[0 ].Size () == 0 ); // FIXME: this is actually wrong
269286 // FIXME: actually correct behavior below
@@ -329,7 +346,8 @@ TEST_CASE("ForwardInputsSingleMessageMultipleRoutes")
329346 REQUIRE ((messageSet | count_parts{}) == 1 );
330347 currentSetOfInputs.emplace_back (std::move (messageSet));
331348
332- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
349+ auto spans = asSpans (currentSetOfInputs);
350+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
333351 REQUIRE (result.size () == 2 ); // Two routes
334352 REQUIRE (result[0 ].Size () == 2 ); // Two messages per route
335353 REQUIRE (result[1 ].Size () == 0 ); // Only the first DPL matched channel matters
@@ -393,7 +411,8 @@ TEST_CASE("ForwardInputsSingleMessageMultipleRoutesExternals")
393411 REQUIRE ((messageSet | count_parts{}) == 1 );
394412 currentSetOfInputs.emplace_back (std::move (messageSet));
395413
396- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
414+ auto spans = asSpans (currentSetOfInputs);
415+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
397416 REQUIRE (result.size () == 2 ); // Two routes
398417 REQUIRE (result[0 ].Size () == 2 ); // With external matching channels, we need to copy and then forward
399418 REQUIRE (result[1 ].Size () == 2 ); //
@@ -473,7 +492,8 @@ TEST_CASE("ForwardInputsMultiMessageMultipleRoutes")
473492 currentSetOfInputs.emplace_back (std::move (messageSet2));
474493 REQUIRE (currentSetOfInputs.size () == 2 );
475494
476- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
495+ auto spans = asSpans (currentSetOfInputs);
496+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
477497 REQUIRE (result.size () == 2 ); // Two routes
478498 REQUIRE (result[0 ].Size () == 2 ); //
479499 REQUIRE (result[1 ].Size () == 2 ); //
@@ -537,7 +557,8 @@ TEST_CASE("ForwardInputsSingleMessageMultipleRoutesOnlyOneMatches")
537557 REQUIRE ((messageSet | count_parts{}) == 1 );
538558 currentSetOfInputs.emplace_back (std::move (messageSet));
539559
540- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
560+ auto spans = asSpans (currentSetOfInputs);
561+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
541562 REQUIRE (result.size () == 2 ); // Two routes
542563 REQUIRE (result[0 ].Size () == 0 ); // Two messages per route
543564 REQUIRE (result[1 ].Size () == 2 ); // Two messages per route
@@ -621,7 +642,8 @@ TEST_CASE("ForwardInputsSplitPayload")
621642 REQUIRE ((messageSet | count_parts{}) == 2 );
622643 currentSetOfInputs.emplace_back (std::move (messageSet));
623644
624- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
645+ auto spans = asSpans (currentSetOfInputs);
646+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
625647 REQUIRE (result.size () == 2 ); // Two routes
626648 CHECK (result[0 ].Size () == 2 ); // No messages on this route
627649 CHECK (result[1 ].Size () == 3 );
@@ -742,7 +764,8 @@ TEST_CASE("ForwardInputEOSSingleRoute")
742764 REQUIRE ((messageSet | count_parts{}) == 1 );
743765 currentSetOfInputs.emplace_back (std::move (messageSet));
744766
745- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
767+ auto spans = asSpans (currentSetOfInputs);
768+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
746769 REQUIRE (result.size () == 1 ); // One route
747770 REQUIRE (result[0 ].Size () == 0 ); // Oldest possible timeframe should not be forwarded
748771}
@@ -788,7 +811,8 @@ TEST_CASE("ForwardInputOldestPossibleSingleRoute")
788811 REQUIRE ((messageSet | count_parts{}) == 1 );
789812 currentSetOfInputs.emplace_back (std::move (messageSet));
790813
791- auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, currentSetOfInputs, copyByDefault, consume);
814+ auto spans = asSpans (currentSetOfInputs);
815+ auto result = o2::framework::DataProcessingHelpers::routeForwardedMessageSet (proxy, spans, copyByDefault, consume);
792816 REQUIRE (result.size () == 1 ); // One route
793817 REQUIRE (result[0 ].Size () == 0 ); // Oldest possible timeframe should not be forwarded
794818}
0 commit comments