PR#4068: Rework mocking of QueryProcessor in DBQueryTestCase

Merges #4068
https://pagure.io/koji/pull-request/4068

Fixes: #4071
https://pagure.io/koji/issue/4071
DBQueryTestCase class doesn't work for other hub modules

Relates: #2758
https://pagure.io/koji/issue/2758
DBQueryTest doesn't clean mock env
This commit is contained in:
Tomas Kopecek 2024-04-15 11:08:38 +02:00
commit f5c9ca95f6
98 changed files with 317 additions and 20 deletions

View file

@ -26,6 +26,9 @@ class TestAddChannel(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_channel(self, stdout):
self.session.addChannel.return_value = self.channel_id

View file

@ -25,6 +25,9 @@ class TestAddExternalRepo(utils.CliTestCase):
self.tag = 'test-tag'
self.priority = 10
def tearDown(self):
mock.patch.stopall()
def test_add_external_repo_invalid_mode(self):
mode = 'test-mode'
arguments = ['--mode', mode]

View file

@ -21,6 +21,9 @@ class TestAddGroup(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_group(self, stdout):
tag = 'tag'

View file

@ -19,6 +19,9 @@ class TestAddHost(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_host(self, stdout):
host = 'host'

View file

@ -19,6 +19,9 @@ class TestAddHostToChannel(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_host_to_channel(self, stdout):
host = 'host'

View file

@ -21,6 +21,9 @@ class TestAddNotification(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_add_notification(self):
self.session.getPackageID.return_value = 1234
self.session.getTagID.return_value = 4321

View file

@ -27,6 +27,9 @@ class TestAddPkg(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_pkg(self, stdout):
tag = 'tag'

View file

@ -21,6 +21,9 @@ class TestAddTag(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_add_tag(self):
"""Test handle_add_tag function"""
# Case 1. no argument error

View file

@ -56,6 +56,9 @@ class TestAddTagInheritance(utils.CliTestCase):
'perm': None,
'perm_id': None}
def tearDown(self):
mock.patch.stopall()
def test_add_tag_inheritance_without_option(self):
arguments = []
expected = self.format_error_message(

View file

@ -20,6 +20,9 @@ class TestAddTarget(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_add_target_without_option(self,):
expected = self.format_error_message(
"Please specify a target name, a build tag, and destination tag")

View file

@ -25,6 +25,9 @@ class TestAddUser(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_user(self, stdout):
"""Test handle_add_user function"""

View file

@ -24,6 +24,9 @@ class TestAddVolume(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_add_volume(self, stdout):
"""Test handle_add_volume function"""

View file

@ -24,6 +24,9 @@ class TestAssignTask(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_assign_task(self, stdout):
hostname = "host"

View file

@ -25,6 +25,9 @@ class TestBlockGroup(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_block_group_nonexistent_tag(self):
tag = 'nonexistent-tag'
group = 'group'

View file

@ -21,6 +21,9 @@ class TestBlockNotification(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_block_notification_non_exist_tag(self):
tag = 'test-tag'
arguments = ['--tag', tag]

View file

@ -26,6 +26,9 @@ class TestBlockPkg(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_block_pkg(self, stdout):
tag = 'tag'

View file

@ -48,6 +48,9 @@ https://docs.pagure.org/koji/HOWTO/#package-organization
%s: error: {message}
""" % (self.progname, self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_build_from_srpm(self, stdout):
args = [self.target, self.source_srpm]

View file

@ -29,6 +29,9 @@ Note, that you can use global option --noauth for anonymous calls here
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_call(self, stdout):
"""Test handle_call function"""

View file

@ -35,6 +35,9 @@ class TestCancel(utils.CliTestCase):
self.session.hub_version = (1, 33, 0)
self.session.hub_version_str = '1.33.0'
def tearDown(self):
mock.patch.stopall()
def test_anon_cancel(self):
args = ['123']
self.activate_session_mock.side_effect = koji.GenericError

View file

@ -31,6 +31,9 @@ class TestChainBuild(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_chain_build(self, stdout):
target = 'target'

View file

@ -29,6 +29,9 @@ class TestDisableChannel(utils.CliTestCase):
'name': 'test-channel'}
]
def tearDown(self):
mock.patch.stopall()
def __vm(self, result):
m = koji.VirtualCall('mcall_method', [], {})
if isinstance(result, dict) and result.get('faultCode'):

View file

@ -21,6 +21,9 @@ class TestDisableHost(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_disable_host_no_such_host(self):
"""Test %s function""" % handle_disable_host.__name__
self.session.getHost.return_value = None

View file

@ -24,6 +24,9 @@ class TestDisableUser(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_disable_user_no_argument(self):
"""Test handle_disable_user function"""
expected = self.format_error_message(

View file

@ -24,6 +24,9 @@ class TestEditExternalRepo(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_edit_external_repo_error(self):
"""Test handle_edit_external_repo function"""
# [(expected, args),...]

View file

@ -28,6 +28,9 @@ class TestEditHost(utils.CliTestCase):
self.description = 'description'
self.comment = 'comment'
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_edit_host(self, stdout):
host_info = mock.ANY

View file

@ -19,6 +19,9 @@ class TestEditNotification(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_edit_notification(self):
self.session.getPackageID.return_value = 1234
self.session.getTagID.return_value = 4321

View file

@ -26,6 +26,9 @@ class TestEditPermission(utils.CliTestCase):
self.perm = 'test-perm'
self.description = 'test-description'
def tearDown(self):
mock.patch.stopall()
def test_handle_edit_permission_argument_error(self):
expected = self.format_error_message("Please specify a permission and a description")
for args in [[], [self.perm]]:

View file

@ -30,6 +30,9 @@ class TestEditTag(utils.CliTestCase):
self.extra = {'extraA': 'A', 'extraB': True}
self.remove_extra = ['extraC', 'extraD']
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_edit_tag_1(self, stdout):
args = [self.tag]

View file

@ -42,6 +42,9 @@ class TestEditTarget(utils.CliTestCase):
self.new_dest_tag = 'new-dest-tag'
self.new_build_tag = 'new-build-tag'
def tearDown(self):
mock.patch.stopall()
def test_edit_target_without_option(self):
expected = self.format_error_message("Please specify a build target")
self.assert_system_exit(

View file

@ -26,6 +26,9 @@ class TestEditUser(utils.CliTestCase):
self.user = 'user'
self.rename = 'user2'
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_edit_user(self, stdout):
args = [self.user]

View file

@ -30,6 +30,9 @@ class TestEnableChannel(utils.CliTestCase):
'name': 'test-channel'}
]
def tearDown(self):
mock.patch.stopall()
def __vm(self, result):
m = koji.VirtualCall('mcall_method', [], {})
if isinstance(result, dict) and result.get('faultCode'):

View file

@ -22,6 +22,9 @@ class TestEnableHost(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_enable_host_no_such_host(self):
"""Test %s function""" % handle_enable_host.__name__

View file

@ -21,6 +21,9 @@ class TestEnableUser(utils.CliTestCase):
""" % (self.progname, self.progname)
self.username = 'user'
def tearDown(self):
mock.patch.stopall()
def test_handle_enable_user_no_argument(self):
"""Test handle_enable_user function"""
expected = self.format_error_message("You must specify the username of the user to enable")

View file

@ -19,6 +19,9 @@ class TestFreeTask(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_free_task_without_arg(self):
expected = self.format_error_message('please specify at least one task_id')
self.assert_system_exit(

View file

@ -22,6 +22,9 @@ class TestGrantCGAccess(utils.CliTestCase):
self.cg = 'cg'
self.user = 'user'
def tearDown(self):
mock.patch.stopall()
def test_handle_grant_cg_access_arg_error(self):
"""Test handle_grant_cg_access function"""
expected = self.format_error_message("Please specify a user and content generator")

View file

@ -26,6 +26,9 @@ class TestGrantPermission(utils.CliTestCase):
self.perm = 'createuser'
self.user = 'user'
def tearDown(self):
mock.patch.stopall()
def test_handle_grant_permission_argument_error(self):
expected = self.format_error_message(
"Please specify a permission and at least one user")

View file

@ -39,6 +39,9 @@ class TestHello(utils.CliTestCase):
""" % (self.progname, self.progname)
self.huburl = "https://%s.local/%shub" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
@mock.patch('koji_cli.commands._printable_unicode')
def test_handle_moshimoshi(self, print_unicode_mock, stdout):

View file

@ -84,6 +84,9 @@ class TestImport(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def __do_import_test(self, options, session, arguments, **kwargs):
expected = kwargs.get('expected', None)
rpm_header = kwargs.get('rpm_header', {})

View file

@ -23,6 +23,9 @@ class TestImportArchive(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_import_archive_without_option(self):
expected = self.format_error_message(
"You must specify a build ID or N-V-R and an archive to import")

View file

@ -34,6 +34,9 @@ class TestImportCG(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
@mock.patch('koji_cli.commands._progress_callback')
@mock.patch('koji.json')

View file

@ -38,6 +38,9 @@ class TestImportComps(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
@mock.patch('koji_cli.commands.libcomps')
@mock.patch('koji_cli.commands._import_comps')

View file

@ -76,6 +76,9 @@ class TestImportSIG(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stderr', new_callable=six.StringIO)
@mock.patch('sys.stdout', new_callable=six.StringIO)
@mock.patch('koji.rip_rpm_sighdr')

View file

@ -19,6 +19,9 @@ class TestListApi(utils.CliTestCase):
self.options = mock.MagicMock()
self.ensure_connection = mock.patch('koji_cli.commands.ensure_connection').start()
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_anon_handle_list_api_all_method(self, stdout):
"""Test anon_handle_list_api function"""

View file

@ -22,6 +22,9 @@ class TestListBuilds(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_list_buildroot_without_args(self):
self.assert_system_exit(
anon_handle_list_buildroot,

View file

@ -64,6 +64,9 @@ class TestListChannels(utils.CliTestCase):
]]
]
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=StringIO)
def test_list_channels_not_quiet(self, stdout):
self.session.listChannels.return_value = self.list_channels

View file

@ -23,6 +23,9 @@ class TestListNotifications(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=StringIO)
def test_list_notifications(self, stdout):
self.session.getBuildNotifications.return_value = [

View file

@ -36,6 +36,9 @@ class TestListPermissions(utils.CliTestCase):
self.user = 'tester'
self.userinfo = {'id': 101, 'name': self.user}
def tearDown(self):
mock.patch.stopall()
def test_handle_list_permissions_arg_error(self):
"""Test handle_list_permissions argument error (no argument is required)"""
expected = self.format_error_message("This command takes no arguments")

View file

@ -52,6 +52,9 @@ class TestListPkgs(utils.CliTestCase):
'perm': None,
'perm_id': None}
def tearDown(self):
mock.patch.stopall()
def test_list_pkgs_non_exist_tag(self):
self.session.getTag.return_value = None
self.assert_system_exit(

View file

@ -20,6 +20,9 @@ class TestListSigned(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def __vm(self, result):
m = koji.VirtualCall('mcall_method', [], {})
if isinstance(result, dict) and result.get('faultCode'):

View file

@ -38,6 +38,9 @@ class TestListTags(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_list_tags_non_exist_package(self):
pkg = 'test-pkg'
self.session.getPackage.return_value = None

View file

@ -65,6 +65,9 @@ config_opts['macros']['%distribution'] = 'Koji Testing'
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_mock_config_buildroot_option(self, stdout):
"""Test anon_handle_mock_config buildroot options"""

View file

@ -18,6 +18,9 @@ class TestRemoveExternalRepo(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_remove_external_repo_help(self):
self.assert_help(
handle_remove_external_repo,

View file

@ -28,6 +28,9 @@ class TestRemovePkg(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stderr', new_callable=six.StringIO)
def test_handle_remove_pkg(self, stderr):
tag = 'tag'

View file

@ -50,6 +50,9 @@ class TestRemoveTagInheritance(utils.CliTestCase):
'perm': None,
'perm_id': None}
def tearDown(self):
mock.patch.stopall()
def test_remove_tag_inheritance_without_option(self):
expected = self.format_error_message(
"This command takes at least one argument: a tag name or ID")

View file

@ -24,6 +24,9 @@ class TestRestartHosts(utils.CliTestCase):
self.watch_tasks_mock = mock.patch('koji_cli.commands.watch_tasks').start()
self.task_id = 101
def tearDown(self):
mock.patch.stopall()
def test_handle_restart_hosts_force_options(self):
"""Test %s function with --force option""" % handle_restart_hosts.__name__
arguments = ['--force']

View file

@ -25,6 +25,9 @@ class TestSetTaskPriority(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
@mock.patch('sys.stderr', new_callable=six.StringIO)
@mock.patch('sys.stdout', new_callable=six.StringIO)
def test_handle_set_task_priority(self, stdout, stderr):

View file

@ -52,6 +52,9 @@ class TestShowGroups(utils.CliTestCase):
'group_id': 3}
]
def tearDown(self):
mock.patch.stopall()
def test_show_groups_incorrect_num_of_args(self):
arguments = []
self.assert_system_exit(

View file

@ -34,6 +34,9 @@ class TestUntagBuild(utils.CliTestCase):
'name': 'test-package', 'release': '1.f35', 'tag.name': 'test-tag',
'tag_id': 460, 'version': '1.1'}]}
def tearDown(self):
mock.patch.stopall()
def __vm(self, result):
m = koji.VirtualCall('mcall_method', [], {})
if isinstance(result, dict) and result.get('faultCode'):

View file

@ -21,6 +21,9 @@ class TestWatchLogs(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_handle_watch_logs_help(self):
self.assert_help(
anon_handle_watch_logs,

View file

@ -39,6 +39,9 @@ class TestWinBuild(utils.CliTestCase):
%s: error: {message}
""" % (self.progname, self.progname)
def tearDown(self):
mock.patch.stopall()
def test_win_build_without_option(self):
self.assert_system_exit(
handle_win_build,

View file

@ -12,6 +12,9 @@ class TestAddGroupMember(unittest.TestCase):
self.exports = kojihub.RootExports()
self.get_user = mock.patch('kojihub.kojihub.get_user').start()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_user(self):
data = [{'id': 3,
'name': 'test-group',

View file

@ -19,6 +19,9 @@ class TestAddVolume(unittest.TestCase):
self.context.session.assertPerm = mock.MagicMock()
self.context.session.assertLogin = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def test_add_volume_wrong_format(self):
volume_name = 'volume-name+'

View file

@ -18,6 +18,9 @@ class TestCreateImageBuild(unittest.TestCase):
self.inserts = []
self.insert_execute = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def getInsert(self, *args, **kwargs):
insert = IP(*args, **kwargs)
insert.execute = self.insert_execute

View file

@ -32,6 +32,9 @@ class TestCreateMavenBuild(unittest.TestCase):
}
self.build_info = 'test-build-11-12'
def tearDown(self):
mock.patch.stopall()
def getInsert(self, *args, **kwargs):
insert = IP(*args, **kwargs)
insert.execute = self.insert_execute

View file

@ -24,6 +24,9 @@ class TestCreateUser(unittest.TestCase):
self.user_info_krb = {'id': 1, 'krb_principals': ['test_user@fedora.org'],
'name': self.user_name, 'status': 0, 'usertype': 0}
def tearDown(self):
mock.patch.stopall()
def test_create_user_wrong_format(self):
user_name = 'test-user+'

View file

@ -32,6 +32,9 @@ class TestCreateWinBuild(unittest.TestCase):
}
self.build_info = 'test-build-11-12'
def tearDown(self):
mock.patch.stopall()
def getInsert(self, *args, **kwargs):
insert = IP(*args, **kwargs)
insert.execute = self.insert_execute

View file

@ -28,6 +28,9 @@ class TestDeleteBuildTarget(unittest.TestCase):
# start with "assert"
self.context_db.session.assertLogin = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_target(self):
build_target = 'build-target'
self.lookup_build_target.return_value = None

View file

@ -24,6 +24,9 @@ class TestDisableChannel(unittest.TestCase):
self.updates = []
self.channelname = 'test-channel'
def tearDown(self):
mock.patch.stopall()
def test_non_exist_channel(self):
self.get_channel.return_value = None
with self.assertRaises(koji.GenericError) as cm:

View file

@ -12,6 +12,9 @@ class TestDisableUser(unittest.TestCase):
self.exports = kojihub.RootExports()
self.get_user = mock.patch('kojihub.kojihub.get_user').start()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_user(self):
username = 'test-user'
self.get_user.return_value = None

View file

@ -24,6 +24,9 @@ class TestEditPermission(unittest.TestCase):
self.perm_info = {'id': 1, 'name': self.perm_name}
self.description = 'test-description'
def tearDown(self):
mock.patch.stopall()
def test_edit_permission_non_exist_permission(self):
self.lookup_perm.side_effect = koji.GenericError
with self.assertRaises(koji.GenericError):

View file

@ -24,6 +24,9 @@ class TestEnableChannel(unittest.TestCase):
self.updates = []
self.channelname = 'test-channel'
def tearDown(self):
mock.patch.stopall()
def test_non_exist_channel(self):
self.get_channel.return_value = None

View file

@ -12,6 +12,9 @@ class TestEnableUser(unittest.TestCase):
self.exports = kojihub.RootExports()
self.get_user = mock.patch('kojihub.kojihub.get_user').start()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_user(self):
username = 'test-user'
self.get_user.return_value = None

View file

@ -24,6 +24,9 @@ class TestFindBuildId(unittest.TestCase):
self.queries = []
self.query_singleValue = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_build_dict(self):
build = {
'name': 'test_name',

View file

@ -11,6 +11,9 @@ class TestGetRPMDeps(unittest.TestCase):
self.get_rpm = mock.patch('kojihub.kojihub.get_rpm').start()
self.get_build = mock.patch('kojihub.kojihub.get_build').start()
def tearDown(self):
mock.patch.stopall()
def test_getRPMDeps_no_rpminfo(self):
def mock_get_rpm(rpmID, strict=False):
if strict:

View file

@ -10,6 +10,9 @@ class TestGetBuildNotifications(unittest.TestCase):
self.get_user = mock.patch('kojihub.kojihub.get_user').start()
self.get_build_notifications = mock.patch('kojihub.kojihub.get_build_notifications').start()
def tearDown(self):
mock.patch.stopall()
def test_loggedin_user(self):
self.get_user.return_value = {'id': 1}
kojihub.RootExports().getBuildNotifications(None)

View file

@ -10,6 +10,9 @@ class TestGetBuildroot(unittest.TestCase):
self.query_buildroots = mock.patch('kojihub.kojihub.query_buildroots').start()
self.buildroot_id = 1
def tearDown(self):
mock.patch.stopall()
def test_empty_buildroots_without_strict(self):
self.query_buildroots.return_value = []
rv = kojihub.get_buildroot(self.buildroot_id, strict=False)

View file

@ -17,6 +17,9 @@ class TestGetChangelogEntries(unittest.TestCase):
self.cursor = mock.MagicMock()
self.os_path_exists = mock.patch('os.path.exists').start()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_build(self):
build_id = 1
self.cursor.fetchone.return_value = None

View file

@ -12,6 +12,9 @@ class TestGetExternalRepo(unittest.TestCase):
self.get_external_repos = mock.patch('kojihub.kojihub.get_external_repos').start()
self.exports = kojihub.RootExports()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_repo_with_strict(self):
repo = 'test-repo'
self.get_external_repos.return_value = []

View file

@ -11,6 +11,9 @@ class TestGetVolume(unittest.TestCase):
self.exports = kojihub.RootExports()
self.lookup_name = mock.patch('kojihub.kojihub.lookup_name').start()
def tearDown(self):
mock.patch.stopall()
def test_non_exist_volume_with_strict(self):
volume = ['test-volume']
self.lookup_name.return_value = None

View file

@ -32,6 +32,9 @@ class TestGrantPermission(unittest.TestCase):
'status': 0, 'usertype': 0}
self.perm_info = {'id': 1, 'name': self.perms_name}
def tearDown(self):
mock.patch.stopall()
def test_grant_permission_wrong_format(self):
perms_name = 'test-perms+'

View file

@ -61,6 +61,9 @@ class TestGroupPkglist(unittest.TestCase):
self.context_db.event_id = 42
self.context_db.session.user_id = 24
def tearDown(self):
mock.patch.stopall()
def test_grp_pkg_add_previous_changed(self):
self.lookup_tag.return_value = self.taginfo
self.lookup_group.return_value = self.groupinfo

View file

@ -61,6 +61,9 @@ class TestGroupReqlist(unittest.TestCase):
self.context_db.event_id = 42
self.context_db.session.user_id = 24
def tearDown(self):
mock.patch.stopall()
def test_grp_req_add_not_previous(self):
self.lookup_tag.return_value = self.taginfo
self.lookup_group.side_effect = [self.groupinfo, self.reqinfo]

View file

@ -22,6 +22,7 @@ class TestImportImageInternal(unittest.TestCase):
def tearDown(self):
shutil.rmtree(self.tempdir)
mock.patch.stopall()
def test_basic(self):
task = mock.MagicMock()

View file

@ -86,6 +86,9 @@ class TestListBuilds(unittest.TestCase):
'volume_name': 'DEFAULT',
'draft': False},]
def tearDown(self):
mock.patch.stopall()
def test_wrong_package(self):
package = 'test-package'
self.get_package_id.return_value = None

View file

@ -27,6 +27,9 @@ class TestListTagged(unittest.TestCase):
'release': '1.fc35', 'state': 1, 'tag_id': 1, 'tag_name': 'test-tag',
'task_id': None, 'version': '2.52', 'volume_id': 0, 'volume_name': 'DEFAULT'}]
def tearDown(self):
mock.patch.stopall()
def getQuery(self, *args, **kwargs):
query = QP(*args, **kwargs)
query.execute = mock.MagicMock()

View file

@ -48,6 +48,9 @@ class TestListTaggedArchives(unittest.TestCase):
'volume_name': 'DEFAULT'}]
]
def tearDown(self):
mock.patch.stopall()
def getQuery(self, *args, **kwargs):
query = QP(*args, **kwargs)
query.execute = mock.MagicMock()

View file

@ -47,6 +47,9 @@ class TestListTaggedRPMS(unittest.TestCase):
'volume_name': 'DEFAULT'}]
]
def tearDown(self):
mock.patch.stopall()
def getQuery(self, *args, **kwargs):
query = QP(*args, **kwargs)
query.execute = mock.MagicMock()

View file

@ -32,6 +32,9 @@ class TestHost(unittest.TestCase):
self.queries = []
self.query_execute = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
@mock.patch('kojihub.kojihub.context')
def test_instantiation_not_a_host(self, context):
context.session.getHostId.return_value = None

View file

@ -15,6 +15,9 @@ class DummyExports(object):
class TestMulticall(unittest.TestCase):
def tearDown(self):
mock.patch.stopall()
def test_multicall(self):
self.context_db = mock.patch('kojihub.db.context').start()
kojixmlrpc.kojihub = mock.MagicMock()

View file

@ -26,6 +26,9 @@ class TestNewMavenBuild(unittest.TestCase):
'build_id': 2,
}
def tearDown(self):
mock.patch.stopall()
def getInsert(self, *args, **kwargs):
insert = IP(*args, **kwargs)
insert.execute = self.insert_execute

View file

@ -31,6 +31,9 @@ class TestNewWinBuild(unittest.TestCase):
'extra': {'extra_key': 'extra_value'},
}
def tearDown(self):
mock.patch.stopall()
def getInsert(self, *args, **kwargs):
insert = IP(*args, **kwargs)
insert.execute = self.insert_execute

View file

@ -20,6 +20,9 @@ class TestQueryBuildroots(unittest.TestCase):
self.queries = []
self.query_execute = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def test_query_buildroots(self):
self.query_execute.side_effect = [[7], [7], [7], []]
self.repo_references.return_value = [{'id': 7, 'host_id': 1, 'create_event': 333,

View file

@ -35,6 +35,9 @@ class TestQueryRPMSigs(unittest.TestCase):
'size': 25644,
'version': '3.3'}
def tearDown(self):
mock.patch.stopall()
def test_rpm_dict(self):
rinfo_dict = {
'arch': 'x86_64',

View file

@ -14,6 +14,9 @@ class TestRestartHosts(unittest.TestCase):
self.context.session.assertPerm = mock.MagicMock()
self.make_task = mock.patch('kojihub.kojihub.make_task').start()
def tearDown(self):
mock.patch.stopall()
def test_options_is_none(self):
self.make_task.return_value = 13
rv = self.exports.restartHosts()

View file

@ -23,6 +23,9 @@ class TestSetUserStatus(unittest.TestCase):
self.context.session.assertPerm = mock.MagicMock()
self.update_execute = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def test_wrong_status(self):
status = 111
with self.assertRaises(koji.GenericError) as cm:

View file

@ -15,6 +15,9 @@ class TestVerifyNameInternal(unittest.TestCase):
self.context.opts = {'MaxNameLengthInternal': 15,
'RegexNameInternal.compiled': re.compile('^[A-Za-z0-9/_.+-]+$')}
def tearDown(self):
mock.patch.stopall()
def test_verify_name_internal_integer_type(self):
expected_error = "Name should be string"
with self.assertRaises(koji.GenericError) as cm:
@ -43,6 +46,9 @@ class TestVerifyUser(unittest.TestCase):
self.context.opts = {'MaxNameLengthInternal': 15,
'RegexUserName.compiled': re.compile('^[A-Za-z0-9/_.@-]+$')}
def tearDown(self):
mock.patch.stopall()
def test_verify_user_type_name(self):
expected_error = "Name should be string"
with self.assertRaises(koji.GenericError) as cm:

View file

@ -2,46 +2,51 @@ import mock
import unittest
import kojihub
import kojihub.db
QP = kojihub.QueryProcessor
def get_qp_init(testcase):
orig_qp_init = kojihub.db.QueryProcessor.__init__
def my_qp_init(_query, *a, **kw):
_query.execute = mock.MagicMock()
_query.execute.return_value = testcase.qp_execute_return_value
_query.execute.side_effect = testcase.qp_execute_side_effect
_query.executeOne = mock.MagicMock()
_query.executeOne.return_value = testcase.qp_execute_one_return_value
_query.executeOne.side_effect = testcase.qp_execute_one_side_effect
_query.singleValue = mock.MagicMock()
_query.singleValue.return_value = testcase.qp_single_value_return_value
_query.iterate = mock.MagicMock()
_query.iterate.return_value = testcase.qp_iterate_return_value
testcase.queries.append(_query)
return orig_qp_init(_query, *a, **kw)
return my_qp_init
class DBQueryTestCase(unittest.TestCase):
def setUp(self):
mock.patch.stopall()
self.qp_execute_return_value = []
self.qp_execute_side_effect = None
self.qp_execute_one_return_value = []
self.qp_execute_one_side_effect = None
self.qp_single_value_return_value = None
self.qp_iterate_return_value = None
self.QueryProcessor = mock.patch('kojihub.kojihub.QueryProcessor',
side_effect=self.get_query).start()
# patch init to catch queries regardless of how QP is imported
new_init = get_qp_init(self)
self.qp_init = mock.patch('kojihub.db.QueryProcessor.__init__', new=new_init).start()
self.queries = []
def tearDown(self):
mock.patch.stopall()
self.reset_query()
def reset_query(self):
del self.queries[:]
def get_query(self, *args, **kwargs):
query = QP(*args, **kwargs)
query.execute = mock.MagicMock()
query.execute.return_value = self.qp_execute_return_value
query.execute.side_effect = self.qp_execute_side_effect
query.executeOne = mock.MagicMock()
query.executeOne.return_value = self.qp_execute_one_return_value
query.executeOne.side_effect = self.qp_execute_one_side_effect
query.singleValue = mock.MagicMock()
query.singleValue.return_value = self.qp_single_value_return_value
query.iterate = mock.MagicMock()
query.iterate.return_value = self.qp_iterate_return_value
self.queries.append(query)
return query
def assertQueryEqual(self, query, **kwargs):
for k, v in kwargs.items():
self.assertEqual(getattr(query, k, None), v)

View file

@ -44,6 +44,9 @@ class TestAuthSession(unittest.TestCase):
# start with "assert"
self.context.session.assertLogin = mock.MagicMock()
def tearDown(self):
mock.patch.stopall()
def test_instance(self):
"""Simple kojihub.auth.Session instance"""
self.context.opts = {