dynflow 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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