puppet 6.17.0-universal-darwin → 6.18.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 +6 -5
- data/lib/puppet/application/apply.rb +18 -20
- data/lib/puppet/application/lookup.rb +16 -4
- data/lib/puppet/configurer/downloader.rb +31 -10
- data/lib/puppet/confine.rb +1 -1
- data/lib/puppet/confine/any.rb +1 -1
- data/lib/puppet/defaults.rb +21 -3
- data/lib/puppet/feature/base.rb +1 -1
- data/lib/puppet/file_serving/mount/locales.rb +1 -2
- data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
- data/lib/puppet/file_serving/mount/plugins.rb +1 -2
- data/lib/puppet/file_system/file_impl.rb +3 -3
- data/lib/puppet/functions/lstrip.rb +4 -4
- data/lib/puppet/functions/reverse_each.rb +1 -1
- data/lib/puppet/functions/rstrip.rb +4 -4
- data/lib/puppet/functions/step.rb +1 -1
- data/lib/puppet/functions/strip.rb +4 -4
- data/lib/puppet/gettext/config.rb +5 -5
- data/lib/puppet/gettext/module_translations.rb +4 -4
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/file_metadata/http.rb +1 -0
- data/lib/puppet/indirector/hiera.rb +4 -0
- data/lib/puppet/indirector/indirection.rb +1 -1
- data/lib/puppet/indirector/report/processor.rb +2 -2
- data/lib/puppet/module.rb +1 -2
- data/lib/puppet/network/format_support.rb +2 -2
- data/lib/puppet/network/http/route.rb +2 -2
- data/lib/puppet/node/environment.rb +12 -5
- data/lib/puppet/pal/pal_impl.rb +27 -3
- data/lib/puppet/parameter.rb +1 -1
- data/lib/puppet/parser/functions.rb +21 -17
- data/lib/puppet/parser/functions/create_resources.rb +11 -7
- data/lib/puppet/parser/type_loader.rb +2 -2
- data/lib/puppet/pops/adaptable.rb +7 -13
- data/lib/puppet/pops/adapters.rb +8 -4
- data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
- data/lib/puppet/pops/loaders.rb +18 -11
- data/lib/puppet/pops/lookup/context.rb +1 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
- data/lib/puppet/pops/types/iterable.rb +34 -8
- data/lib/puppet/pops/validation/checker4_0.rb +19 -15
- data/lib/puppet/provider/file/windows.rb +1 -1
- data/lib/puppet/provider/package/apt.rb +34 -0
- data/lib/puppet/provider/package/gem.rb +4 -2
- data/lib/puppet/provider/package/puppet_gem.rb +5 -0
- data/lib/puppet/provider/package/zypper.rb +3 -0
- data/lib/puppet/provider/user/aix.rb +1 -1
- data/lib/puppet/provider/user/user_role_add.rb +1 -1
- data/lib/puppet/provider/user/windows_adsi.rb +18 -1
- data/lib/puppet/settings.rb +1 -1
- data/lib/puppet/ssl/validator/default_validator.rb +1 -1
- data/lib/puppet/test/test_helper.rb +10 -3
- data/lib/puppet/transaction.rb +2 -2
- data/lib/puppet/transaction/persistence.rb +1 -1
- data/lib/puppet/transaction/report.rb +1 -1
- data/lib/puppet/trusted_external.rb +2 -2
- data/lib/puppet/type.rb +4 -3
- data/lib/puppet/type/file.rb +2 -2
- data/lib/puppet/type/file/source.rb +27 -7
- data/lib/puppet/type/notify.rb +2 -2
- data/lib/puppet/type/service.rb +4 -0
- data/lib/puppet/type/user.rb +18 -3
- data/lib/puppet/util.rb +26 -12
- data/lib/puppet/util/autoload.rb +9 -7
- data/lib/puppet/util/character_encoding.rb +9 -5
- data/lib/puppet/util/execution.rb +2 -2
- data/lib/puppet/util/windows.rb +1 -0
- data/lib/puppet/util/windows/api_types.rb +15 -1
- data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
- data/lib/puppet/util/windows/security.rb +4 -4
- data/lib/puppet/util/windows/user.rb +219 -0
- data/lib/puppet/version.rb +1 -1
- data/locales/puppet.pot +78 -69
- data/man/man5/puppet.conf.5 +22 -3
- 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 +2 -2
- 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/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
- data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
- data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
- data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
- data/spec/integration/application/agent_spec.rb +29 -37
- data/spec/integration/application/apply_spec.rb +149 -149
- data/spec/integration/application/config_spec.rb +74 -0
- data/spec/integration/application/doc_spec.rb +16 -6
- data/spec/integration/application/filebucket_spec.rb +65 -16
- data/spec/integration/application/help_spec.rb +42 -0
- data/spec/integration/application/lookup_spec.rb +13 -0
- data/spec/integration/application/module_spec.rb +68 -0
- data/spec/integration/application/plugin_spec.rb +50 -0
- data/spec/integration/data_binding_spec.rb +82 -0
- data/spec/integration/directory_environments_spec.rb +17 -17
- data/spec/integration/indirector/facts/facter_spec.rb +8 -6
- data/spec/integration/node/environment_spec.rb +1 -1
- data/spec/integration/util/execution_spec.rb +22 -0
- data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
- data/spec/integration/util/windows/process_spec.rb +26 -32
- data/spec/integration/util/windows/user_spec.rb +7 -0
- data/spec/integration/util_spec.rb +7 -33
- data/spec/lib/puppet_spec/matchers.rb +0 -80
- data/spec/lib/puppet_spec/puppetserver.rb +8 -0
- data/spec/unit/application/agent_spec.rb +3 -4
- data/spec/unit/application/face_base_spec.rb +6 -4
- data/spec/unit/application/facts_spec.rb +39 -10
- data/spec/unit/application/man_spec.rb +52 -0
- data/spec/unit/application/resource_spec.rb +3 -1
- data/spec/unit/application/ssl_spec.rb +15 -2
- data/spec/unit/configurer/downloader_spec.rb +10 -0
- data/spec/unit/configurer_spec.rb +47 -31
- data/spec/unit/confine_spec.rb +2 -1
- data/spec/unit/face/config_spec.rb +3 -1
- data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
- data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
- data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
- data/spec/unit/file_system/uniquefile_spec.rb +18 -0
- data/spec/unit/http/client_spec.rb +0 -1
- data/spec/unit/http/resolver_spec.rb +0 -1
- data/spec/unit/http/service/ca_spec.rb +0 -1
- data/spec/unit/http/service/compiler_spec.rb +0 -1
- data/spec/unit/http/service/file_server_spec.rb +0 -1
- data/spec/unit/http/service/report_spec.rb +0 -1
- data/spec/unit/http/service_spec.rb +0 -1
- data/spec/unit/http/session_spec.rb +0 -1
- data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
- data/spec/unit/network/format_support_spec.rb +3 -2
- data/spec/unit/node/environment_spec.rb +18 -1
- data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
- data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
- data/spec/unit/provider/package/apt_spec.rb +77 -0
- data/spec/unit/provider/package/aptitude_spec.rb +1 -0
- data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
- data/spec/unit/provider/package/zypper_spec.rb +14 -0
- data/spec/unit/provider/service/init_spec.rb +41 -0
- data/spec/unit/provider/service/systemd_spec.rb +1 -6
- data/spec/unit/provider/service/windows_spec.rb +28 -0
- data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
- data/spec/unit/puppet_pal_2pec.rb +40 -0
- data/spec/unit/reports/store_spec.rb +17 -13
- data/spec/unit/transaction/persistence_spec.rb +15 -0
- data/spec/unit/type/service_spec.rb +35 -2
- data/spec/unit/type/user_spec.rb +31 -2
- data/spec/unit/util/character_encoding_spec.rb +4 -4
- data/spec/unit/util/command_line_spec.rb +11 -6
- metadata +21 -44
- data/spec/integration/faces/config_spec.rb +0 -91
- data/spec/integration/faces/documentation_spec.rb +0 -57
- data/spec/integration/file_bucket/file_spec.rb +0 -50
- data/spec/integration/file_serving/content_spec.rb +0 -7
- data/spec/integration/file_serving/fileset_spec.rb +0 -12
- data/spec/integration/file_serving/metadata_spec.rb +0 -8
- data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
- data/spec/integration/file_system/uniquefile_spec.rb +0 -26
- data/spec/integration/module_tool/forge_spec.rb +0 -51
- data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
- data/spec/integration/provider/service/init_spec.rb +0 -48
- data/spec/integration/provider/service/systemd_spec.rb +0 -25
- data/spec/integration/provider/service/windows_spec.rb +0 -50
- data/spec/integration/reference/providers_spec.rb +0 -21
- data/spec/integration/reports_spec.rb +0 -13
- data/spec/integration/ssl/certificate_request_spec.rb +0 -44
- data/spec/integration/ssl/host_spec.rb +0 -72
- data/spec/integration/ssl/key_spec.rb +0 -99
- data/spec/shared_behaviours/file_serving_model.rb +0 -51
- data/spec/unit/face/man_spec.rb +0 -25
- data/spec/unit/man_spec.rb +0 -31
@@ -2,11 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe "directory environments" do
|
4
4
|
let(:args) { ['--configprint', 'modulepath', '--environment', 'direnv'] }
|
5
|
-
let(:puppet)
|
6
|
-
app = Puppet::Application[:apply]
|
7
|
-
allow(app).to receive(:command_line).and_return(double('command_line', :args => []))
|
8
|
-
app
|
9
|
-
end
|
5
|
+
let(:puppet) { Puppet::Application[:apply] }
|
10
6
|
|
11
7
|
context "with a single directory environmentpath" do
|
12
8
|
before(:each) do
|
@@ -17,17 +13,19 @@ describe "directory environments" do
|
|
17
13
|
|
18
14
|
it "config prints the environments modulepath" do
|
19
15
|
Puppet.settings.initialize_global_settings(args)
|
20
|
-
expect
|
21
|
-
|
22
|
-
|
16
|
+
expect {
|
17
|
+
puppet.run
|
18
|
+
}.to exit_with(0)
|
19
|
+
.and output(%r{/direnv/modules}).to_stdout
|
23
20
|
end
|
24
21
|
|
25
22
|
it "config prints the cli --modulepath despite environment" do
|
26
23
|
args << '--modulepath' << '/completely/different'
|
27
24
|
Puppet.settings.initialize_global_settings(args)
|
28
|
-
expect
|
29
|
-
|
30
|
-
|
25
|
+
expect {
|
26
|
+
puppet.run
|
27
|
+
}.to exit_with(0)
|
28
|
+
.and output(%r{/completely/different}).to_stdout
|
31
29
|
end
|
32
30
|
|
33
31
|
it 'given an 8.3 style path on Windows, will config print an expanded path',
|
@@ -41,9 +39,10 @@ describe "directory environments" do
|
|
41
39
|
expect(Puppet[:environmentpath]).to match(/~/)
|
42
40
|
|
43
41
|
Puppet.settings.initialize_global_settings(args)
|
44
|
-
expect
|
45
|
-
|
46
|
-
|
42
|
+
expect {
|
43
|
+
puppet.run
|
44
|
+
}.to exit_with(0)
|
45
|
+
.and output(a_string_matching(expanded)).to_stdout
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
@@ -59,9 +58,10 @@ describe "directory environments" do
|
|
59
58
|
|
60
59
|
it "config prints a directory environment modulepath" do
|
61
60
|
Puppet.settings.initialize_global_settings(args)
|
62
|
-
expect
|
63
|
-
|
64
|
-
|
61
|
+
expect {
|
62
|
+
puppet.run
|
63
|
+
}.to exit_with(0)
|
64
|
+
.and output(%r{otherdirenv/modules}).to_stdout
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -43,9 +43,10 @@ describe Puppet::Node::Facts::Facter do
|
|
43
43
|
Puppet.initialize_settings(['--modulepath', factdir])
|
44
44
|
apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => ['--modulepath', factdir, '-e', 'notify { $custom: }']))
|
45
45
|
|
46
|
-
expect
|
47
|
-
|
48
|
-
|
46
|
+
expect {
|
47
|
+
apply.run
|
48
|
+
}.to exit_with(0)
|
49
|
+
.and output(/defined 'message' as '#{Puppet.version}'/).to_stdout
|
49
50
|
end
|
50
51
|
|
51
52
|
it "should resolve external facts" do
|
@@ -58,9 +59,10 @@ describe Puppet::Node::Facts::Facter do
|
|
58
59
|
Puppet.initialize_settings(['--pluginfactdest', factdir])
|
59
60
|
apply = Puppet::Application.find(:apply).new(double('command_line', :subcommand_name => :apply, :args => ['--pluginfactdest', factdir, '-e', 'notify { $foo: }']))
|
60
61
|
|
61
|
-
expect
|
62
|
-
|
63
|
-
|
62
|
+
expect {
|
63
|
+
apply.run
|
64
|
+
}.to exit_with(0)
|
65
|
+
.and output(/defined 'message' as 'bar'/).to_stdout
|
64
66
|
end
|
65
67
|
end
|
66
68
|
|
@@ -79,7 +79,7 @@ describe Puppet::Node::Environment do
|
|
79
79
|
it "should not yield a module with the same name as a defined Bolt project" do
|
80
80
|
project_path = File.join(tmpfile('project'), 'bolt_project')
|
81
81
|
FileUtils.mkdir_p(project_path)
|
82
|
-
project = Struct.new("Project", :name, :path).new('project', project_path)
|
82
|
+
project = Struct.new("Project", :name, :path, :load_as_module?).new('project', project_path, true)
|
83
83
|
|
84
84
|
Puppet.override(bolt_project: project) do
|
85
85
|
base = tmpfile("base")
|
@@ -50,6 +50,28 @@ describe Puppet::Util::Execution, unless: Puppet::Util::Platform.jruby? do
|
|
50
50
|
Puppet::Util::Execution.execute(str, sensitive: true)
|
51
51
|
expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Executing: '[redacted]'"))
|
52
52
|
end
|
53
|
+
|
54
|
+
it "allows stdout and stderr to share a file" do
|
55
|
+
command = "ruby -e '(1..10).each {|i| (i%2==0) ? $stdout.puts(i) : $stderr.puts(i)}'"
|
56
|
+
|
57
|
+
expect(Puppet::Util::Execution.execute(command, :combine => true).split).to match_array([*'1'..'10'])
|
58
|
+
end
|
59
|
+
|
60
|
+
it "returns output and set $CHILD_STATUS" do
|
61
|
+
command = "ruby -e 'puts \"foo\"; exit 42'"
|
62
|
+
|
63
|
+
output = Puppet::Util::Execution.execute(command, {:failonfail => false})
|
64
|
+
|
65
|
+
expect(output).to eq("foo\n")
|
66
|
+
expect($CHILD_STATUS.exitstatus).to eq(42)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "raises an error if non-zero exit status is returned" do
|
70
|
+
command = "ruby -e 'exit 43'"
|
71
|
+
|
72
|
+
expect { Puppet::Util::Execution.execute(command) }.to raise_error(Puppet::ExecutionFailure, /Execution of '#{command}' returned 43: /)
|
73
|
+
expect($CHILD_STATUS.exitstatus).to eq(43)
|
74
|
+
end
|
53
75
|
end
|
54
76
|
|
55
77
|
describe "#execute (non-Windows)", :if => !Puppet::Util::Platform.windows? do
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dir, :if => Puppet::Util::Platform.windows? do
|
4
|
+
it "should always have the PERSONAL constant defined" do
|
5
|
+
expect(described_class).to be_const_defined(:PERSONAL)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should not raise any errors when accessing the PERSONAL constant" do
|
9
|
+
expect { described_class::PERSONAL }.not_to raise_error
|
10
|
+
end
|
11
|
+
end
|
@@ -33,17 +33,7 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
|
|
33
33
|
end
|
34
34
|
|
35
35
|
describe "when reading environment variables" do
|
36
|
-
after :each do
|
37
|
-
# spec\integration\test\test_helper_spec.rb calls set_environment_strings
|
38
|
-
# after :all and thus needs access to the real APIs once again
|
39
|
-
allow(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_call_original
|
40
|
-
allow(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW).and_call_original
|
41
|
-
end
|
42
|
-
|
43
36
|
it "will ignore only keys or values with corrupt byte sequences" do
|
44
|
-
arraydest = []
|
45
|
-
Puppet::Util::Log.newdestination(Puppet::Test::LogCollector.new(arraydest))
|
46
|
-
|
47
37
|
env_vars = {}
|
48
38
|
|
49
39
|
# Create a UTF-16LE version of the below null separated environment string
|
@@ -61,9 +51,9 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
|
|
61
51
|
ptr.put_array_of_uchar(0, env_var_block_bytes)
|
62
52
|
|
63
53
|
# stub the block of memory that the Win32 API would typically return via pointer
|
64
|
-
|
54
|
+
allow(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_return(ptr)
|
65
55
|
# stub out the real API call to free memory, else process crashes
|
66
|
-
|
56
|
+
allow(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW)
|
67
57
|
|
68
58
|
env_vars = Puppet::Util::Windows::Process.get_environment_strings
|
69
59
|
end
|
@@ -72,39 +62,43 @@ describe "Puppet::Util::Windows::Process", :if => Puppet::Util::Platform.windows
|
|
72
62
|
expect(env_vars).to eq({'a' => 'b', 'c' => 'd', 'f' => 'g'})
|
73
63
|
|
74
64
|
# and Puppet should emit a warning about it
|
75
|
-
expect(
|
76
|
-
expect(
|
65
|
+
expect(@logs.last.level).to eq(:warning)
|
66
|
+
expect(@logs.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
|
77
67
|
end
|
78
68
|
end
|
79
69
|
|
80
70
|
describe "when setting environment variables" do
|
81
|
-
|
82
|
-
begin
|
83
|
-
name = SecureRandom.uuid
|
84
|
-
value = 'foo=bar'
|
71
|
+
let(:name) { SecureRandom.uuid }
|
85
72
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
expect(env[name]).to eq(value)
|
73
|
+
around :each do |example|
|
74
|
+
begin
|
75
|
+
example.run
|
91
76
|
ensure
|
92
77
|
Puppet::Util::Windows::Process.set_environment_variable(name, nil)
|
93
78
|
end
|
94
79
|
end
|
95
80
|
|
96
|
-
it "
|
97
|
-
|
98
|
-
|
81
|
+
it "sets environment variables containing '='" do
|
82
|
+
value = 'foo=bar'
|
83
|
+
Puppet::Util::Windows::Process.set_environment_variable(name, value)
|
84
|
+
env = Puppet::Util::Windows::Process.get_environment_strings
|
99
85
|
|
100
|
-
|
86
|
+
expect(env[name]).to eq(value)
|
87
|
+
end
|
101
88
|
|
102
|
-
|
89
|
+
it "sets environment variables contains spaces" do
|
90
|
+
Puppet::Util::Windows::Process.set_environment_variable(name, '')
|
91
|
+
env = Puppet::Util::Windows::Process.get_environment_strings
|
103
92
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
93
|
+
expect(env[name]).to eq('')
|
94
|
+
end
|
95
|
+
|
96
|
+
it "sets environment variables containing UTF-8" do
|
97
|
+
rune_utf8 = "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7"
|
98
|
+
Puppet::Util::Windows::Process.set_environment_variable(name, rune_utf8)
|
99
|
+
env = Puppet::Util::Windows::Process.get_environment_strings
|
100
|
+
|
101
|
+
expect(env[name]).to eq(rune_utf8)
|
108
102
|
end
|
109
103
|
end
|
110
104
|
end
|
@@ -215,5 +215,12 @@ describe "Puppet::Util::Windows::User", :if => Puppet::Util::Platform.windows? d
|
|
215
215
|
expect(Puppet::Util::Windows::User.localsystem?('OtherUser')).to eq(false)
|
216
216
|
end
|
217
217
|
end
|
218
|
+
|
219
|
+
describe "get_rights" do
|
220
|
+
it "should be empty when given user does not exist" do
|
221
|
+
allow(Puppet::Util::Windows::SID).to receive(:name_to_principal).with('NonExistingUser').and_return(nil)
|
222
|
+
expect(Puppet::Util::Windows::User.get_rights('NonExistingUser')).to eq("")
|
223
|
+
end
|
224
|
+
end
|
218
225
|
end
|
219
226
|
end
|
@@ -1,32 +1,9 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe Puppet::Util do
|
4
5
|
include PuppetSpec::Files
|
5
6
|
|
6
|
-
describe "#execute", unless: Puppet::Util::Platform.jruby? do
|
7
|
-
it "should properly allow stdout and stderr to share a file" do
|
8
|
-
command = "ruby -e '(1..10).each {|i| (i%2==0) ? $stdout.puts(i) : $stderr.puts(i)}'"
|
9
|
-
|
10
|
-
expect(Puppet::Util::Execution.execute(command, :combine => true).split).to match_array([*'1'..'10'])
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should return output and set $CHILD_STATUS" do
|
14
|
-
command = "ruby -e 'puts \"foo\"; exit 42'"
|
15
|
-
|
16
|
-
output = Puppet::Util::Execution.execute(command, {:failonfail => false})
|
17
|
-
|
18
|
-
expect(output).to eq("foo\n")
|
19
|
-
expect($CHILD_STATUS.exitstatus).to eq(42)
|
20
|
-
end
|
21
|
-
|
22
|
-
it "should raise an error if non-zero exit status is returned" do
|
23
|
-
command = "ruby -e 'exit 43'"
|
24
|
-
|
25
|
-
expect { Puppet::Util::Execution.execute(command) }.to raise_error(Puppet::ExecutionFailure, /Execution of '#{command}' returned 43: /)
|
26
|
-
expect($CHILD_STATUS.exitstatus).to eq(43)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
7
|
describe "#replace_file on Windows", :if => Puppet::Util::Platform.windows? do
|
31
8
|
it "replace_file should preserve original ACEs from existing replaced file on Windows" do
|
32
9
|
|
@@ -110,18 +87,15 @@ describe Puppet::Util do
|
|
110
87
|
describe "#which on Windows", :if => Puppet::Util::Platform.windows? do
|
111
88
|
let (:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
|
112
89
|
let (:filename) { 'foo.exe' }
|
113
|
-
let (:filepath) { File.expand_path('C:\\' + rune_utf8 + '\\' + filename) }
|
114
90
|
|
115
|
-
|
116
|
-
|
117
|
-
|
91
|
+
it "should be able to use UTF8 characters in the path" do
|
92
|
+
utf8 = tmpdir(rune_utf8)
|
93
|
+
Puppet::FileSystem.mkpath(utf8)
|
118
94
|
|
119
|
-
|
120
|
-
|
121
|
-
end
|
95
|
+
filepath = File.join(utf8, filename)
|
96
|
+
Puppet::FileSystem.touch(filepath)
|
122
97
|
|
123
|
-
|
124
|
-
path = "C:\\" + rune_utf8 + "#{File::PATH_SEPARATOR}c:\\windows\\system32#{File::PATH_SEPARATOR}c:\\windows"
|
98
|
+
path = [utf8, "c:\\windows\\system32", "c:\\windows"].join(File::PATH_SEPARATOR)
|
125
99
|
Puppet::Util.withenv( { "PATH" => path } , :windows) do
|
126
100
|
expect(Puppet::Util.which(filename)).to eq(filepath)
|
127
101
|
end
|
@@ -41,86 +41,6 @@ RSpec::Matchers.define :exit_with do |expected|
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
RSpec::Matchers.define :have_printed do |expected|
|
46
|
-
|
47
|
-
case expected
|
48
|
-
when String, Regexp, Proc
|
49
|
-
expected = expected
|
50
|
-
else
|
51
|
-
expected = expected.to_s
|
52
|
-
end
|
53
|
-
|
54
|
-
chain :and_exit_with do |code|
|
55
|
-
@expected_exit_code = code
|
56
|
-
end
|
57
|
-
|
58
|
-
define_method :matches_exit_code? do |actual|
|
59
|
-
@expected_exit_code.nil? || @expected_exit_code == actual
|
60
|
-
end
|
61
|
-
|
62
|
-
define_method :matches_output? do |actual|
|
63
|
-
return false unless actual
|
64
|
-
case expected
|
65
|
-
when String
|
66
|
-
actual.include?(expected)
|
67
|
-
when Regexp
|
68
|
-
expected.match(actual)
|
69
|
-
when Proc
|
70
|
-
expected.call(actual)
|
71
|
-
else
|
72
|
-
raise ArgumentError, "No idea how to match a #{actual.class.name}"
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
match do |block|
|
77
|
-
$stderr = $stdout = StringIO.new
|
78
|
-
$stdout.set_encoding('UTF-8') if $stdout.respond_to?(:set_encoding)
|
79
|
-
|
80
|
-
begin
|
81
|
-
block.call
|
82
|
-
rescue SystemExit => e
|
83
|
-
raise unless @expected_exit_code
|
84
|
-
@actual_exit_code = e.status
|
85
|
-
ensure
|
86
|
-
$stdout.rewind
|
87
|
-
@actual = $stdout.read
|
88
|
-
|
89
|
-
$stdout = STDOUT
|
90
|
-
$stderr = STDERR
|
91
|
-
end
|
92
|
-
|
93
|
-
matches_output?(@actual) && matches_exit_code?(@actual_exit_code)
|
94
|
-
end
|
95
|
-
|
96
|
-
supports_block_expectations
|
97
|
-
|
98
|
-
failure_message do |actual|
|
99
|
-
if actual.nil? then
|
100
|
-
"expected #{expected.inspect}, but nothing was printed"
|
101
|
-
else
|
102
|
-
if !@expected_exit_code.nil? && matches_output?(actual)
|
103
|
-
"expected exit with code #{@expected_exit_code} but " +
|
104
|
-
(@actual_exit_code.nil? ? " exit was not called" : "exited with #{@actual_exit_code} instead")
|
105
|
-
else
|
106
|
-
"expected #{expected.inspect} to be printed; got:\n#{actual}"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
failure_message_when_negated do |actual|
|
112
|
-
if @expected_exit_code && matches_exit_code?(@actual_exit_code)
|
113
|
-
"expected exit code to not be #{@actual_exit_code}"
|
114
|
-
else
|
115
|
-
"expected #{expected.inspect} to not be printed; got:\n#{actual}"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
description do
|
120
|
-
"expect #{expected.inspect} to be printed" + (@expected_exit_code.nil ? '' : " with exit code #{@expected_exit_code}")
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
44
|
RSpec::Matchers.define :equal_attributes_of do |expected|
|
125
45
|
match do |actual|
|
126
46
|
actual.instance_variables.all? do |attr|
|
@@ -47,9 +47,13 @@ class PuppetSpec::Puppetserver
|
|
47
47
|
class FilebucketServlet < WEBrick::HTTPServlet::AbstractServlet
|
48
48
|
def do_GET request, response
|
49
49
|
end
|
50
|
+
|
50
51
|
def do_PUT request, response
|
52
|
+
upload = File.join(@config.config[:TempDir], 'filebucket')
|
53
|
+
File.open(upload, 'wb') { |f| f.write(request.body) }
|
51
54
|
response['Content-Type'] = 'application/octet-stream'
|
52
55
|
end
|
56
|
+
|
53
57
|
def do_HEAD request, response
|
54
58
|
response.status = 404
|
55
59
|
end
|
@@ -116,4 +120,8 @@ class PuppetSpec::Puppetserver
|
|
116
120
|
end
|
117
121
|
@https.mount(path, handler)
|
118
122
|
end
|
123
|
+
|
124
|
+
def upload_directory
|
125
|
+
@https.config[:TempDir]
|
126
|
+
end
|
119
127
|
end
|
@@ -571,10 +571,9 @@ describe Puppet::Application::Agent do
|
|
571
571
|
allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_request).and_return(nil)
|
572
572
|
|
573
573
|
expect {
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
}.to output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
|
574
|
+
@puppetd.fingerprint
|
575
|
+
}.to exit_with(1)
|
576
|
+
.and output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
|
578
577
|
end
|
579
578
|
|
580
579
|
it "should log an error if an exception occurs" do
|
@@ -423,16 +423,18 @@ EOT
|
|
423
423
|
it "should work if asked to render json" do
|
424
424
|
allow(app.command_line).to receive(:args).and_return(%w{count_args a b c --render-as json})
|
425
425
|
expect {
|
426
|
-
|
427
|
-
}.to
|
426
|
+
app.run
|
427
|
+
}.to exit_with(0)
|
428
|
+
.and output(/3/).to_stdout
|
428
429
|
end
|
429
430
|
|
430
431
|
it "should invoke when_rendering hook 's' when asked to render-as 's'" do
|
431
432
|
allow(app.command_line).to receive(:args).and_return(%w{with_s_rendering_hook --render-as s})
|
432
433
|
app.action = app.face.get_action(:with_s_rendering_hook)
|
433
434
|
expect {
|
434
|
-
|
435
|
-
}.to
|
435
|
+
app.run
|
436
|
+
}.to exit_with(0)
|
437
|
+
.and output(/you invoked the 's' rendering hook/).to_stdout
|
436
438
|
end
|
437
439
|
end
|
438
440
|
|