void unlink(ExecNode<?> from, ExecNode<?> to) {
        TopologyNode fromNode = getOrCreateTopologyNode(from);
        TopologyNode toNode = getOrCreateTopologyNode(to);

        fromNode.outputs.remove(toNode);
        toNode.inputs.remove(fromNode);
    }
@Test
    void testUnlink() {
        Tuple2<TopologyGraph, TestingBatchExecNode[]> tuple2 = buildTopologyGraph();
        TopologyGraph graph = tuple2.f0;
        TestingBatchExecNode[] nodes = tuple2.f1;

        graph.unlink(nodes[2], nodes[5]);
        assertThat(graph.canReach(nodes[0], nodes[5])).isTrue();
        graph.unlink(nodes[4], nodes[5]);
        assertThat(graph.canReach(nodes[0], nodes[5])).isFalse();
        graph.unlink(nodes[3], nodes[6]);
        assertThat(graph.canReach(nodes[0], nodes[7])).isFalse();
    }