diff --git a/core-writer/test/test_UdpRecvModule.cpp b/core-writer/test/test_UdpRecvModule.cpp new file mode 100644 index 0000000..bc9650d --- /dev/null +++ b/core-writer/test/test_UdpRecvModule.cpp @@ -0,0 +1,78 @@ +#include "gtest/gtest.h" +#include "UdpRecvModule.hpp" +#include "jungfrau.hpp" +#include "mock/udp.hpp" + +using namespace std; + +TEST(UdpRecvModule, basic_interaction) +{ + uint16_t udp_port(12000); + + RingBuffer ring_buffer(10); + UdpRecvModule udp_recv_module(ring_buffer); + + udp_recv_module.start_recv(udp_port, JUNGFRAU_BYTES_PER_PACKET); + + EXPECT_THROW( + udp_recv_module.start_recv(udp_port, JUNGFRAU_BYTES_PER_PACKET), + runtime_error); + + // Stop should never throw an exception. + udp_recv_module.stop_recv(); + EXPECT_NO_THROW(udp_recv_module.stop_recv()); +} + +TEST(UdpRecvModule, simple_recv) +{ + uint16_t udp_port(MOCK_UDP_PORT); + size_t n_msg(128); + + RingBuffer ring_buffer(10); + UdpRecvModule udp_recv_module(ring_buffer); + + udp_recv_module.start_recv(udp_port, JUNGFRAU_BYTES_PER_PACKET); + + this_thread::sleep_for(chrono::milliseconds(100)); + + ASSERT_TRUE(ring_buffer.is_empty()); + + auto send_socket_fd = socket(AF_INET,SOCK_DGRAM,0); + ASSERT_TRUE(send_socket_fd >= 0); + + auto server_address = get_server_address(udp_port); + + jungfrau_packet send_udp_buffer; + send_udp_buffer.framenum = 1; + send_udp_buffer.bunchid = 100; + send_udp_buffer.debug = 1000; + + for (size_t i=0; i