baleen 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.gitmodules +3 -0
  4. data/Dockerfile +1 -0
  5. data/Gemfile +1 -0
  6. data/README.md +1 -0
  7. data/baleen.gemspec +2 -0
  8. data/baleen.yml.sample +46 -0
  9. data/bin/baleen +91 -22
  10. data/bin/baleen-server +47 -16
  11. data/lib/baleen/builder.rb +46 -0
  12. data/lib/baleen/ci_server.rb +63 -0
  13. data/lib/baleen/client.rb +19 -9
  14. data/lib/baleen/configuration.rb +24 -0
  15. data/lib/baleen/connection.rb +47 -0
  16. data/lib/baleen/default.rb +57 -0
  17. data/lib/baleen/error.rb +9 -0
  18. data/lib/baleen/job.rb +7 -5
  19. data/lib/baleen/message/base.rb +9 -40
  20. data/lib/baleen/message/exception.rb +21 -0
  21. data/lib/baleen/message/message.rb +3 -2
  22. data/lib/baleen/message/to_client.rb +32 -0
  23. data/lib/baleen/project.rb +122 -0
  24. data/lib/baleen/result_display.rb +24 -16
  25. data/lib/baleen/runner.rb +41 -92
  26. data/lib/baleen/serializable.rb +61 -0
  27. data/lib/baleen/server.rb +40 -18
  28. data/lib/baleen/task/base.rb +55 -0
  29. data/lib/baleen/task/cucumber.rb +44 -0
  30. data/lib/baleen/task/generic.rb +17 -0
  31. data/lib/baleen/task/image_update.rb +22 -0
  32. data/lib/baleen/task/run_project.rb +14 -0
  33. data/lib/baleen/task/task.rb +5 -0
  34. data/lib/baleen/utils/{colored_puts.rb → highlighter.rb} +3 -3
  35. data/lib/baleen/utils/logger.rb +74 -0
  36. data/lib/baleen/validator.rb +115 -0
  37. data/lib/baleen/version.rb +1 -1
  38. data/lib/baleen.rb +11 -3
  39. data/spec/lib/baleen/spec_result_display.rb +47 -0
  40. data/spec/lib/baleen/spec_serializable.rb +45 -0
  41. data/spec/lib/baleen/spec_task.rb +62 -0
  42. data/spec/lib/baleen/spec_validator.rb +53 -0
  43. data/spec/spec_helper.rb +31 -0
  44. metadata +62 -76
  45. data/lib/baleen/container.rb +0 -32
  46. data/lib/baleen/message/request.rb +0 -29
  47. data/lib/baleen/message/response.rb +0 -34
  48. data/poc/.gitignore +0 -15
  49. data/poc/Gemfile +0 -49
  50. data/poc/README.rdoc +0 -261
  51. data/poc/Rakefile +0 -7
  52. data/poc/app/assets/images/rails.png +0 -0
  53. data/poc/app/assets/javascripts/application.js +0 -15
  54. data/poc/app/assets/stylesheets/application.css +0 -13
  55. data/poc/app/controllers/application_controller.rb +0 -3
  56. data/poc/app/helpers/application_helper.rb +0 -2
  57. data/poc/app/mailers/.gitkeep +0 -0
  58. data/poc/app/models/.gitkeep +0 -0
  59. data/poc/app/models/ar_profile.rb +0 -3
  60. data/poc/app/views/layouts/application.html.erb +0 -14
  61. data/poc/config/application.rb +0 -62
  62. data/poc/config/boot.rb +0 -6
  63. data/poc/config/cucumber.yml +0 -8
  64. data/poc/config/database.yml +0 -28
  65. data/poc/config/environment.rb +0 -5
  66. data/poc/config/environments/development.rb +0 -37
  67. data/poc/config/environments/production.rb +0 -67
  68. data/poc/config/environments/test.rb +0 -37
  69. data/poc/config/initializers/backtrace_silencers.rb +0 -7
  70. data/poc/config/initializers/inflections.rb +0 -15
  71. data/poc/config/initializers/mime_types.rb +0 -5
  72. data/poc/config/initializers/secret_token.rb +0 -7
  73. data/poc/config/initializers/session_store.rb +0 -8
  74. data/poc/config/initializers/wrap_parameters.rb +0 -14
  75. data/poc/config/locales/en.yml +0 -5
  76. data/poc/config/routes.rb +0 -58
  77. data/poc/config.ru +0 -4
  78. data/poc/db/.gitkeep +0 -0
  79. data/poc/db/migrate/20130914144710_create_ar_profiles.rb +0 -11
  80. data/poc/db/schema.rb +0 -24
  81. data/poc/db/seeds.rb +0 -7
  82. data/poc/features/step_definitions/fake_test_steps.rb +0 -25
  83. data/poc/features/support/env.rb +0 -60
  84. data/poc/features/support/ruby_prof_cucumber.rb +0 -15
  85. data/poc/features/t1.feature +0 -12
  86. data/poc/features/t10.feature +0 -12
  87. data/poc/features/t2.feature +0 -12
  88. data/poc/features/t3.feature +0 -12
  89. data/poc/features/t4.feature +0 -12
  90. data/poc/features/t5.feature +0 -12
  91. data/poc/features/t6.feature +0 -12
  92. data/poc/features/t7.feature +0 -12
  93. data/poc/features/t8.feature +0 -12
  94. data/poc/features/t9.feature +0 -12
  95. data/poc/lib/assets/.gitkeep +0 -0
  96. data/poc/lib/tasks/.gitkeep +0 -0
  97. data/poc/lib/tasks/cucumber.rake +0 -65
  98. data/poc/public/404.html +0 -26
  99. data/poc/public/422.html +0 -26
  100. data/poc/public/500.html +0 -25
  101. data/poc/public/favicon.ico +0 -0
  102. data/poc/public/index.html +0 -241
  103. data/poc/public/robots.txt +0 -5
  104. data/poc/script/cucumber +0 -10
  105. data/poc/script/rails +0 -6
  106. data/poc/test/fixtures/.gitkeep +0 -0
  107. data/poc/test/fixtures/ar_profiles.yml +0 -11
  108. data/poc/test/functional/.gitkeep +0 -0
  109. data/poc/test/integration/.gitkeep +0 -0
  110. data/poc/test/performance/browsing_test.rb +0 -12
  111. data/poc/test/test_helper.rb +0 -13
  112. data/poc/test/unit/.gitkeep +0 -0
  113. data/poc/test/unit/ar_profile_test.rb +0 -7
  114. data/poc/vendor/assets/javascripts/.gitkeep +0 -0
  115. data/poc/vendor/assets/stylesheets/.gitkeep +0 -0
  116. data/poc/vendor/plugins/.gitkeep +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2926ffd6301f080fb74885a2d760a53d5155bef7
4
- data.tar.gz: 7ab9916383f64ee4fa05c409aeab5dd026b3dc79
3
+ metadata.gz: 4af7f0392de6df6c5592edcee4322f81cf9167ba
4
+ data.tar.gz: 740218a0bcf6abaf941ce0b67a2a3901210841f4
5
5
  SHA512:
6
- metadata.gz: 64ea677e359b427e402a1b061221063f24435c7805ff96ce12f3d308454ddbb96ecb8ced0184c0b334b51c13ad0e70b2c7a3d6ee5124f297381e9851d0b048d3
7
- data.tar.gz: 7784401b71d0e19d4ef0ad49a72a7c73f509e110cd7b89cc4bd97778fe8d365f4363d238d0fb6b50ceb6c75feb1bd2a789f2bc5a30ee9cca77ce708a8cecb96c
6
+ metadata.gz: 0c0aa63594939b929aaa2f876ea9e67744244e357cb1eff814cae89952d6bc63302dd054378ea867498c6adcdf5766ab5cbc022488fd265fd45804c5408d950b
7
+ data.tar.gz: 0c9e7dab585817eb3b495e0e0c0bb31cee27d164ebf9ef999a70ac62377fa7722692bb31494564fec63cdf4902c3da43155a405b2c250619213567e21e6c6c67
data/.gitignore CHANGED
@@ -17,3 +17,4 @@ test/version_tmp
17
17
  tmp
18
18
  poc/db/.*sqlite3
19
19
  poc/log/*
20
+ baleen/*
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "poc"]
2
+ path = poc
3
+ url = https://github.com/kimh/baleen-poc
data/Dockerfile ADDED
@@ -0,0 +1 @@
1
+ From ubuntu
data/Gemfile CHANGED
@@ -2,3 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in baleen.gemspec
4
4
  gemspec
5
+
data/README.md CHANGED
@@ -122,6 +122,7 @@ Finally, run baleen. Make sure to specify correct ip of the machine that is runn
122
122
  3. Commit your changes (`git commit -am 'Add some feature'`)
123
123
  4. Push to the branch (`git push origin my-new-feature`)
124
124
  5. Create new Pull Request
125
+ 6. Work hard!!
125
126
 
126
127
 
127
128
 
data/baleen.gemspec CHANGED
@@ -25,12 +25,14 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency "pry"
26
26
  spec.add_development_dependency "awesome_print"
27
27
  spec.add_development_dependency "interactive_editor"
28
+ spec.add_development_dependency "rspec"
28
29
 
29
30
  spec.add_runtime_dependency 'celluloid'
30
31
  spec.add_runtime_dependency 'celluloid-io'
31
32
  spec.add_runtime_dependency 'docker-api'
32
33
  spec.add_runtime_dependency 'colorize'
33
34
  spec.add_runtime_dependency 'thor'
35
+ spec.add_runtime_dependency 'sinatra'
34
36
 
35
37
  end
36
38
 
data/baleen.yml.sample ADDED
@@ -0,0 +1,46 @@
1
+ # baleen.yml: Configuration file to run baleen
2
+ #
3
+ # This file is used to specify the configuration for your baleen job.
4
+ # The file has three top sections and config file must have each section
5
+ #
6
+ # base:
7
+ # Mandatory
8
+ # baleen-server: IP address or host of baleen server
9
+ #
10
+ # Optional
11
+ # port: port that baleen server is listening. Default: 5533
12
+ #
13
+ # runner:
14
+ # Mandatory
15
+ # image: name of image to run Docker container where your tests will be run
16
+ #
17
+ # Optional
18
+ # work_dir: working directory of container. Default: ./
19
+ # concurrency: number of containers to run at one time. Default: 2
20
+ # before_command: commands to run before running your tests.
21
+ #
22
+ # framework:
23
+ # Mandatory
24
+ # type: your test framework
25
+ #
26
+ # Optional
27
+ # features: place of your feature files when your framework type is cucumber. Default: ./features
28
+ #
29
+
30
+ base:
31
+ baleen_server: 127.0.0.1
32
+ port: 5533
33
+
34
+ runner:
35
+ image: kimh/baleen-poc
36
+ work_dir: /git/baleen/poc
37
+ concurrency: 3
38
+ before_command: bundle install
39
+ # If you want to specify multiple commands, you can use block style syntax of YAML
40
+ # before_command: |
41
+ # source /etc/profile.d/rvm.sh
42
+ # bundle install
43
+
44
+ framework:
45
+ type: cucumber
46
+ features: ./
data/bin/baleen CHANGED
@@ -3,29 +3,98 @@
3
3
  require "thor"
4
4
  require "baleen"
5
5
 
6
- class BaleenCommand < Thor
7
-
8
- desc "cucumber", "Running cucumber features"
9
- option :image, :required => true
10
- option :work_dir, :default => "./"
11
- option :files, :default => "features"
12
- option :before_command, :default => nil
13
- option :host, :default => "127.0.0.1"
14
- option :port, :default => "5533"
15
- option :concurrency, :default => 2
16
- def cucumber
17
- client = Baleen::Client.new(options[:host], options[:port])
18
- request = Baleen::Message::Request::Cucumber.new(
19
- image: options[:image],
20
- work_dir: options[:work_dir],
21
- files: options[:files],
22
- before_command: options[:before_command],
23
- concurrency: options[:concurrency].to_i,
24
- )
25
-
26
- job = Baleen::Job.new(client, request)
6
+ module BaleenCliHelper
7
+ def job_start(project)
8
+ klass = project[:framework][:type].to_s.capitalize
9
+ task = Baleen::Task.const_get(klass).new(
10
+ image: project[:runner][:image],
11
+ work_dir: project[:runner][:work_dir],
12
+ files: project[:framework][:files],
13
+ before_command: project[:runner][:before_command],
14
+ concurrency: project[:runner][:concurrency].to_i,
15
+ )
16
+ client = Baleen::Client.new(project[:base][:baleen_server], project[:base][:port])
17
+ job = Baleen::Job.new(client, task)
27
18
  job.start
28
19
  end
29
20
  end
30
21
 
31
- BaleenCommand.start
22
+ module BaleenCLI
23
+ class Project < Thor
24
+
25
+ include Baleen::Default
26
+
27
+ option :baleen_server
28
+ option :port
29
+ option :debug, :type => :boolean
30
+
31
+ desc "start", "Running baleen project"
32
+ def start(name)
33
+ baleen_server = ENV["baleen_server"] || options[:baleen_server] || default_baleen_server
34
+ debug = options[:debug]
35
+ port = ENV["baleen_port"] || options[:port] || default_port
36
+ task = Baleen::Task::RunProject.new(
37
+ :project => name
38
+ )
39
+ client = Baleen::Client.new(baleen_server, port, debug)
40
+ job = Baleen::Job.new(client, task)
41
+ job.start
42
+ end
43
+ default_task :start
44
+
45
+ desc "list", "List baleen projects registered at baleen-server"
46
+ def list
47
+ #TODO
48
+ end
49
+ end
50
+
51
+ class Cucumber < Thor
52
+
53
+ include Baleen::Default
54
+ include BaleenCliHelper
55
+
56
+ option :baleen_server, :required => true
57
+ option :port
58
+ option :before_command
59
+ option :concurrency
60
+ option :work_dir
61
+ option :features
62
+ option :image, :required => true
63
+ option :debug, :type => :boolean
64
+
65
+ desc "cucumber", "Running cucumber project from options"
66
+ def start
67
+ project = {
68
+ base: {
69
+ baleen_server: options[:baleen_server],
70
+ port: options[:port] || default_port
71
+ },
72
+ runner: {
73
+ before_command: options[:before_command] || default_before_command,
74
+ concurrency: options[:concurrency] || default_concurrency,
75
+ work_dir: options[:work_dir] || default_work_dir,
76
+ image: options[:image],
77
+ },
78
+ framework: {
79
+ files: options[:features] || default_features,
80
+ type: "cucumber"
81
+ }
82
+ }
83
+
84
+ job_start(project)
85
+ end
86
+ default_task :start
87
+
88
+ end
89
+
90
+ class Main < Thor
91
+
92
+ desc "project", "Project"
93
+ subcommand "project", Project
94
+
95
+ desc "cucumber", "Running cucumber project from options"
96
+ subcommand "cucumber", Cucumber
97
+ end
98
+ end
99
+
100
+ BaleenCLI::Main.start
data/bin/baleen-server CHANGED
@@ -18,31 +18,61 @@ def running?
18
18
  end
19
19
  end
20
20
 
21
+
21
22
  class BaleenServerCli < Thor
22
23
 
24
+ include Baleen
25
+ include Baleen::Default
26
+
23
27
  desc "start", "Start Baleen server"
24
- option :docker_host, :default => "127.0.0.1"
25
- option :docker_port, :default => 4243
26
- option :port, :default => 5533
27
- option :debug, :type => :boolean
28
+ option :docker_host, :desc => "Host of Docker"
29
+ option :docker_port, :desc => "Port that Docker is listening to"
30
+ option :port, :desc => "Port that baleen server is listening to"
31
+ option :ci, :desc => "When specified, baleen-server will receive github post-receive"
32
+ option :ci_port, :desc => "Port to accept github post-receive"
33
+ option :project_file, :desc => "Path to project file (baleen.yml)"
34
+ option :dir, :desc => "Specify the directory for baleen to save temp files, logs, caches, etc."
35
+ option :log_level, :desc => "Specify log level"
36
+ option :debug, :desc => "Run with debug mode. Alias to set log_level to debug", :type => :boolean
28
37
  def start
29
38
  if running?
30
- warning "baleen-server is already running"
31
- warning "Exiting..."
39
+ BL.error "baleen-server is already running"
40
+ BL.error "Exiting..."
32
41
  exit
33
42
  end
34
43
 
35
- docker_host = options[:docker_host]
36
- docker_port = options[:docker_port]
37
- port = options[:port]
38
- debug = options[:debug]
44
+ docker_host = options[:docker_host] || default_docker_host
45
+ docker_port = options[:docker_port] || default_docker_port
46
+ port = options[:port] || default_port
47
+ dir = options[:dir] || default_dir
48
+ project_file = options[:project_file] || default_project_file
49
+ ci_port = options[:ci_port] || default_ci_port
50
+ ci = options[:ci]
51
+ debug = options[:debug]
52
+ log_level = options[:log_level]
39
53
 
40
- info "Starting baleen-server..."
41
- info " Listening on: #{port}"
42
- info " Docker API: http://#{docker_host}:#{docker_port}"
54
+ config = Configuration.instance
55
+ config.dir = dir
56
+ config.debug = debug
57
+ log_levels = {"debug" => DEBUG, "info" => INFO, "warn" => WARN, "error" => ERROR}
58
+
59
+ if log_level.nil?
60
+ config.log_level = default_log_level
61
+ else
62
+ unless log_levels.keys.include? log_level
63
+ hl_error "Unknown log level: #{log_level}"
64
+ exit 1
65
+ end
66
+ config.log_level = log_levels[log_level]
67
+ end
68
+
69
+ BL.notice("Starting baleen-server...")
70
+ BL.notice(" Listening on: #{port}")
71
+ BL.notice(" Docker API: http://#{docker_host}:#{docker_port}").eol
43
72
 
44
73
  Process.daemon(true, debug)
45
- Baleen::Server.new(docker_host: docker_host, docker_port: docker_port, port: port)
74
+ Baleen::Server.new(docker_host, docker_port, port, project_file)
75
+ Baleen::CiServer.run!(docker_host: docker_host, docker_port: docker_port, port: ci_port, log_level: log_level) if ci
46
76
 
47
77
  # Prevent main thread from exiting for Celluloid actors to continue running
48
78
  # See https://github.com/celluloid/celluloid/wiki/Frequently-Asked-Questions
@@ -52,10 +82,10 @@ class BaleenServerCli < Thor
52
82
  desc "stop", "Stop Baleen server"
53
83
  def stop
54
84
  if running?
55
- notice "Stopping Baleen server..."
85
+ BL.warn "Stopping Baleen server..."
56
86
  `kill -9 #{pid.first}`
57
87
  else
58
- notice "baleen-server is not running"
88
+ BL.warn "baleen-server is not running"
59
89
  end
60
90
  end
61
91
 
@@ -64,6 +94,7 @@ class BaleenServerCli < Thor
64
94
  self.stop
65
95
  self.start
66
96
  end
97
+
67
98
  end
68
99
 
69
100
  BaleenServerCli.start
@@ -0,0 +1,46 @@
1
+ require "find"
2
+ require "excon"
3
+ require "rubygems/package"
4
+
5
+ module Baleen
6
+ class Builder
7
+
8
+ def initialize(project, docker_url)
9
+ @project = project
10
+ @docker_url = docker_url
11
+ end
12
+
13
+ def build
14
+ config = Configuration.instance
15
+ url = @project.ci[:url]
16
+ repo = @project.ci[:repo]
17
+ tmp_dir = File.join(config.dir, "tmp/build")
18
+ dir = File.join(tmp_dir, repo)
19
+ output = StringIO.new
20
+ connection = Docker::Connection.new(@docker_url, {})
21
+
22
+ FileUtils.mkdir_p(tmp_dir)
23
+
24
+ if File.exists?(dir)
25
+ Dir::chdir(dir)
26
+ `git pull`
27
+ else
28
+ `git clone #{url} #{dir}`
29
+ Dir::chdir(dir)
30
+ end
31
+
32
+ Gem::Package::TarWriter.new(output) do |tar|
33
+ Find.find("./") do |f|
34
+ if File::ftype(f) == "directory"
35
+ tar.mkdir(f, 0640)
36
+ else
37
+ tar.add_file(f, 0640) { |tar_file| tar_file.write(File.open(f){|fl| fl.read})}
38
+ end
39
+ end
40
+ end
41
+
42
+ tar = output.tap(&:rewind).string
43
+ connection.post('/build', {}, :body => tar)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,63 @@
1
+ require 'sinatra/base'
2
+ require 'docker'
3
+ require 'baleen'
4
+
5
+ module Baleen
6
+ class CiServer < Sinatra::Base
7
+
8
+ include Celluloid::IO
9
+ include Baleen
10
+ extend Baleen::Default
11
+
12
+ def self.run!(params={})
13
+ docker_host = params[:docker_host]
14
+ docker_port = params[:docker_port]
15
+ project_file = params[:project_file] || default_project_file
16
+ log_level = params[:log_level] || default_log_level
17
+
18
+ Docker.url = "http://#{docker_host}:#{docker_port}"
19
+ Baleen::Project.load_project(project_file)
20
+ Baleen::Configuration.log_level = log_level
21
+
22
+ set :port, params[:port]
23
+ set :environment, :production
24
+ super
25
+ end
26
+
27
+ post '/' do
28
+ payload = JSON.parse(params[:payload])
29
+ repo = payload["repository"]["name"]
30
+ branch = payload["ref"].split("/").last
31
+ project = Baleen::Project.find_project_by_ci({repo: repo, branch: branch})
32
+ BL.notice("Receiving post receive hook for #{project.url}").eol
33
+
34
+ if project
35
+ async.ci_run(project)
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def ci_run(project)
42
+ BL.notice("CI started")
43
+ BL.info(" Project: #{project.name}")
44
+ BL.info(" Repo: #{project.repo}")
45
+ BL.info(" Branch: #{project.branch}").eol
46
+
47
+ if project.ci[:build]
48
+ BL.notice("Building new image for #{project.image} before running tests...")
49
+ result = Baleen::Builder.new(project, Docker.url).build
50
+ BL.info (result)
51
+ end
52
+
53
+ BL.notice("Start running tests...")
54
+ RunnerManager.new(nil, project.task).run do |response|
55
+ logger = Baleen::BL.instance
56
+ display = ResultDisplay.new(response.results, Time.now, Time.now, logger)
57
+ display.summary
58
+ display.detail
59
+ end
60
+ BL.notice("Finish running tests...").eol
61
+ end
62
+ end
63
+ end
data/lib/baleen/client.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  require 'celluloid/io'
2
2
  require 'celluloid/autostart'
3
- require 'baleen/utils/colored_puts'
3
+ require 'baleen/utils/highlighter'
4
4
 
5
5
  module Baleen
6
6
  class Client
7
7
  include Celluloid::IO
8
8
  finalizer :close
9
9
 
10
- def initialize(host, port=12345)
10
+ def initialize(host, port, debug=false)
11
+ Celluloid.logger = nil unless debug
11
12
  @socket = TCPSocket.open(host, port)
12
13
  end
13
14
 
@@ -17,25 +18,34 @@ module Baleen
17
18
 
18
19
  def wait_response
19
20
  loop {
20
- if response = handle_response(@socket.gets)
21
- return response
22
- end
21
+ response = handle_response(@socket.gets)
22
+ return response if response
23
23
  }
24
24
  end
25
25
 
26
26
  def close
27
27
  @socket.close if @socket
28
- info "connection closed"
28
+ hl_warn "Connection closed"
29
29
 
30
30
  rescue IOError; nil
31
31
  end
32
32
 
33
- def handle_response(response)
34
- if response.nil?
33
+ def handle_response(msg)
34
+ if msg.nil?
35
35
  raise RuntimeError, 'Connection closed by server'
36
36
  end
37
37
 
38
- Baleen::Message::Decoder.new(response).decode
38
+ response = Serializable.deserialize(msg)
39
+
40
+ if response.is_a? Message::Base
41
+ response.print_message
42
+ end
43
+
44
+ if response.terminate?
45
+ response
46
+ else
47
+ nil
48
+ end
39
49
  end
40
50
 
41
51
  end
@@ -0,0 +1,24 @@
1
+ require "singleton"
2
+
3
+ module Baleen
4
+ class Configuration
5
+ include Singleton
6
+ include Baleen::Default
7
+
8
+ attr_accessor :log_level, :dir, :debug
9
+
10
+ def initialize
11
+ @log_level = INFO
12
+ @dir = default_dir
13
+ end
14
+
15
+ def self.log_level=(level)
16
+ instance.log_level = level
17
+ end
18
+
19
+ def self.debug=(bool)
20
+ instance.debug = bool
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,47 @@
1
+ module Baleen
2
+ class Connection
3
+ def initialize(socket=nil)
4
+ @socket = socket
5
+ end
6
+
7
+ def notify_info(msg)
8
+ notify_to_client(msg, "info")
9
+ end
10
+
11
+ def notify_warn(msg)
12
+ notify_to_client(msg, "warn")
13
+ end
14
+
15
+ def notify_error(msg)
16
+ notify_to_client(msg, "error")
17
+ end
18
+
19
+ def respond(response)
20
+ write(response.to_json)
21
+ end
22
+
23
+ def close
24
+ @socket.close
25
+ end
26
+
27
+ def notify_exception(msg)
28
+ response = Baleen::Message::Exception.new({:message => msg})
29
+ write(response.to_json)
30
+ end
31
+
32
+ private
33
+
34
+ def notify_to_client(msg, level)
35
+ response = Baleen::Message::ToClient.new({:message => msg, :level => level})
36
+ write(response.to_json)
37
+ end
38
+
39
+ def write(json_data)
40
+ if @socket
41
+ @socket.puts(json_data)
42
+ else
43
+ nil
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,57 @@
1
+ module Baleen
2
+ module Default
3
+
4
+ def default_baleen_server
5
+ "127.0.0.1"
6
+ end
7
+
8
+ def default_port
9
+ 5533
10
+ end
11
+
12
+ def default_dir
13
+ "./baleen"
14
+ end
15
+
16
+ def default_concurrency
17
+ 2
18
+ end
19
+
20
+ def default_before_command
21
+ nil
22
+ end
23
+
24
+ def default_features
25
+ "./features"
26
+ end
27
+
28
+ def default_work_dir
29
+ "./"
30
+ end
31
+
32
+ def default_docker_host
33
+ "127.0.0.1"
34
+ end
35
+
36
+ def default_docker_port
37
+ 4243
38
+ end
39
+
40
+ def default_ci_port
41
+ 4567
42
+ end
43
+
44
+ def default_project_file
45
+ File.join(ENV["HOME"], "baleen.yml")
46
+ end
47
+
48
+ def default_branch
49
+ "master"
50
+ end
51
+
52
+ def default_log_level
53
+ Baleen::INFO
54
+ end
55
+
56
+ end
57
+ end
data/lib/baleen/error.rb CHANGED
@@ -1,5 +1,14 @@
1
1
  module Baleen
2
2
  module Error
3
3
  class StartContainerFail < StandardError; end
4
+ class ProjectNotFound < StandardError; end
5
+ class ConfigMissing < StandardError; end
6
+
7
+ module Validator
8
+ class FrameworkMissing < StandardError; end
9
+ class MandatoryMissing < StandardError; end
10
+ end
11
+
4
12
  end
13
+
5
14
  end
data/lib/baleen/job.rb CHANGED
@@ -13,16 +13,18 @@ module Baleen
13
13
  start_time = Time.now
14
14
  @client.request(@msg.params)
15
15
  @response = @client.wait_response
16
- end_time = Time.now
17
- show_results(start_time, end_time)
16
+
17
+ unless @response.nil?
18
+ end_time = Time.now
19
+ show_results(start_time, end_time)
20
+ end
18
21
  end
19
22
 
20
23
  private
21
24
 
22
25
  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
26
+ display = ResultDisplay.new(@response.results, s_time, e_time, STDOUT)
27
+ display.report_result
26
28
  end
27
29
 
28
30
  end