endpointprovider_ut.cc 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include "gtest/gtest.h"
  4. #include "gmock/gmock.h"
  5. #include "utils.h"
  6. #include "alibabacloud/core/EndpointProvider.h"
  7. using namespace std;
  8. using namespace AlibabaCloud;
  9. using namespace AlibabaCloud::Location;
  10. using ::testing::_;
  11. using ::testing::DefaultValue;
  12. class mockEndpointProvider: public EndpointProvider {
  13. public:
  14. mockEndpointProvider(
  15. const Credentials &credentials,
  16. const ClientConfiguration &configuration,
  17. const std::string &regionId,
  18. const std::string &product,
  19. const std::string &serviceCode = std::string(),
  20. int durationSeconds = 3600
  21. ):
  22. EndpointProvider(credentials, configuration, regionId, product, serviceCode, durationSeconds) {}
  23. MOCK_CONST_METHOD1(describeEndpoints, LocationClient::DescribeEndpointsOutcome(const Model::DescribeEndpointsRequest &request));
  24. };
  25. TEST(EndpointProvider, basic_function) {
  26. const Credentials sub_user_credentials("key", "secret");
  27. ClientConfiguration config; // default is cn-hangzhou
  28. // user specified has 1st priority, even it is a wrong configuration
  29. config.setEndpoint("test-endpoint");
  30. mockEndpointProvider p0(sub_user_credentials, config, config.regionId(), "non-exist-product", "");
  31. EndpointProvider::EndpointOutcome out0 = p0.getEndpoint();
  32. EXPECT_TRUE(out0.result() == "test-endpoint");
  33. config.setEndpoint(""); // set endpoint to empty
  34. // invalid product
  35. mockEndpointProvider p1(sub_user_credentials, config, config.regionId(), "non-exist-Product", "");
  36. EndpointProvider::EndpointOutcome out1 = p1.getEndpoint();
  37. EXPECT_TRUE(out1.error().errorCode() == "InvalidRegionId");
  38. EXPECT_TRUE(out1.error().errorMessage() == "Product[non-exist-product] at region[cn-hangzhou] does not exist.");
  39. mockEndpointProvider p2(sub_user_credentials, config, "non-exist-region", "ecs", "");
  40. EndpointProvider::EndpointOutcome out2 = p2.getEndpoint();
  41. EXPECT_TRUE(out2.error().errorCode() == "InvalidRegionId");
  42. EXPECT_TRUE(out2.error().errorMessage() == "Product[ecs] at region[non-exist-region] does not exist.");
  43. // local_endpoints can provide the endpoint
  44. mockEndpointProvider p3(sub_user_credentials, config, config.regionId(), "ecs", "");
  45. EndpointProvider::EndpointOutcome out3 = p3.getEndpoint();
  46. EXPECT_TRUE(out3.result() == "ecs-cn-hangzhou.aliyuncs.com");
  47. // aegis has global_endpoint
  48. mockEndpointProvider p4(sub_user_credentials, config, config.regionId(), "aegis", "");
  49. EndpointProvider::EndpointOutcome out4 = p4.getEndpoint();
  50. EXPECT_TRUE(out4.result() == "aegis.cn-hangzhou.aliyuncs.com");
  51. // aegis has global_endpoint
  52. mockEndpointProvider p5(sub_user_credentials, config, config.regionId(), "Aegis", "");
  53. EndpointProvider::EndpointOutcome out5 = p5.getEndpoint();
  54. EXPECT_TRUE(out5.result() == "aegis.cn-hangzhou.aliyuncs.com");
  55. mockEndpointProvider p6(sub_user_credentials, config, "cn-shanghai", "ensdisk", "");
  56. EndpointProvider::EndpointOutcome out6 = p6.getEndpoint();
  57. EXPECT_TRUE(out6.error().errorCode() == "InvalidRegionId");
  58. EXPECT_TRUE(out6.error().errorMessage() == "Product[ensdisk] at region[cn-shanghai] does not exist.");
  59. }
  60. TEST(EndpointProvider, mock_remote) {
  61. const Credentials sub_user_credentials("key", "secret");
  62. ClientConfiguration config; // default is cn-hangzhou
  63. // config.setEndpoint("test-endpoint");
  64. mockEndpointProvider provider(sub_user_credentials, config, config.regionId(), "fake-ecs", "fake-ecs");
  65. Model::DescribeEndpointsRequest request;
  66. const string payload = "{\"RequestId\":\"test-request-id\",\"Success\":true,\"Endpoints\":{\"Endpoint\":[{\"Endpoint\":\"test-ep\",\"Id\":\"test-id\",\"Namespace\":\"test-namespace\",\"SerivceCode\":\"test-service-code\",\"Type\":\"test-type\",\"Protocols\":{\"Protocols\":[\"a\",\"b\"]}}]}}";
  67. Location::Model::DescribeEndpointsResult res(payload);
  68. LocationClient::DescribeEndpointsOutcome xout(res);
  69. DefaultValue<LocationClient::DescribeEndpointsOutcome>::Set(xout);
  70. EXPECT_CALL(provider, describeEndpoints(_));
  71. EndpointProvider::EndpointOutcome out = provider.getEndpoint();
  72. EXPECT_TRUE(out.error().errorCode().empty());
  73. EXPECT_TRUE(out.result() == "test-ep");
  74. }
  75. TEST(EndpointProvider, mock_remote_error) {
  76. const Credentials sub_user_credentials("key", "secret");
  77. ClientConfiguration config; // default is cn-hangzhou
  78. mockEndpointProvider provider(sub_user_credentials, config, config.regionId(), "fake-ecs", "fake-ecs");
  79. LocationClient::DescribeEndpointsOutcome xout(Error("any-error-code", "any-error-message"));
  80. DefaultValue<LocationClient::DescribeEndpointsOutcome>::Set(xout);
  81. EXPECT_CALL(provider, describeEndpoints(_));
  82. EndpointProvider::EndpointOutcome out = provider.getEndpoint();
  83. EXPECT_TRUE(out.error().errorCode() == "any-error-code");
  84. }
  85. TEST(EndpointProvider, serial_02) {
  86. utUtils utils;
  87. string key = utils.get_env("ENV_AccessKeyId");
  88. string secret = utils.get_env("ENV_AccessKeySecret");
  89. Credentials credentials(key, secret);
  90. ClientConfiguration configuration("cn-hangzhou");
  91. EndpointProvider ep(credentials, configuration, "cn-hangzhou", "arms", "arms");
  92. EndpointProvider::EndpointOutcome out = ep.getEndpoint();
  93. EXPECT_EQ("arms.cn-hangzhou.aliyuncs.com", out.result());
  94. EndpointProvider p1(credentials, configuration, "cn-shanghai", "fake-ecs", "fake-ecs");
  95. EndpointProvider::EndpointOutcome out1 = p1.getEndpoint();
  96. EXPECT_EQ("InvalidProduct", out1.error().errorCode());
  97. EXPECT_EQ("Prodcut[fake-ecs] does not exist.", out1.error().errorMessage());
  98. }