puppet 7.0.0-universal-darwin → 7.5.0-universal-darwin

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 (191) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +2 -3
  4. data/Gemfile.lock +45 -33
  5. data/ext/build_defaults.yaml +0 -1
  6. data/ext/project_data.yaml +1 -0
  7. data/lib/puppet/application.rb +10 -6
  8. data/lib/puppet/application/agent.rb +1 -0
  9. data/lib/puppet/application/apply.rb +3 -2
  10. data/lib/puppet/application/device.rb +1 -0
  11. data/lib/puppet/application/script.rb +1 -0
  12. data/lib/puppet/application/ssl.rb +11 -0
  13. data/lib/puppet/application_support.rb +7 -0
  14. data/lib/puppet/configurer.rb +16 -3
  15. data/lib/puppet/defaults.rb +14 -41
  16. data/lib/puppet/environments.rb +54 -55
  17. data/lib/puppet/face/facts.rb +26 -2
  18. data/lib/puppet/face/node/clean.rb +8 -0
  19. data/lib/puppet/ffi/posix.rb +10 -0
  20. data/lib/puppet/ffi/posix/constants.rb +14 -0
  21. data/lib/puppet/ffi/posix/functions.rb +24 -0
  22. data/lib/puppet/ffi/windows/api_types.rb +1 -1
  23. data/lib/puppet/ffi/windows/constants.rb +1 -1
  24. data/lib/puppet/file_serving/configuration/parser.rb +5 -2
  25. data/lib/puppet/file_system/memory_file.rb +8 -1
  26. data/lib/puppet/file_system/windows.rb +2 -0
  27. data/lib/puppet/http/factory.rb +4 -0
  28. data/lib/puppet/indirector/facts/facter.rb +1 -0
  29. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  30. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  31. data/lib/puppet/network/formats.rb +67 -0
  32. data/lib/puppet/network/http.rb +5 -2
  33. data/lib/puppet/network/http/api.rb +10 -6
  34. data/lib/puppet/network/http/api/master.rb +3 -2
  35. data/lib/puppet/network/http/api/master/v3.rb +2 -25
  36. data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
  37. data/lib/puppet/network/http/api/server.rb +10 -0
  38. data/lib/puppet/network/http/api/server/v3.rb +39 -0
  39. data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
  40. data/lib/puppet/parser/ast/leaf.rb +3 -2
  41. data/lib/puppet/parser/templatewrapper.rb +1 -1
  42. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  43. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  44. data/lib/puppet/pops/parser/lexer2.rb +0 -4
  45. data/lib/puppet/pops/validation/checker4_0.rb +0 -1
  46. data/lib/puppet/property/list.rb +1 -1
  47. data/lib/puppet/provider/group/groupadd.rb +13 -8
  48. data/lib/puppet/provider/package/apt.rb +34 -2
  49. data/lib/puppet/provider/package/aptitude.rb +6 -0
  50. data/lib/puppet/provider/service/debian.rb +2 -0
  51. data/lib/puppet/provider/user/aix.rb +2 -2
  52. data/lib/puppet/provider/user/useradd.rb +62 -8
  53. data/lib/puppet/reference/configuration.rb +6 -5
  54. data/lib/puppet/settings.rb +33 -28
  55. data/lib/puppet/settings/alias_setting.rb +37 -0
  56. data/lib/puppet/settings/environment_conf.rb +1 -0
  57. data/lib/puppet/type/package.rb +3 -3
  58. data/lib/puppet/type/user.rb +1 -1
  59. data/lib/puppet/util/autoload.rb +1 -8
  60. data/lib/puppet/util/monkey_patches.rb +7 -0
  61. data/lib/puppet/util/posix.rb +54 -5
  62. data/lib/puppet/util/windows/adsi.rb +46 -0
  63. data/lib/puppet/util/windows/principal.rb +9 -2
  64. data/lib/puppet/util/windows/sid.rb +4 -2
  65. data/lib/puppet/version.rb +1 -1
  66. data/locales/puppet.pot +166 -146
  67. data/man/man5/puppet.conf.5 +14 -6
  68. data/man/man8/puppet-agent.8 +2 -2
  69. data/man/man8/puppet-apply.8 +2 -2
  70. data/man/man8/puppet-catalog.8 +1 -1
  71. data/man/man8/puppet-config.8 +1 -1
  72. data/man/man8/puppet-describe.8 +1 -1
  73. data/man/man8/puppet-device.8 +2 -2
  74. data/man/man8/puppet-doc.8 +1 -1
  75. data/man/man8/puppet-epp.8 +1 -1
  76. data/man/man8/puppet-facts.8 +8 -2
  77. data/man/man8/puppet-filebucket.8 +1 -1
  78. data/man/man8/puppet-generate.8 +1 -1
  79. data/man/man8/puppet-help.8 +1 -1
  80. data/man/man8/puppet-lookup.8 +1 -1
  81. data/man/man8/puppet-module.8 +1 -1
  82. data/man/man8/puppet-node.8 +1 -1
  83. data/man/man8/puppet-parser.8 +1 -1
  84. data/man/man8/puppet-plugin.8 +1 -1
  85. data/man/man8/puppet-report.8 +1 -1
  86. data/man/man8/puppet-resource.8 +1 -1
  87. data/man/man8/puppet-script.8 +2 -2
  88. data/man/man8/puppet-ssl.8 +5 -1
  89. data/man/man8/puppet.8 +2 -2
  90. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  91. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  92. data/spec/integration/application/agent_spec.rb +160 -3
  93. data/spec/integration/application/apply_spec.rb +19 -0
  94. data/spec/integration/application/plugin_spec.rb +1 -1
  95. data/spec/integration/defaults_spec.rb +0 -7
  96. data/spec/integration/http/client_spec.rb +12 -0
  97. data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
  98. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
  99. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
  100. data/spec/integration/parser/collection_spec.rb +10 -0
  101. data/spec/integration/resource/type_collection_spec.rb +2 -6
  102. data/spec/integration/transaction_spec.rb +4 -9
  103. data/spec/integration/util/windows/adsi_spec.rb +21 -1
  104. data/spec/integration/util/windows/principal_spec.rb +21 -0
  105. data/spec/integration/util/windows/registry_spec.rb +6 -10
  106. data/spec/spec_helper.rb +1 -4
  107. data/spec/unit/agent_spec.rb +8 -6
  108. data/spec/unit/application/agent_spec.rb +0 -1
  109. data/spec/unit/application/facts_spec.rb +58 -7
  110. data/spec/unit/application/filebucket_spec.rb +0 -2
  111. data/spec/unit/application/ssl_spec.rb +23 -0
  112. data/spec/unit/application_spec.rb +51 -9
  113. data/spec/unit/confine/feature_spec.rb +1 -1
  114. data/spec/unit/confine_spec.rb +8 -2
  115. data/spec/unit/defaults_spec.rb +1 -56
  116. data/spec/unit/environments_spec.rb +221 -68
  117. data/spec/unit/face/node_spec.rb +14 -13
  118. data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
  119. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  120. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  121. data/spec/unit/file_system_spec.rb +9 -0
  122. data/spec/unit/forge/module_release_spec.rb +2 -7
  123. data/spec/unit/http/factory_spec.rb +19 -0
  124. data/spec/unit/indirector/face_spec.rb +0 -1
  125. data/spec/unit/indirector/facts/facter_spec.rb +20 -5
  126. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  127. data/spec/unit/indirector/indirection_spec.rb +8 -12
  128. data/spec/unit/indirector_spec.rb +2 -2
  129. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  130. data/spec/unit/network/formats_spec.rb +41 -0
  131. data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
  132. data/spec/unit/network/http/api/master_spec.rb +38 -0
  133. data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
  134. data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
  135. data/spec/unit/network/http/api_spec.rb +11 -11
  136. data/spec/unit/parser/compiler_spec.rb +3 -19
  137. data/spec/unit/parser/resource_spec.rb +14 -8
  138. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  139. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  140. data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
  141. data/spec/unit/pops/validator/validator_spec.rb +20 -43
  142. data/spec/unit/property_spec.rb +1 -0
  143. data/spec/unit/provider/group/groupadd_spec.rb +5 -2
  144. data/spec/unit/provider/nameservice_spec.rb +66 -65
  145. data/spec/unit/provider/package/apt_spec.rb +28 -23
  146. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  147. data/spec/unit/provider/package/base_spec.rb +6 -5
  148. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  149. data/spec/unit/provider/package/pip_spec.rb +6 -11
  150. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  151. data/spec/unit/provider/user/aix_spec.rb +5 -0
  152. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  153. data/spec/unit/provider/user/pw_spec.rb +2 -0
  154. data/spec/unit/provider/user/useradd_spec.rb +56 -3
  155. data/spec/unit/provider_spec.rb +6 -8
  156. data/spec/unit/resource/type_spec.rb +1 -1
  157. data/spec/unit/resource_spec.rb +11 -10
  158. data/spec/unit/settings_spec.rb +13 -6
  159. data/spec/unit/ssl/base_spec.rb +0 -1
  160. data/spec/unit/ssl/certificate_request_spec.rb +4 -10
  161. data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
  162. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  163. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  164. data/spec/unit/transaction_spec.rb +13 -4
  165. data/spec/unit/type/file/content_spec.rb +0 -1
  166. data/spec/unit/type/file/selinux_spec.rb +0 -2
  167. data/spec/unit/type/file_spec.rb +0 -6
  168. data/spec/unit/type/group_spec.rb +13 -6
  169. data/spec/unit/type/resources_spec.rb +7 -7
  170. data/spec/unit/type/service_spec.rb +1 -1
  171. data/spec/unit/type/tidy_spec.rb +0 -1
  172. data/spec/unit/type_spec.rb +2 -2
  173. data/spec/unit/util/at_fork_spec.rb +2 -2
  174. data/spec/unit/util/autoload_spec.rb +5 -1
  175. data/spec/unit/util/backups_spec.rb +1 -2
  176. data/spec/unit/util/execution_spec.rb +15 -11
  177. data/spec/unit/util/inifile_spec.rb +6 -14
  178. data/spec/unit/util/log_spec.rb +8 -7
  179. data/spec/unit/util/logging_spec.rb +3 -3
  180. data/spec/unit/util/posix_spec.rb +363 -15
  181. data/spec/unit/util/selinux_spec.rb +76 -52
  182. data/spec/unit/util/storage_spec.rb +3 -1
  183. data/spec/unit/util/suidmanager_spec.rb +44 -41
  184. data/spec/unit/util/windows/sid_spec.rb +6 -0
  185. data/spec/unit/util_spec.rb +13 -6
  186. metadata +33 -16
  187. data/spec/lib/matchers/include.rb +0 -27
  188. data/spec/lib/matchers/include_spec.rb +0 -32
  189. data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
  190. data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
  191. data/spec/unit/pops/parser/parse_site_spec.rb +0 -43
@@ -14,9 +14,8 @@ describe Puppet::Type.type(:package).provider(:pip) do
14
14
  it { is_expected.to be_version_ranges }
15
15
 
16
16
  before do
17
- @resource = Puppet::Resource.new(:package, "fake_package")
18
- allow(@resource).to receive(:original_parameters).and_return({})
19
- @provider = described_class.new(@resource)
17
+ @resource = Puppet::Type.type(:package).new(name: "fake_package", provider: :pip)
18
+ @provider = @resource.provider
20
19
  @client = double('client')
21
20
  allow(@client).to receive(:call).with('package_releases', 'real_package').and_return(["1.3", "1.2.5", "1.2.4"])
22
21
  allow(@client).to receive(:call).with('package_releases', 'fake_package').and_return([])
@@ -335,7 +334,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
335
334
 
336
335
  it "should install" do
337
336
  @resource[:ensure] = :installed
338
- @resource[:source] = nil
339
337
  expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "fake_package"]])
340
338
  @provider.install
341
339
  end
@@ -368,7 +366,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
368
366
 
369
367
  it "should install a particular version" do
370
368
  @resource[:ensure] = "0.0.0"
371
- @resource[:source] = nil
372
369
  # TJK
373
370
  expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "fake_package==0.0.0"]])
374
371
  @provider.install
@@ -376,7 +373,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
376
373
 
377
374
  it "should upgrade" do
378
375
  @resource[:ensure] = :latest
379
- @resource[:source] = nil
380
376
  # TJK
381
377
  expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "--upgrade", "fake_package"]])
382
378
  @provider.install
@@ -384,7 +380,6 @@ describe Puppet::Type.type(:package).provider(:pip) do
384
380
 
385
381
  it "should handle install options" do
386
382
  @resource[:ensure] = :installed
387
- @resource[:source] = nil
388
383
  @resource[:install_options] = [{"--timeout" => "10"}, "--no-index"]
389
384
  expect(@provider).to receive(:execute).with(["/fake/bin/pip", ["install", "-q", "--timeout=10", "--no-index", "fake_package"]])
390
385
  @provider.install
@@ -415,7 +410,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
415
410
  let(:pip) { '/fake/bin/pip' }
416
411
 
417
412
  it "should look up version if pip is present" do
418
- allow(described_class).to receive(:pip_cmd).and_return(pip)
413
+ allow(described_class).to receive(:cmd).and_return(pip)
419
414
  process = ['pip 8.0.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)']
420
415
  allow(described_class).to receive(:execpipe).with([pip, '--version']).and_yield(process)
421
416
 
@@ -423,7 +418,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
423
418
  end
424
419
 
425
420
  it "parses multiple lines of output" do
426
- allow(described_class).to receive(:pip_cmd).and_return(pip)
421
+ allow(described_class).to receive(:cmd).and_return(pip)
427
422
  process = [
428
423
  "/usr/local/lib/python2.7/dist-packages/urllib3/contrib/socks.py:37: DependencyWarning: SOCKS support in urllib3 requires the installation of optional dependencies: specifically, PySocks. For more information, see https://urllib3.readthedocs.io/en/latest/contrib.html#socks-proxies",
429
424
  " DependencyWarning",
@@ -435,7 +430,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
435
430
  end
436
431
 
437
432
  it "raises if there isn't a version string" do
438
- allow(described_class).to receive(:pip_cmd).and_return(pip)
433
+ allow(described_class).to receive(:cmd).and_return(pip)
439
434
  allow(described_class).to receive(:execpipe).with([pip, '--version']).and_yield([""])
440
435
  expect {
441
436
  described_class.pip_version(pip)
@@ -444,7 +439,7 @@ describe Puppet::Type.type(:package).provider(:pip) do
444
439
 
445
440
  it "quotes commands with spaces" do
446
441
  pip = 'C:\Program Files\Python27\Scripts\pip.exe'
447
- allow(described_class).to receive(:pip_cmd).and_return(pip)
442
+ allow(described_class).to receive(:cmd).and_return(pip)
448
443
  process = ["pip 18.1 from c:\program files\python27\lib\site-packages\pip (python 2.7)\r\n"]
449
444
  allow(described_class).to receive(:execpipe).with(["\"#{pip}\"", '--version']).and_yield(process)
450
445
 
@@ -8,10 +8,6 @@ describe Puppet::Type.type(:package).provider(:pkgdmg) do
8
8
  it { is_expected.not_to be_uninstallable }
9
9
 
10
10
  describe "when installing it should fail when" do
11
- before :each do
12
- expect(Puppet::Util).not_to receive(:execute)
13
- end
14
-
15
11
  it "no source is specified" do
16
12
  expect { provider.install }.to raise_error(Puppet::Error, /must specify a package source/)
17
13
  end
@@ -143,6 +143,11 @@ describe 'Puppet::Type::User::Provider::Aix' do
143
143
  it "returns the user's password" do
144
144
  expect(call_parse_password).to eql('some_password')
145
145
  end
146
+
147
+ it "returns the user's password with tabs" do
148
+ resource[:name] = 'tab_password_user'
149
+ expect(call_parse_password).to eql('some_password')
150
+ end
146
151
  end
147
152
 
148
153
  # TODO: If we move from using Mocha to rspec's mocks,
@@ -33,7 +33,7 @@ describe Puppet::Type.type(:user).provider(:hpuxuseradd),
33
33
  before :each do
34
34
  allow(Etc).to receive(:getpwent).and_return(pwent)
35
35
  allow(Etc).to receive(:getpwnam).and_return(pwent)
36
- allow(resource).to receive(:command).with(:modify).and_return('/usr/sam/lbin/usermod.sam')
36
+ allow(provider).to receive(:command).with(:modify).and_return('/usr/sam/lbin/usermod.sam')
37
37
  end
38
38
 
39
39
  it "should have feature manages_passwords" do
@@ -53,12 +53,14 @@ describe Puppet::Type.type(:user).provider(:pw) do
53
53
 
54
54
  it "should use -G with the correct argument when the groups property is set" do
55
55
  resource[:groups] = "group1"
56
+ allow(Puppet::Util::POSIX).to receive(:groups_of).with('testuser').and_return([])
56
57
  expect(provider).to receive(:execute).with(include("-G").and(include("group1")), kind_of(Hash))
57
58
  provider.create
58
59
  end
59
60
 
60
61
  it "should use -G with all the given groups when the groups property is set to an array" do
61
62
  resource[:groups] = ["group1", "group2"]
63
+ allow(Puppet::Util::POSIX).to receive(:groups_of).with('testuser').and_return([])
62
64
  expect(provider).to receive(:execute).with(include("-G").and(include("group1,group2")), kind_of(Hash))
63
65
  provider.create
64
66
  end
@@ -4,6 +4,7 @@ RSpec::Matchers.define_negated_matcher :excluding, :include
4
4
 
5
5
  describe Puppet::Type.type(:user).provider(:useradd) do
6
6
  before :each do
7
+ allow(Puppet::Util::POSIX).to receive(:groups_of).and_return([])
7
8
  allow(described_class).to receive(:command).with(:password).and_return('/usr/bin/chage')
8
9
  allow(described_class).to receive(:command).with(:localpassword).and_return('/usr/sbin/lchage')
9
10
  allow(described_class).to receive(:command).with(:add).and_return('/usr/sbin/useradd')
@@ -151,6 +152,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
151
152
 
152
153
  it "should not use -G for luseradd and should call usermod with -G after luseradd when groups property is set" do
153
154
  resource[:groups] = ['group1', 'group2']
155
+ allow(provider).to receive(:localgroups)
154
156
  expect(provider).to receive(:execute).with(include('/usr/sbin/luseradd').and(excluding('-G')), hash_including(custom_environment: hash_including('LIBUSER_CONF')))
155
157
  expect(provider).to receive(:execute).with(include('/usr/sbin/usermod').and(include('-G')), hash_including(custom_environment: hash_including('LIBUSER_CONF')))
156
158
  provider.create
@@ -336,7 +338,8 @@ describe Puppet::Type.type(:user).provider(:useradd) do
336
338
 
337
339
  it "should return the local comment string when forcelocal is true" do
338
340
  resource[:forcelocal] = true
339
- allow(File).to receive(:read).with('/etc/passwd').and_return(content)
341
+ allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
342
+ allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
340
343
  expect(provider.comment).to eq('local comment')
341
344
  end
342
345
 
@@ -348,8 +351,58 @@ describe Puppet::Type.type(:user).provider(:useradd) do
348
351
  end
349
352
  end
350
353
 
354
+ describe "#gid" do
355
+ before { described_class.has_feature :manages_local_users_and_groups }
356
+
357
+ let(:content) { "myuser:x:x:999:x:x:x" }
358
+
359
+ it "should return the local GID when forcelocal is true" do
360
+ resource[:forcelocal] = true
361
+ allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
362
+ allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
363
+ expect(provider.gid).to eq(999)
364
+ end
365
+
366
+ it "should fall back to nameservice GID when forcelocal is false" do
367
+ resource[:forcelocal] = false
368
+ allow(provider).to receive(:get).with(:gid).and_return(1234)
369
+ expect(provider).not_to receive(:localgid)
370
+ expect(provider.gid).to eq(1234)
371
+ end
372
+ end
373
+
374
+ describe "#groups" do
375
+ before { described_class.has_feature :manages_local_users_and_groups }
376
+
377
+ let(:content) do
378
+ <<~EOF
379
+ group1:x:0:myuser
380
+ group2:x:999:
381
+ group3:x:998:myuser
382
+ EOF
383
+ end
384
+
385
+ it "should return the local groups string when forcelocal is true" do
386
+ resource[:forcelocal] = true
387
+ group1, group2, group3 = content.split
388
+ allow(Puppet::FileSystem).to receive(:exist?).with('/etc/group').and_return(true)
389
+ allow(Puppet::FileSystem).to receive(:each_line).with('/etc/group').and_yield(group1).and_yield(group2).and_yield(group3)
390
+ expect(provider.groups).to eq(['group1', 'group3'])
391
+ end
392
+
393
+ it "should fall back to nameservice groups when forcelocal is false" do
394
+ resource[:forcelocal] = false
395
+ allow(Puppet::Util::POSIX).to receive(:groups_of).with('myuser').and_return(['remote groups'])
396
+ expect(provider).not_to receive(:localgroups)
397
+ expect(provider.groups).to eq('remote groups')
398
+ end
399
+ end
400
+
351
401
  describe "#finduser" do
352
- before { allow(File).to receive(:read).with('/etc/passwd').and_return(content) }
402
+ before do
403
+ allow(Puppet::FileSystem).to receive(:exist?).with('/etc/passwd').and_return(true)
404
+ allow(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').and_yield(content)
405
+ end
353
406
 
354
407
  let(:content) { "sample_account:sample_password:sample_uid:sample_gid:sample_gecos:sample_directory:sample_shell" }
355
408
  let(:output) do
@@ -375,7 +428,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
375
428
  end
376
429
 
377
430
  it "reads the user file only once per resource" do
378
- expect(File).to receive(:read).with('/etc/passwd').once
431
+ expect(Puppet::FileSystem).to receive(:each_line).with('/etc/passwd').once
379
432
  5.times { provider.finduser(:account, 'sample_account') }
380
433
  end
381
434
  end
@@ -648,27 +648,25 @@ describe Puppet::Provider do
648
648
  it "delegates instance execute to Puppet::Util::Execution" do
649
649
  expect(Puppet::Util::Execution).to receive(:execute).with("a_command", { :option => "value" })
650
650
 
651
- provider.new.send(:execute, "a_command", { :option => "value" })
651
+ provider.new.execute("a_command", { :option => "value" })
652
652
  end
653
653
 
654
654
  it "delegates class execute to Puppet::Util::Execution" do
655
655
  expect(Puppet::Util::Execution).to receive(:execute).with("a_command", { :option => "value" })
656
656
 
657
- provider.send(:execute, "a_command", { :option => "value" })
657
+ provider.execute("a_command", { :option => "value" })
658
658
  end
659
659
 
660
660
  it "delegates instance execpipe to Puppet::Util::Execution" do
661
- block = Proc.new { }
662
- expect(Puppet::Util::Execution).to receive(:execpipe).with("a_command", true, block)
661
+ allow(Puppet::Util::Execution).to receive(:execpipe).with("a_command", true).and_yield('some output')
663
662
 
664
- provider.new.send(:execpipe, "a_command", true, block)
663
+ expect { |b| provider.new.execpipe("a_command", true, &b) }.to yield_with_args('some output')
665
664
  end
666
665
 
667
666
  it "delegates class execpipe to Puppet::Util::Execution" do
668
- block = Proc.new { }
669
- expect(Puppet::Util::Execution).to receive(:execpipe).with("a_command", true, block)
667
+ allow(Puppet::Util::Execution).to receive(:execpipe).with("a_command", true).and_yield('some output')
670
668
 
671
- provider.send(:execpipe, "a_command", true, block)
669
+ expect { |b| provider.execpipe("a_command", true, &b) }.to yield_with_args('some output')
672
670
  end
673
671
  end
674
672
 
@@ -554,7 +554,7 @@ describe Puppet::Resource::Type do
554
554
 
555
555
  it "should not create a subscope for the :main class" do
556
556
  allow(@resource).to receive(:title).and_return(:main)
557
- expect(@type).not_to receive(:subscope)
557
+ expect(@scope).not_to receive(:newscope)
558
558
  expect(@type).to receive(:set_resource_parameters).with(@resource, @scope)
559
559
 
560
560
  @type.evaluate_code(@resource)
@@ -288,7 +288,7 @@ describe Puppet::Resource do
288
288
 
289
289
  describe "when the resource type is :hostclass" do
290
290
  let(:environment_name) { "testing env" }
291
- let(:fact_values) { { :a => 1 } }
291
+ let(:fact_values) { { 'a' => 1 } }
292
292
  let(:port) { Puppet::Parser::AST::Leaf.new(:value => '80') }
293
293
 
294
294
  def inject_and_set_defaults(resource, scope)
@@ -297,10 +297,7 @@ describe Puppet::Resource do
297
297
 
298
298
  before do
299
299
  environment.known_resource_types.add(apache)
300
-
301
- allow(scope).to receive(:host).and_return('host')
302
- allow(scope).to receive(:environment).and_return(environment)
303
- allow(scope).to receive(:facts).and_return(Puppet::Node::Facts.new("facts", fact_values))
300
+ scope.set_facts(fact_values)
304
301
  end
305
302
 
306
303
  context 'with a default value expression' do
@@ -571,11 +568,15 @@ describe Puppet::Resource do
571
568
  expect(resource.to_hash[:myvar]).to eq("bob")
572
569
  end
573
570
 
574
- it "should set :name to the title if :name is not present for non-builtin types" do
575
- krt = Puppet::Resource::TypeCollection.new("myenv")
576
- krt.add Puppet::Resource::Type.new(:definition, :foo)
577
- resource = Puppet::Resource.new :foo, "bar"
578
- allow(resource).to receive(:known_resource_types).and_return(krt)
571
+ it "should set :name to the title if :name is not present for non-existent types" do
572
+ resource = Puppet::Resource.new :doesnotexist, "bar"
573
+ expect(resource.to_hash[:name]).to eq("bar")
574
+ end
575
+
576
+ it "should set :name to the title if :name is not present for a definition" do
577
+ type = Puppet::Resource::Type.new(:definition, :foo)
578
+ environment.known_resource_types.add(type)
579
+ resource = Puppet::Resource.new :foo, "bar", :environment => environment
579
580
  expect(resource.to_hash[:name]).to eq("bar")
580
581
  end
581
582
  end
@@ -1088,7 +1088,7 @@ describe Puppet::Settings do
1088
1088
  before(:each) do
1089
1089
  @settings.define_settings :main, PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS
1090
1090
  @settings.define_settings :server, :masterport => { :desc => "a", :default => 1000 }
1091
- @settings.define_settings :server, :serverport => { :desc => "a", :default => 1000 }
1091
+ @settings.define_settings :server, :serverport => { :type => :alias, :alias_for => :masterport }
1092
1092
  @settings.define_settings :server, :ca_port => { :desc => "a", :default => "$serverport" }
1093
1093
  @settings.define_settings :server, :report_port => { :desc => "a", :default => "$serverport" }
1094
1094
 
@@ -1110,9 +1110,10 @@ describe Puppet::Settings do
1110
1110
  "
1111
1111
  end
1112
1112
 
1113
- it { expect(@settings[:serverport]).to eq(445) }
1114
- it { expect(@settings[:ca_port]).to eq("445") }
1115
- it { expect(@settings[:report_port]).to eq("445") }
1113
+ it { expect(@settings[:serverport]).to eq(444) }
1114
+ it { expect(@settings[:ca_port]).to eq("444") }
1115
+ it { expect(@settings[:report_port]).to eq("444") }
1116
+ it { expect(@settings[:masterport]).to eq(445) }
1116
1117
  end
1117
1118
 
1118
1119
  context 'with serverport and masterport in main' do
@@ -1126,6 +1127,7 @@ describe Puppet::Settings do
1126
1127
  it { expect(@settings[:serverport]).to eq(445) }
1127
1128
  it { expect(@settings[:ca_port]).to eq("445") }
1128
1129
  it { expect(@settings[:report_port]).to eq("445") }
1130
+ it { expect(@settings[:masterport]).to eq(444) }
1129
1131
  end
1130
1132
 
1131
1133
  context 'with serverport and masterport in agent' do
@@ -1139,6 +1141,7 @@ describe Puppet::Settings do
1139
1141
  it { expect(@settings[:serverport]).to eq(445) }
1140
1142
  it { expect(@settings[:ca_port]).to eq("445") }
1141
1143
  it { expect(@settings[:report_port]).to eq("445") }
1144
+ it { expect(@settings[:masterport]).to eq(444) }
1142
1145
  end
1143
1146
 
1144
1147
  context 'with both serverport and masterport in main and agent' do
@@ -1155,6 +1158,7 @@ describe Puppet::Settings do
1155
1158
  it { expect(@settings[:serverport]).to eq(445) }
1156
1159
  it { expect(@settings[:ca_port]).to eq("445") }
1157
1160
  it { expect(@settings[:report_port]).to eq("445") }
1161
+ it { expect(@settings[:masterport]).to eq(444) }
1158
1162
  end
1159
1163
 
1160
1164
  context 'with serverport in agent and masterport in main' do
@@ -1169,6 +1173,7 @@ describe Puppet::Settings do
1169
1173
  it { expect(@settings[:serverport]).to eq(444) }
1170
1174
  it { expect(@settings[:ca_port]).to eq("444") }
1171
1175
  it { expect(@settings[:report_port]).to eq("444") }
1176
+ it { expect(@settings[:masterport]).to eq(445) }
1172
1177
  end
1173
1178
 
1174
1179
  context 'with masterport in main' do
@@ -1181,6 +1186,7 @@ describe Puppet::Settings do
1181
1186
  it { expect(@settings[:serverport]).to eq(445) }
1182
1187
  it { expect(@settings[:ca_port]).to eq("445") }
1183
1188
  it { expect(@settings[:report_port]).to eq("445") }
1189
+ it { expect(@settings[:masterport]).to eq(445) }
1184
1190
  end
1185
1191
 
1186
1192
  context 'with masterport in agent' do
@@ -1193,6 +1199,7 @@ describe Puppet::Settings do
1193
1199
  it { expect(@settings[:serverport]).to eq(445) }
1194
1200
  it { expect(@settings[:ca_port]).to eq("445") }
1195
1201
  it { expect(@settings[:report_port]).to eq("445") }
1202
+ it { expect(@settings[:masterport]).to eq(445) }
1196
1203
  end
1197
1204
 
1198
1205
  context 'with serverport in agent' do
@@ -1203,7 +1210,7 @@ describe Puppet::Settings do
1203
1210
  end
1204
1211
 
1205
1212
  it { expect(@settings[:serverport]).to eq(445) }
1206
- it { expect(@settings[:masterport]).to eq(445) }
1213
+ it { expect(@settings[:masterport]).to eq(1000) }
1207
1214
  it { expect(@settings[:ca_port]).to eq("445") }
1208
1215
  it { expect(@settings[:report_port]).to eq("445") }
1209
1216
  end
@@ -1216,7 +1223,7 @@ describe Puppet::Settings do
1216
1223
  end
1217
1224
 
1218
1225
  it { expect(@settings[:serverport]).to eq(445) }
1219
- it { expect(@settings[:masterport]).to eq(445) }
1226
+ it { expect(@settings[:masterport]).to eq(1000) }
1220
1227
  it { expect(@settings[:ca_port]).to eq("445") }
1221
1228
  it { expect(@settings[:report_port]).to eq("445") }
1222
1229
  end
@@ -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