LCOV - code coverage report
Current view: top level - dfmessages/unittest - TriggerRecord_serialization_test.cxx (source / functions) Coverage Total Hit
Test: code.result Lines: 100.0 % 312 312
Test Date: 2025-12-21 13:07:08 Functions: 100.0 % 8 8

            Line data    Source code
       1              : /**
       2              :  * @file TriggerRecord_serialization_test.cxx TriggerRecord class serialization 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/TriggerRecord_serialization.hpp"
      10              : 
      11              : /**
      12              :  * @brief Name of this test module
      13              :  */
      14              : #define BOOST_TEST_MODULE TriggerRecord_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(TriggerRecord_serialization_test)
      26              : 
      27            2 : BOOST_AUTO_TEST_CASE(SerDes_MsgPack)
      28              : {
      29              :   // Setup
      30            1 :   std::vector<ComponentRequest> components;
      31            1 :   components.emplace_back();
      32            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
      33            1 :   components.back().component.id = 2;
      34            1 :   components.back().window_begin = 3;
      35            1 :   components.back().window_end = 4;
      36            1 :   components.emplace_back();
      37            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
      38            1 :   components.back().component.id = 6;
      39            1 :   components.back().window_begin = 7;
      40            1 :   components.back().window_end = 8;
      41              : 
      42            1 :   TriggerRecordHeader record_header(components);
      43            1 :   record_header.set_trigger_number(1);
      44            1 :   record_header.set_trigger_timestamp(2);
      45            1 :   record_header.set_run_number(3);
      46            1 :   record_header.set_trigger_type(4);
      47            1 :   record_header.set_sequence_number(5);
      48            1 :   record_header.set_max_sequence_number(6);
      49              : 
      50            1 :   TriggerRecord record(record_header);
      51              : 
      52            1 :   FragmentHeader header;
      53            1 :   header.size = sizeof(FragmentHeader) + 4;
      54            1 :   header.trigger_number = 1;
      55            1 :   header.trigger_timestamp = 2;
      56            1 :   header.run_number = 3;
      57              : 
      58            1 :   auto frag = malloc(sizeof(FragmentHeader) + 4);
      59            1 :   memcpy(frag, &header, sizeof(FragmentHeader));
      60              : 
      61            1 :   uint8_t one = 1, two = 2, three = 3, four = 4;                               // NOLINT(build/unsigned)
      62            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1);       // NOLINT(build/unsigned)
      63            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1);   // NOLINT(build/unsigned)
      64            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
      65            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1);  // NOLINT(build/unsigned)
      66              : 
      67            1 :   auto another_frag = malloc(sizeof(FragmentHeader) + 8);
      68            1 :   header.size = sizeof(FragmentHeader) + 8;
      69            1 :   memcpy(another_frag, &header, sizeof(FragmentHeader));
      70              : 
      71            1 :   uint8_t five = 5, six = 6, seven = 7, eight = 8;                                      // NOLINT(build/unsigned)
      72            1 :   uint8_t nine = 9, ten = 10, eleven = 11, twelve = 12;                                 // NOLINT(build/unsigned)
      73            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader), &five, 1);       // NOLINT(build/unsigned)
      74            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 1, &six, 1);    // NOLINT(build/unsigned)
      75            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 2, &seven, 1);  // NOLINT(build/unsigned)
      76            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 3, &eight, 1);  // NOLINT(build/unsigned)
      77            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 4, &nine, 1);   // NOLINT(build/unsigned)
      78            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 5, &ten, 1);    // NOLINT(build/unsigned)
      79            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 6, &eleven, 1); // NOLINT(build/unsigned)
      80            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 7, &twelve, 1); // NOLINT(build/unsigned)
      81              : 
      82            1 :   auto test_frag = std::make_unique<Fragment>(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
      83            1 :   auto another_test_frag = std::make_unique<Fragment>(another_frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
      84              : 
      85            1 :   record.add_fragment(std::move(test_frag));
      86            1 :   record.add_fragment(std::move(another_test_frag));
      87              : 
      88              :   // SERIALIZE
      89            1 :   auto bytes = dunedaq::serialization::serialize(record, dunedaq::serialization::kMsgPack);
      90              : 
      91              :   // DESERIALIZE
      92            1 :   TriggerRecord deserialized = dunedaq::serialization::deserialize<TriggerRecord>(bytes);
      93              : 
      94              :   // TEST
      95            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().num_requested_components, 2);
      96            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().trigger_number, 1);
      97            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().trigger_timestamp, 2);
      98            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().run_number, 3);
      99            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().trigger_type, 4);
     100            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().sequence_number, 5);
     101            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().max_sequence_number, 6);
     102              : 
     103            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().size(), 2);
     104              : 
     105            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(0)->get_trigger_number(), 1);
     106            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(0)->get_trigger_timestamp(), 2);
     107            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(0)->get_run_number(), 3);
     108            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(1)->get_trigger_number(), 1);
     109            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(1)->get_trigger_timestamp(), 2);
     110            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(1)->get_run_number(), 3);
     111              : 
     112            1 :   BOOST_REQUIRE_EQUAL(
     113              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 0), // NOLINT(build/unsigned)
     114              :     1);                                                                               // NOLINT(build/unsigned)
     115            1 :   BOOST_REQUIRE_EQUAL(
     116              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 1), // NOLINT(build/unsigned)
     117              :     2);                                                                               // NOLINT(build/unsigned)
     118            1 :   BOOST_REQUIRE_EQUAL(
     119              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 2), // NOLINT(build/unsigned)
     120              :     3);                                                                               // NOLINT(build/unsigned)
     121            1 :   BOOST_REQUIRE_EQUAL(
     122              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 3), // NOLINT(build/unsigned)
     123              :     4);                                                                               // NOLINT(build/unsigned)
     124              : 
     125            1 :   BOOST_REQUIRE_EQUAL(
     126              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 0), // NOLINT(build/unsigned)
     127              :     5);                                                                               // NOLINT(build/unsigned)
     128            1 :   BOOST_REQUIRE_EQUAL(
     129              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 1), // NOLINT(build/unsigned)
     130              :     6);                                                                               // NOLINT(build/unsigned)
     131            1 :   BOOST_REQUIRE_EQUAL(
     132              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 2), // NOLINT(build/unsigned)
     133              :     7);                                                                               // NOLINT(build/unsigned)
     134            1 :   BOOST_REQUIRE_EQUAL(
     135              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 3), // NOLINT(build/unsigned)
     136              :     8);                                                                               // NOLINT(build/unsigned)
     137            1 :   BOOST_REQUIRE_EQUAL(
     138              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 4), // NOLINT(build/unsigned)
     139              :     9);                                                                               // NOLINT(build/unsigned)
     140            1 :   BOOST_REQUIRE_EQUAL(
     141              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 5), // NOLINT(build/unsigned)
     142              :     10);                                                                              // NOLINT(build/unsigned
     143            1 :   BOOST_REQUIRE_EQUAL(
     144              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 6), // NOLINT(build/unsigned)
     145              :     11);                                                                              // NOLINT(build/unsigned)
     146            1 :   BOOST_REQUIRE_EQUAL(
     147              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 7), // NOLINT(build/unsigned)
     148              :     12);                                                                              // NOLINT(build/unsigned)
     149            1 : }
     150              : 
     151            2 : BOOST_AUTO_TEST_CASE(Ptr_SerDes_MsgPack)
     152              : {
     153              :   // Setup
     154            1 :   std::vector<ComponentRequest> components;
     155            1 :   components.emplace_back();
     156            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
     157            1 :   components.back().component.id = 2;
     158            1 :   components.back().window_begin = 3;
     159            1 :   components.back().window_end = 4;
     160            1 :   components.emplace_back();
     161            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
     162            1 :   components.back().component.id = 6;
     163            1 :   components.back().window_begin = 7;
     164            1 :   components.back().window_end = 8;
     165              : 
     166            1 :   TriggerRecordHeader record_header(components);
     167            1 :   record_header.set_trigger_number(1);
     168            1 :   record_header.set_trigger_timestamp(2);
     169            1 :   record_header.set_run_number(3);
     170            1 :   record_header.set_trigger_type(4);
     171            1 :   record_header.set_sequence_number(5);
     172            1 :   record_header.set_max_sequence_number(6);
     173              : 
     174            1 :   auto record = std::make_unique<TriggerRecord>(record_header);
     175              : 
     176            1 :   FragmentHeader header;
     177            1 :   header.size = sizeof(FragmentHeader) + 4;
     178            1 :   header.trigger_number = 1;
     179            1 :   header.trigger_timestamp = 2;
     180            1 :   header.run_number = 3;
     181              : 
     182            1 :   auto frag = malloc(sizeof(FragmentHeader) + 4);
     183            1 :   memcpy(frag, &header, sizeof(FragmentHeader));
     184              : 
     185            1 :   uint8_t one = 1, two = 2, three = 3, four = 4;                               // NOLINT(build/unsigned)
     186            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1);       // NOLINT(build/unsigned)
     187            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1);   // NOLINT(build/unsigned)
     188            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
     189            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1);  // NOLINT(build/unsigned)
     190              : 
     191            1 :   auto another_frag = malloc(sizeof(FragmentHeader) + 8);
     192            1 :   header.size = sizeof(FragmentHeader) + 8;
     193            1 :   memcpy(another_frag, &header, sizeof(FragmentHeader));
     194              : 
     195            1 :   uint8_t five = 5, six = 6, seven = 7, eight = 8;                                      // NOLINT(build/unsigned)
     196            1 :   uint8_t nine = 9, ten = 10, eleven = 11, twelve = 12;                                 // NOLINT(build/unsigned)
     197            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader), &five, 1);       // NOLINT(build/unsigned)
     198            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 1, &six, 1);    // NOLINT(build/unsigned)
     199            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 2, &seven, 1);  // NOLINT(build/unsigned)
     200            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 3, &eight, 1);  // NOLINT(build/unsigned)
     201            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 4, &nine, 1);   // NOLINT(build/unsigned)
     202            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 5, &ten, 1);    // NOLINT(build/unsigned)
     203            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 6, &eleven, 1); // NOLINT(build/unsigned)
     204            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 7, &twelve, 1); // NOLINT(build/unsigned)
     205              : 
     206            1 :   auto test_frag = std::make_unique<Fragment>(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
     207            1 :   auto another_test_frag = std::make_unique<Fragment>(another_frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
     208              : 
     209            1 :   record->add_fragment(std::move(test_frag));
     210            1 :   record->add_fragment(std::move(another_test_frag));
     211              : 
     212              :   // SERIALIZE
     213            1 :   auto bytes = dunedaq::serialization::serialize(record, dunedaq::serialization::kMsgPack);
     214              : 
     215              :   // DESERIALIZE
     216            1 :   auto deserialized = dunedaq::serialization::deserialize<std::unique_ptr<TriggerRecord>>(bytes);
     217              : 
     218              :   // TEST
     219            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().num_requested_components, 2);
     220            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().trigger_number, 1);
     221            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().trigger_timestamp, 2);
     222            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().run_number, 3);
     223            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().trigger_type, 4);
     224            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().sequence_number, 5);
     225            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().max_sequence_number, 6);
     226              : 
     227            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().size(), 2);
     228              : 
     229            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(0)->get_trigger_number(), 1);
     230            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(0)->get_trigger_timestamp(), 2);
     231            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(0)->get_run_number(), 3);
     232            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(1)->get_trigger_number(), 1);
     233            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(1)->get_trigger_timestamp(), 2);
     234            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(1)->get_run_number(), 3);
     235              : 
     236            1 :   BOOST_REQUIRE_EQUAL(
     237              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 0), // NOLINT(build/unsigned)
     238              :     1);                                                                                // NOLINT(build/unsigned)
     239            1 :   BOOST_REQUIRE_EQUAL(
     240              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 1), // NOLINT(build/unsigned)
     241              :     2);                                                                                // NOLINT(build/unsigned)
     242            1 :   BOOST_REQUIRE_EQUAL(
     243              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 2), // NOLINT(build/unsigned)
     244              :     3);                                                                                // NOLINT(build/unsigned)
     245            1 :   BOOST_REQUIRE_EQUAL(
     246              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 3), // NOLINT(build/unsigned)
     247              :     4);                                                                                // NOLINT(build/unsigned)
     248              : 
     249            1 :   BOOST_REQUIRE_EQUAL(
     250              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 0), // NOLINT(build/unsigned)
     251              :     5);                                                                                // NOLINT(build/unsigned)
     252            1 :   BOOST_REQUIRE_EQUAL(
     253              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 1), // NOLINT(build/unsigned)
     254              :     6);                                                                                // NOLINT(build/unsigned)
     255            1 :   BOOST_REQUIRE_EQUAL(
     256              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 2), // NOLINT(build/unsigned)
     257              :     7);                                                                                // NOLINT(build/unsigned)
     258            1 :   BOOST_REQUIRE_EQUAL(
     259              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 3), // NOLINT(build/unsigned)
     260              :     8);                                                                                // NOLINT(build/unsigned)
     261            1 :   BOOST_REQUIRE_EQUAL(
     262              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 4), // NOLINT(build/unsigned)
     263              :     9);                                                                                // NOLINT(build/unsigned)
     264            1 :   BOOST_REQUIRE_EQUAL(
     265              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 5), // NOLINT(build/unsigned)
     266              :     10);                                                                               // NOLINT(build/unsigned
     267            1 :   BOOST_REQUIRE_EQUAL(
     268              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 6), // NOLINT(build/unsigned)
     269              :     11);                                                                               // NOLINT(build/unsigned)
     270            1 :   BOOST_REQUIRE_EQUAL(
     271              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 7), // NOLINT(build/unsigned)
     272              :     12);                                                                               // NOLINT(build/unsigned)
     273            1 : }
     274              : 
     275            2 : BOOST_AUTO_TEST_CASE(SerDes_Ptr_to_TriggerRecord)
     276              : {
     277              :   // Setup
     278            1 :   std::vector<ComponentRequest> components;
     279            1 :   components.emplace_back();
     280            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
     281            1 :   components.back().component.id = 2;
     282            1 :   components.back().window_begin = 3;
     283            1 :   components.back().window_end = 4;
     284            1 :   components.emplace_back();
     285            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
     286            1 :   components.back().component.id = 6;
     287            1 :   components.back().window_begin = 7;
     288            1 :   components.back().window_end = 8;
     289              : 
     290            1 :   TriggerRecordHeader record_header(components);
     291            1 :   record_header.set_trigger_number(1);
     292            1 :   record_header.set_trigger_timestamp(2);
     293            1 :   record_header.set_run_number(3);
     294            1 :   record_header.set_trigger_type(4);
     295            1 :   record_header.set_sequence_number(5);
     296            1 :   record_header.set_max_sequence_number(6);
     297              : 
     298            1 :   auto record = std::make_unique<TriggerRecord>(record_header);
     299              : 
     300            1 :   FragmentHeader header;
     301            1 :   header.size = sizeof(FragmentHeader) + 4;
     302            1 :   header.trigger_number = 1;
     303            1 :   header.trigger_timestamp = 2;
     304            1 :   header.run_number = 3;
     305              : 
     306            1 :   auto frag = malloc(sizeof(FragmentHeader) + 4);
     307            1 :   memcpy(frag, &header, sizeof(FragmentHeader));
     308              : 
     309            1 :   uint8_t one = 1, two = 2, three = 3, four = 4;                               // NOLINT(build/unsigned)
     310            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1);       // NOLINT(build/unsigned)
     311            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1);   // NOLINT(build/unsigned)
     312            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
     313            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1);  // NOLINT(build/unsigned)
     314              : 
     315            1 :   auto another_frag = malloc(sizeof(FragmentHeader) + 8);
     316            1 :   header.size = sizeof(FragmentHeader) + 8;
     317            1 :   memcpy(another_frag, &header, sizeof(FragmentHeader));
     318              : 
     319            1 :   uint8_t five = 5, six = 6, seven = 7, eight = 8;                                      // NOLINT(build/unsigned)
     320            1 :   uint8_t nine = 9, ten = 10, eleven = 11, twelve = 12;                                 // NOLINT(build/unsigned)
     321            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader), &five, 1);       // NOLINT(build/unsigned)
     322            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 1, &six, 1);    // NOLINT(build/unsigned)
     323            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 2, &seven, 1);  // NOLINT(build/unsigned)
     324            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 3, &eight, 1);  // NOLINT(build/unsigned)
     325            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 4, &nine, 1);   // NOLINT(build/unsigned)
     326            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 5, &ten, 1);    // NOLINT(build/unsigned)
     327            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 6, &eleven, 1); // NOLINT(build/unsigned)
     328            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 7, &twelve, 1); // NOLINT(build/unsigned)
     329              : 
     330            1 :   auto test_frag = std::make_unique<Fragment>(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
     331            1 :   auto another_test_frag = std::make_unique<Fragment>(another_frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
     332              : 
     333            1 :   record->add_fragment(std::move(test_frag));
     334            1 :   record->add_fragment(std::move(another_test_frag));
     335              : 
     336              :   // SERIALIZE
     337            1 :   auto bytes = dunedaq::serialization::serialize(record, dunedaq::serialization::kMsgPack);
     338              : 
     339              :   // DESERIALIZE
     340            1 :   TriggerRecord deserialized = dunedaq::serialization::deserialize<TriggerRecord>(bytes);
     341              : 
     342              :   // TEST
     343            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().num_requested_components, 2);
     344            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().trigger_number, 1);
     345            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().trigger_timestamp, 2);
     346            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().run_number, 3);
     347            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().trigger_type, 4);
     348            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().sequence_number, 5);
     349            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_header_data().max_sequence_number, 6);
     350              : 
     351            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().size(), 2);
     352              : 
     353            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(0)->get_trigger_number(), 1);
     354            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(0)->get_trigger_timestamp(), 2);
     355            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(0)->get_run_number(), 3);
     356            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(1)->get_trigger_number(), 1);
     357            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(1)->get_trigger_timestamp(), 2);
     358            1 :   BOOST_REQUIRE_EQUAL(deserialized.get_fragments_ref().at(1)->get_run_number(), 3);
     359              : 
     360            1 :   BOOST_REQUIRE_EQUAL(
     361              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 0), // NOLINT(build/unsigned)
     362              :     1);                                                                               // NOLINT(build/unsigned)
     363            1 :   BOOST_REQUIRE_EQUAL(
     364              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 1), // NOLINT(build/unsigned)
     365              :     2);                                                                               // NOLINT(build/unsigned)
     366            1 :   BOOST_REQUIRE_EQUAL(
     367              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 2), // NOLINT(build/unsigned)
     368              :     3);                                                                               // NOLINT(build/unsigned)
     369            1 :   BOOST_REQUIRE_EQUAL(
     370              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(0)->get_data()) + 3), // NOLINT(build/unsigned)
     371              :     4);                                                                               // NOLINT(build/unsigned)
     372              : 
     373            1 :   BOOST_REQUIRE_EQUAL(
     374              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 0), // NOLINT(build/unsigned)
     375              :     5);                                                                               // NOLINT(build/unsigned)
     376            1 :   BOOST_REQUIRE_EQUAL(
     377              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 1), // NOLINT(build/unsigned)
     378              :     6);                                                                               // NOLINT(build/unsigned)
     379            1 :   BOOST_REQUIRE_EQUAL(
     380              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 2), // NOLINT(build/unsigned)
     381              :     7);                                                                               // NOLINT(build/unsigned)
     382            1 :   BOOST_REQUIRE_EQUAL(
     383              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 3), // NOLINT(build/unsigned)
     384              :     8);                                                                               // NOLINT(build/unsigned)
     385            1 :   BOOST_REQUIRE_EQUAL(
     386              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 4), // NOLINT(build/unsigned)
     387              :     9);                                                                               // NOLINT(build/unsigned)
     388            1 :   BOOST_REQUIRE_EQUAL(
     389              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 5), // NOLINT(build/unsigned)
     390              :     10);                                                                              // NOLINT(build/unsigned
     391            1 :   BOOST_REQUIRE_EQUAL(
     392              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 6), // NOLINT(build/unsigned)
     393              :     11);                                                                              // NOLINT(build/unsigned)
     394            1 :   BOOST_REQUIRE_EQUAL(
     395              :     *(static_cast<uint8_t*>(deserialized.get_fragments_ref().at(1)->get_data()) + 7), // NOLINT(build/unsigned)
     396              :     12);                                                                              // NOLINT(build/unsigned)
     397            1 : }
     398              : 
     399            2 : BOOST_AUTO_TEST_CASE(SerDes_TriggerRecord_to_Ptr)
     400              : {
     401              :   // Setup
     402            1 :   std::vector<ComponentRequest> components;
     403            1 :   components.emplace_back();
     404            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
     405            1 :   components.back().component.id = 2;
     406            1 :   components.back().window_begin = 3;
     407            1 :   components.back().window_end = 4;
     408            1 :   components.emplace_back();
     409            1 :   components.back().component.subsystem = SourceID::Subsystem::kDetectorReadout;
     410            1 :   components.back().component.id = 6;
     411            1 :   components.back().window_begin = 7;
     412            1 :   components.back().window_end = 8;
     413              : 
     414            1 :   TriggerRecordHeader record_header(components);
     415            1 :   record_header.set_trigger_number(1);
     416            1 :   record_header.set_trigger_timestamp(2);
     417            1 :   record_header.set_run_number(3);
     418            1 :   record_header.set_trigger_type(4);
     419            1 :   record_header.set_sequence_number(5);
     420            1 :   record_header.set_max_sequence_number(6);
     421              : 
     422            1 :   TriggerRecord record(record_header);
     423              : 
     424            1 :   FragmentHeader header;
     425            1 :   header.size = sizeof(FragmentHeader) + 4;
     426            1 :   header.trigger_number = 1;
     427            1 :   header.trigger_timestamp = 2;
     428            1 :   header.run_number = 3;
     429              : 
     430            1 :   auto frag = malloc(sizeof(FragmentHeader) + 4);
     431            1 :   memcpy(frag, &header, sizeof(FragmentHeader));
     432              : 
     433            1 :   uint8_t one = 1, two = 2, three = 3, four = 4;                               // NOLINT(build/unsigned)
     434            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader), &one, 1);       // NOLINT(build/unsigned)
     435            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 1, &two, 1);   // NOLINT(build/unsigned)
     436            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 2, &three, 1); // NOLINT(build/unsigned)
     437            1 :   memcpy(static_cast<uint8_t*>(frag) + sizeof(FragmentHeader) + 3, &four, 1);  // NOLINT(build/unsigned)
     438              : 
     439            1 :   auto another_frag = malloc(sizeof(FragmentHeader) + 8);
     440            1 :   header.size = sizeof(FragmentHeader) + 8;
     441            1 :   memcpy(another_frag, &header, sizeof(FragmentHeader));
     442              : 
     443            1 :   uint8_t five = 5, six = 6, seven = 7, eight = 8;                                      // NOLINT(build/unsigned)
     444            1 :   uint8_t nine = 9, ten = 10, eleven = 11, twelve = 12;                                 // NOLINT(build/unsigned)
     445            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader), &five, 1);       // NOLINT(build/unsigned)
     446            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 1, &six, 1);    // NOLINT(build/unsigned)
     447            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 2, &seven, 1);  // NOLINT(build/unsigned)
     448            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 3, &eight, 1);  // NOLINT(build/unsigned)
     449            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 4, &nine, 1);   // NOLINT(build/unsigned)
     450            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 5, &ten, 1);    // NOLINT(build/unsigned)
     451            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 6, &eleven, 1); // NOLINT(build/unsigned)
     452            1 :   memcpy(static_cast<uint8_t*>(another_frag) + sizeof(FragmentHeader) + 7, &twelve, 1); // NOLINT(build/unsigned)
     453              : 
     454            1 :   auto test_frag = std::make_unique<Fragment>(frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
     455            1 :   auto another_test_frag = std::make_unique<Fragment>(another_frag, Fragment::BufferAdoptionMode::kTakeOverBuffer);
     456              : 
     457            1 :   record.add_fragment(std::move(test_frag));
     458            1 :   record.add_fragment(std::move(another_test_frag));
     459              : 
     460              :   // SERIALIZE
     461            1 :   auto bytes = dunedaq::serialization::serialize(record, dunedaq::serialization::kMsgPack);
     462              : 
     463              :   // DESERIALIZE
     464            1 :   auto deserialized = dunedaq::serialization::deserialize<std::unique_ptr<TriggerRecord>>(bytes);
     465              : 
     466              :   // TEST
     467            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().num_requested_components, 2);
     468            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().trigger_number, 1);
     469            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().trigger_timestamp, 2);
     470            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().run_number, 3);
     471            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().trigger_type, 4);
     472            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().sequence_number, 5);
     473            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_header_data().max_sequence_number, 6);
     474              : 
     475            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().size(), 2);
     476              : 
     477            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(0)->get_trigger_number(), 1);
     478            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(0)->get_trigger_timestamp(), 2);
     479            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(0)->get_run_number(), 3);
     480            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(1)->get_trigger_number(), 1);
     481            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(1)->get_trigger_timestamp(), 2);
     482            1 :   BOOST_REQUIRE_EQUAL(deserialized->get_fragments_ref().at(1)->get_run_number(), 3);
     483              : 
     484            1 :   BOOST_REQUIRE_EQUAL(
     485              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 0), // NOLINT(build/unsigned)
     486              :     1);                                                                                // NOLINT(build/unsigned)
     487            1 :   BOOST_REQUIRE_EQUAL(
     488              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 1), // NOLINT(build/unsigned)
     489              :     2);                                                                                // NOLINT(build/unsigned)
     490            1 :   BOOST_REQUIRE_EQUAL(
     491              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 2), // NOLINT(build/unsigned)
     492              :     3);                                                                                // NOLINT(build/unsigned)
     493            1 :   BOOST_REQUIRE_EQUAL(
     494              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(0)->get_data()) + 3), // NOLINT(build/unsigned)
     495              :     4);                                                                                // NOLINT(build/unsigned)
     496              : 
     497            1 :   BOOST_REQUIRE_EQUAL(
     498              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 0), // NOLINT(build/unsigned)
     499              :     5);                                                                                // NOLINT(build/unsigned)
     500            1 :   BOOST_REQUIRE_EQUAL(
     501              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 1), // NOLINT(build/unsigned)
     502              :     6);                                                                                // NOLINT(build/unsigned)
     503            1 :   BOOST_REQUIRE_EQUAL(
     504              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 2), // NOLINT(build/unsigned)
     505              :     7);                                                                                // NOLINT(build/unsigned)
     506            1 :   BOOST_REQUIRE_EQUAL(
     507              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 3), // NOLINT(build/unsigned)
     508              :     8);                                                                                // NOLINT(build/unsigned)
     509            1 :   BOOST_REQUIRE_EQUAL(
     510              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 4), // NOLINT(build/unsigned)
     511              :     9);                                                                                // NOLINT(build/unsigned)
     512            1 :   BOOST_REQUIRE_EQUAL(
     513              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 5), // NOLINT(build/unsigned)
     514              :     10);                                                                               // NOLINT(build/unsigned
     515            1 :   BOOST_REQUIRE_EQUAL(
     516              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 6), // NOLINT(build/unsigned)
     517              :     11);                                                                               // NOLINT(build/unsigned)
     518            1 :   BOOST_REQUIRE_EQUAL(
     519              :     *(static_cast<uint8_t*>(deserialized->get_fragments_ref().at(1)->get_data()) + 7), // NOLINT(build/unsigned)
     520              :     12);                                                                               // NOLINT(build/unsigned)
     521            1 : }
     522              : 
     523              : BOOST_AUTO_TEST_SUITE_END()
        

Generated by: LCOV version 2.0-1