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.
- checksums.yaml +4 -4
- data/CODEOWNERS +2 -16
- data/Gemfile +2 -3
- data/Gemfile.lock +45 -33
- data/ext/build_defaults.yaml +0 -1
- data/ext/project_data.yaml +1 -0
- data/lib/puppet/application.rb +10 -6
- data/lib/puppet/application/agent.rb +1 -0
- data/lib/puppet/application/apply.rb +3 -2
- data/lib/puppet/application/device.rb +1 -0
- data/lib/puppet/application/script.rb +1 -0
- data/lib/puppet/application/ssl.rb +11 -0
- data/lib/puppet/application_support.rb +7 -0
- data/lib/puppet/configurer.rb +16 -3
- data/lib/puppet/defaults.rb +14 -41
- data/lib/puppet/environments.rb +54 -55
- data/lib/puppet/face/facts.rb +26 -2
- data/lib/puppet/face/node/clean.rb +8 -0
- data/lib/puppet/ffi/posix.rb +10 -0
- data/lib/puppet/ffi/posix/constants.rb +14 -0
- data/lib/puppet/ffi/posix/functions.rb +24 -0
- data/lib/puppet/ffi/windows/api_types.rb +1 -1
- data/lib/puppet/ffi/windows/constants.rb +1 -1
- data/lib/puppet/file_serving/configuration/parser.rb +5 -2
- data/lib/puppet/file_system/memory_file.rb +8 -1
- data/lib/puppet/file_system/windows.rb +2 -0
- data/lib/puppet/http/factory.rb +4 -0
- data/lib/puppet/indirector/facts/facter.rb +1 -0
- data/lib/puppet/module_tool/applications/installer.rb +48 -2
- data/lib/puppet/module_tool/errors/shared.rb +17 -2
- data/lib/puppet/network/formats.rb +67 -0
- data/lib/puppet/network/http.rb +5 -2
- data/lib/puppet/network/http/api.rb +10 -6
- data/lib/puppet/network/http/api/master.rb +3 -2
- data/lib/puppet/network/http/api/master/v3.rb +2 -25
- data/lib/puppet/network/http/api/master/v3/environments.rb +2 -33
- data/lib/puppet/network/http/api/server.rb +10 -0
- data/lib/puppet/network/http/api/server/v3.rb +39 -0
- data/lib/puppet/network/http/api/server/v3/environments.rb +48 -0
- data/lib/puppet/parser/ast/leaf.rb +3 -2
- data/lib/puppet/parser/templatewrapper.rb +1 -1
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/parser/lexer2.rb +0 -4
- data/lib/puppet/pops/validation/checker4_0.rb +0 -1
- data/lib/puppet/property/list.rb +1 -1
- data/lib/puppet/provider/group/groupadd.rb +13 -8
- data/lib/puppet/provider/package/apt.rb +34 -2
- data/lib/puppet/provider/package/aptitude.rb +6 -0
- data/lib/puppet/provider/service/debian.rb +2 -0
- data/lib/puppet/provider/user/aix.rb +2 -2
- data/lib/puppet/provider/user/useradd.rb +62 -8
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/settings.rb +33 -28
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/type/package.rb +3 -3
- data/lib/puppet/type/user.rb +1 -1
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/monkey_patches.rb +7 -0
- data/lib/puppet/util/posix.rb +54 -5
- data/lib/puppet/util/windows/adsi.rb +46 -0
- data/lib/puppet/util/windows/principal.rb +9 -2
- data/lib/puppet/util/windows/sid.rb +4 -2
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +166 -146
- data/man/man5/puppet.conf.5 +14 -6
- data/man/man8/puppet-agent.8 +2 -2
- data/man/man8/puppet-apply.8 +2 -2
- data/man/man8/puppet-catalog.8 +1 -1
- data/man/man8/puppet-config.8 +1 -1
- data/man/man8/puppet-describe.8 +1 -1
- data/man/man8/puppet-device.8 +2 -2
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +8 -2
- data/man/man8/puppet-filebucket.8 +1 -1
- data/man/man8/puppet-generate.8 +1 -1
- data/man/man8/puppet-help.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-module.8 +1 -1
- data/man/man8/puppet-node.8 +1 -1
- data/man/man8/puppet-parser.8 +1 -1
- data/man/man8/puppet-plugin.8 +1 -1
- data/man/man8/puppet-report.8 +1 -1
- data/man/man8/puppet-resource.8 +1 -1
- data/man/man8/puppet-script.8 +2 -2
- data/man/man8/puppet-ssl.8 +5 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
- data/spec/integration/application/agent_spec.rb +160 -3
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/application/plugin_spec.rb +1 -1
- data/spec/integration/defaults_spec.rb +0 -7
- data/spec/integration/http/client_spec.rb +12 -0
- data/spec/integration/indirector/direct_file_server_spec.rb +1 -3
- data/spec/integration/indirector/file_content/file_server_spec.rb +0 -2
- data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -2
- data/spec/integration/parser/collection_spec.rb +10 -0
- data/spec/integration/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +21 -1
- data/spec/integration/util/windows/principal_spec.rb +21 -0
- data/spec/integration/util/windows/registry_spec.rb +6 -10
- data/spec/spec_helper.rb +1 -4
- data/spec/unit/agent_spec.rb +8 -6
- data/spec/unit/application/agent_spec.rb +0 -1
- data/spec/unit/application/facts_spec.rb +58 -7
- data/spec/unit/application/filebucket_spec.rb +0 -2
- data/spec/unit/application/ssl_spec.rb +23 -0
- data/spec/unit/application_spec.rb +51 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/defaults_spec.rb +1 -56
- data/spec/unit/environments_spec.rb +221 -68
- data/spec/unit/face/node_spec.rb +14 -13
- data/spec/unit/file_serving/configuration/parser_spec.rb +8 -1
- data/spec/unit/file_serving/metadata_spec.rb +3 -3
- data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
- data/spec/unit/file_system_spec.rb +9 -0
- data/spec/unit/forge/module_release_spec.rb +2 -7
- data/spec/unit/http/factory_spec.rb +19 -0
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +20 -5
- data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
- data/spec/unit/indirector/indirection_spec.rb +8 -12
- data/spec/unit/indirector_spec.rb +2 -2
- data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
- data/spec/unit/network/formats_spec.rb +41 -0
- data/spec/unit/network/http/api/indirected_routes_spec.rb +0 -4
- data/spec/unit/network/http/api/master_spec.rb +38 -0
- data/spec/unit/network/http/api/{master → server}/v3/environments_spec.rb +2 -2
- data/spec/unit/network/http/api/{master → server}/v3_spec.rb +19 -19
- data/spec/unit/network/http/api_spec.rb +11 -11
- data/spec/unit/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/parser/templatewrapper_spec.rb +4 -3
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/pops/parser/lexer2_spec.rb +0 -4
- data/spec/unit/pops/validator/validator_spec.rb +20 -43
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/group/groupadd_spec.rb +5 -2
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +28 -23
- data/spec/unit/provider/package/aptitude_spec.rb +1 -1
- data/spec/unit/provider/package/base_spec.rb +6 -5
- data/spec/unit/provider/package/pacman_spec.rb +18 -12
- data/spec/unit/provider/package/pip_spec.rb +6 -11
- data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
- data/spec/unit/provider/user/aix_spec.rb +5 -0
- data/spec/unit/provider/user/hpux_spec.rb +1 -1
- data/spec/unit/provider/user/pw_spec.rb +2 -0
- data/spec/unit/provider/user/useradd_spec.rb +56 -3
- data/spec/unit/provider_spec.rb +6 -8
- data/spec/unit/resource/type_spec.rb +1 -1
- data/spec/unit/resource_spec.rb +11 -10
- data/spec/unit/settings_spec.rb +13 -6
- data/spec/unit/ssl/base_spec.rb +0 -1
- data/spec/unit/ssl/certificate_request_spec.rb +4 -10
- data/spec/unit/ssl/ssl_provider_spec.rb +5 -2
- data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
- data/spec/unit/transaction/event_manager_spec.rb +14 -11
- data/spec/unit/transaction_spec.rb +13 -4
- data/spec/unit/type/file/content_spec.rb +0 -1
- data/spec/unit/type/file/selinux_spec.rb +0 -2
- data/spec/unit/type/file_spec.rb +0 -6
- data/spec/unit/type/group_spec.rb +13 -6
- data/spec/unit/type/resources_spec.rb +7 -7
- data/spec/unit/type/service_spec.rb +1 -1
- data/spec/unit/type/tidy_spec.rb +0 -1
- data/spec/unit/type_spec.rb +2 -2
- data/spec/unit/util/at_fork_spec.rb +2 -2
- data/spec/unit/util/autoload_spec.rb +5 -1
- data/spec/unit/util/backups_spec.rb +1 -2
- data/spec/unit/util/execution_spec.rb +15 -11
- data/spec/unit/util/inifile_spec.rb +6 -14
- data/spec/unit/util/log_spec.rb +8 -7
- data/spec/unit/util/logging_spec.rb +3 -3
- data/spec/unit/util/posix_spec.rb +363 -15
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/storage_spec.rb +3 -1
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util/windows/sid_spec.rb +6 -0
- data/spec/unit/util_spec.rb +13 -6
- metadata +33 -16
- data/spec/lib/matchers/include.rb +0 -27
- data/spec/lib/matchers/include_spec.rb +0 -32
- data/spec/unit/pops/parser/parse_application_spec.rb +0 -13
- data/spec/unit/pops/parser/parse_capabilities_spec.rb +0 -23
- 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::
|
18
|
-
|
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(:
|
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(:
|
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(:
|
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(:
|
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(
|
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(
|
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
|
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(
|
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
|
data/spec/unit/provider_spec.rb
CHANGED
@@ -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.
|
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.
|
657
|
+
provider.execute("a_command", { :option => "value" })
|
658
658
|
end
|
659
659
|
|
660
660
|
it "delegates instance execpipe to Puppet::Util::Execution" do
|
661
|
-
|
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.
|
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
|
-
|
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.
|
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(@
|
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)
|
data/spec/unit/resource_spec.rb
CHANGED
@@ -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) { {
|
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-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
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
|
data/spec/unit/settings_spec.rb
CHANGED
@@ -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 => { :
|
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(
|
1114
|
-
it { expect(@settings[:ca_port]).to eq("
|
1115
|
-
it { expect(@settings[:report_port]).to eq("
|
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(
|
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(
|
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
|
data/spec/unit/ssl/base_spec.rb
CHANGED
@@ -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
|
-
|
324
|
-
|
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
|
-
|
338
|
-
|
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
|
-
#
|
275
|
-
|
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
|
-
|
313
|
+
generator { thing: }
|
318
314
|
MANIFEST
|
319
315
|
|
320
|
-
allow(catalog.resource("
|
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("
|
319
|
+
generator.eval_generate(catalog.resource("Generator[thing]"))
|
324
320
|
|
325
321
|
expect(generator.resources_failed_to_generate).to be_truthy
|
326
322
|
end
|