Added iam backend to servers, added some tests to check backend
This commit is contained in:
parent
71d2e1d7de
commit
42b95023f5
@ -8,6 +8,7 @@ from moto.ec2 import ec2_backend
|
||||
from moto.elb import elb_backend
|
||||
from moto.emr import emr_backend
|
||||
from moto.glacier import glacier_backend
|
||||
from moto.iam import iam_backend
|
||||
from moto.kinesis import kinesis_backend
|
||||
from moto.kms import kms_backend
|
||||
from moto.rds import rds_backend
|
||||
@ -29,6 +30,7 @@ BACKENDS = {
|
||||
'elb': elb_backend,
|
||||
'emr': emr_backend,
|
||||
'glacier': glacier_backend,
|
||||
'iam': iam_backend,
|
||||
'kinesis': kinesis_backend,
|
||||
'kms': kms_backend,
|
||||
'redshift': redshift_backend,
|
||||
|
@ -559,8 +559,7 @@ USER_TEMPLATE = """<{{ action }}UserResponse>
|
||||
<Path>{{ user.path }}</Path>
|
||||
<UserName>{{ user.name }}</UserName>
|
||||
<UserId>{{ user.id }}</UserId>
|
||||
<Arn>arn:aws:iam::123456789012:user/{{ user.path }}/{{ user.name }}
|
||||
</Arn>
|
||||
<Arn>arn:aws:iam::123456789012:user/{{ user.path }}/{{ user.name }}</Arn>
|
||||
</User>
|
||||
</{{ action }}UserResult>
|
||||
<ResponseMetadata>
|
||||
|
@ -1,11 +1,15 @@
|
||||
from __future__ import unicode_literals
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
import argparse
|
||||
|
||||
from six.moves.urllib.parse import urlencode
|
||||
|
||||
from threading import Lock
|
||||
|
||||
from flask import Flask
|
||||
from flask.testing import FlaskClient
|
||||
from werkzeug.routing import BaseConverter
|
||||
from werkzeug.serving import run_simple
|
||||
|
||||
@ -60,18 +64,38 @@ class RegexConverter(BaseConverter):
|
||||
self.regex = items[0]
|
||||
|
||||
|
||||
class AWSTestHelper(FlaskClient):
|
||||
|
||||
def action_data(self, action_name, **kwargs):
|
||||
"""
|
||||
Method calls resource with action_name and returns data of response.
|
||||
"""
|
||||
opts = {"Action": action_name}
|
||||
opts.update(kwargs)
|
||||
res = self.get("/?{0}".format(urlencode(opts)),
|
||||
headers={"Host": "{0}.us-east-1.amazonaws.com".format(self.application.service)})
|
||||
return res.data.decode("utf-8")
|
||||
|
||||
def action_json(self, action_name, **kwargs):
|
||||
"""
|
||||
Method calls resource with action_name and returns object obtained via
|
||||
deserialization of output.
|
||||
"""
|
||||
return json.loads(self.action_data(action_name, **kwargs))
|
||||
|
||||
|
||||
def create_backend_app(service):
|
||||
from werkzeug.routing import Map
|
||||
|
||||
# Create the backend_app
|
||||
backend_app = Flask(__name__)
|
||||
backend_app.debug = True
|
||||
backend_app.service = service
|
||||
|
||||
# Reset view functions to reset the app
|
||||
backend_app.view_functions = {}
|
||||
backend_app.url_map = Map()
|
||||
backend_app.url_map.converters['regex'] = RegexConverter
|
||||
|
||||
backend = BACKENDS[service]
|
||||
for url_path, handler in backend.flask_paths.items():
|
||||
if handler.__name__ == 'dispatch':
|
||||
@ -91,6 +115,7 @@ def create_backend_app(service):
|
||||
view_func=convert_flask_to_httpretty_response(handler),
|
||||
)
|
||||
|
||||
backend_app.test_client_class = AWSTestHelper
|
||||
return backend_app
|
||||
|
||||
|
||||
|
@ -15,27 +15,17 @@ Test the different server responses
|
||||
def test_cloudformation_server_get():
|
||||
backend = server.create_backend_app("cloudformation")
|
||||
stack_name = 'test stack'
|
||||
test_client = backend.test_client()
|
||||
test_client = backend.test_client(service="cloudformation")
|
||||
template_body = {
|
||||
"Resources": {},
|
||||
}
|
||||
res = test_client.get(
|
||||
'/?{0}'.format(
|
||||
urlencode({
|
||||
"Action": "CreateStack",
|
||||
"StackName": stack_name,
|
||||
"TemplateBody": json.dumps(template_body)
|
||||
})
|
||||
),
|
||||
headers={"Host": "cloudformation.us-east-1.amazonaws.com"}
|
||||
)
|
||||
stack_id = json.loads(res.data.decode("utf-8"))["CreateStackResponse"]["CreateStackResult"]["StackId"]
|
||||
res = test_client.action_json("CreateStack", StackName=stack_name,
|
||||
TemplateBody=json.dumps(template_body))
|
||||
stack_id = res["CreateStackResponse"]["CreateStackResult"]["StackId"]
|
||||
|
||||
res = test_client.get(
|
||||
'/?Action=ListStacks',
|
||||
headers={"Host": "cloudformation.us-east-1.amazonaws.com"}
|
||||
)
|
||||
stacks = re.search("<StackId>(.*)</StackId>", res.data.decode('utf-8'))
|
||||
data = test_client.action_data("ListStacks")
|
||||
|
||||
stacks = re.search("<StackId>(.*)</StackId>", data)
|
||||
|
||||
list_stack_id = stacks.groups()[0]
|
||||
assert stack_id == list_stack_id
|
||||
|
Loading…
Reference in New Issue
Block a user