1 #include "artdaq-core/Core/SharedMemoryFragmentManager.hh"
3 #define BOOST_TEST_MODULE(SharedMemoryFragmentManager_t)
4 #include "cetlib/quiet_unit_test.hpp"
5 #include "cetlib_except/exception.h"
8 BOOST_AUTO_TEST_SUITE(SharedMemoryFragmentManager_test)
10 BOOST_AUTO_TEST_CASE(Construct)
14 BOOST_REQUIRE_EQUAL(man.IsValid(),
true);
15 BOOST_REQUIRE_EQUAL(man.GetMyId(), 0);
16 BOOST_REQUIRE_EQUAL(man.size(), 10);
17 BOOST_REQUIRE_EQUAL(man.GetAttachedCount(), 0);
20 BOOST_AUTO_TEST_CASE(Attach)
23 uint32_t key = 0x7357 + rand() % 0x10000000;
27 BOOST_REQUIRE_EQUAL(man.IsValid(),
true);
28 BOOST_REQUIRE_EQUAL(man.GetMyId(), 0);
29 BOOST_REQUIRE_EQUAL(man.size(), 10);
30 BOOST_REQUIRE_EQUAL(man.GetAttachedCount(), 1);
32 BOOST_REQUIRE_EQUAL(man2.IsValid(),
true);
33 BOOST_REQUIRE_EQUAL(man2.GetMyId(), 1);
34 BOOST_REQUIRE_EQUAL(man2.size(), 10);
35 BOOST_REQUIRE_EQUAL(man2.GetAttachedCount(), 1);
39 BOOST_AUTO_TEST_CASE(DataFlow)
42 std::cout <<
"Initializing SharedMemoryFragmentManagers for DataFlow test" << std::endl;
43 uint32_t key = 0x7357 + rand() % 0x10000000;
49 std::cout <<
"Creating test Fragment" << std::endl;
51 frag.setSequenceID(0x10);
52 frag.setFragmentID(0x20);
54 frag.setSystemType(type);
55 frag.setTimestamp(0x30);
56 for (
size_t ii = 0; ii < fragSizeWords; ++ii)
58 *(frag.dataBegin() + ii) = ii;
61 std::cout <<
"Writing Test Fragment to Shared Memory" << std::endl;
62 man.WriteFragment(std::move(frag),
false);
64 std::cout <<
"Reading Test Fragment Header" << std::endl;
66 auto sts = man2.ReadFragmentHeader(header);
68 std::cout <<
"Checking Test Fragment Header Contents" << std::endl;
69 BOOST_REQUIRE_EQUAL(sts, 0);
70 BOOST_REQUIRE_EQUAL(header.
word_count, frag.size());
73 BOOST_REQUIRE_EQUAL(header.
type, type);
74 BOOST_REQUIRE_EQUAL(header.
timestamp, 0x30);
76 std::cout <<
"Reading Test Fragment data" << std::endl;
80 std::cout <<
"Checking Test Fragment contents" << std::endl;
81 BOOST_REQUIRE_EQUAL(sts, 0);
82 for(
size_t ii = 0; ii < fragSizeWords; ++ii)
84 BOOST_REQUIRE_EQUAL(*(frag.dataBegin() + ii), *(frag2.dataBegin() + ii));
86 std::cout <<
"SharedMemoryFragmentManager test complete" << std::endl;
89 BOOST_AUTO_TEST_CASE(WholeFragment)
91 std::cout <<
"Initializing SharedMemoryFragmentManagers for WholeFragment Test" << std::endl;
93 uint32_t key = 0x7357 + rand() % 0x10000000;
99 std::cout <<
"Creating test Fragment" << std::endl;
101 frag.setSequenceID(0x10);
102 frag.setFragmentID(0x20);
104 frag.setSystemType(type);
105 frag.setTimestamp(0x30);
106 for (
size_t ii = 0; ii < fragSizeWords; ++ii)
108 *(frag.dataBegin() + ii) = ii;
111 std::cout <<
"Writing Test Fragment to Shared Memory" << std::endl;
112 man.WriteFragment(std::move(frag),
false);
114 std::cout <<
"Reading Test Fragment Header" << std::endl;
116 auto sts = man2.ReadFragment(recvdFrag);
118 std::cout <<
"Checking Test Fragment Header Contents" << std::endl;
119 BOOST_REQUIRE_EQUAL(sts, 0);
120 BOOST_REQUIRE_EQUAL(recvdFrag.
size(), frag.size());
121 BOOST_REQUIRE_EQUAL(recvdFrag.
sequenceID(), 0x10);
122 BOOST_REQUIRE_EQUAL(recvdFrag.
fragmentID(), 0x20);
123 BOOST_REQUIRE_EQUAL(recvdFrag.
type(), type);
124 BOOST_REQUIRE_EQUAL(recvdFrag.
timestamp(), 0x30);
126 std::cout <<
"Checking Test Fragment Data Contents" << std::endl;
127 for (
size_t ii = 0; ii < fragSizeWords; ++ii)
130 BOOST_REQUIRE_EQUAL(*(frag.dataBegin() + ii), *(recvdFrag.
dataBegin() + ii));
132 std::cout <<
"SharedMemoryFragmentManager test complete" << std::endl;
135 BOOST_AUTO_TEST_SUITE_END()
std::size_t size() const
Gets the size of the Fragment, from the Fragment header.
The SharedMemoryFragmentManager is a SharedMemoryManager that deals with Fragment transfers using a S...
sequence_id_t sequenceID() const
Sequence ID of the Fragment, from the Fragment header.
timestamp_t timestamp() const
Timestamp of the Fragment, from the Fragment header.
static constexpr type_t DataFragmentType
Copy DataFragmentType from RawFragmentHeader.
iterator dataBegin()
Return an iterator to the beginning of the data payload (after header and metadata) ...
type_t type() const
Type of the Fragment, from the Fragment header.
detail::RawFragmentHeader::RawDataType RawDataType
The RawDataType (currently a 64-bit integer) is the basic unit of data representation within artdaq ...
A Fragment contains the data from one piece of the DAQ system for one event The artdaq::Fragment is t...
fragment_id_t fragmentID() const
Fragment ID of the Fragment, from the Fragment header.