aboutsummaryrefslogtreecommitdiff
path: root/thirdparty/cpr/test/interceptor_multi_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/cpr/test/interceptor_multi_tests.cpp')
-rw-r--r--thirdparty/cpr/test/interceptor_multi_tests.cpp470
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