Add CLI unit tests
This commit is contained in:
parent
3d4cf4a3bf
commit
9b235763cd
11 changed files with 573 additions and 584 deletions
|
|
@ -74,13 +74,14 @@ class TestAddHostToChannel(utils.CliTestCase):
|
|||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_add_host_to_channel_new(
|
||||
def test_handle_add_host_to_channel_new_and_force(
|
||||
self, activate_session_mock, stdout):
|
||||
host = 'host'
|
||||
host_info = mock.ANY
|
||||
channel = 'channel'
|
||||
new_arg = '--new'
|
||||
args = [host, channel, new_arg]
|
||||
force_arg = '--force'
|
||||
args = [host, channel, new_arg, force_arg]
|
||||
options = mock.MagicMock()
|
||||
|
||||
# Mock out the xmlrpc server
|
||||
|
|
@ -98,7 +99,7 @@ class TestAddHostToChannel(utils.CliTestCase):
|
|||
activate_session_mock.assert_called_once_with(session, options)
|
||||
session.getChannel.assert_not_called()
|
||||
session.getHost.assert_called_once_with(host)
|
||||
session.addHostToChannel.assert_called_once_with(host, channel, create=True)
|
||||
session.addHostToChannel.assert_called_once_with(host, channel, create=True, force=True)
|
||||
self.assertNotEqual(rv, 1)
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=six.StringIO)
|
||||
|
|
|
|||
|
|
@ -127,6 +127,25 @@ class TestAddTarget(utils.CliTestCase):
|
|||
self.session.createBuildTarget.assert_called_once_with(target, tag, target)
|
||||
self.session.getTag.assert_called_with(target)
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_add_target_without_perms(self, stderr):
|
||||
side_effect_result = [False, False]
|
||||
|
||||
target = 'test-target'
|
||||
tag = 'test-tag'
|
||||
self.session.hasPerm.side_effect = side_effect_result
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_add_target(self.options, self.session, [target, tag])
|
||||
self.assertExitCode(ex, 2)
|
||||
expected_msg = """Usage: %s add-target <name> <build tag> <dest tag>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: This action requires target or admin privileges
|
||||
""" % (self.progname, self.progname)
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
self.session.createBuildTarget.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
|
||||
def test_add_target_help(self):
|
||||
self.assert_help(
|
||||
handle_add_target,
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -19,6 +19,11 @@ class TestEditChannel(utils.CliTestCase):
|
|||
self.channel_old = 'test-channel'
|
||||
self.channel_new = 'test-channel-new'
|
||||
self.description = 'description'
|
||||
self.channel_info = {
|
||||
'id': 123,
|
||||
'name': self.channel_old,
|
||||
'description': self.description,
|
||||
}
|
||||
self.maxDiff = None
|
||||
|
||||
def tearDown(self):
|
||||
|
|
@ -82,6 +87,39 @@ Options:
|
|||
self.session.editChannel.assert_called_once_with(self.channel_old, name=self.channel_new,
|
||||
description=self.description)
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_edit_channel_non_exist_channel(self, activate_session_mock, stderr):
|
||||
expected = 'No such channel: %s\n' % self.channel_old
|
||||
channel_info = None
|
||||
self.session.getChannel.return_value = channel_info
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_edit_channel(self.options, self.session,
|
||||
[self.channel_old, '--name', self.channel_new,
|
||||
'--description', self.description])
|
||||
self.assertExitCode(ex, 1)
|
||||
actual = stderr.getvalue()
|
||||
self.assertMultiLineEqual(actual, expected)
|
||||
activate_session_mock.assert_called_once_with(self.session, self.options)
|
||||
self.session.editChannel.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_edit_channel_non_result(self, activate_session_mock, stderr):
|
||||
expected = 'No changes made, please correct the command line\n'
|
||||
self.session.getChannel.return_value = self.channel_info
|
||||
self.session.editChannel.return_value = None
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_edit_channel(self.options, self.session,
|
||||
[self.channel_old, '--name', self.channel_new,
|
||||
'--description', self.description])
|
||||
self.assertExitCode(ex, 1)
|
||||
actual = stderr.getvalue()
|
||||
self.assertMultiLineEqual(actual, expected)
|
||||
activate_session_mock.assert_called_once_with(self.session, self.options)
|
||||
self.session.editChannel.assert_called_once_with(self.channel_old, name=self.channel_new,
|
||||
description=self.description)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ class TestEditExternalRepo(utils.CliTestCase):
|
|||
|
||||
# edit ext-repo only
|
||||
handle_edit_external_repo(self.options, self.session,
|
||||
['ext_repo','--name', 'newname', '--url', 'https://newurl'])
|
||||
['ext_repo', '--name', 'newname', '--url', 'https://newurl'])
|
||||
self.assert_console_message(stdout, "")
|
||||
self.assert_console_message(stderr, "")
|
||||
self.session.editExternalRepo.assert_called_once_with('ext_repo',
|
||||
|
|
@ -66,14 +66,15 @@ class TestEditExternalRepo(utils.CliTestCase):
|
|||
# edit tag-repo only
|
||||
self.session.reset_mock()
|
||||
handle_edit_external_repo(self.options, self.session,
|
||||
['ext_repo','-t', 'tag', '-p', '0', '-m', 'koji'])
|
||||
['ext_repo', '-t', 'tag', '-p', '0', '-m', 'koji', '-a', 'i386'])
|
||||
self.assert_console_message(stdout, "")
|
||||
self.assert_console_message(stderr, "")
|
||||
self.session.editExternalRepo.assert_not_called()
|
||||
self.session.editTagExternalRepo.assert_called_once_with(repo_info='ext_repo',
|
||||
tag_info='tag',
|
||||
priority=0,
|
||||
merge_mode='koji')
|
||||
merge_mode='koji',
|
||||
arches='i386')
|
||||
|
||||
def test_handle_edit_external_repo_help(self):
|
||||
self.assert_help(
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
import copy
|
||||
|
||||
import mock
|
||||
from six.moves import StringIO
|
||||
|
||||
|
|
@ -14,6 +16,20 @@ class TestEditTarget(utils.CliTestCase):
|
|||
self.options.debug = False
|
||||
self.session = mock.MagicMock()
|
||||
self.session.getAPIVersion.return_value = koji.API_VERSION
|
||||
self.build_target_info = {'build_tag': 444,
|
||||
'build_tag_name': 'test-tag',
|
||||
'dest_tag': 445,
|
||||
'dest_tag_name': 'dest-test-tag',
|
||||
'id': 1,
|
||||
'name': 'test-target'}
|
||||
self.dest_tag_info = {'arches': 'x86_64',
|
||||
'extra': {},
|
||||
'id': 1,
|
||||
'name': 'new-dest-tag'}
|
||||
self.build_tag_info = {'arches': 'x86_64',
|
||||
'extra': {},
|
||||
'id': 1,
|
||||
'name': 'new-build-tag'}
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_edit_target_without_option(self, stderr):
|
||||
|
|
@ -46,3 +62,100 @@ class TestEditTarget(utils.CliTestCase):
|
|||
self.assertExitCode(ex, 1)
|
||||
self.assert_console_message(stderr, expected)
|
||||
self.session.editBuildTarget.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_edit_target_without_perms(self, stderr):
|
||||
side_effect_result = [False, False]
|
||||
|
||||
target = 'test-target'
|
||||
self.session.hasPerm.side_effect = side_effect_result
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_edit_target(self.options, self.session, [target])
|
||||
self.assertExitCode(ex, 2)
|
||||
expected_msg = """Usage: %s edit-target [options] <name>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: This action requires target or admin privileges
|
||||
""" % (self.progname, self.progname)
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
self.session.editBuildTarget.assert_not_called()
|
||||
self.session.getBuildTarget.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||
def test_edit_target_new_name(self, stdout):
|
||||
target = 'test-target'
|
||||
new_target_name = 'new-test-target'
|
||||
self.session.getBuildTarget.return_value = self.build_target_info
|
||||
rv = handle_edit_target(self.options, self.session, ['--rename', new_target_name, target])
|
||||
self.assertEqual(rv, None)
|
||||
expected_msg = ''
|
||||
self.assert_console_message(stdout, expected_msg)
|
||||
self.session.getTag.assert_not_called()
|
||||
self.session.getBuildTarget.assert_called_once_with(target)
|
||||
self.session.editBuildTarget.assert_called_once_with(
|
||||
self.build_target_info['orig_name'], new_target_name,
|
||||
self.build_target_info['build_tag_name'], self.build_target_info['dest_tag_name'])
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||
def test_edit_target_dest_tag(self, stdout):
|
||||
target = 'test-target'
|
||||
new_dest_tag = 'new-dest-tag'
|
||||
self.session.getBuildTarget.return_value = self.build_target_info
|
||||
self.session.getTag.return_value = self.dest_tag_info
|
||||
rv = handle_edit_target(self.options, self.session, ['--dest-tag', new_dest_tag, target])
|
||||
self.assertEqual(rv, None)
|
||||
expected_msg = ''
|
||||
self.assert_console_message(stdout, expected_msg)
|
||||
self.session.getTag.assert_called_once_with(new_dest_tag)
|
||||
self.session.getBuildTarget.assert_called_once_with(target)
|
||||
self.session.editBuildTarget.assert_called_once_with(
|
||||
self.build_target_info['orig_name'], self.build_target_info['name'],
|
||||
self.build_target_info['build_tag_name'], self.build_target_info['dest_tag_name'])
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_edit_target_non_exist_build_tag(self, stderr):
|
||||
target = 'test-target'
|
||||
new_build_tag = 'new-build-tag'
|
||||
self.session.getBuildTarget.return_value = self.build_target_info
|
||||
self.session.getTag.return_value = None
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_edit_target(self.options, self.session, ['--build-tag', new_build_tag, target])
|
||||
self.assertExitCode(ex, 1)
|
||||
expected_msg = "No such tag: %s\n" % new_build_tag
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
self.session.getTag.assert_called_once_with(new_build_tag)
|
||||
self.session.getBuildTarget.assert_called_once_with(target)
|
||||
self.session.editBuildTarget.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_edit_target_tag_arch_none(self, stderr):
|
||||
target = 'test-target'
|
||||
new_build_tag = 'new-build-tag'
|
||||
build_tag_info = copy.deepcopy(self.build_tag_info)
|
||||
build_tag_info['arches'] = ''
|
||||
self.session.getBuildTarget.return_value = self.build_target_info
|
||||
self.session.getTag.return_value = build_tag_info
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_edit_target(self.options, self.session, ['--build-tag', new_build_tag, target])
|
||||
self.assertExitCode(ex, 1)
|
||||
expected_msg = "Build tag has no arches: %s\n" % new_build_tag
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
self.session.getTag.assert_called_once_with(new_build_tag)
|
||||
self.session.getBuildTarget.assert_called_once_with(target)
|
||||
self.session.editBuildTarget.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=StringIO)
|
||||
def test_edit_target_build_tag_valid(self, stdout):
|
||||
target = 'test-target'
|
||||
new_build_tag = 'new-build-tag'
|
||||
self.session.getBuildTarget.return_value = self.build_target_info
|
||||
self.session.getTag.return_value = self.build_tag_info
|
||||
rv = handle_edit_target(self.options, self.session, ['--build-tag', new_build_tag, target])
|
||||
self.assertEqual(rv, None)
|
||||
expected_msg = ''
|
||||
self.assert_console_message(stdout, expected_msg)
|
||||
self.session.getTag.assert_called_once_with(new_build_tag)
|
||||
self.session.getBuildTarget.assert_called_once_with(target)
|
||||
self.session.editBuildTarget.assert_called_once_with(
|
||||
self.build_target_info['orig_name'], self.build_target_info['name'],
|
||||
self.build_target_info['build_tag_name'], self.build_target_info['dest_tag_name'])
|
||||
|
|
|
|||
|
|
@ -52,6 +52,24 @@ class TestRemoveTag(utils.CliTestCase):
|
|||
self.session.deleteTag.assert_called_once_with(tag_info['id'])
|
||||
self.session.getTag.assert_called_with(tag_info['name'])
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_remove_tag_without_perms(self, stderr):
|
||||
side_effect_result = [False, False]
|
||||
|
||||
tag = 'test-tag'
|
||||
self.session.hasPerm.side_effect = side_effect_result
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_remove_tag(self.options, self.session, [tag])
|
||||
self.assertExitCode(ex, 2)
|
||||
expected_msg = """Usage: %s remove-tag [options] <name>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: This action requires tag or admin privileges
|
||||
""" % (self.progname, self.progname)
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
self.session.deleteTag.assert_not_called()
|
||||
self.session.getTag.assert_not_called()
|
||||
|
||||
def test_remove_tag_help(self):
|
||||
self.assert_help(
|
||||
handle_remove_tag,
|
||||
|
|
|
|||
|
|
@ -51,6 +51,24 @@ class TestRemoveTarget(utils.CliTestCase):
|
|||
self.session.deleteBuildTarget.assert_called_once_with(build_target['id'])
|
||||
self.session.getBuildTarget.assert_called_with(build_target['name'])
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=StringIO)
|
||||
def test_remove_target_without_perms(self, stderr):
|
||||
side_effect_result = [False, False]
|
||||
|
||||
target = 'test-target'
|
||||
self.session.hasPerm.side_effect = side_effect_result
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_remove_target(self.options, self.session, [target])
|
||||
self.assertExitCode(ex, 2)
|
||||
expected_msg = """Usage: %s remove-target [options] <name>
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: This action requires target or admin privileges
|
||||
""" % (self.progname, self.progname)
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
self.session.deleteBuildTarget.assert_not_called()
|
||||
self.session.getBuildTarget.assert_not_called()
|
||||
|
||||
def test_remove_target_help(self):
|
||||
self.assert_help(
|
||||
handle_remove_target,
|
||||
|
|
|
|||
|
|
@ -64,6 +64,23 @@ class TestRenameChannel(utils.CliTestCase):
|
|||
self.session.getChannel.assert_called_once_with(self.channel_name_old)
|
||||
self.session.renameChannel.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
@mock.patch('sys.stderr', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_rename_channel_more_args(self, activate_session_mock, stderr, stdout):
|
||||
args = [self.channel_name_old, self.channel_name_new, 'extra-arg']
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_rename_channel(self.options, self.session, args)
|
||||
self.assertExitCode(ex, 2)
|
||||
expected = 'Incorrect number of arguments'
|
||||
depr_warn = 'rename-channel is deprecated and will be removed in 1.28'
|
||||
self.assert_console_message(stderr, expected, wipe=False, regex=True)
|
||||
self.assert_console_message(stdout, depr_warn, wipe=False, regex=True)
|
||||
# Finally, assert that things were called as we expected.
|
||||
activate_session_mock.assert_not_called()
|
||||
self.session.getChannel.assert_not_called()
|
||||
self.session.renameChannel.assert_not_called()
|
||||
|
||||
def test_handle_rename_channel_help(self):
|
||||
self.assert_help(
|
||||
handle_rename_channel,
|
||||
|
|
|
|||
|
|
@ -14,59 +14,44 @@ class TestRestartHosts(utils.CliTestCase):
|
|||
maxDiff = None
|
||||
|
||||
def setUp(self):
|
||||
self.options = mock.MagicMock()
|
||||
self.options.quiet = None
|
||||
self.options.poll_interval = 3
|
||||
self.session = mock.MagicMock()
|
||||
self.activate_session_mock = mock.patch('koji_cli.commands.activate_session').start()
|
||||
self.running_in_bg_mock = mock.patch('koji_cli.commands._running_in_bg').start()
|
||||
self.running_in_bg_mock.return_value = False
|
||||
self.watch_tasks_mock = mock.patch('koji_cli.commands.watch_tasks').start()
|
||||
self.task_id = 101
|
||||
|
||||
@mock.patch('koji_cli.commands.watch_tasks')
|
||||
@mock.patch('koji_cli.commands._running_in_bg')
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_restart_hosts_force_options(
|
||||
self, activate_session_mock, running_in_bg_mock, watch_tasks_mock):
|
||||
def test_handle_restart_hosts_force_options(self):
|
||||
"""Test %s function with --force option""" % handle_restart_hosts.__name__
|
||||
arguments = ['--force']
|
||||
options = mock.MagicMock(quiet=None, poll_interval=3)
|
||||
session = mock.MagicMock()
|
||||
|
||||
# set running in foreground
|
||||
running_in_bg_mock.return_value = False
|
||||
|
||||
session.getHost.return_value = None
|
||||
session.restartHosts.return_value = self.task_id
|
||||
session.logout.return_value = None
|
||||
self.session.getHost.return_value = None
|
||||
self.session.restartHosts.return_value = self.task_id
|
||||
self.session.logout.return_value = None
|
||||
|
||||
# has other restart tasks are running case
|
||||
session.listTasks.return_value = [{'id': 1}, {'id': 2}, {'id': 3}]
|
||||
self.session.listTasks.return_value = [{'id': 1}, {'id': 2}, {'id': 3}]
|
||||
|
||||
handle_restart_hosts(options, session, arguments)
|
||||
activate_session_mock.assert_called_once()
|
||||
session.listTasks.assert_not_called()
|
||||
handle_restart_hosts(self.options, self.session, arguments)
|
||||
self.activate_session_mock.assert_called_once()
|
||||
self.session.listTasks.assert_not_called()
|
||||
|
||||
session.restartHosts.assert_called_with()
|
||||
session.logout.assert_called_once()
|
||||
watch_tasks_mock.assert_called_with(
|
||||
session, [self.task_id], quiet=None, poll_interval=3, topurl=options.topurl)
|
||||
self.session.restartHosts.assert_called_with()
|
||||
self.session.logout.assert_called_once()
|
||||
self.watch_tasks_mock.assert_called_with(
|
||||
self.session, [self.task_id], quiet=None, poll_interval=3, topurl=self.options.topurl)
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=six.StringIO)
|
||||
@mock.patch('sys.stdout', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands.watch_tasks')
|
||||
@mock.patch('koji_cli.commands._running_in_bg')
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_restart_hosts_has_other_tasks(
|
||||
self,
|
||||
activate_session_mock,
|
||||
running_in_bg_mock,
|
||||
watch_tasks_mock,
|
||||
stdout,
|
||||
stderr):
|
||||
"""Test %s function when there has other restart tasks exist""" % handle_restart_hosts.__name__
|
||||
options = mock.MagicMock()
|
||||
session = mock.MagicMock()
|
||||
def test_handle_restart_hosts_has_other_tasks(self, stderr):
|
||||
"""Test %s function when there has other restart tasks exist
|
||||
""" % handle_restart_hosts.__name__
|
||||
|
||||
# set running in foreground
|
||||
running_in_bg_mock.return_value = False
|
||||
|
||||
session.getHost.return_value = None
|
||||
session.restartHosts.return_value = True
|
||||
session.logout.return_value = None
|
||||
self.session.getHost.return_value = None
|
||||
self.session.restartHosts.return_value = True
|
||||
self.session.logout.return_value = None
|
||||
|
||||
#
|
||||
# session.listTasks returns:
|
||||
|
|
@ -90,94 +75,110 @@ class TestRestartHosts(utils.CliTestCase):
|
|||
# 'start_ts': 1509647428.02884,
|
||||
# 'create_ts': 1509647408.93375,
|
||||
# 'host_id': 1, 'arch': 'noarch',
|
||||
# 'request': "<?xml version='1.0'?>\n<methodCall>\n<methodName>restartHosts</methodName>\n<params>\n</params>\n</methodCall>\n",
|
||||
# 'request': "<?xml version='1.0'?>\n<methodCall>\n<methodName>restartHosts</methodName>
|
||||
# \n<params>\n</params>\n</methodCall>\n",
|
||||
# 'channel_id': 1,
|
||||
# 'owner_type': 0}]
|
||||
#
|
||||
|
||||
# has other restart tasks are running case
|
||||
session.listTasks.return_value = [{'id': 1}, {'id': 2}, {'id': 3}]
|
||||
self.session.listTasks.return_value = [{'id': 1}, {'id': 2}, {'id': 3}]
|
||||
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_restart_hosts(options, session, [])
|
||||
handle_restart_hosts(self.options, self.session, [])
|
||||
self.assertExitCode(ex, 1)
|
||||
activate_session_mock.assert_called_once()
|
||||
self.activate_session_mock.assert_called_once()
|
||||
|
||||
query_opt = {
|
||||
'method': 'restartHosts',
|
||||
'state': [koji.TASK_STATES[s] for s in ('FREE', 'OPEN', 'ASSIGNED')]
|
||||
}
|
||||
|
||||
session.listTasks.assert_called_with(query_opt)
|
||||
session.restartHosts.assert_not_called()
|
||||
session.logout.assert_not_called()
|
||||
self.session.listTasks.assert_called_with(query_opt)
|
||||
self.session.restartHosts.assert_not_called()
|
||||
self.session.logout.assert_not_called()
|
||||
|
||||
expect = "Found other restartHosts tasks running.\n"
|
||||
expect += "Task ids: %r\n" % \
|
||||
[t['id'] for t in session.listTasks.return_value]
|
||||
[t['id'] for t in self.session.listTasks.return_value]
|
||||
expect += "Use --force to run anyway\n"
|
||||
self.assert_console_message(stderr, expect)
|
||||
|
||||
@mock.patch('koji_cli.commands.watch_tasks')
|
||||
@mock.patch('koji_cli.commands._running_in_bg')
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_restart_hosts_wait_option(
|
||||
self, activate_session_mock, running_in_bg_mock, watch_tasks_mock):
|
||||
def test_handle_restart_hosts_wait_option(self, running_in_bg_mock):
|
||||
"""Test %s function with --force option""" % handle_restart_hosts.__name__
|
||||
arguments = ['--wait']
|
||||
options = mock.MagicMock(quiet=None, poll_interval=3)
|
||||
session = mock.MagicMock()
|
||||
|
||||
# --wait is specified, running_in_bg() should not matter.
|
||||
running_in_bg_mock.return_value = True
|
||||
|
||||
session.getHost.return_value = None
|
||||
session.restartHosts.return_value = self.task_id
|
||||
session.logout.return_value = None
|
||||
self.session.getHost.return_value = None
|
||||
self.session.restartHosts.return_value = self.task_id
|
||||
self.session.logout.return_value = None
|
||||
|
||||
# has other restart tasks are running case
|
||||
session.listTasks.return_value = []
|
||||
self.session.listTasks.return_value = []
|
||||
|
||||
handle_restart_hosts(options, session, arguments)
|
||||
activate_session_mock.assert_called_once()
|
||||
session.listTasks.assert_called_once()
|
||||
handle_restart_hosts(self.options, self.session, arguments)
|
||||
self.activate_session_mock.assert_called_once()
|
||||
self.session.listTasks.assert_called_once()
|
||||
|
||||
session.restartHosts.assert_called_with()
|
||||
session.logout.assert_called_once()
|
||||
watch_tasks_mock.assert_called_with(
|
||||
session, [self.task_id], quiet=None, poll_interval=3, topurl=options.topurl)
|
||||
self.session.restartHosts.assert_called_with()
|
||||
self.session.logout.assert_called_once()
|
||||
self.watch_tasks_mock.assert_called_with(
|
||||
self.session, [self.task_id], quiet=None, poll_interval=3, topurl=self.options.topurl)
|
||||
|
||||
@mock.patch('koji_cli.commands.watch_tasks')
|
||||
@mock.patch('koji_cli.commands._running_in_bg')
|
||||
@mock.patch('koji_cli.commands.activate_session')
|
||||
def test_handle_restart_hosts_other_options(
|
||||
self, activate_session_mock, running_in_bg_mock, watch_tasks_mock):
|
||||
def test_handle_restart_hosts_other_options(self, running_in_bg_mock):
|
||||
"""Test %s function with --force option""" % handle_restart_hosts.__name__
|
||||
arguments = ['--nowait',
|
||||
'--channel', 'createrepo',
|
||||
'--arch', 'x86_64',
|
||||
'--timeout', '10']
|
||||
options = mock.MagicMock(quiet=None, poll_interval=3)
|
||||
session = mock.MagicMock()
|
||||
|
||||
# --no-wait is specified, running_in_bg() should not matter.
|
||||
running_in_bg_mock.return_value = True
|
||||
|
||||
session.getHost.return_value = None
|
||||
session.restartHosts.return_value = 101
|
||||
session.logout.return_value = None
|
||||
self.session.getHost.return_value = None
|
||||
self.session.restartHosts.return_value = 101
|
||||
self.session.logout.return_value = None
|
||||
|
||||
# has other restart tasks are running case
|
||||
session.listTasks.return_value = []
|
||||
self.session.listTasks.return_value = []
|
||||
|
||||
handle_restart_hosts(options, session, arguments)
|
||||
activate_session_mock.assert_called_once()
|
||||
session.listTasks.assert_called_once()
|
||||
handle_restart_hosts(self.options, self.session, arguments)
|
||||
self.activate_session_mock.assert_called_once()
|
||||
self.session.listTasks.assert_called_once()
|
||||
|
||||
session.restartHosts.assert_called_with(
|
||||
self.session.restartHosts.assert_called_with(
|
||||
options={'arches': ['x86_64'], 'timeout': 10, 'channel': 'createrepo'})
|
||||
session.logout.assert_not_called()
|
||||
watch_tasks_mock.assert_not_called()
|
||||
self.session.logout.assert_not_called()
|
||||
self.watch_tasks_mock.assert_not_called()
|
||||
|
||||
@mock.patch('sys.stderr', new_callable=six.StringIO)
|
||||
@mock.patch('koji_cli.commands._running_in_bg')
|
||||
def test_handle_restart_hosts_arguments(self, running_in_bg_mock, stderr):
|
||||
"""Test %s function with --force option""" % handle_restart_hosts.__name__
|
||||
|
||||
# --no-wait is specified, running_in_bg() should not matter.
|
||||
running_in_bg_mock.return_value = True
|
||||
|
||||
with self.assertRaises(SystemExit) as ex:
|
||||
handle_restart_hosts(self.options, self.session, ['10'])
|
||||
|
||||
self.assertExitCode(ex, 2)
|
||||
expected_msg = """Usage: %s restart-hosts [options]
|
||||
(Specify the --help global option for a list of other help options)
|
||||
|
||||
%s: error: restart-hosts does not accept arguments
|
||||
""" % (self.progname, self.progname)
|
||||
self.assert_console_message(stderr, expected_msg)
|
||||
|
||||
self.session.listTasks.assert_not_called()
|
||||
self.activate_session_mock.assert_not_called()
|
||||
self.session.restartHosts.assert_not_called()
|
||||
self.session.logout.assert_not_called()
|
||||
self.watch_tasks_mock.assert_not_called()
|
||||
|
||||
def test_handle_restart_hosts_help(self):
|
||||
self.assert_help(
|
||||
|
|
|
|||
|
|
@ -501,6 +501,16 @@ class TestSpinLiveCD(utils.CliTestCase):
|
|||
activate_session=None)
|
||||
build_image_mock.assert_not_called()
|
||||
|
||||
@mock.patch('koji_cli.commands._build_image')
|
||||
def test_handle_spin_livecd_longer_volid(self, build_image_mock):
|
||||
"""Test handle_spin_livecd volid options error"""
|
||||
expected = self.format_error_message("Volume ID has a maximum length of 32 characters")
|
||||
volid = '12345678901234567890123456789012345'
|
||||
args = ['--volid', volid, 'name', 'version', 'target', 'arch', 'file.ks']
|
||||
self.assert_system_exit(handle_spin_livecd, self.options, self.session, args,
|
||||
stderr=expected, activate_session=None)
|
||||
build_image_mock.assert_not_called()
|
||||
|
||||
def test_handle_spin_livecd_help(self):
|
||||
"""Test handle_spin_livecd help message"""
|
||||
self.assert_help(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue