puppet 6.15.0-x86-mingw32 → 6.19.1-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 (418) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +29 -27
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet.rb +32 -8
  8. data/lib/puppet/agent.rb +18 -4
  9. data/lib/puppet/agent/locker.rb +0 -7
  10. data/lib/puppet/application/agent.rb +23 -8
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/device.rb +1 -1
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/lookup.rb +16 -4
  15. data/lib/puppet/application/plugin.rb +1 -0
  16. data/lib/puppet/application/ssl.rb +1 -1
  17. data/lib/puppet/configurer.rb +61 -21
  18. data/lib/puppet/configurer/downloader.rb +31 -10
  19. data/lib/puppet/confine.rb +2 -2
  20. data/lib/puppet/confine/any.rb +1 -1
  21. data/lib/puppet/context/trusted_information.rb +14 -8
  22. data/lib/puppet/daemon.rb +13 -27
  23. data/lib/puppet/defaults.rb +119 -39
  24. data/lib/puppet/environments.rb +51 -10
  25. data/lib/puppet/face/catalog.rb +1 -1
  26. data/lib/puppet/face/config.rb +46 -16
  27. data/lib/puppet/face/facts.rb +1 -1
  28. data/lib/puppet/face/help.rb +29 -3
  29. data/lib/puppet/face/module/search.rb +5 -0
  30. data/lib/puppet/face/node.rb +3 -3
  31. data/lib/puppet/face/node/clean.rb +2 -2
  32. data/lib/puppet/face/plugin.rb +1 -1
  33. data/lib/puppet/face/status.rb +1 -1
  34. data/lib/puppet/feature/base.rb +1 -1
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +12 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +4 -7
  47. data/lib/puppet/functions/filter.rb +1 -0
  48. data/lib/puppet/functions/lstrip.rb +4 -4
  49. data/lib/puppet/functions/new.rb +8 -3
  50. data/lib/puppet/functions/reverse_each.rb +1 -1
  51. data/lib/puppet/functions/rstrip.rb +4 -4
  52. data/lib/puppet/functions/step.rb +1 -1
  53. data/lib/puppet/functions/strip.rb +4 -4
  54. data/lib/puppet/gettext/config.rb +5 -5
  55. data/lib/puppet/gettext/module_translations.rb +4 -4
  56. data/lib/puppet/http.rb +1 -0
  57. data/lib/puppet/http/client.rb +28 -12
  58. data/lib/puppet/http/external_client.rb +0 -6
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/facts/facter.rb +3 -3
  74. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  75. data/lib/puppet/indirector/file_content/http.rb +5 -0
  76. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  77. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  78. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  79. data/lib/puppet/indirector/hiera.rb +4 -0
  80. data/lib/puppet/indirector/indirection.rb +1 -1
  81. data/lib/puppet/indirector/json.rb +1 -1
  82. data/lib/puppet/indirector/msgpack.rb +1 -1
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/request.rb +5 -5
  85. data/lib/puppet/indirector/rest.rb +7 -1
  86. data/lib/puppet/indirector/yaml.rb +1 -1
  87. data/lib/puppet/module.rb +1 -2
  88. data/lib/puppet/network/format_support.rb +2 -2
  89. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  90. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  91. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  92. data/lib/puppet/network/http/compression.rb +7 -0
  93. data/lib/puppet/network/http/connection.rb +2 -0
  94. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  95. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  96. data/lib/puppet/network/http/route.rb +2 -2
  97. data/lib/puppet/network/http_pool.rb +2 -2
  98. data/lib/puppet/node/environment.rb +12 -5
  99. data/lib/puppet/node/facts.rb +17 -0
  100. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  101. data/lib/puppet/pal/pal_impl.rb +31 -4
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +5 -5
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +29 -26
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/functions/filter.rb +1 -0
  112. data/lib/puppet/parser/resource.rb +3 -2
  113. data/lib/puppet/parser/resource/param.rb +6 -0
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  119. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  120. data/lib/puppet/pops/issues.rb +5 -0
  121. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  122. data/lib/puppet/pops/loaders.rb +18 -11
  123. data/lib/puppet/pops/lookup/context.rb +1 -1
  124. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  125. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  126. data/lib/puppet/pops/types/iterable.rb +34 -8
  127. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  128. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  129. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  130. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  131. data/lib/puppet/provider/file/windows.rb +1 -1
  132. data/lib/puppet/provider/package/aix.rb +17 -2
  133. data/lib/puppet/provider/package/apt.rb +38 -1
  134. data/lib/puppet/provider/package/aptitude.rb +1 -1
  135. data/lib/puppet/provider/package/dnfmodule.rb +24 -4
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip.rb +60 -37
  139. data/lib/puppet/provider/package/pip2.rb +17 -0
  140. data/lib/puppet/provider/package/portage.rb +2 -2
  141. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  142. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  143. data/lib/puppet/provider/package/yum.rb +9 -1
  144. data/lib/puppet/provider/package/zypper.rb +62 -1
  145. data/lib/puppet/provider/service/systemd.rb +21 -4
  146. data/lib/puppet/provider/service/windows.rb +23 -7
  147. data/lib/puppet/provider/user/aix.rb +1 -1
  148. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  149. data/lib/puppet/provider/user/useradd.rb +16 -5
  150. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  151. data/lib/puppet/reports/http.rb +7 -3
  152. data/lib/puppet/resource.rb +2 -1
  153. data/lib/puppet/resource/type.rb +10 -1
  154. data/lib/puppet/rest/route.rb +2 -2
  155. data/lib/puppet/runtime.rb +25 -2
  156. data/lib/puppet/settings.rb +43 -6
  157. data/lib/puppet/ssl/ssl_context.rb +2 -2
  158. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  159. data/lib/puppet/ssl/state_machine.rb +33 -8
  160. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  161. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  162. data/lib/puppet/test/test_helper.rb +19 -14
  163. data/lib/puppet/transaction.rb +2 -2
  164. data/lib/puppet/transaction/persistence.rb +1 -1
  165. data/lib/puppet/transaction/report.rb +12 -8
  166. data/lib/puppet/trusted_external.rb +29 -1
  167. data/lib/puppet/type.rb +15 -7
  168. data/lib/puppet/type/file.rb +40 -15
  169. data/lib/puppet/type/file/checksum.rb +4 -4
  170. data/lib/puppet/type/file/source.rb +33 -13
  171. data/lib/puppet/type/filebucket.rb +1 -1
  172. data/lib/puppet/type/notify.rb +2 -2
  173. data/lib/puppet/type/package.rb +16 -1
  174. data/lib/puppet/type/service.rb +59 -8
  175. data/lib/puppet/type/user.rb +19 -10
  176. data/lib/puppet/util.rb +41 -3
  177. data/lib/puppet/util/autoload.rb +10 -25
  178. data/lib/puppet/util/character_encoding.rb +9 -5
  179. data/lib/puppet/util/checksums.rb +19 -4
  180. data/lib/puppet/util/connection.rb +8 -8
  181. data/lib/puppet/util/execution.rb +2 -2
  182. data/lib/puppet/util/fileparsing.rb +2 -2
  183. data/lib/puppet/util/log/destinations.rb +1 -10
  184. data/lib/puppet/util/package/version/range.rb +4 -1
  185. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  186. data/lib/puppet/util/provider_features.rb +1 -1
  187. data/lib/puppet/util/reference.rb +1 -1
  188. data/lib/puppet/util/run_mode.rb +5 -1
  189. data/lib/puppet/util/windows.rb +1 -0
  190. data/lib/puppet/util/windows/api_types.rb +60 -33
  191. data/lib/puppet/util/windows/eventlog.rb +1 -6
  192. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  193. data/lib/puppet/util/windows/principal.rb +8 -6
  194. data/lib/puppet/util/windows/registry.rb +11 -11
  195. data/lib/puppet/util/windows/security.rb +4 -4
  196. data/lib/puppet/util/windows/service.rb +43 -26
  197. data/lib/puppet/util/windows/user.rb +242 -8
  198. data/lib/puppet/version.rb +1 -1
  199. data/locales/puppet.pot +541 -427
  200. data/man/man5/puppet.conf.5 +84 -19
  201. data/man/man8/puppet-agent.8 +7 -4
  202. data/man/man8/puppet-apply.8 +1 -1
  203. data/man/man8/puppet-catalog.8 +1 -1
  204. data/man/man8/puppet-config.8 +6 -6
  205. data/man/man8/puppet-describe.8 +1 -1
  206. data/man/man8/puppet-device.8 +1 -1
  207. data/man/man8/puppet-doc.8 +1 -1
  208. data/man/man8/puppet-epp.8 +1 -1
  209. data/man/man8/puppet-facts.8 +1 -1
  210. data/man/man8/puppet-filebucket.8 +1 -1
  211. data/man/man8/puppet-generate.8 +1 -1
  212. data/man/man8/puppet-help.8 +6 -3
  213. data/man/man8/puppet-key.8 +1 -1
  214. data/man/man8/puppet-lookup.8 +2 -2
  215. data/man/man8/puppet-man.8 +1 -1
  216. data/man/man8/puppet-module.8 +4 -1
  217. data/man/man8/puppet-node.8 +4 -4
  218. data/man/man8/puppet-parser.8 +1 -1
  219. data/man/man8/puppet-plugin.8 +1 -1
  220. data/man/man8/puppet-report.8 +1 -1
  221. data/man/man8/puppet-resource.8 +1 -1
  222. data/man/man8/puppet-script.8 +1 -1
  223. data/man/man8/puppet-ssl.8 +1 -1
  224. data/man/man8/puppet-status.8 +2 -2
  225. data/man/man8/puppet.8 +2 -2
  226. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  227. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  228. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  229. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  230. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-enabled.txt → dnf-module-list.txt} +6 -0
  231. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  232. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  233. data/spec/integration/application/agent_spec.rb +202 -52
  234. data/spec/integration/application/apply_spec.rb +149 -149
  235. data/spec/integration/application/config_spec.rb +74 -0
  236. data/spec/integration/application/doc_spec.rb +16 -6
  237. data/spec/integration/application/filebucket_spec.rb +70 -21
  238. data/spec/integration/application/help_spec.rb +42 -0
  239. data/spec/integration/application/lookup_spec.rb +13 -0
  240. data/spec/integration/application/module_spec.rb +68 -0
  241. data/spec/integration/application/plugin_spec.rb +75 -2
  242. data/spec/integration/configurer_spec.rb +14 -0
  243. data/spec/integration/data_binding_spec.rb +82 -0
  244. data/spec/integration/defaults_spec.rb +27 -3
  245. data/spec/integration/directory_environments_spec.rb +17 -17
  246. data/spec/integration/http/client_spec.rb +6 -1
  247. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  248. data/spec/integration/network/http_pool_spec.rb +73 -0
  249. data/spec/integration/node/environment_spec.rb +1 -1
  250. data/spec/integration/parser/compiler_spec.rb +11 -0
  251. data/spec/integration/type/file_spec.rb +1 -1
  252. data/spec/integration/util/execution_spec.rb +22 -0
  253. data/spec/integration/util/windows/adsi_spec.rb +7 -2
  254. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  255. data/spec/integration/util/windows/process_spec.rb +26 -32
  256. data/spec/integration/util/windows/registry_spec.rb +7 -7
  257. data/spec/integration/util/windows/user_spec.rb +47 -5
  258. data/spec/integration/util_spec.rb +7 -33
  259. data/spec/lib/puppet_spec/https.rb +6 -0
  260. data/spec/lib/puppet_spec/matchers.rb +0 -80
  261. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  262. data/spec/shared_contexts/types_setup.rb +2 -0
  263. data/spec/unit/agent_spec.rb +47 -1
  264. data/spec/unit/application/agent_spec.rb +7 -8
  265. data/spec/unit/application/doc_spec.rb +2 -2
  266. data/spec/unit/application/face_base_spec.rb +6 -4
  267. data/spec/unit/application/facts_spec.rb +41 -10
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +9 -4
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine_spec.rb +2 -1
  276. data/spec/unit/context/trusted_information_spec.rb +25 -2
  277. data/spec/unit/daemon_spec.rb +5 -64
  278. data/spec/unit/environments_spec.rb +99 -32
  279. data/spec/unit/face/config_spec.rb +59 -1
  280. data/spec/unit/face/module/search_spec.rb +17 -0
  281. data/spec/unit/face/node_spec.rb +2 -2
  282. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  283. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  284. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  285. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  286. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  287. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  288. data/spec/unit/file_system_spec.rb +1 -2
  289. data/spec/unit/http/client_spec.rb +74 -19
  290. data/spec/unit/http/external_client_spec.rb +9 -9
  291. data/spec/unit/http/resolver_spec.rb +24 -5
  292. data/spec/unit/http/response_spec.rb +6 -0
  293. data/spec/unit/http/service/ca_spec.rb +2 -3
  294. data/spec/unit/http/service/compiler_spec.rb +2 -3
  295. data/spec/unit/http/service/file_server_spec.rb +2 -3
  296. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  297. data/spec/unit/http/service/report_spec.rb +2 -3
  298. data/spec/unit/http/service_spec.rb +0 -1
  299. data/spec/unit/http/session_spec.rb +8 -21
  300. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  301. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  302. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  303. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  304. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  305. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  306. data/spec/unit/indirector/json_spec.rb +8 -8
  307. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  308. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  309. data/spec/unit/indirector/request_spec.rb +5 -5
  310. data/spec/unit/indirector/rest_spec.rb +14 -1
  311. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  312. data/spec/unit/indirector/yaml_spec.rb +7 -7
  313. data/spec/unit/interface_spec.rb +3 -3
  314. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  315. data/spec/unit/network/format_support_spec.rb +3 -2
  316. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  317. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  318. data/spec/unit/network/http/connection_spec.rb +552 -190
  319. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  320. data/spec/unit/network/http_pool_spec.rb +63 -57
  321. data/spec/unit/network/http_spec.rb +1 -1
  322. data/spec/unit/node/environment_spec.rb +18 -1
  323. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  324. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  325. data/spec/unit/parser/scope_spec.rb +1 -1
  326. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  327. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  328. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  329. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  330. data/spec/unit/provider/exec_spec.rb +4 -3
  331. data/spec/unit/provider/package/aix_spec.rb +29 -0
  332. data/spec/unit/provider/package/apt_spec.rb +77 -0
  333. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  334. data/spec/unit/provider/package/dnfmodule_spec.rb +25 -5
  335. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  336. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  337. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  338. data/spec/unit/provider/package/pip_spec.rb +42 -16
  339. data/spec/unit/provider/package/portage_spec.rb +5 -0
  340. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  341. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  342. data/spec/unit/provider/package/yum_spec.rb +47 -8
  343. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  344. data/spec/unit/provider/service/base_spec.rb +2 -4
  345. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  346. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  347. data/spec/unit/provider/service/debian_spec.rb +3 -5
  348. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  349. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  350. data/spec/unit/provider/service/init_spec.rb +46 -5
  351. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  352. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  353. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  354. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  355. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  356. data/spec/unit/provider/service/runit_spec.rb +2 -1
  357. data/spec/unit/provider/service/smf_spec.rb +1 -1
  358. data/spec/unit/provider/service/src_spec.rb +3 -5
  359. data/spec/unit/provider/service/systemd_spec.rb +87 -19
  360. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  361. data/spec/unit/provider/service/windows_spec.rb +50 -14
  362. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  363. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  364. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  365. data/spec/unit/puppet_pal_2pec.rb +40 -0
  366. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  367. data/spec/unit/puppet_spec.rb +33 -0
  368. data/spec/unit/reports/http_spec.rb +1 -1
  369. data/spec/unit/reports/store_spec.rb +17 -13
  370. data/spec/unit/resource_spec.rb +3 -3
  371. data/spec/unit/rest/route_spec.rb +4 -4
  372. data/spec/unit/settings_spec.rb +182 -22
  373. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  374. data/spec/unit/ssl/state_machine_spec.rb +52 -8
  375. data/spec/unit/test/test_helper_spec.rb +17 -0
  376. data/spec/unit/transaction/persistence_spec.rb +15 -0
  377. data/spec/unit/transaction/report_spec.rb +3 -1
  378. data/spec/unit/type/file/source_spec.rb +4 -4
  379. data/spec/unit/type/file_spec.rb +122 -96
  380. data/spec/unit/type/filebucket_spec.rb +1 -1
  381. data/spec/unit/type/service_spec.rb +218 -8
  382. data/spec/unit/type/user_spec.rb +32 -3
  383. data/spec/unit/type_spec.rb +50 -0
  384. data/spec/unit/util/autoload_spec.rb +2 -1
  385. data/spec/unit/util/character_encoding_spec.rb +4 -4
  386. data/spec/unit/util/checksums_spec.rb +16 -0
  387. data/spec/unit/util/command_line_spec.rb +11 -6
  388. data/spec/unit/util/log/destinations_spec.rb +1 -29
  389. data/spec/unit/util/package/version/range_spec.rb +22 -1
  390. data/spec/unit/util/run_mode_spec.rb +6 -6
  391. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  392. data/spec/unit/util/windows/service_spec.rb +4 -4
  393. data/spec/unit/util_spec.rb +3 -3
  394. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  395. data/tasks/manpages.rake +5 -35
  396. metadata +43 -49
  397. data/spec/integration/faces/config_spec.rb +0 -91
  398. data/spec/integration/faces/documentation_spec.rb +0 -57
  399. data/spec/integration/file_bucket/file_spec.rb +0 -50
  400. data/spec/integration/file_serving/content_spec.rb +0 -7
  401. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  402. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  403. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  404. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  405. data/spec/integration/module_tool/forge_spec.rb +0 -51
  406. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  407. data/spec/integration/provider/service/init_spec.rb +0 -48
  408. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  409. data/spec/integration/provider/service/windows_spec.rb +0 -50
  410. data/spec/integration/reference/providers_spec.rb +0 -21
  411. data/spec/integration/reports_spec.rb +0 -13
  412. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  413. data/spec/integration/ssl/host_spec.rb +0 -72
  414. data/spec/integration/ssl/key_spec.rb +0 -99
  415. data/spec/integration/test/test_helper_spec.rb +0 -31
  416. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  417. data/spec/unit/face/man_spec.rb +0 -25
  418. data/spec/unit/man_spec.rb +0 -31
@@ -9,7 +9,7 @@ describe Puppet::Settings do
9
9
  include Matchers::Resource
10
10
 
11
11
  let(:main_config_file_default_location) do
12
- File.join(Puppet::Util::RunMode[:master].conf_dir, "puppet.conf")
12
+ File.join(Puppet::Util::RunMode[:server].conf_dir, "puppet.conf")
13
13
  end
14
14
 
15
15
  let(:user_config_file_default_location) do
@@ -112,9 +112,9 @@ describe Puppet::Settings do
112
112
  # case behaviors / uses. However, until that time... we need to make sure that our private run_mode=
113
113
  # setter method gets properly called during app initialization.
114
114
  it "sets the preferred run mode when initializing the app defaults" do
115
- @settings.initialize_app_defaults(default_values.merge(:run_mode => :master))
115
+ @settings.initialize_app_defaults(default_values.merge(:run_mode => :server))
116
116
 
117
- expect(@settings.preferred_run_mode).to eq(:master)
117
+ expect(@settings.preferred_run_mode).to eq(:server)
118
118
  end
119
119
 
120
120
  it "creates ancestor directories for all required app settings" do
@@ -326,7 +326,7 @@ describe Puppet::Settings do
326
326
  end
327
327
 
328
328
  it "should identify configured settings from the specified run mode" do
329
- user_config_text = "[master]\nmyval = foo"
329
+ user_config_text = "[server]\nmyval = foo"
330
330
 
331
331
  allow(Puppet.features).to receive(:root?).and_return(false)
332
332
  expect(Puppet::FileSystem).to receive(:exist?).
@@ -337,7 +337,7 @@ describe Puppet::Settings do
337
337
  and_return(user_config_text).ordered
338
338
 
339
339
  @settings.send(:parse_config_files)
340
- expect(@settings.set_by_config?(:myval, nil, :master)).to be_truthy
340
+ expect(@settings.set_by_config?(:myval, nil, :server)).to be_truthy
341
341
  end
342
342
 
343
343
  it "should not identify configured settings from an unspecified run mode" do
@@ -382,7 +382,7 @@ describe Puppet::Settings do
382
382
 
383
383
  it "should clear the cache when the preferred_run_mode is changed" do
384
384
  expect(@settings).to receive(:flush_cache)
385
- @settings.preferred_run_mode = :master
385
+ @settings.preferred_run_mode = :server
386
386
  end
387
387
 
388
388
  it "should not clear other values when setting getopt-specific values" do
@@ -658,6 +658,28 @@ describe Puppet::Settings do
658
658
  expect(@settings[:one]).to eq("modeval")
659
659
  end
660
660
 
661
+ [:master, :server].each do |run_mode|
662
+ describe "when run mode is '#{run_mode}'" do
663
+ before(:each) { @settings.preferred_run_mode = run_mode }
664
+
665
+ it "returns values set in the 'master' section if the 'server' section does not exist" do
666
+ text = "[main]\none = mainval\n[master]\none = modeval\n"
667
+ allow(@settings).to receive(:read_file).and_return(text)
668
+ @settings.send(:parse_config_files)
669
+
670
+ expect(@settings[:one]).to eq("modeval")
671
+ end
672
+
673
+ it "prioritizes values set in the 'server' section if set" do
674
+ text = "[main]\none = mainval\n[server]\none = serverval\n[master]\none = masterval\n"
675
+ allow(@settings).to receive(:read_file).and_return(text)
676
+ @settings.send(:parse_config_files)
677
+
678
+ expect(@settings[:one]).to eq("serverval")
679
+ end
680
+ end
681
+ end
682
+
661
683
  it "should not return values outside of its search path" do
662
684
  text = "[other]\none = oval\n"
663
685
  allow(@settings).to receive(:read_file).and_return(text)
@@ -854,10 +876,10 @@ describe Puppet::Settings do
854
876
  default_values[key] = 'default value'
855
877
  end
856
878
  @settings.define_settings :main, PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS
857
- @settings.define_settings :master, :myfile => { :type => :file, :default => make_absolute("/myfile"), :desc => "a" }
879
+ @settings.define_settings :server, :myfile => { :type => :file, :default => make_absolute("/myfile"), :desc => "a" }
858
880
 
859
881
  otherfile = make_absolute("/other/file")
860
- text = "[master]
882
+ text = "[server]
861
883
  myfile = #{otherfile} {mode = 664}
862
884
  "
863
885
  expect(@settings).to receive(:read_file).and_return(text)
@@ -866,15 +888,153 @@ describe Puppet::Settings do
866
888
  expect(@settings.preferred_run_mode).to eq(:user)
867
889
  @settings.send(:parse_config_files)
868
890
 
869
- # change app run_mode to master
870
- @settings.initialize_app_defaults(default_values.merge(:run_mode => :master))
871
- expect(@settings.preferred_run_mode).to eq(:master)
891
+ # change app run_mode to server
892
+ @settings.initialize_app_defaults(default_values.merge(:run_mode => :server))
893
+ expect(@settings.preferred_run_mode).to eq(:server)
872
894
 
873
895
  # initializing the app should have reloaded the metadata based on run_mode
874
896
  expect(@settings[:myfile]).to eq(otherfile)
875
897
  expect(metadata(@settings.setting(:myfile))).to eq({:mode => "664"})
876
898
  end
877
899
 
900
+ context "when setting serverport and masterport" do
901
+ before(:each) do
902
+ default_values = {}
903
+ PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS.keys.each do |key|
904
+ default_values[key] = 'default value'
905
+ end
906
+ @settings.define_settings :main, PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS
907
+ @settings.define_settings :server, :masterport => { :desc => "a", :default => 1000 }
908
+ @settings.define_settings :server, :serverport => { :desc => "a", :default => 1000 }
909
+ @settings.define_settings :server, :ca_port => { :desc => "a", :default => "$serverport" }
910
+ @settings.define_settings :server, :report_port => { :desc => "a", :default => "$serverport" }
911
+ expect(@settings).to receive(:read_file).and_return(text)
912
+ @settings.send(:parse_config_files)
913
+ @settings.initialize_app_defaults(default_values.merge(:run_mode => :agent))
914
+ expect(@settings.preferred_run_mode).to eq(:agent)
915
+ end
916
+
917
+ context 'with serverport in main and masterport in agent' do
918
+ let(:text) do
919
+ "[main]
920
+ serverport = 444
921
+ [agent]
922
+ masterport = 445
923
+ "
924
+ end
925
+
926
+ it { expect(@settings[:serverport]).to eq(445) }
927
+ it { expect(@settings[:ca_port]).to eq("445") }
928
+ it { expect(@settings[:report_port]).to eq("445") }
929
+ end
930
+
931
+ context 'with serverport and masterport in main' do
932
+ let(:text) do
933
+ "[main]
934
+ serverport = 445
935
+ masterport = 444
936
+ "
937
+ end
938
+
939
+ it { expect(@settings[:serverport]).to eq(445) }
940
+ it { expect(@settings[:ca_port]).to eq("445") }
941
+ it { expect(@settings[:report_port]).to eq("445") }
942
+ end
943
+
944
+ context 'with serverport and masterport in agent' do
945
+ let(:text) do
946
+ "[agent]
947
+ serverport = 445
948
+ masterport = 444
949
+ "
950
+ end
951
+
952
+ it { expect(@settings[:serverport]).to eq(445) }
953
+ it { expect(@settings[:ca_port]).to eq("445") }
954
+ it { expect(@settings[:report_port]).to eq("445") }
955
+ end
956
+
957
+ context 'with both serverport and masterport in main and agent' do
958
+ let(:text) do
959
+ "[main]
960
+ serverport = 447
961
+ masterport = 442
962
+ [agent]
963
+ serverport = 445
964
+ masterport = 444
965
+ "
966
+ end
967
+
968
+ it { expect(@settings[:serverport]).to eq(445) }
969
+ it { expect(@settings[:ca_port]).to eq("445") }
970
+ it { expect(@settings[:report_port]).to eq("445") }
971
+ end
972
+
973
+ context 'with serverport in agent and masterport in main' do
974
+ let(:text) do
975
+ "[agent]
976
+ serverport = 444
977
+ [main]
978
+ masterport = 445
979
+ "
980
+ end
981
+
982
+ it { expect(@settings[:serverport]).to eq(444) }
983
+ it { expect(@settings[:ca_port]).to eq("444") }
984
+ it { expect(@settings[:report_port]).to eq("444") }
985
+ end
986
+
987
+ context 'with masterport in main' do
988
+ let(:text) do
989
+ "[main]
990
+ masterport = 445
991
+ "
992
+ end
993
+
994
+ it { expect(@settings[:serverport]).to eq(445) }
995
+ it { expect(@settings[:ca_port]).to eq("445") }
996
+ it { expect(@settings[:report_port]).to eq("445") }
997
+ end
998
+
999
+ context 'with masterport in agent' do
1000
+ let(:text) do
1001
+ "[agent]
1002
+ masterport = 445
1003
+ "
1004
+ end
1005
+
1006
+ it { expect(@settings[:serverport]).to eq(445) }
1007
+ it { expect(@settings[:ca_port]).to eq("445") }
1008
+ it { expect(@settings[:report_port]).to eq("445") }
1009
+ end
1010
+
1011
+ context 'with serverport in agent' do
1012
+ let(:text) do
1013
+ "[agent]
1014
+ serverport = 445
1015
+ "
1016
+ end
1017
+
1018
+ it { expect(@settings[:serverport]).to eq(445) }
1019
+ it { expect(@settings[:masterport]).to eq(445) }
1020
+ it { expect(@settings[:ca_port]).to eq("445") }
1021
+ it { expect(@settings[:report_port]).to eq("445") }
1022
+ end
1023
+
1024
+ context 'with serverport in main' do
1025
+ let(:text) do
1026
+ "[main]
1027
+ serverport = 445
1028
+ "
1029
+ end
1030
+
1031
+ it { expect(@settings[:serverport]).to eq(445) }
1032
+ it { expect(@settings[:masterport]).to eq(445) }
1033
+ it { expect(@settings[:ca_port]).to eq("445") }
1034
+ it { expect(@settings[:report_port]).to eq("445") }
1035
+ end
1036
+ end
1037
+
878
1038
  it "does not use the metadata from the same setting in a different section" do
879
1039
  default_values = {}
880
1040
  PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS.keys.each do |key|
@@ -884,9 +1044,9 @@ describe Puppet::Settings do
884
1044
  file = make_absolute("/file")
885
1045
  default_mode = "0600"
886
1046
  @settings.define_settings :main, PuppetSpec::Settings::TEST_APP_DEFAULT_DEFINITIONS
887
- @settings.define_settings :master, :myfile => { :type => :file, :default => file, :desc => "a", :mode => default_mode }
1047
+ @settings.define_settings :server, :myfile => { :type => :file, :default => file, :desc => "a", :mode => default_mode }
888
1048
 
889
- text = "[master]
1049
+ text = "[server]
890
1050
  myfile = #{file}/foo
891
1051
  [agent]
892
1052
  myfile = #{file} {mode = 664}
@@ -897,9 +1057,9 @@ describe Puppet::Settings do
897
1057
  expect(@settings.preferred_run_mode).to eq(:user)
898
1058
  @settings.send(:parse_config_files)
899
1059
 
900
- # change app run_mode to master
901
- @settings.initialize_app_defaults(default_values.merge(:run_mode => :master))
902
- expect(@settings.preferred_run_mode).to eq(:master)
1060
+ # change app run_mode to server
1061
+ @settings.initialize_app_defaults(default_values.merge(:run_mode => :server))
1062
+ expect(@settings.preferred_run_mode).to eq(:server)
903
1063
 
904
1064
  # initializing the app should have reloaded the metadata based on run_mode
905
1065
  expect(@settings[:myfile]).to eq("#{file}/foo")
@@ -1900,18 +2060,18 @@ describe Puppet::Settings do
1900
2060
  end
1901
2061
 
1902
2062
  it "should set preferred run mode from --run_mode <foo> string without error" do
1903
- args = ["--run_mode", "master"]
1904
- expect(settings).not_to receive(:handlearg).with("--run_mode", "master")
2063
+ args = ["--run_mode", "server"]
2064
+ expect(settings).not_to receive(:handlearg).with("--run_mode", "server")
1905
2065
  expect { settings.send(:parse_global_options, args) } .to_not raise_error
1906
- expect(Puppet.settings.preferred_run_mode).to eq(:master)
2066
+ expect(Puppet.settings.preferred_run_mode).to eq(:server)
1907
2067
  expect(args.empty?).to eq(true)
1908
2068
  end
1909
2069
 
1910
2070
  it "should set preferred run mode from --run_mode=<foo> string without error" do
1911
- args = ["--run_mode=master"]
1912
- expect(settings).not_to receive(:handlearg).with("--run_mode", "master")
2071
+ args = ["--run_mode=server"]
2072
+ expect(settings).not_to receive(:handlearg).with("--run_mode", "server")
1913
2073
  expect { settings.send(:parse_global_options, args) }.to_not raise_error
1914
- expect(Puppet.settings.preferred_run_mode).to eq(:master)
2074
+ expect(Puppet.settings.preferred_run_mode).to eq(:server)
1915
2075
  expect(args.empty?).to eq(true)
1916
2076
  end
1917
2077
  end
@@ -42,20 +42,20 @@ describe Puppet::SSL::SSLProvider do
42
42
  let(:config) { { cacerts: [], crls: [], revocation: false } }
43
43
 
44
44
  it 'accepts empty list of certs and crls' do
45
- sslctx = subject.create_root_context(config)
45
+ sslctx = subject.create_root_context(**config)
46
46
  expect(sslctx.cacerts).to eq([])
47
47
  expect(sslctx.crls).to eq([])
48
48
  end
49
49
 
50
50
  it 'accepts valid root certs' do
51
51
  certs = [cert_fixture('ca.pem')]
52
- sslctx = subject.create_root_context(config.merge(cacerts: certs))
52
+ sslctx = subject.create_root_context(**config.merge(cacerts: certs))
53
53
  expect(sslctx.cacerts).to eq(certs)
54
54
  end
55
55
 
56
56
  it 'accepts valid intermediate certs' do
57
57
  certs = [cert_fixture('ca.pem'), cert_fixture('intermediate.pem')]
58
- sslctx = subject.create_root_context(config.merge(cacerts: certs))
58
+ sslctx = subject.create_root_context(**config.merge(cacerts: certs))
59
59
  expect(sslctx.cacerts).to eq(certs)
60
60
  end
61
61
 
@@ -63,19 +63,19 @@ describe Puppet::SSL::SSLProvider do
63
63
  expired = [cert_fixture('ca.pem'), cert_fixture('intermediate.pem')]
64
64
  expired.each { |x509| x509.not_after = Time.at(0) }
65
65
 
66
- sslctx = subject.create_root_context(config.merge(cacerts: expired))
66
+ sslctx = subject.create_root_context(**config.merge(cacerts: expired))
67
67
  expect(sslctx.cacerts).to eq(expired)
68
68
  end
69
69
 
70
70
  it 'raises if the frozen context is modified' do
71
- sslctx = subject.create_root_context(config)
71
+ sslctx = subject.create_root_context(**config)
72
72
  expect {
73
73
  sslctx.verify_peer = false
74
74
  }.to raise_error(/can't modify frozen/)
75
75
  end
76
76
 
77
77
  it 'verifies peer' do
78
- sslctx = subject.create_root_context(config)
78
+ sslctx = subject.create_root_context(**config)
79
79
  expect(sslctx.verify_peer).to eq(true)
80
80
  end
81
81
  end
@@ -134,6 +134,32 @@ describe Puppet::SSL::SSLProvider do
134
134
  expect(sslctx.client_cert).to be_nil
135
135
  expect(sslctx.private_key).to be_nil
136
136
  end
137
+
138
+ it 'trusts additional system certs' do
139
+ path = tmpfile('system_cacerts')
140
+ File.write(path, cert_fixture('ca.pem').to_pem)
141
+
142
+ expect_any_instance_of(OpenSSL::X509::Store).to receive(:add_file).with(path)
143
+
144
+ subject.create_system_context(cacerts: [], path: path)
145
+ end
146
+
147
+ it 'ignores empty files' do
148
+ path = tmpfile('system_cacerts')
149
+ FileUtils.touch(path)
150
+
151
+ subject.create_system_context(cacerts: [], path: path)
152
+
153
+ expect(@logs).to eq([])
154
+ end
155
+
156
+ it 'prints an error if it is not a file' do
157
+ path = tmpdir('system_cacerts')
158
+
159
+ subject.create_system_context(cacerts: [], path: path)
160
+
161
+ expect(@logs).to include(an_object_having_attributes(level: :warning, message: /^The 'ssl_trust_store' setting does not refer to a file and will be ignored/))
162
+ end
137
163
  end
138
164
 
139
165
  context 'when creating an ssl context with crls' do
@@ -142,14 +168,14 @@ describe Puppet::SSL::SSLProvider do
142
168
  it 'accepts valid CRLs' do
143
169
  certs = [cert_fixture('ca.pem')]
144
170
  crls = [crl_fixture('crl.pem')]
145
- sslctx = subject.create_root_context(config.merge(cacerts: certs, crls: crls))
171
+ sslctx = subject.create_root_context(**config.merge(cacerts: certs, crls: crls))
146
172
  expect(sslctx.crls).to eq(crls)
147
173
  end
148
174
 
149
175
  it 'accepts valid CRLs for intermediate certs' do
150
176
  certs = [cert_fixture('ca.pem'), cert_fixture('intermediate.pem')]
151
177
  crls = [crl_fixture('crl.pem'), crl_fixture('intermediate-crl.pem')]
152
- sslctx = subject.create_root_context(config.merge(cacerts: certs, crls: crls))
178
+ sslctx = subject.create_root_context(**config.merge(cacerts: certs, crls: crls))
153
179
  expect(sslctx.crls).to eq(crls)
154
180
  end
155
181
 
@@ -157,12 +183,12 @@ describe Puppet::SSL::SSLProvider do
157
183
  expired = [crl_fixture('crl.pem'), crl_fixture('intermediate-crl.pem')]
158
184
  expired.each { |x509| x509.last_update = Time.at(0) }
159
185
 
160
- sslctx = subject.create_root_context(config.merge(crls: expired))
186
+ sslctx = subject.create_root_context(**config.merge(crls: expired))
161
187
  expect(sslctx.crls).to eq(expired)
162
188
  end
163
189
 
164
190
  it 'verifies peer' do
165
- sslctx = subject.create_root_context(config)
191
+ sslctx = subject.create_root_context(**config)
166
192
  expect(sslctx.verify_peer).to eq(true)
167
193
  end
168
194
  end
@@ -174,49 +200,49 @@ describe Puppet::SSL::SSLProvider do
174
200
 
175
201
  it 'raises if CA certs are missing' do
176
202
  expect {
177
- subject.create_context(config.merge(cacerts: nil))
203
+ subject.create_context(**config.merge(cacerts: nil))
178
204
  }.to raise_error(ArgumentError, /CA certs are missing/)
179
205
  end
180
206
 
181
207
  it 'raises if CRLs are are missing' do
182
208
  expect {
183
- subject.create_context(config.merge(crls: nil))
209
+ subject.create_context(**config.merge(crls: nil))
184
210
  }.to raise_error(ArgumentError, /CRLs are missing/)
185
211
  end
186
212
 
187
213
  it 'raises if private key is missing' do
188
214
  expect {
189
- subject.create_context(config.merge(private_key: nil))
215
+ subject.create_context(**config.merge(private_key: nil))
190
216
  }.to raise_error(ArgumentError, /Private key is missing/)
191
217
  end
192
218
 
193
219
  it 'raises if client cert is missing' do
194
220
  expect {
195
- subject.create_context(config.merge(client_cert: nil))
221
+ subject.create_context(**config.merge(client_cert: nil))
196
222
  }.to raise_error(ArgumentError, /Client cert is missing/)
197
223
  end
198
224
 
199
225
  it 'accepts RSA keys' do
200
- sslctx = subject.create_context(config)
226
+ sslctx = subject.create_context(**config)
201
227
  expect(sslctx.private_key).to eq(private_key)
202
228
  end
203
229
 
204
230
  it 'accepts EC keys' do
205
231
  ec_key = ec_key_fixture('ec-key.pem')
206
232
  ec_cert = cert_fixture('ec.pem')
207
- sslctx = subject.create_context(config.merge(client_cert: ec_cert, private_key: ec_key))
233
+ sslctx = subject.create_context(**config.merge(client_cert: ec_cert, private_key: ec_key))
208
234
  expect(sslctx.private_key).to eq(ec_key)
209
235
  end
210
236
 
211
237
  it 'raises if private key is unsupported' do
212
238
  dsa_key = OpenSSL::PKey::DSA.new
213
239
  expect {
214
- subject.create_context(config.merge(private_key: dsa_key))
240
+ subject.create_context(**config.merge(private_key: dsa_key))
215
241
  }.to raise_error(Puppet::SSL::SSLError, /Unsupported key 'OpenSSL::PKey::DSA'/)
216
242
  end
217
243
 
218
244
  it 'resolves the client chain from leaf to root' do
219
- sslctx = subject.create_context(config)
245
+ sslctx = subject.create_context(**config)
220
246
  expect(
221
247
  sslctx.client_chain.map(&:subject).map(&:to_utf8)
222
248
  ).to eq(['CN=signed', 'CN=Test CA Subauthority', 'CN=Test CA'])
@@ -225,21 +251,21 @@ describe Puppet::SSL::SSLProvider do
225
251
  it 'raises if client cert signature is invalid' do
226
252
  client_cert.sign(wrong_key, OpenSSL::Digest::SHA256.new)
227
253
  expect {
228
- subject.create_context(config.merge(client_cert: client_cert))
254
+ subject.create_context(**config.merge(client_cert: client_cert))
229
255
  }.to raise_error(Puppet::SSL::CertVerifyError,
230
256
  "Invalid signature for certificate 'CN=signed'")
231
257
  end
232
258
 
233
259
  it 'raises if client cert and private key are mismatched' do
234
260
  expect {
235
- subject.create_context(config.merge(private_key: wrong_key))
261
+ subject.create_context(**config.merge(private_key: wrong_key))
236
262
  }.to raise_error(Puppet::SSL::SSLError,
237
263
  "The certificate for 'CN=signed' does not match its private key")
238
264
  end
239
265
 
240
266
  it "raises if client cert's public key has been replaced" do
241
267
  expect {
242
- subject.create_context(config.merge(client_cert: cert_fixture('tampered-cert.pem')))
268
+ subject.create_context(**config.merge(client_cert: cert_fixture('tampered-cert.pem')))
243
269
  }.to raise_error(Puppet::SSL::CertVerifyError,
244
270
  "Invalid signature for certificate 'CN=signed'")
245
271
  end
@@ -250,7 +276,7 @@ describe Puppet::SSL::SSLProvider do
250
276
  ca.sign(wrong_key, OpenSSL::Digest::SHA256.new)
251
277
 
252
278
  expect {
253
- subject.create_context(config.merge(cacerts: global_cacerts))
279
+ subject.create_context(**config.merge(cacerts: global_cacerts))
254
280
  }.to raise_error(Puppet::SSL::CertVerifyError,
255
281
  "Invalid signature for certificate 'CN=Test CA'")
256
282
  end
@@ -260,7 +286,7 @@ describe Puppet::SSL::SSLProvider do
260
286
  int.sign(wrong_key, OpenSSL::Digest::SHA256.new)
261
287
 
262
288
  expect {
263
- subject.create_context(config.merge(cacerts: global_cacerts))
289
+ subject.create_context(**config.merge(cacerts: global_cacerts))
264
290
  }.to raise_error(Puppet::SSL::CertVerifyError,
265
291
  "Invalid signature for certificate 'CN=Test CA Subauthority'")
266
292
  end
@@ -270,7 +296,7 @@ describe Puppet::SSL::SSLProvider do
270
296
  crl.sign(wrong_key, OpenSSL::Digest::SHA256.new)
271
297
 
272
298
  expect {
273
- subject.create_context(config.merge(crls: global_crls))
299
+ subject.create_context(**config.merge(crls: global_crls))
274
300
  }.to raise_error(Puppet::SSL::CertVerifyError,
275
301
  "Invalid signature for CRL issued by 'CN=Test CA'")
276
302
  end
@@ -280,14 +306,14 @@ describe Puppet::SSL::SSLProvider do
280
306
  crl.sign(wrong_key, OpenSSL::Digest::SHA256.new)
281
307
 
282
308
  expect {
283
- subject.create_context(config.merge(crls: global_crls))
309
+ subject.create_context(**config.merge(crls: global_crls))
284
310
  }.to raise_error(Puppet::SSL::CertVerifyError,
285
311
  "Invalid signature for CRL issued by 'CN=Test CA Subauthority'")
286
312
  end
287
313
 
288
314
  it 'raises if client cert is revoked' do
289
315
  expect {
290
- subject.create_context(config.merge(private_key: key_fixture('revoked-key.pem'), client_cert: cert_fixture('revoked.pem')))
316
+ subject.create_context(**config.merge(private_key: key_fixture('revoked-key.pem'), client_cert: cert_fixture('revoked.pem')))
291
317
  }.to raise_error(Puppet::SSL::CertVerifyError,
292
318
  "Certificate 'CN=revoked' is revoked")
293
319
  end
@@ -295,12 +321,12 @@ describe Puppet::SSL::SSLProvider do
295
321
  it 'warns if intermediate issuer is missing' do
296
322
  expect(Puppet).to receive(:warning).with("The issuer 'CN=Test CA Subauthority' of certificate 'CN=signed' cannot be found locally")
297
323
 
298
- subject.create_context(config.merge(cacerts: [cert_fixture('ca.pem')]))
324
+ subject.create_context(**config.merge(cacerts: [cert_fixture('ca.pem')]))
299
325
  end
300
326
 
301
327
  it 'raises if root issuer is missing' do
302
328
  expect {
303
- subject.create_context(config.merge(cacerts: [cert_fixture('intermediate.pem')]))
329
+ subject.create_context(**config.merge(cacerts: [cert_fixture('intermediate.pem')]))
304
330
  }.to raise_error(Puppet::SSL::CertVerifyError,
305
331
  "The issuer 'CN=Test CA' of certificate 'CN=Test CA Subauthority' is missing")
306
332
  end
@@ -308,7 +334,7 @@ describe Puppet::SSL::SSLProvider do
308
334
  it 'raises if cert is not valid yet', unless: Puppet::Util::Platform.jruby? do
309
335
  client_cert.not_before = Time.now + (5 * 60 * 60)
310
336
  expect {
311
- subject.create_context(config.merge(client_cert: client_cert))
337
+ subject.create_context(**config.merge(client_cert: client_cert))
312
338
  }.to raise_error(Puppet::SSL::CertVerifyError,
313
339
  "The certificate 'CN=signed' is not yet valid, verify time is synchronized")
314
340
  end
@@ -316,7 +342,7 @@ describe Puppet::SSL::SSLProvider do
316
342
  it 'raises if cert is expired', unless: Puppet::Util::Platform.jruby? do
317
343
  client_cert.not_after = Time.at(0)
318
344
  expect {
319
- subject.create_context(config.merge(client_cert: client_cert))
345
+ subject.create_context(**config.merge(client_cert: client_cert))
320
346
  }.to raise_error(Puppet::SSL::CertVerifyError,
321
347
  "The certificate 'CN=signed' has expired, verify time is synchronized")
322
348
  end
@@ -327,7 +353,7 @@ describe Puppet::SSL::SSLProvider do
327
353
  future_crls.first.last_update = Time.now + (5 * 60 * 60)
328
354
 
329
355
  expect {
330
- subject.create_context(config.merge(crls: future_crls))
356
+ subject.create_context(**config.merge(crls: future_crls))
331
357
  }.to raise_error(Puppet::SSL::CertVerifyError,
332
358
  "The CRL issued by 'CN=Test CA' is not yet valid, verify time is synchronized")
333
359
  end
@@ -338,7 +364,7 @@ describe Puppet::SSL::SSLProvider do
338
364
  past_crls.first.next_update = Time.at(0)
339
365
 
340
366
  expect {
341
- subject.create_context(config.merge(crls: past_crls))
367
+ subject.create_context(**config.merge(crls: past_crls))
342
368
  }.to raise_error(Puppet::SSL::CertVerifyError,
343
369
  "The CRL issued by 'CN=Test CA' has expired, verify time is synchronized")
344
370
  end
@@ -346,7 +372,7 @@ describe Puppet::SSL::SSLProvider do
346
372
  it 'raises if the root CRL is missing' do
347
373
  crls = [crl_fixture('intermediate-crl.pem')]
348
374
  expect {
349
- subject.create_context(config.merge(crls: crls, revocation: :chain))
375
+ subject.create_context(**config.merge(crls: crls, revocation: :chain))
350
376
  }.to raise_error(Puppet::SSL::CertVerifyError,
351
377
  "The CRL issued by 'CN=Test CA' is missing")
352
378
  end
@@ -354,23 +380,23 @@ describe Puppet::SSL::SSLProvider do
354
380
  it 'raises if the intermediate CRL is missing' do
355
381
  crls = [crl_fixture('crl.pem')]
356
382
  expect {
357
- subject.create_context(config.merge(crls: crls))
383
+ subject.create_context(**config.merge(crls: crls))
358
384
  }.to raise_error(Puppet::SSL::CertVerifyError,
359
385
  "The CRL issued by 'CN=Test CA Subauthority' is missing")
360
386
  end
361
387
 
362
388
  it "doesn't raise if the root CRL is missing and we're just checking the leaf" do
363
389
  crls = [crl_fixture('intermediate-crl.pem')]
364
- subject.create_context(config.merge(crls: crls, revocation: :leaf))
390
+ subject.create_context(**config.merge(crls: crls, revocation: :leaf))
365
391
  end
366
392
 
367
393
  it "doesn't raise if the intermediate CRL is missing and revocation checking is disabled" do
368
394
  crls = [crl_fixture('crl.pem')]
369
- subject.create_context(config.merge(crls: crls, revocation: false))
395
+ subject.create_context(**config.merge(crls: crls, revocation: false))
370
396
  end
371
397
 
372
398
  it "doesn't raise if both CRLs are missing and revocation checking is disabled" do
373
- subject.create_context(config.merge(crls: [], revocation: false))
399
+ subject.create_context(**config.merge(crls: [], revocation: false))
374
400
  end
375
401
 
376
402
  # OpenSSL < 1.1 does not verify basicConstraints
@@ -378,7 +404,7 @@ describe Puppet::SSL::SSLProvider do
378
404
  certs = [cert_fixture('bad-basic-constraints.pem'), cert_fixture('intermediate.pem')]
379
405
 
380
406
  expect {
381
- subject.create_context(config.merge(cacerts: certs, crls: [], revocation: false))
407
+ subject.create_context(**config.merge(cacerts: certs, crls: [], revocation: false))
382
408
  }.to raise_error(Puppet::SSL::CertVerifyError,
383
409
  "Certificate 'CN=Test CA' failed verification (24): invalid CA certificate")
384
410
  end
@@ -388,32 +414,32 @@ describe Puppet::SSL::SSLProvider do
388
414
  certs = [cert_fixture('ca.pem'), cert_fixture('bad-int-basic-constraints.pem')]
389
415
 
390
416
  expect {
391
- subject.create_context(config.merge(cacerts: certs, crls: [], revocation: false))
417
+ subject.create_context(**config.merge(cacerts: certs, crls: [], revocation: false))
392
418
  }.to raise_error(Puppet::SSL::CertVerifyError,
393
419
  "Certificate 'CN=Test CA Subauthority' failed verification (24): invalid CA certificate")
394
420
  end
395
421
 
396
422
  it 'accepts CA certs in any order' do
397
- sslctx = subject.create_context(config.merge(cacerts: global_cacerts.reverse))
423
+ sslctx = subject.create_context(**config.merge(cacerts: global_cacerts.reverse))
398
424
  # certs in ruby+openssl 1.0.x are not comparable, so compare subjects
399
425
  expect(sslctx.client_chain.map(&:subject).map(&:to_utf8)).to contain_exactly('CN=Test CA', 'CN=Test CA Subauthority', 'CN=signed')
400
426
  end
401
427
 
402
428
  it 'accepts CRLs in any order' do
403
- sslctx = subject.create_context(config.merge(crls: global_crls.reverse))
429
+ sslctx = subject.create_context(**config.merge(crls: global_crls.reverse))
404
430
  # certs in ruby+openssl 1.0.x are not comparable, so compare subjects
405
431
  expect(sslctx.client_chain.map(&:subject).map(&:to_utf8)).to contain_exactly('CN=Test CA', 'CN=Test CA Subauthority', 'CN=signed')
406
432
  end
407
433
 
408
434
  it 'raises if the frozen context is modified' do
409
- sslctx = subject.create_context(config)
435
+ sslctx = subject.create_context(**config)
410
436
  expect {
411
437
  sslctx.verify_peer = false
412
438
  }.to raise_error(/can't modify frozen/)
413
439
  end
414
440
 
415
441
  it 'verifies peer' do
416
- sslctx = subject.create_context(config)
442
+ sslctx = subject.create_context(**config)
417
443
  expect(sslctx.verify_peer).to eq(true)
418
444
  end
419
445
  end