fix tests

This commit is contained in:
Yu Ming Zhu 2023-12-15 00:13:05 +00:00
parent 4ba5ba0e5e
commit 6997097392
5 changed files with 329 additions and 302 deletions

View file

@ -12,7 +12,6 @@ UP = kojihub.UpdateProcessor
class TestDeleteBuild(unittest.TestCase):
def getDelete(self, *args, **kwargs):
delete = DP(*args, **kwargs)
delete.execute = mock.MagicMock()
@ -32,115 +31,140 @@ class TestDeleteBuild(unittest.TestCase):
return update
def setUp(self):
self.DeleteProcessor = mock.patch('kojihub.kojihub.DeleteProcessor',
side_effect=self.getDelete).start()
self.DeleteProcessor = mock.patch(
"kojihub.kojihub.DeleteProcessor", side_effect=self.getDelete
).start()
self.deletes = []
self.QueryProcessor = mock.patch('kojihub.kojihub.QueryProcessor',
side_effect=self.getQuery).start()
self.QueryProcessor = mock.patch(
"kojihub.kojihub.QueryProcessor", side_effect=self.getQuery
).start()
self.queries = []
self.query_execute = mock.MagicMock()
self.UpdateProcessor = mock.patch('kojihub.kojihub.UpdateProcessor',
side_effect=self.getUpdate).start()
self.UpdateProcessor = mock.patch(
"kojihub.kojihub.UpdateProcessor", side_effect=self.getUpdate
).start()
self.updates = []
self.context_db = mock.patch('kojihub.db.context').start()
self.context_db = mock.patch("kojihub.db.context").start()
self.context_db.session.assertLogin = mock.MagicMock()
self.context_db.event_id = 42
self.context_db.session.user_id = 24
self.get_build = mock.patch('kojihub.kojihub.get_build').start()
self._delete_build = mock.patch('kojihub.kojihub._delete_build').start()
self.get_user = mock.patch('kojihub.kojihub.get_user').start()
self.context = mock.patch('kojihub.kojihub.context').start()
self.get_build = mock.patch("kojihub.kojihub.get_build").start()
self._delete_build = mock.patch("kojihub.kojihub._delete_build").start()
self.get_user = mock.patch("kojihub.kojihub.get_user").start()
self.context = mock.patch("kojihub.kojihub.context").start()
self.context.session.assertPerm = mock.MagicMock()
self.binfo = {'id': 'BUILD ID', 'state': koji.BUILD_STATES['COMPLETE'], 'name': 'test_nvr',
'nvr': 'test_nvr-3.3-20.el8', 'version': '3.3', 'release': '20'}
self.binfo = {
"id": "BUILD ID",
"state": koji.BUILD_STATES["COMPLETE"],
"name": "test_nvr",
"nvr": "test_nvr-3.3-20.el8",
"version": "3.3",
"release": "20",
"volume_id": 1,
"volume_name": 'testvol',
"draft": False
}
def tearDown(self):
mock.patch.stopall()
def test_delete_build_raise_error(self):
references = ['tags', 'rpms', 'archives', 'component_of']
references = ["tags", "rpms", "archives", "component_of"]
for ref in references:
context = mock.MagicMock()
context.session.return_value = context
with mock.patch('kojihub.kojihub.build_references') as refs:
with mock.patch("kojihub.kojihub.build_references") as refs:
retval = defaultdict(dict)
retval[ref] = True
refs.return_value = retval
with self.assertRaises(koji.GenericError):
kojihub.delete_build(build='', strict=True)
kojihub.delete_build(build="", strict=True)
def test_delete_build_return_false(self):
references = ['tags', 'rpms', 'archives', 'component_of']
references = ["tags", "rpms", "archives", "component_of"]
for ref in references:
context = mock.MagicMock()
context.session.return_value = context
with mock.patch('kojihub.kojihub.build_references') as refs:
with mock.patch("kojihub.kojihub.build_references") as refs:
retval = defaultdict(dict)
retval[ref] = True
refs.return_value = retval
assert kojihub.delete_build(build='', strict=False) is False
assert kojihub.delete_build(build="", strict=False) is False
def test_delete_build_check_last_used_raise_error(self):
references = ['tags', 'rpms', 'archives', 'component_of', 'last_used']
references = ["tags", "rpms", "archives", "component_of", "last_used"]
for ref in references:
context = mock.MagicMock()
context.session.return_value = context
with mock.patch('kojihub.kojihub.build_references') as refs:
with mock.patch("kojihub.kojihub.build_references") as refs:
retval = defaultdict(dict)
if ref == 'last_used':
if ref == "last_used":
retval[ref] = time.time() + 100
refs.return_value = retval
self.assertFalse(kojihub.delete_build(build='', strict=False))
self.assertFalse(kojihub.delete_build(build="", strict=False))
@mock.patch('kojihub.kojihub.build_references')
@mock.patch("kojihub.kojihub.build_references")
def test_delete_build_lazy_refs(self, buildrefs):
'''Test that we can handle lazy return from build_references'''
self.get_user.return_value = {'authtype': 2, 'id': 1, 'krb_principal': None,
'krb_principals': [], 'name': 'kojiadmin', 'status': 0,
'usertype': 0}
buildrefs.return_value = {'tags': []}
"""Test that we can handle lazy return from build_references"""
self.get_user.return_value = {
"authtype": 2,
"id": 1,
"krb_principal": None,
"krb_principals": [],
"name": "kojiadmin",
"status": 0,
"usertype": 0,
}
buildrefs.return_value = {"tags": []}
self.get_build.return_value = self.binfo
kojihub.delete_build(build=self.binfo, strict=True)
# no build refs, so we should have called _delete_build
self._delete_build.assert_called_with(self.binfo)
def test_delete_build_queries(self):
self.query_execute.return_value = [(123, )]
@mock.patch("os.unlink")
@mock.patch("koji.util.rmtree")
def test_delete_build_queries(self, rmtree, unlink):
self.query_execute.side_effect = [
[(123,)], # rpm ids
{'id': 0, 'name': 'DEFAULT'}, # volume DEFAULT
[{'id': 0, 'name': 'DEFAULT'},
{'id': 1, 'name': 'testvol'},
{'id': 2, 'name': 'other'}] # list_volumes()
]
kojihub._delete_build(self.binfo)
self.assertEqual(len(self.queries), 1)
self.assertEqual(len(self.queries), 3)
query = self.queries[0]
self.assertEqual(query.tables, ['rpminfo'])
self.assertEqual(query.tables, ["rpminfo"])
self.assertEqual(query.joins, None)
self.assertEqual(query.clauses, ['build_id=%(build_id)i'])
self.assertEqual(query.columns, ['id'])
self.assertEqual(query.clauses, ["build_id=%(build_id)i"])
self.assertEqual(query.columns, ["id"])
self.assertEqual(len(self.deletes), 2)
delete = self.deletes[0]
self.assertEqual(delete.table, 'rpmsigs')
self.assertEqual(delete.table, "rpmsigs")
self.assertEqual(delete.clauses, ["rpm_id=%(rpm_id)i"])
delete = self.deletes[1]
self.assertEqual(delete.table, 'rpm_checksum')
self.assertEqual(delete.table, "rpm_checksum")
self.assertEqual(delete.clauses, ["rpm_id=%(rpm_id)i"])
self.assertEqual(len(self.updates), 2)
update = self.updates[0]
self.assertEqual(update.table, 'tag_listing')
self.assertEqual(update.values, {'build_id': self.binfo['id']})
self.assertEqual(update.data, {'revoke_event': 42, 'revoker_id': 24})
self.assertEqual(update.rawdata, {'active': 'NULL'})
self.assertEqual(update.clauses, ["build_id=%(build_id)i", 'active = TRUE'])
self.assertEqual(update.table, "tag_listing")
self.assertEqual(update.values, {"build_id": self.binfo["id"]})
self.assertEqual(update.data, {"revoke_event": 42, "revoker_id": 24})
self.assertEqual(update.rawdata, {"active": "NULL"})
self.assertEqual(update.clauses, ["build_id=%(build_id)i", "active = TRUE"])
update = self.updates[1]
self.assertEqual(update.table, 'build')
self.assertEqual(update.values, {'build_id': self.binfo['id']})
self.assertEqual(update.data, {'state': 2})
self.assertEqual(update.table, "build")
self.assertEqual(update.values, {"build_id": self.binfo["id"]})
self.assertEqual(update.data, {"state": 2})
self.assertEqual(update.rawdata, {})
self.assertEqual(update.clauses, ['id=%(build_id)i'])
self.assertEqual(update.clauses, ["id=%(build_id)i"])

View file

@ -211,23 +211,6 @@ class TestImportRPM(unittest.TestCase):
self.assertEqual(insert.data, data)
self.assertEqual(insert.rawdata, {})
def test_import_draft_conflict(self):
with self.assertRaises(koji.GenericError) as cm:
kojihub.import_rpm(self.filename, buildinfo={'id': 1024, 'draft': False}, draft=True)
self.assertEqual("draft property: False of build: 1024 mismatch, True is expected",
str(cm.exception))
self.assertEqual(len(self.inserts), 0)
def test_import_draft_rpm_without_buildinfo(self):
self.os_path_basename.return_value = 'name-version-release.arch.rpm'
self.get_rpm_header.return_value = self.rpm_header_retval
with self.assertRaises(koji.GenericError) as cm:
kojihub.import_rpm(self.filename, draft=True)
self.assertEqual(f"Cannot import draft rpm: {self.os_path_basename.return_value}"
" without specifying a build", str(cm.exception))
self.assertEqual(len(self.inserts), 0)
def test_import_draft_rpm_invalid_release(self):
self.os_path_basename.return_value = 'name-version-release.arch.rpm'
self.get_rpm_header.return_value = self.rpm_header_retval
@ -242,7 +225,7 @@ class TestImportRPM(unittest.TestCase):
}
with self.assertRaises(koji.GenericError) as cm:
kojihub.import_rpm(self.filename, buildinfo=buildinfo, draft=True)
kojihub.import_rpm(self.filename, buildinfo=buildinfo)
self.assertEqual(
'draft release: badrelease is not in valid format',
str(cm.exception)
@ -267,7 +250,7 @@ class TestImportRPM(unittest.TestCase):
}
}
self.nextval.return_value = 9876
kojihub.import_rpm(self.filename, buildinfo=buildinfo, draft=True)
kojihub.import_rpm(self.filename, buildinfo=buildinfo)
data = {
'build_id': 12345,
'name': 'name',
@ -308,7 +291,7 @@ class TestImportRPM(unittest.TestCase):
'draft': True
}
self.nextval.return_value = 9876
kojihub.import_rpm(self.src_filename, buildinfo=buildinfo, draft=True)
kojihub.import_rpm(self.src_filename, buildinfo=buildinfo)
data = {
'build_id': 12345,
'name': 'name',
@ -329,52 +312,3 @@ class TestImportRPM(unittest.TestCase):
self.assertEqual(insert.table, 'rpminfo')
self.assertEqual(insert.data, data)
self.assertEqual(insert.rawdata, {})
def test_import_draft_srpm_without_buildinfo(self):
self.os_path_basename.return_value = 'name-version-release.src.rpm'
retval = copy.copy(self.rpm_header_retval)
retval.update({
'filename': 'name-version-release.src.rpm',
1044: 'name-version-release.src.rpm.bad',
1022: 'src',
1106: 1,
})
self.get_rpm_header.return_value = retval
self.get_build.return_value = {
'state': koji.BUILD_STATES['COMPLETE'],
'name': 'name',
'version': 'version',
'release': 'release',
'id': 5566,
'draft': True,
'extra': {
'draft': {
'target_release': 'release'
}
}
}
self.new_build.return_value = 5566
self.nextval.return_value = 9876
kojihub.import_rpm(self.src_filename, draft=True)
data = {
'build_id': 5566,
'name': 'name',
'arch': 'src',
'buildtime': 'buildtime',
'draft': True,
'payloadhash': '7061796c6f61642068617368',
'epoch': 'epoch',
'version': 'version',
'buildroot_id': None,
'release': 'release',
'external_repo_id': 0,
'id': 9876,
'size': 0,
}
self.assertEqual(len(self.inserts), 1)
insert = self.inserts[0]
self.assertEqual(insert.table, 'rpminfo')
self.assertEqual(insert.data, data)
self.assertEqual(insert.rawdata, {})
self.get_build.assert_called_once_with(5566, strict=True)
self.assertEqual(self.get_build.call_count, 1)

View file

@ -2,7 +2,6 @@ import mock
import unittest
import koji
from koji.util import dslice
import kojihub
IP = kojihub.InsertProcessor
@ -10,21 +9,24 @@ IP = kojihub.InsertProcessor
class TestNewBuild(unittest.TestCase):
def setUp(self):
self.get_rpm = mock.patch('kojihub.kojihub.get_rpm').start()
self.get_external_repo_id = mock.patch('kojihub.kojihub.get_external_repo_id').start()
self.nextval = mock.patch('kojihub.kojihub.nextval').start()
self.Savepoint = mock.patch('kojihub.kojihub.Savepoint').start()
self.InsertProcessor = mock.patch('kojihub.kojihub.InsertProcessor',
side_effect=self.getInsert).start()
self.get_rpm = mock.patch("kojihub.kojihub.get_rpm").start()
self.get_external_repo_id = mock.patch(
"kojihub.kojihub.get_external_repo_id"
).start()
self.nextval = mock.patch("kojihub.kojihub.nextval").start()
self.Savepoint = mock.patch("kojihub.kojihub.Savepoint").start()
self.InsertProcessor = mock.patch(
"kojihub.kojihub.InsertProcessor", side_effect=self.getInsert
).start()
self.inserts = []
self.insert_execute = mock.MagicMock()
self.lookup_package = mock.patch('kojihub.kojihub.lookup_package').start()
self.new_package = mock.patch('kojihub.kojihub.new_package').start()
self.get_user = mock.patch('kojihub.kojihub.get_user').start()
self.get_build = mock.patch('kojihub.kojihub.get_build').start()
self.recycle_build = mock.patch('kojihub.kojihub.recycle_build').start()
self.context = mock.patch('kojihub.kojihub.context').start()
self.find_build_id = mock.patch('kojihub.kojihub.find_build_id').start()
self.lookup_package = mock.patch("kojihub.kojihub.lookup_package").start()
self.new_package = mock.patch("kojihub.kojihub.new_package").start()
self.get_user = mock.patch("kojihub.kojihub.get_user").start()
self.get_build = mock.patch("kojihub.kojihub.get_build").start()
self.recycle_build = mock.patch("kojihub.kojihub.recycle_build").start()
self.context = mock.patch("kojihub.kojihub.context").start()
self.find_build_id = mock.patch("kojihub.kojihub.find_build_id").start()
def tearDown(self):
mock.patch.stopall()
@ -39,37 +41,40 @@ class TestNewBuild(unittest.TestCase):
self.get_build.return_value = None
self.nextval.return_value = 65 # free build id
self.new_package.return_value = 54
self.get_user.return_value = {'id': 123}
self.get_user.return_value = {"id": 123}
data = {
'name': 'test_name',
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
'owner': 'test_owner',
'extra': {'extra_key': 'extra_value'},
"name": "test_name",
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
"owner": "test_owner",
"extra": {"extra_key": "extra_value"},
}
kojihub.new_build(data)
self.assertEqual(len(self.inserts), 1)
insert = self.inserts[0]
self.assertEqual(insert.table, 'build')
self.assertEqual(insert.data, {
'completion_time': 'NOW',
'epoch': 'test_epoch',
'extra': '{"extra_key": "extra_value"}',
'id': 65,
'owner': 123,
'pkg_id': 54,
'release': 'test_release',
'source': None,
'start_time': 'NOW',
'state': 1,
'task_id': None,
'draft': False,
'version': 'test_version',
'volume_id': 0
})
self.assertEqual(insert.table, "build")
self.assertEqual(
insert.data,
{
"completion_time": "NOW",
"epoch": "test_epoch",
"extra": '{"extra_key": "extra_value"}',
"id": 65,
"owner": 123,
"pkg_id": 54,
"release": "test_release",
"source": None,
"start_time": "NOW",
"state": 1,
"task_id": None,
"draft": False,
"version": "test_version",
"volume_id": 0,
},
)
def test_empty_data(self):
with self.assertRaises(koji.GenericError):
@ -79,13 +84,13 @@ class TestNewBuild(unittest.TestCase):
def test_wrong_pkg_id(self):
self.lookup_package.side_effect = koji.GenericError
data = {
'pkg_id': 444,
'name': 'test_name',
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
'owner': 'test_owner',
'extra': {'extra_key': 'extra_value'},
"pkg_id": 444,
"name": "test_name",
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
"owner": "test_owner",
"extra": {"extra_key": "extra_value"},
}
with self.assertRaises(koji.GenericError):
@ -95,11 +100,11 @@ class TestNewBuild(unittest.TestCase):
def test_missing_pkg_id_name(self):
data = {
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
'owner': 'test_owner',
'extra': {'extra_key': 'extra_value'},
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
"owner": "test_owner",
"extra": {"extra_key": "extra_value"},
}
with self.assertRaises(koji.GenericError) as cm:
@ -111,12 +116,12 @@ class TestNewBuild(unittest.TestCase):
def test_wrong_owner(self):
self.get_user.side_effect = koji.GenericError
data = {
'owner': 123456,
'name': 'test_name',
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
'extra': {'extra_key': 'extra_value'},
"owner": 123456,
"name": "test_name",
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
"extra": {"extra_key": "extra_value"},
}
with self.assertRaises(koji.GenericError):
@ -126,13 +131,13 @@ class TestNewBuild(unittest.TestCase):
def test_missing_vre(self):
data = {
'name': 'test_name',
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
"name": "test_name",
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
}
for item in ('version', 'release', 'epoch'):
for item in ("version", "release", "epoch"):
d = data.copy()
del d[item]
with self.assertRaises(koji.GenericError):
@ -146,61 +151,88 @@ class TestNewBuild(unittest.TestCase):
pass
data = {
'owner': 123456,
'name': 'test_name',
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
'extra': {'extra_key': CantDoJSON()},
"owner": 123456,
"name": "test_name",
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
"extra": {"extra_key": CantDoJSON()},
}
with self.assertRaises(koji.GenericError) as cm:
kojihub.new_build(data)
self.assertEqual(len(self.inserts), 0)
self.assertEqual("No such build extra data: %(extra)r" % data, str(cm.exception))
self.assertEqual(
"No such build extra data: %(extra)r" % data, str(cm.exception)
)
def test_draft(self):
data = {
'owner': 123456,
'name': 'test_name',
'version': 'test_version',
'release': 'test_release',
'epoch': 'test_epoch',
'draft': True
"owner": 123456,
"name": "test_name",
"version": "test_version",
"release": "test_release",
"epoch": "test_epoch",
"draft": True,
}
insert_data = {
'completion_time': 'NOW',
'epoch': 'test_epoch',
'extra': '{"draft": {"target_release": "test_release", "promoted": false}}',
'id': 108,
'owner': 123,
'pkg_id': 54,
'release': 'test_release,draft_108',
'source': None,
'start_time': 'NOW',
'state': 1,
'task_id': None,
'draft': True,
'version': 'test_version',
'volume_id': 0
"completion_time": "NOW",
"epoch": "test_epoch",
"extra": '{"draft": {"target_release": "test_release", "promoted": false}}',
"id": 108,
"owner": 123,
"pkg_id": 54,
"release": "test_release,draft_108",
"source": None,
"start_time": "NOW",
"state": 1,
"task_id": None,
"draft": True,
"version": "test_version",
"volume_id": 0,
}
self.nextval.return_value = 108
self.new_package.return_value = 54
self.get_user.return_value = {'id': 123}
self.get_user.return_value = {"id": 123}
self.get_build.side_effect = [None, mock.ANY]
self.find_build_id.return_value = None
kojihub.new_build(data)
self.assertEqual(len(self.inserts), 1)
insert = self.inserts[0]
self.assertEqual(insert.table, 'build')
self.assertEqual(insert.table, "build")
self.assertEqual(insert.data, insert_data)
self.get_build.assert_called_once_with(108, strict=True)
self.assertEqual(self.get_build.call_count, 1)
self.get_build.assert_has_calls(
[
mock.call(
# it looks like a "draft build" because we use the "data" reference
{
"owner": 123,
"name": "test_name",
"version": "test_version",
"release": "test_release,draft_108",
"epoch": "test_epoch",
"draft": True,
"pkg_id": 54,
"extra": None,
"state": 1,
"start_time": "NOW",
"completion_time": "NOW",
"source": None,
"task_id": None,
"volume_id": 0,
"id": 108,
}
),
mock.call(108, strict=True),
]
)
self.find_build_id.assert_called_once_with(
{
'name': 'test_name',
'version': 'test_version',
'release': 'test_release,draft_108'
})
"name": "test_name",
"version": "test_version",
"release": "test_release,draft_108",
}
)

View file

@ -31,8 +31,11 @@ class TestPromoteBuild(unittest.TestCase):
self.assert_policy = mock.patch('kojihub.kojihub.assert_policy').start()
self.apply_volume_policy = mock.patch('kojihub.kojihub.apply_volume_policy',
return_value=None).start()
self.move_and_symlink = mock.patch('kojihub.kojihub.move_and_symlink').start()
self.safer_move = mock.patch('kojihub.kojihub.safer_move').start()
self.ensure_volume_symlink = mock.patch('kojihub.kojihub.ensure_volume_symlink').start()
self.lookup_name = mock.patch('kojihub.kojihub.lookup_name',
return_value={'id': 1, 'name': 'DEFAULT'}).start()
self.os_symlink = mock.patch('os.symlink').start()
self.list_tags = mock.patch('kojihub.kojihub.list_tags',
return_value=[{'id': 101}]).start()
self.set_tag_update = mock.patch('kojihub.kojihub.set_tag_update').start()
@ -107,6 +110,14 @@ class TestPromoteBuild(unittest.TestCase):
self.apply_volume_policy.assert_called_once_with(
self.new_build, strict=False
)
self.safer_move.assert_called_once_with(
'/mnt/koji/vol/X/packages/foo/bar/tgtrel,draft_1',
'/mnt/koji/vol/X/packages/foo/bar/tgtrel'
)
self.os_symlink.assert_called_once_with(
'../../../../../packages/foo/bar/tgtrel',
'/mnt/koji/vol/X/packages/foo/bar/tgtrel,draft_1'
)
def test_promote_build_not_draft(self):
self.get_build.return_value = {'draft': False, 'nvr': 'testnvr'}

View file

@ -10,7 +10,6 @@ UP = kojihub.UpdateProcessor
class TestResetBuild(unittest.TestCase):
def getDelete(self, *args, **kwargs):
delete = DP(*args, **kwargs)
delete.execute = mock.MagicMock()
@ -31,29 +30,49 @@ class TestResetBuild(unittest.TestCase):
def setUp(self):
self.maxDiff = None
self.DeleteProcessor = mock.patch('kojihub.kojihub.DeleteProcessor',
side_effect=self.getDelete).start()
self.DeleteProcessor = mock.patch(
"kojihub.kojihub.DeleteProcessor", side_effect=self.getDelete
).start()
self.deletes = []
self.QueryProcessor = mock.patch('kojihub.kojihub.QueryProcessor',
side_effect=self.getQuery).start()
self.QueryProcessor = mock.patch(
"kojihub.kojihub.QueryProcessor", side_effect=self.getQuery
).start()
self.queries = []
self.query_execute = mock.MagicMock()
self.UpdateProcessor = mock.patch('kojihub.kojihub.UpdateProcessor',
side_effect=self.getUpdate).start()
self.UpdateProcessor = mock.patch(
"kojihub.kojihub.UpdateProcessor", side_effect=self.getUpdate
).start()
self.updates = []
self.get_build = mock.patch('kojihub.kojihub.get_build').start()
self.context = mock.patch('kojihub.kojihub.context').start()
self.get_build = mock.patch("kojihub.kojihub.get_build").start()
self.context = mock.patch("kojihub.kojihub.context").start()
self.context.session.assertPerm = mock.MagicMock()
# don't remove anything unexpected
self.rmtree = mock.patch('koji.util.rmtree').start()
self.unlink = mock.patch('os.unlink').start()
self.rmtree = mock.patch("koji.util.rmtree").start()
self.unlink = mock.patch("os.unlink").start()
self.build_id = 3
self.binfo = {'id': 3, 'state': koji.BUILD_STATES['COMPLETE'], 'name': 'test_nvr',
'nvr': 'test_nvr-3.3-20.el8', 'version': '3.3', 'release': '20',
'task_id': 12, 'volume_id': 1, 'build_id': 3}
self.del_binfo = {'id': 3, 'state': koji.BUILD_STATES['CANCELED'],
'name': 'test_nvr', 'nvr': 'test_nvr-3.3-20.el8', 'version': '3.3',
'release': '20', 'task_id': None, 'volume_id': 0}
self.binfo = {
"id": 3,
"state": koji.BUILD_STATES["COMPLETE"],
"name": "test_nvr",
"nvr": "test_nvr-3.3-20.el8",
"version": "3.3",
"release": "20",
"task_id": 12,
"volume_id": 1,
"build_id": 3,
"draft": False
}
self.del_binfo = {
"id": 3,
"state": koji.BUILD_STATES["CANCELED"],
"name": "test_nvr",
"nvr": "test_nvr-3.3-20.el8",
"version": "3.3",
"release": "20",
"task_id": None,
"volume_id": 0,
"draft": False
}
def tearDown(self):
mock.patch.stopall()
@ -61,128 +80,135 @@ class TestResetBuild(unittest.TestCase):
def test_reset_build_queries(self):
self.get_build.side_effect = [self.binfo, self.del_binfo]
self.query_execute.side_effect = [
[(123, )],
[(9999,)],
[(123,)], # rpm ids
[(9999,)], # archive ids
{"id": 0, "name": "DEFAULT"}, # volume DEFAULT
[
{"id": 0, "name": "DEFAULT"},
{"id": 1, "name": "testvol"},
{"id": 2, "name": "other"},
], # list_volumes()
]
kojihub.reset_build(self.build_id)
self.assertEqual(len(self.queries), 2)
self.assertEqual(len(self.queries), 4)
query = self.queries[0]
self.assertEqual(query.tables, ['rpminfo'])
self.assertEqual(query.tables, ["rpminfo"])
self.assertEqual(query.joins, None)
self.assertEqual(query.clauses, ['build_id=%(id)i'])
self.assertEqual(query.columns, ['id'])
self.assertEqual(query.values, {'id': self.binfo['build_id']})
self.assertEqual(query.clauses, ["build_id=%(id)i"])
self.assertEqual(query.columns, ["id"])
self.assertEqual(query.values, {"id": self.binfo["build_id"]})
query = self.queries[1]
self.assertEqual(query.tables, ['archiveinfo'])
self.assertEqual(query.tables, ["archiveinfo"])
self.assertEqual(query.joins, None)
self.assertEqual(query.clauses, ['build_id=%(id)i'])
self.assertEqual(query.columns, ['id'])
self.assertEqual(query.values, {'id': self.binfo['build_id']})
self.assertEqual(query.clauses, ["build_id=%(id)i"])
self.assertEqual(query.columns, ["id"])
self.assertEqual(query.values, {"id": self.binfo["build_id"]})
self.assertEqual(len(self.updates), 1)
update = self.updates[0]
self.assertEqual(update.table, 'build')
self.assertEqual(update.values, {'id': self.binfo['id']})
self.assertEqual(update.data, {'state': 4, 'task_id': None, 'volume_id': 0})
self.assertEqual(update.table, "build")
self.assertEqual(update.values, {"id": self.binfo["id"]})
self.assertEqual(update.data, {"state": 4, "task_id": None, "volume_id": 0})
self.assertEqual(update.rawdata, {})
self.assertEqual(update.clauses, ['id=%(id)s'])
self.assertEqual(update.clauses, ["id=%(id)s"])
self.assertEqual(len(self.deletes), 18)
delete = self.deletes[0]
self.assertEqual(delete.table, 'rpmsigs')
self.assertEqual(delete.clauses, ['rpm_id=%(rpm_id)i'])
self.assertEqual(delete.values, {'rpm_id': 123})
self.assertEqual(delete.table, "rpmsigs")
self.assertEqual(delete.clauses, ["rpm_id=%(rpm_id)i"])
self.assertEqual(delete.values, {"rpm_id": 123})
delete = self.deletes[1]
self.assertEqual(delete.table, 'buildroot_listing')
self.assertEqual(delete.clauses, ['rpm_id=%(rpm_id)i'])
self.assertEqual(delete.values, {'rpm_id': 123})
self.assertEqual(delete.table, "buildroot_listing")
self.assertEqual(delete.clauses, ["rpm_id=%(rpm_id)i"])
self.assertEqual(delete.values, {"rpm_id": 123})
delete = self.deletes[2]
self.assertEqual(delete.table, 'archive_rpm_components')
self.assertEqual(delete.clauses, ['rpm_id=%(rpm_id)i'])
self.assertEqual(delete.values, {'rpm_id': 123})
self.assertEqual(delete.table, "archive_rpm_components")
self.assertEqual(delete.clauses, ["rpm_id=%(rpm_id)i"])
self.assertEqual(delete.values, {"rpm_id": 123})
delete = self.deletes[3]
self.assertEqual(delete.table, 'rpm_checksum')
self.assertEqual(delete.clauses, ['rpm_id=%(rpm_id)i'])
self.assertEqual(delete.values, {'rpm_id': 123})
self.assertEqual(delete.table, "rpm_checksum")
self.assertEqual(delete.clauses, ["rpm_id=%(rpm_id)i"])
self.assertEqual(delete.values, {"rpm_id": 123})
delete = self.deletes[4]
self.assertEqual(delete.table, 'rpminfo')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "rpminfo")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
delete = self.deletes[5]
self.assertEqual(delete.table, 'maven_archives')
self.assertEqual(delete.clauses, ['archive_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "maven_archives")
self.assertEqual(delete.clauses, ["archive_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[6]
self.assertEqual(delete.table, 'win_archives')
self.assertEqual(delete.clauses, ['archive_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "win_archives")
self.assertEqual(delete.clauses, ["archive_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[7]
self.assertEqual(delete.table, 'image_archives')
self.assertEqual(delete.clauses, ['archive_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "image_archives")
self.assertEqual(delete.clauses, ["archive_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[8]
self.assertEqual(delete.table, 'buildroot_archives')
self.assertEqual(delete.clauses, ['archive_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "buildroot_archives")
self.assertEqual(delete.clauses, ["archive_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[9]
self.assertEqual(delete.table, 'archive_rpm_components')
self.assertEqual(delete.clauses, ['archive_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "archive_rpm_components")
self.assertEqual(delete.clauses, ["archive_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[10]
self.assertEqual(delete.table, 'archive_components')
self.assertEqual(delete.clauses, ['archive_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "archive_components")
self.assertEqual(delete.clauses, ["archive_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[11]
self.assertEqual(delete.table, 'archive_components')
self.assertEqual(delete.clauses, ['component_id=%(archive_id)i'])
self.assertEqual(delete.values, {'archive_id': 9999})
self.assertEqual(delete.table, "archive_components")
self.assertEqual(delete.clauses, ["component_id=%(archive_id)i"])
self.assertEqual(delete.values, {"archive_id": 9999})
delete = self.deletes[12]
self.assertEqual(delete.table, 'archiveinfo')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "archiveinfo")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
delete = self.deletes[13]
self.assertEqual(delete.table, 'maven_builds')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "maven_builds")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
delete = self.deletes[14]
self.assertEqual(delete.table, 'win_builds')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "win_builds")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
delete = self.deletes[15]
self.assertEqual(delete.table, 'image_builds')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "image_builds")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
delete = self.deletes[16]
self.assertEqual(delete.table, 'build_types')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "build_types")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
delete = self.deletes[17]
self.assertEqual(delete.table, 'tag_listing')
self.assertEqual(delete.clauses, ['build_id=%(id)i'])
self.assertEqual(delete.values, {'id': self.binfo['build_id']})
self.assertEqual(delete.table, "tag_listing")
self.assertEqual(delete.clauses, ["build_id=%(id)i"])
self.assertEqual(delete.values, {"id": self.binfo["build_id"]})
self.get_build.assert_has_calls([mock.call(self.build_id),
mock.call(self.build_id, strict=True)])
self.get_build.assert_has_calls(
[mock.call(self.build_id), mock.call(self.build_id, strict=True)]
)
def test_reset_build_non_exist_build(self):
self.get_build.return_value = None