jcukeforker 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.mdown +1 -1
- data/lib/jcukeforker/logging_listener.rb +2 -2
- data/lib/jcukeforker/recording_vnc_listener.rb +5 -5
- data/lib/jcukeforker/runner.rb +14 -7
- data/lib/jcukeforker/version.rb +1 -1
- data/lib/jcukeforker/worker.rb +7 -7
- data/lib/jcukeforker.rb +4 -0
- data/spec/jcukeforker/logging_listener_spec.rb +8 -5
- data/spec/jcukeforker/recording_vnc_listener_spec.rb +2 -3
- 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: 16336863494d6a228e277b0a66de9bcca02a1527
|
4
|
+
data.tar.gz: dba852dd02f74272edd6f4c645e21ff1906ec2b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65c45703a692fd01c9b0a64985bb3ffd821f94a730dea820075fed343df2afa0e649e91d9fffb3df9f2674914be1d6f7b81b8d0dc0f401f0fc165b330f9a6ae1
|
7
|
+
data.tar.gz: 7fd90ad2eaa840999db8557bf50d890429dfe151c4b8fadfc05c8802d7e4389e73a7ad5911f73d9ef1d2e539504ff89dc82aef9f6b2b844d3a6de881fb512490
|
data/README.mdown
CHANGED
@@ -24,7 +24,7 @@ to avoid this.
|
|
24
24
|
|
25
25
|
# parallelize per scenario, with one JUnit XML file per scenario.
|
26
26
|
JCukeForker::Runner.run JCukeForker::Scenarios.tagged(%W[@edition ~@wip])
|
27
|
-
:extra_args => %W[-f
|
27
|
+
:extra_args => %W[-f JCukeForker::Formatters::JunitScenarioFormatter --out results/junit]
|
28
28
|
```
|
29
29
|
|
30
30
|
Note on Patches/Pull Requests
|
@@ -5,7 +5,7 @@ module JCukeForker
|
|
5
5
|
attr_reader :output
|
6
6
|
|
7
7
|
def initialize(worker, opts = {})
|
8
|
-
@ext = opts[
|
8
|
+
@ext = opts['ext'] || "webm"
|
9
9
|
@options = opts
|
10
10
|
@worker = worker
|
11
11
|
|
@@ -23,7 +23,7 @@ module JCukeForker
|
|
23
23
|
raise 'ffmpeg failed'
|
24
24
|
end
|
25
25
|
|
26
|
-
|
26
|
+
if status
|
27
27
|
FileUtils.rm_rf output
|
28
28
|
end
|
29
29
|
|
@@ -46,10 +46,10 @@ module JCukeForker
|
|
46
46
|
'-an',
|
47
47
|
'-y',
|
48
48
|
'-f', 'x11grab',
|
49
|
-
'-r', @options[
|
50
|
-
'-s', @options[
|
49
|
+
'-r', @options['frame_rate'] || '5',
|
50
|
+
'-s', @options['frame_size'] || '1024x768',
|
51
51
|
'-i', ENV['DISPLAY'],
|
52
|
-
'-vcodec', @options[
|
52
|
+
'-vcodec', @options['codec'] || 'vp8',
|
53
53
|
@output
|
54
54
|
)
|
55
55
|
process.io.stdout = process.io.stderr = File.open('/dev/null', 'w')
|
data/lib/jcukeforker/runner.rb
CHANGED
@@ -19,7 +19,8 @@ module JCukeForker
|
|
19
19
|
# :format => Symbol format passed to `cucumber --format` (default: html)
|
20
20
|
# :extra_args => Array extra arguments passed to cucumber
|
21
21
|
# :delay => Numeric seconds to sleep between each worker is started (default: 0)
|
22
|
-
#
|
22
|
+
# :port => String port that the event server runs on
|
23
|
+
# (default: 6333)
|
23
24
|
|
24
25
|
class Runner
|
25
26
|
include Observable
|
@@ -32,7 +33,8 @@ module JCukeForker
|
|
32
33
|
:out => Dir.pwd,
|
33
34
|
:log => true,
|
34
35
|
:format => :html,
|
35
|
-
:delay => 0
|
36
|
+
:delay => 0,
|
37
|
+
:port => '6333'
|
36
38
|
}
|
37
39
|
|
38
40
|
def self.run(features, opts = {})
|
@@ -48,6 +50,7 @@ module JCukeForker
|
|
48
50
|
listeners = Array(opts[:notify])
|
49
51
|
extra_args = Array(opts[:extra_args])
|
50
52
|
delay = opts[:delay]
|
53
|
+
port = opts[:port]
|
51
54
|
|
52
55
|
if opts[:log]
|
53
56
|
listeners << LoggingListener.new
|
@@ -59,7 +62,7 @@ module JCukeForker
|
|
59
62
|
end
|
60
63
|
|
61
64
|
listeners << task_manager
|
62
|
-
status_server = StatusServer.new
|
65
|
+
status_server = StatusServer.new port
|
63
66
|
worker_dir = "/tmp/jcukeforker-#{SecureRandom.hex 4}"
|
64
67
|
FileUtils.mkdir_p worker_dir
|
65
68
|
|
@@ -74,7 +77,7 @@ module JCukeForker
|
|
74
77
|
end
|
75
78
|
end
|
76
79
|
|
77
|
-
processes = create_processes(max,
|
80
|
+
processes = create_processes(max, port, worker_dir, vnc_pool, opts[:record])
|
78
81
|
|
79
82
|
runner = Runner.new status_server, processes, worker_dir, vnc_pool, delay
|
80
83
|
|
@@ -101,7 +104,8 @@ module JCukeForker
|
|
101
104
|
rescue Interrupt
|
102
105
|
fire :on_run_interrupted
|
103
106
|
stop
|
104
|
-
rescue StandardError
|
107
|
+
rescue StandardError => e
|
108
|
+
$stderr.puts e.backtrace
|
105
109
|
fire :on_run_interrupted
|
106
110
|
stop
|
107
111
|
raise
|
@@ -115,8 +119,11 @@ module JCukeForker
|
|
115
119
|
(1..max).inject([]) do |l, i|
|
116
120
|
process_args = %W[ruby #{worker_file} #{status_path} #{worker_dir}/worker-#{i}]
|
117
121
|
if vnc_pool && record
|
118
|
-
|
119
|
-
|
122
|
+
if record.kind_of? Hash
|
123
|
+
process_args << record.to_json
|
124
|
+
else
|
125
|
+
process_args << {}.to_json
|
126
|
+
end
|
120
127
|
end
|
121
128
|
process = ChildProcess.build(*process_args)
|
122
129
|
process.environment['DISPLAY'] = vnc_pool.get.display if vnc_pool
|
data/lib/jcukeforker/version.rb
CHANGED
data/lib/jcukeforker/worker.rb
CHANGED
@@ -7,18 +7,20 @@ require 'observer'
|
|
7
7
|
require 'childprocess'
|
8
8
|
require_relative './abstract_listener'
|
9
9
|
require_relative './recording_vnc_listener'
|
10
|
+
require_relative './formatters/scenario_line_logger'
|
11
|
+
require_relative './formatters/junit_scenario_formatter'
|
10
12
|
|
11
13
|
module JCukeForker
|
12
14
|
class Worker
|
13
15
|
include Observable
|
14
16
|
|
15
|
-
attr_reader :feature, :format, :out
|
17
|
+
attr_reader :feature, :format, :out, :basename
|
16
18
|
|
17
19
|
def initialize(status_path, task_path, recorder = nil)
|
18
20
|
@status_path = status_path
|
19
21
|
@task_path = task_path
|
20
22
|
if ENV['DISPLAY'] && recorder
|
21
|
-
config =
|
23
|
+
config = JSON.parse(recorder)
|
22
24
|
add_observer JCukeForker::RecordingVncListener.new(self, config)
|
23
25
|
end
|
24
26
|
@status_socket = TCPSocket.new 'localhost', status_path
|
@@ -64,7 +66,7 @@ module JCukeForker
|
|
64
66
|
end
|
65
67
|
|
66
68
|
def failed?
|
67
|
-
@status.nil? ||
|
69
|
+
@status.nil? || !@status
|
68
70
|
end
|
69
71
|
|
70
72
|
def output
|
@@ -79,10 +81,6 @@ module JCukeForker
|
|
79
81
|
File.join out, "#{basename}.stderr"
|
80
82
|
end
|
81
83
|
|
82
|
-
def basename
|
83
|
-
@basename ||= feature.gsub(/\W/, '_')
|
84
|
-
end
|
85
|
-
|
86
84
|
def args
|
87
85
|
args = %W[--format #{format} --out #{output}]
|
88
86
|
args += @extra_args
|
@@ -94,11 +92,13 @@ module JCukeForker
|
|
94
92
|
private
|
95
93
|
|
96
94
|
def set_state(raw_message)
|
95
|
+
@status = nil
|
97
96
|
json_obj = JSON.parse raw_message
|
98
97
|
@format = json_obj['format']
|
99
98
|
@feature = json_obj['feature']
|
100
99
|
@extra_args = json_obj['extra_args']
|
101
100
|
@out = json_obj['out']
|
101
|
+
@basename = feature.gsub(/\W/, '_')
|
102
102
|
end
|
103
103
|
|
104
104
|
def execute_cucumber
|
data/lib/jcukeforker.rb
CHANGED
@@ -25,19 +25,22 @@ module JCukeForker
|
|
25
25
|
|
26
26
|
timestamp = Time.now.strftime("%Y-%m-%d %H:%M:%S##{Process.pid}")
|
27
27
|
|
28
|
-
|
28
|
+
str = <<-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 ] failed : foo/bar
|
35
|
+
I, [#{timestamp}] INFO -- : [ worker 15 ] passed : 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,
|
40
|
-
|
39
|
+
I, [#{timestamp}] INFO -- : [ run ] finished, failed
|
40
|
+
OUTPUT
|
41
|
+
|
42
|
+
puts str
|
43
|
+
stdout.string.should == str
|
41
44
|
end
|
42
45
|
end # Worker
|
43
46
|
end # CukeForker
|
@@ -50,15 +50,14 @@ module JCukeForker
|
|
50
50
|
recorder.stub(:stop)
|
51
51
|
listener.instance_variable_set(:@recorder, recorder)
|
52
52
|
|
53
|
-
worker.should_receive(:failed?).and_return(false)
|
54
53
|
listener.should_receive(:output).and_return("./foo.mp4")
|
55
54
|
FileUtils.should_receive(:rm_rf).with("./foo.mp4")
|
56
55
|
|
57
|
-
listener.on_task_finished worker, nil,
|
56
|
+
listener.on_task_finished worker, nil, true
|
58
57
|
end
|
59
58
|
|
60
59
|
it "passes along options to recorder" do
|
61
|
-
listener = RecordingVncListener.new worker,
|
60
|
+
listener = RecordingVncListener.new worker, 'codec' => "flv", 'ext' => 'flv'
|
62
61
|
env = ENV['DISPLAY']
|
63
62
|
ENV['DISPLAY']= ':1'
|
64
63
|
ChildProcess.should_receive(:build).with(
|
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.3
|
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-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: cucumber
|