Add CLI unit tests

This commit is contained in:
Jana Cupova 2021-10-18 09:39:30 +02:00 committed by Tomas Kopecek
parent 3d4cf4a3bf
commit 9b235763cd
11 changed files with 573 additions and 584 deletions

View file

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