rspec-puppet 2.10.0 → 2.11.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: 7a8f890c54b412a4d326895c3c3cd0ecae65f915049c69b9cb75c0a5c2811365
4
+ data.tar.gz: 39407acdeb509d98797e23cdcb7e71c378d89186039538fba4cc25c6c1eb0bf1
5
5
  SHA512:
6
- metadata.gz: 7b5c1d81b22bca79e3b5c7edde653396d7cbc3506c66d60d69be618066fcdbe75782b29adffe35f89046dafcb3b7db2faec5b30a25eb6b57f5d91d1e12631bf8
7
- data.tar.gz: 35833aa537d9f12c11131108bd2f664e74e0ea47f8d8c7029efd9a86c2b344c2ea3a9dfe10dca91eb96efe2128ba748320b805ea4778ed72b8578cda7069c634
6
+ metadata.gz: 1105e0778581b90855d2d43511b1016cd0193fb088c0b4fbe7bf8de4947e3043a6a005bf1894fed0ac9fbdf87b283b9075997f47c2530ba82038db9c23d43e2f
7
+ data.tar.gz: 719205730a4e0f4bd0b17378872e134de10eedf3e623f9584aaf85577665033ea36d393d5a3619a0b5eb9fd091530bc6071d394291d7d48094aad11d00836585
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
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.11.0]
6
+
7
+ ### Added
8
+ * Add setting to use custom Facter implementation ([GH-16](https://github.com/puppetlabs/rspec-puppet/pull/16))
9
+
5
10
  ## [2.10.0]
6
11
  The release sees rspec-puppet move into the puppetlabs namespace
7
12
 
@@ -560,7 +565,8 @@ Thanks to Adrien Thebo, Alex Harvey, Brian, Dan Bode, Dominic Cleal, Javier Pala
560
565
  ## 1.0.1 and earlier
561
566
  For changelog of versions 1.0.1 and earlier, see http://rspec-puppet.com/changelog/
562
567
 
563
- [2.x]: https://github.com/puppetlabs/rspec-puppet/compare/v2.10.0...master
568
+ [2.x]: https://github.com/puppetlabs/rspec-puppet/compare/v2.11.0...master
569
+ [2.11.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.10.0...v2.11.0
564
570
  [2.10.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.9.0...v2.10.0
565
571
  [2.9.0]: https://github.com/puppetlabs/rspec-puppet/compare/v2.8.0...v2.9.0
566
572
  [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,17 @@ 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.
117
+ # The method noops if the constant is already set
118
+ #
119
+ # @param impl [Object]
120
+ def set_facter_impl(impl)
121
+ Object.send(:const_set, :FacterImpl, impl) unless defined? FacterImpl
122
+ end
123
+
111
124
  def setup_puppet(example_group)
112
125
  super
113
126
 
@@ -186,6 +199,12 @@ module RSpec::Puppet
186
199
  end
187
200
 
188
201
  class Adapter4X < Adapter40
202
+ def setup_puppet(example_group)
203
+ super
204
+
205
+ set_facter_impl(Facter)
206
+ end
207
+
189
208
  def settings_map
190
209
  super.concat([
191
210
  [:trusted_server_facts, :trusted_server_facts]
@@ -194,6 +213,46 @@ module RSpec::Puppet
194
213
  end
195
214
 
196
215
  class Adapter6X < Adapter40
216
+ #
217
+ # @api private
218
+ #
219
+ # Check to see if Facter runtime implementations are supported in the
220
+ # current Puppet version
221
+ #
222
+ # @return [Boolean] true if runtime implementations are supported
223
+ def supports_facter_runtime?
224
+ unless defined?(@supports_facter_runtime)
225
+ begin
226
+ Puppet.runtime[:facter]
227
+ @supports_facter_runtime = true
228
+ rescue
229
+ @supports_facter_runtime = false
230
+ end
231
+ end
232
+
233
+ @supports_facter_runtime
234
+ end
235
+
236
+ def setup_puppet(example_group)
237
+ case RSpec.configuration.facter_implementation.to_sym
238
+ when :rspec
239
+ if supports_facter_runtime?
240
+ Puppet.runtime[:facter] = proc { RSpec::Puppet::FacterTestImpl.new }
241
+ set_facter_impl(Puppet.runtime[:facter])
242
+ else
243
+ warn "Facter runtime implementations are not supported in Puppet #{Puppet.version}, continuing with facter_implementation 'facter'"
244
+ RSpec.configuration.facter_implementation = 'facter'
245
+ set_facter_impl(Facter)
246
+ end
247
+ when :facter
248
+ set_facter_impl(Facter)
249
+ else
250
+ raise "Unsupported facter_implementation '#{RSpec.configuration.facter_implementation}'"
251
+ end
252
+
253
+ super
254
+ end
255
+
197
256
  def settings_map
198
257
  super.concat([
199
258
  [: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
+
@@ -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.11.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: 2021-11-10 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