77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
#include <Nazara/Core/Clock.hpp>
|
|
#include <Nazara/Network/Network.hpp>
|
|
#include <Nazara/Network/WebRequest.hpp>
|
|
#include <Nazara/Network/WebService.hpp>
|
|
#include <catch2/catch_test_macros.hpp>
|
|
#include <thread>
|
|
|
|
SCENARIO("WebService", "[NETWORK][WebService]")
|
|
{
|
|
std::unique_ptr<Nz::WebService> webService = Nz::Network::Instance()->InstantiateWebService();
|
|
auto WaitForRequest = [&]
|
|
{
|
|
Nz::MillisecondClock clock;
|
|
while (!webService->Poll())
|
|
{
|
|
if (clock.GetElapsedTime() >= Nz::Time::Seconds(2))
|
|
{
|
|
INFO("WebRequest timed out");
|
|
REQUIRE(false);
|
|
break;
|
|
}
|
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
|
}
|
|
};
|
|
|
|
GIVEN("When performing a GET web request")
|
|
{
|
|
std::unique_ptr<Nz::WebRequest> webRequest = webService->CreateGetRequest("https://test.digitalpulse.software", [&](const Nz::WebRequestResult& result)
|
|
{
|
|
REQUIRE(result);
|
|
CHECK(result.GetStatusCode() == 200);
|
|
CHECK(result.GetDownloadedSize() > 0);
|
|
CHECK(result.GetDownloadSpeed() > 0);
|
|
CHECK(result.GetBody() == "Hello Nazara from web!");
|
|
});
|
|
webService->QueueRequest(std::move(webRequest));
|
|
|
|
WaitForRequest();
|
|
}
|
|
|
|
GIVEN("When performing a GET web request on a non-existing URL")
|
|
{
|
|
std::unique_ptr<Nz::WebRequest> webRequest = webService->CreateGetRequest("https://test.digitalpulse.software/404", [&](const Nz::WebRequestResult& result)
|
|
{
|
|
REQUIRE(result);
|
|
CHECK(result.GetStatusCode() == 404);
|
|
CHECK(result.GetDownloadedSize() > 0);
|
|
CHECK(result.GetDownloadSpeed() > 0);
|
|
});
|
|
webService->QueueRequest(std::move(webRequest));
|
|
|
|
WaitForRequest();
|
|
}
|
|
|
|
GIVEN("When performing a POST web request")
|
|
{
|
|
std::unique_ptr<Nz::WebRequest> webRequest = webService->CreatePostRequest("https://test.digitalpulse.software/headers", [&](const Nz::WebRequestResult& result)
|
|
{
|
|
REQUIRE(result);
|
|
CHECK(result.GetStatusCode() == 200);
|
|
CHECK(result.GetDownloadedSize() > 0);
|
|
CHECK(result.GetDownloadSpeed() > 0);
|
|
|
|
INFO(result.GetBody());
|
|
CHECK(result.GetBody().find("Authorization: Lynix") != std::string::npos ||
|
|
result.GetBody().find("authorization: Lynix") != std::string::npos);
|
|
});
|
|
webRequest->SetJSonContent(R"({"value":42})");
|
|
webRequest->SetHeader("Authorization", "Lynix");
|
|
|
|
webService->QueueRequest(std::move(webRequest));
|
|
|
|
WaitForRequest();
|
|
}
|
|
}
|