예제 #1
0
def test_attach_destroy_resource_no_sentinel_because_other_leaf_nodes(
        fc_node_builder):
    """ Make sure downstream resource-delete operator insertion works correctly
    """
    node0 = OperatorNode({}, {
        'name': 'test0',
        'type': 'none',
    })

    node1 = OperatorNode({}, {
        'name': 'test1',
        'type': 'none',
    })

    node2 = OperatorNode({}, {
        'name': 'test2',
        'type': 'none',
        'upstream_dependencies': ['test0'],
    })

    node3 = OperatorNode({}, {
        'name': 'test3',
        'type': 'none',
        'upstream_dependencies': ['test2'],
        'requires_resources': ['cluster'],
    })

    node4 = OperatorNode({}, {
        'name': 'test4',
        'type': 'none',
        'upstream_dependencies': ['test2', 'test1'],
        'requires_resources': ['cluster'],
    })

    node5 = OperatorNode({}, {
        'name': 'test4',
        'type': 'none',
        'upstream_dependencies': ['test3'],
    })

    graph = _GraphUtil.build_subgraph(
        [node0, node1, node2, node3, node4, node5])

    destroy_resource_node = OperatorNode({}, {
        'name': 'destroy_cluster',
        'type': 'none',
    })

    resource = MockResource(name='cluster',
                            create_operator=None,
                            destroy_operator=destroy_resource_node,
                            disable_sentinel_node=False)

    _GraphUtil.attach_destroy_resource(resource, graph, fc_node_builder)

    destroy_node_upstream = _GraphUtil.upstream_dependency_set(
        destroy_resource_node, graph)

    assert destroy_node_upstream == frozenset([node3, node4])

    assert len(_GraphUtil.downstream_dependency_set(node4, graph)) == 2
    assert destroy_resource_node in _GraphUtil.downstream_dependency_set(
        node4, graph)

    # sentinel node should also have been inserted
    assert any(item.name == 'destroy_cluster-sentinel'
               for item in _GraphUtil.downstream_dependency_set(node4, graph))
예제 #2
0
def test_attach_destroy_resource_no_sentinel_by_config(fc_node_builder):
    """ Make sure downstream resource-delete operator insertion works correctly
    """
    node0 = OperatorNode({}, {
        'name': 'test0',
        'type': 'none',
    })

    node1 = OperatorNode({}, {
        'name': 'test1',
        'type': 'none',
    })

    node2 = OperatorNode({}, {
        'name': 'test2',
        'type': 'none',
        'upstream_dependencies': ['test0'],
    })

    node3 = OperatorNode({}, {
        'name': 'test3',
        'type': 'none',
        'upstream_dependencies': ['test2'],
        'requires_resources': ['cluster'],
    })

    node4 = OperatorNode({}, {
        'name': 'test4',
        'type': 'none',
        'upstream_dependencies': ['test2', 'test1'],
        'requires_resources': ['cluster'],
    })

    node5 = OperatorNode({}, {
        'name': 'test4',
        'type': 'none',
        'upstream_dependencies': ['test3'],
        'requires_resources': ['cluster'],
    })

    graph = _GraphUtil.build_subgraph(
        [node0, node1, node2, node3, node4, node5])

    destroy_resource_node = OperatorNode({}, {
        'name': 'destroy_cluster',
        'type': 'none',
    })

    resource = MockResource(name='cluster',
                            create_operator=None,
                            destroy_operator=destroy_resource_node,
                            disable_sentinel_node=True)

    _GraphUtil.attach_destroy_resource(resource, graph, fc_node_builder)

    destroy_node_upstream = _GraphUtil.upstream_dependency_set(
        destroy_resource_node, graph)

    assert destroy_node_upstream == frozenset([node4, node5])

    assert _GraphUtil.downstream_dependency_set(node4, graph) == \
        _GraphUtil.downstream_dependency_set(node5, graph) == \
        frozenset([destroy_resource_node])