Mock out instance metadata. Make basic connection with iam roles work. Closes #3.
This commit is contained in:
parent
1cc0e0eac7
commit
9e9e057289
@ -2,6 +2,7 @@ import functools
|
|||||||
import re
|
import re
|
||||||
|
|
||||||
from moto.packages.httpretty import HTTPretty
|
from moto.packages.httpretty import HTTPretty
|
||||||
|
from .responses import metadata_response
|
||||||
from .utils import convert_regex_to_flask_path
|
from .utils import convert_regex_to_flask_path
|
||||||
|
|
||||||
|
|
||||||
@ -30,6 +31,13 @@ class MockAWS(object):
|
|||||||
body=value,
|
body=value,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Mock out localhost instance metadata
|
||||||
|
HTTPretty.register_uri(
|
||||||
|
method=method,
|
||||||
|
uri=re.compile('http://169.254.169.254/latest/meta-data/.*'),
|
||||||
|
body=metadata_response
|
||||||
|
)
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
HTTPretty.disable()
|
HTTPretty.disable()
|
||||||
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
|
||||||
from urlparse import parse_qs
|
from urlparse import parse_qs
|
||||||
|
|
||||||
from moto.core.utils import headers_to_dict, camelcase_to_underscores, method_names_from_class
|
from moto.core.utils import headers_to_dict, camelcase_to_underscores, method_names_from_class
|
||||||
@ -24,3 +27,27 @@ class BaseResponse(object):
|
|||||||
method = getattr(self, action)
|
method = getattr(self, action)
|
||||||
return method()
|
return method()
|
||||||
raise NotImplementedError("The {} action has not been implemented".format(action))
|
raise NotImplementedError("The {} action has not been implemented".format(action))
|
||||||
|
|
||||||
|
|
||||||
|
def metadata_response(uri, body, headers):
|
||||||
|
"""
|
||||||
|
Mock response for localhost metadata
|
||||||
|
|
||||||
|
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AESDG-chapter-instancedata.html
|
||||||
|
"""
|
||||||
|
|
||||||
|
tomorrow = datetime.datetime.now() + datetime.timedelta(days=1)
|
||||||
|
path = uri.path.lstrip("/latest/meta-data/")
|
||||||
|
if path == '':
|
||||||
|
return "iam/"
|
||||||
|
elif path == 'iam/':
|
||||||
|
return 'security-credentials/'
|
||||||
|
elif path == 'iam/security-credentials/':
|
||||||
|
return 'default-role'
|
||||||
|
elif path == 'iam/security-credentials/default-role':
|
||||||
|
return json.dumps(dict(
|
||||||
|
AccessKeyId="test-key",
|
||||||
|
SecretAccessKey="test-secret-key",
|
||||||
|
Token="test-session-token",
|
||||||
|
Expiration=tomorrow.strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||||
|
))
|
||||||
|
@ -9,6 +9,11 @@ Test the different ways that the decorator can be used
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
@mock_ec2
|
||||||
|
def test_basic_connect():
|
||||||
|
conn = boto.connect_ec2()
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
@mock_ec2
|
||||||
def test_basic_decorator():
|
def test_basic_decorator():
|
||||||
conn = boto.connect_ec2('the_key', 'the_secret')
|
conn = boto.connect_ec2('the_key', 'the_secret')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user