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.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,

View File

@ -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>

View File

@ -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

View File

@ -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