Beispiel #1
0
    def test_topological_order_successful(self):
        """Tests calling RecipeDefinition.get_topological_order() successfully"""

        input_interface = Interface()
        definition = RecipeDefinition(input_interface)
        definition.add_job_node('A', 'job_type_1', '1.0', 1)
        definition.add_job_node('B', 'job_type_2', '1.0', 1)
        definition.add_recipe_node('C', 'recipe_type_1', 1)
        definition.add_recipe_node('D', 'recipe_type_2', 1)
        definition.add_job_node('E', 'job_type_3', '1.0', 1)
        definition.add_job_node('F', 'job_type_4', '1.0', 1)
        definition.add_dependency('A', 'B')
        definition.add_dependency('A', 'C')
        definition.add_dependency('A', 'E')
        definition.add_dependency('B', 'C')
        definition.add_dependency('B', 'D')
        definition.add_dependency('C', 'D')
        definition.add_dependency('D', 'E')
        definition.add_dependency('E', 'F')

        order = definition.get_topological_order()
        expected_order = [
            'A', 'B', 'C', 'D', 'E', 'F'
        ]  # This is the only valid topological order for this graph

        self.assertListEqual(order, expected_order)
Beispiel #2
0
    def test_topological_order_circular(self):
        """Tests calling RecipeDefinition.get_topological_order() with a circular dependency"""

        input_interface = Interface()
        definition = RecipeDefinition(input_interface)
        definition.add_job_node('A', 'job_type_1', '1.0', 1)
        definition.add_job_node('B', 'job_type_2', '1.0', 1)
        definition.add_recipe_node('C', 'recipe_type_1', 1)
        definition.add_recipe_node('D', 'recipe_type_2', 1)
        definition.add_dependency('A', 'B')
        definition.add_dependency('B', 'C')
        definition.add_dependency('C', 'D')
        definition.add_dependency('D', 'B')

        with self.assertRaises(InvalidDefinition) as context:
            definition.get_topological_order()
        self.assertEqual(context.exception.error.name, 'CIRCULAR_DEPENDENCY')