baleen 0.1.1 → 0.1.2

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.
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