jcukeforker 0.2.4 → 0.2.5
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/README.mdown +1 -1
- data/bin/{cukeforker → jcukeforker} +2 -2
- data/lib/jcukeforker/runner.rb +3 -4
- data/lib/jcukeforker/task_manager.rb +7 -8
- data/lib/jcukeforker/version.rb +1 -1
- data/lib/jcukeforker/worker_script.rb +1 -1
- data/spec/jcukeforker/logging_listener_spec.rb +7 -10
- data/spec/jcukeforker/runner_spec.rb +1 -4
- data/spec/jcukeforker/task_manager_spec.rb +7 -10
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2c4cda725d6eb45cd43a193c68ac23c7f245cc8
|
4
|
+
data.tar.gz: fd1a942fa132ed08c30975fe0001ce7322824a7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbb19abf494360c1180b761ef264e26da1fe9224efdef272c970b77a509e026f4b7d9dda94824990bc696e3d76f43623ceb90b086cd8e0a570550b6488b75fc7
|
7
|
+
data.tar.gz: 7edb4699f193706c4d84df8829b066ae7be0a9d51dedf04d871756a198394c20f7d09546efe58c4e2ecdff6e0d5c10b9953f8cbb490b222d96937b4b23fc264f
|
data/README.mdown
CHANGED
@@ -31,7 +31,7 @@ to avoid this.
|
|
31
31
|
# setup with vncserver and screen recording
|
32
32
|
JCukeForker::Runner.run Dir['features/**/*.feature'],
|
33
33
|
:vnc => %W[-geometry 1280x1024 -depth 24 -dpi 96]
|
34
|
-
:
|
34
|
+
:record => {:ext => 'mp4', :codec => 'mpeg4', :frame_size => '1280x1024', :frame_rate => '5'}
|
35
35
|
```
|
36
36
|
|
37
37
|
Note on Patches/Pull Requests
|
@@ -1,9 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'jcukeforker'
|
4
4
|
|
5
5
|
split = ARGV.index("--")
|
6
6
|
extra_args = ARGV[0..(split-1)]
|
7
7
|
features = ARGV[(split+1)..-1]
|
8
8
|
|
9
|
-
|
9
|
+
JCukeForker::Runner.run(features, :extra_args => extra_args)
|
data/lib/jcukeforker/runner.rb
CHANGED
@@ -45,6 +45,7 @@ module JCukeForker
|
|
45
45
|
opts = DEFAULT_OPTIONS.dup.merge(opts)
|
46
46
|
|
47
47
|
max = opts[:max]
|
48
|
+
raise ':max must be >= 1' if max < 1
|
48
49
|
format = opts[:format]
|
49
50
|
out = File.join opts[:out]
|
50
51
|
listeners = Array(opts[:notify])
|
@@ -56,10 +57,8 @@ module JCukeForker
|
|
56
57
|
listeners << LoggingListener.new
|
57
58
|
end
|
58
59
|
|
59
|
-
|
60
|
-
|
61
|
-
task_manager.add({feature: feature, format: format,out: out,extra_args: extra_args})
|
62
|
-
end
|
60
|
+
task_opts = {format: format,out: out,extra_args: extra_args}
|
61
|
+
task_manager = TaskManager.new features, task_opts
|
63
62
|
|
64
63
|
listeners << task_manager
|
65
64
|
status_server = StatusServer.new port
|
@@ -2,15 +2,12 @@
|
|
2
2
|
module JCukeForker
|
3
3
|
class TaskManager < AbstractListener
|
4
4
|
|
5
|
-
def initialize()
|
6
|
-
@
|
5
|
+
def initialize(features, opts={})
|
6
|
+
@features = features
|
7
|
+
@opts = opts
|
7
8
|
@worker_sockets = {}
|
8
9
|
end
|
9
10
|
|
10
|
-
def add(task)
|
11
|
-
@tasks << task
|
12
|
-
end
|
13
|
-
|
14
11
|
def on_worker_register(worker_path)
|
15
12
|
@worker_sockets[worker_path] = UNIXSocket.open worker_path
|
16
13
|
pop_task worker_path
|
@@ -32,8 +29,10 @@ module JCukeForker
|
|
32
29
|
private
|
33
30
|
|
34
31
|
def pop_task(worker_path)
|
35
|
-
task =
|
36
|
-
|
32
|
+
task = '__KILL__'
|
33
|
+
if feature = @features.shift
|
34
|
+
task = @opts.merge(feature: feature).to_json
|
35
|
+
end
|
37
36
|
|
38
37
|
@worker_sockets[worker_path].puts(task)
|
39
38
|
end
|
data/lib/jcukeforker/version.rb
CHANGED
@@ -8,15 +8,15 @@ module JCukeForker
|
|
8
8
|
it "logs all events" do
|
9
9
|
Time.stub(:now => Time.now)
|
10
10
|
|
11
|
-
mock_worker = {:path => '/tmp/12sd3-1', :feature => 'foo/bar', :
|
12
|
-
mock_worker2 = {:path => '/tmp/12sd3-15', :feature => 'foo/baz', :
|
11
|
+
mock_worker = {:path => '/tmp/12sd3-1', :feature => 'foo/bar', :status => true }
|
12
|
+
mock_worker2 = {:path => '/tmp/12sd3-15', :feature => 'foo/baz', :status => false}
|
13
13
|
|
14
14
|
listener.on_run_starting
|
15
15
|
listener.on_worker_register mock_worker[:path]
|
16
16
|
listener.on_task_starting mock_worker[:path], mock_worker[:feature]
|
17
17
|
listener.on_worker_register mock_worker2[:path]
|
18
18
|
listener.on_task_starting mock_worker2[:path], mock_worker2[:feature]
|
19
|
-
listener.on_task_finished mock_worker[:path], mock_worker[:feature], mock_worker[:
|
19
|
+
listener.on_task_finished mock_worker[:path], mock_worker[:feature], mock_worker[:status]
|
20
20
|
listener.on_task_finished mock_worker2[:path], mock_worker2[:feature], mock_worker2[:failed?]
|
21
21
|
listener.on_worker_dead mock_worker[:path]
|
22
22
|
listener.on_worker_dead mock_worker2[:path]
|
@@ -25,22 +25,19 @@ module JCukeForker
|
|
25
25
|
|
26
26
|
timestamp = Time.now.strftime("%Y-%m-%d %H:%M:%S##{Process.pid}")
|
27
27
|
|
28
|
-
|
28
|
+
stdout.string.should == <<-OUTPUT
|
29
29
|
I, [#{timestamp}] INFO -- : [ run ] starting
|
30
30
|
I, [#{timestamp}] INFO -- : [ worker 1 ] register: /tmp/12sd3-1
|
31
31
|
I, [#{timestamp}] INFO -- : [ worker 1 ] starting: foo/bar
|
32
32
|
I, [#{timestamp}] INFO -- : [ worker 15 ] register: /tmp/12sd3-15
|
33
33
|
I, [#{timestamp}] INFO -- : [ worker 15 ] starting: foo/baz
|
34
|
-
I, [#{timestamp}] INFO -- : [ worker 1 ]
|
35
|
-
I, [#{timestamp}] INFO -- : [ worker 15 ]
|
34
|
+
I, [#{timestamp}] INFO -- : [ worker 1 ] passed : foo/bar
|
35
|
+
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
39
|
I, [#{timestamp}] INFO -- : [ run ] finished, failed
|
40
|
-
OUTPUT
|
41
|
-
|
42
|
-
puts str
|
43
|
-
stdout.string.should == str
|
40
|
+
OUTPUT
|
44
41
|
end
|
45
42
|
end # Worker
|
46
43
|
end # CukeForker
|
@@ -19,15 +19,12 @@ module JCukeForker
|
|
19
19
|
mock_status_server = double(StatusServer)
|
20
20
|
mock_tasks = Array.new(2) { |n| double("Worker-#{n}") }
|
21
21
|
|
22
|
-
TaskManager.should_receive(:new).and_return mock_task_manager
|
22
|
+
TaskManager.should_receive(:new).with(features, {format: format, out: out, extra_args: []}).and_return mock_task_manager
|
23
23
|
StatusServer.should_receive(:new).with('6333').and_return mock_status_server
|
24
24
|
|
25
25
|
mock_status_server.should_receive(:add_observer).with listeners.first
|
26
26
|
mock_status_server.should_receive(:add_observer).with mock_task_manager
|
27
27
|
|
28
|
-
mock_task_manager.should_receive(:add).with(feature: features[0], format: format, out: out, extra_args: [])
|
29
|
-
mock_task_manager.should_receive(:add).with(feature: features[1], format: format, out: out, extra_args: [])
|
30
|
-
|
31
28
|
Runner.create(features,
|
32
29
|
:max => max,
|
33
30
|
:notify => listeners,
|
@@ -3,25 +3,23 @@ require File.expand_path("../../spec_helper", __FILE__)
|
|
3
3
|
module JCukeForker
|
4
4
|
describe TaskManager do
|
5
5
|
let(:worker_path) { '/tmp/jcukeforker-test-socket' }
|
6
|
-
let(:
|
6
|
+
let(:feature) { 'feature:1' }
|
7
7
|
let(:mock_socket) { double('socket', :puts => nil) }
|
8
8
|
|
9
9
|
it "can register a worker" do
|
10
10
|
|
11
11
|
UNIXSocket.stub(:open).and_return(mock_socket)
|
12
|
-
expect(mock_socket).to receive(:puts).with(
|
12
|
+
expect(mock_socket).to receive(:puts).with({feature: feature}.to_json)
|
13
13
|
|
14
|
-
task_manager = TaskManager.new
|
15
|
-
task_manager.add task
|
14
|
+
task_manager = TaskManager.new [feature]
|
16
15
|
task_manager.on_worker_register worker_path
|
17
16
|
end
|
18
17
|
|
19
18
|
it "can finish task" do
|
20
19
|
|
21
|
-
expect(mock_socket).to receive(:puts).with(
|
20
|
+
expect(mock_socket).to receive(:puts).with({feature: feature}.to_json)
|
22
21
|
|
23
|
-
task_manager = TaskManager.new
|
24
|
-
task_manager.add task
|
22
|
+
task_manager = TaskManager.new [feature]
|
25
23
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
26
24
|
task_manager.on_task_finished worker_path, nil, nil
|
27
25
|
end
|
@@ -30,8 +28,7 @@ module JCukeForker
|
|
30
28
|
|
31
29
|
expect(mock_socket).to receive(:close)
|
32
30
|
|
33
|
-
task_manager = TaskManager.new
|
34
|
-
task_manager.add task
|
31
|
+
task_manager = TaskManager.new [feature]
|
35
32
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
36
33
|
task_manager.on_worker_dead worker_path
|
37
34
|
end
|
@@ -40,7 +37,7 @@ module JCukeForker
|
|
40
37
|
|
41
38
|
expect(mock_socket).to receive(:puts).with('__KILL__')
|
42
39
|
|
43
|
-
task_manager = TaskManager.new
|
40
|
+
task_manager = TaskManager.new []
|
44
41
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
45
42
|
task_manager.on_task_finished worker_path, nil, nil
|
46
43
|
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.5
|
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-08-
|
12
|
+
date: 2014-08-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
@@ -113,7 +113,7 @@ description: Library to maintain a forking queue of Cucumber processes, with opt
|
|
113
113
|
email:
|
114
114
|
- gowanjason@gmail.com
|
115
115
|
executables:
|
116
|
-
-
|
116
|
+
- jcukeforker
|
117
117
|
extensions: []
|
118
118
|
extra_rdoc_files: []
|
119
119
|
files:
|
@@ -123,7 +123,7 @@ files:
|
|
123
123
|
- LICENSE
|
124
124
|
- README.mdown
|
125
125
|
- Rakefile
|
126
|
-
- bin/
|
126
|
+
- bin/jcukeforker
|
127
127
|
- jcukeforker.gemspec
|
128
128
|
- lib/jcukeforker.rb
|
129
129
|
- lib/jcukeforker/abstract_listener.rb
|