mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 10:17:27 +02:00
[tests] Add a unit test to check for templates' versions
This test checks that there is no compatibility issue with the nodes saved in the template files. It fails when an upgrade of a templates is needed. Any template can still be opened even if its nodes are not up-to- date, as they will be automatically upgraded.
This commit is contained in:
parent
ad69c7085e
commit
02f87ff634
1 changed files with 58 additions and 0 deletions
58
tests/test_templatesVersion.py
Normal file
58
tests/test_templatesVersion.py
Normal file
|
@ -0,0 +1,58 @@
|
|||
#!/usr/bin/env python
|
||||
# coding:utf-8
|
||||
|
||||
from meshroom.core.graph import Graph
|
||||
from meshroom.core import pipelineTemplates, Version
|
||||
from meshroom.core.node import CompatibilityIssue, CompatibilityNode
|
||||
|
||||
import json
|
||||
import meshroom
|
||||
|
||||
|
||||
def test_templateVersions():
|
||||
"""
|
||||
This test checks that there is no compatibility issue with the nodes saved in the template files.
|
||||
It fails when an upgrade of a templates is needed. Any template can still be opened even if its
|
||||
nodes are not up-to-date, as they will be automatically upgraded.
|
||||
"""
|
||||
|
||||
assert len(pipelineTemplates) >= 1
|
||||
|
||||
for _, path in pipelineTemplates.items():
|
||||
with open(path) as jsonFile:
|
||||
fileData = json.load(jsonFile)
|
||||
|
||||
graphData = fileData.get(Graph.IO.Keys.Graph, fileData)
|
||||
|
||||
assert isinstance(graphData, dict)
|
||||
|
||||
header = fileData.get(Graph.IO.Keys.Header, {})
|
||||
assert header.get("template", False)
|
||||
nodesVersions = header.get(Graph.IO.Keys.NodesVersions, {})
|
||||
|
||||
for _, nodeData in graphData.items():
|
||||
nodeType = nodeData["nodeType"]
|
||||
assert nodeType in meshroom.core.nodesDesc
|
||||
|
||||
nodeDesc = meshroom.core.nodesDesc[nodeType]
|
||||
currentNodeVersion = meshroom.core.nodeVersion(nodeDesc)
|
||||
|
||||
inputs = nodeData.get("inputs", {})
|
||||
outputs = nodeData.get("outputs", {})
|
||||
version = nodesVersions.get(nodeType, None)
|
||||
|
||||
compatibilityIssue = None
|
||||
|
||||
if version and currentNodeVersion and Version(version).major != Version(currentNodeVersion).major:
|
||||
compatibilityIssue = CompatibilityIssue.VersionConflict
|
||||
else:
|
||||
for attrName, value in inputs.items():
|
||||
if not CompatibilityNode.attributeDescFromName(nodeDesc.inputs, attrName, value):
|
||||
compatibilityIssue = CompatibilityIssue.DescriptionConflict
|
||||
break
|
||||
for attrName, value in outputs.items():
|
||||
if not CompatibilityNode.attributeDescFromName(nodeDesc.outputs, attrName, value):
|
||||
compatibilityIssue = CompatibilityIssue.DescriptionConflict
|
||||
break
|
||||
|
||||
assert compatibilityIssue is None
|
Loading…
Add table
Reference in a new issue