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.
- data/.travis.yml +1 -0
- data/lib/dynflow.rb +1 -0
- data/lib/dynflow/action.rb +5 -3
- data/lib/dynflow/action/finalize_phase.rb +3 -1
- data/lib/dynflow/action/plan_phase.rb +4 -2
- data/lib/dynflow/action/run_phase.rb +3 -1
- data/lib/dynflow/daemon.rb +1 -0
- data/lib/dynflow/execution_plan.rb +6 -4
- data/lib/dynflow/executors/abstract.rb +12 -0
- data/lib/dynflow/executors/parallel.rb +16 -35
- data/lib/dynflow/executors/parallel/core.rb +13 -8
- data/lib/dynflow/executors/parallel/execution_plan_manager.rb +21 -29
- data/lib/dynflow/executors/parallel/flow_manager.rb +0 -3
- data/lib/dynflow/executors/parallel/running_steps_manager.rb +5 -3
- data/lib/dynflow/executors/parallel/sequential_manager.rb +6 -2
- data/lib/dynflow/executors/parallel/worker.rb +5 -4
- data/lib/dynflow/executors/remote_via_socket.rb +7 -2
- data/lib/dynflow/executors/remote_via_socket/core.rb +66 -32
- data/lib/dynflow/future.rb +1 -1
- data/lib/dynflow/listeners/abstract.rb +4 -0
- data/lib/dynflow/listeners/serialization.rb +42 -8
- data/lib/dynflow/listeners/socket.rb +49 -19
- data/lib/dynflow/middleware.rb +46 -0
- data/lib/dynflow/middleware/action.rb +9 -0
- data/lib/dynflow/middleware/register.rb +32 -0
- data/lib/dynflow/middleware/resolver.rb +63 -0
- data/lib/dynflow/middleware/stack.rb +29 -0
- data/lib/dynflow/middleware/world.rb +58 -0
- data/lib/dynflow/simple_world.rb +1 -0
- data/lib/dynflow/testing/dummy_world.rb +3 -1
- data/lib/dynflow/version.rb +1 -1
- data/lib/dynflow/web_console.rb +7 -2
- data/lib/dynflow/world.rb +29 -9
- data/test/action_test.rb +5 -6
- data/test/execution_plan_test.rb +10 -11
- data/test/executor_test.rb +152 -89
- data/test/middleware_test.rb +109 -0
- data/test/remote_via_socket_test.rb +166 -0
- data/test/{code_workflow_example.rb → support/code_workflow_example.rb} +39 -30
- data/test/support/middleware_example.rb +132 -0
- data/test/test_helper.rb +18 -16
- data/test/testing_test.rb +4 -3
- data/test/web_console_test.rb +1 -2
- 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
|
-
|
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(
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
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
|
-
|
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
|
data/test/web_console_test.rb
CHANGED
@@ -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.
|
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-
|
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
|