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

            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()
        

Generated by: LCOV version 2.0-1