From 8e5e893e5c18f667d8dc76c1011fa740cc16919c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lubom=C3=ADr=20Sedl=C3=A1=C5=99?= Date: Mon, 8 Feb 2016 13:27:04 +0100 Subject: [PATCH] [koji-wrapper] Add tests for runroot wrapper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Lubomír Sedlář --- pungi/wrappers/kojiwrapper.py | 15 ++++---- tests/test_koji_wrapper.py | 65 +++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 9 deletions(-) diff --git a/pungi/wrappers/kojiwrapper.py b/pungi/wrappers/kojiwrapper.py index b5b7afba..1400f73b 100644 --- a/pungi/wrappers/kojiwrapper.py +++ b/pungi/wrappers/kojiwrapper.py @@ -53,14 +53,12 @@ class KojiWrapper(object): if weight: cmd.append("--weight=%s" % int(weight)) - if packages: - for package in packages: - cmd.append("--package=%s" % package) + for package in packages or []: + cmd.append("--package=%s" % package) - if mounts: - for mount in mounts: - # directories are *not* created here - cmd.append("--mount=%s" % mount) + for mount in mounts or []: + # directories are *not* created here + cmd.append("--mount=%s" % mount) # IMPORTANT: all --opts have to be provided *before* args @@ -91,12 +89,11 @@ class KojiWrapper(object): if output_ends_with_eol: output += "\n" - result = { + return { "retcode": retcode, "output": output, "task_id": task_id, } - return result def get_image_build_cmd(self, config_options, conf_file_dest, wait=True, scratch=False): """ diff --git a/tests/test_koji_wrapper.py b/tests/test_koji_wrapper.py index a75a5eda..bb9a29bd 100755 --- a/tests/test_koji_wrapper.py +++ b/tests/test_koji_wrapper.py @@ -294,5 +294,70 @@ class LiveMediaTestCase(unittest.TestCase): ['--repo=repo-1', '--repo=repo-2', '--skip-tag', '--scratch', '--wait']) +class RunrootKojiWrapperTest(unittest.TestCase): + + def setUp(self): + self.koji_profile = mock.Mock() + with mock.patch('pungi.wrappers.kojiwrapper.koji') as koji: + koji.get_profile_module = mock.Mock( + return_value=mock.Mock( + pathinfo=mock.Mock( + work=mock.Mock(return_value='/koji'), + taskrelpath=mock.Mock(side_effect=lambda id: 'task/' + str(id)), + imagebuild=mock.Mock(side_effect=lambda id: '/koji/imagebuild/' + str(id)), + ) + ) + ) + self.koji_profile = koji.get_profile_module.return_value + self.koji = KojiWrapper('koji') + + def test_get_cmd_minimal(self): + cmd = self.koji.get_runroot_cmd('tgt', 's390x', 'date', use_shell=False, task_id=False) + self.assertEqual(len(cmd), 6) + self.assertEqual(cmd[0], 'koji') + self.assertEqual(cmd[1], 'runroot') + self.assertEqual(cmd[-3], 'tgt') + self.assertEqual(cmd[-2], 's390x') + self.assertEqual(cmd[-1], 'rm -f /var/lib/rpm/__db*; rm -rf /var/cache/yum/*; set -x; date') + self.assertItemsEqual(cmd[2:-3], + ['--channel-override=runroot-local']) + + def test_get_cmd_full(self): + cmd = self.koji.get_runroot_cmd('tgt', 's390x', ['/bin/echo', '&'], + quiet=True, channel='chan', + packages=['strace', 'lorax'], + mounts=['/tmp'], weight=1000) + self.assertEqual(len(cmd), 13) + self.assertEqual(cmd[0], 'koji') + self.assertEqual(cmd[1], 'runroot') + self.assertEqual(cmd[-3], 'tgt') + self.assertEqual(cmd[-2], 's390x') + self.assertEqual(cmd[-1], 'rm -f /var/lib/rpm/__db*; rm -rf /var/cache/yum/*; set -x; /bin/echo \'&\'') + self.assertItemsEqual(cmd[2:-3], + ['--channel-override=chan', '--quiet', '--use-shell', + '--task-id', '--weight=1000', '--package=strace', + '--package=lorax', '--mount=/tmp']) + + @mock.patch('pungi.wrappers.kojiwrapper.run') + def test_run_runroot_cmd_no_task_id(self, run): + cmd = ['koji', 'runroot'] + output = 'Output ...' + run.return_value = (0, output) + + result = self.koji.run_runroot_cmd(cmd) + self.assertDictEqual(result, + {'retcode': 0, 'output': output, 'task_id': None}) + + @mock.patch('pungi.wrappers.kojiwrapper.run') + def test_run_runroot_cmd_with_task_id(self, run): + cmd = ['koji', 'runroot', '--task-id'] + output = 'Output ...\n' + run.return_value = (0, '1234\n' + output) + + result = self.koji.run_runroot_cmd(cmd) + self.assertDictEqual(result, + {'retcode': 0, 'output': output, 'task_id': 1234}) + + if __name__ == "__main__": unittest.main()