From 5fcb58a4b238b777472f2f2c2ef101257f38b6bc Mon Sep 17 00:00:00 2001 From: Junjie Mao Date: Fri, 10 Jun 2022 15:13:43 +0800 Subject: [PATCH] config_tools: relax the checks of scenario XMLs from users Today we are using, in the configurator, the complete scenario XML schema to validate XML files given by users. While this helps identify invalid XMLs at an early stage, such checks are too strict because the configurator users may save invalid XMLs if they keep some errors in the forms unresolved, and we do allow them to save anytime they want. As a result, users may save something that they cannot load back anymore. This patch introduces a tailored version of the scenario XML schema which only verifies the existence of the top-level nodes that the configurator assumes to exist. This seems to be a good balance that blocks XMLs that are broken or using old formats but permits those that has local and fixable data issues. Tracked-On: #6691 Signed-off-by: Junjie Mao --- .../packages/configurator/src/lib/acrn.ts | 3 +- .../pyodide/validateScenarioStructure.py | 4 +-- .../schema/scenario_structure.xsd | 28 +++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) create mode 100644 misc/config_tools/schema/scenario_structure.xsd diff --git a/misc/config_tools/configurator/packages/configurator/src/lib/acrn.ts b/misc/config_tools/configurator/packages/configurator/src/lib/acrn.ts index 1eee4e1ea..286ab6003 100644 --- a/misc/config_tools/configurator/packages/configurator/src/lib/acrn.ts +++ b/misc/config_tools/configurator/packages/configurator/src/lib/acrn.ts @@ -129,7 +129,8 @@ class Configurator { return this.readFile(path).then((fileContent) => { let syntactical_errors = this.pythonObject.validateScenarioStructure(fileContent); if (syntactical_errors !== "") { - throw Error("The file has broken structure.\n" + syntactical_errors); + throw Error("The loaded file does not look like a valid ACRN scenario XML.\n\n" + + "If that file is used with ACRN 2.x, try upgrading it following the instructions at https://projectacrn.github.io/latest/tutorials/upgrading_configuration.html.\n"); } return this.pythonObject.loadScenario(fileContent) }) diff --git a/misc/config_tools/configurator/pyodide/validateScenarioStructure.py b/misc/config_tools/configurator/pyodide/validateScenarioStructure.py index b32c8ed32..abab7fad5 100644 --- a/misc/config_tools/configurator/pyodide/validateScenarioStructure.py +++ b/misc/config_tools/configurator/pyodide/validateScenarioStructure.py @@ -11,7 +11,7 @@ from scenario_config.xml_loader import XMLLoadStage from .pyodide import ( convert_result, write_temp_file, - nuc11_scenario, scenario_xml_schema_path, datachecks_xml_schema_path + nuc11_scenario, schema_dir ) @@ -34,7 +34,7 @@ def main(scenario): obj = PipelineObject( scenario_path=scenario_file_path, - schema_path=scenario_xml_schema_path, + schema_path=schema_dir / 'scenario_structure.xsd', datachecks_path=None ) pipeline.run(obj) diff --git a/misc/config_tools/schema/scenario_structure.xsd b/misc/config_tools/schema/scenario_structure.xsd new file mode 100644 index 000000000..3227eb921 --- /dev/null +++ b/misc/config_tools/schema/scenario_structure.xsd @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file