# 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_lib.cli import base as cli from tempest_lib import exceptions from tempest_lib.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')