rspec-puppet 0.1.3 → 0.1.4

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.
@@ -34,12 +34,12 @@ module RSpec::Puppet
34
34
  end
35
35
 
36
36
  if !self.respond_to?(:params) || params == {}
37
- Puppet[:code] = import_str + "include #{klass_name}"
37
+ code = import_str + "include #{klass_name}"
38
38
  else
39
- Puppet[:code] = import_str + 'class' + " { \"" + klass_name + "\": " + params.keys.map { |r| "#{r.to_s} => #{params[r].inspect}"
39
+ code = import_str + 'class' + " { \"" + klass_name + "\": " + params.keys.map { |r| "#{r.to_s} => #{params[r].inspect}"
40
40
  }.join(',' ) + " }"
41
41
  end
42
- Puppet[:code] = pre_cond + "\n" + Puppet[:code]
42
+ code = pre_cond + "\n" + code
43
43
 
44
44
  nodename = self.respond_to?(:node) ? node : Puppet[:certname]
45
45
  facts_val = {
@@ -49,7 +49,7 @@ module RSpec::Puppet
49
49
  }
50
50
  facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
51
51
 
52
- build_catalog(nodename, facts_val)
52
+ build_catalog(nodename, facts_val, code)
53
53
  end
54
54
  end
55
55
  end
@@ -41,7 +41,7 @@ module RSpec::Puppet
41
41
  pre_cond = ""
42
42
  end
43
43
 
44
- Puppet[:code] = pre_cond + "\n" + import_str + define_name + " { \"" + title + "\": " + param_str + " }"
44
+ code = pre_cond + "\n" + import_str + define_name + " { \"" + title + "\": " + param_str + " }"
45
45
 
46
46
  nodename = self.respond_to?(:node) ? node : Puppet[:certname]
47
47
  facts_val = {
@@ -51,7 +51,7 @@ module RSpec::Puppet
51
51
  }
52
52
  facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
53
53
 
54
- build_catalog(nodename, facts_val)
54
+ build_catalog(nodename, facts_val, code)
55
55
  end
56
56
  end
57
57
  end
@@ -9,9 +9,36 @@ module RSpec::Puppet
9
9
  Puppet[:libdir] = Dir["#{Puppet[:modulepath]}/*/lib"].entries.join(File::PATH_SEPARATOR)
10
10
  Puppet::Parser::Functions.autoloader.loadall
11
11
 
12
- scope = Puppet::Parser::Scope.new
12
+ # if we specify a pre_condition, we should ensure that we compile that code
13
+ # into a catalog that is accessible from the scope where the function is called
14
+ if self.respond_to? :pre_condition
15
+ Puppet[:code] = pre_condition
16
+ nodename = self.respond_to?(:node) ? node : Puppet[:certname]
17
+ facts_val = {
18
+ 'hostname' => nodename.split('.').first,
19
+ 'fqdn' => nodename,
20
+ 'domain' => nodename.split('.').last,
21
+ }
22
+ facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
23
+ # we need to get a compiler, b/c we can attach that to a scope
24
+ @compiler = build_compiler(nodename, facts_val)
25
+ else
26
+ @compiler = nil
27
+ end
28
+
29
+ scope = Puppet::Parser::Scope.new(:compiler => @compiler)
13
30
 
14
31
  scope.method "function_#{function_name}".to_sym
15
32
  end
33
+
34
+ def compiler
35
+ @compiler
36
+ end
37
+ # get a compiler with an attached compiled catalog
38
+ def build_compiler(node_name, fact_values)
39
+ compiler = Puppet::Parser::Compiler.new(Puppet::Node.new(node_name, :parameters => fact_values))
40
+ compiler.compile
41
+ compiler
42
+ end
16
43
  end
17
44
  end
@@ -13,7 +13,7 @@ module RSpec::Puppet
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
15
  Puppet[:config] = self.respond_to?(:config) ? config : RSpec.configuration.config
16
- Puppet[:code] = ""
16
+ code = ""
17
17
 
18
18
  nodename = self.class.top_level_description.downcase
19
19
 
@@ -24,7 +24,7 @@ module RSpec::Puppet
24
24
  }
25
25
  facts_val.merge!(munge_facts(facts)) if self.respond_to?(:facts)
26
26
 
27
- build_catalog(nodename, facts_val)
27
+ build_catalog(nodename, facts_val, code)
28
28
  end
29
29
  end
30
30
  end
@@ -51,7 +51,7 @@ module RSpec::Puppet
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
53
  elsif value.kind_of?(Array) then
54
- unless rsrc_hsh[name.to_sym].join == value.join
54
+ unless Array(rsrc_hsh[name.to_sym]).flatten.join == value.flatten.join
55
55
  ret = false
56
56
  (@errors ||= []) << "#{name.to_s} set to `#{value.inspect}` but it is set to `#{rsrc_hsh[name.to_sym].inspect}` in the catalogue"
57
57
  end
@@ -1,6 +1,12 @@
1
1
  module RSpec::Puppet
2
2
  module Support
3
- def build_catalog nodename, facts_val
3
+
4
+ @@cache = {}
5
+
6
+ protected
7
+ def build_catalog_without_cache(nodename, facts_val, code)
8
+ Puppet[:code] = code
9
+
4
10
  node_obj = Puppet::Node.new(nodename)
5
11
 
6
12
  node_obj.merge(facts_val)
@@ -13,6 +19,11 @@ module RSpec::Puppet
13
19
  end
14
20
  end
15
21
 
22
+ public
23
+ def build_catalog *args
24
+ @@cache[args] ||= self.build_catalog_without_cache(*args)
25
+ end
26
+
16
27
  def munge_facts(facts)
17
28
  output = {}
18
29
  facts.keys.each { |key| output[key.to_s] = facts[key] }
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rspec-puppet'
3
- s.version = '0.1.3'
3
+ s.version = '0.1.4'
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'
@@ -8,7 +8,7 @@ describe 'sysctl::common' do
8
8
  it 'should fail if the parameter is not contained in the resource' do
9
9
  expect do
10
10
  subject.should contain_exec('sysctl/reload').with('foo' => 'bar')
11
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
11
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
12
12
  end
13
13
  it 'should pass if the parameters are contained in the resource' do
14
14
  subject.should contain_exec('sysctl/reload').with(
@@ -27,7 +27,7 @@ describe 'sysctl::common' do
27
27
  it 'should fail if any of the parameter names are contained in the resource' do
28
28
  expect do
29
29
  subject.should contain_exec('sysctl/reload').without(['foo', 'returns'])
30
- end.should raise_error(RSpec::Expectations::ExpectationNotMetError)
30
+ end.to raise_error(RSpec::Expectations::ExpectationNotMetError)
31
31
  end
32
32
  end
33
33
  end
@@ -6,6 +6,6 @@ describe 'split' do
6
6
  it { should_not run.with_params('foo').and_raise_error(Puppet::DevError) }
7
7
 
8
8
  it 'something' do
9
- expect { subject.call('foo') }.should raise_error(Puppet::ParseError)
9
+ expect { subject.call('foo') }.to raise_error(Puppet::ParseError)
10
10
  end
11
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: 29
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 3
10
- version: 0.1.3
9
+ - 4
10
+ version: 0.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Tim Sharpe
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-07 00:00:00 -07:00
18
+ date: 2012-08-09 00:00:00 +10:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency