Skip to content

Commit 8603d2c

Browse files
Steve Goldhaberclimbfuji
authored andcommitted
Added tracking and trapping of circular dependencies, partially reverted
and with additional bug fixes and updates. Added test/unit_tests to GitHub actions.
1 parent 4ac80e4 commit 8603d2c

38 files changed

+953
-16
lines changed

.github/workflows/capgen_unit_tests.yaml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,29 @@ jobs:
3535
3636
- name: Run unit tests
3737
run: |
38+
BUILD_DIR=./build \
39+
PYTHONPATH=test/:scripts/ \
40+
pytest \
41+
test/unit_tests/test_common.py \
42+
test/unit_tests/test_fortran_parse.py \
43+
test/unit_tests/test_fortran_write.py \
44+
test/unit_tests/test_metadata_host_file.py \
45+
test/unit_tests/test_metadata_scheme_file.py \
46+
test/unit_tests/test_metadata_table.py \
47+
test/unit_tests/test_sdf.py \
48+
test/unit_tests/test_var_transforms.py
3849
cd build
3950
ctest --rerun-failed --output-on-failure . --verbose
4051
4152
- name: Run python tests
4253
run: |
4354
BUILD_DIR=./build \
4455
PYTHONPATH=test/:scripts/ \
45-
pytest \
46-
test/capgen_test/capgen_test_reports.py \
47-
test/advection_test/advection_test_reports.py \
48-
test/ddthost_test/ddthost_test_reports.py \
49-
test/var_compatibility_test/var_compatibility_test_reports.py
56+
pytest \
57+
test/capgen_test/capgen_test_reports.py \
58+
test/advection_test/advection_test_reports.py \
59+
test/ddthost_test/ddthost_test_reports.py \
60+
test/var_compatibility_test/var_compatibility_test_reports.py
5061
5162
- name: Run Fortran to metadata test
5263
run: cd test && ./test_fortran_to_metadata.sh

scripts/ccpp_suite.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -678,9 +678,7 @@ def __init__(self, sdfs, host_model, scheme_headers, run_env):
678678
self.__context = ParseContext(filename=sdf)
679679
# Validate the XML file
680680
schema_version = find_schema_version(xml_root)
681-
res = validate_xml_file(sdf, 'suite', schema_version, run_env.logger)
682-
if not res:
683-
raise CCPPError(f"Invalid suite definition file, '{sdf}'")
681+
_ = validate_xml_file(sdf, 'suite', schema_version, run_env.logger)
684682

685683
# Write the expanded sdf to the capgen output directory.
686684
# This file isn't used by capgen (everything is in memory
@@ -693,7 +691,12 @@ def __init__(self, sdfs, host_model, scheme_headers, run_env):
693691
# Preprocess the sdf to expand nested suites
694692
if schema_version[0] == 2:
695693
expand_nested_suites(xml_root, sdf_path, logger=run_env.logger)
694+
# For both versions 1 and 2, write the SDF (expanded for
695+
# version 2, original for version 1) to the current directory
696696
write_xml_file(xml_root, sdf_expanded, run_env.logger)
697+
# Validate the expanded SDF for version 2
698+
if schema_version[0] == 2:
699+
_ = validate_xml_file(sdf, 'suite', schema_version, run_env.logger)
697700
suite = Suite(sdf, xml_root, self, run_env)
698701
suite.analyze(self.host_model, scheme_library,
699702
self.__ddt_lib, run_env)

scripts/parse_tools/xml_tools.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ def read_xml_file(filename, logger=None):
233233
logger (logging.Logger, optional): Logger for warnings/errors.
234234
235235
Returns:
236-
tree (xml.etree.ElementTreet): The element tree from the input file.
236+
tree (xml.etree.ElementTree): The element tree from the input file.
237237
root (xml.etree.ElementTree.Element): The root element of tree.
238238
239239
Raises:
@@ -308,9 +308,6 @@ def load_suite_by_name(suite_name, group_name, file, logger=None):
308308
"""
309309
_, root = read_xml_file(file, logger)
310310
schema_version = find_schema_version(root)
311-
if schema_version[0] < 2:
312-
raise CCPPError(f"XML schema version {schema_version} " + \
313-
f"invalid for nested suite {suite_name}")
314311
res = validate_xml_file(file, 'suite', schema_version, logger)
315312
if not res:
316313
raise CCPPError(f"Invalid suite definition file, '{sdf}'")
@@ -415,7 +412,7 @@ def replace_nested_suite(element, nested_suite, default_path, logger):
415412
file = os.path.join(default_path, file)
416413
referenced_suite = load_suite_by_name(suite_name, group_name, file,
417414
logger=logger)
418-
imported_content = [ET.fromstring(ET.tostring(child))
415+
imported_content = [ET.fromstring(ET.tostring(child))
419416
for child in referenced_suite]
420417
# Swap nested suite with imported content
421418
for item in imported_content:
@@ -581,8 +578,8 @@ def expand_nested_suites(suite, default_path, logger=None):
581578
keep_expanding = True
582579
if not keep_expanding:
583580
return
584-
raise CCPPError("Exceeded number of iterations while expanding nested suites:" + \
585-
"check for inifite recursion or adjust limit max_iterations." + \
581+
raise CCPPError("Exceeded number of iterations while expanding nested suites. " + \
582+
"Check for infinite recursion or adjust limit max_iterations. " + \
586583
f"Suites expanded so far: {suite_names}")
587584

588585
###############################################################################
@@ -601,7 +598,7 @@ def remove_whitespace_nodes(node):
601598

602599
# Convert ElementTree to a byte string
603600
byte_string = ET.tostring(root, 'us-ascii')
604-
601+
605602
# Parse string using minidom for pretty printing
606603
reparsed = xml.dom.minidom.parseString(byte_string)
607604

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="another_suite" version="2.0">
4+
<group name="another_group">
5+
<subcycle loop="num_subcycles_for_ag">
6+
<scheme>another_scheme</scheme>
7+
</subcycle>
8+
<scheme>more_scheme</scheme>
9+
</group>
10+
</suite>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="another_suite2" version="2.0">
4+
<group name="another_group2">
5+
<subcycle loop="num_subcycles_for_ag2">
6+
<scheme>another_scheme</scheme>
7+
</subcycle>
8+
<scheme>more_scheme</scheme>
9+
</group>
10+
<group name="another_group3">
11+
<subcycle loop="num_subcycles_for_ag3">
12+
<scheme>another_scheme</scheme>
13+
</subcycle>
14+
<scheme>more_scheme</scheme>
15+
</group>
16+
</suite>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="nested_suite" version="2.0" >
4+
<group name="nested_group1">
5+
<scheme>g1_scheme1</scheme>
6+
</group>
7+
<group name="nested_group2">
8+
<nested_suite name="subsuite_1" group="group1" file="subsuite1.xml"/>
9+
</group>
10+
</suite>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="subsuite_1" version="2.0">
4+
<group name="group1">
5+
<scheme>scheme_subsuite1</scheme>
6+
</group>
7+
</suite>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="subsuite_inline" version="1.0">
4+
<group name="group2">
5+
<scheme>scheme1i</scheme>
6+
<scheme>scheme2i</scheme>
7+
<scheme>scheme1i</scheme>
8+
</group>
9+
</suite>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="main_suite" version="2.0">
4+
<group name="group1">
5+
<subcycle loop="num_subcycles_for_scheme9">
6+
<scheme>effr_pre</scheme>
7+
<subcycle loop="2">
8+
<subcycle loop="2">
9+
<scheme>scheme9</scheme>
10+
</subcycle>
11+
</subcycle>
12+
<scheme>scheme3</scheme>
13+
</subcycle>
14+
</group>
15+
<nested_suite name="subsuite_1" file="subsuite1.xml"/>
16+
</suite>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
3+
<suite name="ver_test_suite" version="2.0">
4+
<group name="group1">
5+
<suite>subsuite_inline</suite>
6+
</group>
7+
</suite>

0 commit comments

Comments
 (0)