3eddcfccd8
F401 'dnf' imported but unused F401 'imp' imported but unused F401 'os' imported but unused F401 'subprocess' imported but unused F401 'sys' imported but unused F401 'yum' imported but unused JIRA: COMPOSE-4108 Signed-off-by: Haibo Lin <hlin@redhat.com>
218 lines
7.7 KiB
Python
218 lines
7.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
try:
|
|
import unittest2 as unittest
|
|
except ImportError:
|
|
import unittest
|
|
import tempfile
|
|
|
|
import os
|
|
|
|
from pungi.wrappers.comps import CompsWrapper, CompsFilter, CompsValidationError
|
|
from tests.helpers import BaseTestCase, FIXTURE_DIR
|
|
|
|
COMPS_FILE = os.path.join(FIXTURE_DIR, "comps.xml")
|
|
COMPS_FORMATTED_FILE = os.path.join(FIXTURE_DIR, "comps-formatted.xml")
|
|
COMPS_GROUP_FILE = os.path.join(FIXTURE_DIR, "comps-group.xml")
|
|
COMPS_ENVIRONMENT_FILE = os.path.join(FIXTURE_DIR, "comps-env.xml")
|
|
COMPS_FILE_WITH_TYPO = os.path.join(FIXTURE_DIR, "comps-typo.xml")
|
|
COMPS_FILE_WITH_WHITESPACE = os.path.join(FIXTURE_DIR, "comps-ws.xml")
|
|
|
|
|
|
class CompsWrapperTest(BaseTestCase):
|
|
def setUp(self):
|
|
self.file = tempfile.NamedTemporaryFile(prefix="comps-wrapper-test-")
|
|
|
|
def test_get_groups(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
self.assertEqual(
|
|
sorted(comps.get_comps_groups()),
|
|
sorted(
|
|
[
|
|
"core",
|
|
"standard",
|
|
"text-internet",
|
|
"firefox",
|
|
"resilient-storage",
|
|
"basic-desktop",
|
|
]
|
|
),
|
|
)
|
|
|
|
def test_get_packages(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
self.assertEqual(
|
|
sorted(comps.get_packages("text-internet")),
|
|
sorted(["dummy-elinks", "dummy-tftp"]),
|
|
)
|
|
|
|
def test_get_langpacks(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
self.assertEqual(
|
|
comps.get_langpacks(),
|
|
{
|
|
"aspell": "aspell-%s",
|
|
"firefox": "firefox-langpack-%s",
|
|
"kdelibs": "kde-l10n-%s",
|
|
},
|
|
)
|
|
|
|
def test_get_packages_for_non_existing_group(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
with self.assertRaises(KeyError):
|
|
comps.get_packages("foo")
|
|
|
|
def test_write_comps(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
comps.write_comps(target_file=self.file.name)
|
|
self.assertFilesEqual(COMPS_FORMATTED_FILE, self.file.name)
|
|
|
|
def test_filter_groups(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
unmatched = comps.filter_groups(
|
|
[
|
|
{"name": "core", "glob": False, "default": False, "uservisible": True},
|
|
{"name": "*a*", "glob": True, "default": None, "uservisible": None},
|
|
]
|
|
)
|
|
self.assertEqual(unmatched, set())
|
|
comps.write_comps(target_file=self.file.name)
|
|
self.assertFilesEqual(COMPS_GROUP_FILE, self.file.name)
|
|
|
|
def test_filter_groups_unused_filter(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
unmatched = comps.filter_groups(
|
|
[{"name": "boom", "glob": False, "default": False, "uservisible": True}]
|
|
)
|
|
self.assertEqual(unmatched, set(["boom"]))
|
|
|
|
def test_filter_environments(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
comps.filter_environments([{"name": "minimal", "display_order": 10}])
|
|
comps.write_comps(target_file=self.file.name)
|
|
self.assertFilesEqual(COMPS_ENVIRONMENT_FILE, self.file.name)
|
|
|
|
def test_read_display_order(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
groups = [{"name": "minimal", "display_order": None}]
|
|
comps.filter_environments(groups)
|
|
self.assertEqual(
|
|
groups, [{"name": "minimal", "display_order": 99, "groups": ["core"]}]
|
|
)
|
|
|
|
def test_report_typo_in_package_type(self):
|
|
comps = CompsWrapper(COMPS_FILE_WITH_TYPO)
|
|
with self.assertRaises(RuntimeError) as ctx:
|
|
comps.write_comps(target_file=self.file.name)
|
|
self.assertIn(
|
|
"Package dummy-bash in group core has unknown type", str(ctx.exception)
|
|
)
|
|
|
|
def test_validate_correct(self):
|
|
comps = CompsWrapper(COMPS_FILE)
|
|
comps.validate()
|
|
|
|
def test_validate_with_whitespace(self):
|
|
comps = CompsWrapper(COMPS_FILE_WITH_WHITESPACE)
|
|
with self.assertRaises(CompsValidationError) as ctx:
|
|
comps.validate()
|
|
|
|
self.assertIn(
|
|
"Package name foo in group 'core' contains leading or trailing whitespace",
|
|
str(ctx.exception),
|
|
)
|
|
self.assertIn(
|
|
"Package name bar in group 'core' contains leading or trailing whitespace",
|
|
str(ctx.exception),
|
|
)
|
|
self.assertIn(
|
|
"Package name baz in group 'core' contains leading or trailing whitespace",
|
|
str(ctx.exception),
|
|
)
|
|
|
|
|
|
COMPS_IN_FILE = os.path.join(FIXTURE_DIR, "comps.xml.in")
|
|
|
|
|
|
class CompsFilterTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.filter = CompsFilter(COMPS_IN_FILE, reindent=True)
|
|
self.output = tempfile.NamedTemporaryFile(prefix="comps-filter-test-")
|
|
|
|
def assertOutput(self, filepath):
|
|
self.filter.write(self.output)
|
|
self.output.flush()
|
|
with open(self.output.name, "r") as f:
|
|
actual = f.read().strip().replace("utf-8", "UTF-8")
|
|
with open(filepath, "r") as f:
|
|
expected = f.read().strip()
|
|
self.maxDiff = None
|
|
self.assertEqual(expected, actual)
|
|
|
|
def test_filter_packages(self):
|
|
self.filter.filter_packages("ppc64le", None)
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-filtered-packages.xml"))
|
|
|
|
def test_filter_packages_with_variant(self):
|
|
self.filter.filter_packages("ppc64le", "Server")
|
|
self.assertOutput(
|
|
os.path.join(FIXTURE_DIR, "comps-filtered-packages-variant.xml")
|
|
)
|
|
|
|
def test_filter_groups(self):
|
|
self.filter.filter_groups("ppc64le", None)
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-filtered-groups.xml"))
|
|
|
|
def test_filter_groups_with_variant(self):
|
|
self.filter.filter_groups("ppc64le", "Server")
|
|
self.assertOutput(
|
|
os.path.join(FIXTURE_DIR, "comps-filtered-groups-variant.xml")
|
|
)
|
|
|
|
def test_filter_environments(self):
|
|
self.filter.filter_environments("ppc64le", None)
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-filtered-environments.xml"))
|
|
|
|
def test_filter_environments_variant(self):
|
|
self.filter.filter_environments("ppc64le", "Client")
|
|
self.assertOutput(
|
|
os.path.join(FIXTURE_DIR, "comps-filtered-environments-variant.xml")
|
|
)
|
|
|
|
def test_remove_categories(self):
|
|
self.filter.remove_categories()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-removed-categories.xml"))
|
|
|
|
def test_remove_langpacks(self):
|
|
self.filter.remove_langpacks()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-removed-langpacks.xml"))
|
|
|
|
def test_remove_translations(self):
|
|
self.filter.remove_translations()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-removed-translations.xml"))
|
|
|
|
def test_remove_environments(self):
|
|
self.filter.remove_environments()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-removed-environments.xml"))
|
|
|
|
def test_cleanup(self):
|
|
self.filter.cleanup()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-cleanup.xml"))
|
|
|
|
def test_cleanup_after_filter(self):
|
|
self.filter.filter_packages("ppc64le", None)
|
|
self.filter.cleanup()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-cleanup-filter.xml"))
|
|
|
|
def test_cleanup_after_filter_keep_group(self):
|
|
self.filter.filter_packages("ppc64le", None)
|
|
self.filter.cleanup(["standard"])
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-cleanup-keep.xml"))
|
|
|
|
def test_cleanup_all(self):
|
|
self.filter.filter_packages("ppc64le", None)
|
|
self.filter.filter_groups("ppc64le", None)
|
|
self.filter.filter_environments("ppc64le", None)
|
|
self.filter.cleanup()
|
|
self.assertOutput(os.path.join(FIXTURE_DIR, "comps-cleanup-all.xml"))
|