roaserviceclient_ut.cc 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include "gtest/gtest.h"
  4. #include "alibabacloud/core/SimpleCredentialsProvider.h"
  5. #include "alibabacloud/core/RoaServiceClient.h"
  6. #include "alibabacloud/core/HttpMessage.h"
  7. #include "alibabacloud/core/HttpRequest.h"
  8. using namespace std;
  9. using namespace AlibabaCloud;
  10. namespace AlibabaCloud {
  11. class TestRoaClient : public RoaServiceClient {
  12. public:
  13. TestRoaClient(const std::string & servicename, const std::shared_ptr<CredentialsProvider> &credentialsProvider,
  14. const ClientConfiguration &configuration,
  15. const std::shared_ptr<Signer> &signer = std::make_shared<HmacSha1Signer>()):
  16. RoaServiceClient(servicename, credentialsProvider, configuration, signer)
  17. {}
  18. JsonOutcome makeRequest(const std::string &endpoint, const RoaServiceRequest &msg, HttpRequest::Method method = HttpRequest::Method::Get)const {
  19. return RoaServiceClient::makeRequest(endpoint, msg, method);
  20. }
  21. HttpRequest buildHttpRequest(const std::string & endpoint, const ServiceRequest &msg, HttpRequest::Method method)const {
  22. return RoaServiceClient::buildHttpRequest(endpoint, msg, method);
  23. }
  24. };
  25. class TestRoaServiceRequest: public ServiceRequest {
  26. public:
  27. TestRoaServiceRequest(const std::string &product, const std::string &version):
  28. ServiceRequest(product, version){}
  29. using ServiceRequest::addParameter;
  30. using ServiceRequest::parameter;
  31. using ServiceRequest::removeParameter;
  32. using ServiceRequest::setContent;
  33. using ServiceRequest::setParameter;
  34. using ServiceRequest::setParameters;
  35. using ServiceRequest::setResourcePath;
  36. using ServiceRequest::setProduct;
  37. using ServiceRequest::setVersion;
  38. };
  39. }
  40. TEST(RoaServiceClient, basic) {
  41. const ClientConfiguration config;
  42. std::string key = "accessKeyId";
  43. std::string secret = "accessSecret";
  44. std::string token = "sessionToken";
  45. const Credentials credentials(key, secret, token);
  46. TestRoaClient client("ecs", std::make_shared<SimpleCredentialsProvider>(credentials), config);
  47. const string product = "ECS";
  48. const string version = "1.0";
  49. RoaServiceRequest roa_req(product, version);
  50. RoaServiceClient::JsonOutcome out = client.makeRequest("cn-shanghai", roa_req, HttpRequest::Method::Get);
  51. EXPECT_TRUE(out.error().errorCode() == "NetworkError");
  52. RoaServiceRequest req(product, version);
  53. req.setParameter("a", "b");
  54. req.setScheme("");
  55. req.setContent("123456789", 9);
  56. HttpRequest http_req = client.buildHttpRequest("cn-shanghai", req, HttpRequest::Method::Get);
  57. EXPECT_TRUE(http_req.url().toString() == "https://cn-shanghai/?a=b");
  58. EXPECT_TRUE(http_req.header("Accept") == "application/json");
  59. EXPECT_TRUE(http_req.header("Content-Length") == "9");
  60. EXPECT_TRUE(http_req.header("Content-Type") == "application/octet-stream");
  61. EXPECT_TRUE(http_req.header("Content-MD5") == "JfnnlDI7RTiF9RgfG2JNCw==");
  62. const string date = "Fri, 11 Jan 2019 14:08:39 GMT";
  63. EXPECT_TRUE(http_req.header("Date").length() == date.length());
  64. EXPECT_TRUE(http_req.header("Host") == "cn-shanghai");
  65. EXPECT_TRUE(http_req.header("x-sdk-cient") == "");
  66. EXPECT_TRUE(http_req.header("x-acs-region-id") == "cn-hangzhou");
  67. EXPECT_TRUE(http_req.header("x-acs-security-token") == token);
  68. EXPECT_TRUE(http_req.header("x-acs-signature-method") == "HMAC-SHA1");
  69. EXPECT_TRUE(http_req.header("x-acs-signature-version") == "1.0");
  70. EXPECT_TRUE(http_req.header("x-acs-version") == "1.0");
  71. const string nounce = "8a013b14-7bac-4652-8b5f-c02c8924e4ae";
  72. EXPECT_TRUE(http_req.header("x-acs-signature-nonce").length() == nounce.length());
  73. EXPECT_TRUE(http_req.header("Authorization").find("acs accessKeyId:") != string::npos);
  74. req.setScheme("http");
  75. req.setParameter("Accept", "tets-accept");
  76. req.setParameter("Content-Type", "test-content-type");
  77. http_req = client.buildHttpRequest("cn-shanghai", req, HttpRequest::Method::Get);
  78. EXPECT_TRUE(http_req.url().toString() == "http://cn-shanghai/?Accept=tets-accept&Content-Type=test-content-type&a=b");
  79. }