jcukeforker 0.2.9 → 0.2.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/jcukeforker.gemspec +2 -3
- data/lib/jcukeforker/runner.rb +1 -1
- data/lib/jcukeforker/status_server.rb +14 -7
- data/lib/jcukeforker/task_manager.rb +7 -4
- data/lib/jcukeforker/version.rb +1 -1
- data/lib/jcukeforker.rb +1 -6
- data/spec/jcukeforker/runner_spec.rb +1 -2
- data/spec/jcukeforker/status_server_spec.rb +0 -1
- data/spec/jcukeforker/task_manager_spec.rb +4 -4
- data/spec/jcukeforker/worker_spec.rb +1 -1
- metadata +9 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8dd7b0bab63b0a31ff939c6d804000f387beab5b
|
4
|
+
data.tar.gz: 055701eb73582facab03d86e85876d39f3256a4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dc47ae20ae4366c34fb3f31d16cff0d2f322d782e2aa474bcfff6c2af6fb4f38afa3a67480d5a70f15bea3645cf1ef55ddd6f07c448f5a6baaaae80d3ffd92c
|
7
|
+
data.tar.gz: 6abf7baa8bf13fb1d030e4b5495199acaeb8909847e06cf2fe2edc9f9d39a4107e127a1ea10d51a8f41a84e064291f2947df211bd98f97e003b114ff9f687b35
|
data/jcukeforker.gemspec
CHANGED
@@ -16,11 +16,10 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.add_dependency "cucumber", ">= 1.1.5", "< 2.0"
|
18
18
|
s.add_dependency "vnctools", ">= 0.1.1"
|
19
|
-
s.add_dependency "celluloid-io", ">= 0.15.0"
|
20
19
|
s.add_dependency "childprocess", ">= 0.5.3"
|
21
|
-
s.add_development_dependency "rspec"
|
20
|
+
s.add_development_dependency "rspec"
|
22
21
|
s.add_development_dependency "coveralls"
|
23
|
-
s.add_development_dependency "rake", "~>
|
22
|
+
s.add_development_dependency "rake", "~> 10"
|
24
23
|
|
25
24
|
s.files = `git ls-files`.split("\n")
|
26
25
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
data/lib/jcukeforker/runner.rb
CHANGED
@@ -3,23 +3,30 @@ require 'socket'
|
|
3
3
|
module JCukeForker
|
4
4
|
class StatusServer
|
5
5
|
include Observable
|
6
|
-
include Celluloid::IO
|
7
6
|
|
8
|
-
finalizer :shutdown
|
9
7
|
attr_reader :port
|
10
8
|
|
11
9
|
def initialize(port = '6333')
|
12
|
-
server = ::TCPServer.new 'localhost', port
|
13
|
-
@port = server.connect_address.ip_port
|
14
|
-
@
|
10
|
+
@server = ::TCPServer.new 'localhost', port
|
11
|
+
@port = @server.connect_address.ip_port
|
12
|
+
@thread_pool = []
|
15
13
|
end
|
16
14
|
|
17
15
|
def run
|
18
|
-
|
16
|
+
@master_thread = Thread.new do
|
17
|
+
loop do
|
18
|
+
socket = @server.accept
|
19
|
+
@thread_pool << Thread.new { handle_connection(socket) }
|
20
|
+
end
|
21
|
+
end
|
19
22
|
end
|
20
23
|
|
21
24
|
def shutdown
|
22
|
-
|
25
|
+
if @server
|
26
|
+
@server.close
|
27
|
+
@master_thread.terminate
|
28
|
+
@thread_pool.each(&:terminate)
|
29
|
+
end
|
23
30
|
end
|
24
31
|
|
25
32
|
def handle_connection(socket)
|
@@ -7,6 +7,7 @@ module JCukeForker
|
|
7
7
|
@opts = opts
|
8
8
|
@worker_sockets = {}
|
9
9
|
@failures = false
|
10
|
+
@mutex = Mutex.new
|
10
11
|
end
|
11
12
|
|
12
13
|
def on_worker_register(worker_path)
|
@@ -35,10 +36,12 @@ module JCukeForker
|
|
35
36
|
private
|
36
37
|
|
37
38
|
def pop_task(worker_path)
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
task = '__KILL__'
|
40
|
+
@mutex.synchronize do
|
41
|
+
if feature = @features.shift
|
42
|
+
task = @opts.merge(feature: feature).to_json
|
43
|
+
end
|
44
|
+
end
|
42
45
|
|
43
46
|
@worker_sockets[worker_path].puts(task)
|
44
47
|
end
|
data/lib/jcukeforker/version.rb
CHANGED
data/lib/jcukeforker.rb
CHANGED
@@ -11,12 +11,7 @@ require "forwardable"
|
|
11
11
|
require "ostruct"
|
12
12
|
require "json"
|
13
13
|
require "securerandom"
|
14
|
-
require "
|
15
|
-
require "celluloid/autostart"
|
16
|
-
|
17
|
-
unless ENV['DEBUG']
|
18
|
-
Celluloid.logger = Logger.new('/dev/null')
|
19
|
-
end
|
14
|
+
require "thread"
|
20
15
|
|
21
16
|
module JCukeForker
|
22
17
|
end
|
@@ -47,8 +47,7 @@ module JCukeForker
|
|
47
47
|
context "running" do
|
48
48
|
let(:listener) { double(AbstractListener, :update => nil) }
|
49
49
|
let(:queue) { double(Queue, :has_failures? => false) }
|
50
|
-
let(:
|
51
|
-
let(:status_server) { double(StatusServer, :async => status_server0, :shutdown => nil) }
|
50
|
+
let(:status_server) { double(StatusServer, :run => nil, :shutdown => nil) }
|
52
51
|
let(:process) { double(ChildProcess, :start => nil, :wait => nil) }
|
53
52
|
let(:work_dir) { '/tmp/jcukeforker-testdir' }
|
54
53
|
let(:vnc_pool) { double(VncTools::ServerPool, :stop => nil) }
|
@@ -9,7 +9,7 @@ module JCukeForker
|
|
9
9
|
it "can register a worker" do
|
10
10
|
|
11
11
|
UNIXSocket.stub(:open).and_return(mock_socket)
|
12
|
-
|
12
|
+
mock_socket.should_receive(:puts).with({feature: feature}.to_json)
|
13
13
|
|
14
14
|
task_manager = TaskManager.new [feature]
|
15
15
|
task_manager.on_worker_register worker_path
|
@@ -17,7 +17,7 @@ module JCukeForker
|
|
17
17
|
|
18
18
|
it "can finish task" do
|
19
19
|
|
20
|
-
|
20
|
+
mock_socket.should_receive(:puts).with({feature: feature}.to_json)
|
21
21
|
|
22
22
|
task_manager = TaskManager.new [feature]
|
23
23
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
@@ -26,7 +26,7 @@ module JCukeForker
|
|
26
26
|
|
27
27
|
it "can close dead worker" do
|
28
28
|
|
29
|
-
|
29
|
+
mock_socket.should_receive(:close)
|
30
30
|
|
31
31
|
task_manager = TaskManager.new [feature]
|
32
32
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
@@ -35,7 +35,7 @@ module JCukeForker
|
|
35
35
|
|
36
36
|
it "can send '__KILL__' when there are no tasks left" do
|
37
37
|
|
38
|
-
|
38
|
+
mock_socket.should_receive(:puts).with('__KILL__')
|
39
39
|
|
40
40
|
task_manager = TaskManager.new []
|
41
41
|
task_manager.instance_variable_get(:@worker_sockets)[worker_path] = mock_socket
|
@@ -34,7 +34,7 @@ module JCukeForker
|
|
34
34
|
expected_args = formats.flat_map do |f|
|
35
35
|
%W[--format #{f} --out #{path}/some_feature_51.#{f}]
|
36
36
|
end
|
37
|
-
|
37
|
+
worker.args.each_cons(expected_args.size).include?(expected_args).should be true
|
38
38
|
end
|
39
39
|
end
|
40
40
|
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.10
|
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:
|
12
|
+
date: 2016-02-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|
@@ -45,20 +45,6 @@ dependencies:
|
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 0.1.1
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: celluloid-io
|
50
|
-
requirement: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.15.0
|
55
|
-
type: :runtime
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.15.0
|
62
48
|
- !ruby/object:Gem::Dependency
|
63
49
|
name: childprocess
|
64
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,16 +63,16 @@ dependencies:
|
|
77
63
|
name: rspec
|
78
64
|
requirement: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
|
-
- -
|
66
|
+
- - ">="
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
68
|
+
version: '0'
|
83
69
|
type: :development
|
84
70
|
prerelease: false
|
85
71
|
version_requirements: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
|
-
- -
|
73
|
+
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '0'
|
90
76
|
- !ruby/object:Gem::Dependency
|
91
77
|
name: coveralls
|
92
78
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,14 +93,14 @@ dependencies:
|
|
107
93
|
requirements:
|
108
94
|
- - "~>"
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
96
|
+
version: '10'
|
111
97
|
type: :development
|
112
98
|
prerelease: false
|
113
99
|
version_requirements: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - "~>"
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
103
|
+
version: '10'
|
118
104
|
description: Library to maintain a forking queue of Cucumber processes, with optional
|
119
105
|
VNC displays. Designed for JRuby.
|
120
106
|
email:
|
@@ -175,7 +161,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
161
|
version: '0'
|
176
162
|
requirements: []
|
177
163
|
rubyforge_project: jcukeforker
|
178
|
-
rubygems_version: 2.4.5
|
164
|
+
rubygems_version: 2.4.5
|
179
165
|
signing_key:
|
180
166
|
specification_version: 4
|
181
167
|
summary: Library to maintain a forking queue of Cucumber processes, for JRuby
|