summaryrefslogtreecommitdiffstats
path: root/tests/HTTP
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tests/HTTP/CMakeLists.txt4
-rw-r--r--tests/HTTP/UrlClientTest.cpp105
2 files changed, 96 insertions, 13 deletions
diff --git a/tests/HTTP/CMakeLists.txt b/tests/HTTP/CMakeLists.txt
index 1e2eb356a..cb2329adc 100644
--- a/tests/HTTP/CMakeLists.txt
+++ b/tests/HTTP/CMakeLists.txt
@@ -2,6 +2,7 @@ enable_testing()
include_directories(${CMAKE_SOURCE_DIR}/src/)
include_directories(${CMAKE_SOURCE_DIR}/lib/libevent/include)
+include_directories(${CMAKE_SOURCE_DIR}/lib/polarssl/include)
add_definitions(-DTEST_GLOBALS=1)
@@ -75,6 +76,9 @@ add_test(NAME HTTPMessageParser_file-test3-2 COMMAND HTTPMessageParser_file-exe
# Test parsing the request file in 512-byte chunks (should process everything in a single call):
add_test(NAME HTTPMessageParser_file-test4-512 COMMAND HTTPMessageParser_file-exe ${CMAKE_CURRENT_SOURCE_DIR}/HTTPRequest1.data 512)
+# Test the URLClient
+add_test(NAME UrlClient-test COMMAND UrlClientTest-exe)
+
diff --git a/tests/HTTP/UrlClientTest.cpp b/tests/HTTP/UrlClientTest.cpp
index 5f70855fb..97cdc6d6e 100644
--- a/tests/HTTP/UrlClientTest.cpp
+++ b/tests/HTTP/UrlClientTest.cpp
@@ -7,6 +7,7 @@
+/** Simple callbacks that dump the events to the console and signalize a cEvent when the request is finished. */
class cCallbacks:
public cUrlClient::cCallbacks
{
@@ -14,53 +15,79 @@ public:
cCallbacks(cEvent & a_Event):
m_Event(a_Event)
{
+ LOGD("Created a cCallbacks instance at %p", reinterpret_cast<void *>(this));
}
+
+ ~cCallbacks()
+ {
+ LOGD("Deleting the cCallbacks instance at %p", reinterpret_cast<void *>(this));
+ }
+
+
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 OnTlsHandshakeCompleted() override
+ {
+ LOG("TLS handshake has completed.");
+ }
+
+
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());
+ #if 0
+ // Output the whole received data blob:
+ AString body(reinterpret_cast<const char *>(a_Data), a_Size);
+ LOG("Body part:\n%s", body.c_str());
+ #else
+ // Output only the data size, to keep the log short:
+ LOG("Body part: %u bytes", static_cast<unsigned>(a_Size));
+ #endif
}
- /** 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());
@@ -75,7 +102,7 @@ protected:
-int TestRequest1()
+static int TestRequest1()
{
LOG("Running test 1");
cEvent evtFinished;
@@ -99,7 +126,7 @@ int TestRequest1()
-int TestRequest2()
+static int TestRequest2()
{
LOG("Running test 2");
cEvent evtFinished;
@@ -121,17 +148,69 @@ int TestRequest2()
-int TestRequests()
+static int TestRequest3()
+{
+ LOG("Running test 3");
+ cEvent evtFinished;
+ cCallbacks callbacks(evtFinished);
+ AStringMap options;
+ options["MaxRedirects"] = "0";
+ auto res = cUrlClient::Get("https://github.com", callbacks, AStringMap(), AString(), options);
+ if (res.first)
+ {
+ evtFinished.Wait();
+ }
+ else
+ {
+ LOG("Immediate error: %s", res.second.c_str());
+ return 1;
+ }
+ return 0;
+}
+
+
+
+
+
+static int TestRequest4()
{
- auto res = TestRequest1();
- if (res != 0)
+ LOG("Running test 4");
+ cEvent evtFinished;
+ cCallbacks callbacks(evtFinished);
+ auto res = cUrlClient::Get("https://github.com", callbacks);
+ if (res.first)
{
- return res;
+ evtFinished.Wait();
}
- res = TestRequest2();
- if (res != 0)
+ else
{
- return res;
+ LOG("Immediate error: %s", res.second.c_str());
+ return 1;
+ }
+ return 0;
+}
+
+
+
+
+
+static int TestRequests()
+{
+ std::function<int(void)> tests[] =
+ {
+ &TestRequest1,
+ &TestRequest2,
+ &TestRequest3,
+ &TestRequest4,
+ };
+ for (const auto & test: tests)
+ {
+ LOG("%s", AString(60, '-').c_str());
+ auto res = test();
+ if (res != 0)
+ {
+ return res;
+ }
}
return 0;
}