def assert_subgraph(self, graph, removed_tasks, replaced_tasks, label_to_taskid, exp_subgraph, exp_label_to_taskid): self.maxDiff = None optimize.slugid = ('tid{}'.format(i) for i in xrange(1, 10)).next try: got_subgraph = optimize.get_subgraph(graph, removed_tasks, replaced_tasks, label_to_taskid) finally: optimize.slugid = slugid self.assertEqual(got_subgraph.graph, exp_subgraph.graph) self.assertEqual(got_subgraph.tasks, exp_subgraph.tasks) self.assertEqual(label_to_taskid, exp_label_to_taskid)
def test_get_subgraph_opt_away(self): "when a leaf task is optimized away, it is omitted from the graph" graph = self.make_graph( self.make_task('task1', optimized=False), self.make_task('task2', optimized=True), ('task2', 'task1', 'build'), ) label_to_taskid = {'task2': 'dep2'} sub = get_subgraph(graph, graph.graph.named_links_dict(), label_to_taskid) task1 = label_to_taskid['task1'] self.assertEqual(sub.graph.nodes, {task1}) self.assertEqual(sub.graph.edges, set()) self.assertEqual(sub.tasks[task1].task_id, task1) self.assertEqual(sorted(sub.tasks[task1].task['dependencies']), [])
def assert_subgraph(self, graph, removed_tasks, replaced_tasks, label_to_taskid, exp_subgraph, exp_label_to_taskid): self.maxDiff = None optimize.slugid = partial(next, (b'tid%d' % i for i in range(1, 10))) try: got_subgraph = optimize.get_subgraph(graph, removed_tasks, replaced_tasks, label_to_taskid, "DECISION-TASK") finally: optimize.slugid = slugid self.assertEqual(got_subgraph.graph, exp_subgraph.graph) self.assertEqual(got_subgraph.tasks, exp_subgraph.tasks) self.assertEqual(label_to_taskid, exp_label_to_taskid)
def test_get_subgraph_dep_chain(self): "when a dependency chain is optimized, it is omitted from the graph" graph = self.make_graph( self.make_task('task1', optimized=True, task_id='dep1'), self.make_task('task2', optimized=True, task_id='dep2'), self.make_task('task3', optimized=False), ('task2', 'task1', 'build'), ('task3', 'task2', 'image'), ) label_to_taskid = {'task1': 'dep1', 'task2': 'dep2'} sub = get_subgraph(graph, graph.graph.named_links_dict(), label_to_taskid) task3 = label_to_taskid['task3'] self.assertEqual(sub.graph.nodes, {task3}) self.assertEqual(sub.graph.edges, set()) self.assertEqual(sub.tasks[task3].task_id, task3) self.assertEqual(sorted(sub.tasks[task3].task['dependencies']), ['dep2'])
def test_get_subgraph(monkeypatch, graph, kwargs, exp_subgraph, exp_label_to_taskid): """Tests the `get_subgraph` function. Each test case takes 4 arguments: 1. A `TaskGraph` instance. 2. Keyword arguments to pass into `get_subgraph`. 3. The expected subgraph. 4. The expected label_to_taskid. """ monkeypatch.setattr(optimize, "slugid", partial(next, (b"tid%d" % i for i in range(1, 10)))) kwargs.setdefault("removed_tasks", set()) kwargs.setdefault("replaced_tasks", set()) kwargs.setdefault("label_to_taskid", {}) kwargs.setdefault("decision_task_id", "DECISION-TASK") got_subgraph = optimize.get_subgraph(graph, **kwargs) assert got_subgraph.graph == exp_subgraph.graph assert got_subgraph.tasks == exp_subgraph.tasks assert kwargs["label_to_taskid"] == exp_label_to_taskid
def test_get_subgraph_refs_resolved(self): "get_subgraph resolves task references" graph = self.make_graph( self.make_task('task1', optimized=True, task_id='dep1'), self.make_task( 'task2', optimized=False, task_def={'payload': {'task-reference': 'http://<build>/<test>'}} ), ('task2', 'task1', 'build'), ('task2', 'task3', 'test'), self.make_task('task3', optimized=False), ) label_to_taskid = {'task1': 'dep1'} sub = get_subgraph(graph, graph.graph.named_links_dict(), label_to_taskid) task2 = label_to_taskid['task2'] task3 = label_to_taskid['task3'] self.assertEqual(sub.graph.nodes, {task2, task3}) self.assertEqual(sub.graph.edges, {(task2, task3, 'test')}) self.assertEqual(sub.tasks[task2].task_id, task2) self.assertEqual(sorted(sub.tasks[task2].task['dependencies']), sorted([task3, 'dep1'])) self.assertEqual(sub.tasks[task2].task['payload'], 'http://dep1/' + task3) self.assertEqual(sub.tasks[task3].task_id, task3)
def test_get_subgraph_removed_dep(): "get_subgraph raises an Exception when a task depends on a removed task" graph = make_triangle() with pytest.raises(Exception): optimize.get_subgraph(graph, {"t2"}, set(), {})
def test_get_subgraph_removed_dep(self): "get_subgraph raises an Exception when a task depends on a removed task" graph = self.make_triangle() with self.assertRaises(Exception): optimize.get_subgraph(graph, {'t2'}, set(), {})