Ejemplo n.º 1
0
    def test_retry_in_nested_flows(self):
        c1 = retry.AlwaysRevert("c1")
        c2 = retry.AlwaysRevert("c2")
        inner_flo = lf.Flow("test2", c2)
        flo = lf.Flow("test", c1).add(inner_flo)

        g = _replicate_graph_with_names(
            compiler.PatternCompiler(flo).compile())
        self.assertEqual(6, len(g))
        self.assertItemsEqual(g.edges(data=True), [
            ('test', 'c1', {
                'invariant': True
            }),
            ('c1', 'test2', {
                'invariant': True,
                'retry': True
            }),
            ('test2', 'c2', {
                'invariant': True
            }),
            ('c2', 'test2[$]', {
                'invariant': True
            }),
            ('test2[$]', 'test[$]', {
                'invariant': True
            }),
        ])
        self.assertIs(c1, g.node['c2']['retry'])
        self.assertItemsEqual(['test'], list(g.no_predecessors_iter()))
        self.assertItemsEqual(['test[$]'], list(g.no_successors_iter()))
Ejemplo n.º 2
0
    def test_retry_in_unordered_flow_with_tasks(self):
        c = retry.AlwaysRevert("c")
        a, b = test_utils.make_many(2)
        flo = uf.Flow("test", c).add(a, b)

        g = _replicate_graph_with_names(
            compiler.PatternCompiler(flo).compile())
        self.assertEqual(5, len(g))
        self.assertItemsEqual(g.edges(data=True), [
            ('test', 'c', {
                'invariant': True
            }),
            ('c', 'a', {
                'invariant': True,
                'retry': True
            }),
            ('c', 'b', {
                'invariant': True,
                'retry': True
            }),
            ('b', 'test[$]', {
                'invariant': True
            }),
            ('a', 'test[$]', {
                'invariant': True
            }),
        ])

        self.assertItemsEqual(['test'], list(g.no_predecessors_iter()))
        self.assertItemsEqual(['test[$]'], list(g.no_successors_iter()))
        self.assertIs(c, g.node['a']['retry'])
        self.assertIs(c, g.node['b']['retry'])
Ejemplo n.º 3
0
    def test_retry_in_graph_flow_with_tasks(self):
        r = retry.AlwaysRevert("r")
        a, b, c = test_utils.make_many(3)
        flo = gf.Flow("test", r).add(a, b, c).link(b, c)

        g = _replicate_graph_with_names(
            compiler.PatternCompiler(flo).compile())
        self.assertItemsEqual(g.edges(data=True), [
            ('test', 'r', {
                'invariant': True
            }),
            ('r', 'a', {
                'invariant': True,
                'retry': True
            }),
            ('r', 'b', {
                'invariant': True,
                'retry': True
            }),
            ('b', 'c', {
                'manual': True
            }),
            ('a', 'test[$]', {
                'invariant': True
            }),
            ('c', 'test[$]', {
                'invariant': True
            }),
        ])

        self.assertItemsEqual(['test'], g.no_predecessors_iter())
        self.assertItemsEqual(['test[$]'], g.no_successors_iter())
        self.assertIs(r, g.node['a']['retry'])
        self.assertIs(r, g.node['b']['retry'])
        self.assertIs(r, g.node['c']['retry'])
Ejemplo n.º 4
0
    def test_retries_hierarchy(self):
        c1 = retry.AlwaysRevert("c1")
        c2 = retry.AlwaysRevert("c2")
        a, b, c, d = test_utils.make_many(4)
        inner_flo = lf.Flow("test2", c2).add(b, c)
        flo = lf.Flow("test", c1).add(a, inner_flo, d)

        g = _replicate_graph_with_names(
            compiler.PatternCompiler(flo).compile())
        self.assertEqual(10, len(g))
        self.assertItemsEqual(g.edges(data=True), [
            ('test', 'c1', {
                'invariant': True
            }),
            ('c1', 'a', {
                'invariant': True,
                'retry': True
            }),
            ('a', 'test2', {
                'invariant': True
            }),
            ('test2', 'c2', {
                'invariant': True
            }),
            ('c2', 'b', {
                'invariant': True,
                'retry': True
            }),
            ('b', 'c', {
                'invariant': True
            }),
            ('c', 'test2[$]', {
                'invariant': True
            }),
            ('test2[$]', 'd', {
                'invariant': True
            }),
            ('d', 'test[$]', {
                'invariant': True
            }),
        ])
        self.assertIs(c1, g.node['a']['retry'])
        self.assertIs(c1, g.node['d']['retry'])
        self.assertIs(c2, g.node['b']['retry'])
        self.assertIs(c2, g.node['c']['retry'])
        self.assertIs(c1, g.node['c2']['retry'])
        self.assertIsNone(g.node['c1'].get('retry'))
Ejemplo n.º 5
0
 def test_unordered_flow_with_retry_fully_satisfies(self):
     ret = retry.AlwaysRevert(provides=['b', 'a'])
     f = uf.Flow('test', ret)
     f.add(_task(name='task1', requires=['a']))
     self.assertIs(f.retry, ret)
     self.assertEqual('test_retry', ret.name)
     self.assertEqual(set([]), f.requires)
     self.assertEqual(set(['b', 'a']), f.provides)
Ejemplo n.º 6
0
    def test_unordered_flow_with_retry(self):
        ret = retry.AlwaysRevert(requires=['a'], provides=['b'])
        f = uf.Flow('test', ret)
        self.assertIs(f.retry, ret)
        self.assertEqual('test_retry', ret.name)

        self.assertEqual(set(['a']), f.requires)
        self.assertEqual(set(['b']), f.provides)
Ejemplo n.º 7
0
    def test_graph_flow_retry_and_task(self):
        flow = gf.Flow(
            'gf',
            retry.AlwaysRevert('rt', requires=['x', 'y'], provides=['a', 'b']))
        flow.add(
            utils.TaskMultiArgOneReturn(rebind=['a', 'x', 'c'],
                                        provides=['z']))

        self.assertEqual(set(['x', 'y', 'c']), flow.requires)
        self.assertEqual(set(['a', 'b', 'z']), flow.provides)
Ejemplo n.º 8
0
 def test_graph_flow_retry_and_task_dependency_provide_require(self):
     flow = gf.Flow('gf', retry.AlwaysRevert('rt', requires=['x']))
     flow.add(utils.TaskOneReturn(provides=['x']))
     self.assertEqual(set(['x']), flow.provides)
     self.assertEqual(set(['x']), flow.requires)
Ejemplo n.º 9
0
 def test_retry_in_unordered_flow_with_provides(self):
     flow = uf.Flow('uf', retry.AlwaysRevert('rt', provides=['x', 'y']))
     self.assertEqual(set(), flow.requires)
     self.assertEqual(set(['x', 'y']), flow.provides)
Ejemplo n.º 10
0
 def test_retry_in_graph_flow_no_requirements_no_provides(self):
     flow = gf.Flow('gf', retry.AlwaysRevert('rt'))
     self.assertEqual(set(), flow.requires)
     self.assertEqual(set(), flow.provides)
Ejemplo n.º 11
0
 def test_retry_in_graph_flow_with_requirements(self):
     flow = gf.Flow('gf', retry.AlwaysRevert('rt', requires=['x', 'y']))
     self.assertEqual(set(['x', 'y']), flow.requires)
     self.assertEqual(set(), flow.provides)
Ejemplo n.º 12
0
 def test_retry_in_graph_flow(self):
     flo = gf.Flow("test", retry.AlwaysRevert("c"))
     compilation = compiler.PatternCompiler(flo).compile()
     g = compilation.execution_graph
     self.assertEqual(3, len(g))
     self.assertEqual(2, g.number_of_edges())
Ejemplo n.º 13
0
 def test_retry_in_unordered_flow(self):
     flo = uf.Flow("test", retry.AlwaysRevert("c"))
     compilation = compiler.PatternCompiler(flo).compile()
     self.assertEqual(3, len(compilation.execution_graph))
     self.assertEqual(2, compilation.execution_graph.number_of_edges())
Ejemplo n.º 14
0
 def test_retry(self):
     r = retry.AlwaysRevert('r1')
     self.assertRaises(TypeError, compiler.PatternCompiler(r).compile)
Ejemplo n.º 15
0
 def test_retry_in_unordered_flow_no_requirements_no_provides(self):
     flow = uf.Flow('uf', retry.AlwaysRevert('rt'))
     self.assertEqual(set(), flow.requires)
     self.assertEqual(set(), flow.provides)
Ejemplo n.º 16
0
 def test_unordered_flow_retry_two_tasks_provide_same_value(self):
     flow = uf.Flow('uf', retry.AlwaysRevert('rt', provides=['y']))
     flow.add(utils.TaskOneReturn('t1', provides=['x']),
              utils.TaskOneReturn('t2', provides=['x']))
     self.assertEqual(set(['x', 'y']), flow.provides)
Ejemplo n.º 17
0
 def test_unordered_flow_retry_and_task_same_requires_provides(self):
     flow = uf.Flow('uf', retry.AlwaysRevert('rt', requires=['x']))
     flow.add(utils.TaskOneReturn(provides=['x']))
     self.assertEqual(set(['x']), flow.requires)
     self.assertEqual(set(['x']), flow.provides)
Ejemplo n.º 18
0
 def test_retry_in_graph_flow_requires_and_provides(self):
     flow = gf.Flow(
         'gf',
         retry.AlwaysRevert('rt', requires=['x', 'y'], provides=['a', 'b']))
     self.assertEqual(set(['x', 'y']), flow.requires)
     self.assertEqual(set(['a', 'b']), flow.provides)
Ejemplo n.º 19
0
 def test_graph_flow_retry_and_task_provide_same_value(self):
     flow = gf.Flow('gf', retry.AlwaysRevert('rt', provides=['x']))
     flow.add(utils.TaskOneReturn('t1', provides=['x']))
     self.assertEqual(set(['x']), flow.provides)
Ejemplo n.º 20
0
 def test_retry_requires_and_provides_same_value(self):
     flow = lf.Flow(
         'lf',
         retry.AlwaysRevert('rt', requires=['x', 'y'], provides=['x', 'y']))
     self.assertEqual(set(['x', 'y']), flow.requires)
     self.assertEqual(set(['x', 'y']), flow.provides)