kolla-cli/kolla_cli/tests/unit/test_host_cmd.py

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()