puppet 5.5.17-x86-mingw32 → 5.5.22-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 (340) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +4 -5
  4. data/Gemfile.lock +59 -55
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/puppet-test +2 -2
  8. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  9. data/ext/windows/service/daemon.rb +54 -8
  10. data/install.rb +6 -6
  11. data/lib/puppet.rb +5 -2
  12. data/lib/puppet/agent.rb +5 -13
  13. data/lib/puppet/application.rb +1 -1
  14. data/lib/puppet/application/agent.rb +3 -1
  15. data/lib/puppet/application/apply.rb +2 -2
  16. data/lib/puppet/application/describe.rb +3 -9
  17. data/lib/puppet/application/doc.rb +1 -1
  18. data/lib/puppet/application/filebucket.rb +13 -0
  19. data/lib/puppet/application/lookup.rb +1 -1
  20. data/lib/puppet/application/script.rb +2 -2
  21. data/lib/puppet/configurer.rb +106 -31
  22. data/lib/puppet/configurer/downloader.rb +33 -16
  23. data/lib/puppet/daemon.rb +1 -1
  24. data/lib/puppet/defaults.rb +86 -40
  25. data/lib/puppet/error.rb +9 -1
  26. data/lib/puppet/external/nagios/base.rb +1 -1
  27. data/lib/puppet/face/ca.rb +1 -1
  28. data/lib/puppet/face/module/list.rb +5 -5
  29. data/lib/puppet/face/module/search.rb +1 -1
  30. data/lib/puppet/face/module/uninstall.rb +1 -1
  31. data/lib/puppet/face/module/upgrade.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  33. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  34. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  35. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  36. data/lib/puppet/file_system.rb +0 -8
  37. data/lib/puppet/file_system/memory_file.rb +1 -1
  38. data/lib/puppet/file_system/posix.rb +3 -2
  39. data/lib/puppet/file_system/uniquefile.rb +4 -0
  40. data/lib/puppet/forge.rb +3 -3
  41. data/lib/puppet/functions/epp.rb +4 -4
  42. data/lib/puppet/functions/inline_epp.rb +5 -5
  43. data/lib/puppet/functions/new.rb +8 -3
  44. data/lib/puppet/functions/reduce.rb +2 -4
  45. data/lib/puppet/functions/reverse_each.rb +1 -1
  46. data/lib/puppet/functions/step.rb +1 -1
  47. data/lib/puppet/gettext/module_translations.rb +1 -1
  48. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  49. data/lib/puppet/graph/simple_graph.rb +6 -5
  50. data/lib/puppet/indirector/catalog/compiler.rb +8 -0
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  52. data/lib/puppet/indirector/hiera.rb +6 -0
  53. data/lib/puppet/indirector/resource/ral.rb +1 -3
  54. data/lib/puppet/indirector/resource/validator.rb +1 -1
  55. data/lib/puppet/interface.rb +2 -1
  56. data/lib/puppet/loaders.rb +0 -1
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module.rb +1 -1
  59. data/lib/puppet/module_tool/applications/builder.rb +1 -1
  60. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  61. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  64. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  65. data/lib/puppet/network/http/api/indirected_routes.rb +13 -12
  66. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  67. data/lib/puppet/network/http/connection.rb +14 -12
  68. data/lib/puppet/network/http/pool.rb +7 -1
  69. data/lib/puppet/network/http/rack/rest.rb +2 -2
  70. data/lib/puppet/network/http/site.rb +1 -1
  71. data/lib/puppet/network/resolver.rb +2 -2
  72. data/lib/puppet/node/environment.rb +11 -3
  73. data/lib/puppet/parser/ast.rb +1 -1
  74. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  75. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  76. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  77. data/lib/puppet/parser/environment_compiler.rb +3 -0
  78. data/lib/puppet/parser/functions.rb +14 -10
  79. data/lib/puppet/parser/functions/epp.rb +3 -3
  80. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  81. data/lib/puppet/parser/resource.rb +3 -2
  82. data/lib/puppet/parser/resource/param.rb +6 -0
  83. data/lib/puppet/pops/adaptable.rb +7 -13
  84. data/lib/puppet/pops/adapters.rb +8 -4
  85. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  86. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  87. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  88. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  89. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  90. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  91. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  92. data/lib/puppet/pops/issues.rb +5 -0
  93. data/lib/puppet/pops/loaders.rb +1 -1
  94. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  95. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  96. data/lib/puppet/pops/merge_strategy.rb +22 -18
  97. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  98. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  99. data/lib/puppet/pops/parser/locator.rb +1 -1
  100. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  101. data/lib/puppet/pops/puppet_stack.rb +51 -48
  102. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  103. data/lib/puppet/pops/types/iterable.rb +34 -8
  104. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  105. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  106. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  107. data/lib/puppet/pops/types/string_converter.rb +10 -10
  108. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  109. data/lib/puppet/pops/types/types.rb +3 -3
  110. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  111. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  112. data/lib/puppet/property.rb +1 -1
  113. data/lib/puppet/property/ensure.rb +1 -1
  114. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  115. data/lib/puppet/provider/cron/crontab.rb +1 -1
  116. data/lib/puppet/provider/exec.rb +6 -2
  117. data/lib/puppet/provider/group/groupadd.rb +19 -19
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  120. data/lib/puppet/provider/mount.rb +1 -1
  121. data/lib/puppet/provider/mount/parsed.rb +8 -8
  122. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  123. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  124. data/lib/puppet/provider/package/aix.rb +17 -2
  125. data/lib/puppet/provider/package/apt.rb +14 -3
  126. data/lib/puppet/provider/package/dnfmodule.rb +141 -0
  127. data/lib/puppet/provider/package/dpkg.rb +16 -18
  128. data/lib/puppet/provider/package/fink.rb +20 -3
  129. data/lib/puppet/provider/package/gem.rb +4 -2
  130. data/lib/puppet/provider/package/openbsd.rb +14 -2
  131. data/lib/puppet/provider/package/pip.rb +37 -10
  132. data/lib/puppet/provider/package/pkg.rb +18 -5
  133. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  134. data/lib/puppet/provider/package/pkgng.rb +16 -4
  135. data/lib/puppet/provider/package/portage.rb +4 -4
  136. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  137. data/lib/puppet/provider/package/rpm.rb +6 -6
  138. data/lib/puppet/provider/package/windows/package.rb +1 -1
  139. data/lib/puppet/provider/package/yum.rb +28 -20
  140. data/lib/puppet/provider/package/zypper.rb +1 -0
  141. data/lib/puppet/provider/package_targetable.rb +5 -4
  142. data/lib/puppet/provider/parsedfile.rb +1 -1
  143. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +3 -3
  144. data/lib/puppet/provider/selmodule/semodule.rb +43 -26
  145. data/lib/puppet/provider/service/daemontools.rb +9 -9
  146. data/lib/puppet/provider/service/openbsd.rb +1 -1
  147. data/lib/puppet/provider/service/rcng.rb +2 -2
  148. data/lib/puppet/provider/service/runit.rb +2 -8
  149. data/lib/puppet/provider/service/systemd.rb +31 -13
  150. data/lib/puppet/provider/user/directoryservice.rb +31 -6
  151. data/lib/puppet/provider/user/hpux.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +39 -20
  154. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  155. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  156. data/lib/puppet/reference/indirection.rb +2 -2
  157. data/lib/puppet/reference/metaparameter.rb +1 -3
  158. data/lib/puppet/reference/providers.rb +1 -1
  159. data/lib/puppet/reference/type.rb +3 -9
  160. data/lib/puppet/reports.rb +1 -1
  161. data/lib/puppet/resource.rb +1 -1
  162. data/lib/puppet/resource/catalog.rb +1 -1
  163. data/lib/puppet/resource/type.rb +10 -1
  164. data/lib/puppet/settings.rb +3 -3
  165. data/lib/puppet/settings/environment_conf.rb +1 -0
  166. data/lib/puppet/ssl/certificate.rb +2 -1
  167. data/lib/puppet/ssl/certificate_authority.rb +6 -5
  168. data/lib/puppet/ssl/certificate_authority/interface.rb +1 -1
  169. data/lib/puppet/ssl/certificate_factory.rb +2 -2
  170. data/lib/puppet/ssl/host.rb +3 -3
  171. data/lib/puppet/ssl/oids.rb +1 -1
  172. data/lib/puppet/test/test_helper.rb +20 -12
  173. data/lib/puppet/transaction/report.rb +1 -1
  174. data/lib/puppet/transaction/resource_harness.rb +1 -1
  175. data/lib/puppet/type.rb +8 -4
  176. data/lib/puppet/type/cron.rb +1 -1
  177. data/lib/puppet/type/exec.rb +7 -3
  178. data/lib/puppet/type/file.rb +14 -2
  179. data/lib/puppet/type/file/data_sync.rb +5 -1
  180. data/lib/puppet/type/group.rb +4 -2
  181. data/lib/puppet/type/interface.rb +1 -1
  182. data/lib/puppet/type/notify.rb +3 -2
  183. data/lib/puppet/type/package.rb +97 -8
  184. data/lib/puppet/type/schedule.rb +1 -1
  185. data/lib/puppet/type/selboolean.rb +17 -3
  186. data/lib/puppet/type/service.rb +2 -8
  187. data/lib/puppet/type/user.rb +5 -9
  188. data/lib/puppet/util.rb +35 -12
  189. data/lib/puppet/util/autoload.rb +9 -7
  190. data/lib/puppet/util/command_line/trollop.rb +1 -1
  191. data/lib/puppet/util/http_proxy.rb +8 -14
  192. data/lib/puppet/util/instance_loader.rb +1 -1
  193. data/lib/puppet/util/log.rb +1 -1
  194. data/lib/puppet/util/log/destinations.rb +3 -12
  195. data/lib/puppet/util/logging.rb +30 -18
  196. data/lib/puppet/util/metric.rb +2 -2
  197. data/lib/puppet/util/monkey_patches.rb +1 -1
  198. data/lib/puppet/util/nagios_maker.rb +2 -2
  199. data/lib/puppet/util/network_device/cisco/device.rb +1 -1
  200. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  201. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  202. data/lib/puppet/util/pidlock.rb +12 -6
  203. data/lib/puppet/util/plist.rb +6 -0
  204. data/lib/puppet/util/provider_features.rb +2 -4
  205. data/lib/puppet/util/rdoc.rb +1 -1
  206. data/lib/puppet/util/reference.rb +1 -1
  207. data/lib/puppet/util/resource_template.rb +1 -1
  208. data/lib/puppet/util/selinux.rb +3 -1
  209. data/lib/puppet/util/windows/adsi.rb +60 -30
  210. data/lib/puppet/util/windows/api_types.rb +45 -32
  211. data/lib/puppet/util/windows/eventlog.rb +1 -6
  212. data/lib/puppet/util/windows/principal.rb +8 -6
  213. data/lib/puppet/util/windows/process.rb +16 -15
  214. data/lib/puppet/util/windows/registry.rb +17 -15
  215. data/lib/puppet/util/windows/security.rb +1 -0
  216. data/lib/puppet/util/windows/sid.rb +3 -3
  217. data/lib/puppet/vendor.rb +1 -1
  218. data/lib/puppet/version.rb +1 -1
  219. data/lib/puppet_pal.rb +2 -2
  220. data/locales/puppet.pot +362 -318
  221. data/man/man5/puppet.conf.5 +39 -9
  222. data/man/man8/puppet-agent.8 +2 -2
  223. data/man/man8/puppet-apply.8 +1 -1
  224. data/man/man8/puppet-ca.8 +1 -1
  225. data/man/man8/puppet-catalog.8 +1 -1
  226. data/man/man8/puppet-cert.8 +1 -1
  227. data/man/man8/puppet-certificate.8 +1 -1
  228. data/man/man8/puppet-certificate_request.8 +1 -1
  229. data/man/man8/puppet-certificate_revocation_list.8 +1 -1
  230. data/man/man8/puppet-config.8 +1 -1
  231. data/man/man8/puppet-describe.8 +1 -1
  232. data/man/man8/puppet-device.8 +1 -1
  233. data/man/man8/puppet-doc.8 +1 -1
  234. data/man/man8/puppet-epp.8 +1 -1
  235. data/man/man8/puppet-facts.8 +1 -1
  236. data/man/man8/puppet-filebucket.8 +16 -1
  237. data/man/man8/puppet-generate.8 +1 -1
  238. data/man/man8/puppet-help.8 +1 -1
  239. data/man/man8/puppet-key.8 +1 -1
  240. data/man/man8/puppet-lookup.8 +1 -1
  241. data/man/man8/puppet-man.8 +1 -1
  242. data/man/man8/puppet-master.8 +1 -1
  243. data/man/man8/puppet-module.8 +1 -1
  244. data/man/man8/puppet-node.8 +1 -1
  245. data/man/man8/puppet-parser.8 +1 -1
  246. data/man/man8/puppet-plugin.8 +1 -1
  247. data/man/man8/puppet-report.8 +1 -1
  248. data/man/man8/puppet-resource.8 +1 -1
  249. data/man/man8/puppet-script.8 +1 -1
  250. data/man/man8/puppet-status.8 +1 -1
  251. data/man/man8/puppet.8 +2 -2
  252. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +1 -0
  253. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list.txt +19 -0
  254. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  255. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  256. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  257. data/spec/integration/configurer_spec.rb +66 -0
  258. data/spec/integration/data_binding_spec.rb +1 -0
  259. data/spec/integration/defaults_spec.rb +1 -2
  260. data/spec/integration/faces/plugin_spec.rb +29 -47
  261. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  262. data/spec/integration/parser/compiler_spec.rb +11 -0
  263. data/spec/integration/type/notify_spec.rb +46 -0
  264. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  265. data/spec/integration/util/windows/registry_spec.rb +7 -7
  266. data/spec/shared_contexts/types_setup.rb +2 -0
  267. data/spec/unit/agent_spec.rb +34 -26
  268. data/spec/unit/application/apply_spec.rb +2 -12
  269. data/spec/unit/configurer/downloader_spec.rb +10 -0
  270. data/spec/unit/configurer/fact_handler_spec.rb +0 -4
  271. data/spec/unit/configurer_spec.rb +430 -415
  272. data/spec/unit/daemon_spec.rb +0 -1
  273. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  274. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  275. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  276. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  277. data/spec/unit/forge/forge_spec.rb +1 -3
  278. data/spec/unit/forge/repository_spec.rb +1 -3
  279. data/spec/unit/indirector/catalog/compiler_spec.rb +45 -26
  280. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  281. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  282. data/spec/unit/network/http/connection_spec.rb +43 -1
  283. data/spec/unit/network/http/pool_spec.rb +32 -0
  284. data/spec/unit/node_spec.rb +7 -4
  285. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  286. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  287. data/spec/unit/provider/exec_spec.rb +209 -0
  288. data/spec/unit/provider/group/groupadd_spec.rb +30 -1
  289. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  290. data/spec/unit/provider/package/aix_spec.rb +29 -0
  291. data/spec/unit/provider/package/apt_spec.rb +13 -2
  292. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  293. data/spec/unit/provider/package/dnfmodule_spec.rb +247 -0
  294. data/spec/unit/provider/package/dpkg_spec.rb +35 -7
  295. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  296. data/spec/unit/provider/package/pip_spec.rb +93 -22
  297. data/spec/unit/provider/package/pkg_spec.rb +13 -1
  298. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  299. data/spec/unit/provider/package/pkgng_spec.rb +36 -0
  300. data/spec/unit/provider/package/portage_spec.rb +4 -4
  301. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  302. data/spec/unit/provider/package/yum_spec.rb +90 -0
  303. data/spec/unit/provider/package/zypper_spec.rb +13 -0
  304. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  305. data/spec/unit/provider/selmodule_spec.rb +118 -47
  306. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  307. data/spec/unit/provider/service/runit_spec.rb +24 -0
  308. data/spec/unit/provider/service/systemd_spec.rb +109 -36
  309. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  310. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  311. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  312. data/spec/unit/provider/user/useradd_spec.rb +81 -16
  313. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  314. data/spec/unit/puppet_pal_2pec.rb +3 -0
  315. data/spec/unit/ssl/certificate_authority_spec.rb +2 -3
  316. data/spec/unit/ssl/certificate_spec.rb +7 -0
  317. data/spec/unit/ssl/host_spec.rb +2 -0
  318. data/spec/unit/test/test_helper_spec.rb +17 -0
  319. data/spec/unit/type/exec_spec.rb +6 -12
  320. data/spec/unit/type/file/content_spec.rb +9 -3
  321. data/spec/unit/type/file_spec.rb +9 -4
  322. data/spec/unit/type/package_spec.rb +8 -0
  323. data/spec/unit/type/selboolean_spec.rb +4 -6
  324. data/spec/unit/type/service_spec.rb +9 -8
  325. data/spec/unit/type/user_spec.rb +19 -13
  326. data/spec/unit/util/execution_spec.rb +16 -0
  327. data/spec/unit/util/http_proxy_spec.rb +97 -0
  328. data/spec/unit/util/log/destinations_spec.rb +2 -26
  329. data/spec/unit/util/log_spec.rb +0 -138
  330. data/spec/unit/util/logging_spec.rb +200 -0
  331. data/spec/unit/util/pidlock_spec.rb +67 -40
  332. data/spec/unit/util/plist_spec.rb +20 -0
  333. data/spec/unit/util/windows/adsi_spec.rb +55 -4
  334. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  335. data/spec/unit/util/windows/sid_spec.rb +2 -2
  336. data/tasks/manpages.rake +1 -0
  337. metadata +16 -7
  338. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  339. data/locales/ja/puppet.po +0 -12114
  340. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Puppet::Type.type(:user) do
@@ -484,22 +484,20 @@ describe Puppet::Type.type(:user) do
484
484
  end
485
485
 
486
486
  context "with no home directory specified" do
487
- it "should not accept true" do
488
- expect {
489
- described_class.new(:name => "a", :purge_ssh_keys => true)
490
- }.to raise_error(Puppet::Error, /purge_ssh_keys can only be true for users with a defined home directory/)
487
+ before(:each) do
488
+ allow(Dir).to receive(:home).with('a').and_return('/home/a')
491
489
  end
492
490
 
493
- it "should not accept the ~ wildcard" do
494
- expect {
495
- described_class.new(:name => "a", :purge_ssh_keys => "~/keys")
496
- }.to raise_error(Puppet::Error, /meta character ~ or %h only allowed for users with a defined home directory/)
491
+ it "should accept true" do
492
+ described_class.new(:name => "a", :purge_ssh_keys => true)
497
493
  end
498
494
 
499
- it "should not accept the %h wildcard" do
500
- expect {
501
- described_class.new(:name => "a", :purge_ssh_keys => "%h/keys")
502
- }.to raise_error(Puppet::Error, /meta character ~ or %h only allowed for users with a defined home directory/)
495
+ it "should accept the ~ wildcard" do
496
+ described_class.new(:name => "a", :purge_ssh_keys => "~/keys")
497
+ end
498
+
499
+ it "should accept the %h wildcard" do
500
+ described_class.new(:name => "a", :purge_ssh_keys => "%h/keys")
503
501
  end
504
502
  end
505
503
 
@@ -508,6 +506,10 @@ describe Puppet::Type.type(:user) do
508
506
  [ "/dev/null", "/tmp/keyfile" ].map { |path| File.expand_path(path) }
509
507
  end
510
508
 
509
+ before(:each) do
510
+ allow(Dir).to receive(:home).with('test').and_return('/home/test')
511
+ end
512
+
511
513
  subject do
512
514
  res = described_class.new(:name => "test", :purge_ssh_keys => paths)
513
515
  res.catalog = Puppet::Resource::Catalog.new
@@ -534,6 +536,10 @@ describe Puppet::Type.type(:user) do
534
536
  res
535
537
  end
536
538
 
539
+ before(:each) do
540
+ allow(Dir).to receive(:home).with('test_user_name').and_return('/home/test_user_name')
541
+ end
542
+
537
543
  context "when purging is disabled" do
538
544
  let(:purge_param) { false }
539
545
 
@@ -128,6 +128,13 @@ describe Puppet::Util::Execution 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 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)
@@ -44,37 +44,13 @@ describe Puppet::Util::Log.desttypes[:file] do
44
44
  end
45
45
  end
46
46
 
47
- describe "on POSIX systems", :if => Puppet.features.posix? do
47
+ describe "on POSIX systems", :unless => Puppet::Util::Platform.windows? 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
- it "logs an error if it can't chown the file owner & group" do
55
- expect(File).to receive(:exists?).with(abspath).and_return(false)
56
- expect(FileUtils).to receive(:chown).with(Puppet[:user], Puppet[:group], abspath).and_raise(Errno::EPERM)
57
- expect(Puppet.features).to receive(:root?).and_return(true)
58
- expect(Puppet).to receive(:err).with("Unable to set ownership to #{Puppet[:user]}:#{Puppet[:group]} for log file: #{abspath}")
59
-
60
- @class.new(abspath)
61
- end
62
-
63
- it "doesn't attempt to chown when running as non-root" do
64
- expect(File).to receive(:exists?).with(abspath).and_return(false)
65
- expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
66
- expect(Puppet.features).to receive(:root?).and_return(false)
67
-
68
- @class.new(abspath)
69
- end
70
-
71
- it "doesn't attempt to chown when file already exists" do
72
- expect(File).to receive(:exists?).with(abspath).and_return(true)
73
- expect(FileUtils).not_to receive(:chown).with(Puppet[:user], Puppet[:group], abspath)
74
- expect(Puppet.features).to receive(:root?).and_return(true)
75
-
76
- @class.new(abspath)
77
- end
78
54
  end
79
55
 
80
56
  describe "with a JSON file" do
@@ -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
@@ -6,6 +6,39 @@ class LoggingTester
6
6
  include Puppet::Util::Logging
7
7
  end
8
8
 
9
+ class PuppetStackCreator
10
+ def raise_error(exception_class)
11
+ case exception_class
12
+ when Puppet::ParseErrorWithIssue
13
+ raise exception_class.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
14
+ when Puppet::ParseError
15
+ raise exception_class.new('Oops', '/tmp/test.pp', 30, 15)
16
+ else
17
+ raise exception_class.new('Oops')
18
+ end
19
+ end
20
+
21
+ def call_raiser(exception_class)
22
+ Puppet::Pops::PuppetStack.stack('/tmp/test2.pp', 20, self, :raise_error, [exception_class])
23
+ end
24
+
25
+ def two_frames_and_a_raise(exception_class)
26
+ Puppet::Pops::PuppetStack.stack('/tmp/test3.pp', 15, self, :call_raiser, [exception_class])
27
+ end
28
+
29
+ def outer_rescue(exception_class)
30
+ begin
31
+ two_frames_and_a_raise(exception_class)
32
+ rescue Puppet::Error => e
33
+ Puppet.log_exception(e)
34
+ end
35
+ end
36
+
37
+ def run(exception_class)
38
+ Puppet::Pops::PuppetStack.stack('/tmp/test4.pp', 10, self, :outer_rescue, [exception_class])
39
+ end
40
+ end
41
+
9
42
  describe Puppet::Util::Logging do
10
43
  before do
11
44
  @logger = LoggingTester.new
@@ -275,6 +308,173 @@ original
275
308
  .*2\.rb:2:in `b'
276
309
  .*3\.rb:1/)
277
310
  end
311
+
312
+ describe "when trace is disabled" do
313
+ it 'excludes backtrace for RuntimeError in log message' do
314
+ begin
315
+ raise RuntimeError, 'Oops'
316
+ rescue RuntimeError => e
317
+ Puppet.log_exception(e)
318
+ end
319
+
320
+ expect(@logs.size).to eq(1)
321
+ log = @logs[0]
322
+ expect(log.message).to_not match('/logging_spec.rb')
323
+ expect(log.backtrace).to be_nil
324
+ end
325
+
326
+ it "backtrace member is unset when logging ParseErrorWithIssue" do
327
+ begin
328
+ raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
329
+ rescue RuntimeError => e
330
+ Puppet.log_exception(e)
331
+ end
332
+
333
+ expect(@logs.size).to eq(1)
334
+ log = @logs[0]
335
+ expect(log.message).to_not match('/logging_spec.rb')
336
+ expect(log.backtrace).to be_nil
337
+ end
338
+ end
339
+
340
+ describe "when trace is enabled" do
341
+ it 'includes backtrace for RuntimeError in log message when enabled globally' do
342
+ Puppet[:trace] = true
343
+ begin
344
+ raise RuntimeError, 'Oops'
345
+ rescue RuntimeError => e
346
+ Puppet.log_exception(e, :default)
347
+ end
348
+ Puppet[:trace] = false
349
+
350
+ expect(@logs.size).to eq(1)
351
+ log = @logs[0]
352
+ expect(log.message).to match('/logging_spec.rb')
353
+ expect(log.backtrace).to be_nil
354
+ end
355
+
356
+ it 'includes backtrace for RuntimeError in log message when enabled via option' do
357
+ begin
358
+ raise RuntimeError, 'Oops'
359
+ rescue RuntimeError => e
360
+ Puppet.log_exception(e, :default, :trace => true)
361
+ end
362
+
363
+ expect(@logs.size).to eq(1)
364
+ log = @logs[0]
365
+ expect(log.message).to match('/logging_spec.rb')
366
+ expect(log.backtrace).to be_nil
367
+ end
368
+
369
+
370
+ it "backtrace member is set when logging ParseErrorWithIssue" do
371
+ begin
372
+ raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
373
+ rescue RuntimeError => e
374
+ Puppet.log_exception(e, :default, :trace => true)
375
+ end
376
+
377
+ expect(@logs.size).to eq(1)
378
+ log = @logs[0]
379
+ expect(log.message).to_not match('/logging_spec.rb')
380
+ expect(log.backtrace).to be_a(Array)
381
+ expect(log.backtrace[0]).to match('/logging_spec.rb')
382
+ end
383
+ it "backtrace has interleaved PuppetStack when logging ParseErrorWithIssue" do
384
+ Puppet[:trace] = true
385
+ PuppetStackCreator.new.run(Puppet::ParseErrorWithIssue)
386
+ Puppet[:trace] = false
387
+
388
+ expect(@logs.size).to eq(1)
389
+ log = @logs[0]
390
+ expect(log.message).to_not match('/logging_spec.rb')
391
+ expect(log.backtrace[0]).to match('/logging_spec.rb')
392
+
393
+ expect(log.backtrace[1]).to match('/tmp/test2.pp:20')
394
+ puppetstack = log.backtrace.select { |l| l =~ /tmp\/test\d\.pp/ }
395
+
396
+ expect(puppetstack.length).to equal 3
397
+ end
398
+
399
+ it "message has interleaved PuppetStack when logging ParseError" do
400
+ Puppet[:trace] = true
401
+ PuppetStackCreator.new.run(Puppet::ParseError)
402
+ Puppet[:trace] = false
403
+
404
+ expect(@logs.size).to eq(1)
405
+ log = @logs[0]
406
+
407
+ log_lines = log.message.split("\n")
408
+ expect(log_lines[1]).to match('/logging_spec.rb')
409
+ expect(log_lines[2]).to match('/tmp/test2.pp:20')
410
+ puppetstack = log_lines.select { |l| l =~ /tmp\/test\d\.pp/ }
411
+
412
+ expect(puppetstack.length).to equal 3
413
+ end
414
+ end
415
+
416
+ describe "when trace is disabled but puppet_trace is enabled" do
417
+ it "includes only PuppetStack as backtrace member with ParseErrorWithIssue" do
418
+ Puppet[:trace] = false
419
+ Puppet[:puppet_trace] = true
420
+ PuppetStackCreator.new.run(Puppet::ParseErrorWithIssue)
421
+ Puppet[:trace] = false
422
+ Puppet[:puppet_trace] = false
423
+
424
+ expect(@logs.size).to eq(1)
425
+ log = @logs[0]
426
+
427
+ expect(log.backtrace[0]).to match('/tmp/test2.pp:20')
428
+ expect(log.backtrace.length).to equal 3
429
+ end
430
+
431
+ it "includes only PuppetStack in message with ParseError" do
432
+ Puppet[:trace] = false
433
+ Puppet[:puppet_trace] = true
434
+ PuppetStackCreator.new.run(Puppet::ParseError)
435
+ Puppet[:trace] = false
436
+ Puppet[:puppet_trace] = false
437
+
438
+ expect(@logs.size).to eq(1)
439
+ log = @logs[0]
440
+
441
+ log_lines = log.message.split("\n")
442
+ expect(log_lines[1]).to match('/tmp/test2.pp:20')
443
+ puppetstack = log_lines.select { |l| l =~ /tmp\/test\d\.pp/ }
444
+
445
+ expect(puppetstack.length).to equal 3
446
+ end
447
+ end
448
+
449
+ it 'includes position details for ParseError in log message' do
450
+ begin
451
+ raise Puppet::ParseError.new('Oops', '/tmp/test.pp', 30, 15)
452
+ rescue RuntimeError => e
453
+ Puppet.log_exception(e)
454
+ end
455
+
456
+ expect(@logs.size).to eq(1)
457
+ log = @logs[0]
458
+ expect(log.message).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
459
+ expect(log.message).to be(log.to_s)
460
+ end
461
+
462
+ it 'excludes position details for ParseErrorWithIssue from log message' do
463
+ begin
464
+ raise Puppet::ParseErrorWithIssue.new('Oops', '/tmp/test.pp', 30, 15, nil, :SYNTAX_ERROR)
465
+ rescue RuntimeError => e
466
+ Puppet.log_exception(e)
467
+ end
468
+
469
+ expect(@logs.size).to eq(1)
470
+ log = @logs[0]
471
+ expect(log.message).to_not match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
472
+ expect(log.to_s).to match(/ \(file: \/tmp\/test\.pp, line: 30, column: 15\)/)
473
+ expect(log.issue_code).to eq(:SYNTAX_ERROR)
474
+ expect(log.file).to eq('/tmp/test.pp')
475
+ expect(log.line).to eq(30)
476
+ expect(log.pos).to eq(15)
477
+ end
278
478
  end
279
479
 
280
480
  describe 'when Facter' do