rspec-puppet 2.10.0 → 2.12.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5080461a94379bc7c865bed5eaa5584f911379ea08bdf7af878ffd24ff23424c
4
- data.tar.gz: eac73ffab8b13a3ded43d3533c4c454a168d61511f8b73bea4fb94227232cb66
3
+ metadata.gz: c0983cc8fe444bc2035b1e58df39027ab7589cbeae175ace159a384dea8ef2cf
4
+ data.tar.gz: 8d91008e48102d7053911236a0173daa8daf64e94274a5f6046a45656770c8fa
5
5
  SHA512:
6
- metadata.gz: 7b5c1d81b22bca79e3b5c7edde653396d7cbc3506c66d60d69be618066fcdbe75782b29adffe35f89046dafcb3b7db2faec5b30a25eb6b57f5d91d1e12631bf8
7
- data.tar.gz: 35833aa537d9f12c11131108bd2f664e74e0ea47f8d8c7029efd9a86c2b344c2ea3a9dfe10dca91eb96efe2128ba748320b805ea4778ed72b8578cda7069c634
6
+ metadata.gz: 5c2a790b3d4e4f7dc14dce67ba3c1e2c635534962acfa8523390aa2b07389c216c7ffb1cbddccd5ebd0e627372267dad4f07c59293e5fd36ce3d659b9d0c35bd
7
+ data.tar.gz: 7c9d11d0c5047af4ad2dd7a7743c2e5ff341257f9f2036beabd4b23a88294bf22e8d7e282f1a95cef230a66e7b6e5e5f2c429fb95a265116dd341bc38698aaa7
data/CHANGELOG.md CHANGED
@@ -2,6 +2,22 @@
2
2
  All notable changes to this project will be documented in this file. This
3
3
  project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [2.12.0]
6
+
7
+ ### Added
8
+ * Handle nil autorequire results ([#22](https://github.com/puppetlabs/rspec-puppet/pull/22))
9
+ * Add the ability to use kind_of matchers ([#24](https://github.com/puppetlabs/rspec-puppet/pull/24))
10
+
11
+ ## [2.11.1]
12
+
13
+ ### Fixed
14
+ * Ensure FacterImpl consistency between example groups ([#19](https://github.com/puppetlabs/rspec-puppet/pull/19))
15
+
16
+ ## [2.11.0]
17
+
18
+ ### Added
19
+ * Add setting to use custom Facter implementation ([GH-16](https://github.com/puppetlabs/rspec-puppet/pull/16))
20
+
5
21
  ## [2.10.0]
6
22
  The release sees rspec-puppet move into the puppetlabs namespace
7
23
 
@@ -560,7 +576,9 @@ Thanks to Adrien Thebo, Alex Harvey, Brian, Dan Bode, Dominic Cleal, Javier Pala
560
576
  ## 1.0.1 and earlier
561
577
  For changelog of versions 1.0.1 and earlier, see http://rspec-puppet.com/changelog/
562
578
 
563
- [2.x]: https://github.com/puppetlabs/rspec-puppet/compare/v2.10.0...master
579
+ [2.x]: https://github.com/puppetlabs/rspec-puppet/compare/v2.11.1...master
580
+ [2.11.1]: https://github.com/puppetlabs/rspec-puppet/compare/v2.11.0..v2.11.1
581
+ [2.11.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.10.0...v2.11.0
564
582
  [2.10.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.9.0...v2.10.0
565
583
  [2.9.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.8.0...v2.9.0
566
584
  [2.8.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.7.10...v2.8.0
data/README.md CHANGED
@@ -230,6 +230,20 @@ In some circumstances (e.g. where your nodename/certname is not the same as
230
230
  your FQDN), this behaviour is undesirable and can be disabled by changing this
231
231
  setting to `false`.
232
232
 
233
+ #### facter\_implementation
234
+ Type | Default | Puppet Version(s)
235
+ ------- | -------- | -----------------
236
+ String | `facter` | 6.25+, 7.12+
237
+
238
+ Configures rspec-puppet to use a specific Facter implementation for running
239
+ unit tests. If the `rspec` implementation is set and Puppet does not support
240
+ it, rspec-puppet will warn and fall back to the `facter` implementation.
241
+ Setting an unsupported option will make rspec-puppet raise an error.
242
+
243
+ * `facter` - Use the default implementation, honoring the Facter version specified in the Gemfile
244
+ * `rspec` - Use a custom hash-based implementation of Facter defined in
245
+ rspec-puppet (this provides a considerable gain in speed if tests are run with Facter 4)
246
+
233
247
  ## Naming conventions
234
248
 
235
249
  For clarity and consistency, I recommend that you use the following directory
@@ -1,3 +1,5 @@
1
+ require 'rspec-puppet/facter_impl'
2
+
1
3
  module RSpec::Puppet
2
4
  module Adapters
3
5
 
@@ -108,6 +110,21 @@ module RSpec::Puppet
108
110
  end
109
111
 
110
112
  class Adapter40 < Base
113
+ #
114
+ # @api private
115
+ #
116
+ # Set the FacterImpl constant to the given Facter implementation or noop
117
+ # if the constant is already set. If a proc is given, it will only be
118
+ # called if FacterImpl is not defined.
119
+ #
120
+ # @param impl [Object, Proc] An object or a proc that implements the Facter API
121
+ def set_facter_impl(impl)
122
+ return if defined?(FacterImpl)
123
+
124
+ impl = impl.call if impl.is_a?(Proc)
125
+ Object.send(:const_set, :FacterImpl, impl)
126
+ end
127
+
111
128
  def setup_puppet(example_group)
112
129
  super
113
130
 
@@ -186,6 +203,12 @@ module RSpec::Puppet
186
203
  end
187
204
 
188
205
  class Adapter4X < Adapter40
206
+ def setup_puppet(example_group)
207
+ super
208
+
209
+ set_facter_impl(Facter)
210
+ end
211
+
189
212
  def settings_map
190
213
  super.concat([
191
214
  [:trusted_server_facts, :trusted_server_facts]
@@ -194,6 +217,48 @@ module RSpec::Puppet
194
217
  end
195
218
 
196
219
  class Adapter6X < Adapter40
220
+ #
221
+ # @api private
222
+ #
223
+ # Check to see if Facter runtime implementations are supported in the
224
+ # current Puppet version
225
+ #
226
+ # @return [Boolean] true if runtime implementations are supported
227
+ def supports_facter_runtime?
228
+ unless defined?(@supports_facter_runtime)
229
+ begin
230
+ Puppet.runtime[:facter]
231
+ @supports_facter_runtime = true
232
+ rescue
233
+ @supports_facter_runtime = false
234
+ end
235
+ end
236
+
237
+ @supports_facter_runtime
238
+ end
239
+
240
+ def setup_puppet(example_group)
241
+ case RSpec.configuration.facter_implementation.to_sym
242
+ when :rspec
243
+ if supports_facter_runtime?
244
+ # Lazily instantiate FacterTestImpl here to optimize memory
245
+ # allocation, as the proc will only be called if FacterImpl is unset
246
+ set_facter_impl(proc { RSpec::Puppet::FacterTestImpl.new })
247
+ Puppet.runtime[:facter] = FacterImpl
248
+ else
249
+ warn "Facter runtime implementations are not supported in Puppet #{Puppet.version}, continuing with facter_implementation 'facter'"
250
+ RSpec.configuration.facter_implementation = :facter
251
+ set_facter_impl(Facter)
252
+ end
253
+ when :facter
254
+ set_facter_impl(Facter)
255
+ else
256
+ raise "Unsupported facter_implementation '#{RSpec.configuration.facter_implementation}'"
257
+ end
258
+
259
+ super
260
+ end
261
+
197
262
  def settings_map
198
263
  super.concat([
199
264
  [:basemodulepath, :basemodulepath],
@@ -0,0 +1,49 @@
1
+ module RSpec::Puppet
2
+
3
+ # Implements a simple hash-based version of Facter to be used in module tests
4
+ # that use rspec-puppet.
5
+ class FacterTestImpl
6
+ def initialize
7
+ @facts = {}
8
+ end
9
+
10
+ def value(fact_name)
11
+ @facts[fact_name.to_s]
12
+ end
13
+
14
+ def clear
15
+ @facts.clear
16
+ end
17
+
18
+ def to_hash
19
+ @facts
20
+ end
21
+
22
+ def add(name, options = {}, &block)
23
+ raise 'Facter.add expects a block' unless block_given?
24
+ @facts[name.to_s] = instance_eval(&block)
25
+ end
26
+
27
+ # noop methods
28
+ def debugging(arg); end
29
+
30
+ def reset; end
31
+
32
+ def search(*paths); end
33
+
34
+ def setup_logging; end
35
+
36
+ private
37
+
38
+ def setcode(string = nil, &block)
39
+ if block_given?
40
+ value = block.call
41
+ else
42
+ value = string
43
+ end
44
+
45
+ value
46
+ end
47
+ end
48
+ end
49
+
@@ -313,6 +313,8 @@ module RSpec::Puppet
313
313
  if resource.resource_type.respond_to?(func)
314
314
  resource.resource_type.send(func) do |t, b|
315
315
  Array(resource.to_ral.instance_eval(&b)).each do |dep|
316
+ next if dep.nil?
317
+
316
318
  res = "#{t.to_s.capitalize}[#{dep}]"
317
319
  if r = relationship_refs(res, type, visited)
318
320
  results << res
@@ -35,6 +35,8 @@ module RSpec::Puppet
35
35
  case @expected_return
36
36
  when Regexp
37
37
  return !!(@actual_return =~ @expected_return)
38
+ when RSpec::Mocks::ArgumentMatchers::KindOf, RSpec::Matchers::AliasedMatcher
39
+ return @expected_return === @actual_return
38
40
  else
39
41
  return @actual_return == @expected_return
40
42
  end
@@ -337,7 +337,7 @@ module RSpec::Puppet
337
337
  {"servername" => "fqdn",
338
338
  "serverip" => "ipaddress"
339
339
  }.each do |var, fact|
340
- if value = Facter.value(fact)
340
+ if value = FacterImpl.value(fact)
341
341
  server_facts[var] = value
342
342
  else
343
343
  warn "Could not retrieve fact #{fact}"
@@ -345,8 +345,8 @@ module RSpec::Puppet
345
345
  end
346
346
 
347
347
  if server_facts["servername"].nil?
348
- host = Facter.value(:hostname)
349
- if domain = Facter.value(:domain)
348
+ host = FacterImpl.value(:hostname)
349
+ if domain = FacterImpl.value(:domain)
350
350
  server_facts["servername"] = [host, domain].join(".")
351
351
  else
352
352
  server_facts["servername"] = host
@@ -478,8 +478,8 @@ module RSpec::Puppet
478
478
 
479
479
  def stub_facts!(facts)
480
480
  Puppet.settings[:autosign] = false if Puppet.settings.include? :autosign
481
- Facter.clear
482
- facts.each { |k, v| Facter.add(k, :weight => 999) { setcode { v } } }
481
+ FacterImpl.clear
482
+ facts.each { |k, v| FacterImpl.add(k, :weight => 999) { setcode { v } } }
483
483
  end
484
484
 
485
485
  def build_catalog(*args)
data/lib/rspec-puppet.rb CHANGED
@@ -43,6 +43,7 @@ RSpec.configure do |c|
43
43
  c.add_setting :default_node_params, :default => {}
44
44
  c.add_setting :default_trusted_facts, :default => {}
45
45
  c.add_setting :default_trusted_external_data, :default => {}
46
+ c.add_setting :facter_implementation, :default => :facter
46
47
  c.add_setting :hiera_config, :default => Puppet::Util::Platform.actually_windows? ? 'c:/nul/' : '/dev/null'
47
48
  c.add_setting :parser, :default => 'current'
48
49
  c.add_setting :trusted_node_data, :default => false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.10.0
4
+ version: 2.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Sharpe
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-08-02 00:00:00.000000000 Z
13
+ date: 2022-07-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
@@ -53,6 +53,7 @@ files:
53
53
  - lib/rspec-puppet/example/provider_example_group.rb
54
54
  - lib/rspec-puppet/example/type_alias_example_group.rb
55
55
  - lib/rspec-puppet/example/type_example_group.rb
56
+ - lib/rspec-puppet/facter_impl.rb
56
57
  - lib/rspec-puppet/matchers.rb
57
58
  - lib/rspec-puppet/matchers/allow_value.rb
58
59
  - lib/rspec-puppet/matchers/compile.rb
@@ -95,8 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
95
96
  - !ruby/object:Gem::Version
96
97
  version: '0'
97
98
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.7.6.2
99
+ rubygems_version: 3.1.6
100
100
  signing_key:
101
101
  specification_version: 4
102
102
  summary: RSpec tests for your Puppet manifests