rspec-puppet 3.0.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,53 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RSpec::Puppet
4
- if defined?(::Puppet::Pops::Types::PSensitiveType::Sensitive)
5
- # A wrapper representing Sensitive data type, eg. in class params.
6
- class Sensitive < ::Puppet::Pops::Types::PSensitiveType::Sensitive
7
- # Create a new Sensitive object
8
- # @param [Object] value to wrap
9
- def initialize(value)
10
- @value = value
11
- end
4
+ # A wrapper representing Sensitive data type, eg. in class params.
5
+ class Sensitive < ::Puppet::Pops::Types::PSensitiveType::Sensitive
6
+ # Create a new Sensitive object
7
+ # @param [Object] value to wrap
8
+ def initialize(value)
9
+ @value = value
10
+ end
12
11
 
13
- # @return the wrapped value
14
- def unwrap
15
- @value
16
- end
12
+ # @return the wrapped value
13
+ def unwrap
14
+ @value
15
+ end
17
16
 
18
- # @return true
19
- def sensitive?
20
- true
21
- end
17
+ # @return true
18
+ def sensitive?
19
+ true
20
+ end
22
21
 
23
- # @return inspect of the wrapped value, inside Sensitive()
24
- def inspect
25
- "Sensitive(#{@value.inspect})"
26
- end
22
+ # @return inspect of the wrapped value, inside Sensitive()
23
+ def inspect
24
+ "Sensitive(#{@value.inspect})"
25
+ end
27
26
 
28
- # Check for equality with another value.
29
- # If compared to Puppet Sensitive type, it compares the wrapped values.
27
+ # Check for equality with another value.
28
+ # If compared to Puppet Sensitive type, it compares the wrapped values.
30
29
 
31
- # @param other [#unwrap, Object] value to compare to
32
- def ==(other)
33
- if other.respond_to? :unwrap
34
- if unwrap.is_a?(Regexp)
35
- unwrap =~ other.unwrap
36
- else
37
- unwrap == other.unwrap
38
- end
30
+ # @param other [#unwrap, Object] value to compare to
31
+ def ==(other)
32
+ if other.respond_to? :unwrap
33
+ if unwrap.is_a?(Regexp)
34
+ unwrap =~ other.unwrap
39
35
  else
40
- super
36
+ unwrap == other.unwrap
41
37
  end
38
+ else
39
+ super
42
40
  end
43
41
  end
44
- else
45
- # :nocov:
46
- class Sensitive
47
- def initialize(_value)
48
- raise 'The use of the Sensitive data type is not supported by this Puppet version'
49
- end
50
- end
51
- # :nocov:
52
42
  end
53
43
  end
@@ -91,14 +91,8 @@ module RSpec::Puppet
91
91
  end
92
92
 
93
93
  def self.get_module_name_from_file(file)
94
- # FIXME: see discussion at
95
- # https://github.com/rodjek/rspec-puppet/issues/290
96
- if Puppet.version.to_f >= 4.0 || RSpec.configuration.parser == 'future'
97
- require 'puppet/pops'
98
- p = Puppet::Pops::Parser::Lexer2.new
99
- else
100
- p = Puppet::Parser::Lexer.new
101
- end
94
+ require 'puppet/pops'
95
+ p = Puppet::Pops::Parser::Lexer2.new
102
96
  module_name = nil
103
97
  p.string = File.read(file)
104
98
  tokens = p.fullscan
@@ -2,11 +2,8 @@
2
2
 
3
3
  require 'rspec-puppet'
4
4
 
5
- fixture_path = File.join(File.dirname(File.expand_path(__FILE__)), 'fixtures')
6
-
7
5
  RSpec.configure do |c|
8
6
  c.module_path = File.join(fixture_path, 'modules')
9
- c.manifest_dir = File.join(fixture_path, 'manifests')
10
7
  c.manifest = File.join(fixture_path, 'manifests', 'site.pp')
11
8
  c.environmentpath = File.join(Dir.pwd, 'spec')
12
9
  end
@@ -21,11 +21,7 @@ module RSpec::Puppet
21
21
  end
22
22
 
23
23
  def build_code(type, manifest_opts)
24
- if (Puppet.version.to_f >= 4.0) || (Puppet[:parser] == 'future')
25
- [site_pp_str, pre_cond, test_manifest(type, manifest_opts), post_cond].compact.join("\n")
26
- else
27
- [import_str, pre_cond, test_manifest(type, manifest_opts), post_cond].compact.join("\n")
28
- end
24
+ [site_pp_str, pre_cond, test_manifest(type, manifest_opts), post_cond].compact.join("\n")
29
25
  end
30
26
 
31
27
  def guess_type_from_path(path)
@@ -44,8 +40,6 @@ module RSpec::Puppet
44
40
  :type_alias
45
41
  when %r{spec/provider}
46
42
  :provider
47
- when %r{spec/applications}
48
- :application
49
43
  else
50
44
  :unknown
51
45
  end
@@ -90,7 +84,6 @@ module RSpec::Puppet
90
84
  hiera_data_value = respond_to?(:hiera_data) ? hiera_data : nil
91
85
 
92
86
  rspec_config_values = %i[
93
- trusted_server_facts
94
87
  disable_module_hiera
95
88
  use_fixture_spec_hiera
96
89
  fixture_hiera_configs
@@ -128,30 +121,6 @@ module RSpec::Puppet
128
121
  end
129
122
  end
130
123
 
131
- def import_str
132
- import_str = ''
133
- adapter.modulepath.each do |d|
134
- if File.exist?(File.join(d, 'manifests', 'init.pp'))
135
- path_to_manifest = File.join([
136
- d,
137
- 'manifests',
138
- class_name.split('::')[1..]
139
- ].flatten)
140
- import_str = [
141
- "import '#{d}/manifests/init.pp'",
142
- "import '#{path_to_manifest}.pp'",
143
- ''
144
- ].join("\n")
145
- break
146
- elsif File.exist?(d)
147
- import_str = "import '#{adapter.manifest}'\n"
148
- break
149
- end
150
- end
151
-
152
- import_str
153
- end
154
-
155
124
  def site_pp_str
156
125
  return '' unless (path = adapter.manifest)
157
126
 
@@ -177,11 +146,6 @@ module RSpec::Puppet
177
146
  else
178
147
  "class { '#{class_name}': #{param_str(opts[:params])} }"
179
148
  end
180
- when :application
181
- raise ArgumentError, 'You need to provide params for an application' unless opts.key?(:params)
182
-
183
- "site { #{class_name} { #{sanitise_resource_title(title)}: #{param_str(opts[:params])} } }"
184
-
185
149
  when :define
186
150
  title_str = if title.is_a?(Array)
187
151
  '[' + title.map { |r| sanitise_resource_title(r) }.join(', ') + ']'
@@ -207,7 +171,7 @@ module RSpec::Puppet
207
171
  def nodename(type)
208
172
  return node if respond_to?(:node)
209
173
 
210
- if %i[class define function application].include? type
174
+ if %i[class define function].include? type
211
175
  Puppet[:certname]
212
176
  else
213
177
  class_name
@@ -248,10 +212,18 @@ module RSpec::Puppet
248
212
  'hostname' => node.split('.').first,
249
213
  'fqdn' => node,
250
214
  'domain' => node.split('.', 2).last,
251
- 'clientcert' => node,
252
- 'ipaddress6' => 'FE80:0000:0000:0000:AAAA:AAAA:AAAA'
215
+ 'clientcert' => node
253
216
  }
254
217
 
218
+ # Puppet 6.9.0 started setting a `serverip6` server fact which is set
219
+ # using the value of the `ipaddress6` fact. If the fact set(s) provided
220
+ # by FacterDB don't have an `ipaddress6` fact set, then the normal Facter
221
+ # fact will be resolved, which can result in Ruby trying to load Windows
222
+ # only gems on Linux. This is only a problem if facter is used.
223
+ if RSpec.configuration.facter_implementation.to_sym == :facter
224
+ node_facts['ipaddress6'] = 'FE80:0000:0000:0000:AAAA:AAAA:AAAA'
225
+ end
226
+
255
227
  networking_facts = {
256
228
  'hostname' => node_facts['hostname'],
257
229
  'fqdn' => node_facts['fqdn'],
@@ -301,8 +273,6 @@ module RSpec::Puppet
301
273
  end
302
274
 
303
275
  def trusted_facts_hash(_node_name)
304
- return {} unless Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0
305
-
306
276
  extensions = {}
307
277
 
308
278
  if RSpec.configuration.default_trusted_facts.any?
@@ -314,8 +284,6 @@ module RSpec::Puppet
314
284
  end
315
285
 
316
286
  def trusted_external_data_hash
317
- return {} unless Puppet::Util::Package.versioncmp(Puppet.version, '6.14.0') >= 0
318
-
319
287
  external_data = {}
320
288
 
321
289
  if RSpec.configuration.default_trusted_external_data.any?
@@ -335,7 +303,7 @@ module RSpec::Puppet
335
303
  # And then add the server name and IP
336
304
  { 'servername' => 'fqdn',
337
305
  'serverip' => 'ipaddress' }.each do |var, fact|
338
- if (value = FacterImpl.value(fact))
306
+ if (value = Puppet.runtime[:facter].value(fact))
339
307
  server_facts[var] = value
340
308
  else
341
309
  warn "Could not retrieve fact #{fact}"
@@ -343,8 +311,8 @@ module RSpec::Puppet
343
311
  end
344
312
 
345
313
  if server_facts['servername'].nil?
346
- host = FacterImpl.value(:hostname)
347
- server_facts['servername'] = if (domain = FacterImpl.value(:domain))
314
+ host = Puppet.runtime[:facter].value(:hostname)
315
+ server_facts['servername'] = if (domain = Puppet.runtime[:facter].value(:domain))
348
316
  [host, domain].join('.')
349
317
  else
350
318
  host
@@ -388,11 +356,6 @@ module RSpec::Puppet
388
356
  vardir = Dir.mktmpdir
389
357
  Puppet[:vardir] = vardir
390
358
 
391
- # Enable app_management by default for Puppet versions that support it
392
- if Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0 && Puppet.version.to_i < 5
393
- Puppet[:app_management] = !ENV.include?('PUPPET_NOAPP_MANAGMENT')
394
- end
395
-
396
359
  adapter.modulepath.map do |d|
397
360
  Dir["#{d}/*/lib"].entries
398
361
  end.flatten.each do |lib|
@@ -404,7 +367,7 @@ module RSpec::Puppet
404
367
 
405
368
  def with_vardir
406
369
  vardir = setup_puppet
407
- return yield(vardir) if block_given?
370
+ yield(vardir) if block_given?
408
371
  ensure
409
372
  FileUtils.rm_rf(vardir) if vardir && File.directory?(vardir)
410
373
  end
@@ -456,25 +419,23 @@ module RSpec::Puppet
456
419
  node_obj = Puppet::Node.new(nodename, { parameters: node_params, facts: node_facts })
457
420
 
458
421
  trusted_info = ['remote', nodename, trusted_facts_val]
459
- trusted_info.push(trusted_external_data) if Puppet::Util::Package.versioncmp(Puppet.version, '6.14.0') >= 0
460
- if Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0
461
- Puppet.push_context(
462
- {
463
- trusted_information: Puppet::Context::TrustedInformation.new(*trusted_info)
464
- },
465
- 'Context for spec trusted hash'
466
- )
422
+ trusted_info.push(trusted_external_data)
423
+ Puppet.push_context(
424
+ {
425
+ trusted_information: Puppet::Context::TrustedInformation.new(*trusted_info)
426
+ },
427
+ 'Context for spec trusted hash'
428
+ )
467
429
 
468
- node_obj.add_server_facts(server_facts_hash) if RSpec.configuration.trusted_server_facts
469
- end
430
+ node_obj.add_server_facts(server_facts_hash)
470
431
 
471
432
  adapter.catalog(node_obj, exported)
472
433
  end
473
434
 
474
435
  def stub_facts!(facts)
475
436
  Puppet.settings[:autosign] = false if Puppet.settings.include? :autosign
476
- FacterImpl.clear
477
- facts.each { |k, v| FacterImpl.add(k, weight: 999) { setcode { v } } }
437
+ Puppet.runtime[:facter].clear
438
+ facts.each { |k, v| Puppet.runtime[:facter].add(k, weight: 999) { setcode { v } } }
478
439
  end
479
440
 
480
441
  def build_catalog(*args)
@@ -504,15 +465,7 @@ module RSpec::Puppet
504
465
  end
505
466
 
506
467
  def escape_special_chars(string)
507
- string.gsub(/\$/, '\\$')
508
- end
509
-
510
- def rspec_compatibility
511
- return unless RSpec::Version::STRING < '3'
512
-
513
- # RSpec 2 compatibility:
514
- alias_method :failure_message_for_should, :failure_message
515
- alias_method :failure_message_for_should_not, :failure_message_when_negated
468
+ string.gsub('$', '\\$')
516
469
  end
517
470
 
518
471
  def fixture_spec_hiera_conf(mod)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RSpecPuppet
4
- VERSION = '3.0.0'
4
+ VERSION = '4.0.0'
5
5
  end
data/lib/rspec-puppet.rb CHANGED
@@ -36,9 +36,7 @@ require 'rspec-puppet/monkey_patches'
36
36
  RSpec.configure do |c|
37
37
  c.add_setting :environmentpath, default: Puppet::Util::Platform.actually_windows? ? 'c:/nul/' : '/dev/null'
38
38
  c.add_setting :module_path, default: nil
39
- c.add_setting :manifest_dir, default: nil
40
39
  c.add_setting :manifest, default: nil
41
- c.add_setting :template_dir, default: nil
42
40
  c.add_setting :config, default: nil
43
41
  c.add_setting :confdir, default: Puppet::Util::Platform.actually_windows? ? 'c:/nul/' : '/dev/null'
44
42
  c.add_setting :default_facts, default: {}
@@ -47,9 +45,6 @@ RSpec.configure do |c|
47
45
  c.add_setting :default_trusted_external_data, default: {}
48
46
  c.add_setting :facter_implementation, default: :facter
49
47
  c.add_setting :hiera_config, default: Puppet::Util::Platform.actually_windows? ? 'c:/nul/' : '/dev/null'
50
- c.add_setting :parser, default: 'current'
51
- c.add_setting :trusted_node_data, default: false
52
- c.add_setting :ordering, default: 'title-hash'
53
48
  c.add_setting :stringify_facts, default: true
54
49
  c.add_setting :strict_variables, default: false
55
50
  c.add_setting :setup_fixtures, default: true
@@ -63,17 +58,6 @@ RSpec.configure do |c|
63
58
  c.add_setting :use_fixture_spec_hiera, default: false
64
59
  c.add_setting :fallback_to_default_hiera, default: true
65
60
 
66
- c.instance_eval do
67
- def trusted_server_facts
68
- @trusted_server_facts.nil? ? false : @trusted_server_facts
69
- end
70
-
71
- def trusted_server_facts=(value)
72
- @trusted_server_facts = value
73
- adapter&.setup_puppet(RSpec::Puppet.current_example)
74
- end
75
- end
76
-
77
61
  c.before(:all) do
78
62
  RSpec::Puppet::Setup.safe_setup_directories(nil, false) if RSpec.configuration.setup_fixtures?
79
63
  end
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: 3.0.0
4
+ version: 4.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Sharpe
@@ -10,23 +10,26 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2023-04-25 00:00:00.000000000 Z
13
+ date: 2023-10-09 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ">="
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - ">="
26
+ - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '0'
29
- description: RSpec tests for your Puppet manifests
28
+ version: '3.0'
29
+ description: |2
30
+ RSpec tests for your Puppet manifests.
31
+ Note: Support for this gem has been moved under a new namespace and as such any future updates from
32
+ the Puppet team will be released as `puppetlabs-rspec-puppet`.
30
33
  email:
31
34
  - tim@sharpe.id.au
32
35
  - modules-team@puppet.com
@@ -45,7 +48,6 @@ files:
45
48
  - lib/rspec-puppet/coverage.rb
46
49
  - lib/rspec-puppet/errors.rb
47
50
  - lib/rspec-puppet/example.rb
48
- - lib/rspec-puppet/example/application_example_group.rb
49
51
  - lib/rspec-puppet/example/class_example_group.rb
50
52
  - lib/rspec-puppet/example/define_example_group.rb
51
53
  - lib/rspec-puppet/example/function_example_group.rb
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RSpec::Puppet
4
- # This module provides support for the application type
5
- module ApplicationExampleGroup
6
- include RSpec::Puppet::ManifestMatchers
7
- include RSpec::Puppet::Support
8
-
9
- def catalogue
10
- @catalogue ||= load_catalogue(:application)
11
- end
12
-
13
- def exported_resources
14
- -> { load_catalogue(:application, true) }
15
- end
16
-
17
- def rspec_puppet_cleanup
18
- @catalogue = nil
19
- end
20
- end
21
- end