boolean canReach(ExecNode<?> from, ExecNode<?> to) {
        TopologyNode fromNode = getOrCreateTopologyNode(from);
        TopologyNode toNode = getOrCreateTopologyNode(to);
        return canReach(fromNode, toNode);
    }
@Test
    void testCanReach() {
        Tuple2<TopologyGraph, TestingBatchExecNode[]> tuple2 = buildTopologyGraph();
        TopologyGraph graph = tuple2.f0;
        TestingBatchExecNode[] nodes = tuple2.f1;

        String[] canReach =
                new String[] {
                    "11111111",
                    "01111111",
                    "00100100",
                    "00011111",
                    "00001100",
                    "00000100",
                    "00000011",
                    "00000001"
                };
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                if (canReach[i].charAt(j) == '1') {
                    assertThat(graph.canReach(nodes[i], nodes[j])).isTrue();
                } else {
                    assertThat(graph.canReach(nodes[i], nodes[j])).isFalse();
                }
            }
        }
    }