rspec-puppet 2.7.4 → 2.7.9
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.
Potentially problematic release.
This version of rspec-puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +30 -0
- data/lib/rspec-puppet/cache.rb +11 -6
- data/lib/rspec-puppet/coverage.rb +7 -1
- data/lib/rspec-puppet/matchers.rb +1 -0
- data/lib/rspec-puppet/matchers/allow_value.rb +8 -0
- data/lib/rspec-puppet/matchers/compile.rb +8 -0
- data/lib/rspec-puppet/matchers/count_generic.rb +8 -0
- data/lib/rspec-puppet/matchers/create_generic.rb +13 -0
- data/lib/rspec-puppet/matchers/include_class.rb +7 -0
- data/lib/rspec-puppet/matchers/parameter_matcher.rb +3 -4
- data/lib/rspec-puppet/matchers/raise_error.rb +23 -0
- data/lib/rspec-puppet/matchers/run.rb +8 -0
- data/lib/rspec-puppet/monkey_patches.rb +28 -0
- data/lib/rspec-puppet/sensitive.rb +47 -0
- data/lib/rspec-puppet/support.rb +17 -6
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca4beef2e1c4c55e6e0e79b0fd9d03fb05a1462166632aa64c6df9b37ca93e51
|
4
|
+
data.tar.gz: 7b4c5948d175bbfad4f46fcf89ac1ec8427dbc1457cf3f767dc656427a30b6ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a24ffc5d27c563a0bfe01be6f6881119955ad7a46afe330ffa9a787102186b41ba1af6d26df8984202746aefa5fca432860074e874073aba9a2fe69e87099d7
|
7
|
+
data.tar.gz: 19e34976f263b427406002ffa5ba26711814d49558c1bc2f396fd03415ce0ec7fe018052d4e90db5e295127561d1e8a1c30371fc32d856a14a0d34c81a29b1a4
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,36 @@
|
|
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.7.9]
|
6
|
+
### Fixed
|
7
|
+
* Fix issues with removal of `default_env` method in Puppet 6.17.0.
|
8
|
+
|
9
|
+
## [2.7.8]
|
10
|
+
|
11
|
+
### Fixed
|
12
|
+
* Fix cross-platform testing for Puppet >= 6.9.0 when there is no `ipaddress6`
|
13
|
+
fact defined.
|
14
|
+
|
15
|
+
## [2.7.7]
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
* Fix the support for rspec-expectations >= 3.8.5.
|
19
|
+
|
20
|
+
### Changed
|
21
|
+
* Remove the rspec-expectations dependency limit introduced in 2.7.6.
|
22
|
+
|
23
|
+
## [2.7.6]
|
24
|
+
|
25
|
+
### Changed
|
26
|
+
* Limit rspec-expectations dependency to < 3.8.5 due to an incompatible
|
27
|
+
change.
|
28
|
+
|
29
|
+
## [2.7.5]
|
30
|
+
|
31
|
+
### Fixed
|
32
|
+
* Minor refactor to prevent the fix introduced in 2.7.4 from raising
|
33
|
+
a deprecation warning on latest RSpec.
|
34
|
+
|
5
35
|
## [2.7.4]
|
6
36
|
|
7
37
|
### Fixed
|
data/lib/rspec-puppet/cache.rb
CHANGED
@@ -11,12 +11,17 @@ module RSpec::Puppet
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def get(*args, &blk)
|
14
|
-
# decouple the hash key from whatever the blk might do to it
|
15
14
|
key = Marshal.load(Marshal.dump(args))
|
16
|
-
if
|
17
|
-
|
18
|
-
|
15
|
+
if @cache.has_key?(key)
|
16
|
+
# Cache hit
|
17
|
+
# move that entry last to make it "most recenty used"
|
18
|
+
@lra.insert(-1, @lra.delete_at(@lra.index(args)))
|
19
|
+
else
|
20
|
+
# Cache miss
|
21
|
+
# Ensure room by evicting least recently used if no space left
|
19
22
|
expire!
|
23
|
+
@cache[args] = (blk || @default_proc).call(*args)
|
24
|
+
@lra << args
|
20
25
|
end
|
21
26
|
|
22
27
|
@cache[key]
|
@@ -25,8 +30,8 @@ module RSpec::Puppet
|
|
25
30
|
private
|
26
31
|
|
27
32
|
def expire!
|
28
|
-
|
29
|
-
|
33
|
+
# delete one entry (the oldest) when there is no room in cache
|
34
|
+
@cache.delete(@lra.shift) if @cache.size == MAX_ENTRIES
|
30
35
|
end
|
31
36
|
end
|
32
37
|
end
|
@@ -159,7 +159,13 @@ module RSpec::Puppet
|
|
159
159
|
end
|
160
160
|
coverage_test.run(RSpec.configuration.reporter)
|
161
161
|
|
162
|
-
if coverage_results.execution_result
|
162
|
+
status = if coverage_results.execution_result.respond_to?(:status)
|
163
|
+
coverage_results.execution_result.status
|
164
|
+
else
|
165
|
+
coverage_results.execution_result[:status]
|
166
|
+
end
|
167
|
+
|
168
|
+
if status == :failed
|
163
169
|
RSpec.world.non_example_failure = true
|
164
170
|
RSpec.world.wants_to_quit = true
|
165
171
|
end
|
@@ -34,6 +34,14 @@ module RSpec::Puppet
|
|
34
34
|
def failure_message_when_negated
|
35
35
|
"expected that the type alias would not " + description + " but it does"
|
36
36
|
end
|
37
|
+
|
38
|
+
def supports_block_expectations
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
def supports_value_expectations
|
43
|
+
true
|
44
|
+
end
|
37
45
|
end
|
38
46
|
|
39
47
|
def allow_value(*values)
|
@@ -61,6 +61,14 @@ module RSpec::Puppet
|
|
61
61
|
"expected that the catalogue would not " + description + " but it does"
|
62
62
|
end
|
63
63
|
|
64
|
+
def supports_block_expectations
|
65
|
+
true
|
66
|
+
end
|
67
|
+
|
68
|
+
def supports_value_expectations
|
69
|
+
true
|
70
|
+
end
|
71
|
+
|
64
72
|
private
|
65
73
|
|
66
74
|
def referenced_type(type)
|
@@ -89,6 +89,11 @@ module RSpec::Puppet
|
|
89
89
|
else
|
90
90
|
RSpec::Puppet::Coverage.cover!(resource)
|
91
91
|
rsrc_hsh = resource.to_hash
|
92
|
+
if resource.respond_to?(:sensitive_parameters)
|
93
|
+
resource.sensitive_parameters.each do |s_param|
|
94
|
+
rsrc_hsh[s_param] = ::Puppet::Pops::Types::PSensitiveType::Sensitive.new(rsrc_hsh[s_param])
|
95
|
+
end
|
96
|
+
end
|
92
97
|
|
93
98
|
if resource.builtin_type?
|
94
99
|
namevar = resource.resource_type.key_attributes.first.to_s
|
@@ -177,6 +182,14 @@ module RSpec::Puppet
|
|
177
182
|
true
|
178
183
|
end
|
179
184
|
|
185
|
+
def supports_block_expectations
|
186
|
+
true
|
187
|
+
end
|
188
|
+
|
189
|
+
def supports_value_expectations
|
190
|
+
true
|
191
|
+
end
|
192
|
+
|
180
193
|
def expected
|
181
194
|
@errors.map {|e| e.expected if e.respond_to?(:expected)}.compact.join("\n\n")
|
182
195
|
end
|
@@ -21,10 +21,7 @@ module RSpec::Puppet
|
|
21
21
|
#
|
22
22
|
# @return [true, false]
|
23
23
|
def matches?(resource)
|
24
|
-
|
25
|
-
@resource = resource
|
26
|
-
|
27
|
-
actual = @resource[@parameter]
|
24
|
+
actual = resource[@parameter]
|
28
25
|
expected = @value
|
29
26
|
|
30
27
|
# Puppet flattens an array with a single value into just the value and
|
@@ -65,6 +62,8 @@ module RSpec::Puppet
|
|
65
62
|
check_hash(expected, actual)
|
66
63
|
when Array
|
67
64
|
check_array(expected, actual)
|
65
|
+
when RSpec::Puppet::Sensitive
|
66
|
+
expected == actual
|
68
67
|
else
|
69
68
|
check_string(expected, actual)
|
70
69
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module RSpec::Puppet
|
2
|
+
module GenericMatchers
|
3
|
+
# Due to significant code base depending on the
|
4
|
+
#
|
5
|
+
# is_expected.to raise_error Puppet::Error
|
6
|
+
#
|
7
|
+
# syntax, and removal of this syntax from RSpec, extend RSpec's built-in
|
8
|
+
# `raise_error` matcher to accept a value target, e.g. a subject defined
|
9
|
+
# as a lambda, e.g.:
|
10
|
+
#
|
11
|
+
# subject(:catalogue) { lambda { load_catalogue } }
|
12
|
+
#
|
13
|
+
class RaiseError < RSpec::Matchers::BuiltIn::RaiseError
|
14
|
+
def supports_value_expectations?
|
15
|
+
true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def raise_error(*args, &block)
|
20
|
+
RaiseError.new(*args, &block)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -132,6 +132,16 @@ module Puppet
|
|
132
132
|
end
|
133
133
|
|
134
134
|
module Util
|
135
|
+
# Fix for removal of default_env function
|
136
|
+
# Bug: https://github.com/rodjek/rspec-puppet/issues/796
|
137
|
+
# Upstream: https://github.com/puppetlabs/puppet/commit/94df3c1a3992d89b2d7d5db8a70373c135bdd86b
|
138
|
+
if !respond_to?(:default_env)
|
139
|
+
def default_env()
|
140
|
+
DEFAULT_ENV
|
141
|
+
end
|
142
|
+
module_function :default_env
|
143
|
+
end
|
144
|
+
|
135
145
|
if respond_to?(:get_env)
|
136
146
|
alias :old_get_env :get_env
|
137
147
|
module_function :old_get_env
|
@@ -292,6 +302,24 @@ class Pathname
|
|
292
302
|
end
|
293
303
|
end
|
294
304
|
|
305
|
+
# Puppet loads init.pp, then foo.pp, to find class "mod::foo". If
|
306
|
+
# class "mod" has been mocked using pre_condition when testing
|
307
|
+
# "mod::foo", this causes duplicate declaration for "mod".
|
308
|
+
# This monkey patch only loads "init.pp" if "foo.pp" does not exist.
|
309
|
+
class Puppet::Module
|
310
|
+
if [:match_manifests, 'match_manifests'].any? { |r| instance_methods.include?(r) }
|
311
|
+
old_match_manifests = instance_method(:match_manifests)
|
312
|
+
|
313
|
+
define_method(:match_manifests) do |rest|
|
314
|
+
result = old_match_manifests.bind(self).call(rest)
|
315
|
+
if result.length > 1 && File.basename(result[0]) == 'init.pp'
|
316
|
+
result.shift
|
317
|
+
end
|
318
|
+
result
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
|
295
323
|
# Prevent the File type from munging paths (which uses File.expand_path to
|
296
324
|
# normalise paths, which does very bad things to *nix paths on Windows.
|
297
325
|
file_path_munge = Puppet::Type.type(:file).paramclass(:path).instance_method(:unsafe_munge)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module RSpec::Puppet
|
2
|
+
if defined?(::Puppet::Pops::Types::PSensitiveType::Sensitive)
|
3
|
+
# A wrapper representing Sensitive data type, eg. in class params.
|
4
|
+
class Sensitive < ::Puppet::Pops::Types::PSensitiveType::Sensitive
|
5
|
+
# Create a new Sensitive object
|
6
|
+
# @param [Object] value to wrap
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return the wrapped value
|
12
|
+
def unwrap
|
13
|
+
@value
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return true
|
17
|
+
def sensitive?
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return inspect of the wrapped value, inside Sensitive()
|
22
|
+
def inspect
|
23
|
+
"Sensitive(#{@value.inspect})"
|
24
|
+
end
|
25
|
+
|
26
|
+
# Check for equality with another value.
|
27
|
+
# If compared to Puppet Sensitive type, it compares the wrapped values.
|
28
|
+
|
29
|
+
# @param other [#unwrap, Object] value to compare to
|
30
|
+
def == other
|
31
|
+
if other.respond_to? :unwrap
|
32
|
+
return unwrap == other.unwrap
|
33
|
+
else
|
34
|
+
super
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
else
|
39
|
+
#:nocov:
|
40
|
+
class Sensitive
|
41
|
+
def initialize(value)
|
42
|
+
raise 'The use of the Sensitive data type is not supported by this Puppet version'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
#:nocov:
|
46
|
+
end
|
47
|
+
end
|
data/lib/rspec-puppet/support.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
require 'rspec-puppet/cache'
|
2
2
|
require 'rspec-puppet/adapters'
|
3
3
|
require 'rspec-puppet/raw_string'
|
4
|
+
require 'rspec-puppet/sensitive'
|
4
5
|
|
5
6
|
module RSpec::Puppet
|
6
7
|
module Support
|
8
|
+
include GenericMatchers
|
9
|
+
|
7
10
|
@@cache = RSpec::Puppet::Cache.new
|
8
11
|
|
9
12
|
def subject
|
@@ -224,10 +227,11 @@ module RSpec::Puppet
|
|
224
227
|
}
|
225
228
|
|
226
229
|
node_facts = {
|
227
|
-
'hostname'
|
228
|
-
'fqdn'
|
229
|
-
'domain'
|
230
|
-
'clientcert'
|
230
|
+
'hostname' => node.split('.').first,
|
231
|
+
'fqdn' => node,
|
232
|
+
'domain' => node.split('.', 2).last,
|
233
|
+
'clientcert' => node,
|
234
|
+
'ipaddress6' => 'FE80:0000:0000:0000:AAAA:AAAA:AAAA',
|
231
235
|
}
|
232
236
|
|
233
237
|
networking_facts = {
|
@@ -437,8 +441,7 @@ module RSpec::Puppet
|
|
437
441
|
end
|
438
442
|
|
439
443
|
def escape_special_chars(string)
|
440
|
-
string.gsub
|
441
|
-
string
|
444
|
+
string.gsub(/\$/, "\\$")
|
442
445
|
end
|
443
446
|
|
444
447
|
def rspec_compatibility
|
@@ -459,6 +462,14 @@ module RSpec::Puppet
|
|
459
462
|
return RSpec::Puppet::RawString.new("#{type}['#{title}']")
|
460
463
|
end
|
461
464
|
|
465
|
+
# Helper to return value wrapped in Sensitive type.
|
466
|
+
#
|
467
|
+
# @param [Object] value to wrap
|
468
|
+
# @return [RSpec::Puppet::Sensitive] a new Sensitive wrapper with the new value
|
469
|
+
def sensitive(value)
|
470
|
+
return RSpec::Puppet::Sensitive.new(value)
|
471
|
+
end
|
472
|
+
|
462
473
|
# @!attribute [r] adapter
|
463
474
|
# @api private
|
464
475
|
# @return [Class < RSpec::Puppet::Adapters::Base]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rspec-puppet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.7.
|
4
|
+
version: 2.7.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Sharpe
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- lib/rspec-puppet/matchers/dynamic_matchers.rb
|
58
58
|
- lib/rspec-puppet/matchers/include_class.rb
|
59
59
|
- lib/rspec-puppet/matchers/parameter_matcher.rb
|
60
|
+
- lib/rspec-puppet/matchers/raise_error.rb
|
60
61
|
- lib/rspec-puppet/matchers/run.rb
|
61
62
|
- lib/rspec-puppet/matchers/type_matchers.rb
|
62
63
|
- lib/rspec-puppet/monkey_patches.rb
|
@@ -65,6 +66,7 @@ files:
|
|
65
66
|
- lib/rspec-puppet/monkey_patches/windows/taskschedulerconstants.rb
|
66
67
|
- lib/rspec-puppet/rake_task.rb
|
67
68
|
- lib/rspec-puppet/raw_string.rb
|
69
|
+
- lib/rspec-puppet/sensitive.rb
|
68
70
|
- lib/rspec-puppet/setup.rb
|
69
71
|
- lib/rspec-puppet/spec_helper.rb
|
70
72
|
- lib/rspec-puppet/support.rb
|
@@ -88,8 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
88
90
|
- !ruby/object:Gem::Version
|
89
91
|
version: '0'
|
90
92
|
requirements: []
|
91
|
-
|
92
|
-
rubygems_version: 2.7.6.2
|
93
|
+
rubygems_version: 3.0.3
|
93
94
|
signing_key:
|
94
95
|
specification_version: 4
|
95
96
|
summary: RSpec tests for your Puppet manifests
|