puppet 6.4.4-x86-mingw32 → 6.4.5-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of puppet might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CODEOWNERS +1 -1
- data/Gemfile +4 -4
- data/Gemfile.lock +38 -32
- data/ext/build_defaults.yaml +1 -0
- data/ext/cert_inspector +3 -3
- data/ext/puppet-test +2 -2
- data/ext/regexp_nodes/regexp_nodes.rb +4 -4
- data/ext/windows/service/daemon.rb +38 -8
- data/install.rb +6 -6
- data/lib/puppet/application.rb +1 -1
- data/lib/puppet/application/apply.rb +2 -2
- data/lib/puppet/application/describe.rb +3 -9
- data/lib/puppet/application/doc.rb +1 -1
- data/lib/puppet/application/lookup.rb +1 -1
- data/lib/puppet/application/script.rb +2 -2
- data/lib/puppet/application/ssl.rb +4 -1
- data/lib/puppet/configurer.rb +86 -30
- data/lib/puppet/configurer/downloader.rb +2 -6
- data/lib/puppet/defaults.rb +32 -6
- data/lib/puppet/error.rb +9 -1
- data/lib/puppet/face/module/list.rb +5 -5
- data/lib/puppet/face/module/search.rb +1 -1
- data/lib/puppet/face/module/uninstall.rb +1 -1
- data/lib/puppet/face/module/upgrade.rb +1 -1
- data/lib/puppet/file_serving/http_metadata.rb +1 -1
- data/lib/puppet/file_system.rb +0 -8
- data/lib/puppet/file_system/memory_file.rb +1 -1
- data/lib/puppet/file_system/posix.rb +3 -2
- data/lib/puppet/forge.rb +3 -3
- data/lib/puppet/functions.rb +1 -2
- data/lib/puppet/functions/camelcase.rb +2 -2
- data/lib/puppet/functions/epp.rb +4 -4
- data/lib/puppet/functions/find_file.rb +9 -9
- data/lib/puppet/functions/inline_epp.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +1 -1
- data/lib/puppet/graph/rb_tree_map.rb +2 -2
- data/lib/puppet/graph/simple_graph.rb +4 -3
- data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
- data/lib/puppet/indirector/hiera.rb +2 -0
- data/lib/puppet/indirector/resource/ral.rb +1 -3
- data/lib/puppet/indirector/resource/validator.rb +1 -1
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/loaders.rb +0 -1
- data/lib/puppet/metatype/manager.rb +1 -1
- data/lib/puppet/module.rb +1 -1
- data/lib/puppet/module/task.rb +20 -4
- data/lib/puppet/module_tool/applications/installer.rb +1 -1
- data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
- data/lib/puppet/module_tool/metadata.rb +1 -1
- data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
- data/lib/puppet/module_tool/tar/mini.rb +1 -1
- data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
- data/lib/puppet/network/http/connection.rb +10 -12
- data/lib/puppet/network/http/pool.rb +2 -0
- data/lib/puppet/network/http/site.rb +1 -1
- data/lib/puppet/network/resolver.rb +2 -2
- data/lib/puppet/node/environment.rb +4 -2
- data/lib/puppet/pal/pal_impl.rb +2 -2
- data/lib/puppet/parser/ast.rb +1 -1
- data/lib/puppet/parser/ast/resourceparam.rb +1 -1
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/parser/functions/epp.rb +3 -3
- data/lib/puppet/parser/functions/inline_epp.rb +5 -5
- data/lib/puppet/parser/scope.rb +8 -7
- data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/loader/task_instantiator.rb +4 -0
- data/lib/puppet/pops/loaders.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
- data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
- data/lib/puppet/pops/merge_strategy.rb +22 -18
- data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
- data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
- data/lib/puppet/pops/parser/locator.rb +1 -1
- data/lib/puppet/pops/parser/pn_parser.rb +17 -16
- data/lib/puppet/pops/puppet_stack.rb +51 -49
- data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
- data/lib/puppet/pops/types/string_converter.rb +10 -10
- data/lib/puppet/pops/types/types.rb +3 -3
- data/lib/puppet/property.rb +1 -1
- data/lib/puppet/property/ensure.rb +1 -1
- data/lib/puppet/provider/exec.rb +6 -2
- data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
- data/lib/puppet/provider/nameservice/pw.rb +2 -2
- data/lib/puppet/provider/package/apt.rb +5 -1
- data/lib/puppet/provider/package/dnfmodule.rb +87 -0
- data/lib/puppet/provider/package/dpkg.rb +34 -18
- data/lib/puppet/provider/package/openbsd.rb +1 -1
- data/lib/puppet/provider/package/pip.rb +34 -9
- data/lib/puppet/provider/package/portage.rb +4 -4
- data/lib/puppet/provider/package/rpm.rb +5 -5
- data/lib/puppet/provider/package/windows/package.rb +1 -1
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/package_targetable.rb +5 -4
- data/lib/puppet/provider/parsedfile.rb +1 -1
- data/lib/puppet/provider/service/daemontools.rb +9 -9
- data/lib/puppet/provider/service/openbsd.rb +1 -1
- data/lib/puppet/provider/service/rcng.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -8
- data/lib/puppet/provider/service/systemd.rb +9 -9
- data/lib/puppet/provider/user/directoryservice.rb +1 -1
- data/lib/puppet/provider/user/hpux.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/useradd.rb +22 -13
- data/lib/puppet/provider/user/windows_adsi.rb +4 -5
- data/lib/puppet/reference/indirection.rb +2 -2
- data/lib/puppet/reference/metaparameter.rb +1 -3
- data/lib/puppet/reference/providers.rb +1 -3
- data/lib/puppet/reference/type.rb +3 -9
- data/lib/puppet/reports.rb +1 -1
- data/lib/puppet/resource.rb +1 -1
- data/lib/puppet/resource/catalog.rb +1 -1
- data/lib/puppet/settings.rb +3 -3
- data/lib/puppet/settings/environment_conf.rb +1 -0
- data/lib/puppet/ssl/host.rb +1 -1
- data/lib/puppet/ssl/oids.rb +1 -1
- data/lib/puppet/transaction.rb +33 -11
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/type.rb +2 -4
- data/lib/puppet/type/exec.rb +7 -3
- data/lib/puppet/type/file.rb +1 -2
- data/lib/puppet/type/file/data_sync.rb +5 -1
- data/lib/puppet/type/group.rb +4 -2
- data/lib/puppet/type/notify.rb +3 -2
- data/lib/puppet/type/package.rb +10 -3
- data/lib/puppet/type/schedule.rb +1 -1
- data/lib/puppet/type/service.rb +1 -1
- data/lib/puppet/type/user.rb +4 -2
- data/lib/puppet/util.rb +35 -12
- data/lib/puppet/util/command_line/trollop.rb +1 -1
- data/lib/puppet/util/http_proxy.rb +8 -14
- data/lib/puppet/util/log.rb +2 -2
- data/lib/puppet/util/log/destinations.rb +2 -2
- data/lib/puppet/util/logging.rb +32 -20
- data/lib/puppet/util/metric.rb +2 -2
- data/lib/puppet/util/provider_features.rb +2 -4
- data/lib/puppet/util/rdoc.rb +1 -1
- data/lib/puppet/util/reference.rb +1 -1
- data/lib/puppet/util/resource_template.rb +1 -1
- data/lib/puppet/util/selinux.rb +3 -1
- data/lib/puppet/util/windows/adsi.rb +48 -18
- data/lib/puppet/util/windows/registry.rb +7 -5
- data/lib/puppet/vendor.rb +1 -1
- data/lib/puppet/version.rb +1 -1
- data/lib/puppet/x509/cert_provider.rb +13 -6
- data/locales/puppet.pot +199 -159
- data/man/man5/puppet.conf.5 +35 -5
- data/man/man8/puppet-agent.8 +1 -1
- data/man/man8/puppet-apply.8 +1 -1
- 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 +1 -1
- data/man/man8/puppet-doc.8 +1 -1
- data/man/man8/puppet-epp.8 +1 -1
- data/man/man8/puppet-facts.8 +1 -1
- 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-key.8 +1 -1
- data/man/man8/puppet-lookup.8 +1 -1
- data/man/man8/puppet-man.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 +1 -1
- data/man/man8/puppet-ssl.8 +1 -1
- data/man/man8/puppet-status.8 +1 -1
- data/man/man8/puppet.8 +2 -2
- data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
- data/spec/integration/configurer_spec.rb +52 -0
- data/spec/integration/type/notify_spec.rb +46 -0
- data/spec/lib/puppet/certificate_factory.rb +2 -2
- data/spec/spec_helper.rb +28 -0
- data/spec/unit/application/ssl_spec.rb +4 -7
- data/spec/unit/configurer_spec.rb +394 -398
- data/spec/unit/defaults_spec.rb +4 -4
- data/spec/unit/forge/forge_spec.rb +1 -3
- data/spec/unit/forge/repository_spec.rb +1 -3
- data/spec/unit/indirector/resource/ral_spec.rb +4 -4
- data/spec/unit/network/http/connection_spec.rb +119 -145
- data/spec/unit/parser/scope_spec.rb +10 -0
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
- data/spec/unit/pops/loaders/module_loaders_spec.rb +37 -0
- data/spec/unit/provider/exec_spec.rb +209 -0
- data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
- data/spec/unit/provider/package/dpkg_spec.rb +238 -78
- data/spec/unit/provider/package/pip_spec.rb +51 -6
- data/spec/unit/provider/package/portage_spec.rb +4 -4
- data/spec/unit/provider/package_targetable_spec.rb +60 -0
- data/spec/unit/provider/service/daemontools_spec.rb +24 -0
- data/spec/unit/provider/service/runit_spec.rb +24 -0
- data/spec/unit/provider/service/systemd_spec.rb +25 -25
- data/spec/unit/provider/user/hpux_spec.rb +2 -2
- data/spec/unit/provider/user/useradd_spec.rb +46 -0
- data/spec/unit/ssl/host_spec.rb +0 -5
- data/spec/unit/ssl/state_machine_spec.rb +0 -6
- data/spec/unit/transaction_spec.rb +46 -0
- data/spec/unit/type/exec_spec.rb +6 -12
- data/spec/unit/type/file/content_spec.rb +9 -3
- data/spec/unit/type/file_spec.rb +9 -4
- data/spec/unit/type/package_spec.rb +5 -0
- data/spec/unit/util/execution_spec.rb +16 -0
- data/spec/unit/util/http_proxy_spec.rb +118 -27
- data/spec/unit/util/log/destinations_spec.rb +7 -3
- data/spec/unit/util/log_spec.rb +0 -138
- data/spec/unit/util/logging_spec.rb +200 -0
- data/spec/unit/util/windows/adsi_spec.rb +51 -0
- data/spec/unit/x509/cert_provider_spec.rb +24 -4
- data/tasks/manpages.rake +1 -0
- metadata +12 -10
- data/lib/puppet/pops/loader/null_loader.rb +0 -60
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +0 -24
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +0 -24
- data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +0 -24
data/spec/unit/type/exec_spec.rb
CHANGED
@@ -150,16 +150,13 @@ RSpec.describe Puppet::Type.type(:exec) do
|
|
150
150
|
end
|
151
151
|
end
|
152
152
|
|
153
|
-
it "should redact the command on failure" do
|
153
|
+
it "should redact the sensitive command on failure" do
|
154
154
|
output = "output1\noutput2\n"
|
155
155
|
expect { exec_tester('false', 1, :output => output, :logoutput => :on_failure, :sensitive_parameters => [:command]).refresh }.
|
156
156
|
to raise_error(Puppet::Error, /^\[command redacted\] returned 1 instead of/)
|
157
157
|
|
158
|
-
|
159
|
-
|
160
|
-
expect(log.level).to eq(:err)
|
161
|
-
expect(log.message).to eq(line)
|
162
|
-
end
|
158
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: '[output redacted]'))
|
159
|
+
expect(@logs).to_not include(an_object_having_attributes(message: /output1|output2/))
|
163
160
|
end
|
164
161
|
|
165
162
|
it "should log the output on failure when returns is specified as an array" do
|
@@ -177,7 +174,7 @@ RSpec.describe Puppet::Type.type(:exec) do
|
|
177
174
|
end
|
178
175
|
end
|
179
176
|
|
180
|
-
it "should redact the command on failure when returns is specified as an array" do
|
177
|
+
it "should redact the sensitive command on failure when returns is specified as an array" do
|
181
178
|
output = "output1\noutput2\n"
|
182
179
|
|
183
180
|
expect {
|
@@ -185,11 +182,8 @@ RSpec.describe Puppet::Type.type(:exec) do
|
|
185
182
|
:logoutput => :on_failure, :sensitive_parameters => [:command]).refresh
|
186
183
|
}.to raise_error(Puppet::Error, /^\[command redacted\] returned 1 instead of/)
|
187
184
|
|
188
|
-
|
189
|
-
|
190
|
-
expect(log.level).to eq(:err)
|
191
|
-
expect(log.message).to eq(line)
|
192
|
-
end
|
185
|
+
expect(@logs).to include(an_object_having_attributes(level: :err, message: '[output redacted]'))
|
186
|
+
expect(@logs).to_not include(an_object_having_attributes(message: /output1|output2/))
|
193
187
|
end
|
194
188
|
|
195
189
|
it "shouldn't log the output on success" do
|
@@ -200,15 +200,21 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
|
|
200
200
|
end
|
201
201
|
|
202
202
|
it "prints the diff" do
|
203
|
-
expect(content).to receive(:diff).and_return("my diff")
|
204
|
-
expect(content).to receive(:debug).with("\nmy diff")
|
203
|
+
expect(content).to receive(:diff).and_return("my diff")
|
204
|
+
expect(content).to receive(:debug).with("\nmy diff")
|
205
|
+
expect(content).not_to be_safe_insync("other content")
|
206
|
+
end
|
207
|
+
|
208
|
+
it "prints binary file notice if diff is not valid encoding" do
|
209
|
+
expect(content).to receive(:diff).and_return("\xc7\xd1\xfc\x84")
|
210
|
+
expect(content).to receive(:debug).with(/\nBinary files #{filename} and .* differ/)
|
205
211
|
expect(content).not_to be_safe_insync("other content")
|
206
212
|
end
|
207
213
|
|
208
214
|
it "redacts the diff when the property is sensitive" do
|
209
215
|
content.sensitive = true
|
210
216
|
expect(content).not_to receive(:diff)
|
211
|
-
expect(content).to receive(:debug).with("[diff redacted]")
|
217
|
+
expect(content).to receive(:debug).with("[diff redacted]")
|
212
218
|
expect(content).not_to be_safe_insync("other content")
|
213
219
|
end
|
214
220
|
end
|
data/spec/unit/type/file_spec.rb
CHANGED
@@ -477,6 +477,9 @@ describe Puppet::Type.type(:file) do
|
|
477
477
|
end
|
478
478
|
|
479
479
|
describe "#recurse" do
|
480
|
+
let(:name) { 'bar' }
|
481
|
+
let(:child) { double('puppet_type_file') }
|
482
|
+
|
480
483
|
before do
|
481
484
|
file[:recurse] = true
|
482
485
|
@metadata = Puppet::FileServing::Metadata
|
@@ -485,8 +488,9 @@ describe Puppet::Type.type(:file) do
|
|
485
488
|
describe "and a source is set" do
|
486
489
|
it "should pass the already-discovered resources to recurse_remote" do
|
487
490
|
file[:source] = File.expand_path(__FILE__)
|
488
|
-
allow(
|
489
|
-
|
491
|
+
allow(child).to receive(:[]).with(:path).and_return(name)
|
492
|
+
allow(file).to receive(:recurse_local).and_return(name => child)
|
493
|
+
expect(file).to receive(:recurse_remote).with(name => child).and_return([])
|
490
494
|
file.recurse
|
491
495
|
end
|
492
496
|
end
|
@@ -494,8 +498,9 @@ describe Puppet::Type.type(:file) do
|
|
494
498
|
describe "and a target is set" do
|
495
499
|
it "should use recurse_link" do
|
496
500
|
file[:target] = File.expand_path(__FILE__)
|
497
|
-
allow(
|
498
|
-
|
501
|
+
allow(child).to receive(:[]).with(:path).and_return(name)
|
502
|
+
allow(file).to receive(:recurse_local).and_return(name => child)
|
503
|
+
expect(file).to receive(:recurse_link).with(name => child).and_return([])
|
499
504
|
file.recurse
|
500
505
|
end
|
501
506
|
end
|
@@ -375,6 +375,11 @@ describe Puppet::Type.type(:package) do
|
|
375
375
|
expect(pkg[:allow_virtual]).to eq true
|
376
376
|
end
|
377
377
|
|
378
|
+
it "defaults to false on dpkg provider" do
|
379
|
+
pkg = Puppet::Type.type(:package).new(:name => 'yay', :provider => :dpkg)
|
380
|
+
expect(pkg[:allow_virtual]).to be_nil
|
381
|
+
end
|
382
|
+
|
378
383
|
it "defaults to false on platforms that do not support virtual packages" do
|
379
384
|
pkg = Puppet::Type.type(:package).new(:name => 'yay', :provider => :apple)
|
380
385
|
expect(pkg[:allow_virtual]).to be_nil
|
@@ -128,6 +128,13 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
|
|
128
128
|
|
129
129
|
call_exec_posix('test command', { :cwd => cwd }, @stdin, @stdout, @stderr)
|
130
130
|
end
|
131
|
+
|
132
|
+
it "should not change the current working directory if cwd is unspecified" do
|
133
|
+
expect(Dir).to receive(:chdir).never
|
134
|
+
expect(Kernel).to receive(:exec).with('test command')
|
135
|
+
|
136
|
+
call_exec_posix('test command', {}, @stdin, @stdout, @stderr)
|
137
|
+
end
|
131
138
|
end
|
132
139
|
|
133
140
|
it "should return the pid of the child process" do
|
@@ -171,6 +178,15 @@ describe Puppet::Util::Execution, if: !Puppet::Util::Platform.jruby? do
|
|
171
178
|
|
172
179
|
call_exec_windows('test command', { :cwd => cwd }, @stdin, @stdout, @stderr)
|
173
180
|
end
|
181
|
+
|
182
|
+
it "should not change the current working directory if cwd is unspecified" do
|
183
|
+
expect(Dir).to receive(:chdir).never
|
184
|
+
expect(Process).to receive(:create) do |args|
|
185
|
+
expect(args[:cwd]).to be_nil
|
186
|
+
end
|
187
|
+
|
188
|
+
call_exec_windows('test command', {}, @stdin, @stdout, @stderr)
|
189
|
+
end
|
174
190
|
end
|
175
191
|
|
176
192
|
context 'suppress_window option' do
|
@@ -12,6 +12,103 @@ describe Puppet::Util::HttpProxy do
|
|
12
12
|
|
13
13
|
host, port, user, password = 'some.host', 1234, 'user1', 'pAssw0rd'
|
14
14
|
|
15
|
+
def expects_direct_connection_to(http, www)
|
16
|
+
expect(http.address).to eq(www.host)
|
17
|
+
expect(http.port).to eq(www.port)
|
18
|
+
|
19
|
+
expect(http.proxy_address).to be_nil
|
20
|
+
expect(http.proxy_port).to be_nil
|
21
|
+
expect(http.proxy_user).to be_nil
|
22
|
+
expect(http.proxy_pass).to be_nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def expects_proxy_connection_via(http, www, host, port, user, password)
|
26
|
+
expect(http.address).to eq(www.host)
|
27
|
+
expect(http.port).to eq(www.port)
|
28
|
+
|
29
|
+
expect(http.proxy_address).to eq(host)
|
30
|
+
expect(http.proxy_port).to eq(port)
|
31
|
+
expect(http.proxy_user).to eq(user)
|
32
|
+
expect(http.proxy_pass).to eq(password)
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '.proxy' do
|
36
|
+
let(:www) { URI::HTTP.build(host: 'www.example.com', port: 80) }
|
37
|
+
|
38
|
+
it 'uses a proxy' do
|
39
|
+
Puppet[:http_proxy_host] = host
|
40
|
+
Puppet[:http_proxy_port] = port
|
41
|
+
Puppet[:http_proxy_user] = user
|
42
|
+
Puppet[:http_proxy_password] = password
|
43
|
+
|
44
|
+
http = subject.proxy(www)
|
45
|
+
expects_proxy_connection_via(http, www, host, port, user, password)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'connects directly to the server' do
|
49
|
+
http = subject.proxy(www)
|
50
|
+
expects_direct_connection_to(http, www)
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'when setting no_proxy' do
|
54
|
+
before :each do
|
55
|
+
Puppet[:http_proxy_host] = host
|
56
|
+
Puppet[:http_proxy_port] = port
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'connects directly to the server when HTTP_PROXY environment variable is set, but server matches no_proxy setting' do
|
60
|
+
Puppet[:no_proxy] = www.host
|
61
|
+
|
62
|
+
Puppet::Util.withenv('HTTP_PROXY' => "http://#{host}:#{port}") do
|
63
|
+
http = subject.proxy(www)
|
64
|
+
expects_direct_connection_to(http, www)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'connects directly to the server when no_proxy matches wildcard domain' do
|
69
|
+
Puppet[:no_proxy] = '*.example.com'
|
70
|
+
|
71
|
+
http = subject.proxy(www)
|
72
|
+
expects_direct_connection_to(http, www)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'connects directly to the server when no_proxy matches dotted domain' do
|
76
|
+
Puppet[:no_proxy] = '.example.com'
|
77
|
+
|
78
|
+
http = subject.proxy(www)
|
79
|
+
expects_direct_connection_to(http, www)
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'connects directly to the server when no_proxy matches a domain suffix like ruby does' do
|
83
|
+
Puppet[:no_proxy] = 'example.com'
|
84
|
+
|
85
|
+
http = subject.proxy(www)
|
86
|
+
expects_direct_connection_to(http, www)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'connects directly to the server when no_proxy matches a partial suffix like ruby does' do
|
90
|
+
Puppet[:no_proxy] = 'ample.com'
|
91
|
+
|
92
|
+
http = subject.proxy(www)
|
93
|
+
expects_direct_connection_to(http, www)
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'connects directly to the server when it is a subdomain of no_proxy' do
|
97
|
+
Puppet[:no_proxy] = '*.com'
|
98
|
+
|
99
|
+
http = subject.proxy(www)
|
100
|
+
expects_direct_connection_to(http, www)
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'connects directly to the server when no_proxy is *' do
|
104
|
+
Puppet[:no_proxy] = '*'
|
105
|
+
|
106
|
+
http = subject.proxy(www)
|
107
|
+
expects_direct_connection_to(http, www)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
15
112
|
describe ".http_proxy_env" do
|
16
113
|
it "should return nil if no environment variables" do
|
17
114
|
expect(subject.http_proxy_env).to eq(nil)
|
@@ -241,22 +338,22 @@ describe Puppet::Util::HttpProxy do
|
|
241
338
|
|
242
339
|
describe '.request_with_redirects' do
|
243
340
|
let(:dest) { URI.parse('http://mydomain.com/some/path') }
|
244
|
-
let(:http_ok) { double('http ok', :code => 200, :message => 'HTTP OK') }
|
245
341
|
|
246
342
|
it 'generates accept and accept-encoding headers' do
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
343
|
+
stub_request(:head, dest)
|
344
|
+
|
345
|
+
headers = {
|
346
|
+
'Accept' => '*/*',
|
347
|
+
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
348
|
+
'User-Agent' => /Puppet/
|
349
|
+
}
|
350
|
+
stub_request(:get, dest).with(headers: headers)
|
254
351
|
|
255
352
|
subject.request_with_redirects(dest, :get, 0)
|
256
353
|
end
|
257
354
|
|
258
355
|
it 'can return a compressed response body' do
|
259
|
-
|
356
|
+
stub_request(:head, dest)
|
260
357
|
|
261
358
|
compressed_body = [
|
262
359
|
0x1f, 0x8b, 0x08, 0x08, 0xe9, 0x08, 0x7a, 0x5a, 0x00, 0x03,
|
@@ -264,9 +361,7 @@ describe Puppet::Util::HttpProxy do
|
|
264
361
|
0x00, 0x7a, 0x7a, 0x6f, 0xed, 0x03, 0x00, 0x00, 0x00
|
265
362
|
].pack('C*')
|
266
363
|
|
267
|
-
|
268
|
-
allow(response).to receive(:[]).with('content-encoding').and_return('gzip')
|
269
|
-
expect_any_instance_of(Net::HTTP).to receive(:get).and_return(response)
|
364
|
+
stub_request(:get, dest).to_return(status: 200, body: compressed_body, headers: { 'Content-Encoding' => 'gzip' })
|
270
365
|
|
271
366
|
expect(
|
272
367
|
uncompress_body(subject.request_with_redirects(dest, :get, 0))
|
@@ -274,13 +369,14 @@ describe Puppet::Util::HttpProxy do
|
|
274
369
|
end
|
275
370
|
|
276
371
|
it 'generates accept and accept-encoding headers when a block is provided' do
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
372
|
+
stub_request(:head, dest)
|
373
|
+
|
374
|
+
headers = {
|
375
|
+
'Accept' => '*/*',
|
376
|
+
'Accept-Encoding' => 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
377
|
+
'User-Agent' => /Puppet/
|
378
|
+
}
|
379
|
+
stub_request(:get, dest).with(headers: headers)
|
284
380
|
|
285
381
|
subject.request_with_redirects(dest, :get, 0) do
|
286
382
|
# unused
|
@@ -288,7 +384,7 @@ describe Puppet::Util::HttpProxy do
|
|
288
384
|
end
|
289
385
|
|
290
386
|
it 'only makes a single HEAD request' do
|
291
|
-
|
387
|
+
stub_request(:head, dest)
|
292
388
|
|
293
389
|
subject.request_with_redirects(dest, :head, 0)
|
294
390
|
end
|
@@ -296,13 +392,8 @@ describe Puppet::Util::HttpProxy do
|
|
296
392
|
it 'preserves query parameters' do
|
297
393
|
url = URI.parse('http://mydomain.com/some/path?foo=bar')
|
298
394
|
|
299
|
-
|
300
|
-
|
301
|
-
end.and_return(http_ok)
|
302
|
-
|
303
|
-
expect_any_instance_of(Net::HTTP).to receive(:request_get) do |_http, path, _headers, &block|
|
304
|
-
expect(path).to eq(url)
|
305
|
-
end.and_return(http_ok)
|
395
|
+
stub_request(:head, url)
|
396
|
+
stub_request(:get, url)
|
306
397
|
|
307
398
|
subject.request_with_redirects(url, :get, 0) do
|
308
399
|
# unused
|
@@ -46,13 +46,15 @@ describe Puppet::Util::Log.desttypes[:file] do
|
|
46
46
|
|
47
47
|
describe "on POSIX systems", :if => Puppet.features.posix? do
|
48
48
|
describe "with a normal file" do
|
49
|
+
let (:parent) { Pathname.new('/tmp') }
|
49
50
|
let (:abspath) { '/tmp/log' }
|
50
51
|
let (:relpath) { 'log' }
|
51
52
|
|
52
53
|
it_behaves_like "file destination"
|
53
54
|
|
54
55
|
it "logs an error if it can't chown the file owner & group" do
|
55
|
-
|
56
|
+
allow(File).to receive(:exist?).with(parent).and_return(true)
|
57
|
+
expect(File).to receive(:exist?).with(Pathname.new(abspath)).and_return(false)
|
56
58
|
expect(FileUtils).to receive(:chown).with(Puppet[:user], Puppet[:group], abspath).and_raise(Errno::EPERM)
|
57
59
|
expect(Puppet.features).to receive(:root?).and_return(true)
|
58
60
|
expect(Puppet).to receive(:err).with("Unable to set ownership to #{Puppet[:user]}:#{Puppet[:group]} for log file: #{abspath}")
|
@@ -61,7 +63,8 @@ describe Puppet::Util::Log.desttypes[:file] do
|
|
61
63
|
end
|
62
64
|
|
63
65
|
it "doesn't attempt to chown when running as non-root" do
|
64
|
-
|
66
|
+
allow(File).to receive(:exist?).with(parent).and_return(true)
|
67
|
+
expect(File).to receive(:exist?).with(Pathname.new(abspath)).and_return(false)
|
65
68
|
expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
|
66
69
|
expect(Puppet.features).to receive(:root?).and_return(false)
|
67
70
|
|
@@ -69,7 +72,8 @@ describe Puppet::Util::Log.desttypes[:file] do
|
|
69
72
|
end
|
70
73
|
|
71
74
|
it "doesn't attempt to chown when file already exists" do
|
72
|
-
|
75
|
+
allow(File).to receive(:exist?).with(parent).and_return(true)
|
76
|
+
expect(File).to receive(:exist?).with(Pathname.new(abspath)).and_return(true)
|
73
77
|
expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
|
74
78
|
expect(Puppet.features).to receive(:root?).and_return(true)
|
75
79
|
|
data/spec/unit/util/log_spec.rb
CHANGED
@@ -177,144 +177,6 @@ describe Puppet::Util::Log do
|
|
177
177
|
|
178
178
|
expect(logs.collect(&:message)).to include("Inner block", "Outer block")
|
179
179
|
end
|
180
|
-
|
181
|
-
it 'includes backtrace for RuntimeError in log message when trace option is passed' do
|
182
|
-
logs = []
|
183
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
184
|
-
|
185
|
-
Puppet::Util::Log.newdestination(destination)
|
186
|
-
Puppet::Util::Log.with_destination(destination) do
|
187
|
-
begin
|
188
|
-
raise RuntimeError, 'Oops'
|
189
|
-
rescue RuntimeError => e
|
190
|
-
Puppet.log_exception(e, :default, :trace => true)
|
191
|
-
end
|
192
|
-
end
|
193
|
-
expect(logs.size).to eq(1)
|
194
|
-
log = logs[0]
|
195
|
-
expect(log.message).to match('/log_spec.rb')
|
196
|
-
expect(log.backtrace).to be_nil
|
197
|
-
end
|
198
|
-
|
199
|
-
context "global options" do
|
200
|
-
around :each do |example|
|
201
|
-
Puppet[:trace] = true
|
202
|
-
example.run
|
203
|
-
Puppet[:trace] = false
|
204
|
-
end
|
205
|
-
|
206
|
-
it 'includes backtrace for RuntimeError in log message when trace is enabled globally' do
|
207
|
-
logs = []
|
208
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
209
|
-
|
210
|
-
Puppet::Util::Log.newdestination(destination)
|
211
|
-
Puppet::Util::Log.with_destination(destination) do
|
212
|
-
begin
|
213
|
-
raise RuntimeError, 'Oops'
|
214
|
-
rescue RuntimeError => e
|
215
|
-
Puppet.log_exception(e, :default)
|
216
|
-
end
|
217
|
-
end
|
218
|
-
expect(logs.size).to eq(1)
|
219
|
-
log = logs[0]
|
220
|
-
expect(log.message).to match('/log_spec.rb')
|
221
|
-
expect(log.backtrace).to be_nil
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
it 'excludes backtrace for RuntimeError in log message when trace is disabled' do
|
226
|
-
logs = []
|
227
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
228
|
-
|
229
|
-
Puppet::Util::Log.newdestination(destination)
|
230
|
-
Puppet::Util::Log.with_destination(destination) do
|
231
|
-
begin
|
232
|
-
raise RuntimeError, 'Oops'
|
233
|
-
rescue RuntimeError => e
|
234
|
-
Puppet.log_exception(e)
|
235
|
-
end
|
236
|
-
end
|
237
|
-
expect(logs.size).to eq(1)
|
238
|
-
log = logs[0]
|
239
|
-
expect(log.message).to_not match('/log_spec.rb')
|
240
|
-
expect(log.backtrace).to be_nil
|
241
|
-
end
|
242
|
-
|
243
|
-
it "backtrace is Array in 'backtrace' and excluded from 'message' when logging ParseErrorWithIssue with trace enabled" do
|
244
|
-
logs = []
|
245
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
246
|
-
|
247
|
-
Puppet::Util::Log.newdestination(destination)
|
248
|
-
Puppet::Util::Log.with_destination(destination) do
|
249
|
-
begin
|
250
|
-
raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
|
251
|
-
rescue RuntimeError => e
|
252
|
-
Puppet.log_exception(e, :default, :trace => true)
|
253
|
-
end
|
254
|
-
end
|
255
|
-
expect(logs.size).to eq(1)
|
256
|
-
log = logs[0]
|
257
|
-
expect(log.message).to_not match('/log_spec.rb')
|
258
|
-
expect(log.backtrace).to be_a(Array)
|
259
|
-
end
|
260
|
-
|
261
|
-
it "backtrace is excluded when logging ParseErrorWithIssue with trace disabled" do
|
262
|
-
logs = []
|
263
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
264
|
-
|
265
|
-
Puppet::Util::Log.newdestination(destination)
|
266
|
-
Puppet::Util::Log.with_destination(destination) do
|
267
|
-
begin
|
268
|
-
raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
|
269
|
-
rescue RuntimeError => e
|
270
|
-
Puppet.log_exception(e)
|
271
|
-
end
|
272
|
-
end
|
273
|
-
expect(logs.size).to eq(1)
|
274
|
-
log = logs[0]
|
275
|
-
expect(log.message).to_not match('/log_spec.rb')
|
276
|
-
expect(log.backtrace).to be_nil
|
277
|
-
end
|
278
|
-
|
279
|
-
it 'includes position details for ParseError in log message' do
|
280
|
-
logs = []
|
281
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
282
|
-
|
283
|
-
Puppet::Util::Log.newdestination(destination)
|
284
|
-
Puppet::Util::Log.with_destination(destination) do
|
285
|
-
begin
|
286
|
-
raise Puppet::ParseError.new('Oops', '/tmp/test.pp', 30, 15)
|
287
|
-
rescue RuntimeError => e
|
288
|
-
Puppet.log_exception(e)
|
289
|
-
end
|
290
|
-
end
|
291
|
-
expect(logs.size).to eq(1)
|
292
|
-
log = logs[0]
|
293
|
-
expect(log.message).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
|
294
|
-
expect(log.message).to be(log.to_s)
|
295
|
-
end
|
296
|
-
|
297
|
-
it 'excludes position details for ParseErrorWithIssue from log message' do
|
298
|
-
logs = []
|
299
|
-
destination = Puppet::Test::LogCollector.new(logs)
|
300
|
-
|
301
|
-
Puppet::Util::Log.newdestination(destination)
|
302
|
-
Puppet::Util::Log.with_destination(destination) do
|
303
|
-
begin
|
304
|
-
raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
|
305
|
-
rescue RuntimeError => e
|
306
|
-
Puppet.log_exception(e)
|
307
|
-
end
|
308
|
-
end
|
309
|
-
expect(logs.size).to eq(1)
|
310
|
-
log = logs[0]
|
311
|
-
expect(log.message).to_not match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
|
312
|
-
expect(log.to_s).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
|
313
|
-
expect(log.issue_code).to eq(:SYNTAX_ERROR)
|
314
|
-
expect(log.file).to eq('/tmp/test.pp')
|
315
|
-
expect(log.line).to eq(30)
|
316
|
-
expect(log.pos).to eq(15)
|
317
|
-
end
|
318
180
|
end
|
319
181
|
|
320
182
|
describe Puppet::Util::Log::DestConsole do
|