jcukeforker 0.2.5 → 0.2.6
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.
- checksums.yaml +4 -4
- data/lib/jcukeforker/abstract_listener.rb +0 -24
- data/lib/jcukeforker/logging_listener.rb +1 -1
- data/lib/jcukeforker/runner.rb +5 -4
- data/lib/jcukeforker/status_server.rb +5 -1
- data/lib/jcukeforker/task_manager.rb +6 -0
- data/lib/jcukeforker/version.rb +1 -1
- data/lib/jcukeforker/worker.rb +3 -3
- data/spec/jcukeforker/logging_listener_spec.rb +1 -1
- data/spec/jcukeforker/runner_spec.rb +5 -3
- data/spec/jcukeforker/task_manager_spec.rb +7 -0
- data/spec/jcukeforker/worker_spec.rb +14 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 624cde7fd15fb72fdfa5b749dde6041a09695b27
|
4
|
+
data.tar.gz: eb0d4416fe95194e6547de3e0ead5236002d08db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf21e8272ccb037a6691218e5e21f522d1df072cd5e77ed84505dd72b27afa36102c379b91f4fc6be4cf2b6622199ef556a7afda088d280bcb2a165150ec993b
|
7
|
+
data.tar.gz: 2efb490171b37a3e23b47faef16e530df5b6f30080cea84ffee8367c39c2cc71b34a35f4dd88b7ef9e6a56ede4180dfbcecd3ab346d03e0c82bce07eaf455797
|
@@ -16,39 +16,15 @@ module JCukeForker
|
|
16
16
|
def on_task_finished(worker_path, feature, status)
|
17
17
|
end
|
18
18
|
|
19
|
-
def on_worker_forked(worker)
|
20
|
-
end
|
21
|
-
|
22
19
|
def on_worker_register(worker_path)
|
23
20
|
end
|
24
21
|
|
25
|
-
def on_worker_waiting(worker_path)
|
26
|
-
end
|
27
|
-
|
28
|
-
def on_worker_dead(worker_path)
|
29
|
-
end
|
30
|
-
|
31
22
|
def on_run_interrupted
|
32
23
|
end
|
33
24
|
|
34
25
|
def on_run_finished(failed)
|
35
26
|
end
|
36
27
|
|
37
|
-
def on_display_fetched(server)
|
38
|
-
end
|
39
|
-
|
40
|
-
def on_display_released(server)
|
41
|
-
end
|
42
|
-
|
43
|
-
def on_display_starting(worker_path, display)
|
44
|
-
end
|
45
|
-
|
46
|
-
def on_display_stopping(worker_path, display)
|
47
|
-
end
|
48
|
-
|
49
|
-
def on_eta(time, remaining, finished)
|
50
|
-
end
|
51
|
-
|
52
28
|
def update(meth, *args)
|
53
29
|
__send__(meth, *args)
|
54
30
|
end
|
data/lib/jcukeforker/runner.rb
CHANGED
@@ -76,9 +76,9 @@ module JCukeForker
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
processes = create_processes(max, port, worker_dir, vnc_pool, opts[:record])
|
79
|
+
processes = create_processes(max, status_server.port, worker_dir, vnc_pool, opts[:record])
|
80
80
|
|
81
|
-
runner = Runner.new status_server, processes, worker_dir, vnc_pool, delay
|
81
|
+
runner = Runner.new status_server, processes, worker_dir, vnc_pool, delay, task_manager
|
82
82
|
|
83
83
|
listeners.each { |l|
|
84
84
|
status_server.add_observer l
|
@@ -88,12 +88,13 @@ module JCukeForker
|
|
88
88
|
runner
|
89
89
|
end
|
90
90
|
|
91
|
-
def initialize(status_server, processes, worker_dir, vnc_pool, delay)
|
91
|
+
def initialize(status_server, processes, worker_dir, vnc_pool, delay, task_manager)
|
92
92
|
@status_server = status_server
|
93
93
|
@processes = processes
|
94
94
|
@worker_dir = worker_dir
|
95
95
|
@vnc_pool = vnc_pool
|
96
96
|
@delay = delay
|
97
|
+
@task_manager = task_manager
|
97
98
|
end
|
98
99
|
|
99
100
|
def run
|
@@ -151,7 +152,7 @@ module JCukeForker
|
|
151
152
|
ensure # catch potential second Interrupt
|
152
153
|
@vnc_pool.stop if @vnc_pool
|
153
154
|
FileUtils.rm_r @worker_dir
|
154
|
-
|
155
|
+
fire :on_run_finished, @task_manager.has_failures?
|
155
156
|
end
|
156
157
|
|
157
158
|
def fire(*args)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'socket'
|
1
2
|
|
2
3
|
module JCukeForker
|
3
4
|
class StatusServer
|
@@ -5,9 +6,12 @@ module JCukeForker
|
|
5
6
|
include Celluloid::IO
|
6
7
|
|
7
8
|
finalizer :shutdown
|
9
|
+
attr_reader :port
|
8
10
|
|
9
11
|
def initialize(port = '6333')
|
10
|
-
|
12
|
+
server = ::TCPServer.new 'localhost', port
|
13
|
+
@port = server.connect_address.ip_port
|
14
|
+
@server = TCPServer.from_ruby_server server
|
11
15
|
end
|
12
16
|
|
13
17
|
def run
|
@@ -6,6 +6,7 @@ module JCukeForker
|
|
6
6
|
@features = features
|
7
7
|
@opts = opts
|
8
8
|
@worker_sockets = {}
|
9
|
+
@failures = false
|
9
10
|
end
|
10
11
|
|
11
12
|
def on_worker_register(worker_path)
|
@@ -14,6 +15,7 @@ module JCukeForker
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def on_task_finished(worker_path, feature, status)
|
18
|
+
@failures = @failures || !status
|
17
19
|
pop_task worker_path
|
18
20
|
end
|
19
21
|
|
@@ -26,6 +28,10 @@ module JCukeForker
|
|
26
28
|
@worker_sockets.each {|k, v| v.close}
|
27
29
|
end
|
28
30
|
|
31
|
+
def has_failures?
|
32
|
+
@failures
|
33
|
+
end
|
34
|
+
|
29
35
|
private
|
30
36
|
|
31
37
|
def pop_task(worker_path)
|
data/lib/jcukeforker/version.rb
CHANGED
data/lib/jcukeforker/worker.rb
CHANGED
@@ -69,7 +69,8 @@ module JCukeForker
|
|
69
69
|
@status.nil? || !@status
|
70
70
|
end
|
71
71
|
|
72
|
-
def output
|
72
|
+
def output(format = nil)
|
73
|
+
format = @format if format.nil?
|
73
74
|
File.join out, "#{basename}.#{format}"
|
74
75
|
end
|
75
76
|
|
@@ -82,10 +83,9 @@ module JCukeForker
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def args
|
85
|
-
args = %W[--format #{
|
86
|
+
args = Array(format).flat_map { |f| %W[--format #{f} --out #{output(f)}] }
|
86
87
|
args += @extra_args
|
87
88
|
args << feature
|
88
|
-
|
89
89
|
args
|
90
90
|
end
|
91
91
|
|
@@ -36,7 +36,7 @@ I, [#{timestamp}] INFO -- : [ worker 15 ] failed : foo/baz
|
|
36
36
|
I, [#{timestamp}] INFO -- : [ worker 1 ] dead : /tmp/12sd3-1
|
37
37
|
I, [#{timestamp}] INFO -- : [ worker 15 ] dead : /tmp/12sd3-15
|
38
38
|
I, [#{timestamp}] INFO -- : [ run ] interrupted - please wait
|
39
|
-
I, [#{timestamp}] INFO -- : [ run ] finished,
|
39
|
+
I, [#{timestamp}] INFO -- : [ run ] finished, passed
|
40
40
|
OUTPUT
|
41
41
|
end
|
42
42
|
end # Worker
|
@@ -15,8 +15,8 @@ module JCukeForker
|
|
15
15
|
features = %w[a b]
|
16
16
|
delay = 1
|
17
17
|
|
18
|
-
mock_task_manager = double(TaskManager, :update => nil)
|
19
|
-
mock_status_server = double(StatusServer)
|
18
|
+
mock_task_manager = double(TaskManager, :update => nil, :has_failures? => false)
|
19
|
+
mock_status_server = double(StatusServer, :port => nil)
|
20
20
|
mock_tasks = Array.new(2) { |n| double("Worker-#{n}") }
|
21
21
|
|
22
22
|
TaskManager.should_receive(:new).with(features, {format: format, out: out, extra_args: []}).and_return mock_task_manager
|
@@ -52,7 +52,9 @@ module JCukeForker
|
|
52
52
|
let(:process) { double(ChildProcess, :start => nil, :wait => nil) }
|
53
53
|
let(:work_dir) { '/tmp/jcukeforker-testdir' }
|
54
54
|
let(:vnc_pool) { double(VncTools::ServerPool, :stop => nil) }
|
55
|
-
let(:
|
55
|
+
let(:mock_task_manager) { double(TaskManager, :update => nil, :has_failures? => false) }
|
56
|
+
let(:runner) { Runner.new(status_server, [process], work_dir, vnc_pool, 0, mock_task_manager) }
|
57
|
+
|
56
58
|
|
57
59
|
it "processes the queue" do
|
58
60
|
runner.add_observer listener
|
@@ -41,5 +41,12 @@ module JCukeForker
|
|
41
41
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
42
42
|
task_manager.on_task_finished worker_path, nil, nil
|
43
43
|
end
|
44
|
+
|
45
|
+
it "can detect failure" do
|
46
|
+
task_manager = TaskManager.new []
|
47
|
+
def task_manager.pop_task(*args); end
|
48
|
+
task_manager.on_task_finished worker_path, feature, false
|
49
|
+
task_manager.has_failures?.should == true
|
50
|
+
end
|
44
51
|
end
|
45
52
|
end
|
@@ -23,5 +23,19 @@ module JCukeForker
|
|
23
23
|
|
24
24
|
worker.register
|
25
25
|
end
|
26
|
+
|
27
|
+
context "running a scenario with multiple report formats" do
|
28
|
+
formats = [ :json, :junit ]
|
29
|
+
path = "some/path"
|
30
|
+
|
31
|
+
it "has an output file for each format specified" do
|
32
|
+
json_str = {'format' => formats, 'feature' => 'some/feature:51', 'extra_args' => [], 'out' => path}.to_json
|
33
|
+
worker.send :set_state, json_str
|
34
|
+
expected_args = formats.flat_map do |f|
|
35
|
+
%W[--format #{f} --out #{path}/some_feature_51.#{f}]
|
36
|
+
end
|
37
|
+
worker.args.each_cons(expected_args.size).include?(expected_args).should be_true
|
38
|
+
end
|
39
|
+
end
|
26
40
|
end
|
27
41
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jcukeforker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Gowan
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|