소스 검색

Merge pull request #75 from aliyun/fixed/issue_74

fixed issue #74
宋神宗 7 년 전
부모
커밋
5a9569e804

+ 6 - 7
core/include/alibabacloud/core/RoaServiceClient.h

@@ -40,13 +40,12 @@ class ALIBABACLOUD_CORE_EXPORT RoaServiceClient : public CoreClient {
   virtual ~RoaServiceClient();
 
  protected:
-  JsonOutcome makeRequest(const std::string &endpoint,
-    const RoaServiceRequest &msg, HttpRequest::Method method =
-    HttpRequest::Method::Get)const;
-  HttpRequest buildHttpRequest(const std::string & endpoint,
-    const ServiceRequest &msg, HttpRequest::Method method)const override;
-  HttpRequest buildHttpRequest(const std::string & endpoint,
-    const RoaServiceRequest &msg, HttpRequest::Method method)const;
+   JsonOutcome makeRequest(const std::string &endpoint,
+                           const RoaServiceRequest &msg, HttpRequest::Method method = HttpRequest::Method::Get) const;
+   HttpRequest buildHttpRequest(const std::string &endpoint,
+                                const ServiceRequest &msg, HttpRequest::Method method) const override;
+   HttpRequest buildHttpRequest(const std::string &endpoint,
+                                const RoaServiceRequest &msg, HttpRequest::Method method) const;
 
  private:
   std::shared_ptr<CredentialsProvider> credentialsProvider_;

+ 1 - 0
core/include/alibabacloud/core/RoaServiceRequest.h

@@ -30,6 +30,7 @@ class ALIBABACLOUD_CORE_EXPORT RoaServiceRequest : public ServiceRequest {
   using ServiceRequest::parameter;
   using ServiceRequest::setScheme;
   using ServiceRequest::setResourcePath;
+  using ServiceRequest::setMethod;
 };
 }  // namespace AlibabaCloud
 #endif  // CORE_INCLUDE_ALIBABACLOUD_CORE_ROASERVICEREQUEST_H_

+ 6 - 7
core/include/alibabacloud/core/RpcServiceClient.h

@@ -48,13 +48,12 @@ class ALIBABACLOUD_CORE_EXPORT RpcServiceClient : public CoreClient {
   using CoreClient::AttemptRequest;
 
  protected:
-  virtual JsonOutcome makeRequest(const std::string &endpoint,
-    const RpcServiceRequest &msg, HttpRequest::Method method =
-    HttpRequest::Method::Get) const;
-  HttpRequest buildHttpRequest(const std::string & endpoint,
-    const ServiceRequest &msg, HttpRequest::Method method)const override;
-  HttpRequest buildHttpRequest(const std::string & endpoint,
-    const RpcServiceRequest &msg, HttpRequest::Method method)const;
+   virtual JsonOutcome makeRequest(const std::string &endpoint,
+                                   const RpcServiceRequest &msg, HttpRequest::Method method = HttpRequest::Method::Get) const;
+   HttpRequest buildHttpRequest(const std::string &endpoint,
+                                const ServiceRequest &msg, HttpRequest::Method method) const override;
+   HttpRequest buildHttpRequest(const std::string &endpoint,
+                                const RpcServiceRequest &msg, HttpRequest::Method method) const;
 
  private:
   std::shared_ptr<CredentialsProvider> credentialsProvider_;

+ 2 - 1
core/include/alibabacloud/core/RpcServiceRequest.h

@@ -28,9 +28,10 @@ class ALIBABACLOUD_CORE_EXPORT RpcServiceRequest : public ServiceRequest {
   virtual ~RpcServiceRequest();
 
   std::string actionName()const;
+  using ServiceRequest::setMethod;
   using ServiceRequest::setScheme;
 
- protected:
+protected:
   void setActionName(const std::string &name);
 };
 }  // namespace AlibabaCloud

+ 4 - 0
core/include/alibabacloud/core/ServiceRequest.h

@@ -21,6 +21,7 @@
 #include "Url.h"
 #include <map>
 #include <string>
+#include "HttpRequest.h"
 
 namespace AlibabaCloud {
 class ALIBABACLOUD_CORE_EXPORT ServiceRequest {
@@ -39,10 +40,12 @@ public:
   std::string resourcePath() const;
   std::string version() const;
   std::string scheme() const;
+  HttpRequest::Method method() const;
   long connectTimeout() const;
   long readTimeout() const;
   void setConnectTimeout(const long connectTimeout);
   void setReadTimeout(const long readTimeout);
+  void setMethod(const HttpRequest::Method method);
 
 protected:
   ServiceRequest(const std::string &product, const std::string &version);
@@ -80,6 +83,7 @@ private:
   std::string scheme_;
   long connectTimeout_;
   long readTimeout_;
+  HttpRequest::Method method_;
 };
 } // namespace AlibabaCloud
 

+ 4 - 3
core/src/RoaServiceClient.cc

@@ -37,9 +37,10 @@ RoaServiceClient::~RoaServiceClient() {
 }
 
 RoaServiceClient::JsonOutcome RoaServiceClient::makeRequest(
-  const std::string &endpoint,
-  const RoaServiceRequest &msg, HttpRequest::Method method)const {
-  auto outcome = AttemptRequest(endpoint, msg, method);
+    const std::string &endpoint,
+    const RoaServiceRequest &request, HttpRequest::Method method) const
+{
+  auto outcome = AttemptRequest(endpoint, request, request.method());
   if (outcome.isSuccess())
     return JsonOutcome(std::string(outcome.result().body(),
       outcome.result().bodySize()));

+ 4 - 3
core/src/RpcServiceClient.cc

@@ -37,9 +37,10 @@ RpcServiceClient::~RpcServiceClient() {
 }
 
 RpcServiceClient::JsonOutcome RpcServiceClient::makeRequest(
-  const std::string &endpoint,
-  const RpcServiceRequest &msg, HttpRequest::Method method)const {
-  auto outcome = AttemptRequest(endpoint, msg, method);
+    const std::string &endpoint,
+    const RpcServiceRequest &request, HttpRequest::Method method) const
+{
+  auto outcome = AttemptRequest(endpoint, request, request.method());
   if (outcome.isSuccess())
     return JsonOutcome(std::string(outcome.result().body(),
       outcome.result().bodySize()));

+ 12 - 1
core/src/ServiceRequest.cc

@@ -30,7 +30,8 @@ ServiceRequest::ServiceRequest(const std::string &product,
                                                              version_(version),
                                                              scheme_("https"),
                                                              connectTimeout_(kInvalidTimeout),
-                                                             readTimeout_(kInvalidTimeout)
+                                                             readTimeout_(kInvalidTimeout),
+                                                             method_(HttpRequest::Method::Get)
 {
 }
 
@@ -169,6 +170,11 @@ std::string ServiceRequest::version() const
   return version_;
 }
 
+HttpRequest::Method ServiceRequest::method() const
+{
+  return method_;
+}
+
 void ServiceRequest::setVersion(const std::string &version)
 {
   version_ = version;
@@ -224,4 +230,9 @@ void ServiceRequest::setReadTimeout(const long readTimeout)
   readTimeout_ = readTimeout;
 }
 
+void ServiceRequest::setMethod(const HttpRequest::Method method)
+{
+  method_ = method;
+}
+
 } // namespace AlibabaCloud

+ 196 - 189
test/function_test/core/locationclient_ft.cc

@@ -1,5 +1,6 @@
 #include <iostream>
 #include <stdio.h>
+#include <algorithm>
 #include "../utils.h"
 #include "gtest/gtest.h"
 #include "alibabacloud/core/AlibabaCloud.h"
@@ -10,193 +11,199 @@ using namespace std;
 using namespace AlibabaCloud;
 using namespace AlibabaCloud::Location;
 
-namespace {
-  utUtils utils;
-
-  const string key = utils.get_env("ENV_AccessKeyId");
-  const string secret = utils.get_env("ENV_AccessKeySecret");
-
-  TEST(LocationClient, basic) {
-    ClientConfiguration configuration("cn-hangzhou");
-    Model::DescribeEndpointsRequest req;
-    req.setId("cn-hangzhou");
-    req.setServiceCode("ecs");
-    req.setType("openAPI");
-
-    LocationClient client(key, secret, configuration);
-
-    LocationClient::DescribeEndpointsOutcome out = client.describeEndpoints(req);
-    EXPECT_TRUE(out.error().errorCode() == "");
-    EXPECT_TRUE(out.result().endpoints().size() == 1);
-    Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
-
-    EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
-    EXPECT_TRUE(ep.id == "cn-hangzhou");
-    EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
-    EXPECT_TRUE(ep.type == "openAPI");
-    EXPECT_TRUE(ep.protocols.size() == 2);
-    std::vector<std::string>::iterator it;
-    std::vector<std::string> protocols = ep.protocols;
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
-    EXPECT_TRUE(it != protocols.end());
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
-    EXPECT_TRUE(it != protocols.end());
-
-    EXPECT_TRUE(out.result().success());
-    const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
-    EXPECT_TRUE(out.result().requestId().length() == req_id.length());
-  }
-
-  TEST(LocationClient, credentials) {
-    Credentials credentials(key, secret);
-    ClientConfiguration configuration("cn-hangzhou");
-
-    Model::DescribeEndpointsRequest req;
-    req.setId("cn-hangzhou");
-    req.setServiceCode("ecs");
-    req.setType("openAPI");
-
-    LocationClient client(credentials, configuration);
-
-    LocationClient::DescribeEndpointsOutcome out = client.describeEndpoints(req);
-    EXPECT_TRUE(out.error().errorCode() == "");
-    EXPECT_TRUE(out.result().endpoints().size() == 1);
-    Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
-
-    EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
-    EXPECT_TRUE(ep.id == "cn-hangzhou");
-    EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
-    EXPECT_TRUE(ep.type == "openAPI");
-    EXPECT_TRUE(ep.protocols.size() == 2);
-    std::vector<std::string>::iterator it;
-    std::vector<std::string> protocols = ep.protocols;
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
-    EXPECT_TRUE(it != protocols.end());
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
-    EXPECT_TRUE(it != protocols.end());
-
-    EXPECT_TRUE(out.result().success());
-    const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
-    EXPECT_TRUE(out.result().requestId().length() == req_id.length());
-  }
-
-  TEST(LocationClient, credentials_another) {
-    Credentials credentials(key, secret);
-    ClientConfiguration configuration("cn-hangzhou");
-
-    Model::DescribeEndpointsRequest req;
-    req.setId("cn-hangzhou");
-    req.setServiceCode("ecs");
-    req.setType("openAPI");
-
-    LocationClient client(std::make_shared<SimpleCredentialsProvider>(credentials), configuration);
-
-    LocationClient::DescribeEndpointsOutcome out = client.describeEndpoints(req);
-    EXPECT_TRUE(out.error().errorCode() == "");
-    EXPECT_TRUE(out.result().endpoints().size() == 1);
-    Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
-    EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
-    EXPECT_TRUE(ep.id == "cn-hangzhou");
-    EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
-    EXPECT_TRUE(ep.type == "openAPI");
-    EXPECT_TRUE(ep.protocols.size() == 2);
-    std::vector<std::string>::iterator it;
-    std::vector<std::string> protocols = ep.protocols;
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
-    EXPECT_TRUE(it != protocols.end());
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
-    EXPECT_TRUE(it != protocols.end());
-
-    EXPECT_TRUE(out.result().success());
-    const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
-    EXPECT_TRUE(out.result().requestId().length() == req_id.length());
-  }
-
-
-  TEST(LocationClient, callable) {
-    InitializeSdk();
-    ClientConfiguration configuration("cn-hangzhou");
-    Model::DescribeEndpointsRequest req;
-    req.setId("cn-hangzhou");
-    req.setServiceCode("ecs");
-    req.setType("openAPI");
-
-    LocationClient client(key, secret, configuration);
-    LocationClient::DescribeEndpointsOutcomeCallable cb = client.describeEndpointsCallable(req);
-    LocationClient::DescribeEndpointsOutcome out = cb.get();
-
-    EXPECT_TRUE(out.error().errorCode() == "");
-    EXPECT_TRUE(out.result().endpoints().size() == 1);
-    Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
-    EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
-    EXPECT_TRUE(ep.id == "cn-hangzhou");
-    EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
-    EXPECT_TRUE(ep.type == "openAPI");
-    EXPECT_TRUE(ep.protocols.size() == 2);
-    std::vector<std::string>::iterator it;
-    std::vector<std::string> protocols = ep.protocols;
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
-    EXPECT_TRUE(it != protocols.end());
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
-    EXPECT_TRUE(it != protocols.end());
-
-    EXPECT_TRUE(out.result().success());
-    const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
-    EXPECT_TRUE(out.result().requestId().length() == req_id.length());
-    ShutdownSdk();
-  }
-
-  void cb(const LocationClient *client,
-          const Model::DescribeEndpointsRequest &req,
-          const LocationClient::DescribeEndpointsOutcome& out,
-          const std::shared_ptr<const AsyncCallerContext>& contex) {
-
-    EXPECT_TRUE(out.error().errorCode() == "");
-    EXPECT_TRUE(out.result().endpoints().size() == 1);
-    Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
-    EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
-    EXPECT_TRUE(ep.id == "cn-hangzhou");
-    EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
-    EXPECT_TRUE(ep.type == "openAPI");
-    EXPECT_TRUE(ep.protocols.size() == 2);
-    std::vector<std::string>::iterator it;
-    std::vector<std::string> protocols = ep.protocols;
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
-    EXPECT_TRUE(it != protocols.end());
-
-    it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
-    EXPECT_TRUE(it != protocols.end());
-
-    EXPECT_TRUE(out.result().success());
-    const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
-    EXPECT_TRUE(out.result().requestId().length() == req_id.length());
-  }
-
-  TEST(LocationClient, async) {
-    InitializeSdk();
-
-    ClientConfiguration configuration("cn-hangzhou");
-    Model::DescribeEndpointsRequest req;
-    req.setId("cn-hangzhou");
-    req.setServiceCode("ecs");
-    req.setType("openAPI");
-
-    LocationClient client(key, secret, configuration);
-    LocationClient::DescribeEndpointsOutcome out;
-
-    const AsyncCallerContext context;
-
-    LocationClient::DescribeEndpointsAsyncHandler handler(cb);
-    client.describeEndpointsAsync(req, handler, std::make_shared<const AsyncCallerContext>(context));
-    ShutdownSdk();
-  }
+namespace
+{
+utUtils utils;
+
+const string key = utils.get_env("ENV_AccessKeyId");
+const string secret = utils.get_env("ENV_AccessKeySecret");
+
+TEST(LocationClient, basic)
+{
+  ClientConfiguration configuration("cn-hangzhou");
+  Model::DescribeEndpointsRequest req;
+  req.setId("cn-hangzhou");
+  req.setServiceCode("ecs");
+  req.setType("openAPI");
+
+  LocationClient client(key, secret, configuration);
+
+  LocationClient::DescribeEndpointsOutcome out = client.describeEndpoints(req);
+  EXPECT_TRUE(out.error().errorCode() == "");
+  EXPECT_TRUE(out.result().endpoints().size() == 1);
+  Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
+
+  EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
+  EXPECT_TRUE(ep.id == "cn-hangzhou");
+  EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
+  EXPECT_TRUE(ep.type == "openAPI");
+  EXPECT_TRUE(ep.protocols.size() == 2);
+  std::vector<std::string>::iterator it;
+  std::vector<std::string> protocols = ep.protocols;
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
+  EXPECT_TRUE(it != protocols.end());
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
+  EXPECT_TRUE(it != protocols.end());
+
+  EXPECT_TRUE(out.result().success());
+  const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
+  EXPECT_TRUE(out.result().requestId().length() == req_id.length());
 }
+
+TEST(LocationClient, credentials)
+{
+  Credentials credentials(key, secret);
+  ClientConfiguration configuration("cn-hangzhou");
+
+  Model::DescribeEndpointsRequest req;
+  req.setId("cn-hangzhou");
+  req.setServiceCode("ecs");
+  req.setType("openAPI");
+
+  LocationClient client(credentials, configuration);
+
+  LocationClient::DescribeEndpointsOutcome out = client.describeEndpoints(req);
+  EXPECT_TRUE(out.error().errorCode() == "");
+  EXPECT_TRUE(out.result().endpoints().size() == 1);
+  Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
+
+  EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
+  EXPECT_TRUE(ep.id == "cn-hangzhou");
+  EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
+  EXPECT_TRUE(ep.type == "openAPI");
+  EXPECT_TRUE(ep.protocols.size() == 2);
+  std::vector<std::string>::iterator it;
+  std::vector<std::string> protocols = ep.protocols;
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
+  EXPECT_TRUE(it != protocols.end());
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
+  EXPECT_TRUE(it != protocols.end());
+
+  EXPECT_TRUE(out.result().success());
+  const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
+  EXPECT_TRUE(out.result().requestId().length() == req_id.length());
+}
+
+TEST(LocationClient, credentials_another)
+{
+  Credentials credentials(key, secret);
+  ClientConfiguration configuration("cn-hangzhou");
+
+  Model::DescribeEndpointsRequest req;
+  req.setId("cn-hangzhou");
+  req.setServiceCode("ecs");
+  req.setType("openAPI");
+
+  LocationClient client(std::make_shared<SimpleCredentialsProvider>(credentials), configuration);
+
+  LocationClient::DescribeEndpointsOutcome out = client.describeEndpoints(req);
+  EXPECT_TRUE(out.error().errorCode() == "");
+  EXPECT_TRUE(out.result().endpoints().size() == 1);
+  Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
+  EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
+  EXPECT_TRUE(ep.id == "cn-hangzhou");
+  EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
+  EXPECT_TRUE(ep.type == "openAPI");
+  EXPECT_TRUE(ep.protocols.size() == 2);
+  std::vector<std::string>::iterator it;
+  std::vector<std::string> protocols = ep.protocols;
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
+  EXPECT_TRUE(it != protocols.end());
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
+  EXPECT_TRUE(it != protocols.end());
+
+  EXPECT_TRUE(out.result().success());
+  const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
+  EXPECT_TRUE(out.result().requestId().length() == req_id.length());
+}
+
+TEST(LocationClient, callable)
+{
+  InitializeSdk();
+  ClientConfiguration configuration("cn-hangzhou");
+  Model::DescribeEndpointsRequest req;
+  req.setId("cn-hangzhou");
+  req.setServiceCode("ecs");
+  req.setType("openAPI");
+
+  LocationClient client(key, secret, configuration);
+  LocationClient::DescribeEndpointsOutcomeCallable cb = client.describeEndpointsCallable(req);
+  LocationClient::DescribeEndpointsOutcome out = cb.get();
+
+  EXPECT_TRUE(out.error().errorCode() == "");
+  EXPECT_TRUE(out.result().endpoints().size() == 1);
+  Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
+  EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
+  EXPECT_TRUE(ep.id == "cn-hangzhou");
+  EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
+  EXPECT_TRUE(ep.type == "openAPI");
+  EXPECT_TRUE(ep.protocols.size() == 2);
+  std::vector<std::string>::iterator it;
+  std::vector<std::string> protocols = ep.protocols;
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
+  EXPECT_TRUE(it != protocols.end());
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
+  EXPECT_TRUE(it != protocols.end());
+
+  EXPECT_TRUE(out.result().success());
+  const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
+  EXPECT_TRUE(out.result().requestId().length() == req_id.length());
+  ShutdownSdk();
+}
+
+void cb(const LocationClient *client,
+        const Model::DescribeEndpointsRequest &req,
+        const LocationClient::DescribeEndpointsOutcome &out,
+        const std::shared_ptr<const AsyncCallerContext> &contex)
+{
+
+  EXPECT_TRUE(out.error().errorCode() == "");
+  EXPECT_TRUE(out.result().endpoints().size() == 1);
+  Model::DescribeEndpointsResult::Endpoint ep = out.result().endpoints()[0];
+  EXPECT_TRUE(ep.endpoint == "ecs-cn-hangzhou.aliyuncs.com");
+  EXPECT_TRUE(ep.id == "cn-hangzhou");
+  EXPECT_TRUE(ep.namespace_ == "26842" || ep.namespace_.empty());
+  EXPECT_TRUE(ep.type == "openAPI");
+  EXPECT_TRUE(ep.protocols.size() == 2);
+  std::vector<std::string>::iterator it;
+  std::vector<std::string> protocols = ep.protocols;
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTP"));
+  EXPECT_TRUE(it != protocols.end());
+
+  it = std::find(protocols.begin(), protocols.end(), string("HTTPS"));
+  EXPECT_TRUE(it != protocols.end());
+
+  EXPECT_TRUE(out.result().success());
+  const string req_id = "205302F3-6E1A-4D6F-82C5-2F165FB94038";
+  EXPECT_TRUE(out.result().requestId().length() == req_id.length());
+}
+
+TEST(LocationClient, async)
+{
+  InitializeSdk();
+
+  ClientConfiguration configuration("cn-hangzhou");
+  Model::DescribeEndpointsRequest req;
+  req.setId("cn-hangzhou");
+  req.setServiceCode("ecs");
+  req.setType("openAPI");
+
+  LocationClient client(key, secret, configuration);
+  LocationClient::DescribeEndpointsOutcome out;
+
+  const AsyncCallerContext context;
+
+  LocationClient::DescribeEndpointsAsyncHandler handler(cb);
+  client.describeEndpointsAsync(req, handler, std::make_shared<const AsyncCallerContext>(context));
+  ShutdownSdk();
+}
+} // namespace