puppet-catalog-test 0.1.0 → 0.2.0

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.
data/README.md CHANGED
@@ -1,16 +1,22 @@
1
- # Test all your puppet catalogs for compiler errors
1
+ # Test all your puppet catalogs for compiler warnings and errors
2
+
3
+ puppet-catalog-test is a tool for capturing and testing warnings and errors the puppet-compiler is emitting during the compilation process.
4
+
5
+ For a more detailed insight into the puppet-compiler, you can take a look at <http://www.masterzen.fr/2012/03/17/puppet-internals-the-compiler/>.
2
6
 
3
7
  ## Installation
4
8
 
5
- gem install puppet-catalog-tests
9
+ gem install puppet-catalog-test
6
10
 
7
11
  ## Usage
8
12
  ```bash
9
13
  $ puppet-catalog-test -h
14
+
10
15
  USAGE: puppet-catalog-test [options]
11
16
  -m, --module-paths PATHS Location of puppet modules, separated by collon
12
17
  -M, --manifest-path PATH Location of the puppet manifests (site.pp)
13
- -f, --filter PATTERN Filter test cases by pattern
18
+ -i, --include-pattern PATTERN Include only test cases that match pattern
19
+ -e, --exclude-pattern PATTERN Exclude test cases that match pattern
14
20
  -s, --scenario FILE Scenario definition to use
15
21
  -h, --help Show this message
16
22
  ```
@@ -61,7 +67,8 @@ namespace :catalog do
61
67
  t.module_paths = ["modules"]
62
68
  t.manifest_path = File.join("scripts", "site.pp")
63
69
 
64
- t.filter = ENV["filter"] if ENV["filter"]
70
+ t.include_pattern = ENV["include"]
71
+ t.exclude_pattern = ENV["exclude"]
65
72
  end
66
73
  end
67
74
  ```
@@ -96,7 +103,8 @@ namespace :catalog do
96
103
  "operatingsystem" => "RedHat"
97
104
  }
98
105
 
99
- t.filter = ENV["filter"] if ENV["filter"]
106
+ t.include_pattern = ENV["include"]
107
+ t.exclude_pattern = ENV["exclude"]
100
108
  end
101
109
  end
102
110
  ```
@@ -115,7 +123,8 @@ namespace :catalog do
115
123
 
116
124
  t.scenario_yaml = "scenarios.yml"
117
125
 
118
- t.filter = ENV["filter"] if ENV["filter"]
126
+ t.include_pattern = ENV["include"]
127
+ t.exclude_pattern = ENV["exclude"]
119
128
  end
120
129
  end
121
130
  ```
@@ -153,7 +162,7 @@ REDHAT_db-dev:
153
162
 
154
163
  ## Reporters (output plugins)
155
164
 
156
- Per default puppet-catalog-test will use the StdoutReporter which will represent the result like in the examples above. Besides this you can use in your own Reporter.
165
+ Per default puppet-catalog-test uses the StdoutReporter which prints the result like in the examples above. Besides this you can use in your own Reporter.
157
166
 
158
167
  Puppet-Catalog-Test also ships a JunitXmlReporter which creates a junit compatible xml report.
159
168
 
@@ -1,11 +1,12 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # allow loading library from workspace
4
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
5
+
3
6
  require "puppet-catalog-test"
4
7
  require "optparse"
5
8
 
6
- options = {
7
- :filter => PuppetCatalogTest::DEFAULT_FILTER
8
- }
9
+ options = {}
9
10
 
10
11
  opt_parser = OptionParser.new do |opts|
11
12
  opts.banner = "USAGE: #{File.basename($0)} [options]"
@@ -18,8 +19,12 @@ opt_parser = OptionParser.new do |opts|
18
19
  options[:manifest_path] = arg
19
20
  end
20
21
 
21
- opts.on("-f", "--filter PATTERN", "Filter test cases by pattern") do |arg|
22
- options[:filter] = arg
22
+ opts.on("-i", "--include-pattern PATTERN", "Include only test cases that match pattern") do |arg|
23
+ options[:include_pattern] = arg
24
+ end
25
+
26
+ opts.on("-e", "--exclude-pattern PATTERN", "Exclude test cases that match pattern") do |arg|
27
+ options[:exclude_pattern] = arg
23
28
  end
24
29
 
25
30
  opts.on("-s", "--scenario FILE", "Scenario definition to use") do |arg|
@@ -39,12 +44,18 @@ if options.empty?
39
44
  exit
40
45
  end
41
46
 
42
- pct = PuppetCatalogTest::TestRunner.new(options[:manifest_path], options[:module_paths])
47
+ pct = PuppetCatalogTest::TestRunner.new(
48
+ :manifest_path => options[:manifest_path],
49
+ :module_paths => options[:module_paths])
50
+
51
+ filter = PuppetCatalogTest::Filter.new
52
+ filter.include_pattern = options[:include_pattern] if options.has_key?(:include_pattern)
53
+ filter.exclude_pattern = options[:exclude_pattern] if options.has_key?(:exclude_pattern)
43
54
 
44
55
  if options[:scenario]
45
- pct.load_scenario_yaml(options[:scenario], options[:filter])
56
+ pct.load_scenario_yaml(options[:scenario], filter)
46
57
  else
47
- pct.load_all(options[:filter])
58
+ pct.load_all(filter)
48
59
  end
49
60
 
50
61
  pct.run_tests!
@@ -1,8 +1,9 @@
1
1
  module PuppetCatalogTest
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
 
4
4
  DEFAULT_FILTER = /.*/
5
5
 
6
+ require "puppet-catalog-test/filter"
6
7
  require "puppet-catalog-test/test_runner"
7
8
  require "puppet-catalog-test/rake_task"
8
9
  end
@@ -0,0 +1,10 @@
1
+ module PuppetCatalogTest
2
+ class Filter
3
+ attr_accessor :include_pattern, :exclude_pattern
4
+
5
+ def initialize(include_pattern = DEFAULT_FILTER, exclude_pattern = nil)
6
+ @include_pattern = include_pattern
7
+ @exclude_pattern = exclude_pattern
8
+ end
9
+ end
10
+ end
@@ -8,15 +8,14 @@ module PuppetCatalogTest
8
8
  attr_accessor :module_paths
9
9
  attr_accessor :manifest_path
10
10
  attr_accessor :scenario_yaml
11
- attr_accessor :filter
11
+ attr_accessor :include_pattern
12
+ attr_accessor :exclude_pattern
12
13
  attr_accessor :facts
13
14
  attr_accessor :reporter
14
15
 
15
16
  def initialize(name, &task_block)
16
17
  desc "Compile all puppet catalogs" unless ::Rake.application.last_comment
17
18
 
18
- @filter = PuppetCatalogTest::DEFAULT_FILTER
19
-
20
19
  task name do
21
20
  task_block.call(self) if task_block
22
21
  setup
@@ -24,7 +23,17 @@ module PuppetCatalogTest
24
23
  end
25
24
 
26
25
  def setup
27
- pct = TestRunner.new(@manifest_path, @module_paths)
26
+ puppet_config = {
27
+ :manifest_path => @manifest_path,
28
+ :module_paths => @module_paths
29
+ }
30
+
31
+ pct = TestRunner.new(puppet_config)
32
+
33
+ @filter = Filter.new
34
+
35
+ @filter.include_pattern = @include_pattern if @include_pattern
36
+ @filter.exclude_pattern = @exclude_pattern if @exclude_pattern
28
37
 
29
38
  if @scenario_yaml
30
39
  pct.load_scenario_yaml(@scenario_yaml, @filter)
@@ -12,7 +12,11 @@ module PuppetCatalogTest
12
12
  attr_reader :test_cases
13
13
  attr_reader :total_duration
14
14
 
15
- def initialize(manifest_path, module_paths, stdout_target = $stdout)
15
+ def initialize(puppet_config, stdout_target = $stdout)
16
+ if !puppet_config
17
+ raise ArgumentError, "No puppet_config hash supplied"
18
+ end
19
+
16
20
  @test_cases = []
17
21
  @exit_on_fail = true
18
22
  @out = stdout_target
@@ -21,6 +25,10 @@ module PuppetCatalogTest
21
25
 
22
26
  @total_duration = nil
23
27
 
28
+ manifest_path = puppet_config[:manifest_path]
29
+ module_paths = puppet_config[:module_paths]
30
+ config_dir = puppet_config[:config_dir]
31
+
24
32
  raise ArgumentError, "[ERROR] manifest_path must be specified" if !manifest_path
25
33
  raise ArgumentError, "[ERROR] manifest_path (#{manifest_path}) does not exist" if !FileTest.exist?(manifest_path)
26
34
 
@@ -29,6 +37,10 @@ module PuppetCatalogTest
29
37
  raise ArgumentError, "[ERROR] module_path (#{mp}) does not exist" if !FileTest.directory?(mp)
30
38
  end
31
39
 
40
+ if config_dir
41
+ Puppet.settings.handlearg("--confdir", config_dir)
42
+ end
43
+
32
44
  Puppet.settings.handlearg("--config", ".")
33
45
  Puppet.settings.handlearg("--manifest", manifest_path)
34
46
 
@@ -44,13 +56,17 @@ module PuppetCatalogTest
44
56
 
45
57
  scenarios.each do |tc_name, facts|
46
58
  next if tc_name =~ /^__/
47
- next if filter && !tc_name.match(filter)
59
+
60
+ if filter
61
+ next if filter.exclude_pattern && tc_name.match(filter.exclude_pattern)
62
+ next if filter.include_pattern && !tc_name.match(filter.include_pattern)
63
+ end
48
64
 
49
65
  add_test_case(tc_name, facts)
50
66
  end
51
67
  end
52
68
 
53
- def load_all(filter = PuppetCatalogTest::DEFAULT_FILTER, facts = {})
69
+ def load_all(filter = Filter.new, facts = {})
54
70
  nodes = collect_puppet_nodes(filter)
55
71
 
56
72
  nodes.each do |n|
@@ -85,7 +101,16 @@ module PuppetCatalogTest
85
101
  def collect_puppet_nodes(filter)
86
102
  parser = Puppet::Parser::Parser.new("environment")
87
103
  nodes = parser.environment.known_resource_types.nodes.keys
88
- nodes.select { |node| node.match(filter) }
104
+
105
+ if filter.exclude_pattern
106
+ nodes.delete_if { |node| node.match(filter.exclude_pattern) }
107
+ end
108
+
109
+ if filter.include_pattern
110
+ nodes.delete_if { |node| !node.match(filter.include_pattern) }
111
+ end
112
+
113
+ nodes
89
114
  end
90
115
 
91
116
  def run_tests!
@@ -108,6 +133,7 @@ module PuppetCatalogTest
108
133
  @reporter.report_passed_test_case(tc)
109
134
  end
110
135
  rescue => error
136
+ p error if $DEBUG
111
137
  tc.duration = Time.now - tc_start_time
112
138
  tc.error = error.message
113
139
  tc.passed = false
@@ -1,9 +1,9 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'puppet-catalog-test'
3
- s.version = '0.1.0'
3
+ s.version = '0.2.0'
4
4
  s.homepage = 'https://github.com/invadersmustdie/puppet-catalog-test/'
5
- s.summary = 'Tests all your puppet catalogs for compiler errors'
6
- s.description = 'Tests all your puppet catalogs for compiler errors.'
5
+ s.summary = 'Test all your puppet catalogs for compiler warnings and errors'
6
+ s.description = 'Test all your puppet catalogs for compiler warnings and errors.'
7
7
 
8
8
  s.executables = ['puppet-catalog-test']
9
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-catalog-test
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-01-27 00:00:00.000000000 Z
12
+ date: 2013-03-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: puppet
@@ -27,7 +27,7 @@ dependencies:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0'
30
- description: Tests all your puppet catalogs for compiler errors.
30
+ description: Test all your puppet catalogs for compiler warnings and errors.
31
31
  email: rene.lengwinat@googlemail.com
32
32
  executables:
33
33
  - puppet-catalog-test
@@ -39,6 +39,7 @@ files:
39
39
  - Rakefile
40
40
  - README.md
41
41
  - puppet-catalog-test.gemspec
42
+ - lib/puppet-catalog-test/filter.rb
42
43
  - lib/puppet-catalog-test/junit_xml_reporter.rb
43
44
  - lib/puppet-catalog-test/rake_task.rb
44
45
  - lib/puppet-catalog-test/stdout_reporter.rb
@@ -68,5 +69,6 @@ rubyforge_project:
68
69
  rubygems_version: 1.8.24
69
70
  signing_key:
70
71
  specification_version: 3
71
- summary: Tests all your puppet catalogs for compiler errors
72
+ summary: Test all your puppet catalogs for compiler warnings and errors
72
73
  test_files: []
74
+ has_rdoc: