puppet 7.1.0-universal-darwin → 7.3.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/Gemfile.lock +15 -13
- 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.rb +10 -6
- data/lib/puppet/configurer.rb +16 -3
- data/lib/puppet/defaults.rb +5 -14
- data/lib/puppet/face/facts.rb +15 -1
- data/lib/puppet/file_serving/configuration/parser.rb +5 -2
- 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/parser/ast/leaf.rb +3 -2
- data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +4 -0
- data/lib/puppet/reference/configuration.rb +6 -5
- data/lib/puppet/settings/alias_setting.rb +37 -0
- data/lib/puppet/settings.rb +33 -28
- data/lib/puppet/util/autoload.rb +1 -8
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +157 -141
- data/man/man5/puppet.conf.5 +6 -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 +5 -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 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
- data/spec/integration/application/agent_spec.rb +127 -3
- data/spec/integration/application/apply_spec.rb +19 -0
- data/spec/integration/defaults_spec.rb +0 -7
- 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/resource/type_collection_spec.rb +2 -6
- data/spec/integration/transaction_spec.rb +4 -9
- data/spec/integration/util/windows/adsi_spec.rb +3 -1
- data/spec/integration/util/windows/registry_spec.rb +0 -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/filebucket_spec.rb +0 -2
- data/spec/unit/application_spec.rb +17 -9
- data/spec/unit/confine/feature_spec.rb +1 -1
- data/spec/unit/confine_spec.rb +8 -2
- data/spec/unit/face/node_spec.rb +0 -11
- 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/forge/module_release_spec.rb +2 -7
- data/spec/unit/indirector/face_spec.rb +0 -1
- data/spec/unit/indirector/facts/facter_spec.rb +11 -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/parser/compiler_spec.rb +3 -19
- data/spec/unit/parser/resource_spec.rb +14 -8
- data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
- data/spec/unit/property_spec.rb +1 -0
- data/spec/unit/provider/nameservice_spec.rb +66 -65
- data/spec/unit/provider/package/apt_spec.rb +4 -8
- 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/hpux_spec.rb +1 -1
- 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/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 +16 -10
- data/spec/unit/util/selinux_spec.rb +76 -52
- data/spec/unit/util/suidmanager_spec.rb +44 -41
- data/spec/unit/util_spec.rb +13 -6
- metadata +7 -2
@@ -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
|
@@ -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
|
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
|
@@ -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
|
@@ -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)
|
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
|
-
|
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
|
-
@
|
327
|
-
@
|
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
|
-
@
|
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(:
|
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(:
|
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(:
|
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
|
data/spec/unit/type/file_spec.rb
CHANGED
@@ -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(:
|
50
|
-
|
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
|
-
|
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
|
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)
|
data/spec/unit/type/tidy_spec.rb
CHANGED
@@ -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
|
data/spec/unit/type_spec.rb
CHANGED
@@ -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
|
-
|
936
|
-
|
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
|
-
|
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
|