stsclient_ut.cc 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include "utils.h"
  4. #include "gtest/gtest.h"
  5. #include "gmock/gmock.h"
  6. #include "alibabacloud/core/AlibabaCloud.h"
  7. #include "alibabacloud/core/SimpleCredentialsProvider.h"
  8. #include "alibabacloud/core/sts/StsClient.h"
  9. using ::testing::_;
  10. using ::testing::DefaultValue;
  11. using namespace std;
  12. using namespace AlibabaCloud;
  13. using namespace AlibabaCloud::Sts;
  14. namespace {
  15. class mockStsClient : public StsClient {
  16. public:
  17. mockStsClient(const string& key, const string& secret, const ClientConfiguration& cfg):
  18. StsClient(key, secret, cfg) {}
  19. mockStsClient(const Credentials& credentials, const ClientConfiguration& cfg):
  20. StsClient(credentials, cfg) {}
  21. mockStsClient(const std::shared_ptr<CredentialsProvider> &credentialsProvider, const ClientConfiguration &configuration):
  22. StsClient(credentialsProvider, configuration) {}
  23. MOCK_CONST_METHOD3(makeRequest, RpcServiceClient::JsonOutcome (const std::string &endpoint, const RpcServiceRequest &msg, HttpRequest::Method method));
  24. };
  25. TEST(StsClient, getCallerIdentity_ak) {
  26. ClientConfiguration configuration;
  27. RpcServiceClient::JsonOutcome xout("{\"Request\":\"test-req-id\",\"AccountId\":\"123456789\",\"Arn\":\"any-arn\",\"UserId\":\"any-id\"}");
  28. mockStsClient client("mock-key", "mock-secret", configuration);
  29. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  30. EXPECT_CALL(client, makeRequest(_, _, _));
  31. Model::GetCallerIdentityRequest req;
  32. StsClient::GetCallerIdentityOutcome out = client.getCallerIdentity(req);
  33. EXPECT_TRUE(out.error().errorCode().empty());
  34. EXPECT_TRUE(out.result().accountId() == "123456789");
  35. EXPECT_TRUE(out.result().userId() == "any-id");
  36. EXPECT_TRUE(out.result().arn() == "any-arn");
  37. }
  38. TEST(StsClient, getCallerIdentity_credentials) {
  39. ClientConfiguration configuration;
  40. RpcServiceClient::JsonOutcome xout("{\"Request\":\"test-req-id\",\"AccountId\":\"123456789\",\"Arn\":\"any-arn\",\"UserId\":\"any-id\"}");
  41. Credentials credentials("key", "secret");
  42. mockStsClient client(credentials, configuration);
  43. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  44. EXPECT_CALL(client, makeRequest(_, _, _));
  45. Model::GetCallerIdentityRequest req;
  46. StsClient::GetCallerIdentityOutcome out = client.getCallerIdentity(req);
  47. EXPECT_TRUE(out.error().errorCode().empty());
  48. EXPECT_TRUE(out.result().accountId() == "123456789");
  49. EXPECT_TRUE(out.result().userId() == "any-id");
  50. EXPECT_TRUE(out.result().arn() == "any-arn");
  51. }
  52. TEST(StsClient, getCallerIdentity_credentials_ptr) {
  53. ClientConfiguration configuration;
  54. RpcServiceClient::JsonOutcome xout("{\"Request\":\"test-req-id\",\"AccountId\":\"123456789\",\"Arn\":\"any-arn\",\"UserId\":\"any-id\"}");
  55. Credentials credentials("key", "secret");
  56. mockStsClient client(std::make_shared<SimpleCredentialsProvider>(credentials), configuration);
  57. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  58. EXPECT_CALL(client, makeRequest(_, _, _));
  59. Model::GetCallerIdentityRequest req;
  60. StsClient::GetCallerIdentityOutcome out = client.getCallerIdentity(req);
  61. EXPECT_TRUE(out.error().errorCode().empty());
  62. EXPECT_TRUE(out.result().accountId() == "123456789");
  63. EXPECT_TRUE(out.result().userId() == "any-id");
  64. EXPECT_TRUE(out.result().arn() == "any-arn");
  65. }
  66. TEST(StsClient, getCallerIdentity_ak_error) {
  67. InitializeSdk();
  68. ClientConfiguration configuration;
  69. RpcServiceClient::JsonOutcome xout(Error("any-error-code", "any-error-message"));
  70. mockStsClient client("mock-key", "mock-secret", configuration);
  71. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  72. EXPECT_CALL(client, makeRequest(_, _, _));
  73. Model::GetCallerIdentityRequest req;
  74. StsClient::GetCallerIdentityOutcome out = client.getCallerIdentity(req);
  75. EXPECT_TRUE(out.error().errorCode() == "any-error-code");
  76. ShutdownSdk();
  77. }
  78. TEST(StsClient, getCallerIdentity_callable) {
  79. InitializeSdk();
  80. ClientConfiguration configuration;
  81. RpcServiceClient::JsonOutcome xout("{\"Request\":\"test-req-id\",\"AccountId\":\"123456789\",\"Arn\":\"any-arn\",\"UserId\":\"any-id\"}");
  82. mockStsClient client("mock-key", "mock-secret", configuration);
  83. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  84. EXPECT_CALL(client, makeRequest(_, _, _));
  85. Model::GetCallerIdentityRequest req;
  86. StsClient::GetCallerIdentityOutcomeCallable cb = client.getCallerIdentityCallable(req);
  87. StsClient::GetCallerIdentityOutcome out = cb.get();
  88. EXPECT_TRUE(out.error().errorCode().empty());
  89. EXPECT_TRUE(out.result().accountId() == "123456789");
  90. EXPECT_TRUE(out.result().userId() == "any-id");
  91. EXPECT_TRUE(out.result().arn() == "any-arn");
  92. ShutdownSdk();
  93. }
  94. void cb(const StsClient *client,
  95. const Model::GetCallerIdentityRequest &req,
  96. const StsClient::GetCallerIdentityOutcome& out,
  97. const std::shared_ptr<const AsyncCallerContext>& contex) {
  98. EXPECT_FALSE(out.error().errorCode().empty());
  99. }
  100. TEST(StsClient, getCallerIdentity_async) {
  101. InitializeSdk();
  102. ClientConfiguration configuration("cn-hangzhou");
  103. Model::GetCallerIdentityRequest req;
  104. StsClient client("key", "secret", configuration);
  105. const AsyncCallerContext context;
  106. StsClient::GetCallerIdentityAsyncHandler handler(cb);
  107. client.getCallerIdentityAsync(req, handler, std::make_shared<const AsyncCallerContext>(context));
  108. ShutdownSdk();
  109. }
  110. TEST(StsClient, assumeRole) {
  111. ClientConfiguration configuration;
  112. RpcServiceClient::JsonOutcome xout("{\"RequestId\":\"any-request-id\",\"success\":true,\"AssumedRoleUser\":{\"AssumedRoleId\":\"123456789\",\"Arn\":\"any-arn\"},\"Credentials\":{\"AccessKeyId\":\"any-key\",\"AccessKeySecret\":\"any-secret\",\"Expiration\":\"2019-01-15T16:31:10Z\",\"SecurityToken\":\"any-token\"}}");
  113. mockStsClient client("mock-key", "mock-secret", configuration);
  114. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  115. EXPECT_CALL(client, makeRequest(_, _, _));
  116. Model::AssumeRoleRequest req;
  117. StsClient::AssumeRoleOutcome out = client.assumeRole(req);
  118. EXPECT_TRUE(out.error().errorCode().empty());
  119. EXPECT_TRUE(out.result().assumedRoleUser().arn == "any-arn");
  120. EXPECT_TRUE(out.result().assumedRoleUser().assumedRoleId == "123456789");
  121. EXPECT_TRUE(out.result().credentials().accessKeyId == "any-key");
  122. EXPECT_TRUE(out.result().credentials().accessKeySecret == "any-secret");
  123. EXPECT_TRUE(out.result().credentials().expiration == "2019-01-15T16:31:10Z");
  124. EXPECT_TRUE(out.result().credentials().securityToken == "any-token");
  125. }
  126. TEST(StsClient, assumeRole_callable) {
  127. InitializeSdk();
  128. ClientConfiguration configuration;
  129. RpcServiceClient::JsonOutcome xout("{\"RequestId\":\"any-request-id\",\"success\":true,\"AssumedRoleUser\":{\"AssumedRoleId\":\"123456789\",\"Arn\":\"any-arn\"},\"Credentials\":{\"AccessKeyId\":\"any-key\",\"AccessKeySecret\":\"any-secret\",\"Expiration\":\"2019-01-15T16:31:10Z\",\"SecurityToken\":\"any-token\"}}");
  130. mockStsClient client("mock-key", "mock-secret", configuration);
  131. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  132. EXPECT_CALL(client, makeRequest(_, _, _));
  133. Model::AssumeRoleRequest req;
  134. StsClient::AssumeRoleOutcomeCallable cb = client.assumeRoleCallable(req);
  135. StsClient::AssumeRoleOutcome out = cb.get();
  136. EXPECT_TRUE(out.error().errorCode().empty());
  137. EXPECT_TRUE(out.result().assumedRoleUser().arn == "any-arn");
  138. EXPECT_TRUE(out.result().assumedRoleUser().assumedRoleId == "123456789");
  139. EXPECT_TRUE(out.result().credentials().accessKeyId == "any-key");
  140. EXPECT_TRUE(out.result().credentials().accessKeySecret == "any-secret");
  141. EXPECT_TRUE(out.result().credentials().expiration == "2019-01-15T16:31:10Z");
  142. EXPECT_TRUE(out.result().credentials().securityToken == "any-token");
  143. ShutdownSdk();
  144. }
  145. TEST(StsClient, assumeRole_error) {
  146. ClientConfiguration configuration;
  147. RpcServiceClient::JsonOutcome xout(Error("any-error-code", "any-error-message"));
  148. mockStsClient client("mock-key", "mock-secret", configuration);
  149. DefaultValue<RpcServiceClient::JsonOutcome>::Set(xout);
  150. EXPECT_CALL(client, makeRequest(_, _, _));
  151. Model::AssumeRoleRequest req;
  152. StsClient::AssumeRoleOutcome out = client.assumeRole(req);
  153. EXPECT_TRUE(out.error().errorCode() == "any-error-code");
  154. }
  155. void assumerole_cb(const StsClient *client,
  156. const Model::AssumeRoleRequest &req,
  157. const StsClient::AssumeRoleOutcome& out,
  158. const std::shared_ptr<const AsyncCallerContext>& contex) {
  159. EXPECT_FALSE(out.error().errorCode().empty());
  160. }
  161. TEST(StsClient, assumeRole_async) {
  162. InitializeSdk();
  163. ClientConfiguration configuration("cn-hangzhou");
  164. Model::AssumeRoleRequest req;
  165. req.setRoleArn("acs:ram::1940345800212929:root");
  166. req.setRoleSessionName("test_session");
  167. req.setDurationSeconds(1000);
  168. StsClient client("key", "secret", configuration);
  169. const AsyncCallerContext context;
  170. StsClient::AssumeRoleAsyncHandler handler(assumerole_cb);
  171. client.assumeRoleAsync(req, handler, std::make_shared<const AsyncCallerContext>(context));
  172. ShutdownSdk();
  173. }
  174. }