jcukeforker 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2c4cda725d6eb45cd43a193c68ac23c7f245cc8
4
- data.tar.gz: fd1a942fa132ed08c30975fe0001ce7322824a7c
3
+ metadata.gz: 624cde7fd15fb72fdfa5b749dde6041a09695b27
4
+ data.tar.gz: eb0d4416fe95194e6547de3e0ead5236002d08db
5
5
  SHA512:
6
- metadata.gz: bbb19abf494360c1180b761ef264e26da1fe9224efdef272c970b77a509e026f4b7d9dda94824990bc696e3d76f43623ceb90b086cd8e0a570550b6488b75fc7
7
- data.tar.gz: 7edb4699f193706c4d84df8829b066ae7be0a9d51dedf04d871756a198394c20f7d09546efe58c4e2ecdff6e0d5c10b9953f8cbb490b222d96937b4b23fc264f
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
@@ -29,7 +29,7 @@ module JCukeForker
29
29
  end
30
30
 
31
31
  def on_run_finished(failed)
32
- log.info "[ run ] finished, #{status_string failed}"
32
+ log.info "[ run ] finished, #{status_string !failed}"
33
33
  end
34
34
 
35
35
  def on_run_interrupted
@@ -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
- #fire :on_run_finished, @queue.has_failures?
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
- @server = TCPServer.new 'localhost', port
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)
@@ -1,3 +1,3 @@
1
1
  module JCukeForker
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -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 #{format} --out #{output}]
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, failed
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(:runner) { Runner.new(status_server, [process], work_dir, vnc_pool, 0) }
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.5
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-08-16 00:00:00.000000000 Z
12
+ date: 2014-09-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cucumber