diff --git a/core-buffer/test/test_BufferUdpReceiver.cpp b/core-buffer/test/test_BufferUdpReceiver.cpp index 8023dd2..468b7b3 100644 --- a/core-buffer/test/test_BufferUdpReceiver.cpp +++ b/core-buffer/test/test_BufferUdpReceiver.cpp @@ -60,3 +60,177 @@ TEST(BufferUdpReceiver, simple_recv) ::close(send_socket_fd); } + +TEST(BufferUdpReceiver, missing_middle_packet) +{ + auto n_packets = JUNGFRAU_N_PACKETS_PER_FRAME; + int source_id = 1234; + int n_frames = 3; + + uint16_t udp_port = MOCK_UDP_PORT; + auto server_address = get_server_address(udp_port); + auto send_socket_fd = socket(AF_INET, SOCK_DGRAM, 0); + ASSERT_TRUE(send_socket_fd >= 0); + + BufferUdpReceiver udp_receiver(udp_port, source_id); + + auto handle = async(launch::async, [&](){ + for (int i_frame=0; i_frame < n_frames; i_frame++){ + for (size_t i_packet=0; i_packet(JUNGFRAU_DATA_BYTES_PER_FRAME); + + for (int i_frame=0; i_frame < n_frames; i_frame++) { + auto pulse_id = udp_receiver.get_frame_from_udp( + metadata, frame_buffer.get()); + + ASSERT_EQ(i_frame, pulse_id); + ASSERT_EQ(metadata.frame_index, i_frame + 1000); + ASSERT_EQ(metadata.daq_rec, i_frame + 10000); + // -1 because we skipped a packet. + ASSERT_EQ(metadata.n_received_packets, n_packets-1); + ASSERT_EQ(metadata.module_id, source_id); + } + + ::close(send_socket_fd); +} + +TEST(BufferUdpReceiver, missing_first_packet) +{ + auto n_packets = JUNGFRAU_N_PACKETS_PER_FRAME; + int source_id = 1234; + int n_frames = 3; + + uint16_t udp_port = MOCK_UDP_PORT; + auto server_address = get_server_address(udp_port); + auto send_socket_fd = socket(AF_INET, SOCK_DGRAM, 0); + ASSERT_TRUE(send_socket_fd >= 0); + + BufferUdpReceiver udp_receiver(udp_port, source_id); + + auto handle = async(launch::async, [&](){ + for (int i_frame=0; i_frame < n_frames; i_frame++){ + for (size_t i_packet=0; i_packet(JUNGFRAU_DATA_BYTES_PER_FRAME); + + for (int i_frame=0; i_frame < n_frames; i_frame++) { + auto pulse_id = udp_receiver.get_frame_from_udp( + metadata, frame_buffer.get()); + + ASSERT_EQ(i_frame, pulse_id); + ASSERT_EQ(metadata.frame_index, i_frame + 1000); + ASSERT_EQ(metadata.daq_rec, i_frame + 10000); + // -1 because we skipped a packet. + ASSERT_EQ(metadata.n_received_packets, n_packets-1); + ASSERT_EQ(metadata.module_id, source_id); + } + + ::close(send_socket_fd); +} + +TEST(BufferUdpReceiver, missing_last_packet) +{ + auto n_packets = JUNGFRAU_N_PACKETS_PER_FRAME; + int source_id = 1234; + int n_frames = 3; + + uint16_t udp_port = MOCK_UDP_PORT; + auto server_address = get_server_address(udp_port); + auto send_socket_fd = socket(AF_INET, SOCK_DGRAM, 0); + ASSERT_TRUE(send_socket_fd >= 0); + + BufferUdpReceiver udp_receiver(udp_port, source_id); + + auto handle = async(launch::async, [&](){ + for (int i_frame=0; i_frame < n_frames; i_frame++){ + for (size_t i_packet=0; i_packet(JUNGFRAU_DATA_BYTES_PER_FRAME); + + for (int i_frame=0; i_frame < n_frames; i_frame++) { + auto pulse_id = udp_receiver.get_frame_from_udp( + metadata, frame_buffer.get()); + + ASSERT_EQ(i_frame, pulse_id); + ASSERT_EQ(metadata.frame_index, i_frame + 1000); + ASSERT_EQ(metadata.daq_rec, i_frame + 10000); + // -1 because we skipped a packet. + ASSERT_EQ(metadata.n_received_packets, n_packets-1); + ASSERT_EQ(metadata.module_id, source_id); + } + + ::close(send_socket_fd); +} \ No newline at end of file