예제 #1
0
    def test_transform_dfs_existing_node(self, patched_transform_op, instance):
        res_instance = Resource("resource")
        visited = {res_instance.get_id(): instance.BLACK}

        instance.transform_dfs(res_instance, set(), set(), visited)

        assert patched_transform_op.assert_not_called
예제 #2
0
    def test_transform_operation(self, patched_add_cartesian_edge, instance):
        res_instance = Resource("resource")
        res_instance.producers = {"p_1", "p_2"}
        res_instance.consumers = {"c_1", "c_2"}
        res_instance.destructors = {"d_1", "d_2"}

        assert instance.transform_operation(res_instance, {"pc_1", "pc_2"}, {"pp_1", "pp_2"}) == (
            {"c_1", "c_2"}, {"p_1", "p_2"}
        )

        assert patched_add_cartesian_edge.call_args_list == [
            (({"p_1", "p_2"}, {"c_1", "c_2"}),),
            (({"c_1", "c_2"}, {"d_1", "d_2"}),),
            (({"pp_1", "pp_2"}, {"p_1", "p_2"}),),
            (({"pc_1", "pc_2"}, {"c_1", "c_2"}),),
        ]
예제 #3
0
    def test_transform_operation_with_no_consumer_producers(self, patched_add_cartesian_edge, instance):
        res_instance = Resource("resource")

        assert instance.transform_operation(res_instance, {"pc_1", "pc_2"}, {"pp_1", "pp_2"}) == (
            {"$resource-CONSUMER"}, {"$resource-PRODUCER"}
        )

        assert patched_add_cartesian_edge.call_args_list == [
            (({"$resource-PRODUCER"}, {"$resource-CONSUMER"}),),
            (({"$resource-CONSUMER"}, set()),),
            (({"pp_1", "pp_2"}, {"$resource-PRODUCER"}),),
            (({"pc_1", "pc_2"}, {"$resource-CONSUMER"}),),
        ]
예제 #4
0
    def test_parse_paths_no_interfaces(self, instance):

        dummy_resource = Resource("res")

        instance.remove_dependent_producers = mock.MagicMock()
        instance.parse_request_parameters = mock.MagicMock()
        instance.get_associated_resource_for_ref = mock.MagicMock(
            return_value="res")
        instance.nodes = {"res": dummy_resource}

        instance.parse_paths([])

        instance.remove_dependent_producers.assert_called()
        instance.parse_request_parameters.assert_not_called()
        assert dummy_resource.consumers == set()
        assert dummy_resource.producers == set()
        assert dummy_resource.destructors == set()
예제 #5
0
    def test_parse_paths_with_producers(self, instance):
        dummy_resource = Resource("res")

        instance.remove_dependent_producers = mock.MagicMock()
        instance.parse_request_parameters = mock.MagicMock()
        instance.get_associated_resource_for_ref = mock.MagicMock(
            return_value="res")
        instance.nodes = {"res": dummy_resource}
        interface = OpenAPITaskInterface()
        interface.producer_references = "some_ref"
        interface.method = constants.POST
        interface.url = "url"

        instance.parse_paths([interface])

        instance.remove_dependent_producers.assert_called()
        instance.parse_request_parameters.assert_called()
        assert dummy_resource.consumers == set()
        assert dummy_resource.producers == {interface.op_id}
        assert dummy_resource.destructors == set()
예제 #6
0
    def test_parse_paths_with_no_valid_resource_node(self, instance):
        dummy_resource = Resource("res")

        def add_destructor(*args):
            ref_graph = args[1]
            ref_graph["ref"] = "destructor"

        instance.remove_dependent_producers = mock.MagicMock()
        instance.parse_request_parameters = mock.MagicMock(
            side_effect=add_destructor)
        instance.get_associated_resource_for_ref = mock.MagicMock(
            return_value="invalid_res")
        instance.nodes = {"res": dummy_resource}
        interface = OpenAPITaskInterface()
        interface.method = constants.POST
        interface.url = "url"

        instance.parse_paths([interface])

        instance.remove_dependent_producers.assert_called()
        instance.parse_request_parameters.assert_called()
        assert dummy_resource.consumers == set()
        assert dummy_resource.producers == set()
        assert dummy_resource.destructors == set()
예제 #7
0
    def test_transform_dfs_cycle(self, instance):
        res_instance = Resource("resource")
        visited = {res_instance.get_id(): instance.GREY}

        with pytest.raises(exceptions.OrderingException):
            instance.transform_dfs(res_instance, set(), set(), visited)
예제 #8
0
 def instance(self):
     return Resource(key="res")
예제 #9
0
 def get_resource(key):
     resource = Resource(key)
     resource.producers = {"a", "b"}
     resource.consumers = {"a", "c"}
     return resource