summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/HTTP/CMakeLists.txt26
-rw-r--r--tests/HTTP/UrlClientTest.cpp162
2 files changed, 185 insertions, 3 deletions
diff --git a/tests/HTTP/CMakeLists.txt b/tests/HTTP/CMakeLists.txt
index ed5c9daaf..1e2eb356a 100644
--- a/tests/HTTP/CMakeLists.txt
+++ b/tests/HTTP/CMakeLists.txt
@@ -11,6 +11,8 @@ set (HTTP_SRCS
${CMAKE_SOURCE_DIR}/src/HTTP/HTTPMessage.cpp
${CMAKE_SOURCE_DIR}/src/HTTP/HTTPMessageParser.cpp
${CMAKE_SOURCE_DIR}/src/HTTP/TransferEncodingParser.cpp
+ ${CMAKE_SOURCE_DIR}/src/HTTP/UrlClient.cpp
+ ${CMAKE_SOURCE_DIR}/src/HTTP/UrlParser.cpp
${CMAKE_SOURCE_DIR}/src/StringUtils.cpp
)
@@ -19,13 +21,20 @@ set (HTTP_HDRS
${CMAKE_SOURCE_DIR}/src/HTTP/HTTPMessage.h
${CMAKE_SOURCE_DIR}/src/HTTP/HTTPMessageParser.h
${CMAKE_SOURCE_DIR}/src/HTTP/TransferEncodingParser.h
+ ${CMAKE_SOURCE_DIR}/src/HTTP/UrlClient.h
+ ${CMAKE_SOURCE_DIR}/src/HTTP/UrlParser.h
${CMAKE_SOURCE_DIR}/src/StringUtils.h
)
+set (SHARED_SRCS
+ ${CMAKE_SOURCE_DIR}/src/OSSupport/Event.cpp
+)
+
add_library(HTTP
${HTTP_SRCS}
${HTTP_HDRS}
)
+target_link_libraries(HTTP Network OSSupport)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
add_flags_cxx("-Wno-error=conversion -Wno-error=old-style-cast")
@@ -35,11 +44,21 @@ endif()
-# Define individual tests:
+# Define individual test executables:
# HTTPMessageParser_file: Feed file contents into a cHTTPResponseParser and print the callbacks as they're called:
add_executable(HTTPMessageParser_file-exe HTTPMessageParser_file.cpp)
-target_link_libraries(HTTPMessageParser_file-exe HTTP)
+target_link_libraries(HTTPMessageParser_file-exe HTTP Network OSSupport)
+
+# UrlClientTest: Tests the UrlClient class by requesting a few things off the internet:
+add_executable(UrlClientTest-exe UrlClientTest.cpp)
+target_link_libraries(UrlClientTest-exe HTTP)
+
+
+
+
+
+# Define individual tests:
# Test parsing the response file in 2-byte chunks (should go from response line parsing through headers parsing to body parsing, each within a different step):
add_test(NAME HTTPMessageParser_file-test1-2 COMMAND HTTPMessageParser_file-exe ${CMAKE_CURRENT_SOURCE_DIR}/HTTPResponse1.data 2)
@@ -63,7 +82,8 @@ add_test(NAME HTTPMessageParser_file-test4-512 COMMAND HTTPMessageParser_file-ex
# Put all the tests into a solution folder (MSVC):
set_target_properties(
HTTPMessageParser_file-exe
- PROPERTIES FOLDER Tests
+ UrlClientTest-exe
+ PROPERTIES FOLDER Tests/HTTP
)
set_target_properties(
HTTP
diff --git a/tests/HTTP/UrlClientTest.cpp b/tests/HTTP/UrlClientTest.cpp
new file mode 100644
index 000000000..5f70855fb
--- /dev/null
+++ b/tests/HTTP/UrlClientTest.cpp
@@ -0,0 +1,162 @@
+
+#include "Globals.h"
+#include "HTTP/UrlClient.h"
+#include "OSSupport/NetworkSingleton.h"
+
+
+
+
+
+class cCallbacks:
+ public cUrlClient::cCallbacks
+{
+public:
+ cCallbacks(cEvent & a_Event):
+ m_Event(a_Event)
+ {
+ }
+
+ virtual void OnConnected(cTCPLink & a_Link) override
+ {
+ LOG("Link connected to %s:%u", a_Link.GetRemoteIP().c_str(), a_Link.GetRemotePort());
+ }
+
+ virtual bool OnCertificateReceived() override
+ {
+ LOG("Server certificate received");
+ return true;
+ }
+
+ virtual void OnRequestSent() override
+ {
+ LOG("Request has been sent");
+ }
+
+ virtual void OnHeader(const AString & a_Key, const AString & a_Value) override
+ {
+ LOG("HTTP Header: \"%s\" -> \"%s\"", a_Key.c_str(), a_Value.c_str());
+ }
+
+ virtual void OnHeadersFinished() override
+ {
+ LOG("HTTP headers finished.");
+ }
+
+ virtual void OnBodyData(const void * a_Data, size_t a_Size) override
+ {
+ AString body(reinterpret_cast<const char *>(a_Data), a_Size);
+ LOG("Body part:\n%s", body.c_str());
+ }
+
+ /** Called after the response body has been fully reported by OnBody() calls.
+ There will be no more OnBody() calls. */
+ virtual void OnBodyFinished() override
+ {
+ LOG("Body finished.");
+ m_Event.Set();
+ }
+
+ virtual void OnRedirecting(const AString & a_RedirectUrl) override
+ {
+ LOG("Redirecting to \"%s\".", a_RedirectUrl.c_str());
+ }
+
+ virtual void OnError(const AString & a_ErrorMsg) override
+ {
+ LOG("Error: %s", a_ErrorMsg.c_str());
+ m_Event.Set();
+ }
+
+protected:
+ cEvent & m_Event;
+};
+
+
+
+
+
+int TestRequest1()
+{
+ LOG("Running test 1");
+ cEvent evtFinished;
+ cCallbacks callbacks(evtFinished);
+ AStringMap options;
+ options["MaxRedirects"] = "0";
+ auto res = cUrlClient::Get("http://github.com", callbacks, AStringMap(), AString(), options);
+ if (res.first)
+ {
+ evtFinished.Wait();
+ }
+ else
+ {
+ LOG("Immediate error: %s", res.second.c_str());
+ return 1;
+ }
+ return 0;
+}
+
+
+
+
+
+int TestRequest2()
+{
+ LOG("Running test 2");
+ cEvent evtFinished;
+ cCallbacks callbacks(evtFinished);
+ auto res = cUrlClient::Get("http://github.com", callbacks);
+ if (res.first)
+ {
+ evtFinished.Wait();
+ }
+ else
+ {
+ LOG("Immediate error: %s", res.second.c_str());
+ return 1;
+ }
+ return 0;
+}
+
+
+
+
+
+int TestRequests()
+{
+ auto res = TestRequest1();
+ if (res != 0)
+ {
+ return res;
+ }
+ res = TestRequest2();
+ if (res != 0)
+ {
+ return res;
+ }
+ return 0;
+}
+
+
+
+
+
+int main()
+{
+ LOGD("Test started");
+
+ LOGD("Initializing cNetwork...");
+ cNetworkSingleton::Get().Initialise();
+
+ LOGD("Testing...");
+ auto res = TestRequests();
+
+ LOGD("Terminating cNetwork...");
+ cNetworkSingleton::Get().Terminate();
+ LOGD("cUrlClient test finished");
+
+ return res;
+}
+
+
+
+