resque_jobs_tree 0.3.4 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/resque_jobs_tree.rb +25 -3
- data/lib/resque_jobs_tree/definitions.rb +15 -0
- data/lib/resque_jobs_tree/definitions/node.rb +77 -0
- data/lib/resque_jobs_tree/definitions/tree.rb +39 -0
- data/lib/resque_jobs_tree/factory.rb +7 -7
- data/lib/resque_jobs_tree/job.rb +13 -31
- data/lib/resque_jobs_tree/node.rb +64 -60
- data/lib/resque_jobs_tree/resources_serializer.rb +2 -3
- data/lib/resque_jobs_tree/storage.rb +5 -112
- data/lib/resque_jobs_tree/storage/node.rb +80 -0
- data/lib/resque_jobs_tree/storage/tree.rb +26 -0
- data/lib/resque_jobs_tree/tree.rb +32 -27
- data/lib/resque_jobs_tree/version.rb +1 -1
- data/test/definitions_test.rb +99 -0
- data/test/factory_test.rb +3 -4
- data/test/job_test.rb +6 -8
- data/test/process_test.rb +214 -0
- data/test/resources_serializer_test.rb +6 -6
- data/test/storage_node_test.rb +117 -0
- data/test/storage_tree_test.rb +27 -0
- data/test/test_helper.rb +12 -8
- data/test/tree_test.rb +14 -109
- metadata +15 -6
- data/test/node_test.rb +0 -188
- data/test/storage_test.rb +0 -74
@@ -5,12 +5,12 @@ class ResourcesSerializerTest < MiniTest::Unit::TestCase
|
|
5
5
|
def test_serialization_deserialization
|
6
6
|
model = Model.new 42
|
7
7
|
input = [model, :pdf, [1,2]]
|
8
|
-
serialized_input = ResqueJobsTree::ResourcesSerializer.
|
9
|
-
|
10
|
-
assert_equal
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
serialized_input = ResqueJobsTree::ResourcesSerializer.argumentize(input)
|
9
|
+
|
10
|
+
assert_equal [['Model', model.id], :pdf, [1,2]], serialized_input
|
11
|
+
|
12
|
+
assert_equal [Model.new(42), :pdf, [1,2]],
|
13
|
+
ResqueJobsTree::ResourcesSerializer.instancize(serialized_input)
|
14
14
|
end
|
15
15
|
|
16
16
|
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class StorageNodeTest < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
create_tree
|
7
|
+
@resources = [1, 2, 3]
|
8
|
+
@root = @tree_definition.find(:job1).spawn @resources
|
9
|
+
@leaf = @tree_definition.find(:job2).spawn @resources, @root
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_serialize
|
13
|
+
assert_equal '["tree1","job2",1,2,3]', @leaf.send(:serialize)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_storing
|
17
|
+
@leaf.store
|
18
|
+
assert_parent_key(
|
19
|
+
'ResqueJobsTree:Node:["tree1","job2",1,2,3]' => 'ResqueJobsTree:Node:["tree1","job1",1,2,3]')
|
20
|
+
assert_equal ['ResqueJobsTree:Node:["tree1","job2",1,2,3]'], redis.smembers(@root.childs_key)
|
21
|
+
@leaf.unstore
|
22
|
+
assert_parent_key({})
|
23
|
+
assert_equal [], redis.smembers(@root.childs_key)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_cleanup_for_root
|
27
|
+
create_3_nodes
|
28
|
+
@spawn1.cleanup
|
29
|
+
assert_equal [], redis.keys
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_cleanup_for_leaf
|
33
|
+
create_3_nodes
|
34
|
+
@spawn3.cleanup
|
35
|
+
assert_equal [ 'ResqueJobsTree:Tree:Launched',
|
36
|
+
'ResqueJobsTree:Node:Parents',
|
37
|
+
'ResqueJobsTree:Node:["tree1","job1",1]:childs',
|
38
|
+
'ResqueJobsTree:Node:["tree1","job2"]:childs'], redis.keys
|
39
|
+
assert_parent_key( 'ResqueJobsTree:Node:["tree1","job2"]' => 'ResqueJobsTree:Node:["tree1","job1",1]',
|
40
|
+
'ResqueJobsTree:Node:["tree1","job3",2]' => 'ResqueJobsTree:Node:["tree1","job2"]')
|
41
|
+
assert_trees_key ['ResqueJobsTree:Tree:["tree1",1]']
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_cleanup_for_not_root_nor_leaf
|
45
|
+
create_3_nodes
|
46
|
+
@spawn2.cleanup
|
47
|
+
assert_equal [ 'ResqueJobsTree:Tree:Launched',
|
48
|
+
'ResqueJobsTree:Node:["tree1","job1",1]:childs'], redis.keys
|
49
|
+
assert_parent_key({})
|
50
|
+
assert_trees_key ['ResqueJobsTree:Tree:["tree1",1]']
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_parent
|
54
|
+
@leaf.store
|
55
|
+
@leaf.instance_variable_set :@parent, nil
|
56
|
+
assert_equal @root.name, @leaf.parent.name
|
57
|
+
assert_equal @root.resources, @leaf.parent.resources
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_only_stored_child
|
61
|
+
assert @leaf.only_stored_child?
|
62
|
+
@leaf.store
|
63
|
+
assert @leaf.only_stored_child?
|
64
|
+
resources2 = [4,5,6]
|
65
|
+
leaf2 = @tree_definition.find(:job2).spawn resources2, @root
|
66
|
+
leaf2.store
|
67
|
+
assert !@leaf.only_stored_child?
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_stored_childs
|
71
|
+
@leaf.store
|
72
|
+
resources2 = [4,5,6]
|
73
|
+
leaf2 = @tree_definition.find(:job2).spawn resources2, @root
|
74
|
+
leaf2.store
|
75
|
+
assert_equal %w(job2 job2), @root.stored_childs.map(&:name)
|
76
|
+
assert_equal [[4,5,6],[1,2,3]], @root.stored_childs.map(&:resources)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_node_info_from_key
|
80
|
+
key = %Q{ResqueJobsTree:Node:["tree1","job1",1,2,3]}
|
81
|
+
result = ['job1', [1, 2, 3]]
|
82
|
+
assert_equal result, @root.send(:node_info_from_key, key)
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def assert_parent_key expected
|
88
|
+
assert_equal expected, redis.hgetall(ResqueJobsTree::Storage::PARENTS_KEY)
|
89
|
+
end
|
90
|
+
|
91
|
+
def assert_trees_key expected
|
92
|
+
assert_equal expected, redis.smembers(ResqueJobsTree::Storage::LAUNCHED_TREES)
|
93
|
+
end
|
94
|
+
|
95
|
+
def create_3_nodes
|
96
|
+
@tree_definition = ResqueJobsTree::Factory.create :tree1 do
|
97
|
+
root :job1 do
|
98
|
+
perform {}
|
99
|
+
childs { [[:job2]] }
|
100
|
+
node :job2 do
|
101
|
+
perform {}
|
102
|
+
childs { [[:job3, 1],[:job3, 2]] }
|
103
|
+
node :job3 do
|
104
|
+
perform {|n|}
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
@tree = @tree_definition.spawn [1]
|
110
|
+
@spawn1 = @tree_definition.root.spawn [1]
|
111
|
+
@spawn2 = @tree_definition.find(:job2).spawn [], @spawn1
|
112
|
+
@spawn3 = @tree_definition.find(:job3).spawn [1], @spawn2
|
113
|
+
@spawn4 = @tree_definition.find(:job3).spawn [2], @spawn2
|
114
|
+
[@tree, @spawn2, @spawn3, @spawn4].each &:store
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class StorageTreeTest < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
create_tree
|
7
|
+
@resources = [Model.new(42), 2, 3]
|
8
|
+
@tree = @tree_definition.spawn @resources
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_serialize
|
12
|
+
assert_equal '["tree1",["Model",42],2,3]', @tree.send(:serialize)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_key
|
16
|
+
assert_equal 'ResqueJobsTree:Tree:["tree1",["Model",42],2,3]', @tree.key
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_storing
|
20
|
+
@tree.store
|
21
|
+
assert_equal ["ResqueJobsTree:Tree:[\"tree1\",[\"Model\",42],2,3]"],
|
22
|
+
redis.smembers(ResqueJobsTree::Storage::LAUNCHED_TREES)
|
23
|
+
@tree.unstore
|
24
|
+
assert_equal [], redis.smembers(ResqueJobsTree::Storage::LAUNCHED_TREES)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -12,8 +12,6 @@ $TESTING = true
|
|
12
12
|
require 'mock_redis'
|
13
13
|
Resque.redis = MockRedis.new
|
14
14
|
|
15
|
-
Resque.inline = true
|
16
|
-
|
17
15
|
#
|
18
16
|
# Fixtures
|
19
17
|
#
|
@@ -36,12 +34,22 @@ class ExpectedException < Exception ; end
|
|
36
34
|
|
37
35
|
class MiniTest::Unit::TestCase
|
38
36
|
|
37
|
+
def setup
|
38
|
+
Resque.inline = true
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
39
43
|
def teardown
|
40
44
|
redis.keys.each{ |key| redis.del key }
|
41
45
|
end
|
42
46
|
|
47
|
+
def redis
|
48
|
+
Resque.redis
|
49
|
+
end
|
50
|
+
|
43
51
|
def create_tree
|
44
|
-
@
|
52
|
+
@tree_definition = ResqueJobsTree::Factory.create :tree1 do
|
45
53
|
root :job1 do
|
46
54
|
perform do |*args|
|
47
55
|
Resque.redis.rpush 'history', 'tree1 job1'
|
@@ -62,12 +70,8 @@ class MiniTest::Unit::TestCase
|
|
62
70
|
end
|
63
71
|
end
|
64
72
|
|
65
|
-
def redis
|
66
|
-
Resque.redis
|
67
|
-
end
|
68
|
-
|
69
73
|
def create_nested_tree
|
70
|
-
@
|
74
|
+
@tree_definition = ResqueJobsTree::Factory.create :tree1 do
|
71
75
|
root :job1 do
|
72
76
|
perform { raise ExpectedException, 'job1' }
|
73
77
|
childs { [ [:job2] ] }
|
data/test/tree_test.rb
CHANGED
@@ -7,130 +7,35 @@ class TreeTest < MiniTest::Unit::TestCase
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def test_name
|
10
|
-
assert_equal @
|
10
|
+
assert_equal @tree_definition.name, 'tree1'
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
14
|
-
assert_equal @
|
13
|
+
def test_leaves
|
14
|
+
assert_equal @tree_definition.spawn([]).leaves, []
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_root
|
18
|
-
assert @
|
18
|
+
assert @tree_definition.root.kind_of? ResqueJobsTree::Definitions::Node
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
22
|
-
|
23
|
-
@
|
24
|
-
|
21
|
+
def test_register_a_leaf
|
22
|
+
leaf = 'leaf'
|
23
|
+
tree = @tree_definition.spawn []
|
24
|
+
tree.register_a_leaf leaf
|
25
|
+
assert_equal tree.leaves, [leaf]
|
25
26
|
end
|
26
27
|
|
27
|
-
def
|
28
|
-
assert_equal 'job2', @
|
29
|
-
create_nested_tree
|
30
|
-
assert_equal 'job4',
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_launch
|
34
|
-
resources = [1, 2, 3]
|
35
|
-
@tree.launch *resources
|
36
|
-
history = ['tree1 job2']*3+['tree1 job1']
|
37
|
-
assert_equal history, redis.lrange('history', 0, -1)
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_launch_with_no_resources
|
41
|
-
@tree.launch
|
28
|
+
def test_find
|
29
|
+
assert_equal 'job2', @tree_definition.find(:job2).name
|
30
|
+
tree_definition = create_nested_tree
|
31
|
+
assert_equal 'job4', tree_definition.find(:job4).name
|
42
32
|
end
|
43
33
|
|
44
34
|
def test_should_have_root
|
45
|
-
assert_raises ResqueJobsTree::
|
35
|
+
assert_raises ResqueJobsTree::TreeDefinitionInvalid do
|
46
36
|
ResqueJobsTree::Factory.create :tree1 do
|
47
37
|
end
|
48
38
|
end
|
49
39
|
end
|
50
40
|
|
51
|
-
def test_on_failure
|
52
|
-
create_tree_with_on_failure_hook
|
53
|
-
assert_raises ExpectedException do
|
54
|
-
@tree.launch
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_tree_with_resource
|
59
|
-
create_tree_with_resources
|
60
|
-
@tree.launch Model.new(1)
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_nested_tree
|
64
|
-
create_nested_tree
|
65
|
-
assert_raises RuntimeError do # job4 error !
|
66
|
-
@tree.launch
|
67
|
-
end
|
68
|
-
assert_raises NoMethodError do # job3 error !
|
69
|
-
Resque.enqueue_to 'tree1', ResqueJobsTree::Job, 'tree1', 'job3'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
def test_async_tree
|
74
|
-
tree = ResqueJobsTree::Factory.create :tree1 do
|
75
|
-
root :job1 do
|
76
|
-
perform { raise 'should not arrive here' }
|
77
|
-
childs { [ [:job2], [:job3] ] }
|
78
|
-
node :job2, async: true do
|
79
|
-
perform {}
|
80
|
-
end
|
81
|
-
node :job3 do
|
82
|
-
perform {}
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
tree.launch
|
87
|
-
assert_equal ["ResqueJobsTree:Node:[\"tree1\",\"job2\"]"],
|
88
|
-
Resque.redis.smembers("ResqueJobsTree:Node:[\"tree1\",\"job1\"]:childs")
|
89
|
-
parents_hash = { 'ResqueJobsTree:Node:["tree1","job2"]'=>'ResqueJobsTree:Node:["tree1","job1"]' }
|
90
|
-
assert_equal parents_hash, Resque.redis.hgetall(ResqueJobsTree::Storage::PARENTS_KEY)
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_async_tree_with_fail
|
94
|
-
tree = ResqueJobsTree::Factory.create :tree1 do
|
95
|
-
root :job1 do
|
96
|
-
perform { raise 'should not arrive here' }
|
97
|
-
childs { [ [:job2], [:job3] ] }
|
98
|
-
node :job2, async: true do
|
99
|
-
perform {}
|
100
|
-
end
|
101
|
-
node :job3, continue_on_failure: true do
|
102
|
-
perform { raise ExpectedException, 'an expected failure' }
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
assert_raises ExpectedException do
|
107
|
-
tree.launch
|
108
|
-
end
|
109
|
-
assert_equal ["ResqueJobsTree:Node:[\"tree1\",\"job2\"]"],
|
110
|
-
Resque.redis.smembers("ResqueJobsTree:Node:[\"tree1\",\"job1\"]:childs")
|
111
|
-
end
|
112
|
-
|
113
|
-
private
|
114
|
-
|
115
|
-
def create_tree_with_on_failure_hook
|
116
|
-
@tree = ResqueJobsTree::Factory.create :tree1 do
|
117
|
-
root :job1 do
|
118
|
-
perform { raise ExpectedException, 'job1' }
|
119
|
-
end
|
120
|
-
on_failure do
|
121
|
-
raise ExpectedException, 'called from on_failure block'
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
def create_tree_with_resources
|
127
|
-
@tree = ResqueJobsTree::Factory.create :tree1 do
|
128
|
-
root :job1 do
|
129
|
-
perform do |resources|
|
130
|
-
raise 'unknown resource' unless resources.first.kind_of?(Model)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resque_jobs_tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-04-
|
12
|
+
date: 2013-04-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -105,19 +105,26 @@ files:
|
|
105
105
|
- README.md
|
106
106
|
- Rakefile
|
107
107
|
- lib/resque_jobs_tree.rb
|
108
|
+
- lib/resque_jobs_tree/definitions.rb
|
109
|
+
- lib/resque_jobs_tree/definitions/node.rb
|
110
|
+
- lib/resque_jobs_tree/definitions/tree.rb
|
108
111
|
- lib/resque_jobs_tree/factory.rb
|
109
112
|
- lib/resque_jobs_tree/job.rb
|
110
113
|
- lib/resque_jobs_tree/node.rb
|
111
114
|
- lib/resque_jobs_tree/resources_serializer.rb
|
112
115
|
- lib/resque_jobs_tree/storage.rb
|
116
|
+
- lib/resque_jobs_tree/storage/node.rb
|
117
|
+
- lib/resque_jobs_tree/storage/tree.rb
|
113
118
|
- lib/resque_jobs_tree/tree.rb
|
114
119
|
- lib/resque_jobs_tree/version.rb
|
115
120
|
- resque_jobs_tree.gemspec
|
121
|
+
- test/definitions_test.rb
|
116
122
|
- test/factory_test.rb
|
117
123
|
- test/job_test.rb
|
118
|
-
- test/
|
124
|
+
- test/process_test.rb
|
119
125
|
- test/resources_serializer_test.rb
|
120
|
-
- test/
|
126
|
+
- test/storage_node_test.rb
|
127
|
+
- test/storage_tree_test.rb
|
121
128
|
- test/test_helper.rb
|
122
129
|
- test/tree_test.rb
|
123
130
|
homepage: ''
|
@@ -146,11 +153,13 @@ signing_key:
|
|
146
153
|
specification_version: 3
|
147
154
|
summary: Organise Resque jobs as a tree.
|
148
155
|
test_files:
|
156
|
+
- test/definitions_test.rb
|
149
157
|
- test/factory_test.rb
|
150
158
|
- test/job_test.rb
|
151
|
-
- test/
|
159
|
+
- test/process_test.rb
|
152
160
|
- test/resources_serializer_test.rb
|
153
|
-
- test/
|
161
|
+
- test/storage_node_test.rb
|
162
|
+
- test/storage_tree_test.rb
|
154
163
|
- test/test_helper.rb
|
155
164
|
- test/tree_test.rb
|
156
165
|
has_rdoc:
|
data/test/node_test.rb
DELETED
@@ -1,188 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class NodeTest < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
@tree = ResqueJobsTree::Tree.new :tree1
|
7
|
-
@root = ResqueJobsTree::Node.new :node1, @tree
|
8
|
-
@leaf = ResqueJobsTree::Node.new :node2, @tree, @root
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_ressources
|
12
|
-
variable = 1
|
13
|
-
@root.resources do |n|
|
14
|
-
variable = n
|
15
|
-
end
|
16
|
-
@root.resources.call 2
|
17
|
-
assert_equal variable, 2
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_perform
|
21
|
-
variable = 1
|
22
|
-
@root.perform do |n|
|
23
|
-
variable = n
|
24
|
-
end
|
25
|
-
@root.perform.call 2
|
26
|
-
assert_equal variable, 2
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_childs
|
30
|
-
variable = 1
|
31
|
-
@leaf.childs do |n|
|
32
|
-
variable = n
|
33
|
-
end
|
34
|
-
@leaf.childs.call 2
|
35
|
-
assert_equal variable, 2
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_node
|
39
|
-
node3 = @root.node :node3
|
40
|
-
assert_equal @root.find_node_by_name('node3').object_id, node3.object_id
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_leaf
|
44
|
-
resources = []
|
45
|
-
assert @leaf.leaf?(resources)
|
46
|
-
@root.childs do |resources|
|
47
|
-
[:node2, resources]
|
48
|
-
end
|
49
|
-
assert !@root.leaf?(resources)
|
50
|
-
end
|
51
|
-
|
52
|
-
def test_root
|
53
|
-
assert @root.root?
|
54
|
-
assert !@leaf.root?
|
55
|
-
end
|
56
|
-
|
57
|
-
def test_siblings
|
58
|
-
node3 = ResqueJobsTree::Node.new :node3, @tree, @root
|
59
|
-
assert @leaf.siblings, [node3]
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_launch
|
63
|
-
resources = [1, 2, 3]
|
64
|
-
@leaf.launch resources, resources
|
65
|
-
assert_equal @tree.jobs.first, ['tree1', 'node2', 1, 2, 3]
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_childs_validation
|
69
|
-
assert_raises ResqueJobsTree::NodeInvalid do
|
70
|
-
ResqueJobsTree::Factory.create :tree1 do
|
71
|
-
root :job1 do
|
72
|
-
perform {}
|
73
|
-
childs {}
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
ResqueJobsTree::Factory.create :tree1 do
|
78
|
-
root :job1 do
|
79
|
-
perform {}
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_perform_validation
|
85
|
-
assert_raises ResqueJobsTree::NodeInvalid do
|
86
|
-
ResqueJobsTree::Factory.create :tree1 do
|
87
|
-
root :job1 do
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_perform_validation
|
94
|
-
assert_raises ResqueJobsTree::NodeInvalid do
|
95
|
-
ResqueJobsTree::Factory.create :tree1 do
|
96
|
-
root :job1 do
|
97
|
-
perform {}
|
98
|
-
childs {}
|
99
|
-
node :job2 do
|
100
|
-
perform {}
|
101
|
-
end
|
102
|
-
node :job2 do
|
103
|
-
perform {}
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
def test_options
|
111
|
-
create_async_tree
|
112
|
-
options = { async: true }
|
113
|
-
assert_equal options, @tree.find_node_by_name(:job2).options
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_launch_async
|
117
|
-
create_async_tree
|
118
|
-
resources = [1, 2, 3]
|
119
|
-
@tree.launch resources
|
120
|
-
assert @tree.jobs.empty?
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_launch_continue_on_failure
|
124
|
-
tree = ResqueJobsTree::Factory.create :tree1 do
|
125
|
-
root :job1 do
|
126
|
-
perform { raise ExpectedException, 'an expected failure' }
|
127
|
-
childs { [:job2] }
|
128
|
-
node :job2, continue_on_failure: true do
|
129
|
-
perform { raise 'an expected failure' }
|
130
|
-
end
|
131
|
-
end
|
132
|
-
end
|
133
|
-
resources = [1, 2, 3]
|
134
|
-
assert_raises ExpectedException do
|
135
|
-
tree.launch resources
|
136
|
-
end
|
137
|
-
assert_equal [], Resque.keys
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_leaf_failure
|
141
|
-
tree = ResqueJobsTree::Factory.create :tree1 do
|
142
|
-
root :job1 do
|
143
|
-
perform {}
|
144
|
-
childs { [:job2] }
|
145
|
-
node :job2 do
|
146
|
-
perform { raise ExpectedException, 'an expected exception'}
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
resources = [1, 2, 3]
|
151
|
-
assert_raises ExpectedException do
|
152
|
-
tree.launch *resources
|
153
|
-
end
|
154
|
-
assert_equal [], Resque.keys
|
155
|
-
end
|
156
|
-
|
157
|
-
def test_root_failure
|
158
|
-
tree = ResqueJobsTree::Factory.create :tree1 do
|
159
|
-
root :job1 do
|
160
|
-
perform { raise ExpectedException, 'an expected exception' }
|
161
|
-
childs { [:job2] }
|
162
|
-
node :job2 do
|
163
|
-
perform {}
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
resources = [1, 2, 3]
|
168
|
-
assert_raises ExpectedException do
|
169
|
-
tree.launch resources
|
170
|
-
end
|
171
|
-
assert_equal [], Resque.keys
|
172
|
-
end
|
173
|
-
|
174
|
-
private
|
175
|
-
|
176
|
-
def create_async_tree
|
177
|
-
@tree = ResqueJobsTree::Factory.create :tree1 do
|
178
|
-
root :job1 do
|
179
|
-
perform { raise 'should not arrive here' }
|
180
|
-
childs { [:job2] }
|
181
|
-
node :job2, async: true do
|
182
|
-
perform {}
|
183
|
-
end
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
end
|