baleen 0.0.2 → 0.0.9
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/Gemfile +2 -1
- data/README.md +50 -9
- data/baleen.gemspec +1 -1
- data/bin/baleen +13 -1
- data/bin/baleen-server +60 -0
- data/lib/baleen.rb +9 -0
- data/lib/baleen/client.rb +8 -11
- data/lib/baleen/error.rb +5 -0
- data/lib/baleen/job.rb +13 -2
- data/lib/baleen/{messages/messages.rb → message/base.rb} +19 -12
- data/lib/baleen/message/message.rb +2 -0
- data/lib/baleen/{messages → message}/request.rb +2 -1
- data/lib/baleen/{messages → message}/response.rb +14 -9
- data/lib/baleen/result_display.rb +47 -0
- data/lib/baleen/runner.rb +21 -6
- data/lib/baleen/server.rb +3 -3
- data/lib/baleen/utils/colored_puts.rb +2 -2
- data/lib/baleen/version.rb +1 -1
- data/poc/config/environments/development.rb +1 -1
- data/poc/config/environments/test.rb +1 -1
- data/poc/features/t1.feature +6 -6
- metadata +11 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abadaf7bacf699bd38b6bc8825b8decd083de9f5
|
4
|
+
data.tar.gz: 8bc97b2c0b3806f1288f736dcc7141fd6a7ce7e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae47b1bff4d6b98b5cfd3def67984d7aac351b680a807b195c24d1135be62b7e1e60551b90a2b9ab6a593c3a1b87615b4a60b4781880ac9d42eacdd106079f75
|
7
|
+
data.tar.gz: 3ead613980c270d3095ba89647391d7a9af188d2edaaebead15ed9c8de08d70f8fe238f41cddb8a662ae68a23ad8aa7e157b9606fdff1334af47ad6c974c2913
|
data/Gemfile
CHANGED
@@ -3,4 +3,5 @@ source 'https://rubygems.org'
|
|
3
3
|
# Specify your gem's dependencies in baleen.gemspec
|
4
4
|
gemspec
|
5
5
|
|
6
|
-
gem 'docker-client', path: File.expand_path("/Users/kimh/git/docker-ruby", __FILE__)
|
6
|
+
#gem 'docker-client', path: File.expand_path("/Users/kimh/git/docker-ruby", __FILE__)
|
7
|
+
#gem 'baleen', path: File.expand_path("/Users/kimh/git/baleen", __FILE__)
|
data/README.md
CHANGED
@@ -1,24 +1,64 @@
|
|
1
1
|
# Baleen
|
2
|
+
Baleen is a test runner powered by Docker and Celluloid::IO.
|
3
|
+
Baleen allows you to run ruby standard tests such as Cucumber or Rspec in totally isolated environment and parallel.
|
2
4
|
|
3
|
-
|
5
|
+
By using Baleen, you can run feature or spec in a dedicated linux container, so test will not affect the state of other tests.
|
6
|
+
Also, Baleen will speed up your tests since multiple containers run their tests in parallel.
|
7
|
+
|
8
|
+
## Requirement
|
9
|
+
Linux machine with Docker installed
|
4
10
|
|
5
11
|
## Installation
|
6
12
|
|
7
|
-
|
13
|
+
TODO
|
8
14
|
|
9
|
-
|
15
|
+
## Usage
|
10
16
|
|
11
|
-
And then execute:
|
12
17
|
|
13
|
-
|
18
|
+
Baleen is server-client model. You need to run baleen-server which talks Docker API to Docker and you can use baleen-client to put your request to the server like below.
|
14
19
|
|
15
|
-
|
20
|
+
$ bundle exec baleen cucumber --image kimh/baleen-poc --files features/ --work_dir /git/baleen/poc --before_command "source /etc/profile"
|
21
|
+
[Summary]
|
22
|
+
Result: Pass
|
23
|
+
Time: 0min 38sec
|
24
|
+
12 containers
|
16
25
|
|
17
|
-
|
26
|
+
[Details]
|
27
|
+
Id: 5a836a088480f557bf79a00b0c6e34b36e8432f53ee8b5231b8983d902ae21d9
|
28
|
+
status code: 0
|
29
|
+
feature file: features/io_bound.feature
|
30
|
+
logs:
|
31
|
+
------------------------------------
|
32
|
+
Rack::File headers parameter replaces cache_control after Rack 1.5.
|
33
|
+
Using the default profile...
|
34
|
+
Feature: Benchmark IO intensive feature
|
35
|
+
|
36
|
+
Scenario: Benchmark for IO bound operation # features/io_bound.feature:2
|
37
|
+
Then io intensive operation # features/step_definitions/fake_test_steps.rb:20
|
38
|
+
|
39
|
+
1 scenario (1 passed)
|
40
|
+
1 step (1 passed)
|
41
|
+
0m1.556s
|
42
|
+
|
43
|
+
Id: 1e25993136553319379a07efd61fbc2b86094151fa25df4da0fc613f8c4fe87c
|
44
|
+
status code: 0
|
45
|
+
feature file: features/io_bound.feature
|
46
|
+
logs:
|
47
|
+
------------------------------------
|
48
|
+
Rack::File headers parameter replaces cache_control after Rack 1.5.
|
49
|
+
Using the default profile...
|
50
|
+
Feature: Benchmark IO intensive feature
|
51
|
+
|
52
|
+
Scenario: Benchmark for IO bound operation # features/io_bound.feature:2
|
53
|
+
Then io intensive operation # features/step_definitions/fake_test_steps.rb:20
|
54
|
+
|
55
|
+
1 scenario (1 passed)
|
56
|
+
1 step (1 passed)
|
57
|
+
0m1.518s
|
58
|
+
|
59
|
+
....snip.....
|
18
60
|
|
19
|
-
## Usage
|
20
61
|
|
21
|
-
TODO: Write usage instructions here
|
22
62
|
|
23
63
|
## Contributing
|
24
64
|
|
@@ -27,3 +67,4 @@ TODO: Write usage instructions here
|
|
27
67
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
68
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
69
|
5. Create new Pull Request
|
70
|
+
|
data/baleen.gemspec
CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Kim, Hirokuni"]
|
10
10
|
spec.email = ["kimh@kvh.co.jp"]
|
11
11
|
spec.description = %q{Ballen allows you to run standard ruby tests in parallel and isolated environment}
|
12
|
-
spec.summary = %q{
|
12
|
+
spec.summary = %q{Container-based parallel test runner powered by Docker}
|
13
13
|
spec.homepage = ""
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
data/bin/baleen
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require "thor"
|
4
|
+
require "baleen"
|
4
5
|
|
5
6
|
class BaleenCommand < Thor
|
6
7
|
|
@@ -9,8 +10,19 @@ class BaleenCommand < Thor
|
|
9
10
|
option :work_dir, :default => "./"
|
10
11
|
option :files, :default => "features"
|
11
12
|
option :before_command, :default => nil
|
13
|
+
option :host, :default => "127.0.0.1"
|
14
|
+
option :port, :default => "5533"
|
12
15
|
def cucumber
|
13
|
-
|
16
|
+
client = Baleen::Client.new(options[:host], options[:port])
|
17
|
+
request = Baleen::Message::Request::Cucumber.new(
|
18
|
+
image: options[:image],
|
19
|
+
work_dir: options[:work_dir],
|
20
|
+
files: options[:files],
|
21
|
+
before_command: options[:before_command],
|
22
|
+
)
|
23
|
+
|
24
|
+
job = Baleen::Job.new(client, request)
|
25
|
+
job.start
|
14
26
|
end
|
15
27
|
end
|
16
28
|
|
data/bin/baleen-server
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "baleen"
|
5
|
+
|
6
|
+
def pid
|
7
|
+
### Use this when implement restart command
|
8
|
+
#pid = `ps ax | grep -E "baleen-server start|restart" | grep -v grep | awk '{print $1}'`
|
9
|
+
pid = `ps ax | grep -E "baleen-server start|restart" | grep -v grep | awk '{print $1}'`
|
10
|
+
pid.split("\n")
|
11
|
+
end
|
12
|
+
|
13
|
+
def running?
|
14
|
+
pid.size >= 1
|
15
|
+
end
|
16
|
+
|
17
|
+
class BaleenServerCli < Thor
|
18
|
+
|
19
|
+
desc "start", "Start Baleen server"
|
20
|
+
option :docker_host, :default => "127.0.0.1"
|
21
|
+
option :docker_port, :default => 4243
|
22
|
+
option :port, :default => 5533
|
23
|
+
option :debug, :type => :boolean
|
24
|
+
def start
|
25
|
+
if pid.size > 1
|
26
|
+
warning "baleen-server is already running"
|
27
|
+
warning "Exiting..."
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
|
31
|
+
docker_host = options[:docker_host]
|
32
|
+
docker_port = options[:docker_port]
|
33
|
+
port = options[:port]
|
34
|
+
debug = options[:debug]
|
35
|
+
|
36
|
+
info "Starting baleen-server..."
|
37
|
+
info " Listening on: #{port}"
|
38
|
+
info " Docker API: http://#{docker_host}:#{docker_port}"
|
39
|
+
|
40
|
+
Process.daemon(true, debug)
|
41
|
+
Baleen::Server.new(docker_host: docker_host, docker_port: docker_port, port: port)
|
42
|
+
|
43
|
+
# Prevent main thread from exiting for Celluloid actors to continue running
|
44
|
+
# See https://github.com/celluloid/celluloid/wiki/Frequently-Asked-Questions
|
45
|
+
sleep
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "stop", "Stop Baleen server"
|
49
|
+
def stop
|
50
|
+
if running?
|
51
|
+
notice "Stopping Baleen server..."
|
52
|
+
`kill -9 #{pid.first}`
|
53
|
+
else
|
54
|
+
notice "baleen-server is not running"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
BaleenServerCli.start
|
data/lib/baleen.rb
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
require "baleen/version"
|
2
2
|
|
3
|
+
require 'baleen/client'
|
4
|
+
require 'baleen/message/message'
|
5
|
+
require 'baleen/task'
|
6
|
+
require 'baleen/job'
|
7
|
+
|
8
|
+
require 'baleen/server'
|
9
|
+
require 'baleen/container'
|
10
|
+
require 'baleen/runner'
|
11
|
+
|
3
12
|
module Baleen
|
4
13
|
# Your code goes here...
|
5
14
|
end
|
data/lib/baleen/client.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'celluloid/io'
|
2
2
|
require 'celluloid/autostart'
|
3
|
+
require 'baleen/utils/colored_puts'
|
3
4
|
|
4
5
|
module Baleen
|
5
6
|
class Client
|
@@ -8,16 +9,18 @@ module Baleen
|
|
8
9
|
|
9
10
|
def initialize(host, port=12345)
|
10
11
|
@socket = TCPSocket.open(host, port)
|
11
|
-
@result = "running"
|
12
|
-
async.response
|
13
12
|
end
|
14
13
|
|
15
14
|
def request(request)
|
16
15
|
@socket.puts(request.to_json)
|
17
16
|
end
|
18
17
|
|
19
|
-
def
|
20
|
-
loop {
|
18
|
+
def wait_response
|
19
|
+
loop {
|
20
|
+
if response = handle_response(@socket.gets)
|
21
|
+
return response
|
22
|
+
end
|
23
|
+
}
|
21
24
|
end
|
22
25
|
|
23
26
|
def close
|
@@ -32,13 +35,7 @@ module Baleen
|
|
32
35
|
raise RuntimeError, 'Connection closed by server'
|
33
36
|
end
|
34
37
|
|
35
|
-
|
36
|
-
@result = Baleen::Message::Decoder.new(response).decode
|
37
|
-
true
|
38
|
-
end
|
39
|
-
|
40
|
-
def result
|
41
|
-
@result
|
38
|
+
Baleen::Message::Decoder.new(response).decode
|
42
39
|
end
|
43
40
|
|
44
41
|
end
|
data/lib/baleen/error.rb
ADDED
data/lib/baleen/job.rb
CHANGED
@@ -1,17 +1,28 @@
|
|
1
|
+
require 'baleen/result_display'
|
2
|
+
|
1
3
|
module Baleen
|
2
4
|
class Job
|
3
5
|
|
4
6
|
def initialize(client, msg)
|
5
7
|
@client = client
|
6
8
|
@msg = msg
|
9
|
+
@response = nil
|
7
10
|
end
|
8
11
|
|
9
12
|
def start
|
13
|
+
start_time = Time.now
|
10
14
|
@client.request(@msg.params)
|
15
|
+
@response = @client.wait_response
|
16
|
+
end_time = Time.now
|
17
|
+
show_results(start_time, end_time)
|
11
18
|
end
|
12
19
|
|
13
|
-
|
14
|
-
|
20
|
+
private
|
21
|
+
|
22
|
+
def show_results(s_time, e_time)
|
23
|
+
display = ResultDisplay.new(@response, start_time: s_time, end_time: e_time)
|
24
|
+
display.summary
|
25
|
+
display.detail
|
15
26
|
end
|
16
27
|
|
17
28
|
end
|
@@ -3,7 +3,17 @@ require "json"
|
|
3
3
|
module Baleen
|
4
4
|
module Message
|
5
5
|
|
6
|
+
def symbolize_keys(hash)
|
7
|
+
hash.inject({}){|new_hash, key_value|
|
8
|
+
key, value = key_value
|
9
|
+
value = symbolize_keys(value) if value.is_a?(Hash)
|
10
|
+
new_hash[key.to_sym] = value
|
11
|
+
new_hash
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
6
15
|
class Decoder
|
16
|
+
include Baleen::Message
|
7
17
|
|
8
18
|
def initialize(json_string)
|
9
19
|
@params = JSON.parse(json_string)
|
@@ -13,27 +23,24 @@ module Baleen
|
|
13
23
|
klass = @params.delete "klass"
|
14
24
|
Object.const_get(klass).new(symbolize_keys(@params))
|
15
25
|
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def symbolize_keys(hash)
|
20
|
-
hash.inject({}){|new_hash, key_value|
|
21
|
-
key, value = key_value
|
22
|
-
value = symbolize_keys(value) if value.is_a?(Hash)
|
23
|
-
new_hash[key.to_sym] = value
|
24
|
-
new_hash
|
25
|
-
}
|
26
|
-
end
|
27
26
|
end
|
28
27
|
|
29
28
|
class Base
|
30
|
-
attr_accessor :json_msg
|
31
29
|
|
32
30
|
def initialize
|
33
31
|
@params = {}
|
34
32
|
@params[:klass] = self.class.to_s
|
35
33
|
end
|
36
34
|
|
35
|
+
def method_missing(name, *args)
|
36
|
+
Base.class_eval{
|
37
|
+
define_method "#{name}" do
|
38
|
+
@params[name.to_sym]
|
39
|
+
end
|
40
|
+
}
|
41
|
+
send(name)
|
42
|
+
end
|
43
|
+
|
37
44
|
def params
|
38
45
|
@params
|
39
46
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "json"
|
2
|
+
require "baleen/message/base"
|
2
3
|
|
3
4
|
module Baleen
|
4
5
|
module Message
|
@@ -13,7 +14,7 @@ module Baleen
|
|
13
14
|
end
|
14
15
|
|
15
16
|
class Cucumber < Base
|
16
|
-
def initialize(image:
|
17
|
+
def initialize(image: nil, work_dir: "./", files: "features", shell: "/bin/bash", opt: "-c", exe: "bundle exec cucumber", before_command: nil, command: nil)
|
17
18
|
super()
|
18
19
|
@params[:image] = image
|
19
20
|
@params[:shell] = shell
|
@@ -1,27 +1,32 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
module Baleen
|
2
4
|
module Message
|
3
5
|
module Response
|
4
6
|
|
5
|
-
class
|
7
|
+
class RunnerFinish < Base
|
8
|
+
|
6
9
|
def initialize(opt = {})
|
7
10
|
super()
|
8
11
|
@params[:status_code] = opt[:status_code]
|
9
12
|
@params[:log ] = opt[:log]
|
10
|
-
@params[:container_id ] = opt[:
|
13
|
+
@params[:container_id ] = opt[:container_id]
|
14
|
+
@params[:file] = opt[:file]
|
11
15
|
end
|
12
|
-
|
13
|
-
def status_code; @params[:status_code] end
|
14
|
-
def log; @params[:log] end
|
15
|
-
def container_id; @params[:container_id] end
|
16
16
|
end
|
17
17
|
|
18
|
-
class
|
18
|
+
class JobComplete < Base
|
19
|
+
include Baleen::Message
|
20
|
+
|
19
21
|
def initialize(opt = {})
|
20
22
|
super()
|
21
|
-
@params[:status]
|
23
|
+
@params[:status] = opt[:status]
|
24
|
+
@params[:results] = opt[:results]
|
22
25
|
end
|
23
26
|
|
24
|
-
def
|
27
|
+
def result
|
28
|
+
JSON.parse(@params[:results]).map {|r| symbolize_keys(r) }
|
29
|
+
end
|
25
30
|
end
|
26
31
|
|
27
32
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require "colorize"
|
2
|
+
|
3
|
+
module Baleen
|
4
|
+
class ResultDisplay
|
5
|
+
def initialize(result, start_time: nil, end_time: nil)
|
6
|
+
@result = result.result
|
7
|
+
@start_time = start_time
|
8
|
+
@end_time = end_time
|
9
|
+
end
|
10
|
+
|
11
|
+
def summary
|
12
|
+
tests_result = pass_all? ? "Pass".green : "Fail".red
|
13
|
+
time = run_time
|
14
|
+
|
15
|
+
puts ""
|
16
|
+
notice "[Summary]"
|
17
|
+
puts "Result: ".yellow + tests_result
|
18
|
+
puts "Time: ".yellow + time.green
|
19
|
+
puts ""
|
20
|
+
end
|
21
|
+
|
22
|
+
def detail
|
23
|
+
notice "[Details]"
|
24
|
+
@result.each do |r|
|
25
|
+
puts "Id: ".yellow + "#{r[:container_id]}".green
|
26
|
+
puts "status code: ".yellow + "#{r[:status_code]}".green
|
27
|
+
puts "feature file: ".yellow + "#{r[:file]}".green
|
28
|
+
puts "logs:".yellow
|
29
|
+
puts "------------------------------------".yellow
|
30
|
+
puts "#{r[:log]}".green
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def pass_all?
|
37
|
+
@result.all? {|r| r[:status_code] == 0}
|
38
|
+
end
|
39
|
+
|
40
|
+
def run_time
|
41
|
+
diff = @end_time - @start_time
|
42
|
+
min = (diff / 60).floor
|
43
|
+
sec = min != 0 ? (diff - (min * 60)).floor : diff.floor
|
44
|
+
"#{min}min #{sec}sec"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/baleen/runner.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "baleen/error"
|
2
|
+
|
1
3
|
module Baleen
|
2
4
|
|
3
5
|
class DockerParam
|
@@ -49,6 +51,7 @@ module Baleen
|
|
49
51
|
@containers = containers
|
50
52
|
@socket = socket
|
51
53
|
@queue = []
|
54
|
+
@results = []
|
52
55
|
@params = DockerParam.new(msg.params)
|
53
56
|
end
|
54
57
|
|
@@ -59,9 +62,9 @@ module Baleen
|
|
59
62
|
runner.async.run
|
60
63
|
end
|
61
64
|
loop {break if monitor_runners}
|
65
|
+
@results += @queue.map {|runner| runner.status.params}
|
62
66
|
end
|
63
|
-
|
64
|
-
msg = Message::Response::RunnerFinish.new(status: "done")
|
67
|
+
msg = Message::Response::JobComplete.new(status: "done", results: @results.to_json)
|
65
68
|
@socket.puts(msg.to_json)
|
66
69
|
end
|
67
70
|
|
@@ -100,18 +103,30 @@ module Baleen
|
|
100
103
|
|
101
104
|
def run
|
102
105
|
start_runner do |result|
|
103
|
-
@status = Message::Response::
|
106
|
+
@status = Message::Response::RunnerFinish.new(
|
104
107
|
status_code: result.status_code,
|
105
108
|
container_id: result.container_id,
|
106
|
-
log: result.log
|
109
|
+
log: result.log,
|
110
|
+
file: @params.files,
|
107
111
|
)
|
108
112
|
end
|
109
113
|
sleep 0.1 # Stop a moment until RunnerManager checks the status
|
110
114
|
end
|
111
115
|
|
112
116
|
def start_runner
|
113
|
-
|
114
|
-
|
117
|
+
max_retry = 3; count = 0
|
118
|
+
|
119
|
+
begin
|
120
|
+
@docker_client.create_container(@params)
|
121
|
+
@docker_client.start_container
|
122
|
+
rescue Docker::Error::ContainerNotFound => e
|
123
|
+
count += 1
|
124
|
+
if count > max_retry
|
125
|
+
raise Baleen::Error::StartContainerFail
|
126
|
+
else
|
127
|
+
retry
|
128
|
+
end
|
129
|
+
end
|
115
130
|
yield( @docker_client.result )
|
116
131
|
end
|
117
132
|
|
data/lib/baleen/server.rb
CHANGED
@@ -13,11 +13,11 @@ module Baleen
|
|
13
13
|
|
14
14
|
attr_accessor :containers
|
15
15
|
|
16
|
-
def initialize(
|
17
|
-
@base_url = "http://#{
|
16
|
+
def initialize(docker_host: "127.0.0.1", docker_port: 4243, port: 5533)
|
17
|
+
@base_url = "http://#{docker_host}:#{docker_port}"
|
18
18
|
@docker = Docker::API.new(base_url: @base_url)
|
19
19
|
@containers = @docker.containers
|
20
|
-
@server = TCPServer.new("
|
20
|
+
@server = TCPServer.new("0.0.0.0", port)
|
21
21
|
async.run
|
22
22
|
end
|
23
23
|
|
data/lib/baleen/version.rb
CHANGED
@@ -6,7 +6,7 @@ CiApp::Application.configure do
|
|
6
6
|
# since you don't have to restart the web server when you make code changes.
|
7
7
|
config.cache_classes = false
|
8
8
|
|
9
|
-
# Log error
|
9
|
+
# Log error message when you accidentally call methods on nil.
|
10
10
|
config.whiny_nils = true
|
11
11
|
|
12
12
|
# Show full error reports and disable caching
|
@@ -11,7 +11,7 @@ CiApp::Application.configure do
|
|
11
11
|
config.serve_static_assets = true
|
12
12
|
config.static_cache_control = "public, max-age=3600"
|
13
13
|
|
14
|
-
# Log error
|
14
|
+
# Log error message when you accidentally call methods on nil
|
15
15
|
config.whiny_nils = true
|
16
16
|
|
17
17
|
# Show full error reports and disable caching
|
data/poc/features/t1.feature
CHANGED
@@ -2,11 +2,11 @@ Feature: t1
|
|
2
2
|
Scenario: Benchmark for IO bound operation
|
3
3
|
Then io intensive operation
|
4
4
|
|
5
|
-
Scenario: Benchmark for CPU bound operation
|
6
|
-
|
5
|
+
#Scenario: Benchmark for CPU bound operation
|
6
|
+
# Then cpu intensive operation
|
7
7
|
|
8
|
-
Scenario: Benchmark for IO bound operation
|
9
|
-
|
8
|
+
#Scenario: Benchmark for IO bound operation
|
9
|
+
# Then io intensive operation
|
10
10
|
|
11
|
-
Scenario: Benchmark for CPU bound operation
|
12
|
-
|
11
|
+
#Scenario: Benchmark for CPU bound operation
|
12
|
+
# Then cpu intensive operation
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baleen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kim, Hirokuni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-10-
|
11
|
+
date: 2013-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -142,6 +142,7 @@ email:
|
|
142
142
|
- kimh@kvh.co.jp
|
143
143
|
executables:
|
144
144
|
- baleen
|
145
|
+
- baleen-server
|
145
146
|
extensions: []
|
146
147
|
extra_rdoc_files: []
|
147
148
|
files:
|
@@ -152,13 +153,17 @@ files:
|
|
152
153
|
- Rakefile
|
153
154
|
- baleen.gemspec
|
154
155
|
- bin/baleen
|
156
|
+
- bin/baleen-server
|
155
157
|
- lib/baleen.rb
|
156
158
|
- lib/baleen/client.rb
|
157
159
|
- lib/baleen/container.rb
|
160
|
+
- lib/baleen/error.rb
|
158
161
|
- lib/baleen/job.rb
|
159
|
-
- lib/baleen/
|
160
|
-
- lib/baleen/
|
161
|
-
- lib/baleen/
|
162
|
+
- lib/baleen/message/base.rb
|
163
|
+
- lib/baleen/message/message.rb
|
164
|
+
- lib/baleen/message/request.rb
|
165
|
+
- lib/baleen/message/response.rb
|
166
|
+
- lib/baleen/result_display.rb
|
162
167
|
- lib/baleen/runner.rb
|
163
168
|
- lib/baleen/server.rb
|
164
169
|
- lib/baleen/task.rb
|
@@ -258,5 +263,5 @@ rubyforge_project:
|
|
258
263
|
rubygems_version: 2.0.3
|
259
264
|
signing_key:
|
260
265
|
specification_version: 4
|
261
|
-
summary:
|
266
|
+
summary: Container-based parallel test runner powered by Docker
|
262
267
|
test_files: []
|