diff --git a/test_cli.py b/test_cli.py new file mode 100644 index 0000000..1fd5ccb --- /dev/null +++ b/test_cli.py @@ -0,0 +1,59 @@ +# Copyright 2014 IBM Corp. +# +# 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 +import testtools + +from tempest import cli +from tempest import exceptions +from tempest.tests import base + + +class TestMinClientVersion(base.TestCase): + """Tests for the min_client_version decorator. + """ + + def _test_min_version(self, required, installed, expect_skip): + + @cli.min_client_version(client='nova', version=required) + def fake(self, expect_skip): + if expect_skip: + # If we got here, the decorator didn't raise a skipException as + # expected so we need to fail. + self.fail('Should not have gotten past the decorator.') + + with mock.patch.object(cli, 'execute', + return_value=installed) as mock_cmd: + if expect_skip: + self.assertRaises(testtools.TestCase.skipException, fake, + self, expect_skip) + else: + fake(self, expect_skip) + mock_cmd.assert_called_once_with('nova', '', params='--version', + merge_stderr=True) + + def test_min_client_version(self): + # required, installed, expect_skip + cases = (('2.17.0', '2.17.0', False), + ('2.17.0', '2.18.0', False), + ('2.18.0', '2.17.0', True)) + + for case in cases: + self._test_min_version(*case) + + @mock.patch.object(cli, 'execute', return_value=' ') + def test_check_client_version_empty_output(self, mock_execute): + # Tests that an exception is raised if the command output is empty. + self.assertRaises(exceptions.TempestException, + cli.check_client_version, 'nova', '2.18.0')