test_validation replaces the `xmllint` call from our Makefile. Signed-off-by: Fabiano Fidêncio <fidencio@xxxxxxxxxx> --- Makefile | 11 +---------- tests/test_validation.py | 22 ++++++++++++++++++++++ tests/util.py | 13 ++++++++++++- 3 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 tests/test_validation.py diff --git a/Makefile b/Makefile index ca07fe3..f98993f 100644 --- a/Makefile +++ b/Makefile @@ -32,8 +32,6 @@ ARCHIVE = osinfo-db-$(TODAY).tar.xz ZANATA = zanata -XMLLINT = xmllint - PYTHON = python3 V = 0 @@ -122,13 +120,6 @@ update-po: fi; \ done -lint: $(DATA_FILES) $(SCHEMA_FILES) - for xml in `find data -name '*.xml' | sort`; do \ - if ! $(XMLLINT) --relaxng data/schema/osinfo.rng --noout $$xml; then \ - exit 1; \ - fi; \ - done - unit-tests: $(DATA_FILES) @command -v $(PYTHON) > /dev/null; \ if [ $$? -eq 0 ] ; then \ @@ -140,4 +131,4 @@ unit-tests: $(DATA_FILES) echo "unit-tests are not going to be executed as no $(PYTHON) has been found"; \ fi -check: lint unit-tests +check: unit-tests diff --git a/tests/test_validation.py b/tests/test_validation.py new file mode 100644 index 0000000..5234e5f --- /dev/null +++ b/tests/test_validation.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python3 + + +import libxml2 +import pytest + +from . import util + + +XMLS = util.xmls() +SCHEMA = util.schema() +PARSER = libxml2.relaxNGNewParserCtxt(SCHEMA) +VALID = PARSER.relaxNGParse().relaxNGNewValidCtxt() + +def _file_id(_file): + return _file + +@pytest.mark.parametrize('_file', [*XMLS], ids=_file_id) + +def test_validation(_file): + doc = libxml2.parseFile(_file) + assert VALID.relaxNGValidateDoc(doc) == 0 diff --git a/tests/util.py b/tests/util.py index 48e7f7d..ed1ae68 100644 --- a/tests/util.py +++ b/tests/util.py @@ -6,7 +6,6 @@ import xml.etree.ElementTree as ET from . import osinfo - def _get_files(directory): files = [] datadir = os.environ.get('INTERNAL_OSINFO_DB_DATA_DIR') @@ -35,3 +34,15 @@ def oses(): for _file in files: _oses.append(osinfo.Os(_get_os(_file))) return _oses + +def xmls(): + return _get_files('') + +def schema(): + _schema = None + datadir = os.environ.get('INTERNAL_OSINFO_DB_DATA_DIR') + if datadir is not None: + _schema = os.path.join(datadir, 'schema', 'osinfo.rng') + else: + logging.error('INTERNAL_OSINFO_DB_DATA_DIR is not set') + return _schema -- 2.20.1 _______________________________________________ Libosinfo mailing list Libosinfo@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libosinfo