ntl-orchestra 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,49 +1,49 @@
1
1
  class DSLTest < Minitest::Test
2
- def test_failing_to_supply_perform_block
2
+ def test_failing_to_supply_execute_block
3
3
  error = assert_raises ArgumentError do
4
- Orchestra::Node::InlineNode.build do
4
+ Orchestra::Step::InlineStep.build do
5
5
  provides :foo
6
6
  depends_on :bar
7
7
  end
8
8
  end
9
9
 
10
- assert_equal "expected inline node to define a perform block", error.message
10
+ assert_equal "expected inline step to define a execute block", error.message
11
11
  end
12
12
 
13
- def test_two_nodes_one_name
13
+ def test_two_steps_one_name
14
14
  error = assert_raises ArgumentError do
15
15
  Orchestra::Operation.new do
16
- node :foo do
16
+ step :foo do
17
17
  depends_on :bar
18
- perform do bar + bar end
18
+ execute do bar + bar end
19
19
  end
20
- node :foo do
20
+ step :foo do
21
21
  depends_on :qux
22
- perform do qux * qux end
22
+ execute do qux * qux end
23
23
  end
24
24
  end
25
25
  end
26
26
 
27
- assert_equal "There are duplicate nodes named :foo", error.message
27
+ assert_equal "There are duplicate steps named :foo", error.message
28
28
  end
29
29
 
30
- def test_result_node
30
+ def test_result_step
31
31
  operation = Orchestra::Operation.new do
32
- result :foo do perform do 'foo' end end
32
+ result :foo do execute do 'foo' end end
33
33
  end
34
34
  assert_equal :foo, operation.result
35
35
 
36
36
  error = assert_raises ArgumentError do
37
37
  operation = Orchestra::Operation.new do
38
- result do perform do 'foo' end end
38
+ result do execute do 'foo' end end
39
39
  end
40
40
  end
41
- assert_equal "Could not infer name for node from a provision", error.message
41
+ assert_equal "Could not infer name for step from a provision", error.message
42
42
 
43
43
  operation = Orchestra::Operation.new do
44
44
  result do
45
45
  provides :foo
46
- perform do 'foo' end
46
+ execute do 'foo' end
47
47
  end
48
48
  end
49
49
  assert_equal :foo, operation.result
@@ -51,20 +51,20 @@ class DSLTest < Minitest::Test
51
51
 
52
52
  def test_command_operations_using_finally
53
53
  operation = Orchestra::Operation.new do
54
- node :unnecessary do
54
+ step :unnecessary do
55
55
  provides :baz
56
- perform do raise "Can't get here" end
56
+ execute do raise "Can't get here" end
57
57
  end
58
58
 
59
- node :necessary do
59
+ step :necessary do
60
60
  depends_on :baz
61
61
  provides :bar
62
- perform do baz + 1 end
62
+ execute do baz + 1 end
63
63
  end
64
64
 
65
65
  finally do
66
66
  depends_on :bar
67
- perform do bar * 2 end
67
+ execute do bar * 2 end
68
68
  end
69
69
  end
70
70
 
@@ -80,7 +80,7 @@ class DSLTest < Minitest::Test
80
80
  conductor = Orchestra::Conductor.new
81
81
  conductor.add_observer test_observer
82
82
 
83
- assert_equal nil, conductor.perform(operation, :baz => 3)
83
+ assert_equal nil, conductor.execute(operation, :baz => 3)
84
84
  assert_equal 8, test_observer.result
85
85
  end
86
86
 
@@ -88,12 +88,12 @@ class DSLTest < Minitest::Test
88
88
  operation = Orchestra::Operation.new do
89
89
  result do
90
90
  modifies :list
91
- perform do list << :foo end
91
+ execute do list << :foo end
92
92
  end
93
93
  end
94
94
 
95
95
  ary = []
96
- Orchestra.perform operation, :list => ary
96
+ Orchestra.execute operation, :list => ary
97
97
 
98
98
  assert_equal [:foo], ary
99
99
  end
@@ -101,8 +101,8 @@ class DSLTest < Minitest::Test
101
101
  def test_must_supply_result
102
102
  error = assert_raises ArgumentError do
103
103
  Orchestra::Operation.new do
104
- node :foo do
105
- perform do 'foo' end
104
+ step :foo do
105
+ execute do 'foo' end
106
106
  end
107
107
  end
108
108
  end
@@ -110,13 +110,13 @@ class DSLTest < Minitest::Test
110
110
  assert_equal "Must supply a result", error.message
111
111
  end
112
112
 
113
- def test_must_contain_at_least_one_node
113
+ def test_must_contain_at_least_one_step
114
114
  error = assert_raises ArgumentError do
115
115
  Orchestra::Operation.new do
116
116
  self.result = :foo
117
117
  end
118
118
  end
119
119
 
120
- assert_equal "Must supply at least one node", error.message
120
+ assert_equal "Must supply at least one step", error.message
121
121
  end
122
122
  end
@@ -5,7 +5,7 @@ class ObjectAdapterTest < Minitest::Test
5
5
 
6
6
  def test_method_does_not_exist_on_singleton
7
7
  error = assert_raises NotImplementedError do
8
- @builder.add_node Splitter, :provides => :words, :method => :foo
8
+ @builder.add_step Splitter, :provides => :words, :method => :foo
9
9
  end
10
10
 
11
11
  assert_equal "ObjectAdapterTest::Splitter does not implement method `foo'", error.message
@@ -13,29 +13,29 @@ class ObjectAdapterTest < Minitest::Test
13
13
 
14
14
  def test_method_does_not_exist_on_object
15
15
  error = assert_raises NotImplementedError do
16
- @builder.add_node Upcaser, :provides => :words
16
+ @builder.add_step Upcaser, :provides => :words
17
17
  end
18
18
 
19
- assert_equal "ObjectAdapterTest::Upcaser does not implement instance method `perform'", error.message
19
+ assert_equal "ObjectAdapterTest::Upcaser does not implement instance method `execute'", error.message
20
20
  end
21
21
 
22
22
  def test_dependencies_inferred_from_method_defaults
23
- node = @builder.add_node Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
23
+ step = @builder.add_step Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
24
24
 
25
- assert_equal [:words, :transform], node.dependencies
26
- assert_equal [:words], node.required_dependencies
25
+ assert_equal [:words, :transform], step.dependencies
26
+ assert_equal [:words], step.required_dependencies
27
27
  end
28
28
 
29
- def test_performing_an_operation_with_integrated_objects
29
+ def test_executing_an_operation_with_integrated_objects
30
30
  operation = Orchestra::Operation.new do
31
- node Splitter, :provides => :words
32
- node Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
33
- node Bolder, :iterates_over => :upcased_words, :provides => :bolded_words, :method => :call
34
- node Joiner, :method => :join
31
+ step Splitter, :provides => :words
32
+ step Upcaser, :iterates_over => :words, :provides => :upcased_words, :method => :call
33
+ step Bolder, :iterates_over => :upcased_words, :provides => :bolded_words, :method => :call
34
+ step Joiner, :method => :join
35
35
  self.result = :joiner
36
36
  end
37
37
 
38
- result = Orchestra.perform(
38
+ result = Orchestra.execute(
39
39
  operation,
40
40
  :sentence => "the quick brown fox jumps over the lazy dog",
41
41
  :bold_text => "*",
@@ -50,7 +50,7 @@ class ObjectAdapterTest < Minitest::Test
50
50
  def test_provent_singleton_objects_from_handling_collections
51
51
  error = assert_raises ArgumentError do
52
52
  Orchestra::Operation.new do
53
- node Splitter, :iterates_over => :sentence
53
+ step Splitter, :iterates_over => :sentence
54
54
  end
55
55
  end
56
56
 
@@ -61,7 +61,7 @@ class ObjectAdapterTest < Minitest::Test
61
61
  end
62
62
 
63
63
  module Splitter
64
- def self.perform sentence
64
+ def self.execute sentence
65
65
  sentence.split %r{[[:space:]]+}
66
66
  end
67
67
  end
@@ -1,19 +1,19 @@
1
1
  module OperationTest
2
- class PerformTest < Minitest::Test
2
+ class ExecutionTest < Minitest::Test
3
3
  def test_simple_operation
4
4
  operation = build_simple_operation
5
5
 
6
6
  assert_equal(
7
7
  %(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG),
8
- operation.perform(:sentence => %(the quick brown fox jumps over the lazy dog)),
8
+ operation.execute(:sentence => %(the quick brown fox jumps over the lazy dog)),
9
9
  )
10
10
  end
11
11
 
12
- def test_performing_operation_without_inputs
12
+ def test_executing_operation_without_inputs
13
13
  operation = build_simple_operation
14
14
 
15
15
  error = assert_raises Orchestra::MissingInputError do
16
- operation.perform
16
+ operation.execute
17
17
  end
18
18
 
19
19
  assert_equal %(Missing input :sentence), error.message
@@ -23,7 +23,7 @@ module OperationTest
23
23
  operation = build_mutator
24
24
 
25
25
  shopping_list = [%(1 clove garlic)]
26
- operation.perform :shopping_list => shopping_list
26
+ operation.execute :shopping_list => shopping_list
27
27
 
28
28
  assert_equal(
29
29
  [%(1 clove garlic), %(2 bunches of carrots), %(1 stalk of celery), %(3 yellow onions)],
@@ -36,41 +36,41 @@ module OperationTest
36
36
 
37
37
  assert_equal(
38
38
  %(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG),
39
- operation.perform(:upcased_word_list => %w(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG)),
39
+ operation.execute(:upcased_word_list => %w(THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG)),
40
40
  )
41
41
  end
42
42
 
43
- def test_passing_conductor_into_nodes
43
+ def test_passing_conductor_into_steps
44
44
  conductor = Orchestra::Conductor.new
45
45
 
46
- node = Orchestra::Node::InlineNode.build do
46
+ step = Orchestra::Step::InlineStep.build do
47
47
  depends_on :conductor
48
48
  provides :conductor_id
49
- perform do conductor.object_id end
49
+ execute do conductor.object_id end
50
50
  end
51
51
 
52
- assert_equal conductor.object_id, node.perform[:conductor_id]
52
+ assert_equal conductor.object_id, step.execute[:conductor_id]
53
53
  end
54
54
 
55
55
  def test_missing_input_errors
56
56
  operation = Orchestra::Operation.new do
57
- node :foo do
57
+ step :foo do
58
58
  depends_on :bar
59
- perform do bar + bar end
59
+ execute do bar + bar end
60
60
  end
61
- node :baz do
61
+ step :baz do
62
62
  depends_on :qux
63
- perform do qux * qux end
63
+ execute do qux * qux end
64
64
  end
65
- node :result do
65
+ step :result do
66
66
  depends_on :foo, :baz
67
- perform do baz - foo end
67
+ execute do baz - foo end
68
68
  end
69
69
  self.result = :result
70
70
  end
71
71
 
72
72
  error = assert_raises Orchestra::MissingInputError do
73
- Orchestra.perform operation, :bar => nil
73
+ Orchestra.execute operation, :bar => nil
74
74
  end
75
75
 
76
76
  assert_equal "Missing inputs :bar and :qux", error.message
@@ -80,21 +80,21 @@ module OperationTest
80
80
 
81
81
  def build_simple_operation
82
82
  Orchestra::Operation.new do
83
- node :split do
83
+ step :split do
84
84
  depends_on :sentence
85
85
  provides :word_list
86
- perform do sentence.split %r{[[:space:]]+} end
86
+ execute do sentence.split %r{[[:space:]]+} end
87
87
  end
88
88
 
89
- node :upcase do
89
+ step :upcase do
90
90
  depends_on :word_list
91
91
  provides :upcased_word_list
92
- perform do word_list.map &:upcase end
92
+ execute do word_list.map &:upcase end
93
93
  end
94
94
 
95
- node :join do
95
+ step :join do
96
96
  depends_on :upcased_word_list
97
- perform do upcased_word_list.join ' ' end
97
+ execute do upcased_word_list.join ' ' end
98
98
  end
99
99
 
100
100
  self.result = :join
@@ -103,22 +103,22 @@ module OperationTest
103
103
 
104
104
  def build_mutator
105
105
  Orchestra::Operation.new do
106
- node :carrots do
106
+ step :carrots do
107
107
  depends_on :shopping_list
108
108
  provides :shopping_list
109
- perform do shopping_list << "2 bunches of carrots" end
109
+ execute do shopping_list << "2 bunches of carrots" end
110
110
  end
111
111
 
112
- node :celery do
112
+ step :celery do
113
113
  depends_on :shopping_list
114
114
  provides :shopping_list
115
- perform do shopping_list << "1 stalk of celery" end
115
+ execute do shopping_list << "1 stalk of celery" end
116
116
  end
117
117
 
118
- node :onions do
118
+ step :onions do
119
119
  depends_on :shopping_list
120
120
  provides :shopping_list
121
- perform do shopping_list << "3 yellow onions" end
121
+ execute do shopping_list << "3 yellow onions" end
122
122
  end
123
123
 
124
124
  self.result = :shopping_list
@@ -129,33 +129,33 @@ module OperationTest
129
129
 
130
130
  class IntrospectionTest < Minitest::Test
131
131
  def test_introspecting_dependencies
132
- node = Orchestra::Node::InlineNode.build do
132
+ step = Orchestra::Step::InlineStep.build do
133
133
  depends_on :foo, :bar => :baz
134
134
  provides :baz
135
- perform do :noop end
135
+ execute do :noop end
136
136
  end
137
137
 
138
- assert_equal [:foo, :bar], node.dependencies
138
+ assert_equal [:foo, :bar], step.dependencies
139
139
  end
140
140
 
141
141
  def test_introspecting_optional_dependencies
142
- node = Orchestra::Node::InlineNode.build do
142
+ step = Orchestra::Step::InlineStep.build do
143
143
  depends_on :foo, :bar => :baz
144
144
  provides :qux
145
- perform do :noop end
145
+ execute do :noop end
146
146
  end
147
147
 
148
- assert_equal [:bar], node.optional_dependencies
148
+ assert_equal [:bar], step.optional_dependencies
149
149
  end
150
150
 
151
151
  def test_introspecting_mandatory_dependencies
152
- node = Orchestra::Node::InlineNode.build do
152
+ step = Orchestra::Step::InlineStep.build do
153
153
  depends_on :foo, :bar => :baz
154
154
  provides :baz
155
- perform do :noop end
155
+ execute do :noop end
156
156
  end
157
157
 
158
- assert_equal [:foo], node.required_dependencies
158
+ assert_equal [:foo], step.required_dependencies
159
159
  end
160
160
 
161
161
  end
@@ -163,24 +163,24 @@ module OperationTest
163
163
  class EmbeddingOperationsTest < Minitest::Test
164
164
  def test_embedding_operations
165
165
  inner = Orchestra::Operation.new do
166
- node :double do
166
+ step :double do
167
167
  depends_on :number
168
168
  provides :doubled
169
- perform do number * 2 end
169
+ execute do number * 2 end
170
170
  end
171
171
 
172
172
  result :plus_one do
173
173
  depends_on :doubled
174
- perform do doubled + 1 end
174
+ execute do doubled + 1 end
175
175
  end
176
176
  end
177
177
 
178
178
  outer = Orchestra::Operation.new do
179
- node inner
179
+ step inner
180
180
 
181
181
  result :squared do
182
182
  depends_on :plus_one
183
- perform do plus_one ** 2 end
183
+ execute do plus_one ** 2 end
184
184
  end
185
185
  end
186
186
 
@@ -189,7 +189,7 @@ module OperationTest
189
189
  conductor = Orchestra::Conductor.new
190
190
  conductor.add_observer TelemetryRecorder.new telemetry
191
191
 
192
- result = conductor.perform outer, :number => 4
192
+ result = conductor.execute outer, :number => 4
193
193
 
194
194
  assert_equal 81, result
195
195
 
@@ -216,7 +216,7 @@ module OperationTest
216
216
  },
217
217
  },
218
218
  :output => 81,
219
- :performance_name => nil,
219
+ :operation_name => nil,
220
220
  :service_calls => [],
221
221
  }
222
222
  end
@@ -4,16 +4,16 @@ class RunListTest < Minitest::Test
4
4
 
5
5
  run_list = builder.build
6
6
 
7
- assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.node_names
7
+ assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.step_names
8
8
  assert_includes run_list.dependencies, :foo
9
9
  end
10
10
 
11
- def test_discards_unnecessary_nodes
11
+ def test_discards_unnecessary_steps
12
12
  builder['aba⇒cab'] = OpenStruct.new :required_dependencies => [:aba], :optional_dependencies => [], :provisions => [:cab]
13
13
 
14
14
  run_list = builder.build
15
15
 
16
- assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.node_names
16
+ assert_equal %w(foo⇒bar bar⇒baz baz⇒qux qux⇒res), run_list.step_names
17
17
  end
18
18
 
19
19
  def test_supplying_dependencies
@@ -21,16 +21,16 @@ class RunListTest < Minitest::Test
21
21
 
22
22
  run_list = builder.build
23
23
 
24
- assert_equal %w(baz⇒qux qux⇒res), run_list.node_names
24
+ assert_equal %w(baz⇒qux qux⇒res), run_list.step_names
25
25
  refute_includes run_list.dependencies, :foo
26
26
  end
27
27
 
28
- def test_nodes_that_modify
29
- assemble_builder modifying_nodes
28
+ def test_steps_that_modify
29
+ assemble_builder modifying_steps
30
30
 
31
31
  run_list = builder.build
32
32
 
33
- assert_equal %w(foo bar baz), run_list.node_names
33
+ assert_equal %w(foo bar baz), run_list.step_names
34
34
  end
35
35
 
36
36
  def test_reorders_optional_deps_before_mandatory_deps_when_possible
@@ -38,7 +38,7 @@ class RunListTest < Minitest::Test
38
38
 
39
39
  run_list = builder.build
40
40
 
41
- assert_equal %w(baz+foo bar+baz foo+bar final), run_list.node_names
41
+ assert_equal %w(baz+foo bar+baz foo+bar final), run_list.step_names
42
42
  assert_equal [], run_list.required_dependencies
43
43
  assert_equal [:bar, :baz, :foo], run_list.optional_dependencies
44
44
  end
@@ -58,16 +58,16 @@ class RunListTest < Minitest::Test
58
58
 
59
59
  private
60
60
 
61
- def assemble_builder nodes = default_nodes
61
+ def assemble_builder steps = default_steps
62
62
  @builder ||= begin
63
63
  builder = Orchestra::RunList::Builder.new :res
64
- builder.merge! nodes
64
+ builder.merge! steps
65
65
  builder
66
66
  end
67
67
  end
68
68
  alias_method :builder, :assemble_builder
69
69
 
70
- def default_nodes
70
+ def default_steps
71
71
  {
72
72
  'foo⇒bar' => OpenStruct.new(:required_dependencies => [:foo], :provisions => [:bar], optional_dependencies: []),
73
73
  'bar⇒baz' => OpenStruct.new(:required_dependencies => [:bar], :provisions => [:baz], optional_dependencies: []),
@@ -76,7 +76,7 @@ class RunListTest < Minitest::Test
76
76
  }
77
77
  end
78
78
 
79
- def modifying_nodes
79
+ def modifying_steps
80
80
  {
81
81
  'foo' => OpenStruct.new(:required_dependencies => [:shared], :provisions => [:shared], optional_dependencies: []),
82
82
  'bar' => OpenStruct.new(:required_dependencies => [:shared], :provisions => [:shared], optional_dependencies: []),
@@ -0,0 +1,122 @@
1
+ class StepTest < Minitest::Test
2
+ def test_invoking_a_step
3
+ step = build_simple_step
4
+
5
+ assert_equal(
6
+ { :bar => 4 },
7
+ step.execute(:foo => 2, :bar => 2),
8
+ )
9
+ end
10
+
11
+ def test_providing_a_single_hash
12
+ step = Orchestra::Step::InlineStep.new(
13
+ :dependencies => [:foo],
14
+ :provides => [:bar],
15
+ :execute_block => lambda { { :bar => (foo * 2) } },
16
+ )
17
+
18
+ assert_equal(
19
+ { :bar => 4 },
20
+ step.execute(:foo => 2),
21
+ )
22
+ end
23
+
24
+ def test_providing_a_single_hash_that_is_not_the_output
25
+ step = Orchestra::Step::InlineStep.new(
26
+ :dependencies => [:foo],
27
+ :provides => [:bar],
28
+ :execute_block => lambda { { :baz => (foo * 2) } },
29
+ )
30
+
31
+ assert_equal(
32
+ { :bar => { :baz => 4 } },
33
+ step.execute(:foo => 2),
34
+ )
35
+ end
36
+
37
+ def test_invoking_a_collection_step
38
+ step = Orchestra::Step::InlineStep.new(
39
+ :dependencies => [:foo],
40
+ :provides => [:bar],
41
+ :execute_block => lambda { |e| e * 2 },
42
+ :collection => :foo,
43
+ )
44
+
45
+ assert_equal(
46
+ { :bar => [2, 4, 6, 8] },
47
+ step.execute(:foo => [1, 2, 3, 4]),
48
+ )
49
+ end
50
+
51
+ def test_defaulting
52
+ step = build_simple_step
53
+
54
+ assert_equal(
55
+ { :bar => 8 },
56
+ step.execute(:foo => 2),
57
+ )
58
+ end
59
+
60
+ def test_introspecting_dependencies
61
+ step = build_simple_step
62
+
63
+ assert_equal [:foo, :bar], step.dependencies
64
+ end
65
+
66
+ def test_introspecting_mandatory_dependencies
67
+ step = build_simple_step
68
+
69
+ assert_equal [:foo], step.required_dependencies
70
+ end
71
+
72
+ def test_step_fails_to_supply_provisions
73
+ step = Orchestra::Step::InlineStep.new(
74
+ :provides => [:foo, :bar, :baz],
75
+ :execute_block => lambda { nil },
76
+ )
77
+
78
+ error = assert_raises Orchestra::MissingProvisionError do step.execute end
79
+
80
+ assert_equal(
81
+ "failed to supply output: :foo, :bar and :baz",
82
+ error.message,
83
+ )
84
+ end
85
+
86
+ def test_cannot_return_nil
87
+ step = Orchestra::Step::InlineStep.new(
88
+ :provides => [:foo],
89
+ :execute_block => lambda do nil end
90
+ )
91
+
92
+ error = assert_raises Orchestra::MissingProvisionError do step.execute end
93
+
94
+ assert_equal(
95
+ "failed to supply output: :foo",
96
+ error.message,
97
+ )
98
+ end
99
+
100
+ def test_step_provides_extra_provisions
101
+ step = Orchestra::Step::InlineStep.new(
102
+ :provides => [:foo],
103
+ :execute_block => lambda do { :foo => :bar, :baz => :qux } end,
104
+ )
105
+
106
+ assert_equal(
107
+ { :foo => :bar },
108
+ step.execute,
109
+ )
110
+ end
111
+
112
+ private
113
+
114
+ def build_simple_step
115
+ Orchestra::Step::InlineStep.new(
116
+ :defaults => { :bar => lambda { 4 } },
117
+ :dependencies => [:foo, :bar],
118
+ :provides => [:bar],
119
+ :execute_block => lambda { foo * bar },
120
+ )
121
+ end
122
+ end
@@ -49,7 +49,7 @@ class ThreadPoolTest < Minitest::Test
49
49
 
50
50
  def test_performing_work
51
51
  @iterations.times do
52
- result = @thread_pool.perform do :deadbeef end
52
+ result = @thread_pool.execute do :deadbeef end
53
53
 
54
54
  assert_equal :deadbeef, result
55
55
  end
@@ -77,7 +77,7 @@ class ThreadPoolTest < Minitest::Test
77
77
  10.times do
78
78
  assert_raises NoMethodError do
79
79
  input.each do |num|
80
- @thread_pool.perform do num * 2 end
80
+ @thread_pool.execute do num * 2 end
81
81
  end
82
82
  end
83
83
  end