cb017ed845
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
180 lines
7.9 KiB
Python
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()
|