puppet 6.17.0-x86-mingw32 → 6.18.0-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.

Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +6 -5
  3. data/lib/puppet/application/apply.rb +18 -20
  4. data/lib/puppet/application/lookup.rb +16 -4
  5. data/lib/puppet/configurer/downloader.rb +31 -10
  6. data/lib/puppet/confine.rb +1 -1
  7. data/lib/puppet/confine/any.rb +1 -1
  8. data/lib/puppet/defaults.rb +21 -3
  9. data/lib/puppet/feature/base.rb +1 -1
  10. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  11. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  12. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  13. data/lib/puppet/file_system/file_impl.rb +3 -3
  14. data/lib/puppet/functions/lstrip.rb +4 -4
  15. data/lib/puppet/functions/reverse_each.rb +1 -1
  16. data/lib/puppet/functions/rstrip.rb +4 -4
  17. data/lib/puppet/functions/step.rb +1 -1
  18. data/lib/puppet/functions/strip.rb +4 -4
  19. data/lib/puppet/gettext/config.rb +5 -5
  20. data/lib/puppet/gettext/module_translations.rb +4 -4
  21. data/lib/puppet/indirector/exec.rb +1 -1
  22. data/lib/puppet/indirector/facts/facter.rb +3 -3
  23. data/lib/puppet/indirector/file_metadata/http.rb +1 -0
  24. data/lib/puppet/indirector/hiera.rb +4 -0
  25. data/lib/puppet/indirector/indirection.rb +1 -1
  26. data/lib/puppet/indirector/report/processor.rb +2 -2
  27. data/lib/puppet/module.rb +1 -2
  28. data/lib/puppet/network/format_support.rb +2 -2
  29. data/lib/puppet/network/http/route.rb +2 -2
  30. data/lib/puppet/node/environment.rb +12 -5
  31. data/lib/puppet/pal/pal_impl.rb +27 -3
  32. data/lib/puppet/parameter.rb +1 -1
  33. data/lib/puppet/parser/functions.rb +21 -17
  34. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  35. data/lib/puppet/parser/type_loader.rb +2 -2
  36. data/lib/puppet/pops/adaptable.rb +7 -13
  37. data/lib/puppet/pops/adapters.rb +8 -4
  38. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  39. data/lib/puppet/pops/loaders.rb +18 -11
  40. data/lib/puppet/pops/lookup/context.rb +1 -1
  41. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  42. data/lib/puppet/pops/types/iterable.rb +34 -8
  43. data/lib/puppet/pops/validation/checker4_0.rb +19 -15
  44. data/lib/puppet/provider/file/windows.rb +1 -1
  45. data/lib/puppet/provider/package/apt.rb +34 -0
  46. data/lib/puppet/provider/package/gem.rb +4 -2
  47. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  48. data/lib/puppet/provider/package/zypper.rb +3 -0
  49. data/lib/puppet/provider/user/aix.rb +1 -1
  50. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  51. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  52. data/lib/puppet/settings.rb +1 -1
  53. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  54. data/lib/puppet/test/test_helper.rb +10 -3
  55. data/lib/puppet/transaction.rb +2 -2
  56. data/lib/puppet/transaction/persistence.rb +1 -1
  57. data/lib/puppet/transaction/report.rb +1 -1
  58. data/lib/puppet/trusted_external.rb +2 -2
  59. data/lib/puppet/type.rb +4 -3
  60. data/lib/puppet/type/file.rb +2 -2
  61. data/lib/puppet/type/file/source.rb +27 -7
  62. data/lib/puppet/type/notify.rb +2 -2
  63. data/lib/puppet/type/service.rb +4 -0
  64. data/lib/puppet/type/user.rb +18 -3
  65. data/lib/puppet/util.rb +26 -12
  66. data/lib/puppet/util/autoload.rb +9 -7
  67. data/lib/puppet/util/character_encoding.rb +9 -5
  68. data/lib/puppet/util/execution.rb +2 -2
  69. data/lib/puppet/util/windows.rb +1 -0
  70. data/lib/puppet/util/windows/api_types.rb +15 -1
  71. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  72. data/lib/puppet/util/windows/security.rb +4 -4
  73. data/lib/puppet/util/windows/user.rb +219 -0
  74. data/lib/puppet/version.rb +1 -1
  75. data/locales/puppet.pot +78 -69
  76. data/man/man5/puppet.conf.5 +22 -3
  77. data/man/man8/puppet-agent.8 +1 -1
  78. data/man/man8/puppet-apply.8 +1 -1
  79. data/man/man8/puppet-catalog.8 +1 -1
  80. data/man/man8/puppet-config.8 +1 -1
  81. data/man/man8/puppet-describe.8 +1 -1
  82. data/man/man8/puppet-device.8 +1 -1
  83. data/man/man8/puppet-doc.8 +1 -1
  84. data/man/man8/puppet-epp.8 +1 -1
  85. data/man/man8/puppet-facts.8 +1 -1
  86. data/man/man8/puppet-filebucket.8 +1 -1
  87. data/man/man8/puppet-generate.8 +1 -1
  88. data/man/man8/puppet-help.8 +1 -1
  89. data/man/man8/puppet-key.8 +1 -1
  90. data/man/man8/puppet-lookup.8 +2 -2
  91. data/man/man8/puppet-man.8 +1 -1
  92. data/man/man8/puppet-module.8 +1 -1
  93. data/man/man8/puppet-node.8 +1 -1
  94. data/man/man8/puppet-parser.8 +1 -1
  95. data/man/man8/puppet-plugin.8 +1 -1
  96. data/man/man8/puppet-report.8 +1 -1
  97. data/man/man8/puppet-resource.8 +1 -1
  98. data/man/man8/puppet-script.8 +1 -1
  99. data/man/man8/puppet-ssl.8 +1 -1
  100. data/man/man8/puppet-status.8 +1 -1
  101. data/man/man8/puppet.8 +2 -2
  102. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  103. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  104. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  105. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  106. data/spec/integration/application/agent_spec.rb +29 -37
  107. data/spec/integration/application/apply_spec.rb +149 -149
  108. data/spec/integration/application/config_spec.rb +74 -0
  109. data/spec/integration/application/doc_spec.rb +16 -6
  110. data/spec/integration/application/filebucket_spec.rb +65 -16
  111. data/spec/integration/application/help_spec.rb +42 -0
  112. data/spec/integration/application/lookup_spec.rb +13 -0
  113. data/spec/integration/application/module_spec.rb +68 -0
  114. data/spec/integration/application/plugin_spec.rb +50 -0
  115. data/spec/integration/data_binding_spec.rb +82 -0
  116. data/spec/integration/directory_environments_spec.rb +17 -17
  117. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  118. data/spec/integration/node/environment_spec.rb +1 -1
  119. data/spec/integration/util/execution_spec.rb +22 -0
  120. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  121. data/spec/integration/util/windows/process_spec.rb +26 -32
  122. data/spec/integration/util/windows/user_spec.rb +7 -0
  123. data/spec/integration/util_spec.rb +7 -33
  124. data/spec/lib/puppet_spec/matchers.rb +0 -80
  125. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  126. data/spec/unit/application/agent_spec.rb +3 -4
  127. data/spec/unit/application/face_base_spec.rb +6 -4
  128. data/spec/unit/application/facts_spec.rb +39 -10
  129. data/spec/unit/application/man_spec.rb +52 -0
  130. data/spec/unit/application/resource_spec.rb +3 -1
  131. data/spec/unit/application/ssl_spec.rb +15 -2
  132. data/spec/unit/configurer/downloader_spec.rb +10 -0
  133. data/spec/unit/configurer_spec.rb +47 -31
  134. data/spec/unit/confine_spec.rb +2 -1
  135. data/spec/unit/face/config_spec.rb +3 -1
  136. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  137. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  138. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  139. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  140. data/spec/unit/http/client_spec.rb +0 -1
  141. data/spec/unit/http/resolver_spec.rb +0 -1
  142. data/spec/unit/http/service/ca_spec.rb +0 -1
  143. data/spec/unit/http/service/compiler_spec.rb +0 -1
  144. data/spec/unit/http/service/file_server_spec.rb +0 -1
  145. data/spec/unit/http/service/report_spec.rb +0 -1
  146. data/spec/unit/http/service_spec.rb +0 -1
  147. data/spec/unit/http/session_spec.rb +0 -1
  148. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  149. data/spec/unit/network/format_support_spec.rb +3 -2
  150. data/spec/unit/node/environment_spec.rb +18 -1
  151. data/spec/unit/pops/loaders/loaders_spec.rb +70 -0
  152. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  153. data/spec/unit/provider/package/apt_spec.rb +77 -0
  154. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  155. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  156. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  157. data/spec/unit/provider/service/init_spec.rb +41 -0
  158. data/spec/unit/provider/service/systemd_spec.rb +1 -6
  159. data/spec/unit/provider/service/windows_spec.rb +28 -0
  160. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  161. data/spec/unit/puppet_pal_2pec.rb +40 -0
  162. data/spec/unit/reports/store_spec.rb +17 -13
  163. data/spec/unit/transaction/persistence_spec.rb +15 -0
  164. data/spec/unit/type/service_spec.rb +35 -2
  165. data/spec/unit/type/user_spec.rb +31 -2
  166. data/spec/unit/util/character_encoding_spec.rb +4 -4
  167. data/spec/unit/util/command_line_spec.rb +11 -6
  168. metadata +21 -44
  169. data/spec/integration/faces/config_spec.rb +0 -91
  170. data/spec/integration/faces/documentation_spec.rb +0 -57
  171. data/spec/integration/file_bucket/file_spec.rb +0 -50
  172. data/spec/integration/file_serving/content_spec.rb +0 -7
  173. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  174. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  175. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  176. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  177. data/spec/integration/module_tool/forge_spec.rb +0 -51
  178. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  179. data/spec/integration/provider/service/init_spec.rb +0 -48
  180. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  181. data/spec/integration/provider/service/windows_spec.rb +0 -50
  182. data/spec/integration/reference/providers_spec.rb +0 -21
  183. data/spec/integration/reports_spec.rb +0 -13
  184. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  185. data/spec/integration/ssl/host_spec.rb +0 -72
  186. data/spec/integration/ssl/key_spec.rb +0 -99
  187. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  188. data/spec/unit/face/man_spec.rb +0 -25
  189. 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) do
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 do
21
- expect { puppet.run }.to exit_with(0)
22
- end.to have_printed('/direnv/modules')
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 do
29
- expect { puppet.run }.to exit_with(0)
30
- end.to have_printed('/completely/different')
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 do
45
- expect { puppet.run }.to exit_with(0)
46
- end.to have_printed(expanded)
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 do
63
- expect { puppet.run }.to exit_with(0)
64
- end.to have_printed('otherdirenv/modules')
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 do
47
- expect { apply.run }.to exit_with(0)
48
- end.to have_printed(Puppet.version)
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 do
62
- expect { apply.run }.to exit_with(0)
63
- end.to have_printed('bar')
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
- expect(Puppet::Util::Windows::Process).to receive(:GetEnvironmentStringsW).and_return(ptr)
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
- expect(Puppet::Util::Windows::Process).to receive(:FreeEnvironmentStringsW)
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(arraydest.last.level).to eq(:warning)
76
- expect(arraydest.last.message).to eq("Discarding environment variable e=\uFFFD which contains invalid bytes")
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
- it "can properly handle env var values with = in them" do
82
- begin
83
- name = SecureRandom.uuid
84
- value = 'foo=bar'
71
+ let(:name) { SecureRandom.uuid }
85
72
 
86
- Puppet::Util::Windows::Process.set_environment_variable(name, value)
87
-
88
- env = Puppet::Util::Windows::Process.get_environment_strings
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 "can properly handle empty env var values" do
97
- begin
98
- name = SecureRandom.uuid
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
- Puppet::Util::Windows::Process.set_environment_variable(name, '')
86
+ expect(env[name]).to eq(value)
87
+ end
101
88
 
102
- env = Puppet::Util::Windows::Process.get_environment_strings
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
- expect(env[name]).to eq('')
105
- ensure
106
- Puppet::Util::Windows::Process.set_environment_variable(name, nil)
107
- end
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
- before :each do
116
- allow(FileTest).to receive(:file?).and_return(false)
117
- allow(FileTest).to receive(:file?).with(filepath).and_return(true)
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
- allow(FileTest).to receive(:executable?).and_return(false)
120
- allow(FileTest).to receive(:executable?).with(filepath).and_return(true)
121
- end
95
+ filepath = File.join(utf8, filename)
96
+ Puppet::FileSystem.touch(filepath)
122
97
 
123
- it "should be able to use UTF8 characters in the path" do
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
- expect {
575
- @puppetd.fingerprint
576
- }.to exit_with(1)
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
- expect { app.run }.to exit_with(0)
427
- }.to have_printed(/3/)
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
- expect { app.run }.to exit_with(0)
435
- }.to have_printed(/you invoked the 's' rendering hook/)
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