puppet 7.1.0-x64-mingw32 → 7.6.1-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +38 -30
  3. data/ext/build_defaults.yaml +0 -1
  4. data/lib/puppet/application.rb +10 -6
  5. data/lib/puppet/application/agent.rb +1 -0
  6. data/lib/puppet/application/apply.rb +3 -2
  7. data/lib/puppet/application/device.rb +1 -0
  8. data/lib/puppet/application/script.rb +1 -0
  9. data/lib/puppet/application/ssl.rb +11 -0
  10. data/lib/puppet/configurer.rb +16 -3
  11. data/lib/puppet/defaults.rb +14 -19
  12. data/lib/puppet/environments.rb +16 -1
  13. data/lib/puppet/face/facts.rb +26 -2
  14. data/lib/puppet/ffi/windows/api_types.rb +1 -1
  15. data/lib/puppet/ffi/windows/constants.rb +1 -1
  16. data/lib/puppet/file_serving/configuration/parser.rb +5 -2
  17. data/lib/puppet/file_system/memory_file.rb +8 -1
  18. data/lib/puppet/file_system/windows.rb +2 -0
  19. data/lib/puppet/functions.rb +1 -1
  20. data/lib/puppet/functions/partition.rb +8 -0
  21. data/lib/puppet/http/factory.rb +4 -0
  22. data/lib/puppet/indirector/facts/facter.rb +1 -0
  23. data/lib/puppet/loaders.rb +0 -4
  24. data/lib/puppet/module.rb +1 -0
  25. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  26. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  27. data/lib/puppet/network/formats.rb +67 -0
  28. data/lib/puppet/network/http.rb +5 -2
  29. data/lib/puppet/network/http/api.rb +10 -6
  30. data/lib/puppet/network/http/api/master.rb +3 -2
  31. data/lib/puppet/network/http/api/master/v3.rb +2 -25
  32. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
  33. data/lib/puppet/network/http/api/server.rb +10 -0
  34. data/lib/puppet/network/http/api/server/v3.rb +39 -0
  35. data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
  36. data/lib/puppet/node/environment.rb +12 -5
  37. data/lib/puppet/parser/ast/leaf.rb +3 -2
  38. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  39. data/lib/puppet/pops/loader/base_loader.rb +42 -32
  40. data/lib/puppet/pops/loader/dependency_loader.rb +2 -2
  41. data/lib/puppet/pops/loader/loader.rb +15 -5
  42. data/lib/puppet/pops/loader/module_loaders.rb +8 -8
  43. data/lib/puppet/pops/loader/predefined_loader.rb +4 -0
  44. data/lib/puppet/pops/loader/runtime3_type_loader.rb +1 -1
  45. data/lib/puppet/pops/loader/static_loader.rb +4 -0
  46. data/lib/puppet/pops/loaders.rb +4 -4
  47. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  48. data/lib/puppet/pops/parser/lexer2.rb +0 -4
  49. data/lib/puppet/pops/types/p_type_set_type.rb +1 -1
  50. data/lib/puppet/pops/validation/checker4_0.rb +0 -1
  51. data/lib/puppet/property/list.rb +1 -1
  52. data/lib/puppet/provider/group/groupadd.rb +13 -8
  53. data/lib/puppet/provider/package/apt.rb +34 -2
  54. data/lib/puppet/provider/package/aptitude.rb +6 -0
  55. data/lib/puppet/provider/package/dnfmodule.rb +1 -1
  56. data/lib/puppet/provider/package/puppet_gem.rb +12 -1
  57. data/lib/puppet/provider/service/debian.rb +2 -0
  58. data/lib/puppet/provider/service/systemd.rb +1 -1
  59. data/lib/puppet/provider/user/useradd.rb +62 -8
  60. data/lib/puppet/reference/configuration.rb +6 -5
  61. data/lib/puppet/settings.rb +36 -30
  62. data/lib/puppet/settings/alias_setting.rb +37 -0
  63. data/lib/puppet/settings/environment_conf.rb +1 -0
  64. data/lib/puppet/type/package.rb +3 -3
  65. data/lib/puppet/util/autoload.rb +1 -8
  66. data/lib/puppet/util/monkey_patches.rb +7 -0
  67. data/lib/puppet/util/posix.rb +1 -1
  68. data/lib/puppet/util/windows/adsi.rb +46 -0
  69. data/lib/puppet/util/windows/principal.rb +9 -2
  70. data/lib/puppet/util/windows/sid.rb +4 -2
  71. data/lib/puppet/version.rb +1 -1
  72. data/locales/puppet.pot +166 -146
  73. data/man/man5/puppet.conf.5 +14 -6
  74. data/man/man8/puppet-agent.8 +2 -2
  75. data/man/man8/puppet-apply.8 +2 -2
  76. data/man/man8/puppet-catalog.8 +1 -1
  77. data/man/man8/puppet-config.8 +1 -1
  78. data/man/man8/puppet-describe.8 +1 -1
  79. data/man/man8/puppet-device.8 +2 -2
  80. data/man/man8/puppet-doc.8 +1 -1
  81. data/man/man8/puppet-epp.8 +1 -1
  82. data/man/man8/puppet-facts.8 +8 -2
  83. data/man/man8/puppet-filebucket.8 +1 -1
  84. data/man/man8/puppet-generate.8 +1 -1
  85. data/man/man8/puppet-help.8 +1 -1
  86. data/man/man8/puppet-lookup.8 +1 -1
  87. data/man/man8/puppet-module.8 +1 -1
  88. data/man/man8/puppet-node.8 +1 -1
  89. data/man/man8/puppet-parser.8 +1 -1
  90. data/man/man8/puppet-plugin.8 +1 -1
  91. data/man/man8/puppet-report.8 +1 -1
  92. data/man/man8/puppet-resource.8 +1 -1
  93. data/man/man8/puppet-script.8 +2 -2
  94. data/man/man8/puppet-ssl.8 +5 -1
  95. data/man/man8/puppet.8 +2 -2
  96. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  97. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services_vendor_preset +9 -0
  98. data/spec/integration/application/agent_spec.rb +160 -3
  99. data/spec/integration/application/apply_spec.rb +19 -0
  100. data/spec/integration/application/plugin_spec.rb +1 -1
  101. data/spec/integration/defaults_spec.rb +0 -7
  102. data/spec/integration/http/client_spec.rb +12 -0
  103. data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
  104. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  105. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  106. data/spec/integration/parser/collection_spec.rb +10 -0
  107. data/spec/integration/resource/type_collection_spec.rb +2 -6
  108. data/spec/integration/transaction_spec.rb +4 -9
  109. data/spec/integration/util/windows/adsi_spec.rb +21 -1
  110. data/spec/integration/util/windows/principal_spec.rb +21 -0
  111. data/spec/integration/util/windows/registry_spec.rb +6 -10
  112. data/spec/spec_helper.rb +12 -5
  113. data/spec/unit/agent_spec.rb +8 -6
  114. data/spec/unit/application/agent_spec.rb +0 -1
  115. data/spec/unit/application/facts_spec.rb +58 -7
  116. data/spec/unit/application/filebucket_spec.rb +0 -2
  117. data/spec/unit/application/ssl_spec.rb +23 -0
  118. data/spec/unit/application_spec.rb +17 -9
  119. data/spec/unit/confine/feature_spec.rb +1 -1
  120. data/spec/unit/confine_spec.rb +8 -2
  121. data/spec/unit/environments_spec.rb +164 -88
  122. data/spec/unit/face/node_spec.rb +0 -11
  123. data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
  124. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  125. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  126. data/spec/unit/file_system_spec.rb +9 -0
  127. data/spec/unit/forge/module_release_spec.rb +2 -7
  128. data/spec/unit/http/factory_spec.rb +19 -0
  129. data/spec/unit/indirector/face_spec.rb +0 -1
  130. data/spec/unit/indirector/facts/facter_spec.rb +20 -5
  131. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  132. data/spec/unit/indirector/indirection_spec.rb +8 -12
  133. data/spec/unit/indirector_spec.rb +2 -2
  134. data/spec/unit/module_spec.rb +1 -1
  135. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  136. data/spec/unit/network/formats_spec.rb +41 -0
  137. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
  138. data/spec/unit/network/http/api/master_spec.rb +38 -0
  139. data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
  140. data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
  141. data/spec/unit/network/http/api_spec.rb +11 -11
  142. data/spec/unit/parser/compiler_spec.rb +3 -19
  143. data/spec/unit/parser/resource_spec.rb +14 -8
  144. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  145. data/spec/unit/pops/loaders/dependency_loader_spec.rb +1 -1
  146. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  147. data/spec/unit/pops/types/type_parser_spec.rb +2 -1
  148. data/spec/unit/pops/validator/validator_spec.rb +20 -43
  149. data/spec/unit/property_spec.rb +1 -0
  150. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  151. data/spec/unit/provider/nameservice_spec.rb +66 -65
  152. data/spec/unit/provider/package/apt_spec.rb +28 -23
  153. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  154. data/spec/unit/provider/package/base_spec.rb +6 -5
  155. data/spec/unit/provider/package/dnfmodule_spec.rb +10 -1
  156. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  157. data/spec/unit/provider/package/pip_spec.rb +6 -11
  158. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  159. data/spec/unit/provider/package/puppet_gem_spec.rb +28 -0
  160. data/spec/unit/provider/service/systemd_spec.rb +11 -0
  161. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  162. data/spec/unit/provider/user/useradd_spec.rb +70 -3
  163. data/spec/unit/provider_spec.rb +6 -8
  164. data/spec/unit/resource/type_spec.rb +1 -1
  165. data/spec/unit/resource_spec.rb +11 -10
  166. data/spec/unit/settings_spec.rb +13 -6
  167. data/spec/unit/ssl/base_spec.rb +0 -1
  168. data/spec/unit/ssl/certificate_request_spec.rb +4 -10
  169. data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
  170. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  171. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  172. data/spec/unit/transaction_spec.rb +13 -4
  173. data/spec/unit/type/file/content_spec.rb +0 -1
  174. data/spec/unit/type/file/selinux_spec.rb +0 -2
  175. data/spec/unit/type/file_spec.rb +0 -6
  176. data/spec/unit/type/group_spec.rb +13 -6
  177. data/spec/unit/type/resources_spec.rb +7 -7
  178. data/spec/unit/type/service_spec.rb +1 -1
  179. data/spec/unit/type/tidy_spec.rb +0 -1
  180. data/spec/unit/type_spec.rb +2 -2
  181. data/spec/unit/util/at_fork_spec.rb +2 -2
  182. data/spec/unit/util/autoload_spec.rb +5 -1
  183. data/spec/unit/util/backups_spec.rb +1 -2
  184. data/spec/unit/util/execution_spec.rb +15 -11
  185. data/spec/unit/util/inifile_spec.rb +6 -14
  186. data/spec/unit/util/log_spec.rb +8 -7
  187. data/spec/unit/util/logging_spec.rb +3 -3
  188. data/spec/unit/util/posix_spec.rb +16 -10
  189. data/spec/unit/util/selinux_spec.rb +76 -52
  190. data/spec/unit/util/suidmanager_spec.rb +44 -41
  191. data/spec/unit/util/windows/sid_spec.rb +6 -0
  192. data/spec/unit/util_spec.rb +13 -6
  193. metadata +18 -16
  194. data/spec/lib/matchers/include.rb +0 -27
  195. data/spec/lib/matchers/include_spec.rb +0 -32
  196. data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
  197. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
  198. data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -46,7 +46,6 @@ describe Puppet::SSL::Certificate do
46
46
  describe "when initializing wrapped class from a file with #read" do
47
47
  it "should open the file with ASCII encoding" do
48
48
  path = '/foo/bar/cert'
49
- allow(Puppet::SSL::Base).to receive(:valid_certname).and_return(true)
50
49
  expect(Puppet::FileSystem).to receive(:read).with(path, :encoding => Encoding::ASCII).and_return("bar")
51
50
  @base.read(path)
52
51
  end
@@ -320,11 +320,8 @@ describe Puppet::SSL::CertificateRequest do
320
320
  expect(csr.verify(key)).to be_truthy
321
321
  end
322
322
 
323
- # Attempts to use SHA512 and SHA384 for signing certificates don't seem to work
324
- # So commenting it out till it is sorted out
325
- # The problem seems to be with the ability to sign a CSR when using either of
326
- # these hash algorithms
327
- pending "should use SHA512 to sign the csr when SHA256 and SHA1 aren't available" do
323
+ it "should use SHA512 to sign the csr when SHA256 and SHA1 aren't available" do
324
+ key = OpenSSL::PKey::RSA.new(2048)
328
325
  csr = OpenSSL::X509::Request.new
329
326
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA256").and_return(false)
330
327
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA1").and_return(false)
@@ -334,11 +331,8 @@ describe Puppet::SSL::CertificateRequest do
334
331
  expect(csr.verify(key)).to be_truthy
335
332
  end
336
333
 
337
- # Attempts to use SHA512 and SHA384 for signing certificates don't seem to work
338
- # So commenting it out till it is sorted out
339
- # The problem seems to be with the ability to sign a CSR when using either of
340
- # these hash algorithms
341
- pending "should use SHA384 to sign the csr when SHA256/SHA1/SHA512 aren't available" do
334
+ it "should use SHA384 to sign the csr when SHA256/SHA1/SHA512 aren't available" do
335
+ key = OpenSSL::PKey::RSA.new(2048)
342
336
  csr = OpenSSL::X509::Request.new
343
337
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA256").and_return(false)
344
338
  expect(OpenSSL::Digest).to receive(:const_defined?).with("SHA1").and_return(false)
@@ -271,8 +271,11 @@ describe Puppet::SSL::SSLProvider do
271
271
  end
272
272
 
273
273
  # This option is only available in openssl 1.1
274
- # TODO PUP-10689 behavior changed in openssl 1.1.1h
275
- if Puppet::Util::Package.versioncmp(OpenSSL::OPENSSL_LIBRARY_VERSION.split[1], '1.1.1h') < 0
274
+ # OpenSSL 1.1.1h no longer reports expired root CAs when using "verify".
275
+ # This regression was fixed in 1.1.1i, so only skip this test if we're on
276
+ # the affected version.
277
+ # See: https://github.com/openssl/openssl/pull/13585
278
+ if Puppet::Util::Package.versioncmp(OpenSSL::OPENSSL_LIBRARY_VERSION.split[1], '1.1.1h') != 0
276
279
  it 'raises if root cert signature is invalid', if: defined?(OpenSSL::X509::V_FLAG_CHECK_SS_SIGNATURE) do
277
280
  ca = global_cacerts.first
278
281
  ca.sign(wrong_key, OpenSSL::Digest::SHA256.new)
@@ -33,10 +33,6 @@ describe Puppet::Transaction::AdditionalResourceGenerator do
33
33
 
34
34
  newparam(:code)
35
35
 
36
- def respond_to?(method_name)
37
- method_name == self[:kind] || super
38
- end
39
-
40
36
  def eval_generate
41
37
  eval_code
42
38
  end
@@ -314,13 +310,13 @@ describe Puppet::Transaction::AdditionalResourceGenerator do
314
310
 
315
311
  it "sets resources_failed_to_generate to true if resource#eval_generate raises an exception" do
316
312
  catalog = compile_to_ral(<<-MANIFEST)
317
- notify { 'hello': }
313
+ generator { thing: }
318
314
  MANIFEST
319
315
 
320
- allow(catalog.resource("Notify[hello]")).to receive(:eval_generate).and_raise(RuntimeError)
316
+ allow(catalog.resource("Generator[thing]")).to receive(:eval_generate).and_raise(RuntimeError)
321
317
  relationship_graph = relationship_graph_for(catalog)
322
318
  generator = Puppet::Transaction::AdditionalResourceGenerator.new(catalog, relationship_graph, prioritizer)
323
- generator.eval_generate(catalog.resource("Notify[hello]"))
319
+ generator.eval_generate(catalog.resource("Generator[thing]"))
324
320
 
325
321
  expect(generator.resources_failed_to_generate).to be_truthy
326
322
  end
@@ -152,6 +152,9 @@ describe Puppet::Transaction::EventManager do
152
152
 
153
153
  @resource = Puppet::Type.type(:file).new :path => make_absolute("/my/file")
154
154
  @event = Puppet::Transaction::Event.new(:name => :event, :resource => @resource)
155
+
156
+ @resource.class.send(:define_method, :callback1) {}
157
+ @resource.class.send(:define_method, :callback2) {}
155
158
  end
156
159
 
157
160
  it "should call the required callback once for each set of associated events" do
@@ -178,7 +181,7 @@ describe Puppet::Transaction::EventManager do
178
181
 
179
182
  allow(@resource).to receive(:callback1)
180
183
 
181
- @manager.process_events(@resource) #x
184
+ @manager.process_events(@resource)
182
185
 
183
186
  expect(@transaction.resource_status(@resource).events.length).to eq(1)
184
187
  end
@@ -211,9 +214,11 @@ describe Puppet::Transaction::EventManager do
211
214
  @event2 = Puppet::Transaction::Event.new(:name => :event, :resource => @resource)
212
215
  @event2.status = "success"
213
216
  expect(@manager).to receive(:queued_events).with(@resource).and_yield(:callback1, [@event, @event2])
217
+ @resource.class.send(:define_method, :callback1) {}
214
218
  end
215
219
 
216
220
  it "should call the callback" do
221
+
217
222
  expect(@resource).to receive(:callback1)
218
223
 
219
224
  @manager.process_events(@resource)
@@ -225,6 +230,7 @@ describe Puppet::Transaction::EventManager do
225
230
  allow(@event).to receive(:status).and_return("noop")
226
231
  allow(@resource).to receive(:event).and_return(Puppet::Transaction::Event.new)
227
232
  expect(@manager).to receive(:queued_events).with(@resource).and_yield(:callback1, [@event])
233
+ @resource.class.send(:define_method, :callback1) {}
228
234
  end
229
235
 
230
236
  it "should log" do
@@ -254,6 +260,7 @@ describe Puppet::Transaction::EventManager do
254
260
  allow(@resource).to receive(:event).and_return(Puppet::Transaction::Event.new)
255
261
  allow(@resource).to receive(:noop?).and_return(true)
256
262
  expect(@manager).to receive(:queued_events).with(@resource).and_yield(:callback1, [@event])
263
+ @resource.class.send(:define_method, :callback1) {}
257
264
  end
258
265
 
259
266
  it "should log" do
@@ -279,7 +286,7 @@ describe Puppet::Transaction::EventManager do
279
286
 
280
287
  describe "and the callback fails" do
281
288
  before do
282
- expect(@resource).to receive(:callback1).and_raise("a failure")
289
+ @resource.class.send(:define_method, :callback1) { raise "a failure" }
283
290
 
284
291
  expect(@manager).to receive(:queued_events).and_yield(:callback1, [@event])
285
292
  end
@@ -323,16 +330,12 @@ describe Puppet::Transaction::EventManager do
323
330
 
324
331
  describe "when queueing then processing events for a given resource" do
325
332
  before do
326
- @transaction = Puppet::Transaction.new(Puppet::Resource::Catalog.new, nil, nil)
327
- @manager = Puppet::Transaction::EventManager.new(@transaction)
333
+ @catalog = Puppet::Resource::Catalog.new
334
+ @target = Puppet::Type.type(:exec).new(name: 'target', path: ENV['PATH'])
335
+ @resource = Puppet::Type.type(:exec).new(name: 'resource', path: ENV['PATH'], notify: @target)
336
+ @catalog.add_resource(@resource, @target)
328
337
 
329
- @resource = Puppet::Type.type(:file).new :path => make_absolute("/my/file")
330
- @target = Puppet::Type.type(:file).new :path => make_absolute("/your/file")
331
-
332
- @graph = allow('graph')
333
- allow(@graph).to receive(:matching_edges).and_return([])
334
- allow(@graph).to receive(:matching_edges).with(anything, @resource).and_return([double('edge', :target => @target, :callback => :refresh)])
335
- allow(@manager).to receive(:relationship_graph).and_return(@graph)
338
+ @manager = Puppet::Transaction::EventManager.new(Puppet::Transaction.new(@catalog, nil, nil))
336
339
 
337
340
  @event = Puppet::Transaction::Event.new(:name => :notify, :resource => @target)
338
341
  @event2 = Puppet::Transaction::Event.new(:name => :service_start, :resource => @target, :invalidate_refreshes => true)
@@ -5,6 +5,13 @@ require 'puppet_spec/compiler'
5
5
  require 'puppet/transaction'
6
6
  require 'fileutils'
7
7
 
8
+ Puppet::Type.newtype(:generator) do
9
+ newparam(:name) { isnamevar }
10
+
11
+ def generate
12
+ end
13
+ end
14
+
8
15
  describe Puppet::Transaction do
9
16
  include PuppetSpec::Files
10
17
  include PuppetSpec::Compiler
@@ -323,9 +330,9 @@ describe Puppet::Transaction do
323
330
  describe "when generating resources before traversal" do
324
331
  let(:catalog) { Puppet::Resource::Catalog.new }
325
332
  let(:transaction) { Puppet::Transaction.new(catalog, nil, Puppet::Graph::SequentialPrioritizer.new) }
326
- let(:generator) { Puppet::Type.type(:notify).new :title => "generator" }
333
+ let(:generator) { Puppet::Type.type(:generator).new :title => "generator" }
327
334
  let(:generated) do
328
- %w[a b c].map { |name| Puppet::Type.type(:notify).new(:name => name) }
335
+ %w[a b c].map { |name| Puppet::Type.type(:generator).new(:name => name) }
329
336
  end
330
337
 
331
338
  before :each do
@@ -633,7 +640,7 @@ describe Puppet::Transaction do
633
640
  end
634
641
 
635
642
  describe "and new resources are generated" do
636
- let(:generator) { Puppet::Type.type(:notify).new :title => "generator" }
643
+ let(:generator) { Puppet::Type.type(:generator).new :title => "generator" }
637
644
  let(:generated) do
638
645
  %w[a b c].map { |name| Puppet::Type.type(:package).new :title => "foo", :name => name, :provider => :apt }
639
646
  end
@@ -751,6 +758,9 @@ describe Puppet::Transaction do
751
758
  def self.is_selinux_enabled
752
759
  true
753
760
  end
761
+
762
+ def self.matchpathcon_fini
763
+ end
754
764
  end
755
765
  end
756
766
 
@@ -794,7 +804,6 @@ describe Puppet::Transaction do
794
804
  before do
795
805
  @resource = Puppet::Type.type(:notify).new :title => "foobar"
796
806
  @catalog.add_resource @resource
797
- allow(@transaction).to receive(:add_dynamically_generated_resources)
798
807
  end
799
808
 
800
809
  it 'should stop processing if :stop_processing? is true' do
@@ -11,7 +11,6 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
11
11
 
12
12
  before do
13
13
  File.open(filename, 'w') {|f| f.write "initial file content"}
14
- allow(described_class).to receive(:standalone?).and_return(false)
15
14
  end
16
15
 
17
16
  around do |example|
@@ -9,8 +9,6 @@ require 'spec_helper'
9
9
  @path = make_absolute("/my/file")
10
10
  @resource = Puppet::Type.type(:file).new :path => @path
11
11
  @sel = property.new :resource => @resource
12
- allow(@sel).to receive(:normalize_selinux_category).with("s0").and_return("s0")
13
- allow(@sel).to receive(:normalize_selinux_category).with(nil).and_return(nil)
14
12
  end
15
13
 
16
14
  it "retrieve on #{param} should return :absent if the file isn't statable" do
@@ -349,12 +349,6 @@ describe Puppet::Type.type(:file) do
349
349
  end
350
350
 
351
351
  describe "#flush" do
352
- it "should flush all properties that respond to :flush" do
353
- file[:source] = File.expand_path(__FILE__)
354
- expect(file.parameter(:source)).to receive(:flush)
355
- file.flush
356
- end
357
-
358
352
  it "should reset its stat reference" do
359
353
  FileUtils.touch(path)
360
354
  stat1 = file.stat
@@ -60,9 +60,12 @@ describe Puppet::Type.type(:group) do
60
60
  end
61
61
 
62
62
  it "delegates the existence check to its provider" do
63
- provider = @class.provide(:testing) {}
63
+ provider = @class.provide(:testing) do
64
+ def exists?
65
+ true
66
+ end
67
+ end
64
68
  provider_instance = provider.new
65
- expect(provider_instance).to receive(:exists?).and_return(true)
66
69
 
67
70
  type = @class.new(:name => "group", :provider => provider_instance)
68
71
 
@@ -77,20 +80,24 @@ describe Puppet::Type.type(:group) do
77
80
  def members
78
81
  []
79
82
  end
83
+
84
+ def members_insync?(current, should)
85
+ current == should
86
+ end
87
+
88
+ def members_to_s(values)
89
+ values.map { |v| "#{v} ()" }.join(', ')
90
+ end
80
91
  end
81
92
  end
82
93
  let (:provider_instance) { provider.new }
83
94
  let (:type) { @class.new(:name => "group", :provider => provider_instance, :members => ['user1']) }
84
95
 
85
96
  it "insync? calls members_insync?" do
86
- expect(provider_instance).to receive(:members_insync?).with(['user1'], ['user1']).and_return(true)
87
97
  expect(type.property(:members).insync?(['user1'])).to be_truthy
88
98
  end
89
99
 
90
100
  it "is_to_s and should_to_s call members_to_s" do
91
- expect(provider_instance).to receive(:members_to_s).with(['user1', 'user2']).and_return("user1 (), user2 ()")
92
- expect(provider_instance).to receive(:members_to_s).with(['user1']).and_return("user1 ()")
93
-
94
101
  expect(type.property(:members).is_to_s('user1')).to eq('user1 ()')
95
102
  expect(type.property(:members).should_to_s('user1,user2')).to eq('user1 (), user2 ()')
96
103
  end
@@ -6,6 +6,9 @@ Puppet::Type.newtype(:purgeable_test) do
6
6
  newparam(:name) {}
7
7
  end
8
8
  Puppet::Type.type(:purgeable_test).provide(:purgeable_test) do
9
+ def self.instances
10
+ []
11
+ end
9
12
  end
10
13
 
11
14
  resources = Puppet::Type.type(:resources)
@@ -46,19 +49,16 @@ describe resources do
46
49
  end
47
50
 
48
51
  it "cannot be set to true for a resource type that does not accept ensure" do
49
- allow(instance.resource_type).to receive(:respond_to?).and_return(true)
50
- allow(instance.resource_type).to receive(:validproperty?).and_return(false)
51
- expect { instance[:purge] = 'yes' }.to raise_error Puppet::Error
52
+ allow(instance.resource_type).to receive(:validproperty?).with(:ensure).and_return(false)
53
+ expect { instance[:purge] = 'yes' }.to raise_error Puppet::Error, /Purging is only supported on types that accept 'ensure'/
52
54
  end
53
55
 
54
56
  it "cannot be set to true for a resource type that does not have instances" do
55
- allow(instance.resource_type).to receive(:respond_to?).and_return(false)
56
- allow(instance.resource_type).to receive(:validproperty?).and_return(true)
57
- expect { instance[:purge] = 'yes' }.to raise_error Puppet::Error
57
+ allow(instance.resource_type).to receive(:respond_to?).with(:instances).and_return(false)
58
+ expect { instance[:purge] = 'yes' }.to raise_error Puppet::Error, /Purging resources of type file is not supported/
58
59
  end
59
60
 
60
61
  it "can be set to true for a resource type that has instances and can accept ensure" do
61
- allow(instance.resource_type).to receive(:respond_to?).and_return(true)
62
62
  allow(instance.resource_type).to receive(:validproperty?).and_return(true)
63
63
  expect { instance[:purge] = 'yes' }.to_not raise_error
64
64
  end
@@ -488,7 +488,7 @@ describe test_title, "when changing the host" do
488
488
  it "insyncness should be resolved by provider instead of superclass implementation when provider responds to the 'enabled_insync?' method" do
489
489
  allow(@service.provider.class).to receive(:supports_parameter?).and_return(true)
490
490
  @service[:enable] = true
491
- allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?).and_return(true)
491
+ allow(@service.provider).to receive(:respond_to?).with(:enabled_insync?, any_args).and_return(true)
492
492
  allow(@service.provider).to receive(:enabled_insync?).and_return(false)
493
493
 
494
494
  expect(@service.property(:enable).insync?(:true)).to eq(false)
@@ -191,7 +191,6 @@ describe tidy do
191
191
  describe "and recursion is used" do
192
192
  before do
193
193
  @tidy[:recurse] = true
194
- allow_any_instance_of(Puppet::FileServing::Fileset).to receive(:stat).and_return(double("stat"))
195
194
  @fileset = Puppet::FileServing::Fileset.new(@basepath)
196
195
  allow(Puppet::FileServing::Fileset).to receive(:new).and_return(@fileset)
197
196
  end
@@ -932,8 +932,8 @@ describe Puppet::Type, :unless => Puppet::Util::Platform.windows? do
932
932
 
933
933
  it "should always retrieve the ensure value by default" do
934
934
  @ensurable_resource = Puppet::Type.type(:file).new(:name => "/not/existent", :mode => "0644")
935
- allow(Puppet::Type::File::Ensure).to receive(:ensure).and_return(:absent)
936
- expect_any_instance_of(Puppet::Type::File::Ensure).to receive(:retrieve).once
935
+ # the ensure property is lazily metaprogrammed...
936
+ allow_any_instance_of(Puppet::Type::File::Ensure).to receive(:retrieve).and_return(:absent)
937
937
  @ensurable_resource.retrieve_resource
938
938
  end
939
939
 
@@ -50,8 +50,8 @@ describe 'Puppet::Util::AtFork' do
50
50
  const_set(:TYPE_VOID, nil)
51
51
  const_set(:TYPE_INT, nil)
52
52
  const_set(:DLError, Class.new(StandardError))
53
- const_set(:Handle, Class.new)
54
- const_set(:Function, Class.new)
53
+ const_set(:Handle, Class.new { def initialize(library = nil, flags = 0); end })
54
+ const_set(:Function, Class.new { def initialize(ptr, args, ret_type, abi = 0); end })
55
55
  end)
56
56
  end
57
57
  end
@@ -157,7 +157,7 @@ describe Puppet::Util::Autoload do
157
157
  end
158
158
 
159
159
  it "should load the first file in the searchpath" do
160
- allow(@autoload).to receive(:search_directories).and_return([make_absolute("/a"), make_absolute("/b")])
160
+ allow(@autoload.class).to receive(:search_directories).and_return([make_absolute("/a"), make_absolute("/b")])
161
161
  allow(FileTest).to receive(:directory?).and_return(true)
162
162
  allow(Puppet::FileSystem).to receive(:exist?).and_return(true)
163
163
  expect(Kernel).to receive(:load).with(make_absolute("/a/tmp/myfile.rb"), any_args)
@@ -298,6 +298,10 @@ describe Puppet::Util::Autoload do
298
298
  it "should convert c:\ to c:/" do
299
299
  expect(Puppet::Util::Autoload.cleanpath('c:\\')).to eq('c:/')
300
300
  end
301
+
302
+ it "should convert all backslashes to forward slashes" do
303
+ expect(Puppet::Util::Autoload.cleanpath('c:\projects\ruby\bug\test.rb')).to eq('c:/projects/ruby/bug/test.rb')
304
+ end
301
305
  end
302
306
  end
303
307
 
@@ -117,8 +117,7 @@ describe Puppet::Util::Backups do
117
117
  file = Puppet::Type.type(:file).new(:name => path, :backup => 'foo', :recurse => true)
118
118
 
119
119
  expect(bucket).not_to receive(:backup)
120
- stub_file = double('file', :stat => double('stat', :ftype => 'directory'))
121
- allow(Puppet::FileSystem).to receive(:new).with(path).and_return(stub_file)
120
+ allow(Puppet::FileSystem).to receive(:stat).with(path).and_return(double('stat', :ftype => 'directory'))
122
121
  expect(Find).not_to receive(:find)
123
122
 
124
123
  file.perform_backup
@@ -639,6 +639,8 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
639
639
 
640
640
  describe "#execute (debug logging)" do
641
641
  before :each do
642
+ Puppet[:log_level] = 'debug'
643
+
642
644
  stub_process_wait(0)
643
645
 
644
646
  if Puppet::Util::Platform.windows?
@@ -649,47 +651,47 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
649
651
  end
650
652
 
651
653
  it "should log if no uid or gid specified" do
652
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing: 'echo hello'")
654
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing: 'echo hello'")
653
655
  Puppet::Util::Execution.execute('echo hello')
654
656
  end
655
657
 
656
658
  it "should log numeric uid if specified" do
657
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=100: 'echo hello'")
659
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=100: 'echo hello'")
658
660
  Puppet::Util::Execution.execute('echo hello', {:uid => 100})
659
661
  end
660
662
 
661
663
  it "should log numeric gid if specified" do
662
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with gid=500: 'echo hello'")
664
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with gid=500: 'echo hello'")
663
665
  Puppet::Util::Execution.execute('echo hello', {:gid => 500})
664
666
  end
665
667
 
666
668
  it "should log numeric uid and gid if specified" do
667
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=100 gid=500: 'echo hello'")
669
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=100 gid=500: 'echo hello'")
668
670
  Puppet::Util::Execution.execute('echo hello', {:uid => 100, :gid => 500})
669
671
  end
670
672
 
671
673
  it "should log string uid if specified" do
672
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=myuser: 'echo hello'")
674
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=myuser: 'echo hello'")
673
675
  Puppet::Util::Execution.execute('echo hello', {:uid => 'myuser'})
674
676
  end
675
677
 
676
678
  it "should log string gid if specified" do
677
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with gid=mygroup: 'echo hello'")
679
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with gid=mygroup: 'echo hello'")
678
680
  Puppet::Util::Execution.execute('echo hello', {:gid => 'mygroup'})
679
681
  end
680
682
 
681
683
  it "should log string uid and gid if specified" do
682
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=myuser gid=mygroup: 'echo hello'")
684
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=myuser gid=mygroup: 'echo hello'")
683
685
  Puppet::Util::Execution.execute('echo hello', {:uid => 'myuser', :gid => 'mygroup'})
684
686
  end
685
687
 
686
688
  it "should log numeric uid and string gid if specified" do
687
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing with uid=100 gid=mygroup: 'echo hello'")
689
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing with uid=100 gid=mygroup: 'echo hello'")
688
690
  Puppet::Util::Execution.execute('echo hello', {:uid => 100, :gid => 'mygroup'})
689
691
  end
690
692
 
691
693
  it 'should redact commands in debug output when passed sensitive option' do
692
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing: '[redacted]'")
694
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing: '[redacted]'")
693
695
  Puppet::Util::Execution.execute('echo hello', {:sensitive => true})
694
696
  end
695
697
  end
@@ -903,14 +905,16 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
903
905
  end
904
906
 
905
907
  it "should print meaningful debug message for string argument" do
906
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing 'echo hello'")
908
+ Puppet[:log_level] = 'debug'
909
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing 'echo hello'")
907
910
  expect(Puppet::Util::Execution).to receive(:open).with('| echo hello 2>&1').and_return('hello')
908
911
  expect(Puppet::Util::Execution).to receive(:exitstatus).and_return(0)
909
912
  Puppet::Util::Execution.execpipe('echo hello')
910
913
  end
911
914
 
912
915
  it "should print meaningful debug message for array argument" do
913
- expect(Puppet::Util::Execution).to receive(:debug).with("Executing 'echo hello'")
916
+ Puppet[:log_level] = 'debug'
917
+ expect(Puppet).to receive(:send_log).with(:debug, "Executing 'echo hello'")
914
918
  expect(Puppet::Util::Execution).to receive(:open).with('| echo hello 2>&1').and_return('hello')
915
919
  expect(Puppet::Util::Execution).to receive(:exitstatus).and_return(0)
916
920
  Puppet::Util::Execution.execpipe(['echo','hello'])