fix tests
This commit is contained in:
parent
4ba5ba0e5e
commit
6997097392
5 changed files with 329 additions and 302 deletions
|
|
@ -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"])
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
}
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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'}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue