357 lines
12 KiB
Python
357 lines
12 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
import os
|
||
|
import ddt
|
||
|
import unittest
|
||
|
|
||
|
from pyfakefs.fake_filesystem_unittest import TestCase
|
||
|
|
||
|
from pungi.wrappers.kojimock import KojiMock, RELEASE_BUILD_ID
|
||
|
|
||
|
PATH_TO_REPOS = '/path/to/repos'
|
||
|
MODULES_YAML_GZ = 'modules.yaml.gz'
|
||
|
|
||
|
|
||
|
@ddt.ddt
|
||
|
class TestLocalKojiMock(TestCase):
|
||
|
maxDiff = None
|
||
|
|
||
|
FILES_TO_CREATE = [
|
||
|
# modular package that should be excluded from global list
|
||
|
'powertools/Packages/ant-1.10.5-1.module_el8.0.0+30+832da3a1.noarch.rpm',
|
||
|
# packages that should be gathered
|
||
|
'powertools/Packages/libgit2-devel-0.26.8-2.el8.x86_64.rpm',
|
||
|
'appstream/Packages/OpenEXR-devel-2.2.0-11.el8.i686.rpm',
|
||
|
'appstream/Packages/mingw-binutils-generic-2.30-1.el8.x86_64.rpm',
|
||
|
# non-rpm
|
||
|
'appstream/Packages/somenonrpm',
|
||
|
]
|
||
|
|
||
|
MARIADB_MODULE = """
|
||
|
---
|
||
|
document: modulemd
|
||
|
version: 2
|
||
|
data:
|
||
|
name: mariadb-devel
|
||
|
stream: 10.3
|
||
|
version: 8010020200108182321
|
||
|
context: cdc1202b
|
||
|
arch: x86_64
|
||
|
summary: MariaDB Module
|
||
|
license:
|
||
|
content:
|
||
|
- (CDDL or GPLv2 with exceptions) and ASL 2.0
|
||
|
module:
|
||
|
- MIT
|
||
|
description: >-
|
||
|
MariaDB is a community developed branch of MySQL.
|
||
|
components:
|
||
|
rpms:
|
||
|
Judy:
|
||
|
rationale: MariaDB dependency for OQgraph computation engine
|
||
|
ref: a3583b33f939e74a530f2a1dff0552dff2c8ea73
|
||
|
buildorder: 4
|
||
|
arches: [aarch64, i686, ppc64le, x86_64]
|
||
|
artifacts:
|
||
|
rpms:
|
||
|
- Judy-0:1.0.5-18.module_el8.1.0+217+4d875839.i686
|
||
|
- Judy-debuginfo-0:1.0.5-18.module_el8.1.0+217+4d875839.i686
|
||
|
"""
|
||
|
|
||
|
JAVAPACKAGES_TOOLS_MODULE = """
|
||
|
---
|
||
|
document: modulemd
|
||
|
version: 2
|
||
|
data:
|
||
|
name: javapackages-tools
|
||
|
stream: 201801
|
||
|
version: 8000020190628172923
|
||
|
context: b07bea58
|
||
|
arch: x86_64
|
||
|
summary: Tools and macros for Java packaging support
|
||
|
license:
|
||
|
content:
|
||
|
- (CDDL or GPLv2 with exceptions) and ASL 2.0
|
||
|
module:
|
||
|
- MIT
|
||
|
description: >-
|
||
|
Java Packages Tools is a collection of tools that make it easier to build RPM
|
||
|
packages containing software running on Java platform.
|
||
|
components:
|
||
|
rpms:
|
||
|
ant:
|
||
|
rationale: "Runtime dependency of ant-contrib"
|
||
|
ref: 2eaf095676540e2805ee7e8c7f6f78285c428fdc
|
||
|
arches: [aarch64, i686, ppc64le, x86_64]
|
||
|
artifacts:
|
||
|
rpms:
|
||
|
- ant-0:1.10.5-1.module_el8.0.0+30+832da3a1.noarch
|
||
|
- ant-0:1.10.5-1.module_el8.0.0+30+832da3a1.src
|
||
|
"""
|
||
|
|
||
|
ANT_DEFAULTS = """
|
||
|
data:
|
||
|
module: ant
|
||
|
profiles:
|
||
|
'1.10':
|
||
|
- common
|
||
|
stream: '1.10'
|
||
|
document: modulemd-defaults
|
||
|
version: '1'
|
||
|
"""
|
||
|
|
||
|
def setUp(self):
|
||
|
self.setUpPyfakefs()
|
||
|
|
||
|
os.makedirs(PATH_TO_REPOS)
|
||
|
os.makedirs(os.path.join(PATH_TO_REPOS, 'modules'))
|
||
|
|
||
|
with open(os.path.join(PATH_TO_REPOS, 'modules',
|
||
|
'javapackages-tools-201801-8000020190628172923.b07bea58'), 'w') as f:
|
||
|
f.write(self.JAVAPACKAGES_TOOLS_MODULE)
|
||
|
|
||
|
with open(os.path.join(PATH_TO_REPOS, 'modules',
|
||
|
'mariadb-devel-10.3-8010020200108182321.cdc1202b'), 'w') as f:
|
||
|
f.write(self.MARIADB_MODULE)
|
||
|
|
||
|
for filepath in self.FILES_TO_CREATE:
|
||
|
os.makedirs(os.path.join(PATH_TO_REPOS, os.path.dirname(filepath)), exist_ok=True)
|
||
|
open(os.path.join(PATH_TO_REPOS, filepath), 'w').close()
|
||
|
|
||
|
self._koji = KojiMock(PATH_TO_REPOS, os.path.join(PATH_TO_REPOS, 'modules'))
|
||
|
|
||
|
@ddt.data(
|
||
|
[0, {
|
||
|
'completion_ts': 0,
|
||
|
'extra': {
|
||
|
'typeinfo': {
|
||
|
'module': {
|
||
|
'content_koji_tag': 'javapackages-tools-201801-8000020190628172923.b07bea58',
|
||
|
'context': 'b07bea58',
|
||
|
'name': 'javapackages-tools',
|
||
|
'stream': '201801',
|
||
|
'version': '8000020190628172923'
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
'id': 0,
|
||
|
'name': 'javapackages-tools',
|
||
|
'release': '8000020190628172923.b07bea58',
|
||
|
'state': 'COMPLETE',
|
||
|
'version': '201801'
|
||
|
}],
|
||
|
[1, {
|
||
|
'completion_ts': 0,
|
||
|
'extra': {
|
||
|
'typeinfo': {
|
||
|
'module': {
|
||
|
'content_koji_tag': 'mariadb-devel-10.3-8010020200108182321.cdc1202b',
|
||
|
'context': 'cdc1202b',
|
||
|
'name': 'mariadb-devel',
|
||
|
'stream': '10.3',
|
||
|
'version': '8010020200108182321'
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
'id': 1,
|
||
|
'name': 'mariadb-devel',
|
||
|
'release': '8010020200108182321.cdc1202b',
|
||
|
'state': 'COMPLETE',
|
||
|
'version': '10.3'
|
||
|
}]
|
||
|
)
|
||
|
@ddt.unpack
|
||
|
def test_get_build_info(self, build_id, result):
|
||
|
"""
|
||
|
Check that we are able to get build information from getBuild method
|
||
|
"""
|
||
|
build_info = self._koji.getBuild(build_id)
|
||
|
|
||
|
self.assertEqual(result, build_info)
|
||
|
|
||
|
@ddt.data(
|
||
|
[0, [{'btype': 'module', 'build_id': 0, 'filename': 'modulemd.x86_64.txt'},
|
||
|
{'btype': 'module', 'build_id': 0, 'filename': 'modulemd.txt'}]],
|
||
|
[1, [{'btype': 'module', 'build_id': 1, 'filename': 'modulemd.x86_64.txt'},
|
||
|
{'btype': 'module', 'build_id': 1, 'filename': 'modulemd.txt'}]]
|
||
|
)
|
||
|
@ddt.unpack
|
||
|
def test_list_archives(self, build_id, result):
|
||
|
"""
|
||
|
Provides list of archives of module descriptions.
|
||
|
Always should contain at least two files, so
|
||
|
I did a little hack and added modulemd.txt (it is on real koji)
|
||
|
but it is not used later by pungi
|
||
|
"""
|
||
|
build_info = self._koji.listArchives(build_id)
|
||
|
|
||
|
self.assertEqual(result, build_info)
|
||
|
|
||
|
@ddt.data(
|
||
|
[
|
||
|
'javapackages-tools-201801-8000020190628172923.b07bea58',
|
||
|
[
|
||
|
[
|
||
|
{
|
||
|
'arch': 'noarch',
|
||
|
'build_id': 0,
|
||
|
'epoch': '0',
|
||
|
'extra': None,
|
||
|
'id': 262555,
|
||
|
'metadata_only': False,
|
||
|
'name': 'ant',
|
||
|
'release': '1.module_el8.0.0+30+832da3a1',
|
||
|
'size': 0,
|
||
|
'version': '1.10.5'
|
||
|
},
|
||
|
{
|
||
|
'arch': 'src',
|
||
|
'build_id': 0,
|
||
|
'epoch': '0',
|
||
|
'extra': None,
|
||
|
'id': 262555,
|
||
|
'metadata_only': False,
|
||
|
'name': 'ant',
|
||
|
'release': '1.module_el8.0.0+30+832da3a1',
|
||
|
'size': 0,
|
||
|
'version': '1.10.5'
|
||
|
}
|
||
|
],
|
||
|
[
|
||
|
{
|
||
|
'build_id': 0,
|
||
|
'id': 0,
|
||
|
'name': 'javapackages-tools',
|
||
|
'nvr': 'javapackages-tools-201801-8000020190628172923.b07bea58',
|
||
|
'package_name': 'javapackages-tools',
|
||
|
'release': '8000020190628172923',
|
||
|
'tag_name': 'javapackages-tools-201801-8000020190628172923.b07bea58',
|
||
|
'version': '201801',
|
||
|
'volume_name': 'DEFAULT'
|
||
|
}
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'mariadb-devel-10.3-8010020200108182321.cdc1202b',
|
||
|
[
|
||
|
[
|
||
|
{
|
||
|
'arch': 'i686',
|
||
|
'build_id': 1,
|
||
|
'epoch': '0',
|
||
|
'extra': None,
|
||
|
'id': 262555,
|
||
|
'metadata_only': False,
|
||
|
'name': 'Judy',
|
||
|
'release': '18.module_el8.1.0+217+4d875839',
|
||
|
'size': 0,
|
||
|
'version': '1.0.5'
|
||
|
},
|
||
|
{
|
||
|
'arch': 'i686',
|
||
|
'build_id': 1,
|
||
|
'epoch': '0',
|
||
|
'extra': None,
|
||
|
'id': 262555,
|
||
|
'metadata_only': False,
|
||
|
'name': 'Judy-debuginfo',
|
||
|
'release': '18.module_el8.1.0+217+4d875839',
|
||
|
'size': 0,
|
||
|
'version': '1.0.5'
|
||
|
}
|
||
|
],
|
||
|
[
|
||
|
{'build_id': 1,
|
||
|
'id': 1,
|
||
|
'name': 'mariadb-devel',
|
||
|
'nvr': 'mariadb-devel-10.3-8010020200108182321.cdc1202b',
|
||
|
'package_name': 'mariadb-devel',
|
||
|
'release': '8010020200108182321',
|
||
|
'tag_name': 'mariadb-devel-10.3-8010020200108182321.cdc1202b',
|
||
|
'version': '10.3',
|
||
|
'volume_name': 'DEFAULT'
|
||
|
}
|
||
|
]
|
||
|
]
|
||
|
],
|
||
|
[
|
||
|
'dist-c8-compose',
|
||
|
[
|
||
|
[
|
||
|
{
|
||
|
'arch': 'x86_64',
|
||
|
'build_id': RELEASE_BUILD_ID,
|
||
|
'epoch': None,
|
||
|
'extra': None,
|
||
|
'metadata_only': False,
|
||
|
'name': 'libgit2-devel',
|
||
|
'release': '2.el8',
|
||
|
'version': '0.26.8'
|
||
|
},
|
||
|
{
|
||
|
'arch': 'i686',
|
||
|
'build_id': RELEASE_BUILD_ID,
|
||
|
'epoch': None,
|
||
|
'extra': None,
|
||
|
'metadata_only': False,
|
||
|
'name': 'OpenEXR-devel',
|
||
|
'release': '11.el8',
|
||
|
'version': '2.2.0'
|
||
|
},
|
||
|
{
|
||
|
'arch': 'x86_64',
|
||
|
'build_id': RELEASE_BUILD_ID,
|
||
|
'epoch': None,
|
||
|
'extra': None,
|
||
|
'metadata_only': False,
|
||
|
'name': 'mingw-binutils-generic',
|
||
|
'release': '1.el8',
|
||
|
'version': '2.30'
|
||
|
}
|
||
|
],
|
||
|
# no build needed in this case because pungi does not use them
|
||
|
[]
|
||
|
]
|
||
|
],
|
||
|
)
|
||
|
@ddt.unpack
|
||
|
def test_list_tagged_rpms(self, tag, result):
|
||
|
"""
|
||
|
This method is used by pungi to get list of rpms:
|
||
|
either modular or just prepared for release
|
||
|
"""
|
||
|
self.assertEqual(result, self._koji.listTaggedRPMS(tag))
|
||
|
|
||
|
def test_list_tagged(self):
|
||
|
"""
|
||
|
Used only to get list of modules for some release.
|
||
|
"""
|
||
|
result = self._koji.listTagged('dist-c8-module-compose')
|
||
|
self.assertEqual([
|
||
|
{
|
||
|
'build_id': 0,
|
||
|
'id': 0,
|
||
|
'name': 'javapackages-tools',
|
||
|
'nvr': 'javapackages-tools-201801-8000020190628172923.b07bea58',
|
||
|
'owner_name': 'centos',
|
||
|
'package_name': 'javapackages-tools',
|
||
|
'release': '8000020190628172923.b07bea58',
|
||
|
'tag_name': 'dist-c8-module-compose',
|
||
|
'version': '201801'
|
||
|
},
|
||
|
{
|
||
|
'build_id': 1,
|
||
|
'id': 1,
|
||
|
'name': 'mariadb-devel',
|
||
|
'nvr': 'mariadb-devel-10.3-8010020200108182321.cdc1202b',
|
||
|
'owner_name': 'centos',
|
||
|
'package_name': 'mariadb-devel',
|
||
|
'release': '8010020200108182321.cdc1202b',
|
||
|
'tag_name': 'dist-c8-module-compose',
|
||
|
'version': '10.3'
|
||
|
}], result)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
unittest.main()
|