// Copyright (2019-2022) Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-or-later #include #include "../receiver/host/ProcessRawPacket.h" #include "../receiver/host/RawJFUDPPacket.h" #include "../common/DiffractionExperiment.h" TEST_CASE("ProcessRawPacketTest_Empty") { ThreadSafeFIFO c_fifo; ThreadSafeFIFO wr_fifo; { ProcessRawPacket process(c_fifo, wr_fifo, 2); } REQUIRE(c_fifo.Size() == 0); } TEST_CASE("ProcessRawPacketTest") { ThreadSafeFIFO c_fifo; ThreadSafeFIFO wr_fifo; std::vector array_0(RAW_MODULE_SIZE), array_1(RAW_MODULE_SIZE), array_2(RAW_MODULE_SIZE); wr_fifo.Put(ProcessWorkRequest{.ptr = array_0.data(), .handle = 0}); wr_fifo.Put(ProcessWorkRequest{.ptr = array_1.data(), .handle = 1}); wr_fifo.Put(ProcessWorkRequest{.ptr = array_2.data(), .handle = 2}); DiffractionExperiment experiment(2, {4,4}); { ProcessRawPacket process(c_fifo, wr_fifo, 4); RawJFUDPacket packet; packet.ipv4_header_sour_ip = experiment.GetSrcIPv4Address(0, 4); packet.packetnum = 36; packet.framenum = 1; packet.bunchid = 84; packet.data[0] = 6789; process.ProcessPacket(&packet, sizeof(RawJFUDPacket)); packet.ipv4_header_sour_ip = experiment.GetSrcIPv4Address(0, 5); packet.packetnum = 36; packet.framenum = 2; packet.bunchid = 84; packet.data[0] = 6345; process.ProcessPacket(&packet, sizeof(RawJFUDPacket)); packet.ipv4_header_sour_ip = experiment.GetSrcIPv4Address(1, 7); // using different data stream => should not cause issues here packet.packetnum = 16; packet.framenum = 3; packet.bunchid = 84; packet.data[0] = 6346; process.ProcessPacket(&packet, sizeof(RawJFUDPacket)); } REQUIRE(c_fifo.Size() == 3); Completion c; REQUIRE(c_fifo.Get(c)); CHECK(c.module == 2); CHECK(c.bunchid == 84); CHECK(c.frame_number == 0); CHECK(c.packet_count == 1); CHECK(c.packet_mask[0] == (1LU << 36)); CHECK(c.packet_mask[1] == 0); REQUIRE(c_fifo.Get(c)); CHECK(c.module == 2); CHECK(c.bunchid == 84); CHECK(c.frame_number == 1); CHECK(c.packet_count == 1); CHECK(c.packet_mask[0] == 0); CHECK(c.packet_mask[1] == (1LU << 36)); REQUIRE(c_fifo.Get(c)); CHECK(c.module == 3); CHECK(c.bunchid == 84); CHECK(c.frame_number == 2); CHECK(c.packet_count == 1); CHECK(c.packet_mask[0] == 0); CHECK(c.packet_mask[1] == (1LU << 16)); CHECK(array_0[4096*36] == 6789); CHECK(array_1[4096*(36+64)] == 6345); CHECK(array_2[4096*(16+64)] == 6346); }