4404246db4
Add special tool that gathers given modules.tar.gz files and collects information about modules into two dirs: - module_defaults - modules First one is used by pungi during repocreate phase and the second one is used by koji mock to get list of available modules and their versions. Change-Id: I50a095a5f3bafa7e7a1effc2c0d4a2fc52ba603b
124 lines
3.8 KiB
Python
124 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
import gzip
|
|
import os
|
|
from io import StringIO
|
|
import yaml
|
|
from pungi.scripts.gather_modules import collect_modules
|
|
import unittest
|
|
from pyfakefs.fake_filesystem_unittest import TestCase
|
|
|
|
MARIADB_MODULE = yaml.load("""
|
|
---
|
|
document: modulemd
|
|
version: 2
|
|
data:
|
|
name: mariadb-devel
|
|
stream: 10.3
|
|
version: 8010020200108182321
|
|
context: cdc1202b
|
|
arch: x86_64
|
|
summary: MariaDB Module
|
|
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
|
|
""", Loader=yaml.BaseLoader)
|
|
|
|
JAVAPACKAGES_TOOLS_MODULE = yaml.load("""
|
|
---
|
|
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
|
|
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
|
|
""", Loader=yaml.BaseLoader)
|
|
|
|
ANT_DEFAULTS = yaml.load("""
|
|
data:
|
|
module: ant
|
|
profiles:
|
|
'1.10':
|
|
- common
|
|
stream: '1.10'
|
|
document: modulemd-defaults
|
|
version: '1'
|
|
""", Loader=yaml.BaseLoader)
|
|
|
|
|
|
PATH_TO_KOJI = '/path/to/koji'
|
|
MODULES_YAML_GZ = 'modules.yaml.gz'
|
|
|
|
|
|
class TestModulesYamlParser(TestCase):
|
|
|
|
maxDiff = None
|
|
|
|
def setUp(self):
|
|
self.setUpPyfakefs()
|
|
|
|
def _prepare_test_data(self):
|
|
"""
|
|
Create modules.yaml.gz with some test data
|
|
"""
|
|
os.makedirs(PATH_TO_KOJI)
|
|
modules_gz_path = os.path.join(PATH_TO_KOJI, MODULES_YAML_GZ)
|
|
# dump modules into compressed file as in generic repos for rpm
|
|
io = StringIO()
|
|
yaml.dump_all([MARIADB_MODULE, JAVAPACKAGES_TOOLS_MODULE, ANT_DEFAULTS], io)
|
|
with open(os.path.join(PATH_TO_KOJI, MODULES_YAML_GZ), 'wb') as f:
|
|
f.write(gzip.compress(io.getvalue().encode()))
|
|
return modules_gz_path
|
|
|
|
def test_export_modules(self):
|
|
modules_gz_path = self._prepare_test_data()
|
|
|
|
paths = [open(modules_gz_path, 'rb')]
|
|
collect_modules(paths, PATH_TO_KOJI)
|
|
|
|
# check directory structure matches expected
|
|
self.assertEqual([MODULES_YAML_GZ, 'modules', 'module_defaults'], os.listdir(PATH_TO_KOJI))
|
|
self.assertEqual(['mariadb-devel-10.3-8010020200108182321.cdc1202b',
|
|
'javapackages-tools-201801-8000020190628172923.b07bea58'],
|
|
os.listdir(os.path.join(PATH_TO_KOJI, 'modules')))
|
|
self.assertEqual(['ant.yaml'],
|
|
os.listdir(os.path.join(PATH_TO_KOJI, 'module_defaults')))
|
|
|
|
# check that modules were exported
|
|
self.assertEqual(MARIADB_MODULE, yaml.load(
|
|
open(os.path.join(PATH_TO_KOJI, 'modules', 'mariadb-devel-10.3-8010020200108182321.cdc1202b'))))
|
|
self.assertEqual(JAVAPACKAGES_TOOLS_MODULE, yaml.load(
|
|
open(os.path.join(PATH_TO_KOJI, 'modules', 'javapackages-tools-201801-8000020190628172923.b07bea58'))))
|
|
|
|
# check that defaults were copied
|
|
self.assertEqual(ANT_DEFAULTS, yaml.load(
|
|
open(os.path.join(PATH_TO_KOJI, 'module_defaults', 'ant.yaml'))))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main() |