From 767623d98f8d5c009d23427736d9bfea6f05e101 Mon Sep 17 00:00:00 2001 From: Wriju Bhattacharya Date: Tue, 1 Aug 2017 18:09:56 -0400 Subject: [PATCH] Added Tempest API client methods and Tempest tests for sessions and deployments Added tests for following scenarios: * deploy session * list all deployments * list deployments (in a specific environment) * list a specific deployment's statuses Added application_catalog_client methods for following functionality: * list all deployments * list deployments (in a specific environment) * list a specific deployment's statuses Change-Id: I0ac1b2a6216fd1794ba06ee0b26e6c2c90118526 --- .../application_catalog_client.py | 28 ++++++ .../application_catalog/test_deployments.py | 86 +++++++++++++++++++ .../api/application_catalog/test_sessions.py | 27 ++++++ 3 files changed, 141 insertions(+) create mode 100644 murano_tempest_tests/tests/api/application_catalog/test_deployments.py diff --git a/murano_tempest_tests/services/application_catalog/application_catalog_client.py b/murano_tempest_tests/services/application_catalog/application_catalog_client.py index ef2f546..3721850 100644 --- a/murano_tempest_tests/services/application_catalog/application_catalog_client.py +++ b/murano_tempest_tests/services/application_catalog/application_catalog_client.py @@ -207,6 +207,34 @@ class ApplicationCatalogClient(rest_client.RestClient): self.expected_success(200, resp.status) return self._parse_resp(body) +# ----------------------------Deployment methods------------------------------- + + def list_deployments(self, environment_id): + uri = 'v1/environments/{0}/deployments'.format( + environment_id) + body = None + + resp, body = self.get(uri, body) + self.expected_success(200, resp.status) + return self._parse_resp(body) + + def list_deployment_statuses(self, environment_id, deployment_id): + uri = 'v1/environments/{0}/deployments/{1}'.format( + environment_id, deployment_id) + body = None + + resp, body = self.get(uri, body) + self.expected_success(200, resp.status) + return self._parse_resp(body) + + def list_all_deployments(self): + uri = 'v1/deployments' + body = None + + resp, body = self.get(uri, body) + self.expected_success(200, resp.status) + return self._parse_resp(body) + # -----------------------------Service methods--------------------------------- def create_service(self, environment_id, session_id, post_body): headers = self.get_headers() diff --git a/murano_tempest_tests/tests/api/application_catalog/test_deployments.py b/murano_tempest_tests/tests/api/application_catalog/test_deployments.py new file mode 100644 index 0000000..4103e8e --- /dev/null +++ b/murano_tempest_tests/tests/api/application_catalog/test_deployments.py @@ -0,0 +1,86 @@ +# Copyright (c) 2017 AT&T Corporation. +# +# 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.lib import decorators + +from murano_tempest_tests.tests.api.application_catalog import base +from murano_tempest_tests import utils + + +class TestDeployments(base.BaseApplicationCatalogTest): + + def _create_and_deploy_env_session(self): + name = utils.generate_name('_create_and_deploy_env_session') + environment = self.application_catalog_client.create_environment( + name) + self.addCleanup(self.application_catalog_client.delete_environment, + environment['id']) + session = self.application_catalog_client.create_session( + environment['id']) + self.addCleanup(self.application_catalog_client.delete_session, + environment['id'], session['id']) + self.application_catalog_client.deploy_session(environment['id'], + session['id']) + utils.wait_for_environment_deploy(self.application_catalog_client, + environment['id']) + return environment + + @decorators.idempotent_id('ea4f6f21-bd97-4b58-af93-6fe5417543f9') + def test_list_all_deployments(self): + # Given two environments with deployments + environment1 = self._create_and_deploy_env_session() + environment2 = self._create_and_deploy_env_session() + + # When list_all_deployments is called + deployments = self.application_catalog_client.list_all_deployments() + + # Then both environment's deployments are returned + self.assertEqual(2, len(deployments)) + environment_ids = [d['environment_id'] for d in deployments] + self.assertIn(environment1['id'], environment_ids) + self.assertIn(environment2['id'], environment_ids) + + @decorators.idempotent_id('d76706f6-9281-4fdc-9758-57da825311b1') + def test_list_deployments(self): + # Given two environments with deployments + environment1 = self._create_and_deploy_env_session() + self._create_and_deploy_env_session() + + # When list_deployments is called for first environment + deployments = self.application_catalog_client.list_deployments( + environment1['id']) + + # Then only the first environment's deployment is returned + self.assertEqual(1, len(deployments)) + first_deployment = deployments[0] + self.assertEqual(environment1['id'], + first_deployment['environment_id']) + + @decorators.idempotent_id('d6fbba34-92a9-49b3-9c49-e4b7a65eb6e8') + def test_list_deployment_statuses(self): + # Given an environment with a deployment + environment = self._create_and_deploy_env_session() + deployment = self.application_catalog_client.list_deployments( + environment['id'])[0] + + # When list_deployment_statuses is called + statuses = self.application_catalog_client.list_deployment_statuses( + environment['id'], deployment['id']) + + # Then the correct statuses for the deployment are returned + status_deployment_ids = set([s['task_id'] for s in statuses]) + self.assertEqual([deployment['id']], list(status_deployment_ids)) + status_texts = [s['text'] for s in statuses] + self.assertEqual(['Action deploy is scheduled', 'Deployment finished'], + sorted(status_texts)) diff --git a/murano_tempest_tests/tests/api/application_catalog/test_sessions.py b/murano_tempest_tests/tests/api/application_catalog/test_sessions.py index 6eb670d..2159362 100644 --- a/murano_tempest_tests/tests/api/application_catalog/test_sessions.py +++ b/murano_tempest_tests/tests/api/application_catalog/test_sessions.py @@ -64,3 +64,30 @@ class TestSessions(base.BaseApplicationCatalogTest): session_from_resp.pop('updated', None) session_from_resp.pop('created', None) self.assertEqual(session, session_from_resp) + + @decorators.idempotent_id('30a63368-e75a-4e00-ac91-c91b17e54a62') + def test_deploy_session(self): + # Given an environment with a session + name = utils.generate_name('_create_and_deploy_env_session') + environment = self.application_catalog_client.create_environment( + name) + self.addCleanup(self.application_catalog_client.delete_environment, + environment['id']) + session = self.application_catalog_client.create_session( + environment['id']) + self.addCleanup(self.application_catalog_client.delete_session, + environment['id'], session['id']) + + # When deploy session is called + self.application_catalog_client.deploy_session(environment['id'], + session['id']) + utils.wait_for_environment_deploy(self.application_catalog_client, + environment['id']) + + # Then there is only one deployment and it is in a success state + fetched_deployments = self.application_catalog_client.list_deployments( + environment['id']) + self.assertEqual(1, len(fetched_deployments)) + first_deployment = fetched_deployments[0] + self.assertEqual(environment['id'], first_deployment['environment_id']) + self.assertEqual('success', first_deployment['state'])