diff options
Diffstat (limited to 'src/zenhttp/httpclient.cpp')
| -rw-r--r-- | src/zenhttp/httpclient.cpp | 111 |
1 files changed, 79 insertions, 32 deletions
diff --git a/src/zenhttp/httpclient.cpp b/src/zenhttp/httpclient.cpp index 13c86e9ae..ace7a3c7f 100644 --- a/src/zenhttp/httpclient.cpp +++ b/src/zenhttp/httpclient.cpp @@ -36,12 +36,6 @@ namespace zen { -#if ZEN_WITH_CPR -extern HttpClientBase* CreateCprHttpClient(std::string_view BaseUri, - const HttpClientSettings& ConnectionSettings, - std::function<bool()>&& CheckIfAbortFunction); -#endif - extern HttpClientBase* CreateCurlHttpClient(std::string_view BaseUri, const HttpClientSettings& ConnectionSettings, std::function<bool()>&& CheckIfAbortFunction); @@ -57,14 +51,7 @@ SetDefaultHttpClientBackend(HttpClientBackend Backend) void SetDefaultHttpClientBackend(std::string_view Backend) { -#if ZEN_WITH_CPR - if (Backend == "cpr") - { - g_DefaultHttpClientBackend = HttpClientBackend::kCpr; - } - else -#endif - if (Backend == "curl") + if (Backend == "curl") { g_DefaultHttpClientBackend = HttpClientBackend::kCurl; } @@ -378,22 +365,7 @@ HttpClient::HttpClient(std::string_view BaseUri, const HttpClientSettings& Conne , m_ConnectionSettings(ConnectionSettings) { m_SessionId = GetSessionIdString(); - - HttpClientBackend EffectiveBackend = - ConnectionSettings.Backend != HttpClientBackend::kDefault ? ConnectionSettings.Backend : g_DefaultHttpClientBackend; - - switch (EffectiveBackend) - { -#if ZEN_WITH_CPR - case HttpClientBackend::kCpr: - m_Inner = CreateCprHttpClient(BaseUri, ConnectionSettings, std::move(CheckIfAbortFunction)); - break; -#endif - case HttpClientBackend::kCurl: - default: - m_Inner = CreateCurlHttpClient(BaseUri, ConnectionSettings, std::move(CheckIfAbortFunction)); - break; - } + m_Inner = CreateCurlHttpClient(BaseUri, ConnectionSettings, std::move(CheckIfAbortFunction)); } HttpClient::~HttpClient() @@ -402,6 +374,13 @@ HttpClient::~HttpClient() } void +HttpClient::SetBaseUri(std::string_view NewBaseUri) +{ + m_BaseUri = NewBaseUri; + m_Inner->SetBaseUri(NewBaseUri); +} + +void HttpClient::SetSessionId(const Oid& SessionId) { if (SessionId == Oid::Zero) @@ -415,9 +394,12 @@ HttpClient::SetSessionId(const Oid& SessionId) } HttpClient::Response -HttpClient::Put(std::string_view Url, const IoBuffer& Payload, const HttpClient::KeyValueMap& AdditionalHeader) +HttpClient::Put(std::string_view Url, + const IoBuffer& Payload, + const HttpClient::KeyValueMap& AdditionalHeader, + const HttpClient::KeyValueMap& Parameters) { - return m_Inner->Put(Url, Payload, AdditionalHeader); + return m_Inner->Put(Url, Payload, AdditionalHeader, Parameters); } HttpClient::Response @@ -977,6 +959,71 @@ TEST_CASE("httpclient.password") AsioServer->RequestExit(); } } +TEST_CASE("httpclient.setbaseuri") +{ + struct TestHttpService : public HttpService + { + explicit TestHttpService(std::string_view Identity) : m_Identity(Identity) {} + + virtual const char* BaseUri() const override { return "/test/"; } + virtual void HandleRequest(HttpServerRequest& Req) override + { + Req.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, m_Identity); + } + + std::string m_Identity; + }; + + ScopedTemporaryDirectory TmpDir1; + ScopedTemporaryDirectory TmpDir2; + TestHttpService Service1("server-one"); + TestHttpService Service2("server-two"); + + Ref<HttpServer> Server1 = CreateHttpAsioServer(AsioConfig{}); + Ref<HttpServer> Server2 = CreateHttpAsioServer(AsioConfig{}); + + int Port1 = Server1->Initialize(0, TmpDir1.Path()); + int Port2 = Server2->Initialize(0, TmpDir2.Path()); + REQUIRE(Port1 != -1); + REQUIRE(Port2 != -1); + + Server1->RegisterService(Service1); + Server2->RegisterService(Service2); + + std::thread Thread1([&]() { Server1->Run(false); }); + std::thread Thread2([&]() { Server2->Run(false); }); + + auto _ = MakeGuard([&]() { + if (Thread1.joinable()) + { + Thread1.join(); + } + if (Thread2.joinable()) + { + Thread2.join(); + } + Server1->Close(); + Server2->Close(); + }); + + HttpClient Client(fmt::format("127.0.0.1:{}", Port1), HttpClientSettings{}, {}); + CHECK_EQ(Client.GetBaseUri(), fmt::format("127.0.0.1:{}", Port1)); + + HttpClient::Response Resp1 = Client.Get("/test/hello"); + CHECK(Resp1.IsSuccess()); + CHECK_EQ(Resp1.AsText(), "server-one"); + + Client.SetBaseUri(fmt::format("127.0.0.1:{}", Port2)); + CHECK_EQ(Client.GetBaseUri(), fmt::format("127.0.0.1:{}", Port2)); + + HttpClient::Response Resp2 = Client.Get("/test/hello"); + CHECK(Resp2.IsSuccess()); + CHECK_EQ(Resp2.AsText(), "server-two"); + + Server1->RequestExit(); + Server2->RequestExit(); +} + TEST_SUITE_END(); void |