Added iam backend to servers, added some tests to check backend

This commit is contained in:
Jot 2015-08-03 00:31:36 +02:00
parent 71d2e1d7de
commit 42b95023f5
4 changed files with 36 additions and 20 deletions

View File

@ -8,6 +8,7 @@ from moto.ec2 import ec2_backend
from moto.elb import elb_backend from moto.elb import elb_backend
from moto.emr import emr_backend from moto.emr import emr_backend
from moto.glacier import glacier_backend from moto.glacier import glacier_backend
from moto.iam import iam_backend
from moto.kinesis import kinesis_backend from moto.kinesis import kinesis_backend
from moto.kms import kms_backend from moto.kms import kms_backend
from moto.rds import rds_backend from moto.rds import rds_backend
@ -29,6 +30,7 @@ BACKENDS = {
'elb': elb_backend, 'elb': elb_backend,
'emr': emr_backend, 'emr': emr_backend,
'glacier': glacier_backend, 'glacier': glacier_backend,
'iam': iam_backend,
'kinesis': kinesis_backend, 'kinesis': kinesis_backend,
'kms': kms_backend, 'kms': kms_backend,
'redshift': redshift_backend, 'redshift': redshift_backend,

View File

@ -559,8 +559,7 @@ USER_TEMPLATE = """<{{ action }}UserResponse>
<Path>{{ user.path }}</Path> <Path>{{ user.path }}</Path>
<UserName>{{ user.name }}</UserName> <UserName>{{ user.name }}</UserName>
<UserId>{{ user.id }}</UserId> <UserId>{{ user.id }}</UserId>
<Arn>arn:aws:iam::123456789012:user/{{ user.path }}/{{ user.name }} <Arn>arn:aws:iam::123456789012:user/{{ user.path }}/{{ user.name }}</Arn>
</Arn>
</User> </User>
</{{ action }}UserResult> </{{ action }}UserResult>
<ResponseMetadata> <ResponseMetadata>

View File

@ -1,11 +1,15 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import json
import re import re
import sys import sys
import argparse import argparse
from six.moves.urllib.parse import urlencode
from threading import Lock from threading import Lock
from flask import Flask from flask import Flask
from flask.testing import FlaskClient
from werkzeug.routing import BaseConverter from werkzeug.routing import BaseConverter
from werkzeug.serving import run_simple from werkzeug.serving import run_simple
@ -60,18 +64,38 @@ class RegexConverter(BaseConverter):
self.regex = items[0] 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): def create_backend_app(service):
from werkzeug.routing import Map from werkzeug.routing import Map
# Create the backend_app # Create the backend_app
backend_app = Flask(__name__) backend_app = Flask(__name__)
backend_app.debug = True backend_app.debug = True
backend_app.service = service
# Reset view functions to reset the app # Reset view functions to reset the app
backend_app.view_functions = {} backend_app.view_functions = {}
backend_app.url_map = Map() backend_app.url_map = Map()
backend_app.url_map.converters['regex'] = RegexConverter backend_app.url_map.converters['regex'] = RegexConverter
backend = BACKENDS[service] backend = BACKENDS[service]
for url_path, handler in backend.flask_paths.items(): for url_path, handler in backend.flask_paths.items():
if handler.__name__ == 'dispatch': if handler.__name__ == 'dispatch':
@ -91,6 +115,7 @@ def create_backend_app(service):
view_func=convert_flask_to_httpretty_response(handler), view_func=convert_flask_to_httpretty_response(handler),
) )
backend_app.test_client_class = AWSTestHelper
return backend_app return backend_app

View File

@ -15,27 +15,17 @@ Test the different server responses
def test_cloudformation_server_get(): def test_cloudformation_server_get():
backend = server.create_backend_app("cloudformation") backend = server.create_backend_app("cloudformation")
stack_name = 'test stack' stack_name = 'test stack'
test_client = backend.test_client() test_client = backend.test_client(service="cloudformation")
template_body = { template_body = {
"Resources": {}, "Resources": {},
} }
res = test_client.get( res = test_client.action_json("CreateStack", StackName=stack_name,
'/?{0}'.format( TemplateBody=json.dumps(template_body))
urlencode({ stack_id = res["CreateStackResponse"]["CreateStackResult"]["StackId"]
"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.get( data = test_client.action_data("ListStacks")
'/?Action=ListStacks',
headers={"Host": "cloudformation.us-east-1.amazonaws.com"} stacks = re.search("<StackId>(.*)</StackId>", data)
)
stacks = re.search("<StackId>(.*)</StackId>", res.data.decode('utf-8'))
list_stack_id = stacks.groups()[0] list_stack_id = stacks.groups()[0]
assert stack_id == list_stack_id assert stack_id == list_stack_id