[createrepo] Add tests
Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com>
This commit is contained in:
parent
055b5e431b
commit
223344e04a
55
tests/fixtures/server-rpms.json
vendored
Normal file
55
tests/fixtures/server-rpms.json
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
{
|
||||
"header": {
|
||||
"version": "1.0"
|
||||
},
|
||||
"payload": {
|
||||
"compose": {
|
||||
"date": "20151203",
|
||||
"id": "Test-20151203.0.t",
|
||||
"respin": 0,
|
||||
"type": "test"
|
||||
},
|
||||
"rpms": {
|
||||
"Server": {
|
||||
"x86_64": {
|
||||
"bash-0:4.3.30-2.fc21.src": {
|
||||
"bash-0:4.3.30-2.fc21.x86_64": {
|
||||
"path": "Server/x86_64/os/Packages/b/bash-4.3.30-2.fc21.x86_64.rpm",
|
||||
"sigkey": null,
|
||||
"category": "binary"
|
||||
},
|
||||
"bash-0:4.3.30-2.fc21.src": {
|
||||
"path": "Server/source/SRPMS/b/bash-4.3.30-2.fc21.src.rpm",
|
||||
"sigkey": null,
|
||||
"category": "source"
|
||||
},
|
||||
"bash-debuginfo-0:4.3.30-2.fc21.x86_64": {
|
||||
"path": "Server/x86_64/debug/tree/Packages/b/bash-debuginfo-4.3.30-2.fc21.x86_64.rpm",
|
||||
"sigkey": null,
|
||||
"category": "debug"
|
||||
}
|
||||
}
|
||||
},
|
||||
"amd64": {
|
||||
"bash-0:4.3.30-2.fc21.src": {
|
||||
"bash-0:4.3.30-2.fc21.amd64": {
|
||||
"path": "Server/amd64/os/Packages/b/bash-4.3.30-2.fc21.amd64.rpm",
|
||||
"sigkey": null,
|
||||
"category": "binary"
|
||||
},
|
||||
"bash-0:4.3.30-2.fc21.src": {
|
||||
"path": "Server/source/SRPMS/b/bash-4.3.30-2.fc21.src.rpm",
|
||||
"sigkey": null,
|
||||
"category": "source"
|
||||
},
|
||||
"bash-debuginfo-0:4.3.30-2.fc21.amd64": {
|
||||
"path": "Server/amd64/debug/tree/Packages/b/bash-debuginfo-4.3.30-2.fc21.amd64.rpm",
|
||||
"sigkey": null,
|
||||
"category": "debug"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -47,6 +47,7 @@ class DummyCompose(object):
|
||||
self.log_info = mock.Mock()
|
||||
self.log_error = mock.Mock()
|
||||
self.log_debug = mock.Mock()
|
||||
self.log_warning = mock.Mock()
|
||||
self.get_image_name = mock.Mock(return_value='image-name')
|
||||
self.image = mock.Mock(path='Client/i386/iso/image.iso')
|
||||
self.im = mock.Mock(images={'Client': {'i386': [self.image]}})
|
||||
@ -74,3 +75,9 @@ def touch(path):
|
||||
pass
|
||||
with open(path, 'w') as f:
|
||||
f.write(path + '\n')
|
||||
|
||||
|
||||
def copy_fixture(fixture_name, dest):
|
||||
src = os.path.join(os.path.dirname(__file__), 'fixtures', fixture_name)
|
||||
touch(dest)
|
||||
shutil.copy2(src, dest)
|
||||
|
217
tests/test_createrepophase.py
Executable file
217
tests/test_createrepophase.py
Executable file
@ -0,0 +1,217 @@
|
||||
#!/usr/bin/env python2
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
|
||||
import unittest
|
||||
import mock
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), ".."))
|
||||
|
||||
from pungi.phases.createrepo import CreaterepoPhase, create_variant_repo
|
||||
from tests.helpers import DummyCompose, PungiTestCase, copy_fixture
|
||||
|
||||
|
||||
class TestCreaterepoPhase(PungiTestCase):
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.ThreadPool')
|
||||
def test_starts_jobs(self, ThreadPoolCls):
|
||||
compose = DummyCompose(self.topdir, {})
|
||||
|
||||
pool = ThreadPoolCls.return_value
|
||||
|
||||
phase = CreaterepoPhase(compose)
|
||||
phase.run()
|
||||
self.maxDiff = None
|
||||
|
||||
self.assertEqual(len(pool.add.mock_calls), 3)
|
||||
self.assertItemsEqual(
|
||||
pool.queue_put.mock_calls,
|
||||
[mock.call((compose, 'x86_64', compose.variants['Server'], 'rpm')),
|
||||
mock.call((compose, 'x86_64', compose.variants['Server'], 'debuginfo')),
|
||||
mock.call((compose, 'amd64', compose.variants['Server'], 'rpm')),
|
||||
mock.call((compose, 'amd64', compose.variants['Server'], 'debuginfo')),
|
||||
mock.call((compose, None, compose.variants['Server'], 'srpm')),
|
||||
mock.call((compose, 'x86_64', compose.variants['Everything'], 'rpm')),
|
||||
mock.call((compose, 'x86_64', compose.variants['Everything'], 'debuginfo')),
|
||||
mock.call((compose, 'amd64', compose.variants['Everything'], 'rpm')),
|
||||
mock.call((compose, 'amd64', compose.variants['Everything'], 'debuginfo')),
|
||||
mock.call((compose, None, compose.variants['Everything'], 'srpm')),
|
||||
mock.call((compose, 'amd64', compose.variants['Client'], 'rpm')),
|
||||
mock.call((compose, 'amd64', compose.variants['Client'], 'debuginfo')),
|
||||
mock.call((compose, None, compose.variants['Client'], 'srpm'))])
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.ThreadPool')
|
||||
def test_skips_empty_variants(self, ThreadPoolCls):
|
||||
compose = DummyCompose(self.topdir, {})
|
||||
compose.variants['Client'].is_empty = True
|
||||
|
||||
pool = ThreadPoolCls.return_value
|
||||
|
||||
phase = CreaterepoPhase(compose)
|
||||
phase.run()
|
||||
self.maxDiff = None
|
||||
|
||||
self.assertEqual(len(pool.add.mock_calls), 3)
|
||||
self.assertItemsEqual(
|
||||
pool.queue_put.mock_calls,
|
||||
[mock.call((compose, 'x86_64', compose.variants['Server'], 'rpm')),
|
||||
mock.call((compose, 'x86_64', compose.variants['Server'], 'debuginfo')),
|
||||
mock.call((compose, 'amd64', compose.variants['Server'], 'rpm')),
|
||||
mock.call((compose, 'amd64', compose.variants['Server'], 'debuginfo')),
|
||||
mock.call((compose, None, compose.variants['Server'], 'srpm')),
|
||||
mock.call((compose, 'x86_64', compose.variants['Everything'], 'rpm')),
|
||||
mock.call((compose, 'x86_64', compose.variants['Everything'], 'debuginfo')),
|
||||
mock.call((compose, 'amd64', compose.variants['Everything'], 'rpm')),
|
||||
mock.call((compose, 'amd64', compose.variants['Everything'], 'debuginfo')),
|
||||
mock.call((compose, None, compose.variants['Everything'], 'srpm'))])
|
||||
|
||||
|
||||
class TestCreateRepoThread(PungiTestCase):
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.run')
|
||||
@mock.patch('pungi.phases.createrepo.CreaterepoWrapper')
|
||||
def test_variant_repo_rpms(self, CreaterepoWrapperCls, run):
|
||||
compose = DummyCompose(self.topdir, {
|
||||
'createrepo_checksum': 'sha256',
|
||||
})
|
||||
compose.DEBUG = False
|
||||
compose.has_comps = False
|
||||
|
||||
repo = CreaterepoWrapperCls.return_value
|
||||
copy_fixture('server-rpms.json', compose.paths.compose.metadata('rpms.json'))
|
||||
|
||||
create_variant_repo(compose, 'x86_64', compose.variants['Server'], 'rpm')
|
||||
|
||||
list_file = self.topdir + '/work/x86_64/repo_package_list/Server.x86_64.rpm.conf'
|
||||
self.assertEqual(CreaterepoWrapperCls.mock_calls[0],
|
||||
mock.call(createrepo_c=True))
|
||||
self.assertItemsEqual(
|
||||
repo.get_createrepo_cmd.mock_calls,
|
||||
[mock.call(self.topdir + '/compose/Server/x86_64/os', checksum='sha256',
|
||||
database=True, groupfile=None, workers=3,
|
||||
outputdir=self.topdir + '/compose/Server/x86_64/os',
|
||||
pkglist=list_file, skip_stat=True, update=True,
|
||||
update_md_path=self.topdir + '/work/x86_64/repo')])
|
||||
with open(list_file) as f:
|
||||
self.assertEqual(f.read(), 'Packages/b/bash-4.3.30-2.fc21.x86_64.rpm\n')
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.run')
|
||||
@mock.patch('pungi.phases.createrepo.CreaterepoWrapper')
|
||||
def test_variant_repo_source(self, CreaterepoWrapperCls, run):
|
||||
compose = DummyCompose(self.topdir, {
|
||||
'createrepo_checksum': 'sha256',
|
||||
})
|
||||
compose.DEBUG = False
|
||||
compose.has_comps = False
|
||||
|
||||
repo = CreaterepoWrapperCls.return_value
|
||||
copy_fixture('server-rpms.json', compose.paths.compose.metadata('rpms.json'))
|
||||
|
||||
create_variant_repo(compose, None, compose.variants['Server'], 'srpm')
|
||||
|
||||
list_file = self.topdir + '/work/global/repo_package_list/Server.None.srpm.conf'
|
||||
self.assertEqual(CreaterepoWrapperCls.mock_calls[0],
|
||||
mock.call(createrepo_c=True))
|
||||
self.assertItemsEqual(
|
||||
repo.get_createrepo_cmd.mock_calls,
|
||||
[mock.call(self.topdir + '/compose/Server/source/tree', checksum='sha256',
|
||||
database=True, groupfile=None, workers=3,
|
||||
outputdir=self.topdir + '/compose/Server/source/tree',
|
||||
pkglist=list_file, skip_stat=True, update=True,
|
||||
update_md_path=self.topdir + '/work/global/repo')])
|
||||
with open(list_file) as f:
|
||||
self.assertItemsEqual(
|
||||
f.read().strip().split('\n'),
|
||||
['../SRPMS/b/bash-4.3.30-2.fc21.src.rpm'])
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.run')
|
||||
@mock.patch('pungi.phases.createrepo.CreaterepoWrapper')
|
||||
def test_variant_repo_debug(self, CreaterepoWrapperCls, run):
|
||||
compose = DummyCompose(self.topdir, {
|
||||
'createrepo_checksum': 'sha256',
|
||||
})
|
||||
compose.DEBUG = False
|
||||
compose.has_comps = False
|
||||
|
||||
repo = CreaterepoWrapperCls.return_value
|
||||
copy_fixture('server-rpms.json', compose.paths.compose.metadata('rpms.json'))
|
||||
|
||||
create_variant_repo(compose, 'x86_64', compose.variants['Server'], 'debuginfo')
|
||||
self.maxDiff = None
|
||||
|
||||
list_file = self.topdir + '/work/x86_64/repo_package_list/Server.x86_64.debuginfo.conf'
|
||||
self.assertEqual(CreaterepoWrapperCls.mock_calls[0],
|
||||
mock.call(createrepo_c=True))
|
||||
self.assertItemsEqual(
|
||||
repo.get_createrepo_cmd.mock_calls,
|
||||
[mock.call(self.topdir + '/compose/Server/x86_64/debug/tree', checksum='sha256',
|
||||
database=True, groupfile=None, workers=3,
|
||||
outputdir=self.topdir + '/compose/Server/x86_64/debug/tree',
|
||||
pkglist=list_file, skip_stat=True, update=True,
|
||||
update_md_path=self.topdir + '/work/x86_64/repo')])
|
||||
with open(list_file) as f:
|
||||
self.assertEqual(f.read(), 'Packages/b/bash-debuginfo-4.3.30-2.fc21.x86_64.rpm\n')
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.run')
|
||||
@mock.patch('pungi.phases.createrepo.CreaterepoWrapper')
|
||||
def test_variant_repo_no_createrepo_c(self, CreaterepoWrapperCls, run):
|
||||
compose = DummyCompose(self.topdir, {
|
||||
'createrepo_c': False,
|
||||
'createrepo_checksum': 'sha256',
|
||||
})
|
||||
compose.DEBUG = False
|
||||
compose.has_comps = False
|
||||
|
||||
repo = CreaterepoWrapperCls.return_value
|
||||
copy_fixture('server-rpms.json', compose.paths.compose.metadata('rpms.json'))
|
||||
|
||||
create_variant_repo(compose, 'x86_64', compose.variants['Server'], 'rpm')
|
||||
|
||||
list_file = self.topdir + '/work/x86_64/repo_package_list/Server.x86_64.rpm.conf'
|
||||
self.assertEqual(CreaterepoWrapperCls.mock_calls[0],
|
||||
mock.call(createrepo_c=False))
|
||||
self.assertItemsEqual(
|
||||
repo.get_createrepo_cmd.mock_calls,
|
||||
[mock.call(self.topdir + '/compose/Server/x86_64/os', checksum='sha256',
|
||||
database=True, groupfile=None, workers=3,
|
||||
outputdir=self.topdir + '/compose/Server/x86_64/os',
|
||||
pkglist=list_file, skip_stat=True, update=True,
|
||||
update_md_path=self.topdir + '/work/x86_64/repo')])
|
||||
with open(list_file) as f:
|
||||
self.assertEqual(f.read(), 'Packages/b/bash-4.3.30-2.fc21.x86_64.rpm\n')
|
||||
|
||||
@mock.patch('pungi.phases.createrepo.run')
|
||||
@mock.patch('pungi.phases.createrepo.CreaterepoWrapper')
|
||||
def test_variant_repo_is_idepotent(self, CreaterepoWrapperCls, run):
|
||||
compose = DummyCompose(self.topdir, {
|
||||
'createrepo_checksum': 'sha256',
|
||||
})
|
||||
compose.DEBUG = False
|
||||
compose.has_comps = False
|
||||
|
||||
repo = CreaterepoWrapperCls.return_value
|
||||
copy_fixture('server-rpms.json', compose.paths.compose.metadata('rpms.json'))
|
||||
|
||||
# Running the same thing twice only creates repo once.
|
||||
create_variant_repo(compose, 'x86_64', compose.variants['Server'], 'rpm')
|
||||
create_variant_repo(compose, 'x86_64', compose.variants['Server'], 'rpm')
|
||||
|
||||
list_file = self.topdir + '/work/x86_64/repo_package_list/Server.x86_64.rpm.conf'
|
||||
self.assertEqual(CreaterepoWrapperCls.mock_calls[0],
|
||||
mock.call(createrepo_c=True))
|
||||
self.assertItemsEqual(
|
||||
repo.get_createrepo_cmd.mock_calls,
|
||||
[mock.call(self.topdir + '/compose/Server/x86_64/os', checksum='sha256',
|
||||
database=True, groupfile=None, workers=3,
|
||||
outputdir=self.topdir + '/compose/Server/x86_64/os',
|
||||
pkglist=list_file, skip_stat=True, update=True,
|
||||
update_md_path=self.topdir + '/work/x86_64/repo')])
|
||||
with open(list_file) as f:
|
||||
self.assertEqual(f.read(), 'Packages/b/bash-4.3.30-2.fc21.x86_64.rpm\n')
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
Loading…
Reference in New Issue
Block a user