flatware 0.1.0 → 0.2.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/README.rdoc +1 -1
- data/lib/flatware.rb +15 -14
- data/lib/flatware/checkpoint.rb +5 -0
- data/lib/flatware/checkpoint_handler.rb +27 -0
- data/lib/flatware/cli.rb +3 -2
- data/lib/flatware/sink.rb +19 -21
- data/lib/flatware/version.rb +1 -1
- metadata +8 -7
data/README.rdoc
CHANGED
data/lib/flatware.rb
CHANGED
@@ -2,18 +2,19 @@ require 'forwardable'
|
|
2
2
|
require 'ffi-rzmq'
|
3
3
|
|
4
4
|
module Flatware
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
5
|
+
require 'flatware/checkpoint_handler'
|
6
|
+
require 'flatware/processor_info'
|
7
|
+
require 'flatware/cli'
|
8
|
+
require 'flatware/cucumber'
|
9
|
+
require 'flatware/dispatcher'
|
10
|
+
require 'flatware/fireable'
|
11
|
+
require 'flatware/result'
|
12
|
+
require 'flatware/scenario_result'
|
13
|
+
require 'flatware/sink'
|
14
|
+
require 'flatware/step_result'
|
15
|
+
require 'flatware/summary'
|
16
|
+
require 'flatware/worker'
|
17
|
+
require 'flatware/scenario_decorator'
|
17
18
|
|
18
19
|
Error = Class.new StandardError
|
19
20
|
|
@@ -66,7 +67,7 @@ module Flatware
|
|
66
67
|
def_delegators :s, :bind, :connect, :setsockopt
|
67
68
|
def send(message)
|
68
69
|
result = s.send_string(Marshal.dump(message))
|
69
|
-
raise Error, ZMQ::Util.error_string, caller
|
70
|
+
raise Error, ZMQ::Util.error_string, caller if result == -1
|
70
71
|
message
|
71
72
|
end
|
72
73
|
|
@@ -78,7 +79,7 @@ module Flatware
|
|
78
79
|
def recv
|
79
80
|
message = ''
|
80
81
|
result = s.recv_string(message)
|
81
|
-
raise Error, ZMQ::Util.error_string, caller
|
82
|
+
raise Error, ZMQ::Util.error_string, caller if result == -1
|
82
83
|
Marshal.load message
|
83
84
|
end
|
84
85
|
end
|
data/lib/flatware/checkpoint.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'flatware/scenario_result'
|
1
2
|
module Flatware
|
2
3
|
class Checkpoint
|
3
4
|
attr_reader :steps, :scenarios
|
@@ -5,6 +6,10 @@ module Flatware
|
|
5
6
|
@steps, @scenarios = serialize_steps(steps), serialize_scenarios(scenarios)
|
6
7
|
end
|
7
8
|
|
9
|
+
def failures?
|
10
|
+
scenarios.any? &:failed?
|
11
|
+
end
|
12
|
+
|
8
13
|
private
|
9
14
|
|
10
15
|
def serialize_steps(steps)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Flatware
|
2
|
+
class CheckpointHandler
|
3
|
+
def initialize(out, fails_fast)
|
4
|
+
@fail_fast = fails_fast
|
5
|
+
@out = out
|
6
|
+
@checkpoints = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def handle!(checkpoint)
|
10
|
+
@checkpoints << checkpoint
|
11
|
+
if checkpoint.failures? && @fail_fast
|
12
|
+
Fireable::kill # Killing everybody
|
13
|
+
@done = true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def done?
|
18
|
+
@done
|
19
|
+
end
|
20
|
+
|
21
|
+
def summarize
|
22
|
+
steps = @checkpoints.map(&:steps).flatten
|
23
|
+
scenarios = @checkpoints.map(&:scenarios).flatten
|
24
|
+
Summary.new(steps, scenarios, @out).summarize
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/flatware/cli.rb
CHANGED
@@ -15,11 +15,12 @@ module Flatware
|
|
15
15
|
default_task :default
|
16
16
|
worker_option
|
17
17
|
desc "default [FLATWARE_OPTS]", "parallelizes cucumber with default arguments"
|
18
|
-
def default
|
18
|
+
def default(*)
|
19
19
|
invoke :cucumber
|
20
20
|
end
|
21
21
|
|
22
22
|
worker_option
|
23
|
+
method_option 'fail-fast', type: :boolean, default: false, desc: "Abort the run on first failure"
|
23
24
|
desc "[FLATWARE_OPTS] cucumber [CUCUMBER_ARGS]", "parallelizes cucumber with custom arguments"
|
24
25
|
def cucumber(*)
|
25
26
|
Flatware.verbose = options[:log]
|
@@ -34,7 +35,7 @@ module Flatware
|
|
34
35
|
end
|
35
36
|
log "bossman"
|
36
37
|
$0 = 'flatware sink'
|
37
|
-
Sink.start_server jobs
|
38
|
+
Sink.start_server jobs, $stdout, $stderr, options['fail-fast']
|
38
39
|
Process.waitall
|
39
40
|
end
|
40
41
|
|
data/lib/flatware/sink.rb
CHANGED
@@ -12,8 +12,8 @@ module Flatware
|
|
12
12
|
push job
|
13
13
|
end
|
14
14
|
|
15
|
-
def start_server(
|
16
|
-
Server.new(
|
15
|
+
def start_server(*args)
|
16
|
+
Server.new(*args).start
|
17
17
|
end
|
18
18
|
|
19
19
|
def client
|
@@ -22,13 +22,13 @@ module Flatware
|
|
22
22
|
end
|
23
23
|
|
24
24
|
class Server
|
25
|
-
def initialize(jobs, out, error)
|
26
|
-
@jobs, @out, @error = jobs, out, error
|
25
|
+
def initialize(jobs, out=$stdout, error=$stderr, fail_fast=false)
|
26
|
+
@jobs, @out, @error, @fail_fast = jobs, out, error, fail_fast
|
27
27
|
end
|
28
28
|
|
29
29
|
def start
|
30
30
|
trap 'INT' do
|
31
|
-
summarize
|
31
|
+
checkpoint_handler.summarize
|
32
32
|
summarize_remaining
|
33
33
|
exit 1
|
34
34
|
end
|
@@ -37,28 +37,36 @@ module Flatware
|
|
37
37
|
Flatware.close
|
38
38
|
end
|
39
39
|
|
40
|
+
def checkpoint_handler
|
41
|
+
@checkpoint_handler ||= CheckpointHandler.new(out, fail_fast?)
|
42
|
+
end
|
43
|
+
|
40
44
|
def listen
|
41
45
|
until done?
|
42
|
-
|
43
|
-
case
|
46
|
+
result = socket.recv
|
47
|
+
case result
|
44
48
|
when Result
|
45
49
|
print result.progress
|
46
50
|
when Checkpoint
|
47
|
-
|
51
|
+
checkpoint_handler.handle! result
|
48
52
|
when Job
|
49
53
|
completed_jobs << result
|
50
54
|
log "COMPLETED SCENARIO"
|
51
55
|
else
|
52
|
-
log "i don't know that message, bro.",
|
56
|
+
log "i don't know that message, bro.", result
|
53
57
|
end
|
54
58
|
end
|
55
|
-
summarize
|
59
|
+
checkpoint_handler.summarize
|
56
60
|
rescue Error => e
|
57
61
|
raise unless e.message == "Interrupted system call"
|
58
62
|
end
|
59
63
|
|
60
64
|
private
|
61
65
|
|
66
|
+
def fail_fast?
|
67
|
+
@fail_fast
|
68
|
+
end
|
69
|
+
|
62
70
|
attr_reader :out, :jobs
|
63
71
|
|
64
72
|
def print(*args)
|
@@ -69,12 +77,6 @@ module Flatware
|
|
69
77
|
out.puts *args
|
70
78
|
end
|
71
79
|
|
72
|
-
def summarize
|
73
|
-
steps = checkpoints.map(&:steps).flatten
|
74
|
-
scenarios = checkpoints.map(&:scenarios).flatten
|
75
|
-
Summary.new(steps, scenarios, out).summarize
|
76
|
-
end
|
77
|
-
|
78
80
|
def summarize_remaining
|
79
81
|
return if remaining_work.empty?
|
80
82
|
puts
|
@@ -94,17 +96,13 @@ module Flatware
|
|
94
96
|
Flatware::Fireable::kill
|
95
97
|
end
|
96
98
|
|
97
|
-
def checkpoints
|
98
|
-
@checkpoints ||= []
|
99
|
-
end
|
100
|
-
|
101
99
|
def completed_jobs
|
102
100
|
@completed_jobs ||= []
|
103
101
|
end
|
104
102
|
|
105
103
|
def done?
|
106
104
|
log remaining_work
|
107
|
-
remaining_work.empty?
|
105
|
+
remaining_work.empty? || checkpoint_handler.done?
|
108
106
|
end
|
109
107
|
|
110
108
|
def remaining_work
|
data/lib/flatware/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flatware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.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-
|
12
|
+
date: 2013-07-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi-rzmq
|
@@ -48,17 +48,17 @@ dependencies:
|
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ! '>='
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
53
|
+
version: 1.3.0
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
61
|
+
version: 1.3.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: aruba
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +118,7 @@ extra_rdoc_files:
|
|
118
118
|
files:
|
119
119
|
- lib/flatware.rb
|
120
120
|
- lib/flatware/checkpoint.rb
|
121
|
+
- lib/flatware/checkpoint_handler.rb
|
121
122
|
- lib/flatware/cli.rb
|
122
123
|
- lib/flatware/cucumber.rb
|
123
124
|
- lib/flatware/cucumber/formatter.rb
|
@@ -157,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
158
|
version: '0'
|
158
159
|
requirements: []
|
159
160
|
rubyforge_project:
|
160
|
-
rubygems_version: 1.8.
|
161
|
+
rubygems_version: 1.8.23
|
161
162
|
signing_key:
|
162
163
|
specification_version: 3
|
163
164
|
summary: A distributed cucumber runner
|