dynflow 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/.travis.yml +1 -0
  2. data/lib/dynflow.rb +1 -0
  3. data/lib/dynflow/action.rb +5 -3
  4. data/lib/dynflow/action/finalize_phase.rb +3 -1
  5. data/lib/dynflow/action/plan_phase.rb +4 -2
  6. data/lib/dynflow/action/run_phase.rb +3 -1
  7. data/lib/dynflow/daemon.rb +1 -0
  8. data/lib/dynflow/execution_plan.rb +6 -4
  9. data/lib/dynflow/executors/abstract.rb +12 -0
  10. data/lib/dynflow/executors/parallel.rb +16 -35
  11. data/lib/dynflow/executors/parallel/core.rb +13 -8
  12. data/lib/dynflow/executors/parallel/execution_plan_manager.rb +21 -29
  13. data/lib/dynflow/executors/parallel/flow_manager.rb +0 -3
  14. data/lib/dynflow/executors/parallel/running_steps_manager.rb +5 -3
  15. data/lib/dynflow/executors/parallel/sequential_manager.rb +6 -2
  16. data/lib/dynflow/executors/parallel/worker.rb +5 -4
  17. data/lib/dynflow/executors/remote_via_socket.rb +7 -2
  18. data/lib/dynflow/executors/remote_via_socket/core.rb +66 -32
  19. data/lib/dynflow/future.rb +1 -1
  20. data/lib/dynflow/listeners/abstract.rb +4 -0
  21. data/lib/dynflow/listeners/serialization.rb +42 -8
  22. data/lib/dynflow/listeners/socket.rb +49 -19
  23. data/lib/dynflow/middleware.rb +46 -0
  24. data/lib/dynflow/middleware/action.rb +9 -0
  25. data/lib/dynflow/middleware/register.rb +32 -0
  26. data/lib/dynflow/middleware/resolver.rb +63 -0
  27. data/lib/dynflow/middleware/stack.rb +29 -0
  28. data/lib/dynflow/middleware/world.rb +58 -0
  29. data/lib/dynflow/simple_world.rb +1 -0
  30. data/lib/dynflow/testing/dummy_world.rb +3 -1
  31. data/lib/dynflow/version.rb +1 -1
  32. data/lib/dynflow/web_console.rb +7 -2
  33. data/lib/dynflow/world.rb +29 -9
  34. data/test/action_test.rb +5 -6
  35. data/test/execution_plan_test.rb +10 -11
  36. data/test/executor_test.rb +152 -89
  37. data/test/middleware_test.rb +109 -0
  38. data/test/remote_via_socket_test.rb +166 -0
  39. data/test/{code_workflow_example.rb → support/code_workflow_example.rb} +39 -30
  40. data/test/support/middleware_example.rb +132 -0
  41. data/test/test_helper.rb +18 -16
  42. data/test/testing_test.rb +4 -3
  43. data/test/web_console_test.rb +1 -2
  44. metadata +16 -4
@@ -0,0 +1,132 @@
1
+ module Support
2
+ module MiddlewareExample
3
+ class LogMiddleware < Dynflow::Middleware
4
+
5
+ def self.log
6
+ @log
7
+ end
8
+
9
+ def self.reset_log
10
+ @log = []
11
+ end
12
+
13
+ def log(message)
14
+ LogMiddleware.log << "#{self.class.name[/\w+$/]}::#{message}"
15
+ end
16
+
17
+ def plan(args)
18
+ log 'before_plan'
19
+ pass(args)
20
+ log 'after_plan'
21
+ end
22
+
23
+ def run(*args)
24
+ log 'before_run'
25
+ pass(*args)
26
+ ensure
27
+ log 'after_run'
28
+ end
29
+
30
+ def finalize
31
+ log 'before_finalize'
32
+ pass
33
+ log 'after_finalize'
34
+ end
35
+
36
+ def plan_phase
37
+ log 'before_plan_phase'
38
+ pass
39
+ log 'after_plan_phase'
40
+ end
41
+
42
+ def finalize_phase
43
+ log 'before_finalize_phase'
44
+ pass
45
+ log 'after_finalize_phase'
46
+ end
47
+
48
+ end
49
+
50
+ class LogRunMiddleware < Dynflow::Middleware
51
+
52
+ def log(message)
53
+ LogMiddleware.log << "#{self.class.name[/\w+$/]}::#{message}"
54
+ end
55
+
56
+ def run(*args)
57
+ log 'before_run'
58
+ pass(*args)
59
+ ensure
60
+ log 'after_run'
61
+ end
62
+ end
63
+
64
+ class AnotherLogRunMiddleware < LogRunMiddleware
65
+ end
66
+
67
+ class LoggingAction < Dynflow::Action
68
+
69
+ middleware.use LogMiddleware
70
+
71
+ def log(message)
72
+ LogMiddleware.log << message
73
+ end
74
+
75
+ def plan(input)
76
+ log 'plan'
77
+ plan_self(input)
78
+ end
79
+
80
+ def run
81
+ log 'run'
82
+ end
83
+
84
+ def finalize
85
+ log 'finalize'
86
+ end
87
+ end
88
+
89
+ class ObservingMiddleware < Dynflow::Middleware
90
+
91
+ def log(message)
92
+ LogMiddleware.log << message
93
+ end
94
+
95
+ def run(*args)
96
+ log("input#message:#{action.input[:message]}")
97
+ pass(*args)
98
+ ensure
99
+ log("output#message:#{action.output[:message]}")
100
+ end
101
+ end
102
+
103
+ class Action < Dynflow::Action
104
+ middleware.use LogRunMiddleware
105
+
106
+ def log(message)
107
+ LogMiddleware.log << message
108
+ end
109
+
110
+ def run
111
+ log("run")
112
+ output[:message] = "finished"
113
+ end
114
+ end
115
+
116
+ class SubAction < Action
117
+ middleware.use AnotherLogRunMiddleware
118
+ end
119
+
120
+ class SubActionBeforeRule < Action
121
+ middleware.use AnotherLogRunMiddleware, before: LogRunMiddleware
122
+ end
123
+
124
+ class SubActionReplaceRule < Action
125
+ middleware.use AnotherLogRunMiddleware, replace: LogRunMiddleware
126
+ end
127
+
128
+ class SubActionAfterRule < Action
129
+ middleware.use AnotherLogRunMiddleware, after: LogRunMiddleware
130
+ end
131
+ end
132
+ end
data/test/test_helper.rb CHANGED
@@ -7,10 +7,18 @@ if ENV['RM_INFO']
7
7
  MiniTest::Reporters.use!
8
8
  end
9
9
 
10
+ load_path = File.expand_path(File.dirname(__FILE__))
11
+ $LOAD_PATH << load_path unless $LOAD_PATH.include? load_path
12
+
10
13
  require 'dynflow'
11
14
  require 'dynflow/testing'
12
15
  require 'pry'
13
16
 
17
+ require 'support/code_workflow_example'
18
+ require 'support/middleware_example'
19
+
20
+ Dynflow::Testing.logger_adapter.level = 1
21
+
14
22
  class TestExecutionLog
15
23
 
16
24
  include Enumerable
@@ -102,15 +110,7 @@ module WorldInstance
102
110
  end
103
111
 
104
112
  def self.logger_adapter
105
- action_logger = Logger.new($stderr).tap do |logger|
106
- logger.level = Logger::FATAL
107
- logger.progname = 'action'
108
- end
109
- dynflow_logger = Logger.new($stderr).tap do |logger|
110
- logger.level = Logger::WARN
111
- logger.progname = 'dynflow'
112
- end
113
- Dynflow::LoggerAdapters::Delegator.new(action_logger, dynflow_logger)
113
+ @adapter ||= Dynflow::LoggerAdapters::Simple.new $stderr, 4
114
114
  end
115
115
 
116
116
  def self.create_world
@@ -122,11 +122,13 @@ module WorldInstance
122
122
  @counter ||= 0
123
123
  socket_path = Dir.tmpdir + "/dynflow_remote_#{@counter+=1}"
124
124
  listener = Dynflow::Listeners::Socket.new world, socket_path
125
- world = Dynflow::SimpleWorld.new(logger_adapter: logger_adapter) do |remote_world|
126
- { persistence_adapter: world.persistence.adapter,
127
- executor: Dynflow::Executors::RemoteViaSocket.new(remote_world, socket_path),
128
- auto_terminate: false }
129
- end
125
+ world = Dynflow::SimpleWorld.new(
126
+ logger_adapter: logger_adapter,
127
+ auto_terminate: false,
128
+ persistence_adapter: -> remote_world { world.persistence.adapter },
129
+ executor: -> remote_world do
130
+ Dynflow::Executors::RemoteViaSocket.new(remote_world, socket_path)
131
+ end)
130
132
  return listener, world
131
133
  end
132
134
 
@@ -148,8 +150,8 @@ end
148
150
 
149
151
  # ensure there are no unresolved Futures at the end or being GCed
150
152
  future_tests =-> do
151
- future_creations = {}
152
- non_ready_futures = {}
153
+ future_creations = {}
154
+ non_ready_futures = {}
153
155
 
154
156
  MiniTest.after_run do
155
157
  WorldInstance.terminate
data/test/testing_test.rb CHANGED
@@ -1,9 +1,8 @@
1
1
  require_relative 'test_helper'
2
- require_relative 'code_workflow_example'
3
2
 
4
3
  module Dynflow
5
4
 
6
- CWE = CodeWorkflowExample
5
+ CWE = Support::CodeWorkflowExample
7
6
 
8
7
  describe Testing do
9
8
  include Testing
@@ -135,7 +134,9 @@ module Dynflow
135
134
  end
136
135
 
137
136
  describe 'when something fails' do
138
- let(:plan_input) { { commit: 'sha', ci_result: true, review_results: [true, false] } }
137
+ def plan_input
138
+ super.update review_results: [true, false]
139
+ end
139
140
 
140
141
  it '#runs' do
141
142
  runned_action.output.fetch(:passed).must_equal false
@@ -1,5 +1,4 @@
1
1
  require_relative 'test_helper'
2
- require_relative 'code_workflow_example'
3
2
 
4
3
  ENV['RACK_ENV'] = 'test'
5
4
  require 'dynflow/web_console'
@@ -13,7 +12,7 @@ module Dynflow
13
12
  include WorldInstance
14
13
 
15
14
  let :execution_plan_id do
16
- world.trigger(CodeWorkflowExample::FastCommit, 'sha' => 'abc123').
15
+ world.trigger(Support::CodeWorkflowExample::FastCommit, 'sha' => 'abc123').
17
16
  tap { |o| o.finished.wait }.
18
17
  id
19
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.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: 2014-01-23 00:00:00.000000000 Z
12
+ date: 2014-02-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -281,6 +281,12 @@ files:
281
281
  - lib/dynflow/logger_adapters/formatters/exception.rb
282
282
  - lib/dynflow/logger_adapters/simple.rb
283
283
  - lib/dynflow/micro_actor.rb
284
+ - lib/dynflow/middleware.rb
285
+ - lib/dynflow/middleware/action.rb
286
+ - lib/dynflow/middleware/register.rb
287
+ - lib/dynflow/middleware/resolver.rb
288
+ - lib/dynflow/middleware/stack.rb
289
+ - lib/dynflow/middleware/world.rb
284
290
  - lib/dynflow/persistence.rb
285
291
  - lib/dynflow/persistence_adapters.rb
286
292
  - lib/dynflow/persistence_adapters/abstract.rb
@@ -308,10 +314,13 @@ files:
308
314
  - lib/dynflow/world.rb
309
315
  - test/action_test.rb
310
316
  - test/clock_test.rb
311
- - test/code_workflow_example.rb
312
317
  - test/execution_plan_test.rb
313
318
  - test/executor_test.rb
319
+ - test/middleware_test.rb
314
320
  - test/persistance_adapters_test.rb
321
+ - test/remote_via_socket_test.rb
322
+ - test/support/code_workflow_example.rb
323
+ - test/support/middleware_example.rb
315
324
  - test/test_helper.rb
316
325
  - test/testing_test.rb
317
326
  - test/web_console_test.rb
@@ -363,10 +372,13 @@ summary: DYNamic workFLOW engine
363
372
  test_files:
364
373
  - test/action_test.rb
365
374
  - test/clock_test.rb
366
- - test/code_workflow_example.rb
367
375
  - test/execution_plan_test.rb
368
376
  - test/executor_test.rb
377
+ - test/middleware_test.rb
369
378
  - test/persistance_adapters_test.rb
379
+ - test/remote_via_socket_test.rb
380
+ - test/support/code_workflow_example.rb
381
+ - test/support/middleware_example.rb
370
382
  - test/test_helper.rb
371
383
  - test/testing_test.rb
372
384
  - test/web_console_test.rb