commonclient_ut.cc 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include "gtest/gtest.h"
  4. #include "../../core/src/Utils.h"
  5. #include "alibabacloud/core/Config.h"
  6. #include "alibabacloud/core/AlibabaCloud.h"
  7. #include "alibabacloud/core/CommonClient.h"
  8. #include "alibabacloud/core/CommonResponse.h"
  9. #include "alibabacloud/core/CommonRequest.h"
  10. #include "alibabacloud/core/SimpleCredentialsProvider.h"
  11. using namespace std;
  12. using namespace AlibabaCloud;
  13. namespace AlibabaCloud {
  14. class TestCommonClient : public CommonClient {
  15. public:
  16. TestCommonClient(const Credentials &credentials, const ClientConfiguration &configuration):
  17. CommonClient(credentials, configuration)
  18. {}
  19. using CommonClient::buildHttpRequest;
  20. using CommonClient::buildRoaHttpRequest;
  21. using CommonClient::buildRpcHttpRequest;
  22. using CommonClient::makeRequest;
  23. using CommonClient::asyncExecute;
  24. };
  25. }
  26. static int nbr = 0;
  27. static void task() {
  28. nbr |= 0x01;
  29. }
  30. TEST(CommonClient, basic) {
  31. InitializeSdk();
  32. const ClientConfiguration cfg;
  33. std::string key = "accessKeyId";
  34. std::string secret = "accessSecret";
  35. std::string token = "sessionToken";
  36. const Credentials credentials(key, secret, token);
  37. const CommonClient cc1(credentials, cfg);
  38. CommonClient cc2(std::make_shared<SimpleCredentialsProvider>(credentials), cfg);
  39. CommonClient cc3(key, secret, cfg);
  40. CommonRequest cr;
  41. cr.setContent("test-content", 12);
  42. CommonClient::CommonResponseOutcome out1 = cc1.commonResponse(cr);
  43. EXPECT_TRUE(out1.error().errorCode() == "NetworkError");
  44. EXPECT_TRUE(out1.result().payload() == "");
  45. CommonClient::CommonResponseOutcome out2 = cc2.commonResponse(cr);
  46. EXPECT_TRUE(out2.error().errorCode() == "NetworkError");
  47. EXPECT_TRUE(out2.result().payload() == "");
  48. CommonClient::CommonResponseOutcome out3 = cc3.commonResponse(cr);
  49. EXPECT_TRUE(out3.error().errorCode() == "NetworkError");
  50. EXPECT_TRUE(out3.result().payload() == "");
  51. /*
  52. https://cn-hangzhou/?
  53. AccessKeyId=accessKeyId
  54. &Format=JSON
  55. &RegionId=cn-hangzhou
  56. &SecurityToken=sessionToken
  57. &Signature=tWGagYMK93km44TOY%2FY60snVYWE%3D
  58. &SignatureMethod=HMAC-SHA1
  59. &SignatureNonce=ef27311a-5151-40a0-974f-2b808a8a683e
  60. &SignatureVersion=1.0
  61. &Timestamp=2019-01-02T08%3A56%3A26Z
  62. &Version=
  63. */
  64. TestCommonClient* client = new TestCommonClient(credentials, cfg);
  65. HttpRequest r = client->buildHttpRequest("cn-hangzhou", cr, HttpRequest::Method::Post);
  66. EXPECT_TRUE(r.method() == HttpRequest::Method::Post);
  67. EXPECT_TRUE(r.url().scheme() == "https");
  68. EXPECT_TRUE(r.url().userName() == "");
  69. EXPECT_TRUE(r.url().password() == "");
  70. EXPECT_TRUE(r.url().host() == "cn-hangzhou");
  71. EXPECT_TRUE(r.url().port() == -1);
  72. EXPECT_TRUE(r.url().fragment() == "");
  73. EXPECT_TRUE(r.url().query().find("AccessKeyId=") != string::npos);
  74. EXPECT_TRUE(r.url().query().find("Format=") != string::npos);
  75. EXPECT_TRUE(r.url().query().find("RegionId=") != string::npos);
  76. EXPECT_TRUE(r.url().query().find("SecurityToken=") != string::npos);
  77. EXPECT_TRUE(r.url().query().find("Signature=") != string::npos);
  78. EXPECT_TRUE(r.url().query().find("SignatureMethod=") != string::npos);
  79. EXPECT_TRUE(r.url().query().find("SignatureNonce=") != string::npos);
  80. EXPECT_TRUE(r.url().query().find("SignatureVersion=") != string::npos);
  81. EXPECT_TRUE(r.url().query().find("Timestamp=") != string::npos);
  82. EXPECT_TRUE(r.url().query().find("Version=") != string::npos);
  83. cr.setQueryParameter("query_k1", "query_v1");
  84. cr.setHeaderParameter("header_k1", "header_v1");
  85. HttpRequest rr = client->buildRoaHttpRequest("cn-shanghai", cr, HttpRequest::Method::Get);
  86. EXPECT_TRUE(rr.method() == HttpRequest::Method::Get);
  87. EXPECT_TRUE(rr.header("Accept") == "application/json");
  88. EXPECT_TRUE(rr.url().toString() == "https://cn-shanghai/?header_k1=header_v1");
  89. EXPECT_TRUE(rr.header("Host") == "cn-shanghai");
  90. // Wed, 09 Jan 2019 06:32:41 GMT
  91. string date = "Wed, 09 Jan 2019 06:32:41 GMT";
  92. EXPECT_TRUE(rr.header("Date").length() == date.length());
  93. string signature_nonce = "fb62c51d-f735-4ec7-870d-c6ce03368214";
  94. EXPECT_TRUE(rr.header("x-acs-signature-nonce").length() == signature_nonce.length());
  95. EXPECT_TRUE(rr.header("x-acs-signature-method") == "HMAC-SHA1");
  96. EXPECT_TRUE(rr.header("x-acs-signature-version") == "1.0");
  97. EXPECT_TRUE(rr.header("x-acs-version") == "");
  98. EXPECT_TRUE(rr.header("x-sdk-client") == string("CPP/").append(ALIBABACLOUD_VERSION_STR));
  99. EXPECT_TRUE(rr.header("x-acs-region-id") == "cn-hangzhou");
  100. // acs accessKeyId:JZD81jGWLp1F3ZIkaLp1yuEZmKc=
  101. EXPECT_TRUE(rr.header("Authorization").find("acs accessKeyId:") != string::npos);
  102. EXPECT_TRUE(rr.header("unknown-header") == "");
  103. HttpRequest rrr = client->buildRpcHttpRequest("cn-hangzhou", cr, HttpRequest::Method::Post);
  104. EXPECT_TRUE(client->serviceName() == "Common");
  105. std::function<void()> func(task);
  106. Runnable* rf = new Runnable(func);
  107. EXPECT_TRUE(nbr == 0);
  108. client->asyncExecute(rf);
  109. usleep(10000);
  110. EXPECT_TRUE(nbr == 1);
  111. ShutdownSdk();
  112. }