Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions botocore/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -783,7 +783,7 @@ def _create_fetcher(self):


class InstanceMetadataRegionFetcher(IMDSFetcher):
_URL_PATH = 'latest/meta-data/placement/availability-zone/'
_URL_PATH = 'latest/meta-data/placement/region'

def retrieve_region(self):
"""Get the current region from the instance metadata service.
Expand Down Expand Up @@ -815,9 +815,7 @@ def _get_region(self):
retry_func=self._default_retry,
token=token,
)
availability_zone = response.text
region = availability_zone[:-1]
return region
return response.text


def merge_dicts(dict1, dict2, append_lists=False):
Expand Down
34 changes: 34 additions & 0 deletions tests/unit/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3372,6 +3372,40 @@ def test_expiry_extension_with_bad_datetime(self):
assert results['expiry_time'] == bad_datetime


class TestInstanceMetadataRegionFetcher(unittest.TestCase):
_IMDS_RESPONSES = {
'api/token': b'my-token',
'placement/region': b'us-east-1',
'placement/availability-zone': b'us-east-1-atl-2a',
}

def setUp(self):
urllib3_session_send = 'botocore.httpsession.URLLib3Session.send'
self._urllib3_patch = mock.patch(urllib3_session_send)
self._send = self._urllib3_patch.start()
self._send.side_effect = self._get_imds_response

def tearDown(self):
self._urllib3_patch.stop()

def _get_imds_response(self, request):
for path, body in self._IMDS_RESPONSES.items():
if path in request.url:
return botocore.awsrequest.AWSResponse(
url=request.url,
status_code=200,
headers={},
raw=RawResponse(body),
)
raise ValueError(f'Unexpected IMDS request: {request.url}')

def _make_fetcher(self):
return InstanceMetadataRegionFetcher()

def test_retrieve_region_local_zone_instance(self):
self.assertEqual(self._make_fetcher().retrieve_region(), 'us-east-1')


class TestIMDSRegionProvider(unittest.TestCase):
def setUp(self):
self.environ = {}
Expand Down
Loading