From 284ce30a810559f409282ea638e5765235945d78 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Wed, 28 Nov 2018 14:45:50 +0100 Subject: [PATCH 1/2] starting tests --- CMakeLists.txt | 2 +- slsSupportLib/include/Timer.h | 22 ++++++++-------------- tests/CMakeLists.txt | 5 ++++- tests/src/test-MySocketTCP.cpp | 13 +++++++++++++ tests/src/test-container_utils.cpp | 1 - tests/src/test-multiDetector.cpp | 18 +++++++++--------- 6 files changed, 35 insertions(+), 26 deletions(-) create mode 100644 tests/src/test-MySocketTCP.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index df96ec692..5e9ef97eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ option (USE_HDF5 "HDF5 File format" OFF) option (USE_TEXTCLIENT "Text Client" OFF) option (USE_RECEIVER "Receiver" OFF) option (USE_GUI "GUI" OFF) -option (USE_TESTS "TESTS" OFF) +option (USE_TESTS "TESTS" ON) if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=c++11 -Wno-misleading-indentation") diff --git a/slsSupportLib/include/Timer.h b/slsSupportLib/include/Timer.h index a16761081..70b339b5b 100644 --- a/slsSupportLib/include/Timer.h +++ b/slsSupportLib/include/Timer.h @@ -5,34 +5,28 @@ #include class Timer { - using clock = std::chrono::high_resolution_clock; + using clock = std::chrono::high_resolution_clock; using time_point = std::chrono::time_point; -public: + public: Timer(std::string name = "0") - : t0(clock::now()) - , name_(name) - { + : t0(clock::now()), name_(name) { } - double elapsed_ms() - { + double elapsed_ms() { return std::chrono::duration(clock::now() - t0).count(); } - double elapsed_s() - { + double elapsed_s() { return std::chrono::duration(clock::now() - t0).count(); } - void print_elapsed() - { + void print_elapsed() { std::cout << "Timer \"" << name_ << "\": Elapsed time " << elapsed_ms() << " ms\n"; } - void restart() - { + void restart() { t0 = clock::now(); } -private: + private: time_point t0; std::string name_; }; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a75a89e5a..75559566f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,6 +7,7 @@ include_directories( ${PROJECT_SOURCE_DIR}/catch ${PROJECT_SOURCE_DIR}/slsSupportLib/include ${PROJECT_SOURCE_DIR}/slsDetectorSoftware/multiSlsDetector + ${PROJECT_SOURCE_DIR}/slsDetectorSoftware/sharedMemory ) @@ -15,7 +16,8 @@ if(USE_TESTS) set(LOCAL_TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) set(TEST_SOURCES ${LOCAL_TEST_DIR}/test-container_utils.cpp - ${LOCAL_TEST_DIR}/test-multiDetector.cpp + ${LOCAL_TEST_DIR}/test-MySocketTCP.cpp + #${LOCAL_TEST_DIR}/test-multiDetector.cpp ${LOCAL_TEST_DIR}/test.cpp # PARENT_SCOPE ) @@ -23,6 +25,7 @@ if(USE_TESTS) target_link_libraries(test slsDetectorShared pthread + rt ) set_target_properties(test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin diff --git a/tests/src/test-MySocketTCP.cpp b/tests/src/test-MySocketTCP.cpp new file mode 100644 index 000000000..550775fa7 --- /dev/null +++ b/tests/src/test-MySocketTCP.cpp @@ -0,0 +1,13 @@ +#include "catch.hpp" +#include "MySocketTCP.h" +// #include "multiSlsDetector.h" +#include +TEST_CASE("Construct") { + + +// MySocketTCP(const char* const host_ip_or_name, unsigned short int const port_number): genericSocket(host_ip_or_name, port_number,TCP){setPacketSize(TCP_PACKET_SIZE);}; // sender (client): where to? ip + unsigned short int const port_number = 1966; + auto receiver = MySocketTCP(port_number); + REQUIRE(false); + +} \ No newline at end of file diff --git a/tests/src/test-container_utils.cpp b/tests/src/test-container_utils.cpp index 10c8c8b9a..4f1704319 100644 --- a/tests/src/test-container_utils.cpp +++ b/tests/src/test-container_utils.cpp @@ -7,7 +7,6 @@ using sls::allEqual; using sls::allEqualTo; using sls::anyEqualTo; - using sls::allEqualToWithTol; using sls::allEqualWithTol; using sls::anyEqualToWithTol; diff --git a/tests/src/test-multiDetector.cpp b/tests/src/test-multiDetector.cpp index 3131b6462..ca16cae56 100644 --- a/tests/src/test-multiDetector.cpp +++ b/tests/src/test-multiDetector.cpp @@ -1,11 +1,11 @@ -#include "catch.hpp" -#include "multiSlsDetector.h" +// #include "catch.hpp" +// #include "multiSlsDetector.h" -#include -TEST_CASE("Initialize a detector") { -multiSlsDetector det(0, true, true); - std::cout << "Size: " << det.getNumberOfDetectors() << std::endl; - std::cout << "Hostname: " << det.getHostname() << std::endl; - REQUIRE(false); +// #include +// TEST_CASE("Initialize a detector") { +// multiSlsDetector det(0, true, true); +// std::cout << "Size: " << det.getNumberOfDetectors() << std::endl; +// std::cout << "Hostname: " << det.getHostname() << std::endl; +// REQUIRE(false); -} \ No newline at end of file +// } \ No newline at end of file From d0665ce0752d2457c466a5adee261ef8b55a9be7 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Thu, 29 Nov 2018 12:21:02 +0100 Subject: [PATCH 2/2] tests for socket --- tests/src/test-MySocketTCP.cpp | 87 +++++++++++++++++++++++++++++++--- 1 file changed, 80 insertions(+), 7 deletions(-) diff --git a/tests/src/test-MySocketTCP.cpp b/tests/src/test-MySocketTCP.cpp index 550775fa7..8a8716178 100644 --- a/tests/src/test-MySocketTCP.cpp +++ b/tests/src/test-MySocketTCP.cpp @@ -1,13 +1,86 @@ -#include "catch.hpp" #include "MySocketTCP.h" +#include "catch.hpp" // #include "multiSlsDetector.h" +#include "logger.h" #include -TEST_CASE("Construct") { +#include +#define VERBOSE -// MySocketTCP(const char* const host_ip_or_name, unsigned short int const port_number): genericSocket(host_ip_or_name, port_number,TCP){setPacketSize(TCP_PACKET_SIZE);}; // sender (client): where to? ip - unsigned short int const port_number = 1966; - auto receiver = MySocketTCP(port_number); - REQUIRE(false); - +TEST_CASE("Sending and receiving data with two sockets") { + + const int port_number{1966}; //TODO! Avoid hardcoded port number!!! + auto sender = MySocketTCP("localhost", port_number); + auto receiver = MySocketTCP(port_number); + + auto s = sender.Connect(); + auto r = receiver.Connect(); + + REQUIRE(s > 0); + REQUIRE(r > 0); + REQUIRE(sender.getPortNumber() == port_number); + REQUIRE(receiver.getPortNumber() == port_number); + + std::vector message_to_send{'H', 'e', 'l', 'l', 'o'}; + std::vector received_message(message_to_send.size()); + + auto sent = sender.SendDataOnly(message_to_send.data(), message_to_send.size()); + auto received = receiver.ReceiveDataOnly(received_message.data(), message_to_send.size()); + REQUIRE(sent == message_to_send.size()); + REQUIRE(received == received_message.size()); + REQUIRE(sent == received); + REQUIRE(message_to_send == received_message); + + receiver.CloseServerTCPSocketDescriptor(); + receiver.Disconnect(); + sender.Disconnect(); + + REQUIRE(receiver.getsocketDescriptor() == -1); + REQUIRE(receiver.getFileDes() == -1); + REQUIRE(sender.getFileDes() == -1); +} + +TEST_CASE("Open two sockets on the same port fails and throws") { + const int port_number{1966}; + auto server = MySocketTCP(port_number); + CHECK_THROWS(MySocketTCP(port_number)); +} + +// TEST_CASE("Conversions"){ + +// std::cout << "name " << MySocketTCP::nameToMac("enp10s0u1u3u3") << '\n'; + +// } + +TEST_CASE("Have two clients connect to the same server") { + const int port_number{1966}; + + auto server = MySocketTCP(port_number); + + auto client1 = MySocketTCP("localhost", port_number); + auto client2 = MySocketTCP("localhost", port_number); + client1.SetTimeOut(1); + client2.SetTimeOut(1); + server.SetTimeOut(1); + auto fd1 = client1.Connect(); + + auto fd2 = client2.Connect(); + server.Connect(); + + REQUIRE(fd1 > 0); + REQUIRE(fd2 > 0); + + std::cout << "fd1 " << fd1 << '\n'; + std::cout << "fd2 " << fd2 << '\n'; + + std::vector message_to_send{'H', 'e', 'l', 'l', 'o'}; + std::vector received_message(message_to_send.size()); + + client1.SendDataOnly(message_to_send.data(), message_to_send.size()); + auto n1 = server.ReceiveDataOnly(received_message.data(), received_message.size()); + std::cout << "n1 " << n1 << '\n'; + + client2.SendDataOnly(message_to_send.data(), message_to_send.size()); + auto n2 = server.ReceiveDataOnly(received_message.data(), received_message.size()); + std::cout << "n2 " << n2 << '\n'; } \ No newline at end of file