| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #include <iostream>
- #include <stdio.h>
- #include "utils.h"
- #include "gtest/gtest.h"
- #include "gmock/gmock.h"
- #include "alibabacloud/core/Url.h"
- #include "alibabacloud/core/HttpRequest.h"
- #include "alibabacloud/core/HttpClient.h"
- #include "../src/CurlHttpClient.h"
- using namespace std;
- using ::testing::_;
- using ::testing::NiceMock;
- using ::testing::DefaultValue;
- using namespace AlibabaCloud;
- using namespace std;
- class mockCurlHttpClient : public CurlHttpClient {
- public:
- MOCK_METHOD1(makeRequest, HttpResponseOutcome (const HttpRequest &request));
- };
- TEST(CurlHttpClient, connectTimeout) {
- CurlHttpClient client;
- HttpRequest request;
- Url url;
- url.setScheme("http");
- url.setHost("192.168.100.100");
- request.setMethod(HttpRequest::Method::Get);
- request.setUrl(url);
- request.setConnectTimeout(100);
- request.setReadTimeout(1000);
- request.setHeader("Content-Type", "text/html");
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- string errmsg = "Timeout (connectTimeout: 100ms, readTimeout: 1000ms) when connect or read data: GET http://192.168.100.100/";
- EXPECT_TRUE(out.error().errorCode() == "OperationTimeoutError");
- EXPECT_TRUE(out.error().errorMessage() == errmsg);
- }
- TEST(CurlHttpClient, defaultTimeout) {
- CurlHttpClient client;
- HttpRequest request;
- Url url;
- url.setScheme("http");
- url.setHost("192.168.100.100");
- request.setMethod(HttpRequest::Method::Get);
- request.setUrl(url);
- request.setHeader("Content-Type", "text/html");
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- string errmsg = "Timeout (connectTimeout: 5000ms, readTimeout: 10000ms) when connect or read data: GET http://192.168.100.100/";
- EXPECT_TRUE(out.error().errorCode() == "OperationTimeoutError");
- EXPECT_TRUE(out.error().errorMessage() == errmsg);
- }
- TEST(CurlHttpClient, readTimeout) {
- CurlHttpClient client;
- HttpRequest request;
- Url url;
- url.setScheme("http");
- url.setHost("127.0.0.1");
- url.setPort(8021);
- url.setPath("/readTimeoutTest");
- url.setQuery("timeout=500");
- request.setMethod(HttpRequest::Method::Get);
- request.setUrl(url);
- request.setConnectTimeout(233);
- request.setReadTimeout(500);
- request.setHeader("Content-Type", "text/html");
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- string errmsg = "Timeout (connectTimeout: 233ms, readTimeout: 500ms) when connect or read data: GET http://127.0.0.1:8021/readTimeoutTest?timeout=500";
- EXPECT_TRUE(out.error().errorCode() == "OperationTimeoutError");
- EXPECT_TRUE(out.error().errorMessage() == errmsg);
- }
- TEST(CurlHttpClient, http_get) {
- CurlHttpClient client;
- HttpRequest request;
- Url url;
- url.setHost("127.0.0.1");
- url.setPort(8021);
- url.setPath("/anypath");
- url.setQuery("k1=v1&k2=v2");
- request.setMethod(HttpRequest::Method::Get);
- request.setUrl(url);
- request.setHeader("Content-Type", "text/html");
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(std::string(out.result().body()) == "{\"k1\":\"v1\",\"k2\":\"v2\"}");
- }
- TEST(CurlHttpClient, http_post) {
- CurlHttpClient client;
- HttpRequest request;
- std::string test_body = "any-body";
- Url url;
- url.setHost("127.0.0.1");
- url.setPort(8021);
- url.setPath("/anypath");
- url.setQuery("k1=v1&k2=v2");
- request.setMethod(HttpRequest::Method::Post);
- request.setUrl(url);
- request.setHeader("Content-Type", "text/html");
- request.setBody(test_body.c_str(), test_body.size());
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(std::string(out.result().body()) == "POST: " + test_body);
- }
- TEST(CurlHttpClient, http_put) {
- CurlHttpClient client;
- HttpRequest request;
- std::string test_body = "any-body";
- Url url;
- url.setHost("127.0.0.1");
- url.setPort(8021);
- url.setPath("/anypath");
- url.setQuery("k1=v1&k2=v2");
- request.setMethod(HttpRequest::Method::Put);
- request.setUrl(url);
- request.setHeader("Content-Type", "text/html");
- request.setBody(test_body.c_str(), test_body.size());
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(std::string(out.result().body()) == "PUT: " + test_body);
- }
- TEST(CurlHttpClient, http_delete) {
- CurlHttpClient client;
- HttpRequest request;
- std::string test_body = "any-body";
- Url url;
- url.setHost("127.0.0.1");
- url.setPort(8021);
- url.setPath("/anypath");
- url.setQuery("k1=v1&k2=v2");
- request.setMethod(HttpRequest::Method::Delete);
- request.setUrl(url);
- request.setHeader("Content-Type", "text/html");
- request.setBody(test_body.c_str(), test_body.size());
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(std::string(out.result().body()) == "DELETE: " + test_body);
- }
- TEST(CurlHttpClient, netWorkError) {
- CurlHttpClient client;
- HttpRequest request;
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(out.error().errorCode() == "NetworkError");
- EXPECT_TRUE(out.error().errorMessage().find("Failed to connect to host or proxy: GET ") == 0);
- }
- TEST(CurlHttpClient, netWorkErrorWithHttpProxy) {
- const std::string hostname = "hostname";
- const std::string user = "user";
- const std::string password = "password";
- uint16_t port = 12345;
- const NetworkProxy proxy(NetworkProxy::Http, hostname, port, user, password);
- CurlHttpClient client;
- client.setProxy(proxy);
- HttpRequest request;
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(out.error().errorCode() == "NetworkError");
- EXPECT_TRUE(out.error().errorMessage().find("Failed to connect to host or proxy: GET ") == 0);
- }
- TEST(CurlHttpClient, netWorkErrorWithSocks5Proxy) {
- const std::string hostname = "hostname";
- const std::string user = "user";
- const std::string password = "password";
- uint16_t port = 12345;
- const NetworkProxy proxy(NetworkProxy::Socks5, hostname, port, user, password);
- CurlHttpClient client;
- client.setProxy(proxy);
- HttpRequest request;
- HttpClient::HttpResponseOutcome out = client.makeRequest(request);
- EXPECT_TRUE(out.error().errorCode() == "NetworkError");
- EXPECT_TRUE(out.error().errorMessage().find("Failed to connect to host or proxy: GET ") == 0);
- }
- TEST(CurlHttpClient, mock) {
- CurlHttpClient client;
- HttpRequest request;
- string body = "1234567";
- HttpResponse response(request);
- response.setStatusCode(200);
- response.setBody(body.c_str(), body.size());
- NiceMock<mockCurlHttpClient> mclient;
- HttpClient::HttpResponseOutcome res = HttpClient::HttpResponseOutcome(response);
- HttpClient::HttpResponseOutcome out1;
- out1.error().setErrorCode("111");
- out1.error().setErrorMessage("this is a mock test");
- DefaultValue<HttpClient::HttpResponseOutcome>::Set(res);
- HttpRequest req;
- EXPECT_CALL(mclient, makeRequest(_));
- HttpClient::HttpResponseOutcome o = mclient.makeRequest(request);
- EXPECT_TRUE(res.result().body() == body);
- }
|