|
10 | 10 | // or submit itself to any jurisdiction. |
11 | 11 |
|
12 | 12 | #include <fairmq/Message.h> |
| 13 | +#include <fairmq/TransportFactory.h> |
13 | 14 | #include "Framework/MessageSet.h" |
| 15 | +#include "Framework/DataProcessingHeader.h" |
| 16 | +#include "Headers/Stack.h" |
| 17 | +#include "MemoryResources/MemoryResources.h" |
14 | 18 | #include <catch_amalgamated.hpp> |
15 | 19 |
|
16 | 20 | using namespace o2::framework; |
17 | 21 |
|
18 | | -TEST_CASE("MessageSet") { |
| 22 | +TEST_CASE("MessageSet") |
| 23 | +{ |
19 | 24 | o2::framework::MessageSet msgSet; |
20 | | - std::vector<fair::mq::MessagePtr> ptrs; |
21 | | - std::unique_ptr<fair::mq::Message> msg(nullptr); |
| 25 | + o2::header::DataHeader dh{}; |
| 26 | + dh.splitPayloadParts = 0; |
| 27 | + dh.splitPayloadIndex = 0; |
| 28 | + o2::framework::DataProcessingHeader dph{0, 1}; |
| 29 | + auto transport = fair::mq::TransportFactory::CreateTransportFactory("zeromq"); |
| 30 | + fair::mq::MessagePtr payload(transport->CreateMessage()); |
| 31 | + auto channelAlloc = o2::pmr::getTransportAllocator(transport.get()); |
| 32 | + fair::mq::MessagePtr header = o2::pmr::getMessage(o2::header::Stack{channelAlloc, dh, dph}); |
22 | 33 | std::unique_ptr<fair::mq::Message> msg2(nullptr); |
23 | | - ptrs.emplace_back(std::move(msg)); |
| 34 | + std::vector<fair::mq::MessagePtr> ptrs; |
| 35 | + ptrs.emplace_back(std::move(header)); |
24 | 36 | ptrs.emplace_back(std::move(msg2)); |
25 | 37 | msgSet.add([&ptrs](size_t i) -> fair::mq::MessagePtr& { return ptrs[i]; }, 2); |
26 | 38 |
|
27 | 39 | REQUIRE(msgSet.messages.size() == 2); |
28 | | - REQUIRE(msgSet.messageMap.size() == 1); |
29 | | - REQUIRE(msgSet.pairMap.size() == 1); |
30 | | - REQUIRE(msgSet.messageMap[0].position == 0); |
31 | | - REQUIRE(msgSet.messageMap[0].size == 1); |
32 | | - |
33 | | - REQUIRE(msgSet.pairMap[0].partIndex == 0); |
34 | | - REQUIRE(msgSet.pairMap[0].payloadIndex == 0); |
| 40 | + REQUIRE((msgSet.messages | count_payloads{}) == 1); |
| 41 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).headerIdx == 0); |
| 42 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).payloadIdx == 1); |
| 43 | + REQUIRE((msgSet.messages | get_pair{0}).headerIdx == 0); |
| 44 | + REQUIRE((msgSet.messages | get_pair{0}).payloadIdx == 1); |
| 45 | + CHECK_THROWS((msgSet.messages | get_pair{1})); |
35 | 46 | } |
36 | 47 |
|
37 | | -TEST_CASE("MessageSetWithFunction") { |
| 48 | +TEST_CASE("MessageSetWithFunction") |
| 49 | +{ |
38 | 50 | std::vector<fair::mq::MessagePtr> ptrs; |
39 | | - std::unique_ptr<fair::mq::Message> msg(nullptr); |
| 51 | + o2::header::DataHeader dh{}; |
| 52 | + dh.splitPayloadParts = 0; |
| 53 | + dh.splitPayloadIndex = 0; |
| 54 | + o2::framework::DataProcessingHeader dph{0, 1}; |
| 55 | + auto transport = fair::mq::TransportFactory::CreateTransportFactory("zeromq"); |
| 56 | + fair::mq::MessagePtr payload(transport->CreateMessage()); |
| 57 | + auto channelAlloc = o2::pmr::getTransportAllocator(transport.get()); |
| 58 | + fair::mq::MessagePtr header = o2::pmr::getMessage(o2::header::Stack{channelAlloc, dh, dph}); |
40 | 59 | std::unique_ptr<fair::mq::Message> msg2(nullptr); |
41 | | - ptrs.emplace_back(std::move(msg)); |
| 60 | + ptrs.emplace_back(std::move(header)); |
42 | 61 | ptrs.emplace_back(std::move(msg2)); |
43 | 62 | o2::framework::MessageSet msgSet([&ptrs](size_t i) -> fair::mq::MessagePtr& { return ptrs[i]; }, 2); |
44 | 63 |
|
45 | 64 | REQUIRE(msgSet.messages.size() == 2); |
46 | | - REQUIRE(msgSet.messageMap.size() == 1); |
47 | | - REQUIRE(msgSet.pairMap.size() == 1); |
48 | | - REQUIRE(msgSet.messageMap[0].position == 0); |
49 | | - REQUIRE(msgSet.messageMap[0].size == 1); |
50 | | - |
51 | | - REQUIRE(msgSet.pairMap[0].partIndex == 0); |
52 | | - REQUIRE(msgSet.pairMap[0].payloadIndex == 0); |
| 65 | + REQUIRE((msgSet.messages | count_payloads{}) == 1); |
| 66 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).headerIdx == 0); |
| 67 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).payloadIdx == 1); |
| 68 | + REQUIRE((msgSet.messages | get_pair{0}).headerIdx == 0); |
| 69 | + REQUIRE((msgSet.messages | get_pair{0}).payloadIdx == 1); |
| 70 | + CHECK_THROWS((msgSet.messages | get_pair{1})); |
53 | 71 | } |
54 | 72 |
|
55 | | -TEST_CASE("MessageSetWithMultipart") { |
| 73 | +TEST_CASE("MessageSetWithMultipart") |
| 74 | +{ |
56 | 75 | std::vector<fair::mq::MessagePtr> ptrs; |
57 | | - std::unique_ptr<fair::mq::Message> msg(nullptr); |
| 76 | + o2::header::DataHeader dh{}; |
| 77 | + dh.splitPayloadParts = 2; |
| 78 | + dh.splitPayloadIndex = 2; |
| 79 | + o2::framework::DataProcessingHeader dph{0, 1}; |
| 80 | + auto transport = fair::mq::TransportFactory::CreateTransportFactory("zeromq"); |
| 81 | + fair::mq::MessagePtr payload(transport->CreateMessage()); |
| 82 | + auto channelAlloc = o2::pmr::getTransportAllocator(transport.get()); |
| 83 | + fair::mq::MessagePtr header = o2::pmr::getMessage(o2::header::Stack{channelAlloc, dh, dph}); |
58 | 84 | std::unique_ptr<fair::mq::Message> msg2(nullptr); |
59 | 85 | std::unique_ptr<fair::mq::Message> msg3(nullptr); |
60 | | - ptrs.emplace_back(std::move(msg)); |
| 86 | + ptrs.emplace_back(std::move(header)); |
61 | 87 | ptrs.emplace_back(std::move(msg2)); |
62 | 88 | ptrs.emplace_back(std::move(msg3)); |
63 | 89 | o2::framework::MessageSet msgSet([&ptrs](size_t i) -> fair::mq::MessagePtr& { return ptrs[i]; }, 3); |
64 | 90 |
|
65 | 91 | REQUIRE(msgSet.messages.size() == 3); |
66 | | - REQUIRE(msgSet.messageMap.size() == 1); |
67 | | - REQUIRE(msgSet.pairMap.size() == 2); |
68 | | - REQUIRE(msgSet.messageMap[0].position == 0); |
69 | | - REQUIRE(msgSet.messageMap[0].size == 2); |
70 | | - |
71 | | - REQUIRE(msgSet.pairMap[0].partIndex == 0); |
72 | | - REQUIRE(msgSet.pairMap[0].payloadIndex == 0); |
73 | | - REQUIRE(msgSet.pairMap[1].partIndex == 0); |
74 | | - REQUIRE(msgSet.pairMap[1].payloadIndex == 1); |
| 92 | + REQUIRE((msgSet.messages | count_payloads{}) == 2); |
| 93 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).headerIdx == 0); |
| 94 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).payloadIdx == 1); |
| 95 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 1}).headerIdx == 0); |
| 96 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 1}).payloadIdx == 2); |
| 97 | + REQUIRE((msgSet.messages | get_pair{0}).headerIdx == 0); |
| 98 | + REQUIRE((msgSet.messages | get_pair{0}).payloadIdx == 1); |
| 99 | + REQUIRE((msgSet.messages | get_pair{1}).headerIdx == 0); |
| 100 | + REQUIRE((msgSet.messages | get_pair{1}).payloadIdx == 2); |
| 101 | + CHECK_THROWS((msgSet.messages | get_pair{2})); |
75 | 102 | } |
76 | 103 |
|
77 | | -TEST_CASE("MessageSetAddPartRef") { |
| 104 | +TEST_CASE("MessageSetAddPartRef") |
| 105 | +{ |
78 | 106 | std::vector<fair::mq::MessagePtr> ptrs; |
79 | 107 | std::unique_ptr<fair::mq::Message> msg(nullptr); |
80 | 108 | std::unique_ptr<fair::mq::Message> msg2(nullptr); |
81 | 109 | ptrs.emplace_back(std::move(msg)); |
82 | 110 | ptrs.emplace_back(std::move(msg2)); |
83 | | - PartRef ref {std::move(msg), std::move(msg2)}; |
| 111 | + PartRef ref{std::move(msg), std::move(msg2)}; |
84 | 112 | o2::framework::MessageSet msgSet; |
85 | 113 | msgSet.add(std::move(ref)); |
86 | 114 |
|
87 | 115 | REQUIRE(msgSet.messages.size() == 2); |
88 | | - REQUIRE(msgSet.messageMap.size() == 1); |
89 | | - REQUIRE(msgSet.pairMap.size() == 1); |
90 | | - REQUIRE(msgSet.messageMap[0].position == 0); |
91 | | - REQUIRE(msgSet.messageMap[0].size == 1); |
92 | | - |
93 | | - REQUIRE(msgSet.pairMap[0].partIndex == 0); |
94 | | - REQUIRE(msgSet.pairMap[0].payloadIndex == 0); |
95 | 116 | } |
96 | 117 |
|
97 | 118 | TEST_CASE("MessageSetAddMultiple") |
98 | 119 | { |
99 | 120 | std::vector<fair::mq::MessagePtr> ptrs; |
100 | | - std::unique_ptr<fair::mq::Message> msg(nullptr); |
| 121 | + o2::header::DataHeader dh1{}; |
| 122 | + dh1.splitPayloadParts = 0; |
| 123 | + dh1.splitPayloadIndex = 0; |
| 124 | + o2::header::DataHeader dh2{}; |
| 125 | + dh2.splitPayloadParts = 1; |
| 126 | + dh2.splitPayloadIndex = 0; |
| 127 | + o2::header::DataHeader dh3{}; |
| 128 | + dh3.splitPayloadParts = 2; |
| 129 | + dh3.splitPayloadIndex = 2; |
| 130 | + o2::framework::DataProcessingHeader dph{0, 1}; |
| 131 | + auto transport = fair::mq::TransportFactory::CreateTransportFactory("zeromq"); |
| 132 | + fair::mq::MessagePtr payload(transport->CreateMessage()); |
| 133 | + auto channelAlloc = o2::pmr::getTransportAllocator(transport.get()); |
| 134 | + fair::mq::MessagePtr header1 = o2::pmr::getMessage(o2::header::Stack{channelAlloc, dh1, dph}); |
| 135 | + fair::mq::MessagePtr header2 = o2::pmr::getMessage(o2::header::Stack{channelAlloc, dh2, dph}); |
| 136 | + fair::mq::MessagePtr header3 = o2::pmr::getMessage(o2::header::Stack{channelAlloc, dh3, dph}); |
| 137 | + |
101 | 138 | std::unique_ptr<fair::mq::Message> msg2(nullptr); |
102 | | - ptrs.emplace_back(std::move(msg)); |
103 | | - ptrs.emplace_back(std::move(msg2)); |
104 | | - PartRef ref{std::move(msg), std::move(msg2)}; |
| 139 | + std::unique_ptr<fair::mq::Message> msg3(nullptr); |
| 140 | + PartRef ref{std::move(header1), std::move(msg2)}; |
105 | 141 | o2::framework::MessageSet msgSet; |
106 | 142 | msgSet.add(std::move(ref)); |
107 | | - PartRef ref2{std::move(msg), std::move(msg2)}; |
| 143 | + PartRef ref2{std::move(header2), std::move(msg2)}; |
108 | 144 | msgSet.add(std::move(ref2)); |
109 | 145 | std::vector<fair::mq::MessagePtr> msgs; |
110 | | - msgs.push_back(std::unique_ptr<fair::mq::Message>(nullptr)); |
| 146 | + msgs.push_back(std::move(header3)); |
111 | 147 | msgs.push_back(std::unique_ptr<fair::mq::Message>(nullptr)); |
112 | 148 | msgs.push_back(std::unique_ptr<fair::mq::Message>(nullptr)); |
113 | 149 | msgSet.add([&msgs](size_t i) { |
114 | 150 | return std::move(msgs[i]); |
115 | | - }, 3); |
| 151 | + }, |
| 152 | + 3); |
116 | 153 |
|
117 | 154 | REQUIRE(msgSet.messages.size() == 7); |
118 | | - REQUIRE(msgSet.messageMap.size() == 3); |
119 | | - REQUIRE(msgSet.pairMap.size() == 4); |
120 | | - REQUIRE(msgSet.messageMap[0].position == 0); |
121 | | - REQUIRE(msgSet.messageMap[0].size == 1); |
122 | | - REQUIRE(msgSet.messageMap[1].position == 2); |
123 | | - REQUIRE(msgSet.messageMap[1].size == 1); |
124 | | - REQUIRE(msgSet.messageMap[2].position == 4); |
125 | | - REQUIRE(msgSet.messageMap[2].size == 2); |
126 | 155 |
|
127 | | - REQUIRE(msgSet.pairMap[0].partIndex == 0); |
128 | | - REQUIRE(msgSet.pairMap[0].payloadIndex == 0); |
129 | | - REQUIRE(msgSet.pairMap[1].partIndex == 1); |
130 | | - REQUIRE(msgSet.pairMap[1].payloadIndex == 0); |
131 | | - REQUIRE(msgSet.pairMap[2].partIndex == 2); |
132 | | - REQUIRE(msgSet.pairMap[2].payloadIndex == 0); |
133 | | - REQUIRE(msgSet.pairMap[3].partIndex == 2); |
134 | | - REQUIRE(msgSet.pairMap[3].payloadIndex == 1); |
| 156 | + REQUIRE((msgSet.messages | count_payloads{}) == 4); |
| 157 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).headerIdx == 0); |
| 158 | + REQUIRE((msgSet.messages | get_dataref_indices{0, 0}).payloadIdx == 1); |
| 159 | + REQUIRE((msgSet.messages | get_dataref_indices{1, 0}).headerIdx == 2); |
| 160 | + REQUIRE((msgSet.messages | get_dataref_indices{1, 0}).payloadIdx == 3); |
| 161 | + REQUIRE((msgSet.messages | get_dataref_indices{2, 0}).headerIdx == 4); |
| 162 | + REQUIRE((msgSet.messages | get_dataref_indices{2, 0}).payloadIdx == 5); |
| 163 | + REQUIRE((msgSet.messages | get_dataref_indices{2, 1}).headerIdx == 4); |
| 164 | + REQUIRE((msgSet.messages | get_dataref_indices{2, 1}).payloadIdx == 6); |
| 165 | + REQUIRE((msgSet.messages | get_pair{0}).headerIdx == 0); |
| 166 | + REQUIRE((msgSet.messages | get_pair{0}).payloadIdx == 1); |
| 167 | + REQUIRE((msgSet.messages | get_pair{1}).headerIdx == 2); |
| 168 | + REQUIRE((msgSet.messages | get_pair{1}).payloadIdx == 3); |
| 169 | + REQUIRE((msgSet.messages | get_pair{2}).headerIdx == 4); |
| 170 | + REQUIRE((msgSet.messages | get_pair{2}).payloadIdx == 5); |
| 171 | + REQUIRE((msgSet.messages | get_pair{3}).headerIdx == 4); |
| 172 | + REQUIRE((msgSet.messages | get_pair{3}).payloadIdx == 6); |
135 | 173 | } |
0 commit comments