Line data Source code
1 : /**
2 : * @file Fragment_serialization_test.cxx Fragment class 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 "dfmessages/Fragment_serialization.hpp"
10 :
11 : /**
12 : * @brief Name of this test module
13 : */
14 : #define BOOST_TEST_MODULE Fragment_serialization_test // NOLINT
15 :
16 : #include "boost/test/unit_test.hpp"
17 :
18 : #include <memory>
19 : #include <string>
20 : #include <utility>
21 : #include <vector>
22 :
23 : using namespace dunedaq::daqdataformats;
24 :
25 : BOOST_AUTO_TEST_SUITE(Fragment_serialization_test)
26 :
27 2 : BOOST_AUTO_TEST_CASE(SerDes_MsgPack)
28 : {
29 1 : FragmentHeader header;
30 1 : header.size = sizeof(FragmentHeader) + 4;
31 1 : header.trigger_number = 1;
32 1 : header.trigger_timestamp = 2;
33 1 : header.run_number = 3;
34 :
35 1 : auto frag = malloc(sizeof(FragmentHeader) + 4);
36 1 : memcpy(frag, &header, sizeof(FragmentHeader));
37 :
38 1 : uint8_t one = 1, two = 2, three = 3, four = 4; // NOLINT(build/unsigned)
39 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1); // NOLINT(build/unsigned)
40 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1); // NOLINT(build/unsigned)
41 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
42 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1); // NOLINT(build/unsigned)
43 :
44 1 : Fragment test_frag(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
45 1 : auto bytes = dunedaq::serialization::serialize(test_frag, dunedaq::serialization::kMsgPack);
46 :
47 1 : Fragment frag_deserialized = dunedaq::serialization::deserialize<Fragment>(bytes);
48 :
49 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_trigger_number(), test_frag.get_trigger_number());
50 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_run_number(), test_frag.get_run_number());
51 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_trigger_timestamp(), test_frag.get_trigger_timestamp());
52 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_window_begin(), test_frag.get_window_begin());
53 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_window_end(), test_frag.get_window_end());
54 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_element_id().subsystem, test_frag.get_element_id().subsystem);
55 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_element_id().id, test_frag.get_element_id().id);
56 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_error_bits(), test_frag.get_error_bits());
57 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_fragment_type_code(), test_frag.get_fragment_type_code());
58 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_size(), test_frag.get_size());
59 :
60 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized.get_data()) + 0), // NOLINT(build/unsigned)
61 : *(static_cast<uint8_t*>(test_frag.get_data()) + 0)); // NOLINT(build/unsigned)
62 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized.get_data()) + 1), // NOLINT(build/unsigned)
63 : *(static_cast<uint8_t*>(test_frag.get_data()) + 1)); // NOLINT(build/unsigned)
64 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized.get_data()) + 2), // NOLINT(build/unsigned)
65 : *(static_cast<uint8_t*>(test_frag.get_data()) + 2)); // NOLINT(build/unsigned)
66 1 : }
67 :
68 2 : BOOST_AUTO_TEST_CASE(Ptr_SerDes_MsgPack)
69 : {
70 1 : FragmentHeader header;
71 1 : header.size = sizeof(FragmentHeader) + 4;
72 1 : header.trigger_number = 1;
73 1 : header.trigger_timestamp = 2;
74 1 : header.run_number = 3;
75 :
76 1 : auto frag = malloc(sizeof(FragmentHeader) + 4);
77 1 : memcpy(frag, &header, sizeof(FragmentHeader));
78 :
79 1 : uint8_t one = 1, two = 2, three = 3, four = 4; // NOLINT(build/unsigned)
80 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1); // NOLINT(build/unsigned)
81 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1); // NOLINT(build/unsigned)
82 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
83 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1); // NOLINT(build/unsigned)
84 :
85 1 : auto test_frag = std::make_unique<Fragment>(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
86 1 : auto bytes = dunedaq::serialization::serialize(test_frag, dunedaq::serialization::kMsgPack);
87 :
88 1 : auto frag_deserialized = dunedaq::serialization::deserialize<std::unique_ptr<Fragment>>(bytes);
89 :
90 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_trigger_number(), test_frag->get_trigger_number());
91 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_run_number(), test_frag->get_run_number());
92 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_trigger_timestamp(), test_frag->get_trigger_timestamp());
93 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_window_begin(), test_frag->get_window_begin());
94 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_window_end(), test_frag->get_window_end());
95 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_element_id().subsystem, test_frag->get_element_id().subsystem);
96 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_element_id().id, test_frag->get_element_id().id);
97 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_error_bits(), test_frag->get_error_bits());
98 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_fragment_type_code(), test_frag->get_fragment_type_code());
99 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_size(), test_frag->get_size());
100 :
101 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized->get_data()) + 0), // NOLINT(build/unsigned)
102 : *(static_cast<uint8_t*>(test_frag->get_data()) + 0)); // NOLINT(build/unsigned)
103 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized->get_data()) + 1), // NOLINT(build/unsigned)
104 : *(static_cast<uint8_t*>(test_frag->get_data()) + 1)); // NOLINT(build/unsigned)
105 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized->get_data()) + 2), // NOLINT(build/unsigned)
106 : *(static_cast<uint8_t*>(test_frag->get_data()) + 2)); // NOLINT(build/unsigned)
107 1 : }
108 :
109 2 : BOOST_AUTO_TEST_CASE(Ptr_to_Fragment)
110 : {
111 1 : FragmentHeader header;
112 1 : header.size = sizeof(FragmentHeader) + 4;
113 1 : header.trigger_number = 1;
114 1 : header.trigger_timestamp = 2;
115 1 : header.run_number = 3;
116 :
117 1 : auto frag = malloc(sizeof(FragmentHeader) + 4);
118 1 : memcpy(frag, &header, sizeof(FragmentHeader));
119 :
120 1 : uint8_t one = 1, two = 2, three = 3, four = 4; // NOLINT(build/unsigned)
121 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1); // NOLINT(build/unsigned)
122 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1); // NOLINT(build/unsigned)
123 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
124 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1); // NOLINT(build/unsigned)
125 :
126 1 : auto test_frag = std::make_unique<Fragment>(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
127 1 : auto bytes = dunedaq::serialization::serialize(test_frag, dunedaq::serialization::kMsgPack);
128 :
129 1 : auto frag_deserialized = dunedaq::serialization::deserialize<Fragment>(bytes);
130 :
131 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_trigger_number(), test_frag->get_trigger_number());
132 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_run_number(), test_frag->get_run_number());
133 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_trigger_timestamp(), test_frag->get_trigger_timestamp());
134 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_window_begin(), test_frag->get_window_begin());
135 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_window_end(), test_frag->get_window_end());
136 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_element_id().subsystem, test_frag->get_element_id().subsystem);
137 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_element_id().id, test_frag->get_element_id().id);
138 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_error_bits(), test_frag->get_error_bits());
139 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_fragment_type_code(), test_frag->get_fragment_type_code());
140 1 : BOOST_REQUIRE_EQUAL(frag_deserialized.get_size(), test_frag->get_size());
141 :
142 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized.get_data()) + 0), // NOLINT(build/unsigned)
143 : *(static_cast<uint8_t*>(test_frag->get_data()) + 0)); // NOLINT(build/unsigned)
144 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized.get_data()) + 1), // NOLINT(build/unsigned)
145 : *(static_cast<uint8_t*>(test_frag->get_data()) + 1)); // NOLINT(build/unsigned)
146 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized.get_data()) + 2), // NOLINT(build/unsigned)
147 : *(static_cast<uint8_t*>(test_frag->get_data()) + 2)); // NOLINT(build/unsigned)
148 1 : }
149 :
150 2 : BOOST_AUTO_TEST_CASE(Fragment_to_Ptr)
151 : {
152 1 : FragmentHeader header;
153 1 : header.size = sizeof(FragmentHeader) + 4;
154 1 : header.trigger_number = 1;
155 1 : header.trigger_timestamp = 2;
156 1 : header.run_number = 3;
157 :
158 1 : auto frag = malloc(sizeof(FragmentHeader) + 4);
159 1 : memcpy(frag, &header, sizeof(FragmentHeader));
160 :
161 1 : uint8_t one = 1, two = 2, three = 3, four = 4; // NOLINT(build/unsigned)
162 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1); // NOLINT(build/unsigned)
163 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1); // NOLINT(build/unsigned)
164 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
165 1 : memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1); // NOLINT(build/unsigned)
166 :
167 1 : Fragment test_frag(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
168 1 : auto bytes = dunedaq::serialization::serialize(test_frag, dunedaq::serialization::kMsgPack);
169 :
170 1 : auto frag_deserialized = dunedaq::serialization::deserialize<std::unique_ptr<Fragment>>(bytes);
171 :
172 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_trigger_number(), test_frag.get_trigger_number());
173 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_run_number(), test_frag.get_run_number());
174 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_trigger_timestamp(), test_frag.get_trigger_timestamp());
175 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_window_begin(), test_frag.get_window_begin());
176 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_window_end(), test_frag.get_window_end());
177 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_element_id().subsystem, test_frag.get_element_id().subsystem);
178 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_element_id().id, test_frag.get_element_id().id);
179 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_error_bits(), test_frag.get_error_bits());
180 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_fragment_type_code(), test_frag.get_fragment_type_code());
181 1 : BOOST_REQUIRE_EQUAL(frag_deserialized->get_size(), test_frag.get_size());
182 :
183 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized->get_data()) + 0), // NOLINT(build/unsigned)
184 : *(static_cast<uint8_t*>(test_frag.get_data()) + 0)); // NOLINT(build/unsigned)
185 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized->get_data()) + 1), // NOLINT(build/unsigned)
186 : *(static_cast<uint8_t*>(test_frag.get_data()) + 1)); // NOLINT(build/unsigned)
187 1 : BOOST_REQUIRE_EQUAL(*(static_cast<uint8_t*>(frag_deserialized->get_data()) + 2), // NOLINT(build/unsigned)
188 : *(static_cast<uint8_t*>(test_frag.get_data()) + 2)); // NOLINT(build/unsigned)
189 1 : }
190 :
191 : BOOST_AUTO_TEST_SUITE_END()
|