praegustator 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OWNmNzAyMjllY2JjYjc1MWI4Y2VhMGNlZDVhODIwMTZmN2U2MDM3Nw==
4
+ Y2ZkOGNiMDIzNmFkNGM2N2I2MzM4ZDMyMTcwNjhiYzA0Y2VjMjQ5Zg==
5
5
  data.tar.gz: !binary |-
6
- ZWFlOTQzODcyNWRkOGE1MDI3NGJiMTAyYzYyZGZhMjcwMDM0Y2RiOA==
6
+ MGY5ZWRlYjQ5ZWQ5NGIwZjBjZGMxMDQzYTZjY2RiOWE5MGI1ODUyNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MzE1YzQ0YTc5OGYyNGY1MmUzZDQ0ZTQwZjA5MDRmNGY5NWJmOTgxZjYyOWMx
10
- MzU4YTk1YjIxN2I3NWVhYzFhMDQ1MzhmMmNiZDZhM2NjMmViNWI3MTViODc1
11
- ZWM5NGNiYTBlMWNiNWY5NjdiOWY5MzljMWU5N2RiMDhmZjhmYzY=
9
+ Y2RhYjU1ZDYyZTI1ZTFmM2QwYzc3OGI3NjdiMTcwN2NkMjk1YThkOWZkNTIz
10
+ NzQ1M2QzYWZkZTgyNDI4Mjg3NjZhODM4N2ZkMjA4OGY2MTEzY2M4MDU2NGNm
11
+ MzUzZjY0NmNmMTlkZWYzYTU0NzFiMDcwODIxY2I0MjcyNDdiYjQ=
12
12
  data.tar.gz: !binary |-
13
- NGI4Y2JkYjE3ODY4ZmU0YzFhMzQ2NTJlNzNlYzkyY2EzZDYyZDljNDA0ODBj
14
- MjM5NDk0NzMxNTNiMGEyOTM1YTkwZmJlYjYxOGY4M2VmZTdjZjVjNWY0Yzlj
15
- NzFhYWE2MjhmMzg3MWVhYzFkMDA1NjAyNDQ0NjA2MzJkYTcwYTQ=
13
+ ZDZmNDM0MTMwZWJlNzMxNDNiMjg1ZjU0NmU1MDVmZTJiY2Y5OWE5MjlhNTFj
14
+ MDAxMGE5ZWM0MTAwZjQ5ZWIyNjM3OWFkMWQ1MjBmMmYzMTljZmEzY2RkZDBh
15
+ ZGMwZjUzNjZhNDhkMzdhNDE5YTEyMmY1NDZiMzk0ZmY5M2U0YmE=
data/Gemfile CHANGED
@@ -1,8 +1,7 @@
1
1
  source 'https://rubygems.org'
2
+ gemspec
2
3
 
3
4
  group :development, :test do
4
- gem 'rspec'
5
- gem 'berkshelf'
6
5
  gem 'pry'
7
6
  gem 'fuubar'
8
7
  end
@@ -1,109 +1,88 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ praegustator (0.2.0)
5
+ chef (>= 11.4.4)
6
+ colorize
7
+ rspec (>= 2.13.0)
8
+ serverspec
9
+ thor
10
+
1
11
  GEM
2
12
  remote: https://rubygems.org/
3
13
  specs:
4
- activesupport (3.2.15)
5
- i18n (~> 0.6, >= 0.6.4)
6
- multi_json (~> 1.0)
7
- addressable (2.3.5)
8
- akami (1.2.0)
9
- gyoku (>= 0.4.0)
10
- nokogiri (>= 1.4.0)
11
- berkshelf (2.0.10)
12
- activesupport (~> 3.2.0)
13
- addressable (~> 2.3.4)
14
- buff-shell_out (~> 0.1)
15
- chozo (>= 0.6.1)
16
- faraday (>= 0.8.5)
17
- hashie (>= 2.0.2)
18
- minitar (~> 0.5.4)
19
- rbzip2 (~> 0.2.0)
20
- retryable (~> 1.3.3)
21
- ridley (~> 1.5.0)
22
- solve (>= 0.5.0)
23
- thor (~> 0.18.0)
24
- buff-config (0.4.0)
25
- buff-extensions (~> 0.3)
26
- varia_model (~> 0.1)
27
- buff-extensions (0.5.0)
28
- buff-ignore (1.1.0)
29
- buff-ruby_engine (0.1.0)
30
- buff-shell_out (0.1.1)
31
- buff-ruby_engine (~> 0.1.0)
14
+ aruba (0.5.3)
15
+ childprocess (>= 0.3.6)
16
+ cucumber (>= 1.1.1)
17
+ rspec-expectations (>= 2.7.0)
32
18
  builder (3.2.2)
33
- celluloid (0.14.1)
34
- timers (>= 1.0.0)
35
- celluloid-io (0.14.1)
36
- celluloid (>= 0.14.1)
37
- nio4r (>= 0.4.5)
38
- chozo (0.6.1)
39
- activesupport (>= 3.2.0)
40
- hashie (>= 2.0.2)
41
- multi_json (>= 1.3.0)
19
+ chef (11.6.0)
20
+ erubis
21
+ highline (>= 1.6.9)
22
+ json (>= 1.4.4, <= 1.7.7)
23
+ mixlib-authentication (>= 1.3.0)
24
+ mixlib-cli (~> 1.3.0)
25
+ mixlib-config (>= 1.1.2)
26
+ mixlib-log (>= 1.3.0)
27
+ mixlib-shellout
28
+ net-ssh (~> 2.6)
29
+ net-ssh-multi (~> 1.1.0)
30
+ ohai (>= 0.6.0)
31
+ rest-client (>= 1.0.4, < 1.7.0)
32
+ yajl-ruby (~> 1.1)
33
+ childprocess (0.3.9)
34
+ ffi (~> 1.0, >= 1.0.11)
42
35
  coderay (1.0.9)
36
+ colorize (0.6.0)
37
+ cucumber (1.3.10)
38
+ builder (>= 2.1.2)
39
+ diff-lcs (>= 1.1.3)
40
+ gherkin (~> 2.12)
41
+ multi_json (>= 1.7.5, < 2.0)
42
+ multi_test (>= 0.0.2)
43
43
  diff-lcs (1.2.5)
44
44
  erubis (2.7.0)
45
- faraday (0.8.8)
46
- multipart-post (~> 1.2.0)
47
45
  ffi (1.9.3)
48
46
  fuubar (1.2.1)
49
47
  rspec (~> 2.0)
50
48
  rspec-instafail (~> 0.2.0)
51
49
  ruby-progressbar (~> 1.0)
52
- gssapi (1.0.3)
53
- ffi (>= 1.0.1)
54
- gyoku (1.1.0)
55
- builder (>= 2.1.2)
56
- hashie (2.0.5)
57
- httpclient (2.3.4.1)
58
- httpi (0.9.7)
59
- rack
60
- i18n (0.6.5)
61
- json (1.8.1)
62
- little-plugger (1.1.3)
63
- logging (1.8.1)
64
- little-plugger (>= 1.1.3)
65
- multi_json (>= 1.3.6)
50
+ gherkin (2.12.2)
51
+ multi_json (~> 1.3)
52
+ highline (1.6.20)
53
+ ipaddress (0.8.0)
54
+ json (1.7.7)
66
55
  method_source (0.8.2)
67
- mini_portile (0.5.2)
68
- minitar (0.5.4)
56
+ mime-types (2.0)
69
57
  mixlib-authentication (1.3.0)
70
58
  mixlib-log
59
+ mixlib-cli (1.3.0)
60
+ mixlib-config (2.0.0)
71
61
  mixlib-log (1.6.0)
62
+ mixlib-shellout (1.2.0)
72
63
  multi_json (1.8.2)
73
- multipart-post (1.2.0)
74
- net-http-persistent (2.9)
64
+ multi_test (0.0.2)
75
65
  net-ssh (2.7.0)
76
- nio4r (0.5.0)
77
- nokogiri (1.6.0)
78
- mini_portile (~> 0.5.0)
79
- nori (1.1.5)
66
+ net-ssh-gateway (1.2.0)
67
+ net-ssh (>= 2.6.5)
68
+ net-ssh-multi (1.1)
69
+ net-ssh (>= 2.1.4)
70
+ net-ssh-gateway (>= 0.99.0)
71
+ ohai (6.20.0)
72
+ ipaddress
73
+ mixlib-cli
74
+ mixlib-config
75
+ mixlib-log
76
+ mixlib-shellout
77
+ systemu (~> 2.5.2)
78
+ yajl-ruby
80
79
  pry (0.9.12.2)
81
80
  coderay (~> 1.0.5)
82
81
  method_source (~> 0.8)
83
82
  slop (~> 3.4)
84
- rack (1.5.2)
85
- rbzip2 (0.2.0)
86
- retryable (1.3.3)
87
- ridley (1.5.3)
88
- addressable
89
- buff-config (~> 0.2)
90
- buff-extensions (~> 0.3)
91
- buff-ignore (~> 1.1)
92
- buff-shell_out (~> 0.1)
93
- celluloid (~> 0.14.0)
94
- celluloid-io (~> 0.14.0)
95
- erubis
96
- faraday (>= 0.8.4)
97
- hashie (>= 2.0.2)
98
- json (>= 1.7.7)
99
- mixlib-authentication (>= 1.3.0)
100
- net-http-persistent (>= 2.8)
101
- net-ssh
102
- nio4r (>= 0.5.0)
103
- retryable
104
- solve (>= 0.4.4)
105
- varia_model (~> 0.1)
106
- winrm (~> 1.1.0)
83
+ rake (10.1.0)
84
+ rest-client (1.6.7)
85
+ mime-types (>= 1.16)
107
86
  rspec (2.14.1)
108
87
  rspec-core (~> 2.14.0)
109
88
  rspec-expectations (~> 2.14.0)
@@ -114,39 +93,25 @@ GEM
114
93
  rspec-instafail (0.2.4)
115
94
  rspec-mocks (2.14.4)
116
95
  ruby-progressbar (1.2.0)
117
- rubyntlm (0.1.1)
118
- savon (0.9.5)
119
- akami (~> 1.0)
120
- builder (>= 2.1.2)
121
- gyoku (>= 0.4.0)
122
- httpi (~> 0.9)
123
- nokogiri (>= 1.4.0)
124
- nori (~> 1.0)
125
- wasabi (~> 1.0)
96
+ serverspec (0.11.5)
97
+ highline
98
+ net-ssh
99
+ rspec (>= 2.13.0)
126
100
  slop (3.4.6)
127
- solve (0.8.1)
101
+ systemu (2.5.2)
128
102
  thor (0.18.1)
129
- timers (1.1.0)
130
- uuidtools (2.1.4)
131
- varia_model (0.2.0)
132
- buff-extensions (~> 0.2)
133
- hashie (>= 2.0.2)
134
- wasabi (1.0.0)
135
- nokogiri (>= 1.4.0)
136
- winrm (1.1.3)
137
- gssapi (~> 1.0.0)
138
- httpclient (~> 2.2, >= 2.2.0.2)
139
- logging (~> 1.6, >= 1.6.1)
140
- nokogiri (~> 1.5)
141
- rubyntlm (~> 0.1.1)
142
- savon (= 0.9.5)
143
- uuidtools (~> 2.1.2)
103
+ yajl-ruby (1.1.0)
144
104
 
145
105
  PLATFORMS
146
106
  ruby
147
107
 
148
108
  DEPENDENCIES
149
- berkshelf
109
+ aruba
110
+ bundler (~> 1.3)
111
+ cucumber
150
112
  fuubar
113
+ praegustator!
151
114
  pry
152
- rspec
115
+ rake
116
+ rspec (>= 2.13.0)
117
+ rspec-mocks
@@ -3,6 +3,14 @@ Feature: Praegustator
3
3
  As a CLI
4
4
  I want to check the apache installed
5
5
 
6
- Scenario: check nginx
6
+ Scenario: validate
7
7
  When I run `praeg validate`
8
8
  Then the output should contain "should be installed"
9
+
10
+ Scenario: taste
11
+ When I run `praeg taste role:* nginx`
12
+ Then the output should contain "should be installed"
13
+
14
+ Scenario: no node found
15
+ When I run `praeg taste role:foo nginx`
16
+ Then the output should contain "no node found for search criteria: role:foo\n"
@@ -1,7 +1,7 @@
1
1
  require 'aruba/cucumber'
2
2
  Aruba.configure do |config|
3
3
  config.before_cmd do |cmd|
4
- @aruba_timeout_seconds = 5
4
+ @aruba_timeout_seconds = 10
5
5
  system "cp ../../features_setup/setup/.praegustator.yml ."
6
6
  end
7
7
  end
@@ -2,3 +2,6 @@ require 'aruba/cucumber'
2
2
 
3
3
  system "cd features_setup/setup/ && vagrant up"
4
4
  system "cp features_setup/setup/.praegustator.yml tmp/aruba"
5
+
6
+
7
+ p "to stop test machine run `vagarnt halt` in features_setup/setup dir"
@@ -1,3 +1,3 @@
1
- chef_server_url 'http://192.168.43.247:4000'
1
+ chef_server_url 'http://192.168.2.3:4000'
2
2
  node_name 'zero-host'
3
3
  client_key '/var/folders/f7/2rps3hds45zd0gn2qvgbj_000000gn/T/fake_key/fake.pem'
@@ -5,11 +5,13 @@ require 'praegustator/test_suite'
5
5
  require 'praegustator/dsl'
6
6
  require 'praegustator/wrappers/chef'
7
7
  require 'praegustator/node'
8
+ require 'praegustator/reporter'
8
9
  require 'praegustator/setup'
9
10
  require 'yaml'
10
11
  require 'colorize'
11
12
 
12
13
  module Praegustator
14
+ @reporter = Praegustator::Reporter.new
13
15
  @config = {
14
16
  'log_level' => 'info',
15
17
  'search_driver' => 'chef',
@@ -25,6 +27,11 @@ module Praegustator
25
27
  'user' => 'root',
26
28
  'pasword' => nil,
27
29
  'keys' => []
30
+ },
31
+ 'report' => {
32
+ 'show_summary' => true,
33
+ 'show_passed' => true,
34
+ 'show_failed' => true
28
35
  }
29
36
  }
30
37
 
@@ -43,6 +50,10 @@ module Praegustator
43
50
  @config
44
51
  end
45
52
 
53
+ def self.reporter
54
+ @reporter
55
+ end
56
+
46
57
  private
47
58
  def self.configure(opts = {})
48
59
  valid_keys = @config.keys
@@ -50,7 +61,6 @@ module Praegustator
50
61
  end
51
62
  end
52
63
 
53
-
54
64
  module RSpec
55
65
  module Core
56
66
  class Runner
@@ -3,6 +3,9 @@ require 'praegustator'
3
3
 
4
4
  module Praegustator
5
5
  class CLI < Thor
6
+ def self.exit_on_failure?
7
+ true
8
+ end
6
9
 
7
10
  desc "taste", "test an check against a chef query"
8
11
  long_desc <<-LONGDESC
@@ -12,9 +15,8 @@ module Praegustator
12
15
  def taste(query,check)
13
16
  config_file_path = Dir.pwd+"/.praegustator.yml"
14
17
  Praegustator.configure_with config_file_path
15
- recipes_dir = Praegustator.config['spec']['recipes_dir']
16
- recipes = Dir[Dir.pwd+"/#{recipes_dir}/**/*_recipe.rb"] if recipes.empty?
17
- Praegustator::Executor.new.execute(recipes)
18
+ Praegustator::Executor.new.execute_check(query,check)
19
+ exit 1 if Praegustator.reporter.status == 'failed'
18
20
  end
19
21
 
20
22
  desc "validate", "validate infrastructure by executing checks defined in recipe files"
@@ -24,6 +26,9 @@ module Praegustator
24
26
  recipes_dir = Praegustator.config['spec']['recipes_dir']
25
27
  recipes = Dir[Dir.pwd+"/#{recipes_dir}/**/*_recipe.rb"] if recipes.empty?
26
28
  Praegustator::Executor.new.execute(recipes)
29
+
30
+ Praegustator.reporter.status
31
+ exit 1 if Praegustator.reporter.status == 'failed'
27
32
  end
28
33
 
29
34
  desc "init" , "setup praegustator"
@@ -2,12 +2,18 @@ require 'praegustator'
2
2
 
3
3
  module Praegustator
4
4
  class Executor
5
+ def initialize
6
+ end
5
7
  def execute(recipes)
6
8
  recipes.each do |recipe|
7
9
  suits = Praegustator::Dsl.new.parse_file(recipe)
8
10
  suits.each(&:execute)
9
11
  end
10
12
  end
13
+ def execute_check(query,check)
14
+ suite = Praegustator::TestSuite.new(query)
15
+ suite.check check
16
+ suite.execute
17
+ end
11
18
  end
12
19
  end
13
-
@@ -0,0 +1,74 @@
1
+ module Praegustator
2
+ class Reporter
3
+
4
+ def initialize
5
+ @test_suite_restults = {}
6
+ end
7
+
8
+ def status
9
+ @status
10
+ end
11
+
12
+ def add_spec_result node,json
13
+ print_status node.ipaddress , json[:summary][:failure_count] > 0
14
+ return if json[:examples].nil?
15
+ @test_suite_restults[node] = json
16
+ print_summary node.query, json[:summary]
17
+ print_passed json[:examples].select{|e| e[:status] =='passed'}.map{|e| e[:full_description]}
18
+ print_failures json[:examples].select{|e| e[:status] =='failed'}.map{|e| e[:full_description]}
19
+ end
20
+
21
+ private
22
+ def print_status ipaddress , failed
23
+ if failed
24
+ $stdout.puts "[Failed] #{ipaddress}".colorize(:red)
25
+ else
26
+ $stdout.puts "[Passed] #{ipaddress}".colorize(:green)
27
+ end
28
+ end
29
+
30
+ def print_summary query , summary
31
+ return if !Praegustator.config['report']['show_summary']
32
+ $stdout.puts ""
33
+ $stdout.puts " Summary:".colorize(:blue)
34
+ $stdout.puts " Chef Query: #{query}".colorize(:blue)
35
+ $stdout.puts " Duration: #{summary[:duration]}".colorize(:blue)
36
+ $stdout.puts " Total Checks: #{summary[:example_count]}".colorize(:blue)
37
+ $stdout.puts " Failed Checks: #{summary[:failure_count]}".colorize(:blue)
38
+ end
39
+
40
+
41
+ def print_all_summary
42
+ duration = @test_suite_restults
43
+ example_count = @test_suite_restults
44
+ failure_count = @test_suite_restults
45
+ $stdout.puts ""
46
+ $stdout.puts " Summary:".colorize(:blue)
47
+ $stdout.puts " Duration: #{duration}".colorize(:blue)
48
+ $stdout.puts " Total Checks: #{example_count}".colorize(:blue)
49
+ $stdout.puts " Failed Checks: #{failure_count}".colorize(:blue)
50
+ end
51
+
52
+
53
+
54
+ def print_passed specs
55
+ return if !Praegustator.config['report']['show_passed']
56
+ return if specs.empty?
57
+ $stdout.puts ""
58
+ $stdout.puts " (#{specs.count}) Passed:".colorize(:green)
59
+ specs.each do |spec|
60
+ $stdout.puts " #{spec}".colorize(:green)
61
+ end
62
+ end
63
+
64
+ def print_failures specs
65
+ return if !Praegustator.config['report']['show_failed']
66
+ return if specs.empty?
67
+ $stdout.puts ""
68
+ $stdout.puts " (#{specs.count}) Failures:".colorize(:red)
69
+ specs.each do |spec|
70
+ $stdout.puts " #{spec}".colorize(:red)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -36,16 +36,20 @@ end
36
36
  knife_location = '~/.chef/knife.rb' if knife_location == ''
37
37
 
38
38
  content = <<-EOF
39
- spec:
40
- recipes_dir: "#{dir}/"
41
- checks_dir: "#{dir}/checks/"
42
- chef:
43
- knife_location: "#{knife_location}"
44
- # ssh:
45
- # user: "root"
46
- # pasword: nil
47
- # keys: [ "~/.ssh/id_rsa" ]
48
- EOF
39
+ spec:
40
+ recipes_dir: "#{dir}/"
41
+ checks_dir: "#{dir}/checks/"
42
+ chef:
43
+ knife_location: "#{knife_location}"
44
+ #ssh:
45
+ # user: "root"
46
+ # pasword: nil
47
+ # keys: [ "~/.ssh/id_rsa" ]
48
+ report:
49
+ show_summary: true
50
+ show_passed: true
51
+ show_failed: true
52
+ EOF
49
53
  create_file ".praegustator.yml",content
50
54
  end
51
55
 
@@ -1,3 +1,3 @@
1
1
  module Praegustator
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -9,6 +9,7 @@ module Praegustator
9
9
  ::Chef::Config.from_file(File.expand_path(Praegustator.config['chef']['knife_location']))
10
10
  chef_query = ::Chef::Search::Query.new
11
11
  nodes = chef_query.search('node',query).first rescue []
12
+ $stdout.puts "no node found for search criteria: #{query}" if nodes.empty?
12
13
  nodes.map{|n| Praegustator::Node.new n.name , n.ipaddress ,query}
13
14
  end
14
15
  end
@@ -1,5 +1,4 @@
1
1
  require 'praegustator'
2
- require 'praegustator/wrappers/output_parser'
3
2
  require 'net/ssh'
4
3
  require 'serverspec'
5
4
  require 'rspec/core/formatters/json_formatter'
@@ -11,52 +10,47 @@ include Serverspec::Helper::DetectOS
11
10
  module Praegustator
12
11
  module Wrappers
13
12
  class ServerSpec
14
-
15
- def initialize
16
- @parser = Praegustator::Wrappers::OutputParser.new
13
+ def execute suite
14
+ suite.nodes.each do |node|
15
+ ENV['TARGET_HOST'] = node.ipaddress
16
+ spec_files = suite.checks.keys.map{|check| "#{Dir.pwd}/#{Praegustator.config['spec']['checks_dir']}/#{check}.rb" }
17
+ run_rspec suite, node, spec_files
18
+ end
17
19
  end
18
20
 
19
-
20
- def execute suite
21
- suite.nodes.each do |n|
22
- ENV['TARGET_HOST'] = n.ipaddress
23
- formatter = RSpec::Core::Formatters::JsonFormatter.new(nil)
24
- RSpec.clear_remaining_example_groups
25
- load 'serverspec.rb'
21
+ private
22
+ def run_rspec suite, node, spec_files
23
+ formatter = RSpec::Core::Formatters::JsonFormatter.new(nil)
24
+ RSpec.clear_remaining_example_groups
25
+ load 'serverspec.rb'
26
+ begin
27
+ params = suite.params
28
+ params[:current_node] = node
29
+ RSpec.configure do |config|
30
+ config.host = ENV['TARGET_HOST']
31
+ options = Net::SSH::Config.for(config.host)
32
+ user = options[:user] || Praegustator.config['ssh']['user']
33
+ options[:keys] = Praegustator.config['ssh']['keys'] if options[:keys].nil?
34
+ options[:timeout] = 10
35
+ config.ssh = Net::SSH.start(config.host, user, options)
36
+ config.os = backend.check_os
37
+ set_property params
38
+ config.output = $stdout
39
+ config.color_enabled = true
40
+ config.tty = true
41
+ reporter = RSpec::Core::Reporter.new(formatter)
42
+ config.instance_variable_set(:@reporter, reporter)
43
+ end
26
44
  begin
27
- params = suite.params
28
- params[:current_node] = n
29
- RSpec.configure do |c|
30
- c.host = ENV['TARGET_HOST']
31
- options = Net::SSH::Config.for(c.host)
32
- user = options[:user] || Praegustator.config['ssh']['user']
33
- options[:keys] = Praegustator.config['ssh']['keys'] if options[:keys].nil?
34
- options[:timeout] = 10
35
- c.ssh = Net::SSH.start(c.host, user, options)
36
- c.os = backend.check_os
37
- set_property params
38
- c.output = $stdout
39
- c.color_enabled = true
40
- c.tty = true
41
- if Praegustator.config['log_level'] == 'debug'
42
- formatter = RSpec::Core::Formatters::DocumentationFormatter.new(c.output)
43
- end
44
- reporter = RSpec::Core::Reporter.new(formatter)
45
- c.instance_variable_set(:@reporter, reporter)
46
- end
47
- spec_files = suite.checks.keys.map{|check| "#{Dir.pwd}/#{Praegustator.config['spec']['checks_dir']}/#{check}.rb" }
48
- begin
49
- RSpec::Core::Runner.run_patched(spec_files, $stderr, $stdout)
50
- rescue Exception => e
51
- $stderr.puts "!! spec execution failed #{e.message}"
52
- end
53
- if Praegustator.config['log_level'] != 'debug'
54
- @parser.parse n,formatter.output_hash
55
- end
45
+ RSpec::Core::Runner.run_patched(spec_files, $stderr, $stdout)
56
46
  rescue Exception => e
57
47
  $stderr.puts e.backtrace.join("\n")
58
- $stderr.puts "!! failed for #{n.ipaddress} : #{e.message}"
48
+ $stderr.puts "!! spec execution failed #{e.message}"
59
49
  end
50
+ Praegustator.reporter.add_spec_result node,formatter.output_hash
51
+ rescue Exception => e
52
+ $stderr.puts e.backtrace.join("\n")
53
+ $stderr.puts "!! failed for #{node.ipaddress} : #{e.message}"
60
54
  end
61
55
  end
62
56
  end
@@ -20,13 +20,14 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency "thor"
22
22
  spec.add_runtime_dependency "rspec", ">= 2.13.0"
23
- spec.add_runtime_dependency "chef"
23
+ spec.add_runtime_dependency "chef" , ">= 11.4.4"
24
24
  spec.add_runtime_dependency "serverspec"
25
25
  spec.add_runtime_dependency "colorize"
26
26
 
27
27
  spec.add_development_dependency "bundler", "~> 1.3"
28
28
  spec.add_development_dependency "rake"
29
- spec.add_development_dependency "rspec", "~> 2.6"
29
+ spec.add_development_dependency "rspec", ">= 2.13.0"
30
+ spec.add_development_dependency "rspec-mocks"
30
31
  spec.add_development_dependency "cucumber"
31
32
  spec.add_development_dependency "aruba"
32
33
  end
data/readme.md CHANGED
@@ -28,7 +28,7 @@ role("web-server") do
28
28
  check "application/nginx"
29
29
  check "application/puma"
30
30
  check "application/s3cmd"
31
- properties name: "foo"
31
+ properties :name => "foo"
32
32
  end
33
33
  ```
34
34
  The `role` method mark all nodes with that role . Within the
@@ -2,22 +2,23 @@ require "spec_helper"
2
2
 
3
3
  describe Praegustator::CLI do
4
4
  describe "#taste" do
5
+ it "execute_check from executor" do
6
+ Praegustator::Executor.any_instance.should_receive(:execute_check)
7
+ Praegustator::CLI.new.taste("foo","bar")
8
+ end
5
9
  end
6
10
 
7
11
  describe "#validate" do
8
- before do
9
- Praegustator::Executor.any_instance.stub(:execute).and_return('foo')
12
+ it "execute from executor" do
13
+ Praegustator::Executor.any_instance.should_receive(:execute)
14
+ Praegustator::CLI.new.validate("foo","bar")
10
15
  end
11
- subject { Praegustator::CLI.new.validate("foo") }
12
- it { should eq 'foo' }
13
16
  end
14
17
 
15
18
  describe "#init" do
16
- describe "#init" do
17
- it "sets knife_location" do
18
- Praegustator::Setup.any_instance.should_receive(:init).with("foo")
19
- Praegustator::CLI.new.init("foo")
20
- end
19
+ it "sets knife_location" do
20
+ Praegustator::Setup.any_instance.should_receive(:init).with("foo")
21
+ Praegustator::CLI.new.init("foo")
21
22
  end
22
23
  end
23
24
  end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Praegustator::Executor do
4
+ before :each do
5
+ Praegustator::Wrappers::Chef.stub(:search)
6
+ end
7
+
8
+ describe "#execute" do
9
+ it "calls execute in test suits" do
10
+ execute_count =0
11
+ Praegustator::TestSuite.any_instance.stub(:execute) do |arg|
12
+ execute_count+=1
13
+ end
14
+ Praegustator::Executor.new.execute [File.dirname(__FILE__)+"/resources/sample/suits/staging.rb", File.dirname(__FILE__)+"/resources/sample/suits/default.rb"]
15
+ execute_count.should == 6
16
+ end
17
+ end
18
+
19
+ describe "#execute_check" do
20
+ it "call execute in test suite" do
21
+ Praegustator::TestSuite.any_instance.should_receive(:execute)
22
+ Praegustator::Executor.new.execute_check "foo","bar"
23
+ end
24
+ end
25
+ end
@@ -1,4 +1,5 @@
1
1
  require "praegustator"
2
+ require "rspec/mocks"
2
3
  require 'pathname'
3
4
 
4
5
  RSpec.configure do |config|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: praegustator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - timusg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-27 00:00:00.000000000 Z
11
+ date: 2013-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 11.4.4
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 11.4.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: serverspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -112,16 +112,30 @@ dependencies:
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - ! '>='
116
116
  - !ruby/object:Gem::Version
117
- version: '2.6'
117
+ version: 2.13.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - ! '>='
123
123
  - !ruby/object:Gem::Version
124
- version: '2.6'
124
+ version: 2.13.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-mocks
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: cucumber
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -184,16 +198,17 @@ files:
184
198
  - lib/praegustator/dsl.rb
185
199
  - lib/praegustator/executor.rb
186
200
  - lib/praegustator/node.rb
201
+ - lib/praegustator/reporter.rb
187
202
  - lib/praegustator/setup.rb
188
203
  - lib/praegustator/test_suite.rb
189
204
  - lib/praegustator/version.rb
190
205
  - lib/praegustator/wrappers/chef.rb
191
- - lib/praegustator/wrappers/output_parser.rb
192
206
  - lib/praegustator/wrappers/server_spec.rb
193
207
  - praegustator.gemspec
194
208
  - readme.md
195
209
  - spec/praegustator/cli_spec.rb
196
210
  - spec/praegustator/dsl_spec.rb
211
+ - spec/praegustator/executor_spec.rb
197
212
  - spec/praegustator/resources/sample/config/praegustator.yml
198
213
  - spec/praegustator/resources/sample/suits/default.rb
199
214
  - spec/praegustator/resources/sample/suits/staging.rb
@@ -231,6 +246,7 @@ test_files:
231
246
  - features/support/setup.rb
232
247
  - spec/praegustator/cli_spec.rb
233
248
  - spec/praegustator/dsl_spec.rb
249
+ - spec/praegustator/executor_spec.rb
234
250
  - spec/praegustator/resources/sample/config/praegustator.yml
235
251
  - spec/praegustator/resources/sample/suits/default.rb
236
252
  - spec/praegustator/resources/sample/suits/staging.rb
@@ -1,21 +0,0 @@
1
- require 'praegustator'
2
- require 'colorize'
3
-
4
- module Praegustator
5
- module Wrappers
6
- class OutputParser
7
- def parse node,json
8
- $stdout.puts "Node: #{node.ipaddress.colorize(:blue)} ChefQuery: #{node.query.colorize(:blue)}"
9
- $stdout.puts " Checks:"
10
- return if json[:examples].nil?
11
- json[:examples].each do |e|
12
- if e[:status] == 'passed'
13
- $stdout.puts " #{e[:full_description]} : #{e[:status]}".colorize(:green)
14
- else
15
- $stdout.puts " #{e[:full_description]} : #{e[:status]}".colorize(:red)
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end