From 0c6f43a9a811b8567cc0b3826eca4e6d036ebe03 Mon Sep 17 00:00:00 2001 From: Jana Cupova Date: Tue, 30 Mar 2021 09:32:14 +0200 Subject: [PATCH] cli: mock-config check arch Fixes: https://pagure.io/koji/issue/2640 --- cli/koji_cli/commands.py | 5 ++++ tests/test_cli/test_mock_config.py | 46 +++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py index c5ce12f6..821b34ad 100644 --- a/cli/koji_cli/commands.py +++ b/cli/koji_cli/commands.py @@ -1023,6 +1023,11 @@ def anon_handle_mock_config(goptions, session, args): if opts['repoid'] != 'latest': event = session.repoInfo(opts['repoid'])['create_event'] buildcfg = session.getBuildConfig(opts['tag_name'], event=event) + if options.arch: + if not buildcfg['arches']: + warn("Tag %s has an empty arch list" % opts['tag_name']) + elif arch not in buildcfg['arches']: + warn('%s is not in the list of tag arches' % arch) if 'mock.package_manager' in buildcfg['extra']: opts['package_manager'] = buildcfg['extra']['mock.package_manager'] if 'mock.yum.module_hotfixes' in buildcfg['extra']: diff --git a/tests/test_cli/test_mock_config.py b/tests/test_cli/test_mock_config.py index d7bff43b..667551df 100644 --- a/tests/test_cli/test_mock_config.py +++ b/tests/test_cli/test_mock_config.py @@ -15,6 +15,7 @@ class TestMockConfig(utils.CliTestCase): maxDiff = None def setUp(self): + self.maxDiff = None self.common_args = [ '--distribution', 'fedora', '--topdir', '/top-dir', @@ -237,7 +238,8 @@ config_opts['macros']['%distribution'] = 'Koji Testing' 'rpm.macro.random_macro2': 'random_macro_content2', 'mock.package_manager': 'yum', 'mock.yum.module_hotfixes': 1, - } + }, + 'arches': 'x86_64', } expected = "Could not get a repo for tag: %(name)s\n" % tag with self.assertRaises(SystemExit) as ex: @@ -273,6 +275,36 @@ config_opts['macros']['%distribution'] = 'Koji Testing' gen_config_mock.assert_called_with( self.progname, tag['arch'], **opts) + # return arch warning and config + arch = 'test' + warn_msg = '%s is not in the list of tag arches' % arch + gen_config_mock.return_value = self.mock_output + arguments = self.common_args + ['--tag', tag['name'], '--arch', arch, + '--name', self.progname, '--latest'] + anon_handle_mock_config(options, session, arguments) + self.assert_console_message(stdout, "%s\n" % gen_config_mock.return_value) + self.assert_console_message(stderr, "%s\n" % warn_msg) + + # return warning that tag arch is empty + session.getBuildConfig.return_value = { + 'id': 301, + 'extra': { + 'rpm.macro.random_macro1': 'random_macro_content1', + 'rpm.macro.random_macro2': 'random_macro_content2', + 'mock.package_manager': 'yum', + 'mock.yum.module_hotfixes': 1, + }, + 'arches': None, + } + arch = 'test' + warn_msg = 'Tag %s has an empty arch list' % tag['name'] + gen_config_mock.return_value = self.mock_output + arguments = self.common_args + ['--tag', tag['name'], '--arch', arch, + '--name', self.progname, '--latest'] + anon_handle_mock_config(options, session, arguments) + self.assert_console_message(stdout, "%s\n" % gen_config_mock.return_value) + self.assert_console_message(stderr, "%s\n" % warn_msg) + @mock.patch('sys.stderr', new_callable=six.StringIO) @mock.patch('sys.stdout', new_callable=six.StringIO) @mock.patch('koji.genMockConfig') @@ -315,6 +347,7 @@ config_opts['macros']['%distribution'] = 'Koji Testing' activate_session=None) session.getBuildTarget.return_value = target + session.getBuildConfig.return_value = {'arches': 'x86_64', 'extra': {}} expected = "Could not get a repo for tag: %s\n" % target['build_tag_name'] with self.assertRaises(SystemExit) as ex: anon_handle_mock_config(options, session, arguments) @@ -349,6 +382,17 @@ config_opts['macros']['%distribution'] = 'Koji Testing' gen_config_mock.assert_called_with( self.progname, arch, **opts) + # return arch warning and config + arch = 'test' + arguments = self.common_args + ['--target', target['name'], + '--arch', arch, + '--name', self.progname] + warn_msg = '%s is not in the list of tag arches' % arch + gen_config_mock.return_value = self.mock_output + anon_handle_mock_config(options, session, arguments) + self.assert_console_message(stdout, "%s\n" % gen_config_mock.return_value) + self.assert_console_message(stderr, "%s\n" % warn_msg) + @mock.patch('sys.stderr', new_callable=six.StringIO) @mock.patch('koji_cli.commands.ensure_connection') def test_handle_mock_config_errors(self, ensure_connection_mock, stderr):