Functional tests for environment template functionality

It has the functional tests for the blueprint environment-template, including the management
of environment templates (creation, deletion, updating) and the creation of an environment
from the template.

Change-Id: I8fc5c7e1f6a4354b47f087fe141442ab604cfdd9
This commit is contained in:
Henar Muñoz Frutos 2015-03-15 13:08:53 +01:00
parent 38993f07a6
commit 58dbdd25d3
3 changed files with 297 additions and 8 deletions

View File

@ -44,9 +44,8 @@ class MuranoClient(rest_client.RestClient):
return resp, json.loads(body)
def create_environment(self, name):
post_body = '{"name": "%s"}' % name
resp, body = self.post('v1/environments', post_body)
body = {'name': name}
resp, body = self.post('v1/environments', json.dumps(body))
return resp, json.loads(body)
@ -110,7 +109,7 @@ class MuranoClient(rest_client.RestClient):
resp, body = self.post(url.format(environment_id, session_id),
post_body)
return resp, json.loads(body)
return resp
def create_service(self, environment_id, session_id, post_body):
post_body = json.dumps(post_body)
@ -224,6 +223,94 @@ class MuranoClient(rest_client.RestClient):
return resp, json.loads(body)
def get_env_templates_list(self):
"""Check the environment templates deployed by the user."""
resp, body = self.get('v1/templates')
return resp, json.loads(body)
def create_env_template(self, env_template_name):
"""Check the creation of an environment template."""
body = {'name': env_template_name}
resp, body = self.post('v1/templates', json.dumps(body))
return resp, json.loads(body)
def create_env_template_with_apps(self, env_template_name):
"""Check the creation of an environment template."""
body = {'name': env_template_name}
body['services'] = [self._get_demo_app()]
resp, body = self.post('v1/templates', json.dumps(body))
return resp, json.loads(body)
def create_app_in_env_template(self, env_template_name):
"""Check the creation of an environment template."""
resp, body = self.post('v1/templates/{0}/services'.
format(env_template_name),
json.dumps(self._get_demo_app()))
return resp, json.loads(body)
def get_apps_in_env_template(self, env_template_name):
"""Check getting information about applications
in an environment template.
"""
resp, body = self.get('v1/templates/{0}/services'.
format(env_template_name))
return resp, json.loads(body)
def get_app_in_env_template(self, env_template_name, app_name):
"""Check getting information about an application
in an environment template.
"""
resp, body = self.get('v1/templates/{0}/services/{1}'.
format(env_template_name, app_name))
return resp, json.loads(body)
def delete_app_in_env_template(self, env_template_name):
"""Delete an application in an environment template."""
resp, body = self.delete('v1/templates/{0}/services/{1}'.
format(env_template_name, 'ID'))
return resp
def delete_env_template(self, env_template_id):
"""Check the deletion of an environment template."""
resp, body = self.delete('v1/templates/{0}'.format(env_template_id))
return resp
def get_env_template(self, env_template_id):
"""Check getting information of an environment template."""
resp, body = self.get('v1/templates/{0}'.format(env_template_id))
return resp, json.loads(body)
def create_env_from_template(self, env_template_id, env_name):
"""Check creating an environment from a template."""
body = {'name': env_name}
resp, body = self.post('v1/templates/{0}/create-environment'.
format(env_template_id),
json.dumps(body))
return resp, json.loads(body)
def _get_demo_app(self):
return {
"instance": {
"assignFloatingIp": "true",
"keyname": "mykeyname",
"image": "cloud-fedora-v3",
"flavor": "m1.medium",
"?": {
"type": "io.murano.resources.LinuxMuranoInstance",
"id": "ef984a74-29a4-45c0-b1dc-2ab9f075732e"
}
},
"name": "orion",
"port": "8080",
"?": {
"type": "io.murano.apps.apache.Tomcat",
"id": "ID"
}
}
class TestCase(test.BaseTestCase):
@classmethod
@ -241,6 +328,7 @@ class TestCase(test.BaseTestCase):
super(TestCase, self).setUp()
self.environments = []
self.env_templates = []
def tearDown(self):
super(TestCase, self).tearDown()
@ -251,12 +339,24 @@ class TestCase(test.BaseTestCase):
except exceptions.NotFound:
pass
for env_template in self.env_templates:
try:
self.client.delete_env_template(env_template['id'])
except exceptions.NotFound:
pass
def create_environment(self, name):
environment = self.client.create_environment(name)[1]
self.environments.append(environment)
return environment
def create_env_template(self, name):
env_template = self.client.create_env_template(name)[1]
self.env_templates.append(env_template)
return env_template
def create_demo_service(self, environment_id, session_id, client=None):
if not client:
client = self.client

View File

@ -0,0 +1,189 @@
# Copyright (c) 2015 Telefonica I+D.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from tempest.test import attr
from tempest_lib import exceptions
from murano.tests.functional.api import base
class TestEnvTemplate(base.TestCase):
@attr(type='smoke')
def test_list_env_templates(self):
"""Check getting the list of environment templates."""
resp, body = self.client.get_env_templates_list()
self.assertIn('templates', body)
self.assertEqual(resp.status, 200)
@attr(type='smoke')
def test_create_and_delete_env_template(self):
"""It checks the creation and deletion of an enviroment template."""
env_templates_list_start = self.client.get_env_templates_list()[1]
resp, env_template = self.client.create_env_template('test_env_temp')
self.env_templates.append(env_template)
self.assertEqual(resp.status, 200)
self.assertEqual('test_env_temp', env_template['name'])
env_templates_list = self.client.get_env_templates_list()[1]
self.assertEqual(len(env_templates_list_start['templates']) + 1,
len(env_templates_list['templates']))
self.client.delete_env_template(env_template['id'])
env_templates_list = self.client.get_env_templates_list()[1]
self.assertEqual(len(env_templates_list_start['templates']),
len(env_templates_list['templates']))
self.env_templates.pop(self.env_templates.index(env_template))
@attr(type='smoke')
def test_get_env_template(self):
"""Check getting information about an environment template."""
resp, env_template = self.client.create_env_template('test_env_temp')
resp, env_obtained_template =\
self.client.get_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
self.assertEqual(env_obtained_template['name'], 'test_env_temp')
self.client.delete_env_template(env_template['id'])
@attr(type='smoke')
def test_create_env_template_with_apps(self):
"""Check the creation of an environment template with applications."""
resp, env_template = \
self.client.create_env_template_with_apps('test_env_temp')
self.assertEqual(resp.status, 200)
resp, apps_template = \
self.client.get_apps_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
self.assertEqual(len(apps_template), 1)
self.client.delete_env_template(env_template['id'])
@attr(type='smoke')
def test_create_app_in_env_template(self):
"""Check the creationg of applications in an environment template."""
resp, env_template = self.client.create_env_template('test_env_temp')
resp, apps = self.client.get_apps_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
self.assertEqual(len(apps), 0)
resp, apps = self.client.create_app_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
resp, apps = self.client.get_apps_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
self.assertEqual(len(apps), 1)
self.client.delete_env_template(env_template['id'])
@attr(type='smoke')
def test_delete_app_in_env_template(self):
"""Check the deletion of applications in an environmente template."""
resp, env_template = self.client.create_env_template('test_env_temp')
resp, apps = self.client.create_app_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
resp, apps = self.client.get_apps_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
self.assertEqual(len(apps), 1)
resp = self.client.delete_app_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
resp, apps = self.client.get_apps_in_env_template(env_template['id'])
self.assertEqual(resp.status, 200)
self.assertEqual(len(apps), 0)
self.client.delete_env_template(env_template['id'])
@attr(type='smoke')
def test_create_env_from_template(self):
"""Check the creation of an environment from a template."""
resp, env_template = \
self.client.create_env_template_with_apps('test_env_temp')
self.assertEqual(resp.status, 200)
resp, env = self.client.create_env_from_template(env_template['id'],
"env")
self.assertEqual(resp.status, 200)
self.client.delete_env_template(env_template['id'])
self.client.delete_environment(env['environment_id'])
@attr(type='negative')
def test_delete_environment_with_wrong_env_id(self):
"""Check the deletion of an wrong environment template request."""
self.assertRaises(exceptions.NotFound,
self.client.delete_env_template,
None)
@attr(type='negative')
def test_create_environment_with_wrong_payload(self):
"""Check the deletion of an wrong environment template request."""
self.assertRaises(exceptions.BadRequest,
self.client.create_env_template,
'-+3')
@attr(type='negative')
def test_double_delete_env_template(self):
"""Check the deletion of an wrong environment template request."""
resp, env_template = self.client.create_env_template('test_env_temp')
self.client.delete_env_template(env_template['id'])
self.assertRaises(exceptions.NotFound,
self.client.delete_env_template,
env_template['id'])
@attr(type='negative')
def test_get_deleted_env_template(self):
"""Check the deletion of an wrong environment template request."""
resp, env_template = self.client.create_env_template('test_env_temp')
self.client.delete_env_template(env_template['id'])
self.assertRaises(exceptions.NotFound,
self.client.get_env_template,
env_template['id'])
class TestEnvTemplatesTenantIsolation(base.NegativeTestCase):
@attr(type='negative')
def test_get_env_template_from_another_tenant(self):
"""It tests getting information from an environment
template from another user.
"""
env_template = self.create_env_template('test_env_temp')
self.assertRaises(exceptions.Unauthorized,
self.alt_client.get_env_template, env_template['id'])
self.client.delete_env_template(env_template['id'])
@attr(type='negative')
def test_delete_env_template_from_another_tenant(self):
"""It tests deleting information from an environment
template from another user.
"""
env_template = self.create_env_template('test_env_temp')
self.assertRaises(exceptions.Unauthorized,
self.alt_client.delete_env_template,
env_template['id'])
self.client.delete_env_template(env_template['id'])

View File

@ -52,14 +52,14 @@ def verify_env_template(func):
unit = db_session.get_session()
template = unit.query(models.EnvironmentTemplate).get(env_template_id)
if template is None:
LOG.info(_("Environment Template with id '{0}'"
" not found").format(env_template_id))
LOG.info(_LI("Environment Template with id '{0}' not found").
format(env_template_id))
raise exc.HTTPNotFound()
if hasattr(request, 'context'):
if template.tenant_id != request.context.tenant:
LOG.info(_('User is not authorized to access'
' this tenant resources'))
LOG.info(_LI('User is not authorized to access '
'this tenant resources'))
raise exc.HTTPUnauthorized()
return func(self, request, env_template_id, *args, **kwargs)