diff options
author | Tycho <work.tycho+git@gmail.com> | 2015-01-09 15:07:59 +0100 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2015-01-22 20:12:42 +0100 |
commit | a9b8a530b1e082d2ab108947ef28e0a58c8fd838 (patch) | |
tree | 583a1b13642b8f0bd39afe9d313effa8435446a9 | |
parent | cNetwork: Linux compilation fix. (diff) | |
download | cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.tar cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.tar.gz cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.tar.bz2 cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.tar.lz cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.tar.xz cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.tar.zst cuberite-a9b8a530b1e082d2ab108947ef28e0a58c8fd838.zip |
-rw-r--r-- | src/Globals.h | 10 | ||||
-rw-r--r-- | src/OSSupport/Network.cpp | 77 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/Network/CMakeLists.txt | 14 | ||||
-rw-r--r-- | tests/Network/Google.cpp | 85 |
5 files changed, 113 insertions, 74 deletions
diff --git a/src/Globals.h b/src/Globals.h index f0726454b..51ddc4e79 100644 --- a/src/Globals.h +++ b/src/Globals.h @@ -298,6 +298,16 @@ void inline LOGD(const char* a_Format, ...) va_end(argList); } +void inline LOG(const char* a_Format, ...) FORMATSTRING(1, 2); + +void inline LOG(const char* a_Format, ...) +{ + va_list argList; + va_start(argList, a_Format); + vprintf(a_Format, argList); + va_end(argList); +} + #endif diff --git a/src/OSSupport/Network.cpp b/src/OSSupport/Network.cpp index 0e19e40de..0f532624d 100644 --- a/src/OSSupport/Network.cpp +++ b/src/OSSupport/Network.cpp @@ -5,12 +5,13 @@ #include "Globals.h" #include "Network.h" +#include "Event.h" #include <event2/event.h> #include <event2/thread.h> #include <event2/bufferevent.h> #include <event2/dns.h> - +#include <thread> @@ -20,38 +21,6 @@ class cNetworkTest { public: - /** cTCPLink callbacks that dump everything it received to the log. */ - class cDumpCallbacks: - public cTCPLink::cCallbacks - { - cEvent & m_Event; - - virtual void OnReceivedData(cTCPLink & a_Link, const char * a_Data, size_t a_Size) override - { - // Log the incoming data size: - AString Hex; - CreateHexDump(Hex, a_Data, a_Size, 16); - LOGD("Incoming data: %u bytes:\n%s", static_cast<unsigned>(a_Size), Hex.c_str()); - } - - virtual void OnRemoteClosed(cTCPLink & a_Link) override - { - LOGD("Remote has closed the connection."); - m_Event.Set(); - } - - virtual void OnError(cTCPLink & a_Link, int a_ErrorCode) override - { - LOGD("Error in the cDumpCallbacks."); - m_Event.Set(); - } - - public: - cDumpCallbacks(cEvent & a_Event): - m_Event(a_Event) - { - } - }; /** cTCPLink callbacks that echo everything they receive back to the remote peer. */ @@ -114,36 +83,6 @@ public: } }; - - /** Connect callbacks that send a HTTP GET request for google.com when connected. */ - class cHTTPConnectCallbacks: - public cNetwork::cConnectCallbacks - { - cEvent & m_Event; - virtual void OnSuccess(cTCPLink & a_Link) override - { - LOGD("Connected, sending HTTP GET"); - if (!a_Link.Send("GET / HTTP/1.0\r\nHost:google.com\r\n\r\n")) - { - LOGWARNING("Sending HTTP GET failed"); - } - LOGD("HTTP GET queued."); - } - - virtual void OnError(int a_ErrorCode) override - { - LOGD("Error while connecting HTTP: %d", a_ErrorCode); - m_Event.Set(); - } - - public: - cHTTPConnectCallbacks(cEvent & a_Event): - m_Event(a_Event) - { - } - }; - - /** Listen callbacks that send a simple welcome message to all connecting peers. */ class cListenCallbacks: public cNetwork::cListenCallbacks @@ -157,15 +96,6 @@ public: cNetworkTest(void) { - cEvent evtFinish; - - LOGD("Network test: Connecting to google.com:80, reading front page via HTTP."); - if (!cNetwork::Connect("google.com", 80, std::make_shared<cHTTPConnectCallbacks>(evtFinish), std::make_shared<cDumpCallbacks>(evtFinish))) - { - LOGWARNING("Cannot queue connection to google.com"); - abort(); - } - LOGD("Connect request has been queued."); /* LOGD("Creating a server on port 33033"); @@ -182,8 +112,7 @@ public: Server->Close(); */ - evtFinish.Wait(); - LOGD("Network test finished"); + } } g_NetworkTest; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1fbd88f04..265640cc8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -5,3 +5,4 @@ enable_testing() include_directories(${CMAKE_CURRENT_SOURCE_DIR}) add_subdirectory(ChunkData) +add_subdirectory(Network) diff --git a/tests/Network/CMakeLists.txt b/tests/Network/CMakeLists.txt new file mode 100644 index 000000000..8aae84590 --- /dev/null +++ b/tests/Network/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required (VERSION 2.6) + +enable_testing() + +include_directories(${CMAKE_SOURCE_DIR}/src/) +include_directories(${CMAKE_SOURCE_DIR}/lib/libevent/include) + +add_definitions(-DTEST_GLOBALS=1) +add_library(Network ${CMAKE_SOURCE_DIR}/src/OSSupport/Network.cpp ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.cpp ${CMAKE_SOURCE_DIR}/src/StringUtils.cpp) +target_link_libraries(Network event_core event_extra) + +add_executable(Google-exe Google.cpp) +target_link_libraries(Google-exe Network) +add_test(NAME Google-test COMMAND Google-exe) diff --git a/tests/Network/Google.cpp b/tests/Network/Google.cpp new file mode 100644 index 000000000..0aa52d025 --- /dev/null +++ b/tests/Network/Google.cpp @@ -0,0 +1,85 @@ + +#include "Globals.h" + +#include <thread> +#include "OSSupport/Event.h" + +#include "OSSupport/Network.h" + +/** Connect callbacks that send a HTTP GET request for google.com when connected. */ +class cHTTPConnectCallbacks: + public cNetwork::cConnectCallbacks +{ + cEvent & m_Event; + virtual void OnSuccess(cTCPLink & a_Link) override + { + LOGD("Connected, sending HTTP GET"); + if (!a_Link.Send("GET / HTTP/1.0\r\nHost:google.com\r\n\r\n")) + { + LOGWARNING("Sending HTTP GET failed"); + } + LOGD("HTTP GET queued."); + } + + virtual void OnError(int a_ErrorCode) override + { + LOGD("Error while connecting HTTP: %d", a_ErrorCode); + m_Event.Set(); + } + +public: + cHTTPConnectCallbacks(cEvent & a_Event): + m_Event(a_Event) + { + } +}; + + +/** cTCPLink callbacks that dump everything it received to the log. */ +class cDumpCallbacks: + public cTCPLink::cCallbacks +{ + cEvent & m_Event; + + virtual void OnReceivedData(cTCPLink & a_Link, const char * a_Data, size_t a_Size) override + { + // Log the incoming data size: + AString Hex; + CreateHexDump(Hex, a_Data, a_Size, 16); + LOGD("Incoming data: %u bytes:\n%s", static_cast<unsigned>(a_Size), Hex.c_str()); + } + + virtual void OnRemoteClosed(cTCPLink & a_Link) override + { + LOGD("Remote has closed the connection."); + m_Event.Set(); + } + + virtual void OnError(cTCPLink & a_Link, int a_ErrorCode) override + { + LOGD("Error in the cDumpCallbacks."); + m_Event.Set(); + } + +public: + cDumpCallbacks(cEvent & a_Event): + m_Event(a_Event) + { + } +}; + + +int main() { + cEvent evtFinish; + + LOGD("Network test: Connecting to google.com:80, reading front page via HTTP."); + if (!cNetwork::Connect("google.com", 80, std::make_shared<cHTTPConnectCallbacks>(evtFinish), std::make_shared<cDumpCallbacks>(evtFinish))) + { + LOGWARNING("Cannot queue connection to google.com"); + abort(); + } + LOGD("Connect request has been queued."); + + evtFinish.Wait(); + LOGD("Network test finished"); +} |