Meshroom/tests/test_pipeline.py
Candice Bentéjac 752b63054d [tests] Update test_multiviewPipeline with test nodes and template
`test_multiviewPipeline` relied on the photogrammetry template and its
nodes, which are not a part of Meshroom anymore.

The test is rewritten to check the same items (serialization, graph
equality, etc.) but using dedicated test nodes (which already existed)
and template, which is added with this commit.

The path of the template is added to `MESHROOM_PIPELINE_TEMPLATES_PATH`
when loading the test module.
2025-03-17 17:05:55 +01:00

79 lines
3.2 KiB
Python

#!/usr/bin/env python
# coding:utf-8
import os
import tempfile
import meshroom.multiview
from meshroom.core.graph import loadGraph
from meshroom.core.node import Node
def test_pipeline():
meshroom.core.initNodes()
meshroom.core.initPipelines()
graph1InputFiles = ["/non/existing/file1", "/non/existing/file2"]
graph1 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
graph1.name = "graph1"
graph1AppendText1 = graph1.node("AppendText_1")
graph1AppendText1.input.value = graph1InputFiles[0]
graph1AppendText2 = graph1.node("AppendText_2")
graph1AppendText2.input.value = graph1InputFiles[1]
assert graph1.findNode("AppendFiles").input.value == graph1AppendText1.output.value
assert graph1.findNode("AppendFiles").input2.value == graph1AppendText2.output.value
assert graph1.findNode("AppendFiles").input3.value == graph1InputFiles[0]
assert graph1.findNode("AppendFiles").input4.value == graph1InputFiles[1]
assert not graph1AppendText1.input.isDefault
assert graph1AppendText2.input.getPrimitiveValue() == graph1InputFiles[1]
graph2InputFiles = ["/non/existing/file", ""]
graph2 = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
graph2.name = "graph2"
graph2AppendText1 = graph2.node("AppendText_1")
graph2AppendText1.input.value = graph2InputFiles[0]
graph2AppendText2 = graph2.node("AppendText_2")
graph2AppendText2.input.value = graph2InputFiles[1]
# Ensure that all output UIDs are different as the input is different:
# graph1 != graph2
for node in graph1.nodes:
otherNode = graph2.node(node.name)
for key, attr in node.attributes.items():
if attr.isOutput and attr.enabled:
otherAttr = otherNode.attribute(key)
assert attr.uid() != otherAttr.uid()
# Test serialization/deserialization on both graphs
for graph in [graph1, graph2]:
filename = tempfile.mktemp()
graph.save(filename)
loadedGraph = loadGraph(filename)
os.remove(filename)
# Check that all nodes have been properly de-serialized
# - Same node set
assert sorted([n.name for n in loadedGraph.nodes]) == sorted([n.name for n in graph.nodes])
# - No compatibility issues
assert all(isinstance(n, Node) for n in loadedGraph.nodes)
# - Same UIDs for every node
assert sorted([n._uid for n in loadedGraph.nodes]) == sorted([n._uid for n in graph.nodes])
# Graph 2b, set with identical parameters as graph 2
graph2b = loadGraph(meshroom.core.pipelineTemplates["appendTextAndFiles"])
graph2b.name = "graph2b"
graph2bAppendText1 = graph2b.node("AppendText_1")
graph2bAppendText1.input.value = graph2InputFiles[0]
graph2bAppendText2 = graph2b.node("AppendText_2")
graph2bAppendText2.input.value = graph2InputFiles[1]
# Ensure that graph2 == graph2b
nodes, edges = graph2.dfsOnFinish()
for node in nodes:
otherNode = graph2b.node(node.name)
for key, attr in node.attributes.items():
otherAttr = otherNode.attribute(key)
if attr.isOutput and attr.enabled:
assert attr.uid() == otherAttr.uid()
else:
assert attr.uid() == otherAttr.uid()