+ """
+ pair_module = VolumePairModule(volume_template)
+ if not pair_module.exists:
+ pytest.skip("No pair module found for volume template")
+ with open(volume_template, "r") as f:
+ volume = yaml.load(f)
+ with open(pair_module.get_module_path(), "r") as f:
+ pair = yaml.load(f)
+ outputs = set(volume.get("outputs", {}).keys())
+ parameters = set(pair.get("parameters", {}).keys())
+ missing_output_parameters = outputs.difference(parameters)
+ assert not missing_output_parameters, (
+ "The output parameters ({}) in {} were not all "
+ "used by the expected module {}".format(
+ ",".join(missing_output_parameters), volume_template, pair_module
+ )
+ )
+
+ # Now make sure that none of the output parameters appear in any other
+ # template
+ template_files = set(glob.glob("*.yaml")).union(glob.glob(".yml"))
+ errors = {}
+ for template_path in template_files:
+ if template_path in (pair_module, volume_template):
+ continue # Skip these files since we already checked this pair
+ with open(template_path, "r") as f:
+ template = yaml.load(f)
+ parameters = set(template.get("parameters", {}).keys())
+ misused_outputs = outputs.intersection(parameters)
+ if misused_outputs:
+ errors[template_path] = misused_outputs
+ message = ", ".join(
+ "{} ({})".format(path, ", ".join(params)) for path, params in errors.items()
+ )
+ assert not errors, (
+ "Volume output parameters detected in unexpected modules: " + message
+ )