puppetlabs_spec_helper 0.4.1 → 0.5.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f853c33fa6a79d464edde31b1b1e860145394dfa
4
+ data.tar.gz: c9e8ce7b36ea0efc45394bf8c1d7f3b0e53761b6
5
+ SHA512:
6
+ metadata.gz: d09259b7c9942c87e2012c41af6771aa8b8d3a3320d9140f814228c86e740baeabb755b29d81416c64abcf7980b434380a5911be0a5cab910134010f399bc7d1
7
+ data.tar.gz: 9a9f143383c5d85044ac1311b7461f4a15b34021b9a4908cc2083b69fec7d5026a62b997e31d7169cdd39ff78d64c345e21abbd413a3b3ecfb313450baacf77d
@@ -0,0 +1,3 @@
1
+ Gemfile.lock
2
+ pkg/
3
+ .*.sw*
@@ -0,0 +1,4 @@
1
+ ---
2
+ exclude:
3
+ - rake
4
+ - rspec
data/CHANGELOG CHANGED
@@ -1,3 +1,15 @@
1
+ 2014-06-06 - Release 0.4.2
2
+
3
+ Summary:
4
+ This release corrects the pinning of rspec for modules which are not rspec 3
5
+ compatible yet.
6
+
7
+ Bugfixes:
8
+ * Pin to 2.x range for rspec 2
9
+ * Fix aborting rake task when packaging gem
10
+ * Fix puppet issue tracker url
11
+ * Fix issue with running `git reset` in the incorrect dir
12
+
1
13
  2013-02-08 Puppet Labs <info@puppetlabs.com> - 0.4.1
2
14
  * (#18165) Mark tests pending on broken puppet versions
3
15
  * (#18165) Initialize TestHelper as soon as possible
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source :rubygems
2
+
3
+ gemspec
4
+
5
+ if File.exists? "#{__FILE__}.local"
6
+ eval(File.read("#{__FILE__}.local"), binding)
7
+ end
8
+
9
+ # vim:filetype=ruby
@@ -0,0 +1,186 @@
1
+ Puppet Labs Spec Helper
2
+ =======================
3
+
4
+ The Short Version
5
+ -----------------
6
+
7
+ This repository is meant to provide a single source of truth for how to
8
+ initialize different Puppet versions for spec testing.
9
+
10
+ The common use case is a module such as
11
+ [stdlib](http://forge.puppetlabs.com/puppetlabs/stdlib) that works with many
12
+ versions of Puppet. The stdlib module should require the spec helper in this
13
+ repository, which will in turn automatically figure out the version of Puppet
14
+ being tested against and perform version specific initialization.
15
+
16
+ Other "customers" that should use this module are:
17
+
18
+ * [Facter](https://github.com/puppetlabs/facter)
19
+ * [PuppetDB](https://github.com/puppetlabs/puppetdb)
20
+ * [Mount Providers](https://github.com/puppetlabs/puppetlabs-mount_providers)
21
+
22
+ Usage
23
+ =====
24
+
25
+ When developing or testing modules, simply clone this repository and install the
26
+ gem it contains.
27
+
28
+ $ git clone git://github.com/puppetlabs/puppetlabs_spec_helper.git
29
+ $ cd puppetlabs_spec_helper
30
+ $ rake package:gem
31
+ $ gem install pkg/puppetlabs_spec_helper-*.gem
32
+
33
+ Add this to your project's spec\_helper.rb:
34
+
35
+ require 'puppetlabs_spec_helper/module_spec_helper'
36
+
37
+ Add this to your project's Rakefile:
38
+
39
+ require 'puppetlabs_spec_helper/rake_tasks'
40
+
41
+ And run the spec tests:
42
+
43
+ $ cd $modulename
44
+ $ rake spec
45
+
46
+ Issues
47
+ ======
48
+
49
+ Please file issues against this project at the [Puppet Labs Issue
50
+ Tracker](https://tickets.puppetlabs.com/browse/MODULES)
51
+
52
+ The Long Version
53
+ ----------------
54
+
55
+ Purpose of this Project
56
+ =======================
57
+
58
+ This project is intended to serve two purposes:
59
+
60
+ 1. To serve as a bridge between external projects and multiple versions of puppet;
61
+ in other words, if your project has a dependency on puppet, you shouldn't need
62
+ to need to worry about the details of how to initialize puppet's state for
63
+ testing, no matter what version of puppet you are testing against.
64
+ 2. To provide some convenience classes / methods for doing things like creating
65
+ tempfiles, common rspec matchers, etc. These classes are in the puppetlabs\_spec
66
+ directory.
67
+ 3. To provide a common set of Rake tasks so that the procedure for testing modules
68
+ is unified.
69
+
70
+ To Use this Project
71
+ ===================
72
+
73
+ The most common usage scenario is that you will check out the 'master'
74
+ branch of this project from github, and install it as a rubygem.
75
+ There should be few or no cases where you would want to have any other
76
+ branch of this project besides master/HEAD.
77
+
78
+ Initializing Puppet for Testing
79
+ ===============================
80
+
81
+ In most cases, your project should be able to define a spec\_helper.rb that includes
82
+ just this one simple line:
83
+
84
+ require 'puppetlabs_spec_helper/puppet_spec_helper'
85
+
86
+ Then, as long as the gem is installed, you should be all set.
87
+
88
+ If you are using rspec-puppet for module testing, you will want to include a different
89
+ library:
90
+
91
+ require 'puppetlabs_spec_helper/module_spec_helper'
92
+
93
+ NOTE that this is specifically for initializing Puppet's core. If your project does
94
+ not have any dependencies on puppet and you just want to use the utility classes,
95
+ see the next section.
96
+
97
+
98
+ Using Utility Classes
99
+ =====================
100
+ If you'd like to use the Utility classes (PuppetlabsSpec::Files,
101
+ PuppetlabsSpec::Fixtures), you just need to add this to your project's spec\_helper.rb:
102
+
103
+ require 'puppetlabs_spec_helper/puppetlabs_spec_helper'
104
+
105
+ NOTE that the above line happens automatically if you've required
106
+ 'puppetlabs\_spec\_helper/puppet\_spec\_helper', so you don't need to do both.
107
+
108
+ In either case, you'll have all of the functionality of Puppetlabs::Files,
109
+ Puppetlabs::Fixtures, etc., mixed-in to your rspec context.
110
+
111
+ Using Fixtures
112
+ ==============
113
+ `puppetlabs_spec_helper` has the ability to populate the
114
+ `spec/fixtures/modules` directory with dependent modules when `rake spec` or
115
+ `rake spec_prep` is run. To do so, all required modules should be listed in a
116
+ file named `.fixtures.yml` in the root of the project.
117
+
118
+ Fixtures Examples
119
+ -----------------
120
+ Basic fixtures that will symlink `spec/fixtures/modules/my_modules` to the
121
+ project root:
122
+
123
+ fixtures:
124
+ symlinks:
125
+ my_module: "#{source_dir}"
126
+
127
+
128
+ Add `firewall` and `stdlib` as required module fixtures:
129
+
130
+ fixtures:
131
+ repositories:
132
+ firewall: "git://github.com/puppetlabs/puppetlabs-firewall"
133
+ stdlib: "git://github.com/puppetlabs/puppetlabs-stdlib"
134
+ symlinks:
135
+ my_module: "#{source_dir}"
136
+
137
+ Specify that the git tag `2.4.2` of `stdlib' should be checked out:
138
+
139
+ fixtures:
140
+ repositories:
141
+ firewall: "git://github.com/puppetlabs/puppetlabs-firewall"
142
+ stdlib:
143
+ repo: "git://github.com/puppetlabs/puppetlabs-stdlib"
144
+ ref: "2.6.0"
145
+ symlinks:
146
+ my_module: "#{source_dir}"
147
+
148
+ Install modules from Puppet Forge:
149
+
150
+ fixtures:
151
+ forge_modules:
152
+ firewall: "puppetlabs/firewall"
153
+ stdlib:
154
+ repo: "puppetlabs/stdlib"
155
+ ref: "2.6.0"
156
+
157
+
158
+ Testing Parser Functions
159
+ ========================
160
+
161
+ This library provides a consistent way to create a Puppet::Parser::Scope object
162
+ suitable for use in a testing harness with the intent of testing the expected
163
+ behavior of parser functions distributed in modules.
164
+
165
+ Previously, modules would do something like this:
166
+
167
+ describe "split()" do
168
+ let(:scope) { Puppet::Parser::Scope.new }
169
+ it "should split 'one;two' on ';' into [ 'one', 'two' ]" do
170
+ scope.function_split(['one;two', ';']).should == [ 'one', 'two' ]
171
+ end
172
+ end
173
+
174
+ This will not work beyond Puppet 2.7 as we have changed the behavior of the
175
+ scope initializer in Puppet 3.0. Modules should instead initialize scope
176
+ instances in a manner decoupled from the internal behavior of Puppet:
177
+
178
+ require 'puppetlabs_spec_helper/puppetlabs_spec/puppet_internals'
179
+ describe "split()" do
180
+ let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
181
+ it "should split 'one;two' on ';' into [ 'one', 'two' ]" do
182
+ scope.function_split(['one;two', ';']).should == [ 'one', 'two' ]
183
+ end
184
+ end
185
+
186
+ EOF
@@ -0,0 +1,33 @@
1
+ require 'rake'
2
+ require 'rake/packagetask'
3
+ require 'rubygems/package_task'
4
+
5
+ task :default do
6
+ sh %{rake -T}
7
+ end
8
+
9
+ require 'fileutils'
10
+
11
+ def version
12
+ require 'puppetlabs_spec_helper/version'
13
+ PuppetlabsSpecHelper::Version::STRING
14
+ end
15
+
16
+ namespace :package do
17
+ desc "Create the gem"
18
+ task :gem do
19
+ spec = Gem::Specification.load("puppetlabs_spec_helper.gemspec")
20
+ Dir.mkdir("pkg") rescue nil
21
+ if Gem::Version.new(`gem -v`) >= Gem::Version.new("2.0.0.a")
22
+ Gem::Package.build(spec)
23
+ else
24
+ Gem::Builder.new(spec).build
25
+ end
26
+ FileUtils.move("puppetlabs_spec_helper-#{version}.gem", "pkg")
27
+ end
28
+ end
29
+
30
+ desc "Cleanup pkg directory"
31
+ task :clean do
32
+ FileUtils.rm_rf("pkg")
33
+ end
@@ -3,13 +3,8 @@ require 'puppetlabs_spec_helper/puppetlabs_spec_helper'
3
3
  # Don't want puppet getting the command line arguments for rake or autotest
4
4
  ARGV.clear
5
5
 
6
- # This is needed because we're using mocha with rspec instead of Test::Unit or MiniTest
7
- ENV['MOCHA_OPTIONS']='skip_integration'
8
-
9
6
  require 'puppet'
10
- gem 'rspec', '>=2.0.0'
11
7
  require 'rspec/expectations'
12
- require 'mocha/api'
13
8
 
14
9
  require 'pathname'
15
10
  require 'tmpdir'
@@ -153,8 +148,6 @@ end
153
148
 
154
149
  # And here is where we do the main rspec configuration / setup.
155
150
  RSpec.configure do |config|
156
- config.mock_with :mocha
157
-
158
151
  # determine whether we can use the new API or not, and call the appropriate initializer method.
159
152
  if (defined?(Puppet::Test::TestHelper))
160
153
  Puppet::PuppetSpecInitializer.initialize_via_testhelper(config)
@@ -7,7 +7,13 @@ task :default => [:help]
7
7
  desc "Run spec tests on an existing fixtures directory"
8
8
  RSpec::Core::RakeTask.new(:spec_standalone) do |t|
9
9
  t.rspec_opts = ['--color']
10
- t.pattern = 'spec/{classes,defines,unit,functions,hosts}/**/*_spec.rb'
10
+ t.pattern = 'spec/{classes,defines,unit,functions,hosts,integration}/**/*_spec.rb'
11
+ end
12
+
13
+ desc "Run beaker acceptance tests"
14
+ RSpec::Core::RakeTask.new(:beaker) do |t|
15
+ t.rspec_opts = ['--color']
16
+ t.pattern = 'spec/acceptance'
11
17
  end
12
18
 
13
19
  desc "Generate code coverage information"
@@ -33,7 +39,7 @@ def fixtures(category)
33
39
  end
34
40
 
35
41
  result = {}
36
- if fixtures.include? category
42
+ if fixtures.include? category and fixtures[category] != nil
37
43
  fixtures[category].each do |fixture, opts|
38
44
  if opts.instance_of?(String)
39
45
  source = opts
@@ -43,33 +49,78 @@ def fixtures(category)
43
49
  elsif opts.instance_of?(Hash)
44
50
  target = "spec/fixtures/modules/#{fixture}"
45
51
  real_source = eval('"'+opts["repo"]+'"')
46
- result[real_source] = { "target" => target, "ref" => opts["ref"] }
52
+ result[real_source] = { "target" => target, "ref" => opts["ref"], "scm" => opts["scm"] }
47
53
  end
48
54
  end
49
55
  end
50
56
  return result
51
57
  end
52
58
 
59
+ def clone(scm, remote, target, ref=nil)
60
+ args = []
61
+ case scm
62
+ when 'hg'
63
+ args.push('clone')
64
+ args.push('-u', ref) if ref
65
+ args.push(remote, target)
66
+ when 'git'
67
+ args.push('clone', remote, target)
68
+ else
69
+ fail "Unfortunately #{scm} is not supported yet"
70
+ end
71
+ system("#{scm} #{args.flatten.join ' '}")
72
+ end
73
+
74
+ def revision(scm, target, ref)
75
+ args = []
76
+ case scm
77
+ when 'hg'
78
+ args.push('update', 'clean', '-r', ref)
79
+ when 'git'
80
+ args.push('reset', '--hard', ref)
81
+ else
82
+ fail "Unfortunately #{scm} is not supported yet"
83
+ end
84
+ system("cd #{target} && #{scm} #{args.flatten.join ' '}")
85
+ end
86
+
53
87
  desc "Create the fixtures directory"
54
88
  task :spec_prep do
55
89
  fixtures("repositories").each do |remote, opts|
90
+ scm = 'git'
56
91
  if opts.instance_of?(String)
57
92
  target = opts
58
- ref = "refs/remotes/origin/master"
59
93
  elsif opts.instance_of?(Hash)
60
94
  target = opts["target"]
61
95
  ref = opts["ref"]
96
+ scm = opts["scm"] if opts["scm"]
62
97
  end
63
98
 
64
- unless File::exists?(target) || system("git clone #{remote} #{target}")
65
- fail "Failed to clone #{remote} into #{target}"
99
+ unless File::exists?(target) || clone(scm, remote, target, ref)
100
+ fail "Failed to clone #{scm} repository #{remote} into #{target}"
66
101
  end
67
- system("cd #{target}; git reset --hard #{ref}") if ref
102
+ revision(scm, target, ref) if ref
68
103
  end
69
104
 
70
105
  FileUtils::mkdir_p("spec/fixtures/modules")
71
106
  fixtures("symlinks").each do |source, target|
72
- File::exists?(target) || FileUtils::ln_s(source, target)
107
+ File::exists?(target) || FileUtils::ln_sf(source, target)
108
+ end
109
+
110
+ fixtures("forge_modules").each do |remote, opts|
111
+ if opts.instance_of?(String)
112
+ target = opts
113
+ ref = ""
114
+ elsif opts.instance_of?(Hash)
115
+ target = opts["target"]
116
+ ref = "--version #{opts['ref']}"
117
+ end
118
+ next if File::exists?(target)
119
+ unless system("puppet module install " + ref + \
120
+ " --ignore-dependencies" \
121
+ " --target-dir spec/fixtures/modules #{remote}")
122
+ fail "Failed to install module #{remote} to #{target}"
123
+ end
73
124
  end
74
125
 
75
126
  FileUtils::mkdir_p("spec/fixtures/manifests")
@@ -87,13 +138,23 @@ task :spec_clean do
87
138
  FileUtils::rm_rf(target)
88
139
  end
89
140
 
141
+ fixtures("forge_modules").each do |remote, opts|
142
+ if opts.instance_of?(String)
143
+ target = opts
144
+ elsif opts.instance_of?(Hash)
145
+ target = opts["target"]
146
+ end
147
+ FileUtils::rm_rf(target)
148
+ end
149
+
90
150
  fixtures("symlinks").each do |source, target|
91
- FileUtils::rm(target)
151
+ FileUtils::rm_f(target)
92
152
  end
93
- site = "spec/fixtures/manifests/site.pp"
94
- if File::exists?(site) and ! File.size?(site)
95
- FileUtils::rm("spec/fixtures/manifests/site.pp")
153
+
154
+ if File.zero?("spec/fixtures/manifests/site.pp")
155
+ FileUtils::rm_f("spec/fixtures/manifests/site.pp")
96
156
  end
157
+
97
158
  end
98
159
 
99
160
  desc "Run spec tests in a clean fixtures directory"
@@ -103,6 +164,14 @@ task :spec do
103
164
  Rake::Task[:spec_clean].invoke
104
165
  end
105
166
 
167
+ desc "List available beaker nodesets"
168
+ task :beaker_nodes do
169
+ Dir['spec/acceptance/nodesets/*.yml'].sort!.select { |node|
170
+ node.slice!('.yml')
171
+ puts File.basename(node)
172
+ }
173
+ end
174
+
106
175
  desc "Build puppet module package"
107
176
  task :build do
108
177
  # This will be deprecated once puppet-module is a face.
@@ -123,6 +192,21 @@ end
123
192
  desc "Check puppet manifests with puppet-lint"
124
193
  task :lint do
125
194
  require 'puppet-lint/tasks/puppet-lint'
195
+ PuppetLint.configuration.ignore_paths = ["spec/fixtures/**/*.pp"]
196
+ end
197
+
198
+ desc "Check puppet manifest syntax"
199
+ task :syntax do
200
+ require 'puppet/face'
201
+ parser = Puppet::Face['parser', :current]
202
+
203
+ RakeFileUtils.send(:verbose, true) do
204
+ matched_files = FileList['**/*.pp'].exclude 'spec/fixtures/**/*.pp'
205
+
206
+ matched_files.to_a.each do |puppet_file|
207
+ parser.validate(puppet_file)
208
+ end
209
+ end
126
210
  end
127
211
 
128
212
  desc "Display the list of available rake tasks"
@@ -0,0 +1,5 @@
1
+ module PuppetlabsSpecHelper
2
+ module Version
3
+ STRING = '0.5.0'
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'puppetlabs_spec_helper/puppet_spec_helper'
4
+
5
+ puts "Using 'PROJECT_ROOT/puppet_spec_helper' is deprecated, please install as a gem and require 'puppetlabs_spec_helper/puppet_spec_helper' instead"
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
3
+ require "puppetlabs_spec_helper/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "puppetlabs_spec_helper"
7
+ s.version = PuppetlabsSpecHelper::Version::STRING
8
+ s.authors = ["Puppet Labs"]
9
+ s.email = ["modules-dept@puppetlabs.com"]
10
+ s.homepage = "http://github.com/puppetlabs/puppetlabs_spec_helper"
11
+ s.summary = "Standard tasks and configuration for module spec tests"
12
+ s.description = "Contains rake tasks and a standard spec_helper for running spec tests on puppet modules"
13
+ s.licenses = 'Apache-2.0'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+
19
+ # Runtime dependencies, but also probably dependencies of requiring projects
20
+ s.add_runtime_dependency 'rake'
21
+ s.add_runtime_dependency 'rspec-puppet'
22
+ s.add_runtime_dependency 'puppet'
23
+ s.add_runtime_dependency 'puppet-lint'
24
+ s.add_runtime_dependency 'rspec'
25
+ end
@@ -0,0 +1,5 @@
1
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'puppetlabs_spec_helper/puppetlabs_spec_helper'
4
+
5
+ puts "Using 'PROJECT_ROOT/puppetlabs_spec_helper' is deprecated, please install as a gem and require 'puppetlabs_spec_helper/puppetlabs_spec_helper' instead"
@@ -0,0 +1,6 @@
1
+ require 'puppet/type'
2
+
3
+ Puppet::Type.newtype(:spechelper) do
4
+ @doc = "This is the spechelper type"
5
+ end
6
+
@@ -0,0 +1,92 @@
1
+ #! /usr/bin/env ruby -S rspec
2
+
3
+ require 'puppetlabs_spec_helper/puppet_spec_helper'
4
+ require 'puppetlabs_spec_helper/puppetlabs_spec/puppet_internals'
5
+
6
+ describe PuppetlabsSpec::PuppetInternals do
7
+ describe ".scope" do
8
+ it "should return a Puppet::Parser::Scope instance" do
9
+ subject.scope.should be_a_kind_of Puppet::Parser::Scope
10
+ end
11
+
12
+ it "should be suitable for function testing" do
13
+ scope = subject.scope
14
+ scope.function_split(["one;two", ";"]).should == [ 'one', 'two' ]
15
+ end
16
+
17
+ it "should accept a compiler" do
18
+ compiler = subject.compiler
19
+
20
+ scope = subject.scope(:compiler => compiler)
21
+
22
+ scope.compiler.should == compiler
23
+ end
24
+
25
+ it "should have a source set" do
26
+ scope = subject.scope
27
+
28
+ scope.source.should_not be_nil
29
+ scope.source.should_not be_false
30
+ end
31
+ end
32
+
33
+ describe ".resource" do
34
+ it "can have a defined type" do
35
+ subject.resource(:type => :node).type.should == :node
36
+ end
37
+
38
+ it "defaults to a type of hostclass" do
39
+ subject.resource.type.should == :hostclass
40
+ end
41
+
42
+ it "can have a defined name" do
43
+ subject.resource(:name => "testingrsrc").name.should == "testingrsrc"
44
+ end
45
+
46
+ it "defaults to a name of testing" do
47
+ subject.resource.name.should == "testing"
48
+ end
49
+ end
50
+
51
+ describe ".compiler" do
52
+ let(:node) { subject.node }
53
+
54
+ it "can have a defined node" do
55
+ subject.compiler(:node => node).node.should be node
56
+ end
57
+ end
58
+
59
+ describe ".node" do
60
+ it "can have a defined name" do
61
+ subject.node(:name => "mine").name.should == "mine"
62
+ end
63
+
64
+ it "can have a defined environment" do
65
+ subject.node(:environment => "mine").environment.name.should == :mine
66
+ end
67
+
68
+ it "defaults to a name of testinghost" do
69
+ subject.node.name.should == "testinghost"
70
+ end
71
+
72
+ it "accepts facts via options for rspec-puppet" do
73
+ fact_values = { 'fqdn' => "jeff.puppetlabs.com" }
74
+ node = subject.node(:options => { :parameters => fact_values })
75
+ node.parameters.should == fact_values
76
+ end
77
+ end
78
+
79
+ describe ".function_method" do
80
+ it "accepts an injected scope" do
81
+ Puppet::Parser::Functions.expects(:function).with("my_func").returns(true)
82
+ scope = mock()
83
+ scope.expects(:method).with(:function_my_func).returns(:fake_method)
84
+ subject.function_method("my_func", :scope => scope).should == :fake_method
85
+ end
86
+ it "returns nil if the function doesn't exist" do
87
+ Puppet::Parser::Functions.expects(:function).with("my_func").returns(false)
88
+ scope = mock()
89
+ subject.function_method("my_func", :scope => scope).should be_nil
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+ require 'puppetlabs_spec_helper/puppet_spec_helper'
3
+
4
+ # ensure we can access puppet settings outside of any example group
5
+ Puppet[:confdir]
6
+
7
+ # set modulepath from which to load custom type
8
+ Puppet[:modulepath] = File.join(File.dirname(__FILE__), '..', '..')
9
+
10
+ def should_be_able_to_load_types?
11
+ return true if Puppet::Test::TestHelper.respond_to?(:initialize)
12
+
13
+ case Puppet.version
14
+ when /^2\.7\.20/
15
+ false
16
+ when /^3\.0\./
17
+ false
18
+ else
19
+ true
20
+ end
21
+ end
22
+
23
+ # construct a top-level describe block whose declared_class is a custom type in this module
24
+ describe Puppet::Type.type(:spechelper) do
25
+ it "should load the type from the modulepath" do
26
+ pending("this is only supported on newer versions of puppet", :unless => should_be_able_to_load_types?) do
27
+ described_class.should be
28
+ end
29
+ end
30
+
31
+ it "should have a doc string" do
32
+ pending("this is only supported on newer versions of puppet", :unless => should_be_able_to_load_types?) do
33
+ described_class.doc.should == "This is the spechelper type"
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "Setup of settings" do
39
+ it "sets confdir and vardir to something not meaningful to force tests to make their choice explicit" do
40
+ Puppet[:confdir].should == "/dev/null"
41
+ Puppet[:vardir].should == "/dev/null"
42
+ end
43
+ end
@@ -0,0 +1,79 @@
1
+ ENV['FOG_MOCK'] ||= 'true'
2
+ ENV['AUTOTEST'] = 'true'
3
+ ENV['WATCHR'] = '1'
4
+
5
+ system 'clear'
6
+
7
+ def growl(message)
8
+ growlnotify = `which growlnotify`.chomp
9
+ title = "Watchr Test Results"
10
+ image = case message
11
+ when /(\d+)\s+?(failure|error)/i
12
+ ($1.to_i == 0) ? "~/.watchr_images/passed.png" : "~/.watchr_images/failed.png"
13
+ else
14
+ '~/.watchr_images/unknown.png'
15
+ end
16
+ options = "-w -n Watchr --image '#{File.expand_path(image)}' -m '#{message}' '#{title}'"
17
+ system %(#{growlnotify} #{options} &)
18
+ end
19
+
20
+ def run(cmd)
21
+ puts(cmd)
22
+ `#{cmd}`
23
+ end
24
+
25
+ def run_spec_test(file)
26
+ if File.exist? file
27
+ result = run "rspec --format p --color #{file}"
28
+ growl result.split("\n").last
29
+ puts result
30
+ else
31
+ puts "FIXME: No test #{file} [#{Time.now}]"
32
+ end
33
+ end
34
+
35
+ def filter_rspec(data)
36
+ data.split("\n").find_all do |l|
37
+ l =~ /^(\d+)\s+exampl\w+.*?(\d+).*?failur\w+.*?(\d+).*?pending/
38
+ end.join("\n")
39
+ end
40
+
41
+ def run_all_tests
42
+ system('clear')
43
+ files = Dir.glob("spec/**/*_spec.rb").join(" ")
44
+ result = run "rspec #{files}"
45
+ growl_results = filter_rspec result
46
+ growl growl_results
47
+ puts result
48
+ puts "GROWL: #{growl_results}"
49
+ end
50
+
51
+ # Ctrl-\
52
+ Signal.trap 'QUIT' do
53
+ puts " --- Running all tests ---\n\n"
54
+ run_all_tests
55
+ end
56
+
57
+ @interrupted = false
58
+
59
+ # Ctrl-C
60
+ Signal.trap 'INT' do
61
+ if @interrupted then
62
+ @wants_to_quit = true
63
+ abort("\n")
64
+ else
65
+ puts "Interrupt a second time to quit"
66
+ @interrupted = true
67
+ Kernel.sleep 1.5
68
+ # raise Interrupt, nil # let the run loop catch it
69
+ run_suite
70
+ end
71
+ end
72
+
73
+ watch( 'spec/.*_spec\.rb' ) do |md|
74
+ run_all_tests
75
+ end
76
+
77
+ watch( 'lib/.*\.rb' ) do |md|
78
+ run_all_tests
79
+ end
metadata CHANGED
@@ -1,94 +1,100 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: puppetlabs_spec_helper
3
- version: !ruby/object:Gem::Version
4
- hash: 13
5
- prerelease:
6
- segments:
7
- - 0
8
- - 4
9
- - 1
10
- version: 0.4.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Puppet Labs
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-02-08 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-06-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
22
21
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-puppet
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
32
34
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: rspec
36
35
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
- requirements:
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- hash: 43
43
- segments:
44
- - 2
45
- - 9
46
- - 0
47
- version: 2.9.0
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: puppet
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
48
  type: :runtime
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: mocha
52
49
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 61
59
- segments:
60
- - 0
61
- - 10
62
- - 5
63
- version: 0.10.5
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: puppet-lint
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
64
62
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: rspec-puppet
68
63
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- none: false
71
- requirements:
72
- - - ">="
73
- - !ruby/object:Gem::Version
74
- hash: 25
75
- segments:
76
- - 0
77
- - 1
78
- - 1
79
- version: 0.1.1
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
80
76
  type: :runtime
81
- version_requirements: *id004
82
- description: Contains rake tasks and a standard spec_helper for running spec tests on puppet modules
83
- email:
84
- - puppet-dev@puppetlabs.com
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Contains rake tasks and a standard spec_helper for running spec tests
84
+ on puppet modules
85
+ email:
86
+ - modules-dept@puppetlabs.com
85
87
  executables: []
86
-
87
88
  extensions: []
88
-
89
89
  extra_rdoc_files: []
90
-
91
- files:
90
+ files:
91
+ - .gitignore
92
+ - .noexec.yaml
93
+ - CHANGELOG
94
+ - Gemfile
95
+ - LICENSE
96
+ - README.markdown
97
+ - Rakefile
92
98
  - lib/puppetlabs_spec_helper/module_spec_helper.rb
93
99
  - lib/puppetlabs_spec_helper/puppet_spec_helper.rb
94
100
  - lib/puppetlabs_spec_helper/puppetlabs_spec/files.rb
@@ -97,40 +103,40 @@ files:
97
103
  - lib/puppetlabs_spec_helper/puppetlabs_spec/puppet_internals.rb
98
104
  - lib/puppetlabs_spec_helper/puppetlabs_spec_helper.rb
99
105
  - lib/puppetlabs_spec_helper/rake_tasks.rb
100
- - LICENSE
101
- - CHANGELOG
106
+ - lib/puppetlabs_spec_helper/version.rb
107
+ - puppet_spec_helper.rb
108
+ - puppetlabs_spec_helper.gemspec
109
+ - puppetlabs_spec_helper.rb
110
+ - spec/lib/puppet/type/spechelper.rb
111
+ - spec/unit/puppetlabs_spec_helper/puppetlabs_spec/puppet_internals_spec.rb
112
+ - spec/unit/spechelper_spec.rb
113
+ - spec/watchr.rb
102
114
  homepage: http://github.com/puppetlabs/puppetlabs_spec_helper
103
- licenses: []
104
-
115
+ licenses:
116
+ - Apache-2.0
117
+ metadata: {}
105
118
  post_install_message:
106
119
  rdoc_options: []
107
-
108
- require_paths:
120
+ require_paths:
109
121
  - lib
110
- required_ruby_version: !ruby/object:Gem::Requirement
111
- none: false
112
- requirements:
113
- - - ">="
114
- - !ruby/object:Gem::Version
115
- hash: 3
116
- segments:
117
- - 0
118
- version: "0"
119
- required_rubygems_version: !ruby/object:Gem::Requirement
120
- none: false
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- hash: 3
125
- segments:
126
- - 0
127
- version: "0"
122
+ required_ruby_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
128
132
  requirements: []
129
-
130
133
  rubyforge_project:
131
- rubygems_version: 1.8.24
134
+ rubygems_version: 2.0.14
132
135
  signing_key:
133
- specification_version: 3
136
+ specification_version: 4
134
137
  summary: Standard tasks and configuration for module spec tests
135
- test_files: []
136
-
138
+ test_files:
139
+ - spec/lib/puppet/type/spechelper.rb
140
+ - spec/unit/puppetlabs_spec_helper/puppetlabs_spec/puppet_internals_spec.rb
141
+ - spec/unit/spechelper_spec.rb
142
+ - spec/watchr.rb