diff --git a/misc/config_tools/board_inspector/board_inspector.py b/misc/config_tools/board_inspector/board_inspector.py index a2373e2e8..833c074ab 100755 --- a/misc/config_tools/board_inspector/board_inspector.py +++ b/misc/config_tools/board_inspector/board_inspector.py @@ -16,6 +16,8 @@ from cpuparser import parse_cpuid, get_online_cpu_ids, get_offline_cpu_ids script_dir = os.path.dirname(os.path.realpath(__file__)) sys.path.append(os.path.join(script_dir)) +from inspectorlib import validator + def check_deps(): # Check that the required tools are installed on the system BIN_LIST = ['cpuid', 'rdmsr', 'lspci', ' dmidecode', 'blkid', 'stty'] @@ -113,6 +115,11 @@ def main(board_name, board_xml, args): continue module.extract(args, board_etree) + # Validate the XML against XSD assertions + count = validator.validate_board("schema/boardchecks.xsd", board_etree) + if count == 0: + logging.info("All board checks passed.") + # Finally overwrite the output with the updated XML board_etree.write(board_xml, pretty_print=True) print("SUCCESS: Board configuration file {} generated successfully and saved to {}" \ diff --git a/misc/config_tools/board_inspector/inspectorlib/validator.py b/misc/config_tools/board_inspector/inspectorlib/validator.py new file mode 100644 index 000000000..6409fe328 --- /dev/null +++ b/misc/config_tools/board_inspector/inspectorlib/validator.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2022 Intel Corporation. +# +# SPDX-License-Identifier: BSD-3-Clause +# + +import sys, os +import argparse +import lxml.etree as etree +import logging +import xmlschema + +logging_fn = { + "error": logging.error, + "warning": logging.warning, + "info": logging.info, +} + +def validate_board(xsd_path, board_etree): + schema_etree = etree.parse(xsd_path) + schema_etree.xinclude() + schema = xmlschema.XMLSchema11(schema_etree) + + it = schema.iter_errors(board_etree) + count = 0 + for error in it: + anno = error.validator.annotation + severity = anno.elem.get("{https://projectacrn.org}severity") + description = anno.elem.find("{http://www.w3.org/2001/XMLSchema}documentation").text + logging_fn[severity](description) + if severity in ["error", "warning"]: + count += 1 + + return count diff --git a/misc/config_tools/board_inspector/schema/boardchecks.xsd b/misc/config_tools/board_inspector/schema/boardchecks.xsd new file mode 100644 index 000000000..cdecfd32f --- /dev/null +++ b/misc/config_tools/board_inspector/schema/boardchecks.xsd @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + diff --git a/misc/config_tools/board_inspector/schema/checks/platform_capabilities.xsd b/misc/config_tools/board_inspector/schema/checks/platform_capabilities.xsd new file mode 100644 index 000000000..6af0241e6 --- /dev/null +++ b/misc/config_tools/board_inspector/schema/checks/platform_capabilities.xsd @@ -0,0 +1,12 @@ + + + + + + Intel(R) Virtualization Technology Extension shall be enabled in BIOS. + + + +