rspec-puppet 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
4
+
5
+ require 'rspec-puppet'
6
+ require 'optparse'
7
+
8
+ options = {
9
+ :module_name => nil,
10
+ }
11
+
12
+ OptionParser.new do |opts|
13
+ opts.banner = "Usage: rspec-puppet-init [options]"
14
+
15
+ opts.on('-n', '--name NAME', 'The name of the module (override autodetection)') do |v|
16
+ options[:module_name] = v
17
+ end
18
+ end.parse!
19
+
20
+ RSpec::Puppet::Setup.run(options[:module_name])
@@ -2,10 +2,12 @@ require 'puppet'
2
2
  require 'rspec'
3
3
  require 'rspec-puppet/matchers'
4
4
  require 'rspec-puppet/example'
5
+ require 'rspec-puppet/setup'
5
6
 
6
7
  RSpec.configure do |c|
7
8
  c.add_setting :module_path, :default => '/etc/puppet/modules'
8
9
  c.add_setting :manifest_dir, :default => nil
9
10
  c.add_setting :manifest, :default => nil
10
11
  c.add_setting :template_dir, :default => nil
12
+ c.add_setting :config, :default => nil
11
13
  end
@@ -12,6 +12,7 @@ module RSpec::Puppet
12
12
  Puppet[:manifestdir] = self.respond_to?(:manifest_dir) ? manifest_dir : RSpec.configuration.manifest_dir
13
13
  Puppet[:manifest] = self.respond_to?(:manifest) ? manifest : RSpec.configuration.manifest
14
14
  Puppet[:templatedir] = self.respond_to?(:template_dir) ? template_dir : RSpec.configuration.template_dir
15
+ Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config
15
16
 
16
17
  klass_name = self.class.top_level_description.downcase
17
18
 
@@ -14,6 +14,7 @@ module RSpec::Puppet
14
14
  Puppet[:manifestdir] = self.respond_to?(:manifest_dir) ? manifest_dir : RSpec.configuration.manifest_dir
15
15
  Puppet[:manifest] = self.respond_to?(:manifest) ? manifest : RSpec.configuration.manifest
16
16
  Puppet[:templatedir] = self.respond_to?(:template_dir) ? template_dir : RSpec.configuration.template_dir
17
+ Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config
17
18
 
18
19
  # If we're testing a standalone module (i.e. one that's outside of a
19
20
  # puppet tree), the autoloader won't work, so we need to fudge it a bit.
@@ -12,6 +12,7 @@ module RSpec::Puppet
12
12
  Puppet[:manifestdir] = self.respond_to?(:manifest_dir) ? manifest_dir : RSpec.configuration.manifest_dir
13
13
  Puppet[:manifest] = self.respond_to?(:manifest) ? manifest : RSpec.configuration.manifest
14
14
  Puppet[:templatedir] = self.respond_to?(:template_dir) ? template_dir : RSpec.configuration.template_dir
15
+ Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config
15
16
  Puppet[:code] = ""
16
17
 
17
18
  nodename = self.class.top_level_description.downcase
@@ -17,7 +17,7 @@ module RSpec::Puppet
17
17
 
18
18
  def without(*args, &block)
19
19
  params = args.shift
20
- @expected_undef_params = (@expected_undef_params || []) | params.to_a
20
+ @expected_undef_params = (@expected_undef_params || []) | Array(params)
21
21
  self
22
22
  end
23
23
 
@@ -50,6 +50,11 @@ module RSpec::Puppet
50
50
  ret = false
51
51
  (@errors ||= []) << "#{name.to_s} matching `#{value.inspect}` but its value of `#{rsrc_hsh[name.to_sym].inspect}` does not"
52
52
  end
53
+ elsif value.kind_of?(Array) then
54
+ unless rsrc_hsh[name.to_sym].join == value.join
55
+ ret = false
56
+ (@errors ||= []) << "#{name.to_s} set to `#{value.inspect}` but it is set to `#{rsrc_hsh[name.to_sym].inspect}` in the catalogue"
57
+ end
53
58
  else
54
59
  unless rsrc_hsh[name.to_sym].to_s == value.to_s
55
60
  ret = false
@@ -81,7 +86,32 @@ module RSpec::Puppet
81
86
  end
82
87
 
83
88
  def description
84
- "create #{@referenced_type}[#{@title}]"
89
+ values = []
90
+ if @expected_params
91
+ @expected_params.each do |name, value|
92
+ if value.kind_of?(Regexp)
93
+ values << "#{name.to_s} matching #{value.inspect}"
94
+ else
95
+ values << "#{name.to_s} => #{value.inspect}"
96
+ end
97
+ end
98
+ end
99
+
100
+ if @expected_undef_params
101
+ @expected_undef_params.each do |name, value|
102
+ values << "#{name.to_s} undefined"
103
+ end
104
+ end
105
+
106
+ unless values.empty?
107
+ if values.length == 1
108
+ value_str = " with #{values.first}"
109
+ else
110
+ value_str = " with #{values[0..-2].join(", ")} and #{values[-1]}"
111
+ end
112
+ end
113
+
114
+ "contain #{@referenced_type}[#{@title}]#{value_str}"
85
115
  end
86
116
 
87
117
  private
@@ -0,0 +1,144 @@
1
+ require 'puppet'
2
+ require 'fileutils'
3
+
4
+ module RSpec::Puppet
5
+ class Setup
6
+ def self.run(module_name=nil)
7
+ unless is_module_dir?
8
+ $stderr.puts "Does not appear to be a Puppet module. Aborting"
9
+ return false
10
+ end
11
+
12
+ if module_name.nil?
13
+ module_name = get_module_name
14
+ if module_name.nil?
15
+ $stderr.puts "Unable to determine module name. Aborting"
16
+ return false
17
+ end
18
+ end
19
+
20
+ [
21
+ 'spec',
22
+ 'spec/classes',
23
+ 'spec/defines',
24
+ 'spec/functions',
25
+ 'spec/hosts',
26
+ 'spec/fixtures',
27
+ 'spec/fixtures/manifests',
28
+ 'spec/fixtures/modules',
29
+ "spec/fixtures/modules/#{module_name}",
30
+ ].each { |dir| safe_mkdir(dir) }
31
+
32
+ safe_touch('spec/fixtures/manifests/site.pp')
33
+
34
+ ['manifests','lib','files','templates'].each do |dir|
35
+ if File.exist? dir
36
+ safe_make_symlink("../../../../#{dir}", "spec/fixtures/modules/#{module_name}/#{dir}")
37
+ end
38
+ end
39
+
40
+ safe_create_spec_helper
41
+ safe_create_rakefile
42
+ end
43
+
44
+ protected
45
+ def self.get_module_name
46
+ p = Puppet::Parser::Lexer.new
47
+ module_name = nil
48
+ Dir["manifests/*.pp"].entries.each do |manifest|
49
+ p.string = File.read(manifest)
50
+ tokens = p.fullscan
51
+ i = tokens.index { |token| [:CLASS, :DEFINE].include? token.first }
52
+ unless i.nil?
53
+ module_name = tokens[i + 1].last[:value].split('::').first
54
+ break
55
+ end
56
+ end
57
+ module_name
58
+ end
59
+
60
+ def self.is_module_dir?
61
+ Dir["*"].entries.include? "manifests"
62
+ end
63
+
64
+ def self.safe_mkdir(dir)
65
+ if File.exists? dir
66
+ unless File.directory? dir
67
+ $stderr.puts "!! #{dir} already exists and is not a directory"
68
+ end
69
+ else
70
+ FileUtils.mkdir dir
71
+ puts " + #{dir}/"
72
+ end
73
+ end
74
+
75
+ def self.safe_touch(file)
76
+ if File.exists? file
77
+ unless File.file? file
78
+ $stderr.puts "!! #{file} already exists and is not a regular file"
79
+ end
80
+ else
81
+ FileUtils.touch file
82
+ puts " + #{file}"
83
+ end
84
+ end
85
+
86
+ def self.safe_create_spec_helper
87
+ content = <<-EOF
88
+ require 'rspec-puppet'
89
+
90
+ fixture_path = File.expand_path(File.join(__FILE__, '..', 'fixtures'))
91
+
92
+ RSpec.configure do |c|
93
+ c.module_path = File.join(fixture_path, 'modules')
94
+ c.manifest_dir = File.join(fixture_path, 'manifests')
95
+ end
96
+ EOF
97
+ if File.exists? 'spec/spec_helper.rb'
98
+ old_content = File.read('spec/spec_helper.rb')
99
+ if old_content != content
100
+ $stderr.puts "!! spec/spec_helper.rb already exists and differs from template"
101
+ end
102
+ else
103
+ File.open('spec/spec_helper.rb', 'w') do |f|
104
+ f.puts content
105
+ end
106
+ puts ' + spec/spec_helper.rb'
107
+ end
108
+ end
109
+
110
+ def self.safe_make_symlink(source, target)
111
+ if File.exists? target
112
+ unless File.symlink? target
113
+ $stderr.puts "!! #{file} already exists and is not a symlink"
114
+ end
115
+ else
116
+ FileUtils.ln_s(source, target)
117
+ puts " + #{target}"
118
+ end
119
+ end
120
+
121
+ def self.safe_create_rakefile
122
+ content = <<-EOF
123
+ require 'rake'
124
+
125
+ require 'rspec/core/rake_task'
126
+
127
+ RSpec::Core::RakeTask.new(:spec) do |t|
128
+ t.pattern = 'spec/*/*_spec.rb'
129
+ end
130
+ EOF
131
+ if File.exists? 'Rakefile'
132
+ old_content = File.read('Rakefile')
133
+ if old_content != content
134
+ $stderr.puts "!! Rakefile already exists and differs from template"
135
+ end
136
+ else
137
+ File.open('Rakefile', 'w') do |f|
138
+ f.puts content
139
+ end
140
+ puts ' + Rakefile'
141
+ end
142
+ end
143
+ end
144
+ end
@@ -1,11 +1,14 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rspec-puppet'
3
- s.version = '0.1.2'
3
+ s.version = '0.1.3'
4
4
  s.homepage = 'https://github.com/rodjek/rspec-puppet/'
5
5
  s.summary = 'RSpec tests for your Puppet manifests'
6
6
  s.description = 'RSpec tests for your Puppet manifests'
7
7
 
8
+ s.executables = ['rspec-puppet-init']
9
+
8
10
  s.files = [
11
+ 'bin/rspec-puppet-init',
9
12
  'lib/rspec-puppet/example/class_example_group.rb',
10
13
  'lib/rspec-puppet/example/define_example_group.rb',
11
14
  'lib/rspec-puppet/example/function_example_group.rb',
@@ -16,6 +19,7 @@ Gem::Specification.new do |s|
16
19
  'lib/rspec-puppet/matchers/include_class.rb',
17
20
  'lib/rspec-puppet/matchers/run.rb',
18
21
  'lib/rspec-puppet/matchers.rb',
22
+ 'lib/rspec-puppet/setup.rb',
19
23
  'lib/rspec-puppet/support.rb',
20
24
  'lib/rspec-puppet.rb',
21
25
  'LICENSE',
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'boolean' do
4
- let(:title) { 'bool.testing' }
5
- let(:params) { { :bool => false } }
3
+ if Puppet::PUPPETVERSION !~ /0\.2/
4
+ describe 'boolean' do
5
+ let(:title) { 'bool.testing' }
6
+ let(:params) { { :bool => false } }
6
7
 
7
- it { should create_notify("bool testing")\
8
- .with_message("This will print when \$bool is false.") }
9
-
8
+ it { should create_notify("bool testing")\
9
+ .with_message("This will print when \$bool is false.") }
10
+ end
10
11
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-puppet
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tim Sharpe
@@ -15,7 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-02-15 00:00:00 Z
18
+ date: 2012-04-07 00:00:00 -07:00
19
+ default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: rspec
@@ -33,13 +34,14 @@ dependencies:
33
34
  version_requirements: *id001
34
35
  description: RSpec tests for your Puppet manifests
35
36
  email: tim@sharpe.id.au
36
- executables: []
37
-
37
+ executables:
38
+ - rspec-puppet-init
38
39
  extensions: []
39
40
 
40
41
  extra_rdoc_files: []
41
42
 
42
43
  files:
44
+ - bin/rspec-puppet-init
43
45
  - lib/rspec-puppet/example/class_example_group.rb
44
46
  - lib/rspec-puppet/example/define_example_group.rb
45
47
  - lib/rspec-puppet/example/function_example_group.rb
@@ -50,6 +52,7 @@ files:
50
52
  - lib/rspec-puppet/matchers/include_class.rb
51
53
  - lib/rspec-puppet/matchers/run.rb
52
54
  - lib/rspec-puppet/matchers.rb
55
+ - lib/rspec-puppet/setup.rb
53
56
  - lib/rspec-puppet/support.rb
54
57
  - lib/rspec-puppet.rb
55
58
  - LICENSE
@@ -68,6 +71,7 @@ files:
68
71
  - spec/fixtures/modules/sysctl/manifests/init.pp
69
72
  - spec/functions/split_spec.rb
70
73
  - spec/spec_helper.rb
74
+ has_rdoc: true
71
75
  homepage: https://github.com/rodjek/rspec-puppet/
72
76
  licenses: []
73
77
 
@@ -97,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
101
  requirements: []
98
102
 
99
103
  rubyforge_project:
100
- rubygems_version: 1.8.6
104
+ rubygems_version: 1.6.2
101
105
  signing_key:
102
106
  specification_version: 3
103
107
  summary: RSpec tests for your Puppet manifests