endpointprovider_ut.cc 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include "gtest/gtest.h"
  4. #include "gmock/gmock.h"
  5. #include "alibabacloud/core/EndpointProvider.h"
  6. using namespace std;
  7. using namespace AlibabaCloud;
  8. using namespace AlibabaCloud::Location;
  9. using ::testing::_;
  10. using ::testing::DefaultValue;
  11. class mockEndpointProvider: public EndpointProvider {
  12. public:
  13. mockEndpointProvider(
  14. const Credentials &credentials,
  15. const ClientConfiguration &configuration,
  16. const std::string &regionId,
  17. const std::string &product,
  18. const std::string &serviceCode = std::string(),
  19. int durationSeconds = 3600
  20. ):
  21. EndpointProvider(credentials, configuration, regionId, product, serviceCode, durationSeconds) {}
  22. MOCK_CONST_METHOD1(describeEndpoints, LocationClient::DescribeEndpointsOutcome(const Model::DescribeEndpointsRequest &request));
  23. };
  24. TEST(EndpointProvider, service_code_empty) {
  25. const Credentials sub_user_credentials("key", "secret");
  26. ClientConfiguration config; // default is cn-hangzhou
  27. // config.setEndpoint("test-endpoint"); // endpoint should be empty
  28. // invalid product
  29. mockEndpointProvider provider1(sub_user_credentials, config, config.regionId(), "non-exist-product", "");
  30. EndpointProvider::EndpointOutcome out1 = provider1.getEndpoint();
  31. EXPECT_TRUE(out1.error().errorCode() == "InvalidRegionId");
  32. // ecs has no global_endpoint
  33. mockEndpointProvider provider2(sub_user_credentials, config, config.regionId(), "ecs", "");
  34. EndpointProvider::EndpointOutcome out2 = provider2.getEndpoint();
  35. EXPECT_TRUE(out2.error().errorCode() == "InvalidRegionId");
  36. // aegis has global_endpoint
  37. mockEndpointProvider provider3(sub_user_credentials, config, config.regionId(), "aegis", "");
  38. EndpointProvider::EndpointOutcome out3 = provider3.getEndpoint();
  39. EXPECT_TRUE(out3.error().errorCode().empty());
  40. EXPECT_TRUE(out3.result() == "aegis.cn-hangzhou.aliyuncs.com");
  41. // arms has regional_endpoint, get from region
  42. mockEndpointProvider provider4(sub_user_credentials, config, config.regionId(), "arms", "");
  43. EndpointProvider::EndpointOutcome out4 = provider4.getEndpoint();
  44. EXPECT_TRUE(out4.error().errorCode().empty());
  45. EXPECT_TRUE(out4.result() == "arms.cn-hangzhou.aliyuncs.com");
  46. }
  47. TEST(EndpointProvider, mock_remote) {
  48. const Credentials sub_user_credentials("key", "secret");
  49. ClientConfiguration config; // default is cn-hangzhou
  50. // config.setEndpoint("test-endpoint");
  51. mockEndpointProvider provider(sub_user_credentials, config, config.regionId(), "ecs", "ecs");
  52. Model::DescribeEndpointsRequest request;
  53. 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\"]}}]}}";
  54. Location::Model::DescribeEndpointsResult res(payload);
  55. LocationClient::DescribeEndpointsOutcome xout(res);
  56. DefaultValue<LocationClient::DescribeEndpointsOutcome>::Set(xout);
  57. EXPECT_CALL(provider, describeEndpoints(_));
  58. EndpointProvider::EndpointOutcome out = provider.getEndpoint();
  59. EXPECT_TRUE(out.error().errorCode().empty());
  60. EXPECT_TRUE(out.result() == "test-ep");
  61. }
  62. TEST(EndpointProvider, mock_remote_error) {
  63. const Credentials sub_user_credentials("key", "secret");
  64. ClientConfiguration config; // default is cn-hangzhou
  65. // config.setEndpoint("test-endpoint");
  66. mockEndpointProvider provider(sub_user_credentials, config, config.regionId(), "ecs", "ecs");
  67. LocationClient::DescribeEndpointsOutcome xout(Error("any-error-code", "any-error-message"));
  68. DefaultValue<LocationClient::DescribeEndpointsOutcome>::Set(xout);
  69. EXPECT_CALL(provider, describeEndpoints(_));
  70. EndpointProvider::EndpointOutcome out = provider.getEndpoint();
  71. EXPECT_TRUE(out.error().errorCode() == "any-error-code");
  72. }