diff --git a/releasenotes/notes/run-validations-using-cli-b3f4aa43e9f4eb3e.yaml b/releasenotes/notes/run-validations-using-cli-b3f4aa43e9f4eb3e.yaml new file mode 100644 index 000000000..0e1879331 --- /dev/null +++ b/releasenotes/notes/run-validations-using-cli-b3f4aa43e9f4eb3e.yaml @@ -0,0 +1,9 @@ +--- +features: + - | + Running and listing the validations was only possible by executing + the Mistral workflow associated with those tasks. + Now we have the possibility of running and listing the validations + using the TripleO CLI. + The commands added are 'openstack tripleo validator run' and + 'openstack tripleo validator list' with its corresponding parameters. diff --git a/tripleoclient/tests/v1/test_validator.py b/tripleoclient/tests/v1/test_validator.py new file mode 100644 index 000000000..83b05959d --- /dev/null +++ b/tripleoclient/tests/v1/test_validator.py @@ -0,0 +1,70 @@ +# Copyright 2018 Red Hat, 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. +# + +import mock + +from osc_lib.tests import utils +from tripleoclient.v1 import tripleo_validator + + +class TestValidatorList(utils.TestCommand): + + def setUp(self): + super(TestValidatorList, self).setUp() + + # Get the command object to test + self.cmd = tripleo_validator.TripleOValidatorList(self.app, None) + self.app.client_manager.workflow_engine = mock.Mock() + self.workflow = self.app.client_manager.workflow_engine + + @mock.patch('tripleoclient.workflows.validations.list_validations', + autospec=True) + def test_validation_list_noargs(self, plan_mock): + arglist = [] + verifylist = [] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + plan_mock.assert_called_once_with( + mock.ANY, {'group_names': []}) + + +class TestValidatorRun(utils.TestCommand): + + def setUp(self): + super(TestValidatorRun, self).setUp() + + # Get the command object to test + self.cmd = tripleo_validator.TripleOValidatorRun(self.app, None) + self.app.client_manager.workflow_engine = mock.Mock() + self.workflow = self.app.client_manager.workflow_engine + + @mock.patch('tripleoclient.workflows.validations.run_validations', + autospec=True) + def test_validation_run_withargs(self, plan_mock): + arglist = [ + '--validation-name', + 'check-ftype' + ] + verifylist = [] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + self.cmd.take_action(parsed_args) + plan_mock.assert_called_once_with( + mock.ANY, + {'plan': 'overcloud', + 'validation_names': ['check-ftype']}) diff --git a/tripleoclient/tests/workflows/test_validations.py b/tripleoclient/tests/workflows/test_validations.py new file mode 100644 index 000000000..6f12d0990 --- /dev/null +++ b/tripleoclient/tests/workflows/test_validations.py @@ -0,0 +1,86 @@ +# Copyright 2017 Red Hat, 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. +# + +import mock + +from osc_lib.tests import utils +from tripleoclient.workflows import validations + + +class TestValidationsList(utils.TestCommand): + + def setUp(self): + super(TestValidationsList, self).setUp() + self.app.client_manager = mock.Mock() + self.app.client_manager.workflow_engine = self.workflow = mock.Mock() + self.tripleoclient = mock.Mock() + self.websocket = mock.Mock() + self.websocket.__enter__ = lambda s: self.websocket + self.websocket.__exit__ = lambda s, *exc: None + self.tripleoclient.messaging_websocket.return_value = self.websocket + self.app.client_manager.tripleoclient = self.tripleoclient + + @mock.patch('tripleoclient.workflows.base.wait_for_messages') + @mock.patch('tripleoclient.workflows.base.start_workflow') + def test_list_validations(self, start_wf_mock, messages_mock): + messages_mock.return_value = [] + fetch_name = 'tripleo.validations.v1.list' + fetch_input = { + 'group_names': ['pre-deployment'] + } + validations.list_validations(self.app.client_manager, fetch_input) + start_wf_mock.assert_called_once_with(self.workflow, + fetch_name, + workflow_input=fetch_input) + + +class TestValidationsRun(utils.TestCommand): + + def setUp(self): + super(TestValidationsRun, self).setUp() + self.app.client_manager = mock.Mock() + self.app.client_manager.workflow_engine = self.workflow = mock.Mock() + self.tripleoclient = mock.Mock() + self.websocket = mock.Mock() + self.websocket.__enter__ = lambda s: self.websocket + self.websocket.__exit__ = lambda s, *exc: None + self.tripleoclient.messaging_websocket.return_value = self.websocket + self.app.client_manager.tripleoclient = self.tripleoclient + + @mock.patch('tripleoclient.workflows.base.wait_for_messages') + @mock.patch('tripleoclient.workflows.base.start_workflow') + def test_run_validations_group(self, start_wf_mock, messages_mock): + messages_mock.return_value = [] + fetch_name = 'tripleo.validations.v1.run_groups' + fetch_input = { + 'group_names': ['pre-deployment'] + } + validations.run_validations(self.app.client_manager, fetch_input) + start_wf_mock.assert_called_once_with(self.workflow, + fetch_name, + workflow_input=fetch_input) + + @mock.patch('tripleoclient.workflows.base.wait_for_messages') + @mock.patch('tripleoclient.workflows.base.start_workflow') + def test_run_validations(self, start_wf_mock, messages_mock): + messages_mock.return_value = [] + fetch_name = 'tripleo.validations.v1.run_validations' + fetch_input = { + 'validation_names': ['check-ftype'] + } + validations.run_validations(self.app.client_manager, fetch_input) + start_wf_mock.assert_called_once_with(self.workflow, + fetch_name, + workflow_input=fetch_input)