rspec-puppet 2.12.0 → 3.0.0.rc.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +139 -483
- data/README.md +18 -5
- data/bin/rspec-puppet-init +4 -3
- data/lib/rspec-puppet/adapters.rb +67 -61
- data/lib/rspec-puppet/cache.rb +3 -2
- data/lib/rspec-puppet/consts.rb +16 -14
- data/lib/rspec-puppet/coverage.rb +37 -42
- data/lib/rspec-puppet/errors.rb +6 -6
- data/lib/rspec-puppet/example/application_example_group.rb +3 -1
- data/lib/rspec-puppet/example/class_example_group.rb +3 -1
- data/lib/rspec-puppet/example/define_example_group.rb +3 -1
- data/lib/rspec-puppet/example/function_example_group.rb +28 -23
- data/lib/rspec-puppet/example/host_example_group.rb +3 -1
- data/lib/rspec-puppet/example/provider_example_group.rb +2 -0
- data/lib/rspec-puppet/example/type_alias_example_group.rb +4 -2
- data/lib/rspec-puppet/example/type_example_group.rb +3 -1
- data/lib/rspec-puppet/example.rb +6 -7
- data/lib/rspec-puppet/facter_impl.rb +11 -10
- data/lib/rspec-puppet/matchers/allow_value.rb +10 -10
- data/lib/rspec-puppet/matchers/compile.rb +54 -61
- data/lib/rspec-puppet/matchers/count_generic.rb +18 -18
- data/lib/rspec-puppet/matchers/create_generic.rb +66 -78
- data/lib/rspec-puppet/matchers/dynamic_matchers.rb +13 -2
- data/lib/rspec-puppet/matchers/include_class.rb +5 -4
- data/lib/rspec-puppet/matchers/parameter_matcher.rb +11 -12
- data/lib/rspec-puppet/matchers/raise_error.rb +5 -1
- data/lib/rspec-puppet/matchers/run.rb +41 -44
- data/lib/rspec-puppet/matchers/type_matchers.rb +37 -48
- data/lib/rspec-puppet/matchers.rb +2 -0
- data/lib/rspec-puppet/monkey_patches/win32/registry.rb +7 -5
- data/lib/rspec-puppet/monkey_patches/win32/taskscheduler.rb +3 -1
- data/lib/rspec-puppet/monkey_patches/windows/taskschedulerconstants.rb +208 -205
- data/lib/rspec-puppet/monkey_patches.rb +56 -56
- data/lib/rspec-puppet/rake_task.rb +6 -4
- data/lib/rspec-puppet/raw_string.rb +2 -0
- data/lib/rspec-puppet/sensitive.rb +9 -7
- data/lib/rspec-puppet/setup.rb +43 -48
- data/lib/rspec-puppet/spec_helper.rb +2 -0
- data/lib/rspec-puppet/support.rb +133 -134
- data/lib/rspec-puppet/tasks/release_test.rb +8 -5
- data/lib/rspec-puppet/version.rb +5 -0
- data/lib/rspec-puppet.rb +43 -51
- metadata +11 -9
data/lib/rspec-puppet/support.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rspec-puppet/cache'
|
2
4
|
require 'rspec-puppet/adapters'
|
3
5
|
require 'rspec-puppet/raw_string'
|
@@ -11,7 +13,7 @@ module RSpec::Puppet
|
|
11
13
|
@@fixture_hiera_configs = Hash.new { |h, k| h[k] = nil }
|
12
14
|
|
13
15
|
def subject
|
14
|
-
|
16
|
+
-> { catalogue }
|
15
17
|
end
|
16
18
|
|
17
19
|
def environment
|
@@ -19,7 +21,7 @@ module RSpec::Puppet
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def build_code(type, manifest_opts)
|
22
|
-
if Puppet.version.to_f >= 4.0
|
24
|
+
if (Puppet.version.to_f >= 4.0) || (Puppet[:parser] == 'future')
|
23
25
|
[site_pp_str, pre_cond, test_manifest(type, manifest_opts), post_cond].compact.join("\n")
|
24
26
|
else
|
25
27
|
[import_str, pre_cond, test_manifest(type, manifest_opts), post_cond].compact.join("\n")
|
@@ -28,21 +30,21 @@ module RSpec::Puppet
|
|
28
30
|
|
29
31
|
def guess_type_from_path(path)
|
30
32
|
case path
|
31
|
-
when /
|
33
|
+
when %r{spec/defines}
|
32
34
|
:define
|
33
|
-
when /
|
35
|
+
when %r{spec/classes}
|
34
36
|
:class
|
35
|
-
when /
|
37
|
+
when %r{spec/functions}
|
36
38
|
:function
|
37
|
-
when /
|
39
|
+
when %r{spec/hosts}
|
38
40
|
:host
|
39
|
-
when /
|
41
|
+
when %r{spec/types}
|
40
42
|
:type
|
41
|
-
when /
|
43
|
+
when %r{spec/type_aliases}
|
42
44
|
:type_alias
|
43
|
-
when /
|
45
|
+
when %r{spec/provider}
|
44
46
|
:provider
|
45
|
-
when /
|
47
|
+
when %r{spec/applications}
|
46
48
|
:application
|
47
49
|
else
|
48
50
|
:unknown
|
@@ -50,11 +52,11 @@ module RSpec::Puppet
|
|
50
52
|
end
|
51
53
|
|
52
54
|
def stub_file_consts(example)
|
53
|
-
if example.respond_to?(:metadata)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
type = if example.respond_to?(:metadata)
|
56
|
+
example.metadata[:type]
|
57
|
+
else
|
58
|
+
guess_type_from_path(example.example.metadata[:file_path])
|
59
|
+
end
|
58
60
|
|
59
61
|
munged_facts = facts_hash(nodename(type))
|
60
62
|
|
@@ -64,15 +66,15 @@ module RSpec::Puppet
|
|
64
66
|
|
65
67
|
def find_pretend_platform(test_facts)
|
66
68
|
from_value = lambda { |value|
|
67
|
-
value.to_s.
|
69
|
+
value.to_s.casecmp('windows').zero? ? :windows : :posix
|
68
70
|
}
|
69
71
|
|
70
|
-
[
|
72
|
+
%w[operatingsystem osfamily].each do |os_fact|
|
71
73
|
return from_value.call(test_facts[os_fact]) if test_facts.key?(os_fact)
|
72
74
|
end
|
73
75
|
|
74
76
|
if test_facts.key?('os') && test_facts['os'].is_a?(Hash)
|
75
|
-
[
|
77
|
+
%w[name family].each do |os_hash_key|
|
76
78
|
return from_value.call(test_facts['os'][os_hash_key]) if test_facts['os'].key?(os_hash_key)
|
77
79
|
end
|
78
80
|
end
|
@@ -80,20 +82,19 @@ module RSpec::Puppet
|
|
80
82
|
nil
|
81
83
|
end
|
82
84
|
|
83
|
-
|
84
85
|
def load_catalogue(type, exported = false, manifest_opts = {})
|
85
86
|
with_vardir do
|
86
87
|
node_name = nodename(type)
|
87
88
|
|
88
|
-
hiera_config_value =
|
89
|
-
hiera_data_value =
|
89
|
+
hiera_config_value = respond_to?(:hiera_config) ? hiera_config : nil
|
90
|
+
hiera_data_value = respond_to?(:hiera_data) ? hiera_data : nil
|
90
91
|
|
91
|
-
rspec_config_values = [
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
rspec_config_values = %i[
|
93
|
+
trusted_server_facts
|
94
|
+
disable_module_hiera
|
95
|
+
use_fixture_spec_hiera
|
96
|
+
fixture_hiera_configs
|
97
|
+
fallback_to_default_hiera
|
97
98
|
].map { |setting| RSpec.configuration.send(setting) }
|
98
99
|
|
99
100
|
build_facts = facts_hash(node_name)
|
@@ -108,7 +109,7 @@ module RSpec::Puppet
|
|
108
109
|
trusted_external_data: trusted_external_data_hash,
|
109
110
|
ignored_cache_params: {
|
110
111
|
hiera_data_value: hiera_data_value,
|
111
|
-
rspec_config_values: rspec_config_values
|
112
|
+
rspec_config_values: rspec_config_values
|
112
113
|
}
|
113
114
|
)
|
114
115
|
|
@@ -128,25 +129,25 @@ module RSpec::Puppet
|
|
128
129
|
end
|
129
130
|
|
130
131
|
def import_str
|
131
|
-
import_str =
|
132
|
-
adapter.modulepath.each
|
133
|
-
if File.
|
132
|
+
import_str = ''
|
133
|
+
adapter.modulepath.each do |d|
|
134
|
+
if File.exist?(File.join(d, 'manifests', 'init.pp'))
|
134
135
|
path_to_manifest = File.join([
|
135
136
|
d,
|
136
137
|
'manifests',
|
137
|
-
class_name.split('::')[1
|
138
|
+
class_name.split('::')[1..]
|
138
139
|
].flatten)
|
139
140
|
import_str = [
|
140
141
|
"import '#{d}/manifests/init.pp'",
|
141
142
|
"import '#{path_to_manifest}.pp'",
|
142
|
-
''
|
143
|
+
''
|
143
144
|
].join("\n")
|
144
145
|
break
|
145
|
-
elsif File.
|
146
|
+
elsif File.exist?(d)
|
146
147
|
import_str = "import '#{adapter.manifest}'\n"
|
147
148
|
break
|
148
149
|
end
|
149
|
-
|
150
|
+
end
|
150
151
|
|
151
152
|
import_str
|
152
153
|
end
|
@@ -167,34 +168,34 @@ module RSpec::Puppet
|
|
167
168
|
end
|
168
169
|
|
169
170
|
def test_manifest(type, opts = {})
|
170
|
-
opts[:params] = params if
|
171
|
+
opts[:params] = params if respond_to?(:params)
|
171
172
|
|
172
|
-
|
173
|
+
case type
|
174
|
+
when :class
|
173
175
|
if opts[:params].nil? || opts[:params] == {}
|
174
176
|
"include #{class_name}"
|
175
177
|
else
|
176
178
|
"class { '#{class_name}': #{param_str(opts[:params])} }"
|
177
179
|
end
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
elsif type == :define
|
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
|
+
when :define
|
185
186
|
title_str = if title.is_a?(Array)
|
186
187
|
'[' + title.map { |r| sanitise_resource_title(r) }.join(', ') + ']'
|
187
188
|
else
|
188
189
|
sanitise_resource_title(title)
|
189
190
|
end
|
190
|
-
if opts.
|
191
|
+
if opts.key?(:params)
|
191
192
|
"#{class_name} { #{title_str}: #{param_str(opts[:params])} }"
|
192
193
|
else
|
193
194
|
"#{class_name} { #{title_str}: }"
|
194
195
|
end
|
195
|
-
|
196
|
+
when :host
|
196
197
|
nil
|
197
|
-
|
198
|
+
when :type_alias
|
198
199
|
"$test = #{str_from_value(opts[:test_value])}\nassert_type(#{self.class.top_level_description}, $test)"
|
199
200
|
end
|
200
201
|
end
|
@@ -204,8 +205,9 @@ module RSpec::Puppet
|
|
204
205
|
end
|
205
206
|
|
206
207
|
def nodename(type)
|
207
|
-
return node if
|
208
|
-
|
208
|
+
return node if respond_to?(:node)
|
209
|
+
|
210
|
+
if %i[class define function application].include? type
|
209
211
|
Puppet[:certname]
|
210
212
|
else
|
211
213
|
class_name
|
@@ -217,47 +219,43 @@ module RSpec::Puppet
|
|
217
219
|
end
|
218
220
|
|
219
221
|
def pre_cond
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
pre_condition
|
225
|
-
end
|
222
|
+
return unless respond_to?(:pre_condition) && !pre_condition.nil?
|
223
|
+
|
224
|
+
if pre_condition.is_a? Array
|
225
|
+
pre_condition.compact.join("\n")
|
226
226
|
else
|
227
|
-
|
227
|
+
pre_condition
|
228
228
|
end
|
229
229
|
end
|
230
230
|
|
231
231
|
def post_cond
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
post_condition
|
237
|
-
end
|
232
|
+
return unless respond_to?(:post_condition) && !post_condition.nil?
|
233
|
+
|
234
|
+
if post_condition.is_a? Array
|
235
|
+
post_condition.compact.join("\n")
|
238
236
|
else
|
239
|
-
|
237
|
+
post_condition
|
240
238
|
end
|
241
239
|
end
|
242
240
|
|
243
241
|
def facts_hash(node)
|
244
242
|
base_facts = {
|
245
243
|
'clientversion' => Puppet::PUPPETVERSION,
|
246
|
-
'environment'
|
244
|
+
'environment' => environment.to_s
|
247
245
|
}
|
248
246
|
|
249
247
|
node_facts = {
|
250
|
-
'hostname'
|
251
|
-
'fqdn'
|
252
|
-
'domain'
|
248
|
+
'hostname' => node.split('.').first,
|
249
|
+
'fqdn' => node,
|
250
|
+
'domain' => node.split('.', 2).last,
|
253
251
|
'clientcert' => node,
|
254
|
-
'ipaddress6' => 'FE80:0000:0000:0000:AAAA:AAAA:AAAA'
|
252
|
+
'ipaddress6' => 'FE80:0000:0000:0000:AAAA:AAAA:AAAA'
|
255
253
|
}
|
256
254
|
|
257
255
|
networking_facts = {
|
258
256
|
'hostname' => node_facts['hostname'],
|
259
|
-
'fqdn'
|
260
|
-
'domain'
|
257
|
+
'fqdn' => node_facts['fqdn'],
|
258
|
+
'domain' => node_facts['domain']
|
261
259
|
}
|
262
260
|
|
263
261
|
result_facts = if RSpec.configuration.default_facts.any?
|
@@ -269,11 +267,13 @@ module RSpec::Puppet
|
|
269
267
|
# Merge in node facts so they always exist by default, but only if they
|
270
268
|
# haven't been defined in `RSpec.configuration.default_facts`
|
271
269
|
result_facts.merge!(munge_facts(node_facts)) { |_key, old_val, new_val| old_val.nil? ? new_val : old_val }
|
272
|
-
(result_facts['networking'] ||= {}).merge!(networking_facts)
|
270
|
+
(result_facts['networking'] ||= {}).merge!(networking_facts) do |_key, old_val, new_val|
|
271
|
+
old_val.nil? ? new_val : old_val
|
272
|
+
end
|
273
273
|
|
274
274
|
# Merge in `let(:facts)` facts
|
275
275
|
result_facts.merge!(munge_facts(base_facts))
|
276
|
-
result_facts.merge!(munge_facts(facts)) if
|
276
|
+
result_facts.merge!(munge_facts(facts)) if respond_to?(:facts)
|
277
277
|
|
278
278
|
# Merge node facts again on top of `let(:facts)` facts, but only if
|
279
279
|
# a node name is given with `let(:node)`
|
@@ -284,8 +284,7 @@ module RSpec::Puppet
|
|
284
284
|
|
285
285
|
# Facter currently supports lower case facts. Bug FACT-777 has been submitted to support case sensitive
|
286
286
|
# facts.
|
287
|
-
|
288
|
-
downcase_facts
|
287
|
+
result_facts.transform_keys(&:downcase)
|
289
288
|
end
|
290
289
|
|
291
290
|
def node_params_hash
|
@@ -301,7 +300,7 @@ module RSpec::Puppet
|
|
301
300
|
param_str_from_hash(params)
|
302
301
|
end
|
303
302
|
|
304
|
-
def trusted_facts_hash(
|
303
|
+
def trusted_facts_hash(_node_name)
|
305
304
|
return {} unless Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0
|
306
305
|
|
307
306
|
extensions = {}
|
@@ -310,7 +309,7 @@ module RSpec::Puppet
|
|
310
309
|
extensions.merge!(munge_facts(RSpec.configuration.default_trusted_facts))
|
311
310
|
end
|
312
311
|
|
313
|
-
extensions.merge!(munge_facts(trusted_facts)) if
|
312
|
+
extensions.merge!(munge_facts(trusted_facts)) if respond_to?(:trusted_facts)
|
314
313
|
extensions
|
315
314
|
end
|
316
315
|
|
@@ -323,7 +322,7 @@ module RSpec::Puppet
|
|
323
322
|
external_data.merge!(munge_facts(RSpec.configuration.default_trusted_external_data))
|
324
323
|
end
|
325
324
|
|
326
|
-
external_data.merge!(munge_facts(trusted_external_data)) if
|
325
|
+
external_data.merge!(munge_facts(trusted_external_data)) if respond_to?(:trusted_external_data)
|
327
326
|
external_data
|
328
327
|
end
|
329
328
|
|
@@ -331,26 +330,25 @@ module RSpec::Puppet
|
|
331
330
|
server_facts = {}
|
332
331
|
|
333
332
|
# Add our server version to the fact list
|
334
|
-
server_facts[
|
333
|
+
server_facts['serverversion'] = Puppet.version.to_s
|
335
334
|
|
336
335
|
# And then add the server name and IP
|
337
|
-
{
|
338
|
-
|
339
|
-
|
340
|
-
if value = FacterImpl.value(fact)
|
336
|
+
{ 'servername' => 'fqdn',
|
337
|
+
'serverip' => 'ipaddress' }.each do |var, fact|
|
338
|
+
if (value = FacterImpl.value(fact))
|
341
339
|
server_facts[var] = value
|
342
340
|
else
|
343
341
|
warn "Could not retrieve fact #{fact}"
|
344
342
|
end
|
345
343
|
end
|
346
344
|
|
347
|
-
if server_facts[
|
345
|
+
if server_facts['servername'].nil?
|
348
346
|
host = FacterImpl.value(:hostname)
|
349
|
-
if domain = FacterImpl.value(:domain)
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
347
|
+
server_facts['servername'] = if (domain = FacterImpl.value(:domain))
|
348
|
+
[host, domain].join('.')
|
349
|
+
else
|
350
|
+
host
|
351
|
+
end
|
354
352
|
end
|
355
353
|
server_facts
|
356
354
|
end
|
@@ -358,19 +356,19 @@ module RSpec::Puppet
|
|
358
356
|
def str_from_value(value)
|
359
357
|
case value
|
360
358
|
when Hash
|
361
|
-
kvs = value.collect do |k,v|
|
359
|
+
kvs = value.collect do |k, v|
|
362
360
|
"#{str_from_value(k)} => #{str_from_value(v)}"
|
363
|
-
end.join(
|
361
|
+
end.join(', ')
|
364
362
|
"{ #{kvs} }"
|
365
363
|
when Array
|
366
364
|
vals = value.map do |v|
|
367
365
|
str_from_value(v)
|
368
|
-
end.join(
|
366
|
+
end.join(', ')
|
369
367
|
"[ #{vals} ]"
|
370
368
|
when :default
|
371
|
-
'default'
|
369
|
+
'default' # verbatim default keyword
|
372
370
|
when :undef
|
373
|
-
'undef'
|
371
|
+
'undef' # verbatim undef keyword
|
374
372
|
when Symbol
|
375
373
|
str_from_value(value.to_s)
|
376
374
|
else
|
@@ -381,8 +379,8 @@ module RSpec::Puppet
|
|
381
379
|
def param_str_from_hash(params_hash)
|
382
380
|
# the param_str has special quoting rules, because the top-level keys are the Puppet
|
383
381
|
# params, which may not be quoted
|
384
|
-
params_hash.collect do |k,v|
|
385
|
-
"#{k
|
382
|
+
params_hash.collect do |k, v|
|
383
|
+
"#{k} => #{str_from_value(v)}"
|
386
384
|
end.join(', ')
|
387
385
|
end
|
388
386
|
|
@@ -392,7 +390,7 @@ module RSpec::Puppet
|
|
392
390
|
|
393
391
|
# Enable app_management by default for Puppet versions that support it
|
394
392
|
if Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0 && Puppet.version.to_i < 5
|
395
|
-
Puppet[:app_management] = ENV.include?('PUPPET_NOAPP_MANAGMENT')
|
393
|
+
Puppet[:app_management] = !ENV.include?('PUPPET_NOAPP_MANAGMENT')
|
396
394
|
end
|
397
395
|
|
398
396
|
adapter.modulepath.map do |d|
|
@@ -405,25 +403,24 @@ module RSpec::Puppet
|
|
405
403
|
end
|
406
404
|
|
407
405
|
def with_vardir
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
FileUtils.rm_rf(vardir) if vardir && File.directory?(vardir)
|
413
|
-
end
|
406
|
+
vardir = setup_puppet
|
407
|
+
return yield(vardir) if block_given?
|
408
|
+
ensure
|
409
|
+
FileUtils.rm_rf(vardir) if vardir && File.directory?(vardir)
|
414
410
|
end
|
415
411
|
|
416
|
-
def build_catalog_without_cache(nodename, facts_val, trusted_facts_val, hiera_config_val, code, exported,
|
412
|
+
def build_catalog_without_cache(nodename, facts_val, trusted_facts_val, hiera_config_val, code, exported,
|
413
|
+
node_params, *_)
|
417
414
|
build_catalog_without_cache_v2({
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
415
|
+
nodename: nodename,
|
416
|
+
facts_val: facts_val,
|
417
|
+
trusted_facts_val: trusted_facts_val,
|
418
|
+
hiera_config_val: hiera_config_val,
|
419
|
+
code: code,
|
420
|
+
exported: exported,
|
421
|
+
node_params: node_params,
|
422
|
+
trusted_external: {}
|
423
|
+
})
|
427
424
|
end
|
428
425
|
|
429
426
|
def build_catalog_without_cache_v2(
|
@@ -445,7 +442,7 @@ module RSpec::Puppet
|
|
445
442
|
# It would be nice if Puppet offered a public API for invalidating their
|
446
443
|
# cached instance of Hiera, but que sera sera. We will go directly against
|
447
444
|
# the implementation out of absolute necessity.
|
448
|
-
HieraPuppet.instance_variable_set(
|
445
|
+
HieraPuppet.instance_variable_set(:@hiera, nil) if defined? HieraPuppet
|
449
446
|
|
450
447
|
Puppet[:code] = code
|
451
448
|
|
@@ -456,18 +453,16 @@ module RSpec::Puppet
|
|
456
453
|
node_facts = Puppet::Node::Facts.new(nodename, facts_val.dup)
|
457
454
|
node_params = facts_val.merge(node_params)
|
458
455
|
|
459
|
-
node_obj = Puppet::Node.new(nodename, { :
|
456
|
+
node_obj = Puppet::Node.new(nodename, { parameters: node_params, facts: node_facts })
|
460
457
|
|
461
458
|
trusted_info = ['remote', nodename, trusted_facts_val]
|
462
|
-
if Puppet::Util::Package.versioncmp(Puppet.version, '6.14.0') >= 0
|
463
|
-
trusted_info.push(trusted_external_data)
|
464
|
-
end
|
459
|
+
trusted_info.push(trusted_external_data) if Puppet::Util::Package.versioncmp(Puppet.version, '6.14.0') >= 0
|
465
460
|
if Puppet::Util::Package.versioncmp(Puppet.version, '4.3.0') >= 0
|
466
461
|
Puppet.push_context(
|
467
462
|
{
|
468
|
-
:
|
463
|
+
trusted_information: Puppet::Context::TrustedInformation.new(*trusted_info)
|
469
464
|
},
|
470
|
-
|
465
|
+
'Context for spec trusted hash'
|
471
466
|
)
|
472
467
|
|
473
468
|
node_obj.add_server_facts(server_facts_hash) if RSpec.configuration.trusted_server_facts
|
@@ -479,7 +474,7 @@ module RSpec::Puppet
|
|
479
474
|
def stub_facts!(facts)
|
480
475
|
Puppet.settings[:autosign] = false if Puppet.settings.include? :autosign
|
481
476
|
FacterImpl.clear
|
482
|
-
facts.each { |k, v| FacterImpl.add(k, :
|
477
|
+
facts.each { |k, v| FacterImpl.add(k, weight: 999) { setcode { v } } }
|
483
478
|
end
|
484
479
|
|
485
480
|
def build_catalog(*args)
|
@@ -493,27 +488,31 @@ module RSpec::Puppet
|
|
493
488
|
end
|
494
489
|
|
495
490
|
def munge_facts(facts)
|
496
|
-
|
497
|
-
|
498
|
-
|
491
|
+
if facts.is_a? Hash
|
492
|
+
return facts.reduce({}) do |memo, (k, v)|
|
493
|
+
memo.tap { |m| m[k.to_s] = munge_facts(v) }
|
494
|
+
end
|
495
|
+
end
|
499
496
|
|
500
|
-
|
501
|
-
|
502
|
-
|
497
|
+
if facts.is_a? Array
|
498
|
+
return facts.each_with_object([]) do |v, memo|
|
499
|
+
memo << munge_facts(v)
|
500
|
+
end
|
501
|
+
end
|
503
502
|
|
504
503
|
facts
|
505
504
|
end
|
506
505
|
|
507
506
|
def escape_special_chars(string)
|
508
|
-
string.gsub(/\$/,
|
507
|
+
string.gsub(/\$/, '\\$')
|
509
508
|
end
|
510
509
|
|
511
510
|
def rspec_compatibility
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
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
|
517
516
|
end
|
518
517
|
|
519
518
|
def fixture_spec_hiera_conf(mod)
|
@@ -540,7 +539,7 @@ module RSpec::Puppet
|
|
540
539
|
# @param [String] title reference title
|
541
540
|
# @return [RSpec::Puppet::RawString] return a new RawString with the type/title populated correctly
|
542
541
|
def ref(type, title)
|
543
|
-
|
542
|
+
RSpec::Puppet::RawString.new("#{type}['#{title}']")
|
544
543
|
end
|
545
544
|
|
546
545
|
# Helper to return value wrapped in Sensitive type.
|
@@ -548,7 +547,7 @@ module RSpec::Puppet
|
|
548
547
|
# @param [Object] value to wrap
|
549
548
|
# @return [RSpec::Puppet::Sensitive] a new Sensitive wrapper with the new value
|
550
549
|
def sensitive(value)
|
551
|
-
|
550
|
+
RSpec::Puppet::Sensitive.new(value)
|
552
551
|
end
|
553
552
|
|
554
553
|
# @!attribute [r] adapter
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'rake'
|
2
4
|
require 'open3'
|
3
5
|
require 'json'
|
@@ -17,7 +19,7 @@ task :release_test do
|
|
17
19
|
'garethr/garethr-docker',
|
18
20
|
'sensu/sensu-puppet',
|
19
21
|
'jenkinsci/puppet-jenkins',
|
20
|
-
'rnelson0/puppet-local_user'
|
22
|
+
'rnelson0/puppet-local_user'
|
21
23
|
]
|
22
24
|
|
23
25
|
Bundler.with_clean_env do
|
@@ -61,7 +63,8 @@ task :release_test do
|
|
61
63
|
end
|
62
64
|
|
63
65
|
print ' Running baseline tests... '
|
64
|
-
baseline_output, _, status = Open3.capture3({'SPEC_OPTS' => '--format json'}, 'bundle', 'exec', 'rake',
|
66
|
+
baseline_output, _, status = Open3.capture3({ 'SPEC_OPTS' => '--format json' }, 'bundle', 'exec', 'rake',
|
67
|
+
'spec')
|
65
68
|
if status.success?
|
66
69
|
puts 'Done'
|
67
70
|
else
|
@@ -94,12 +97,12 @@ task :release_test do
|
|
94
97
|
if status.success?
|
95
98
|
puts 'Done'
|
96
99
|
else
|
97
|
-
puts
|
100
|
+
puts 'FAILED'
|
98
101
|
next
|
99
102
|
end
|
100
103
|
|
101
104
|
print ' Running tests against rspec-puppet HEAD... '
|
102
|
-
head_output, _, status = Open3.capture3({'SPEC_OPTS' => '--format json'}, 'bundle', 'exec', 'rake', 'spec')
|
105
|
+
head_output, _, status = Open3.capture3({ 'SPEC_OPTS' => '--format json' }, 'bundle', 'exec', 'rake', 'spec')
|
103
106
|
if status.success?
|
104
107
|
puts 'Done'
|
105
108
|
else
|
@@ -114,7 +117,7 @@ task :release_test do
|
|
114
117
|
puts 'FAILED'
|
115
118
|
end
|
116
119
|
|
117
|
-
json_regex =
|
120
|
+
json_regex = /\{(?:[^{}]|(?:\g<0>))*\}/x
|
118
121
|
baseline_results = JSON.parse(baseline_output.scan(json_regex).find { |r| r.include?('summary_line') })
|
119
122
|
head_results = JSON.parse(head_output.scan(json_regex).find { |r| r.include?('summary_line') })
|
120
123
|
if head_results['summary_line'] == baseline_results['summary_line']
|