Add environment templates test suite to the tempest plugin
- Add environment templates checks to the tempest plugin - Separate positive and negative checks - Optimize tests to take a little bit less of time - Add two new tests for Conflict exception - Fixed grammar and semantic errors - Add skip test for public template actions due #1540709 Change-Id: I76d4356e15a2b844734d434cb6f3ed58f9ccb5ab Targets: blueprint migrate-to-tempest-plugin
This commit is contained in:
parent
3a1c5415b7
commit
f9fd0445ab
@ -258,3 +258,101 @@ class ApplicationCatalogClient(rest_client.RestClient):
|
|||||||
resp, body = self.get(uri)
|
resp, body = self.get(uri)
|
||||||
self.expected_success(200, resp.status)
|
self.expected_success(200, resp.status)
|
||||||
return self._parse_resp(body)
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
# ----------------------Environment templates methods--------------------------
|
||||||
|
def get_env_templates_list(self):
|
||||||
|
uri = 'v1/templates'
|
||||||
|
resp, body = self.get(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def get_public_env_templates_list(self):
|
||||||
|
uri = 'v1/templates?is_public=true'
|
||||||
|
resp, body = self.get(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def get_private_env_templates_list(self):
|
||||||
|
uri = 'v1/templates?is_public=false'
|
||||||
|
resp, body = self.get(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def create_env_template(self, env_template_name):
|
||||||
|
body = {'name': env_template_name, "is_public": False}
|
||||||
|
uri = 'v1/templates'
|
||||||
|
resp, body = self.post(uri, json.dumps(body))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def clone_env_template(self, env_template_id, cloned_env_template_name):
|
||||||
|
body = {'name': cloned_env_template_name}
|
||||||
|
uri = 'v1/templates/{0}/clone'.format(env_template_id)
|
||||||
|
resp, body = self.post(uri, json.dumps(body))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def create_public_env_template(self, env_template_name):
|
||||||
|
body = {'name': env_template_name, "is_public": True}
|
||||||
|
uri = 'v1/templates'
|
||||||
|
resp, body = self.post(uri, json.dumps(body))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def create_env_template_with_services(self, env_template_name, post_body):
|
||||||
|
body = {
|
||||||
|
'name': env_template_name,
|
||||||
|
'services': [post_body]
|
||||||
|
}
|
||||||
|
uri = 'v1/templates'
|
||||||
|
resp, body = self.post(uri, json.dumps(body))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def create_service_in_env_template(self, env_template_id, post_body):
|
||||||
|
uri = 'v1/templates/{0}/services'.format(env_template_id)
|
||||||
|
resp, body = self.post(uri, json.dumps(post_body))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def get_services_list_in_env_template(self, env_template_id):
|
||||||
|
uri = 'v1/templates/{0}/services'.format(env_template_id)
|
||||||
|
resp, body = self.get(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
# TODO(freerunner): Need to replace json.loads() to _parse_resp
|
||||||
|
# method, when fix for https://bugs.launchpad.net/tempest/+bug/1539927
|
||||||
|
# will resolved and new version of tempest-lib released.
|
||||||
|
return json.loads(body)
|
||||||
|
|
||||||
|
def get_service_in_env_template(self, env_template_name, service_id):
|
||||||
|
uri = 'v1/templates/{0}/services/{1}'.format(env_template_name,
|
||||||
|
service_id)
|
||||||
|
resp, body = self.get(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return json.loads(body)
|
||||||
|
|
||||||
|
def delete_service_from_env_template(self, env_template_name, service_id):
|
||||||
|
uri = 'v1/templates/{0}/services/{1}'.format(env_template_name,
|
||||||
|
service_id)
|
||||||
|
resp, body = self.delete(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def delete_env_template(self, env_template_id):
|
||||||
|
uri = 'v1/templates/{0}'.format(env_template_id)
|
||||||
|
resp, body = self.delete(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def get_env_template(self, env_template_id):
|
||||||
|
uri = 'v1/templates/{0}'.format(env_template_id)
|
||||||
|
resp, body = self.get(uri)
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
|
||||||
|
def create_env_from_template(self, env_template_id, env_name):
|
||||||
|
body = {'name': env_name}
|
||||||
|
uri = 'v1/templates/{0}/create-environment'.format(env_template_id)
|
||||||
|
resp, body = self.post(uri, json.dumps(body))
|
||||||
|
self.expected_success(200, resp.status)
|
||||||
|
return self._parse_resp(body)
|
||||||
|
@ -0,0 +1,204 @@
|
|||||||
|
# Copyright (c) 2015 Telefonica I+D.
|
||||||
|
# Copyright (c) 2016 Mirantis, Inc.
|
||||||
|
#
|
||||||
|
# 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 decorators
|
||||||
|
|
||||||
|
from murano_tempest_tests.tests.api.application_catalog import base
|
||||||
|
from murano_tempest_tests import utils
|
||||||
|
|
||||||
|
|
||||||
|
class TestEnvironmentTemplatesSanity(base.BaseApplicationCatalogTest):
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_list_empty_env_templates(self):
|
||||||
|
templates_list = self.application_catalog_client.\
|
||||||
|
get_env_templates_list()
|
||||||
|
self.assertIsInstance(templates_list, list)
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_create_and_delete_env_template(self):
|
||||||
|
env_templates_list_start = self.application_catalog_client.\
|
||||||
|
get_env_templates_list()
|
||||||
|
name = utils.generate_name('create_and_delete_env_template')
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
create_env_template(name)
|
||||||
|
self.assertFalse(env_template['is_public'])
|
||||||
|
self.assertEqual(name, env_template['name'])
|
||||||
|
env_templates_list = self.application_catalog_client.\
|
||||||
|
get_env_templates_list()
|
||||||
|
self.assertEqual(len(env_templates_list_start) + 1,
|
||||||
|
len(env_templates_list))
|
||||||
|
self.application_catalog_client.\
|
||||||
|
delete_env_template(env_template['id'])
|
||||||
|
env_templates_list = self.application_catalog_client.\
|
||||||
|
get_env_templates_list()
|
||||||
|
self.assertEqual(len(env_templates_list_start),
|
||||||
|
len(env_templates_list))
|
||||||
|
|
||||||
|
|
||||||
|
class TestEnvironmentTemplates(base.BaseApplicationCatalogTest):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resource_setup(cls):
|
||||||
|
super(TestEnvironmentTemplates, cls).resource_setup()
|
||||||
|
name = utils.generate_name(cls.__name__)
|
||||||
|
cls.env_template = cls.application_catalog_client.\
|
||||||
|
create_public_env_template(name)
|
||||||
|
cls.alt_client = cls.get_client_with_isolated_creds('alt')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resource_cleanup(cls):
|
||||||
|
cls.application_catalog_client.\
|
||||||
|
delete_env_template(cls.env_template['id'])
|
||||||
|
super(TestEnvironmentTemplates, cls).resource_cleanup()
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_get_env_template(self):
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
get_env_template(self.env_template['id'])
|
||||||
|
self.assertEqual(self.env_template['name'], env_template['name'])
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_create_env_template_with_a_service(self):
|
||||||
|
name = utils.generate_name('create_env_template_with_service')
|
||||||
|
post_body = self._get_demo_app()
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
create_env_template_with_services(name, post_body)
|
||||||
|
self.addCleanup(self.application_catalog_client.delete_env_template,
|
||||||
|
env_template['id'])
|
||||||
|
list_services = self.application_catalog_client.\
|
||||||
|
get_services_list_in_env_template(env_template['id'])
|
||||||
|
self.assertIsInstance(list_services, list)
|
||||||
|
self.assertIn(post_body, list_services)
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_add_and_remove_service_in_env_templates(self):
|
||||||
|
env_template_services = self.application_catalog_client.\
|
||||||
|
get_services_list_in_env_template(self.env_template['id'])
|
||||||
|
self.assertIsInstance(env_template_services, list)
|
||||||
|
post_body = self._get_demo_app()
|
||||||
|
service = self.application_catalog_client.\
|
||||||
|
create_service_in_env_template(self.env_template['id'], post_body)
|
||||||
|
self.assertEqual(post_body['name'], service['name'])
|
||||||
|
services = self.application_catalog_client.\
|
||||||
|
get_services_list_in_env_template(self.env_template['id'])
|
||||||
|
self.assertIn(service, services)
|
||||||
|
self.application_catalog_client.\
|
||||||
|
delete_service_from_env_template(self.env_template['id'],
|
||||||
|
service['?']['id'])
|
||||||
|
services = self.application_catalog_client.\
|
||||||
|
get_services_list_in_env_template(self.env_template['id'])
|
||||||
|
self.assertNotIn(service, services)
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_create_public_env_template(self):
|
||||||
|
name = utils.generate_name('create_public_env_template')
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
create_public_env_template(name)
|
||||||
|
self.addCleanup(self.application_catalog_client.delete_env_template,
|
||||||
|
env_template['id'])
|
||||||
|
self.assertEqual(name, env_template['name'])
|
||||||
|
env_temp = self.application_catalog_client.\
|
||||||
|
get_env_template(env_template['id'])
|
||||||
|
self.assertTrue(env_temp['is_public'])
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_clone_env_template(self):
|
||||||
|
name = utils.generate_name('clone_env_template')
|
||||||
|
cloned_template = self.alt_client.\
|
||||||
|
clone_env_template(self.env_template['id'], name)
|
||||||
|
self.addCleanup(self.alt_client.delete_env_template,
|
||||||
|
cloned_template['id'])
|
||||||
|
self.assertEqual(name, cloned_template['name'])
|
||||||
|
template = self.alt_client.get_env_template(cloned_template['id'])
|
||||||
|
self.assertEqual(name, template['name'])
|
||||||
|
|
||||||
|
@decorators.skip_because(bug="1540709")
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_get_public_private_both_env_templates(self):
|
||||||
|
name = utils.generate_name('get_public_private_both')
|
||||||
|
public_env_template = self.application_catalog_client.\
|
||||||
|
create_public_env_template(name)
|
||||||
|
self.addCleanup(self.application_catalog_client.delete_env_template,
|
||||||
|
public_env_template['id'])
|
||||||
|
self.assertTrue(public_env_template['is_public'])
|
||||||
|
private_name = utils.generate_name('get_public_private_both')
|
||||||
|
private_env_template = self.application_catalog_client.\
|
||||||
|
create_env_template(private_name)
|
||||||
|
self.addCleanup(self.application_catalog_client.delete_env_template,
|
||||||
|
private_env_template['id'])
|
||||||
|
self.assertFalse(private_env_template['is_public'])
|
||||||
|
private_name_alt = utils.generate_name('get_public_private_both')
|
||||||
|
private_alt_env_template = self.alt_client.\
|
||||||
|
create_env_template(private_name_alt)
|
||||||
|
self.addCleanup(self.alt_client.delete_env_template,
|
||||||
|
private_alt_env_template['id'])
|
||||||
|
|
||||||
|
public_env_templates = self.application_catalog_client.\
|
||||||
|
get_public_env_templates_list()
|
||||||
|
self.assertIn(public_env_template, public_env_templates)
|
||||||
|
self.assertNotIn(private_env_template, public_env_templates)
|
||||||
|
self.assertNotIn(private_alt_env_template, public_env_templates)
|
||||||
|
|
||||||
|
private_env_templates = self.application_catalog_client.\
|
||||||
|
get_private_env_templates_list()
|
||||||
|
self.assertNotIn(public_env_template, private_env_templates)
|
||||||
|
self.assertIn(private_env_template, private_env_templates)
|
||||||
|
self.assertNotIn(private_alt_env_template, private_env_templates)
|
||||||
|
|
||||||
|
env_templates = self.application_catalog_client.\
|
||||||
|
get_env_templates_list()
|
||||||
|
self.assertIn(public_env_template, env_templates)
|
||||||
|
self.assertIn(private_env_template, env_templates)
|
||||||
|
self.assertNotIn(private_alt_env_template, env_templates)
|
||||||
|
|
||||||
|
alt_pub_templates = self.alt_client.get_public_env_templates_list()
|
||||||
|
self.assertIn(public_env_template, alt_pub_templates)
|
||||||
|
self.assertNotIn(private_env_template, alt_pub_templates)
|
||||||
|
self.assertNotIn(private_alt_env_template, alt_pub_templates)
|
||||||
|
|
||||||
|
alt_priv_templates = self.alt_client.get_private_env_templates_list()
|
||||||
|
self.assertNotIn(public_env_template, alt_priv_templates)
|
||||||
|
self.assertNotIn(private_env_template, alt_priv_templates)
|
||||||
|
self.assertIn(private_alt_env_template, alt_priv_templates)
|
||||||
|
|
||||||
|
alt_env_templates = self.alt_client.get_env_templates_list()
|
||||||
|
self.assertIn(public_env_template, alt_env_templates)
|
||||||
|
self.assertNotIn(private_env_template, alt_env_templates)
|
||||||
|
self.assertIn(private_alt_env_template, alt_env_templates)
|
||||||
|
|
||||||
|
@attr(type='smoke')
|
||||||
|
def test_create_env_from_template(self):
|
||||||
|
name = utils.generate_name('create_env_from_template')
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
create_public_env_template(name)
|
||||||
|
self.addCleanup(self.application_catalog_client.delete_env_template,
|
||||||
|
env_template['id'])
|
||||||
|
post_body = self._get_demo_app()
|
||||||
|
service = self.application_catalog_client.\
|
||||||
|
create_service_in_env_template(env_template['id'], post_body)
|
||||||
|
self.assertEqual(post_body['name'], service['name'])
|
||||||
|
env_name = utils.generate_name('create_env_from_template')
|
||||||
|
environment = self.application_catalog_client.\
|
||||||
|
create_env_from_template(env_template['id'], env_name)
|
||||||
|
self.addCleanup(self.application_catalog_client.delete_environment,
|
||||||
|
environment['environment_id'])
|
||||||
|
self.assertIsNotNone(environment)
|
||||||
|
service_from_env = self.application_catalog_client.\
|
||||||
|
get_service(environment['environment_id'],
|
||||||
|
service['?']['id'],
|
||||||
|
environment['session_id'])
|
||||||
|
self.assertEqual(service, service_from_env)
|
@ -0,0 +1,124 @@
|
|||||||
|
# Copyright (c) 2015 Telefonica I+D.
|
||||||
|
# Copyright (c) 2016 Mirantis, Inc.
|
||||||
|
#
|
||||||
|
# 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_tempest_tests.tests.api.application_catalog import base
|
||||||
|
from murano_tempest_tests import utils
|
||||||
|
|
||||||
|
|
||||||
|
class TestEnvironmentTemplatesNegative(base.BaseApplicationCatalogTest):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resource_setup(cls):
|
||||||
|
super(TestEnvironmentTemplatesNegative, cls).resource_setup()
|
||||||
|
cls.name = utils.generate_name(cls.__name__)
|
||||||
|
cls.env_template = cls.application_catalog_client.\
|
||||||
|
create_env_template(cls.name)
|
||||||
|
cls.environment = cls.application_catalog_client.\
|
||||||
|
create_environment(cls.name)
|
||||||
|
cls.alt_client = cls.get_client_with_isolated_creds('alt')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resource_cleanup(cls):
|
||||||
|
cls.application_catalog_client.\
|
||||||
|
delete_env_template(cls.env_template['id'])
|
||||||
|
cls.application_catalog_client.delete_environment(
|
||||||
|
cls.environment['id'])
|
||||||
|
super(TestEnvironmentTemplatesNegative, cls).resource_cleanup()
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_clone_env_template_private(self):
|
||||||
|
self.assertRaises(exceptions.Forbidden,
|
||||||
|
self.alt_client.clone_env_template,
|
||||||
|
self.env_template['id'], 'cloned_template')
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_delete_environment_with_wrong_env_id(self):
|
||||||
|
self.assertRaises(exceptions.NotFound,
|
||||||
|
self.application_catalog_client.delete_env_template,
|
||||||
|
None)
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_create_environment_with_wrong_payload(self):
|
||||||
|
self.assertRaises(exceptions.BadRequest,
|
||||||
|
self.application_catalog_client.create_env_template,
|
||||||
|
' ')
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_double_delete_env_template(self):
|
||||||
|
name = utils.generate_name('double_delete_env_template')
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
create_env_template(name)
|
||||||
|
self.application_catalog_client.delete_env_template(
|
||||||
|
env_template['id'])
|
||||||
|
self.assertRaises(exceptions.NotFound,
|
||||||
|
self.application_catalog_client.delete_env_template,
|
||||||
|
env_template['id'])
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_get_deleted_env_template(self):
|
||||||
|
name = utils.generate_name('get_deleted_env_template')
|
||||||
|
env_template = self.application_catalog_client.\
|
||||||
|
create_env_template(name)
|
||||||
|
self.application_catalog_client.delete_env_template(
|
||||||
|
env_template['id'])
|
||||||
|
self.assertRaises(exceptions.NotFound,
|
||||||
|
self.application_catalog_client.get_env_template,
|
||||||
|
env_template['id'])
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_create_environment_template_with_same_name(self):
|
||||||
|
self.assertRaises(exceptions.Conflict,
|
||||||
|
self.application_catalog_client.create_env_template,
|
||||||
|
self.name)
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_create_env_from_template_witch_existing_name(self):
|
||||||
|
self.assertRaises(exceptions.Conflict,
|
||||||
|
self.application_catalog_client.
|
||||||
|
create_env_from_template,
|
||||||
|
self.env_template['id'],
|
||||||
|
self.name)
|
||||||
|
|
||||||
|
|
||||||
|
class TestEnvTemplatesTenantIsolation(base.BaseApplicationCatalogTest):
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resource_setup(cls):
|
||||||
|
super(TestEnvTemplatesTenantIsolation, cls).resource_setup()
|
||||||
|
name = utils.generate_name(cls.__name__)
|
||||||
|
cls.env_template = cls.application_catalog_client.\
|
||||||
|
create_env_template(name)
|
||||||
|
cls.alt_client = cls.get_client_with_isolated_creds('alt')
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def resource_cleanup(cls):
|
||||||
|
cls.application_catalog_client.\
|
||||||
|
delete_env_template(cls.env_template['id'])
|
||||||
|
super(TestEnvTemplatesTenantIsolation, cls).resource_cleanup()
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_get_env_template_from_another_tenant(self):
|
||||||
|
self.assertRaises(exceptions.Forbidden,
|
||||||
|
self.alt_client.get_env_template,
|
||||||
|
self.env_template['id'])
|
||||||
|
|
||||||
|
@attr(type='negative')
|
||||||
|
def test_delete_env_template_from_another_tenant(self):
|
||||||
|
self.assertRaises(exceptions.Forbidden,
|
||||||
|
self.alt_client.delete_env_template,
|
||||||
|
self.env_template['id'])
|
Loading…
Reference in New Issue
Block a user