MCPcopy Create free account
hub / github.com/WebODM/WebODM / test_task_auto_processing_node

Method test_task_auto_processing_node

app/tests/test_api_task.py:1286–1367  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1284 gcp.close()
1285
1286 def test_task_auto_processing_node(self):
1287 project = Project.objects.get(name="User Test Project")
1288 task = Task.objects.create(project=project, name="Test")
1289 pnode = ProcessingNode.objects.create(hostname="invalid-host", port=11223)
1290 another_pnode = ProcessingNode.objects.create(hostname="invalid-host-2", port=11223)
1291 assign_perm('view_processingnode', project.owner, pnode)
1292 assign_perm('view_processingnode', project.owner, another_pnode)
1293
1294 # By default
1295 self.assertTrue(task.auto_processing_node)
1296 self.assertTrue(task.processing_node is None)
1297
1298 # Simulate an error
1299 task.last_error = "Test error"
1300 task.save()
1301
1302 worker.tasks.process_pending_tasks()
1303
1304 # A processing node should not have been assigned
1305 task.refresh_from_db()
1306 self.assertTrue(task.processing_node is None)
1307
1308 # Remove error
1309 task.last_error = None
1310 task.save()
1311
1312 worker.tasks.process_pending_tasks()
1313
1314 # A processing node should not have been assigned because no processing nodes are online
1315 task.refresh_from_db()
1316 self.assertTrue(task.processing_node is None)
1317
1318 # Bring a processing node online
1319 pnode.last_refreshed = timezone.now()
1320 pnode.save()
1321 self.assertTrue(pnode.is_online())
1322
1323 # A processing node has been assigned
1324 worker.tasks.process_pending_tasks()
1325 task.refresh_from_db()
1326 self.assertTrue(task.processing_node.id == pnode.id)
1327
1328 # Task should have failed (no images provided, invalid host...)
1329 self.assertTrue(task.last_error is not None)
1330
1331 # Bring another processing node online, and bring the old one offline
1332 pnode.last_refreshed = timezone.now() - timedelta(minutes=settings.NODE_OFFLINE_MINUTES)
1333 pnode.save()
1334
1335 another_pnode.last_refreshed = timezone.now()
1336 another_pnode.save()
1337
1338 # Remove error, set status to queued
1339 task.last_error = None
1340 task.status = status_codes.QUEUED
1341 task.save()
1342
1343 worker.tasks.process_pending_tasks()

Callers

nothing calls this directly

Calls 4

is_onlineMethod · 0.80
getMethod · 0.45
createMethod · 0.45
saveMethod · 0.45

Tested by

no test coverage detected