00001 #include "artdaq/DAQrate/EventStore.hh"
00002 #include <fhiclcpp/ParameterSet.h>
00003
00004 #include <thread>
00005
00006 #define BOOST_TEST_MODULE(EventStore_t)
00007 #include "boost/test/auto_unit_test.hpp"
00008
00009 BOOST_AUTO_TEST_SUITE(EventStore_test)
00010
00011
00012
00013
00014
00015
00016 int bogusApp(int, char**)
00017 {
00018 artdaq::RawEventQueue& queue(artdaq::getGlobalQueue());
00019 artdaq::RawEvent_ptr incomingEvent;
00020 std::vector<artdaq::RawEvent_ptr> receivedEvents;
00021
00022 while (1)
00023 {
00024 queue.deqWait(incomingEvent);
00025 if (incomingEvent == nullptr)
00026 {
00027 for (std::vector<artdaq::RawEvent_ptr>::iterator it = receivedEvents.begin();
00028 it != receivedEvents.end(); ++it)
00029 {
00030 queue.enqNowait(*it);
00031 }
00032
00033 queue.enqNowait(artdaq::RawEvent_ptr(0));
00034 return 0;
00035 }
00036
00037 receivedEvents.emplace_back(incomingEvent);
00038 }
00039 }
00040
00041
00042 BOOST_AUTO_TEST_CASE(Trivial)
00043 {
00044
00045
00046
00047
00048 std::unique_ptr<artdaq::EventStore> eventStore;
00049 artdaq::EventStore::ART_CMDLINE_FCN* bogusReader = &bogusApp;
00050 fhicl::ParameterSet pset;
00051 eventStore.reset(new artdaq::EventStore(pset, 4, 1, 0, nullptr, bogusReader));
00052
00053 int sequenceID[8] = {1, 2, 1, 2, 1, 2, 2, 1};
00054 int fragmentID[8] = {1, 2, 3, 4, 1, 2, 3, 4};
00055 std::unique_ptr<artdaq::Fragment> testFragment;
00056 for (int i = 0; i < 8; i++)
00057 {
00058 testFragment.reset(new artdaq::Fragment(sequenceID[i], fragmentID[i]));
00059 eventStore->insert(std::move(testFragment));
00060 }
00061 int readerReturnValue;
00062 eventStore->endOfData(readerReturnValue);
00063
00064 artdaq::RawEventQueue& queue(artdaq::getGlobalQueue());
00065
00066 artdaq::RawEvent_ptr r1;
00067 artdaq::RawEvent_ptr r2;
00068 artdaq::RawEvent_ptr r3;
00069 artdaq::RawEvent_ptr r4;
00070
00071 BOOST_REQUIRE_EQUAL(queue.deqNowait(r1), true);
00072 BOOST_REQUIRE_EQUAL(queue.deqNowait(r2), true);
00073 BOOST_REQUIRE_EQUAL(queue.deqNowait(r3), true);
00074 BOOST_REQUIRE_EQUAL(queue.deqNowait(r4), false);
00075
00076 BOOST_REQUIRE_EQUAL(r1->numFragments(), (size_t) 4);
00077 BOOST_REQUIRE_EQUAL(r2->numFragments(), (size_t) 4);
00078 }
00079
00080 BOOST_AUTO_TEST_CASE(SequenceMod)
00081 {
00082
00083
00084
00085 std::unique_ptr<artdaq::EventStore> eventStore;
00086 artdaq::EventStore::ART_CMDLINE_FCN* bogusReader = &bogusApp;
00087 fhicl::ParameterSet pset;
00088 eventStore.reset(new artdaq::EventStore(pset, 4, 1, 0, nullptr, bogusReader));
00089 eventStore->setSeqIDModulus(4);
00090
00091 int sequenceID[8] = {1, 5, 4, 6, 7, 2, 8, 3};
00092 int fragmentID[8] = {1, 2, 3, 4, 1, 2, 3, 4};
00093 std::unique_ptr<artdaq::Fragment> testFragment;
00094 for (int i = 0; i < 8; i++)
00095 {
00096 testFragment.reset(new artdaq::Fragment(sequenceID[i], fragmentID[i]));
00097 eventStore->insert(std::move(testFragment));
00098 }
00099 int readerReturnValue;
00100 eventStore->endOfData(readerReturnValue);
00101
00102 artdaq::RawEventQueue& queue(artdaq::getGlobalQueue());
00103
00104 artdaq::RawEvent_ptr r1;
00105 artdaq::RawEvent_ptr r2;
00106 artdaq::RawEvent_ptr r3;
00107 artdaq::RawEvent_ptr r4;
00108
00109 BOOST_REQUIRE_EQUAL(queue.deqNowait(r1), true);
00110 BOOST_REQUIRE_EQUAL(queue.deqNowait(r2), true);
00111 BOOST_REQUIRE_EQUAL(queue.deqNowait(r3), true);
00112 BOOST_REQUIRE_EQUAL(queue.deqNowait(r4), false);
00113
00114 BOOST_REQUIRE_EQUAL(r1->numFragments(), (size_t) 4);
00115 BOOST_REQUIRE_EQUAL(r2->numFragments(), (size_t) 4);
00116
00117
00118
00119
00120 std::unique_ptr<std::vector<artdaq::Fragment>> fragments1 = r1->releaseProduct();
00121 int sequenceIDb[8] = {5, 6, 7, 8};
00122 for (int i = 0; i < 4; i++)
00123 {
00124 BOOST_REQUIRE_EQUAL(sequenceIDb[i], (int)fragments1->at(i).sequenceID());
00125 }
00126
00127 std::unique_ptr<std::vector<artdaq::Fragment>> fragments2 = r2->releaseProduct();
00128 int sequenceIDc[8] = {1, 4, 2, 3};
00129 for (int i = 0; i < 4; i++)
00130 {
00131 BOOST_REQUIRE_EQUAL(sequenceIDc[i], (int)fragments2->at(i).sequenceID());
00132 }
00133 }
00134
00135 BOOST_AUTO_TEST_SUITE_END()