kolla-cli/kolla_cli/tests/unit/test_host_cmd.py
jacky06 cb017ed845 Use unittest.mock instead of third party mock
Now that we no longer support py27, we can use the standard library
unittest.mock module instead of the third party mock lib.

Change-Id: I6101cb044ee0fc2a7be95352569782eaf0b938aa
2020-04-06 12:33:06 +08:00

180 lines
7.9 KiB
Python

# Copyright (c) 2018 OpenStack Foundation
#
# 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 unittest import mock
from kolla_cli.tests.unit.common import KollaCliUnitTest
class TestUnit(KollaCliUnitTest):
@mock.patch('kolla_cli.api.client.ClientApi.host_add')
@mock.patch('kolla_cli.shell.KollaCli._is_inventory_present',
return_value=True)
def test_host_add(self, _, mock_add):
hostname = 'foo'
ret = self.run_cli_command('host add %s' % hostname)
self.assertEqual(ret, 0)
mock_add.assert_called_once_with([hostname])
@mock.patch('kolla_cli.api.client.ClientApi.host_remove')
@mock.patch('kolla_cli.shell.KollaCli._is_inventory_present',
return_value=True)
def test_host_remove(self, _, mock_remove):
hostname = 'foo'
ret = self.run_cli_command('host remove %s' % hostname)
self.assertEqual(ret, 0)
mock_remove.assert_called_once_with([hostname])
@mock.patch('kolla_cli.api.client.ClientApi.host_get_all')
@mock.patch('kolla_cli.api.client.ClientApi.host_get')
@mock.patch('kolla_cli.shell.KollaCli._is_inventory_present',
return_value=True)
def test_host_list(self, _, mock_get, mock_get_all):
# get all hosts
mock_get_all.return_value = []
ret = self.run_cli_command('host list')
self.assertEqual(ret, 0)
mock_get_all.assert_called_once_with()
# get a specific host
hostname = 'foo'
mock_get.return_value = []
ret = self.run_cli_command('host list %s' % hostname)
self.assertEqual(ret, 0)
mock_get.assert_called_once_with([hostname])
@mock.patch('kolla_cli.commands.host.HostDestroy._is_ok_to_delete_data',
return_value='y')
@mock.patch('kolla_cli.common.ansible.job.AnsibleJob.get_status')
@mock.patch('kolla_cli.api.client.ClientApi.host_get_all')
@mock.patch('kolla_cli.api.client.ClientApi.host_destroy')
@mock.patch('kolla_cli.shell.KollaCli._is_inventory_present',
return_value=True)
def test_host_destroy(self, _, mock_destroy, mock_get_all,
mock_get_status, mock_prompt):
hostname = 'foo'
mock_get_all.return_value = [self.get_fake_host(hostname)]
mock_destroy.return_value = self.get_fake_job()
mock_get_status.return_value = 0
# default destroy hostname
ret = self.run_cli_command('host destroy %s' % hostname)
self.assertEqual(ret, 0)
mock_destroy.assert_called_once_with([hostname], 'kill', 1,
False, False)
# destroy all
mock_destroy.reset_mock()
ret = self.run_cli_command('host destroy all')
self.assertEqual(ret, 0)
mock_destroy.assert_called_once_with([hostname], 'kill', 1,
False, False)
# destroy --stop
mock_destroy.reset_mock()
ret = self.run_cli_command('host destroy %s --stop' % hostname)
self.assertEqual(ret, 0)
mock_destroy.assert_called_once_with([hostname], 'stop', 1,
False, False)
# destroy --includedata
mock_destroy.reset_mock()
ret = self.run_cli_command('host destroy %s --includedata' % hostname)
self.assertEqual(ret, 0)
mock_destroy.assert_called_once_with([hostname], 'kill', 1,
True, False)
# destroy --removeimages
mock_destroy.reset_mock()
ret = self.run_cli_command('host destroy %s --removeimages'
% hostname)
self.assertEqual(ret, 0)
mock_destroy.assert_called_once_with([hostname], 'kill', 1,
False, True)
@mock.patch('kolla_cli.commands.host.LOG.info')
@mock.patch('kolla_cli.api.client.ClientApi.host_get_all')
@mock.patch('kolla_cli.api.client.ClientApi.host_ssh_check')
@mock.patch('kolla_cli.shell.KollaCli._is_inventory_present',
return_value=True)
def test_host_ssh_check(self, _, mock_ssh_check, mock_get_all, mock_log):
hostname = 'foo'
check_ok_response = {hostname: {'success': True}}
check_bad_response = {hostname: {'success': False, 'msg': 'FAILED'}}
mock_get_all.return_value = [self.get_fake_host(hostname)]
# host check hostname (success)
mock_ssh_check.return_value = check_ok_response
ret = self.run_cli_command('host check %s' % hostname)
self.assertEqual(ret, 0)
mock_ssh_check.assert_called_once_with([hostname])
mock_log.assert_called_once_with('Host %s: success ' % hostname)
# host check all (success)
mock_ssh_check.reset_mock()
mock_log.reset_mock()
mock_ssh_check.return_value = check_ok_response
ret = self.run_cli_command('host check all')
self.assertEqual(ret, 0)
mock_ssh_check.assert_called_once_with([hostname])
mock_log.assert_called_once_with('Host %s: success ' % hostname)
# host check hostname (fail)
mock_ssh_check.reset_mock()
mock_log.reset_mock()
mock_ssh_check.return_value = check_bad_response
ret = self.run_cli_command('host check %s' % hostname)
self.assertEqual(ret, 1)
mock_ssh_check.assert_called_once_with([hostname])
mock_log.assert_called_once_with('Host %s: failed- FAILED' % hostname)
@mock.patch('kolla_cli.commands.host.HostSetup._get_yml_data')
@mock.patch('getpass.getpass')
@mock.patch('kolla_cli.commands.host.ClientApi.host_ssh_check')
@mock.patch('kolla_cli.commands.host.ClientApi.host_setup')
@mock.patch('kolla_cli.api.client.ClientApi.host_get_all')
@mock.patch('kolla_cli.shell.KollaCli._is_inventory_present',
return_value=True)
def test_host_setup(self, _, mock_get_all, mock_setup, mock_ssh_check,
mock_passwd, mock_yml):
password = 'PASSWORD'
hostname = 'foo'
mock_get_all.return_value = [self.get_fake_host(hostname)]
mock_passwd.return_value = password
# single host setup (host not yet setup)
mock_ssh_check.return_value = {hostname: {'success': False}}
ret = self.run_cli_command('host setup %s' % hostname)
self.assertEqual(ret, 0)
mock_ssh_check.assert_called_once_with([hostname])
mock_setup.assert_called_once_with({hostname: {'password': password}})
# single host setup --insecure (host already setup)
mock_ssh_check.reset_mock()
mock_setup.reset_mock()
mock_ssh_check.return_value = {hostname: {'success': True}}
ret = self.run_cli_command('host setup %s --insecure %s'
% (hostname, password))
self.assertEqual(ret, 0)
mock_ssh_check.assert_called_once_with([hostname])
mock_setup.assert_not_called()
# multi-host setup
mock_ssh_check.reset_mock()
mock_setup.reset_mock()
fake_path = '/bogus'
mock_yml.return_value = {hostname: {'password': password}}
ret = self.run_cli_command('host setup --file %s' % fake_path)
self.assertEqual(ret, 0)
mock_setup.assert_called_once_with({hostname: {'password': password}})
mock_yml.assert_called_once_with(fake_path)
mock_ssh_check.assert_not_called()