Line data Source code
1 : /**
2 : * @file FragmentHeader_test.cxx FragmentHeader 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 "daqdataformats/FragmentHeader.hpp"
10 :
11 : /**
12 : * @brief Name of this test module
13 : */
14 : #define BOOST_TEST_MODULE FragmentHeader_test // NOLINT
15 :
16 : #include "boost/test/unit_test.hpp"
17 :
18 : #include <string>
19 : #include <vector>
20 :
21 : using namespace dunedaq::daqdataformats;
22 :
23 : BOOST_AUTO_TEST_SUITE(FragmentHeader_test)
24 :
25 2 : BOOST_AUTO_TEST_CASE(FragmentTypeConversion)
26 : {
27 1 : BOOST_REQUIRE_EQUAL(static_cast<fragment_type_t>(string_to_fragment_type("WIB")),
28 : static_cast<fragment_type_t>(FragmentType::kWIB));
29 1 : BOOST_REQUIRE_EQUAL(fragment_type_to_string(FragmentType::kWIB), "WIB");
30 :
31 1 : auto type_map = get_fragment_type_names();
32 : // sanity check
33 21 : for (auto& type_pair : type_map) {
34 20 : BOOST_TEST_MESSAGE("Fragment type" << int(type_pair.first) << " " << type_pair.second << " with converters: " << int(string_to_fragment_type(type_pair.second)) << " " << fragment_type_to_string(type_pair.first));
35 20 : BOOST_REQUIRE_EQUAL(static_cast<fragment_type_t>(string_to_fragment_type(type_pair.second)),
36 : static_cast<fragment_type_t>(type_pair.first));
37 20 : BOOST_REQUIRE_EQUAL(fragment_type_to_string(type_pair.first), type_pair.second);
38 : }
39 :
40 1 : BOOST_REQUIRE_EQUAL(static_cast<fragment_type_t>(string_to_fragment_type("thisIsABadFragmentType")),
41 : static_cast<fragment_type_t>(FragmentType::kUnknown));
42 1 : BOOST_REQUIRE_EQUAL(fragment_type_to_string(static_cast<FragmentType>(-10)), "Unknown");
43 1 : }
44 :
45 : /**
46 : * @brief Test that FragmentHeader::operator<< functions as expected
47 : */
48 2 : BOOST_AUTO_TEST_CASE(StreamOperator)
49 : {
50 1 : FragmentHeader header;
51 1 : header.size = sizeof(FragmentHeader) + 4;
52 1 : header.trigger_number = 1;
53 1 : header.trigger_timestamp = 2;
54 1 : header.run_number = 3;
55 1 : header.sequence_number = 4;
56 1 : header.detector_id = 1;
57 1 : header.element_id = { SourceID::Subsystem::kTrigger, 0x7766 };
58 :
59 1 : std::ostringstream ostr;
60 1 : ostr << header;
61 1 : std::string output = ostr.str();
62 1 : BOOST_TEST_MESSAGE("Stream operator: " << output);
63 :
64 1 : BOOST_REQUIRE(!output.empty());
65 1 : auto pos = output.find("trigger_number: 1,");
66 1 : BOOST_REQUIRE(pos != std::string::npos);
67 1 : pos = output.find("trigger_timestamp: 2,");
68 1 : BOOST_REQUIRE(pos != std::string::npos);
69 1 : pos = output.find("run_number: 3,");
70 1 : BOOST_REQUIRE(pos != std::string::npos);
71 :
72 1 : std::istringstream iss(ostr.str());
73 1 : FragmentHeader header_from_stream;
74 1 : iss >> header_from_stream;
75 1 : BOOST_REQUIRE_EQUAL(header_from_stream.run_number, header.run_number);
76 1 : BOOST_REQUIRE_EQUAL(header_from_stream.trigger_number, header.trigger_number);
77 1 : BOOST_REQUIRE_EQUAL(header_from_stream.trigger_timestamp, header.trigger_timestamp);
78 1 : BOOST_REQUIRE_EQUAL(header_from_stream.sequence_number, header.sequence_number);
79 1 : BOOST_REQUIRE_EQUAL(header_from_stream.detector_id, header.detector_id);
80 1 : BOOST_REQUIRE_EQUAL(header_from_stream.element_id, header.element_id);
81 1 : }
82 :
83 : BOOST_AUTO_TEST_SUITE_END()
|