diff options
| author | Stefan Boberg <[email protected]> | 2026-03-27 12:03:02 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2026-03-27 12:03:02 +0100 |
| commit | fa3b5090e94ee1386ca6ed6c4ddf886fa46dca54 (patch) | |
| tree | c574405fc12dd2af9fcb02353df10adb29587f6c /thirdparty/cpr/test/interceptor_multi_tests.cpp | |
| parent | idle deprovision in hub (#895) (diff) | |
| download | zen-fa3b5090e94ee1386ca6ed6c4ddf886fa46dca54.tar.xz zen-fa3b5090e94ee1386ca6ed6c4ddf886fa46dca54.zip | |
remove CPR HTTP client backend (#894)
CPR is no longer needed now that HttpClient has fully transitioned to raw libcurl. This removes the CPR library, its build integration, implementation files, and all conditional compilation guards, leaving curl as the sole HTTP client backend.
Diffstat (limited to 'thirdparty/cpr/test/interceptor_multi_tests.cpp')
| -rw-r--r-- | thirdparty/cpr/test/interceptor_multi_tests.cpp | 470 |
1 files changed, 0 insertions, 470 deletions
diff --git a/thirdparty/cpr/test/interceptor_multi_tests.cpp b/thirdparty/cpr/test/interceptor_multi_tests.cpp deleted file mode 100644 index 28a0af573..000000000 --- a/thirdparty/cpr/test/interceptor_multi_tests.cpp +++ /dev/null @@ -1,470 +0,0 @@ -#include <gtest/gtest.h> -#include <iostream> -#include <memory> - -#include "cpr/cpr.h" -#include "cpr/interceptor.h" -#include "cpr/response.h" -#include "cpr/session.h" -#include "httpServer.hpp" - -using namespace cpr; - -static HttpServer* server = new HttpServer(); - -class HiddenHelloWorldRedirectInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - std::shared_ptr<Session> session = multi.GetSessions().front().first; - - // Save original url - Url old_url = session->GetFullRequestUrl(); - - // Rewrite the url - Url url{server->GetBaseUrl() + "/hello.html"}; - session->SetUrl(url); - - // Proceed the chain - std::vector<Response> response = proceed(multi); - EXPECT_FALSE(response.empty()); - - // Restore the url again - response.front().url = old_url; - return response; - } -}; - -class ChangeStatusCodeInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - std::shared_ptr<Session> session = multi.GetSessions().front().first; - - // Proceed the chain - std::vector<Response> response = proceed(multi); - EXPECT_FALSE(response.empty()); - - // Change the status code - response.front().status_code = 12345; - return response; - } -}; - -class SetBasicAuthInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - std::shared_ptr<Session> session = multi.GetSessions().front().first; - - // Set authentication - session->SetAuth(Authentication{"user", "password", AuthMode::BASIC}); - - // Proceed the chain - return proceed(multi); - } -}; - -class SetUnsupportedProtocolErrorInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - std::shared_ptr<Session> session = multi.GetSessions().front().first; - - // Proceed the chain - std::vector<Response> response = proceed(multi); - EXPECT_FALSE(response.empty()); - - // Set unsupported protocol error - response.front().error = Error{CURLE_UNSUPPORTED_PROTOCOL, "SetErrorInterceptorMulti"}; - - // Return response - return response; - } -}; - -class ChangeRequestMethodToGetInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::GET_REQUEST; - - return proceed(multi); - } -}; - -class ChangeRequestMethodToPostInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::POST_REQUEST; - multi.GetSessions().front().first->SetOption(Payload{{"x", "5"}}); - return proceed(multi); - } -}; - -class ChangeRequestMethodToPutInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::PUT_REQUEST; - multi.GetSessions().front().first->SetOption(Payload{{"x", "5"}}); - return proceed(multi); - } -}; - -class ChangeRequestMethodToDeleteInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::DELETE_REQUEST; - return proceed(multi); - } -}; - -bool write_data(std::string /*data*/, intptr_t /*userdata*/) { - return true; -} - -class ChangeRequestMethodToDownloadCallbackInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::DOWNLOAD_REQUEST; - PrepareDownloadSession(multi, 0, WriteCallback{write_data, 0}); - return proceed(multi); - } -}; - -class ChangeRequestMethodToHeadInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::HEAD_REQUEST; - return proceed(multi); - } -}; - -class ChangeRequestMethodToOptionsInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::OPTIONS_REQUEST; - return proceed(multi); - } -}; - -class ChangeRequestMethodToPatchInterceptorMulti : public InterceptorMulti { - public: - std::vector<Response> intercept(MultiPerform& multi) override { - EXPECT_FALSE(multi.GetSessions().empty()); - multi.GetSessions().front().second = MultiPerform::HttpMethod::PATCH_REQUEST; - multi.GetSessions().front().first->SetOption(Payload{{"x", "5"}}); - return proceed(multi); - } -}; - -TEST(InterceptorMultiTest, HiddenUrlRewriteInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/basic.json"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<HiddenHelloWorldRedirectInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{"Hello world!"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeStatusCodeInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/hello.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeStatusCodeInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - long expected_status_code{12345}; - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(expected_status_code, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, DownloadChangeStatusCodeInterceptorMultiTest) { - cpr::Url url{server->GetBaseUrl() + "/download_gzip.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - session->SetHeader(cpr::Header{{"Accept-Encoding", "gzip"}}); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeStatusCodeInterceptorMulti>()); - std::vector<Response> response = multi.Download(cpr::WriteCallback{write_data, 0}); - EXPECT_EQ(response.size(), 1); - - long expected_status_code{12345}; - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(expected_status_code, response.front().status_code); - EXPECT_EQ(cpr::ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, SetBasicAuthInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/basic_auth.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<SetBasicAuthInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{"Header reflect GET"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"text/html"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, SetUnsupportedProtocolErrorInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/hello.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<SetUnsupportedProtocolErrorInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_error_message{"SetErrorInterceptorMulti"}; - ErrorCode expected_error_code{ErrorCode::UNSUPPORTED_PROTOCOL}; - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"text/html"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(expected_error_message, response.front().error.message); - EXPECT_EQ(expected_error_code, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToGetInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/hello.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToGetInterceptorMulti>()); - std::vector<Response> response = multi.Head(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{"Hello world!"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"text/html"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToPostInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/url_post.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToPostInterceptorMulti>()); - std::vector<Response> response = multi.Head(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{ - "{\n" - " \"x\": 5\n" - "}"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"application/json"}, response.front().header["content-type"]); - EXPECT_EQ(201, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToPutInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/put.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToPutInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{ - "{\n" - " \"x\": 5\n" - "}"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"application/json"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToPatchInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/patch.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToPatchInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{ - "{\n" - " \"x\": 5\n" - "}"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"application/json"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToOptionsInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToOptionsInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{""}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"GET, POST, PUT, DELETE, PATCH, OPTIONS"}, response.front().header["Access-Control-Allow-Methods"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToHeadInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/hello.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToHeadInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - EXPECT_EQ(std::string{}, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"text/html"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToDownloadCallbackInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/download_gzip.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - session->SetHeader(cpr::Header{{"Accept-Encoding", "gzip"}}); - session->SetTimeout(Timeout{2000}); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToDownloadCallbackInterceptorMulti>()); - std::vector<Response> response = multi.Put(); - EXPECT_EQ(response.size(), 1); - - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(cpr::ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToDownloadCallbackInterceptorMultiMixTest) { - Url url{server->GetBaseUrl() + "/download_gzip.html"}; - std::shared_ptr<Session> session1 = std::make_shared<Session>(); - session1->SetUrl(url); - session1->SetHeader(cpr::Header{{"Accept-Encoding", "gzip"}}); - session1->SetTimeout(Timeout{2000}); - - std::shared_ptr<Session> session2 = std::make_shared<Session>(); - session2->SetUrl(url); - session2->SetHeader(cpr::Header{{"Accept-Encoding", "gzip"}}); - session2->SetTimeout(Timeout{2000}); - - MultiPerform multi; - multi.AddSession(session1); - multi.AddSession(session2); - // Changes only one of two sessions to download, so it is expected to throw an exception here since we can not mix them. - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToDownloadCallbackInterceptorMulti>()); - EXPECT_THROW(multi.Put(), std::invalid_argument); -} - -TEST(InterceptorMultiTest, ChangeRequestMethodToDeleteInterceptorMultiTest) { - Url url{server->GetBaseUrl() + "/delete.html"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<ChangeRequestMethodToDeleteInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{"Delete success"}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(std::string{"text/html"}, response.front().header["content-type"]); - EXPECT_EQ(200, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, TwoInterceptorMultisTest) { - Url url{server->GetBaseUrl() + "/basic.json"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<HiddenHelloWorldRedirectInterceptorMulti>()); - multi.AddInterceptor(std::make_shared<ChangeStatusCodeInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{"Hello world!"}; - long expected_status_code{12345}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(expected_status_code, response.front().status_code); - EXPECT_EQ(ErrorCode::OK, response.front().error.code); -} - -TEST(InterceptorMultiTest, ThreeInterceptorMultisTest) { - Url url{server->GetBaseUrl() + "/basic.json"}; - std::shared_ptr<Session> session = std::make_shared<Session>(); - session->SetUrl(url); - MultiPerform multi; - multi.AddSession(session); - multi.AddInterceptor(std::make_shared<HiddenHelloWorldRedirectInterceptorMulti>()); - multi.AddInterceptor(std::make_shared<ChangeStatusCodeInterceptorMulti>()); - multi.AddInterceptor(std::make_shared<SetUnsupportedProtocolErrorInterceptorMulti>()); - std::vector<Response> response = multi.Get(); - EXPECT_EQ(response.size(), 1); - - std::string expected_text{"Hello world!"}; - long expected_status_code{12345}; - std::string expected_error_message{"SetErrorInterceptorMulti"}; - ErrorCode expected_error_code{ErrorCode::UNSUPPORTED_PROTOCOL}; - EXPECT_EQ(expected_text, response.front().text); - EXPECT_EQ(url, response.front().url); - EXPECT_EQ(expected_status_code, response.front().status_code); - EXPECT_EQ(expected_error_message, response.front().error.message); - EXPECT_EQ(expected_error_code, response.front().error.code); -} - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - ::testing::AddGlobalTestEnvironment(server); - return RUN_ALL_TESTS(); -}
\ No newline at end of file |