示例#1
0
    def init_env(self, test_local_config=None, client=None):
        resolver_chain = []

        self._user_customized_endpoint_resolver = UserCustomizedEndpointResolver(
        )
        if test_local_config is None:
            self._local_config_regional_endpoint_resolver = LocalConfigRegionalEndpointResolver(
            )
            self._local_config_global_endpoint_resolver = LocalConfigGlobalEndpointResolver(
            )
        else:
            self._local_config_regional_endpoint_resolver = \
                LocalConfigRegionalEndpointResolver(test_local_config)
            self._local_config_global_endpoint_resolver = \
                LocalConfigGlobalEndpointResolver(test_local_config)
        if client is not None:
            self._location_service_endpoint_resolver = LocationServiceEndpointResolver(
                client)
        else:
            self._location_service_endpoint_resolver = LocationServiceEndpointResolver(
                self.client)

        resolver_chain.append(self._user_customized_endpoint_resolver)
        resolver_chain.append(self._local_config_regional_endpoint_resolver)
        resolver_chain.append(self._local_config_global_endpoint_resolver)
        resolver_chain.append(self._location_service_endpoint_resolver)

        self._endpoint_resolver = ChainedEndpointResolver(resolver_chain)
class DefaultEndpointResolver(EndpointResolver):

    # Deprecated use for add_endpoint and modify_endpoint
    # Not recommended
    predefined_endpoint_resolver = UserCustomizedEndpointResolver()

    def __init__(self, client, user_config=None):

        self._user_customized_endpoint_resolver = UserCustomizedEndpointResolver(
        )

        endpoint_resolvers = [
            self.predefined_endpoint_resolver,
            self._user_customized_endpoint_resolver,
            LocalConfigRegionalEndpointResolver(user_config),
            LocalConfigGlobalEndpointResolver(user_config),
            EndpointResolverRules(),
            LocationServiceEndpointResolver(client),
        ]

        self._resolver = ChainedEndpointResolver(endpoint_resolvers)

    def resolve(self, request):
        return self._resolver.resolve(request)

    def put_endpoint_entry(self, region_id, product_code, endpoint):
        self._user_customized_endpoint_resolver.put_endpoint_entry(
            region_id, product_code, endpoint)
    def test_resolver(self):
        user = UserCustomizedEndpointResolver()
        chain = [
            user
        ]
        resolver = ChainedEndpointResolver(chain)
        # can not be resolved
        request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "")
        with self.assertRaises(ClientException) as ex:
            resolver.resolve(request)
        self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError")
        self.assertEqual(ex.exception.message,
                         "No endpoint for product 'ecs'.\n"
                         "Please check the product code, or set an endpoint for your request "
                         "explicitly.\n"
                         "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n")

        user.put_endpoint_entry("cn-huhehaote", "ecs",
                                "my-endpoint-for-cnhuhehaote-ecs")
        # can not be resolved with cn-hangzhou
        request = ResolveEndpointRequest("cn-hangzhou", "ecs", "", "")
        with self.assertRaises(ClientException) as ex:
            resolver.resolve(request)
        self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError")
        self.assertEqual(
            ex.exception.message, "No endpoint in the region 'cn-hangzhou' for product 'ecs'.\n"
                                  "You can set an endpoint for your request explicitly.\n"
                                  "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n"
        )
        # cn-hangzhou and ecs is valid
        user.put_endpoint_entry("cn-hangzhou", "rds",
                                "my-endpoint-for-cn-hangzhou-rds")
        with self.assertRaises(ClientException) as ex:
            resolver.resolve(request)
        self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError")
        self.assertEqual(
            ex.exception.message, "No endpoint in the region 'cn-hangzhou' for product 'ecs'.\n"
                                  "You can set an endpoint for your request explicitly.\n"
                                  "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n")
        # can be resolved
        request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "")
        self.assertEqual(resolver.resolve(request),
                         "my-endpoint-for-cnhuhehaote-ecs")

        chain = [
            LocalConfigRegionalEndpointResolver(),
            user
        ]
        resolver = ChainedEndpointResolver(chain)
        request.request_network = 'inner'
        endpoint = resolver.resolve(request)
        self.assertEqual('my-endpoint-for-cnhuhehaote-ecs', endpoint)
示例#4
0
    def __init__(self, client, user_config=None):

        self._user_customized_endpoint_resolver = UserCustomizedEndpointResolver()

        endpoint_resolvers = [
            self.predefined_endpoint_resolver,
            self._user_customized_endpoint_resolver,
            LocalConfigRegionalEndpointResolver(user_config),
            LocalConfigGlobalEndpointResolver(user_config),
            LocationServiceEndpointResolver(client),
        ]

        self._resolver = ChainedEndpointResolver(endpoint_resolvers)
示例#5
0
 def test_resolver(self):
     resolver = UserCustomizedEndpointResolver()
     request = ResolveEndpointRequest("", "", "", "")
     self.assertEqual(resolver.resolve(request), None)
     self.assertEqual(resolver._make_endpoint_entry_key(
         "ecs", "cn-huhehaote"), "ecs.cn-huhehaote")
     request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "")
     self.assertEqual(resolver.resolve(request), None)
     self.assertFalse(resolver.is_region_id_valid("cn-huhehaote"))
     resolver.put_endpoint_entry(
         "cn-huhehaote", "ecs", "my-endpoint-for-cnhuhehaote-ecs")
     request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "")
     self.assertEqual(resolver.resolve(request),
                      "my-endpoint-for-cnhuhehaote-ecs")
     self.assertTrue(resolver.is_region_id_valid("cn-huhehaote"))
     resolver.reset()
     self.assertEqual(resolver.resolve(request), None)
示例#6
0
 def test_resolver(self):
     user = UserCustomizedEndpointResolver()
     chain = [user]
     resolver = ChainedEndpointResolver(chain)
     # can not be resolved
     request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "")
     with self.assertRaises(ClientException) as ex:
         resolver.resolve(request)
     self.assertEqual(ex.exception.error_code, "SDK.EndpointResolvingError")
     self.assertEqual(
         ex.exception.message, "No endpoint for product 'ecs'. \n"
         "Please check the product code, or set an endpoint for your request explicitly.\n"
         "See https://www.alibabacloud.com/help/doc-detail/92074.htm\n")
     user.put_endpoint_entry("cn-huhehaote", "ecs",
                             "my-endpoint-for-cnhuhehaote-ecs")
     # can be resolved
     request = ResolveEndpointRequest("cn-huhehaote", "ecs", "", "")
     self.assertEqual(resolver.resolve(request),
                      "my-endpoint-for-cnhuhehaote-ecs")
 def setUp(self):
     SDKTestBase.setUp(self)
     DefaultEndpointResolver.predefined_endpoint_resolver = UserCustomizedEndpointResolver(
     )