|
17 | 17 | from meshroom.core.node import Node, Status |
18 | 18 | from meshroom.core.submitter import BaseSubmitter |
19 | 19 | from meshroom.core.submitter import jobManager |
| 20 | +from meshroom.core.submitter import OrderedTask, OrderedTasks, OrderedTaskType |
20 | 21 | from meshroom.submitters.localFarmSubmitter import LocalFarmSubmitter, LocalFarmJob |
21 | 22 |
|
22 | 23 | from localfarm.localFarmLauncher import FarmLauncher |
23 | 24 |
|
| 25 | +import logging |
| 26 | +from meshroom.core.submitter import logger |
| 27 | +logger.setLevel(logging.DEBUG) |
| 28 | + |
24 | 29 |
|
25 | 30 | IS_LINUX = (platform == "linux" or platform == "linux2") |
26 | 31 |
|
@@ -133,26 +138,68 @@ def registerNode(self, name): |
133 | 138 | registerNodeDesc(nodeType) |
134 | 139 | return nodeType.__name__ |
135 | 140 |
|
136 | | - def addNewNode(self, graph, name, nodeParams): |
| 141 | + def addNewNode(self, graph, name, nodeParams=None): |
137 | 142 | nodeTypeName = self.registerNode(name) |
138 | | - if nodeParams: |
139 | | - node = graph.addNewNode(nodeTypeName, **nodeParams) |
140 | | - else: |
141 | | - node = graph.addNewNode(nodeTypeName) |
| 143 | + nodeParams = nodeParams or {} |
| 144 | + node = graph.addNewNode(nodeTypeName, **nodeParams) |
142 | 145 | return node |
143 | 146 |
|
144 | | - def test_buildTaskGraph(self): |
| 147 | + def test_orderTasks(self): |
| 148 | + """ |
| 149 | + phd=placeholder |
| 150 | + chk=chunk |
| 151 | + *" [B chk_0] "* |
| 152 | + [phd (start_A)] - [A chks] - [phd (end_A)] - [phd (start_B)] [B post] - [C pre] - [C expand] - [C post] - [phd (root)] |
| 153 | + *_ [B chk_1] _* |
| 154 | + """ |
145 | 155 | graph = Graph("") |
146 | 156 | # Add nodes |
147 | | - nodeA = self.addNewNode(graph, "PluginSubmitter"+"A"+"PrePost", nodeParams={}) |
148 | | - nodeB = self.addNewNode(graph, "PluginSubmitter"+"B"+"PrePost", nodeParams={"inputs": [nodeA.output]}) |
149 | | - nodeC = self.addNewNode(graph, "PluginSubmitter"+"C"+"PrePost", nodeParams={"inputs": [nodeB.output]}) |
150 | | - # Submit |
| 157 | + nodeA = self.addNewNode(graph, "PluginSubmitter"+"A", nodeParams={}) |
| 158 | + nodeB = self.addNewNode(graph, "PluginSubmitter"+"B", nodeParams={"inputs": [nodeA.output]}) |
| 159 | + nodeC = self.addNewNode(graph, "PluginSubmitter"+"C", nodeParams={"inputs": [nodeB.output]}) |
| 160 | + # Order tasks |
151 | 161 | submitter = get_submitter() |
152 | 162 | nodes, edges = graph.dfsOnFinish(startNodes=[nodeC]) |
153 | | - print(nodes, edges) |
154 | | - res = submitter.submit(nodes, edges, "") |
155 | | - print("res", res) |
| 163 | + orderedTasks = OrderedTasks(nodes, edges) |
| 164 | + # === Test result === |
| 165 | + def checkTask(task, taskType, nbDependencies): |
| 166 | + assert task.taskType == taskType |
| 167 | + assert len(task.dependencies) == nbDependencies |
| 168 | + # root |
| 169 | + rootTask = orderedTasks.rootTask |
| 170 | + checkTask(rootTask, OrderedTaskType.PLACEHOLDER, 1) |
| 171 | + # C (post) |
| 172 | + task: OrderedTask = rootTask.dependencies[0] |
| 173 | + checkTask(task, OrderedTaskType.POSTPROCESS, 1) |
| 174 | + # C (expand) |
| 175 | + task: OrderedTask = task.dependencies[0] |
| 176 | + checkTask(task, OrderedTaskType.EXPANDING, 1) |
| 177 | + # C (pre) |
| 178 | + task: OrderedTask = task.dependencies[0] |
| 179 | + checkTask(task, OrderedTaskType.PREPROCESS, 1) |
| 180 | + # B (post) |
| 181 | + task: OrderedTask = task.dependencies[0] |
| 182 | + checkTask(task, OrderedTaskType.POSTPROCESS, 2) |
| 183 | + # B (chunks) |
| 184 | + task_0: OrderedTask = task.dependencies[0] |
| 185 | + task_1: OrderedTask = task.dependencies[1] |
| 186 | + checkTask(task_0, OrderedTaskType.CHUNK, 1) |
| 187 | + checkTask(task_1, OrderedTaskType.CHUNK, 1) |
| 188 | + assert (task_0.iteration, task_1.iteration) == (0, 1) |
| 189 | + assert task_0.dependencies[0] == task_1.dependencies[0] |
| 190 | + # B (pre) |
| 191 | + task: OrderedTask = task_0.dependencies[0] |
| 192 | + checkTask(task, OrderedTaskType.PLACEHOLDER, 1) |
| 193 | + # A (post) |
| 194 | + task: OrderedTask = task.dependencies[0] |
| 195 | + checkTask(task, OrderedTaskType.PLACEHOLDER, 1) |
| 196 | + # A (chunks) |
| 197 | + task: OrderedTask = task.dependencies[0] |
| 198 | + checkTask(task, OrderedTaskType.CHUNK, 1) |
| 199 | + assert task.iteration == -1 |
| 200 | + # A (pre) |
| 201 | + task: OrderedTask = task.dependencies[0] |
| 202 | + checkTask(task, OrderedTaskType.PLACEHOLDER, 0) |
156 | 203 |
|
157 | 204 | def test_submitNoParallel(self, tmp_path): |
158 | 205 | graph = Graph("") |
|
0 commit comments