puppet 6.13.0-x64-mingw32 → 6.18.0-x64-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (461) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/CONTRIBUTING.md +7 -13
  4. data/Gemfile +4 -2
  5. data/Gemfile.lock +36 -32
  6. data/README.md +17 -24
  7. data/ext/windows/service/daemon.rb +3 -3
  8. data/lib/puppet.rb +33 -9
  9. data/lib/puppet/agent.rb +20 -14
  10. data/lib/puppet/application/agent.rb +26 -17
  11. data/lib/puppet/application/apply.rb +18 -20
  12. data/lib/puppet/application/describe.rb +7 -5
  13. data/lib/puppet/application/device.rb +2 -2
  14. data/lib/puppet/application/filebucket.rb +19 -15
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/plugin.rb +1 -0
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +58 -57
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  21. data/lib/puppet/confine.rb +2 -2
  22. data/lib/puppet/confine/any.rb +1 -1
  23. data/lib/puppet/context/trusted_information.rb +14 -8
  24. data/lib/puppet/daemon.rb +13 -27
  25. data/lib/puppet/defaults.rb +92 -12
  26. data/lib/puppet/environments.rb +4 -5
  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/plugin.rb +2 -2
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  33. data/lib/puppet/file_serving/metadata.rb +4 -1
  34. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  35. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  36. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  37. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  38. data/lib/puppet/file_system/file_impl.rb +17 -13
  39. data/lib/puppet/file_system/uniquefile.rb +12 -16
  40. data/lib/puppet/forge.rb +1 -1
  41. data/lib/puppet/forge/cache.rb +1 -1
  42. data/lib/puppet/forge/repository.rb +4 -7
  43. data/lib/puppet/functions/call.rb +1 -1
  44. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  45. data/lib/puppet/functions/filter.rb +1 -0
  46. data/lib/puppet/functions/lstrip.rb +4 -4
  47. data/lib/puppet/functions/reduce.rb +2 -4
  48. data/lib/puppet/functions/reverse_each.rb +1 -1
  49. data/lib/puppet/functions/rstrip.rb +4 -4
  50. data/lib/puppet/functions/step.rb +1 -1
  51. data/lib/puppet/functions/strip.rb +4 -4
  52. data/lib/puppet/gettext/config.rb +5 -5
  53. data/lib/puppet/gettext/module_translations.rb +4 -4
  54. data/lib/puppet/http.rb +3 -0
  55. data/lib/puppet/http/client.rb +263 -73
  56. data/lib/puppet/http/external_client.rb +90 -0
  57. data/lib/puppet/http/redirector.rb +43 -7
  58. data/lib/puppet/http/resolver.rb +46 -3
  59. data/lib/puppet/http/resolver/server_list.rb +76 -16
  60. data/lib/puppet/http/resolver/settings.rb +23 -3
  61. data/lib/puppet/http/resolver/srv.rb +29 -3
  62. data/lib/puppet/http/response.rb +87 -1
  63. data/lib/puppet/http/retry_after_handler.rb +39 -0
  64. data/lib/puppet/http/service.rb +97 -12
  65. data/lib/puppet/http/service/ca.rb +76 -14
  66. data/lib/puppet/http/service/compiler.rb +249 -16
  67. data/lib/puppet/http/service/file_server.rb +141 -20
  68. data/lib/puppet/http/service/report.rb +47 -17
  69. data/lib/puppet/http/session.rb +96 -7
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  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/rest.rb +42 -0
  75. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  76. data/lib/puppet/indirector/file_content/http.rb +5 -0
  77. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  78. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  79. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/node/rest.rb +24 -0
  83. data/lib/puppet/indirector/report/processor.rb +2 -2
  84. data/lib/puppet/indirector/report/rest.rb +19 -0
  85. data/lib/puppet/indirector/report/yaml.rb +23 -0
  86. data/lib/puppet/indirector/request.rb +1 -1
  87. data/lib/puppet/indirector/rest.rb +12 -0
  88. data/lib/puppet/indirector/status/rest.rb +18 -0
  89. data/lib/puppet/loaders.rb +6 -0
  90. data/lib/puppet/metatype/manager.rb +80 -80
  91. data/lib/puppet/module.rb +1 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  94. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  95. data/lib/puppet/network/http/base_pool.rb +7 -2
  96. data/lib/puppet/network/http/compression.rb +7 -0
  97. data/lib/puppet/network/http/connection.rb +2 -0
  98. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  99. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  100. data/lib/puppet/network/http/pool.rb +8 -5
  101. data/lib/puppet/network/http/route.rb +2 -2
  102. data/lib/puppet/network/http_pool.rb +2 -1
  103. data/lib/puppet/node/environment.rb +22 -5
  104. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  105. data/lib/puppet/pal/pal_impl.rb +30 -31
  106. data/lib/puppet/parameter.rb +1 -1
  107. data/lib/puppet/parser/ast/leaf.rb +5 -5
  108. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  109. data/lib/puppet/parser/compiler.rb +43 -33
  110. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  111. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  112. data/lib/puppet/parser/environment_compiler.rb +4 -1
  113. data/lib/puppet/parser/functions.rb +18 -9
  114. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  115. data/lib/puppet/parser/functions/filter.rb +1 -0
  116. data/lib/puppet/parser/resource.rb +3 -2
  117. data/lib/puppet/parser/resource/param.rb +6 -0
  118. data/lib/puppet/parser/type_loader.rb +2 -2
  119. data/lib/puppet/pops/adaptable.rb +7 -13
  120. data/lib/puppet/pops/adapters.rb +8 -4
  121. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  122. data/lib/puppet/pops/issues.rb +5 -0
  123. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  124. data/lib/puppet/pops/loaders.rb +24 -15
  125. data/lib/puppet/pops/lookup/context.rb +1 -1
  126. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  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/group/groupadd.rb +9 -4
  133. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  134. data/lib/puppet/provider/package/aix.rb +17 -2
  135. data/lib/puppet/provider/package/apt.rb +98 -1
  136. data/lib/puppet/provider/package/aptitude.rb +1 -1
  137. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  138. data/lib/puppet/provider/package/gem.rb +45 -9
  139. data/lib/puppet/provider/package/pacman.rb +2 -5
  140. data/lib/puppet/provider/package/pip.rb +143 -48
  141. data/lib/puppet/provider/package/pip3.rb +0 -2
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +16 -4
  144. data/lib/puppet/provider/package/portage.rb +2 -2
  145. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  146. data/lib/puppet/provider/package/rpm.rb +6 -213
  147. data/lib/puppet/provider/package/yum.rb +100 -20
  148. data/lib/puppet/provider/package/zypper.rb +62 -1
  149. data/lib/puppet/provider/service/systemd.rb +22 -4
  150. data/lib/puppet/provider/service/windows.rb +23 -7
  151. data/lib/puppet/provider/user/aix.rb +1 -1
  152. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  153. data/lib/puppet/provider/user/useradd.rb +16 -5
  154. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  155. data/lib/puppet/reports/http.rb +15 -9
  156. data/lib/puppet/resource.rb +2 -1
  157. data/lib/puppet/resource/type.rb +8 -0
  158. data/lib/puppet/resource/type_collection.rb +20 -16
  159. data/lib/puppet/runtime.rb +31 -1
  160. data/lib/puppet/settings.rb +3 -1
  161. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  162. data/lib/puppet/ssl.rb +1 -0
  163. data/lib/puppet/ssl/host.rb +4 -4
  164. data/lib/puppet/ssl/oids.rb +1 -0
  165. data/lib/puppet/ssl/ssl_context.rb +2 -2
  166. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  167. data/lib/puppet/ssl/state_machine.rb +81 -35
  168. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  169. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  170. data/lib/puppet/test/test_helper.rb +21 -14
  171. data/lib/puppet/transaction.rb +2 -2
  172. data/lib/puppet/transaction/persistence.rb +1 -1
  173. data/lib/puppet/transaction/report.rb +3 -3
  174. data/lib/puppet/trusted_external.rb +29 -1
  175. data/lib/puppet/type.rb +21 -8
  176. data/lib/puppet/type/file.rb +51 -13
  177. data/lib/puppet/type/file/checksum.rb +4 -4
  178. data/lib/puppet/type/file/source.rb +75 -64
  179. data/lib/puppet/type/notify.rb +2 -2
  180. data/lib/puppet/type/package.rb +41 -3
  181. data/lib/puppet/type/service.rb +59 -8
  182. data/lib/puppet/type/user.rb +19 -29
  183. data/lib/puppet/util.rb +41 -3
  184. data/lib/puppet/util/at_fork.rb +1 -1
  185. data/lib/puppet/util/autoload.rb +13 -25
  186. data/lib/puppet/util/character_encoding.rb +9 -5
  187. data/lib/puppet/util/checksums.rb +19 -4
  188. data/lib/puppet/util/execution.rb +2 -2
  189. data/lib/puppet/util/fileparsing.rb +2 -2
  190. data/lib/puppet/util/instance_loader.rb +14 -10
  191. data/lib/puppet/util/log/destinations.rb +1 -10
  192. data/lib/puppet/util/package/version/debian.rb +175 -0
  193. data/lib/puppet/util/package/version/gem.rb +15 -0
  194. data/lib/puppet/util/package/version/pip.rb +167 -0
  195. data/lib/puppet/util/package/version/range.rb +53 -0
  196. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  197. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  198. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  199. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  200. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  201. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  202. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  203. data/lib/puppet/util/package/version/rpm.rb +73 -0
  204. data/lib/puppet/util/pidlock.rb +13 -7
  205. data/lib/puppet/util/platform.rb +5 -0
  206. data/lib/puppet/util/provider_features.rb +1 -1
  207. data/lib/puppet/util/reference.rb +1 -1
  208. data/lib/puppet/util/rpm_compare.rb +193 -0
  209. data/lib/puppet/util/windows.rb +1 -0
  210. data/lib/puppet/util/windows/adsi.rb +2 -2
  211. data/lib/puppet/util/windows/api_types.rb +60 -33
  212. data/lib/puppet/util/windows/eventlog.rb +1 -6
  213. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  214. data/lib/puppet/util/windows/principal.rb +8 -6
  215. data/lib/puppet/util/windows/process.rb +15 -14
  216. data/lib/puppet/util/windows/registry.rb +11 -11
  217. data/lib/puppet/util/windows/security.rb +5 -4
  218. data/lib/puppet/util/windows/service.rb +43 -26
  219. data/lib/puppet/util/windows/sid.rb +3 -3
  220. data/lib/puppet/util/windows/user.rb +242 -8
  221. data/lib/puppet/version.rb +1 -1
  222. data/locales/puppet.pot +641 -511
  223. data/man/man5/puppet.conf.5 +75 -10
  224. data/man/man8/puppet-agent.8 +7 -7
  225. data/man/man8/puppet-apply.8 +1 -1
  226. data/man/man8/puppet-catalog.8 +1 -1
  227. data/man/man8/puppet-config.8 +1 -1
  228. data/man/man8/puppet-describe.8 +1 -1
  229. data/man/man8/puppet-device.8 +2 -2
  230. data/man/man8/puppet-doc.8 +1 -1
  231. data/man/man8/puppet-epp.8 +1 -1
  232. data/man/man8/puppet-facts.8 +1 -1
  233. data/man/man8/puppet-filebucket.8 +17 -2
  234. data/man/man8/puppet-generate.8 +1 -1
  235. data/man/man8/puppet-help.8 +6 -3
  236. data/man/man8/puppet-key.8 +1 -1
  237. data/man/man8/puppet-lookup.8 +2 -2
  238. data/man/man8/puppet-man.8 +1 -1
  239. data/man/man8/puppet-module.8 +4 -1
  240. data/man/man8/puppet-node.8 +1 -1
  241. data/man/man8/puppet-parser.8 +1 -1
  242. data/man/man8/puppet-plugin.8 +1 -1
  243. data/man/man8/puppet-report.8 +1 -1
  244. data/man/man8/puppet-resource.8 +1 -1
  245. data/man/man8/puppet-script.8 +1 -1
  246. data/man/man8/puppet-ssl.8 +2 -2
  247. data/man/man8/puppet-status.8 +1 -1
  248. data/man/man8/puppet.8 +2 -2
  249. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  250. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  251. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  252. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  253. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  254. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  255. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  256. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  257. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  258. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  259. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  260. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  261. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  262. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -67
  263. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +1 -69
  264. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -69
  265. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -67
  266. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -65
  267. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -67
  268. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +1 -67
  269. data/spec/integration/application/agent_spec.rb +475 -0
  270. data/spec/integration/application/apply_spec.rb +279 -150
  271. data/spec/integration/application/config_spec.rb +74 -0
  272. data/spec/integration/application/doc_spec.rb +16 -6
  273. data/spec/integration/application/filebucket_spec.rb +239 -0
  274. data/spec/integration/application/help_spec.rb +42 -0
  275. data/spec/integration/application/lookup_spec.rb +13 -0
  276. data/spec/integration/application/module_spec.rb +68 -0
  277. data/spec/integration/application/plugin_spec.rb +123 -0
  278. data/spec/integration/data_binding_spec.rb +82 -0
  279. data/spec/integration/defaults_spec.rb +1 -2
  280. data/spec/integration/directory_environments_spec.rb +17 -17
  281. data/spec/integration/http/client_spec.rb +47 -37
  282. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  283. data/spec/integration/indirector/report/yaml.rb +83 -0
  284. data/spec/integration/network/http_pool_spec.rb +93 -20
  285. data/spec/integration/node/environment_spec.rb +15 -0
  286. data/spec/integration/parser/compiler_spec.rb +11 -0
  287. data/spec/integration/type/file_spec.rb +1 -1
  288. data/spec/integration/util/execution_spec.rb +22 -0
  289. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  290. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  291. data/spec/integration/util/windows/process_spec.rb +26 -32
  292. data/spec/integration/util/windows/registry_spec.rb +7 -7
  293. data/spec/integration/util/windows/user_spec.rb +47 -5
  294. data/spec/integration/util_spec.rb +7 -33
  295. data/spec/lib/puppet/test_ca.rb +2 -2
  296. data/spec/lib/puppet_spec/https.rb +16 -7
  297. data/spec/lib/puppet_spec/matchers.rb +0 -80
  298. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  299. data/spec/shared_contexts/https.rb +29 -0
  300. data/spec/unit/agent_spec.rb +80 -26
  301. data/spec/unit/application/agent_spec.rb +12 -9
  302. data/spec/unit/application/describe_spec.rb +88 -50
  303. data/spec/unit/application/device_spec.rb +2 -2
  304. data/spec/unit/application/face_base_spec.rb +6 -4
  305. data/spec/unit/application/facts_spec.rb +39 -10
  306. data/spec/unit/application/filebucket_spec.rb +22 -2
  307. data/spec/unit/application/man_spec.rb +52 -0
  308. data/spec/unit/application/resource_spec.rb +3 -1
  309. data/spec/unit/application/ssl_spec.rb +15 -2
  310. data/spec/unit/configurer/downloader_spec.rb +10 -0
  311. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  312. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  313. data/spec/unit/configurer_spec.rb +64 -46
  314. data/spec/unit/confine_spec.rb +2 -1
  315. data/spec/unit/context/trusted_information_spec.rb +25 -2
  316. data/spec/unit/daemon_spec.rb +5 -64
  317. data/spec/unit/defaults_spec.rb +24 -1
  318. data/spec/unit/environments_spec.rb +8 -0
  319. data/spec/unit/face/config_spec.rb +3 -1
  320. data/spec/unit/face/module/search_spec.rb +17 -0
  321. data/spec/unit/face/plugin_spec.rb +12 -10
  322. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  323. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  324. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  325. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  326. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  327. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  328. data/spec/unit/file_system_spec.rb +10 -0
  329. data/spec/unit/functions/lookup_spec.rb +13 -0
  330. data/spec/unit/http/client_spec.rb +321 -36
  331. data/spec/unit/http/external_client_spec.rb +201 -0
  332. data/spec/unit/http/resolver_spec.rb +34 -3
  333. data/spec/unit/http/response_spec.rb +75 -0
  334. data/spec/unit/http/service/ca_spec.rb +53 -12
  335. data/spec/unit/http/service/compiler_spec.rb +332 -28
  336. data/spec/unit/http/service/file_server_spec.rb +100 -12
  337. data/spec/unit/http/service/report_spec.rb +19 -9
  338. data/spec/unit/http/service_spec.rb +94 -6
  339. data/spec/unit/http/session_spec.rb +159 -8
  340. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  341. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  342. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  343. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  344. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  345. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  346. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  347. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  348. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  349. data/spec/unit/indirector/request_spec.rb +1 -1
  350. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  351. data/spec/unit/indirector/rest_spec.rb +13 -0
  352. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  353. data/spec/unit/interface_spec.rb +3 -3
  354. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  355. data/spec/unit/network/format_support_spec.rb +3 -2
  356. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  357. data/spec/unit/network/http/connection_spec.rb +552 -190
  358. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  359. data/spec/unit/network/http/pool_spec.rb +59 -13
  360. data/spec/unit/network/http_pool_spec.rb +63 -57
  361. data/spec/unit/network/http_spec.rb +1 -1
  362. data/spec/unit/node/environment_spec.rb +33 -0
  363. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  364. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  365. data/spec/unit/parser/scope_spec.rb +1 -1
  366. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  367. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  368. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  369. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  370. data/spec/unit/provider/group/groupadd_spec.rb +22 -8
  371. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  372. data/spec/unit/provider/package/aix_spec.rb +29 -0
  373. data/spec/unit/provider/package/apt_spec.rb +107 -0
  374. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  375. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  376. data/spec/unit/provider/package/gem_spec.rb +40 -0
  377. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  378. data/spec/unit/provider/package/pip_spec.rb +68 -19
  379. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  380. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  381. data/spec/unit/provider/package/portage_spec.rb +5 -0
  382. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  383. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  384. data/spec/unit/provider/package/yum_spec.rb +243 -1
  385. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  386. data/spec/unit/provider/service/init_spec.rb +42 -0
  387. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  388. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  389. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  390. data/spec/unit/provider/service/systemd_spec.rb +93 -18
  391. data/spec/unit/provider/service/windows_spec.rb +50 -14
  392. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  393. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  394. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  395. data/spec/unit/puppet_pal_2pec.rb +11 -0
  396. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  397. data/spec/unit/puppet_spec.rb +33 -0
  398. data/spec/unit/reports/http_spec.rb +70 -52
  399. data/spec/unit/reports/store_spec.rb +17 -13
  400. data/spec/unit/resource_spec.rb +3 -3
  401. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  402. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  403. data/spec/unit/ssl/host_spec.rb +4 -2
  404. data/spec/unit/ssl/oids_spec.rb +1 -0
  405. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  406. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  407. data/spec/unit/test/test_helper_spec.rb +17 -0
  408. data/spec/unit/transaction/persistence_spec.rb +15 -0
  409. data/spec/unit/transaction/report_spec.rb +5 -1
  410. data/spec/unit/transaction_spec.rb +0 -2
  411. data/spec/unit/type/file/ensure_spec.rb +1 -2
  412. data/spec/unit/type/file/source_spec.rb +89 -38
  413. data/spec/unit/type/file_spec.rb +122 -96
  414. data/spec/unit/type/service_spec.rb +218 -8
  415. data/spec/unit/type/user_spec.rb +32 -3
  416. data/spec/unit/type_spec.rb +50 -0
  417. data/spec/unit/util/at_fork_spec.rb +3 -2
  418. data/spec/unit/util/autoload_spec.rb +2 -1
  419. data/spec/unit/util/character_encoding_spec.rb +4 -4
  420. data/spec/unit/util/checksums_spec.rb +16 -0
  421. data/spec/unit/util/command_line_spec.rb +11 -6
  422. data/spec/unit/util/log/destinations_spec.rb +1 -29
  423. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  424. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  425. data/spec/unit/util/package/version/range_spec.rb +175 -0
  426. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  427. data/spec/unit/util/pidlock_spec.rb +102 -54
  428. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  429. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util/windows/sid_spec.rb +2 -2
  433. data/spec/unit/util_spec.rb +3 -3
  434. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  435. data/tasks/generate_cert_fixtures.rake +15 -1
  436. data/tasks/manpages.rake +5 -35
  437. metadata +84 -52
  438. data/COMMITTERS.md +0 -244
  439. data/spec/integration/faces/config_spec.rb +0 -91
  440. data/spec/integration/faces/documentation_spec.rb +0 -57
  441. data/spec/integration/faces/plugin_spec.rb +0 -61
  442. data/spec/integration/file_bucket/file_spec.rb +0 -50
  443. data/spec/integration/file_serving/content_spec.rb +0 -7
  444. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  445. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  446. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  447. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  448. data/spec/integration/module_tool/forge_spec.rb +0 -64
  449. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  450. data/spec/integration/provider/service/init_spec.rb +0 -48
  451. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  452. data/spec/integration/provider/service/windows_spec.rb +0 -50
  453. data/spec/integration/reference/providers_spec.rb +0 -21
  454. data/spec/integration/reports_spec.rb +0 -13
  455. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  456. data/spec/integration/ssl/host_spec.rb +0 -72
  457. data/spec/integration/ssl/key_spec.rb +0 -99
  458. data/spec/integration/test/test_helper_spec.rb +0 -31
  459. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  460. data/spec/unit/face/man_spec.rb +0 -25
  461. data/spec/unit/man_spec.rb +0 -31
@@ -0,0 +1,201 @@
1
+ require 'spec_helper'
2
+ require 'puppet/http'
3
+
4
+ # Simple "external" client to make get & post requests. This is used
5
+ # to test the old HTTP API, such as requiring use_ssl and basic_auth
6
+ # to be passed as options.
7
+ class Puppet::HTTP::TestExternal
8
+ def initialize(host, port, options = {})
9
+ @host = host
10
+ @port = port
11
+ @options = options
12
+ @factory = Puppet::Network::HTTP::Factory.new
13
+ end
14
+
15
+ def get(path, headers = {}, options = {})
16
+ request = Net::HTTP::Get.new(path, headers)
17
+ do_request(request, options)
18
+ end
19
+
20
+ def post(path, data, headers = nil, options = {})
21
+ request = Net::HTTP::Post.new(path, headers)
22
+ do_request(request, options)
23
+ end
24
+
25
+ def do_request(request, options)
26
+ if options[:basic_auth]
27
+ request.basic_auth(options[:basic_auth][:user], options[:basic_auth][:password])
28
+ end
29
+
30
+ site = Puppet::Network::HTTP::Site.new(@options[:use_ssl] ? 'https' : 'http', @host, @port)
31
+ http = @factory.create_connection(site)
32
+ http.start
33
+ begin
34
+ http.request(request)
35
+ ensure
36
+ http.finish
37
+ end
38
+ end
39
+ end
40
+
41
+ describe Puppet::HTTP::ExternalClient do
42
+ let(:uri) { URI.parse('https://www.example.com') }
43
+ let(:http_client_class) { Puppet::HTTP::TestExternal }
44
+ let(:client) { described_class.new(http_client_class) }
45
+ let(:credentials) { ['user', 'pass'] }
46
+
47
+ context "for GET requests" do
48
+ it "stringifies keys and encodes values in the query" do
49
+ stub_request(:get, uri).with(query: "foo=bar%3Dbaz")
50
+
51
+ client.get(uri, params: {:foo => "bar=baz"})
52
+ end
53
+
54
+ it "fails if a user passes in an invalid param type" do
55
+ environment = Puppet::Node::Environment.create(:testing, [])
56
+
57
+ expect{client.get(uri, params: {environment: environment})}.to raise_error(Puppet::HTTP::SerializationError, /HTTP REST queries cannot handle values of type/)
58
+ end
59
+
60
+ it "returns the response" do
61
+ stub_request(:get, uri)
62
+
63
+ response = client.get(uri)
64
+ expect(response).to be_an_instance_of(Puppet::HTTP::Response)
65
+ expect(response).to be_success
66
+ expect(response.code).to eq(200)
67
+ end
68
+
69
+ it "returns the entire response body" do
70
+ stub_request(:get, uri).to_return(body: "abc")
71
+
72
+ expect(client.get(uri).body).to eq("abc")
73
+ end
74
+
75
+ it "streams the response body when a block is given" do
76
+ stub_request(:get, uri).to_return(body: "abc")
77
+
78
+ io = StringIO.new
79
+ client.get(uri) do |response|
80
+ response.read_body do |data|
81
+ io.write(data)
82
+ end
83
+ end
84
+
85
+ expect(io.string).to eq("abc")
86
+ end
87
+
88
+ context 'when connecting' do
89
+ it 'accepts an ssl context' do
90
+ stub_request(:get, uri).to_return(body: "abc")
91
+
92
+ other_context = Puppet::SSL::SSLContext.new
93
+
94
+ client.get(uri, options: {ssl_context: other_context})
95
+ end
96
+
97
+ it 'accepts include_system_store' do
98
+ stub_request(:get, uri).to_return(body: "abc")
99
+
100
+ client.get(uri, options: {include_system_store: true})
101
+ end
102
+ end
103
+ end
104
+
105
+ context "for POST requests" do
106
+ it "stringifies keys and encodes values in the query" do
107
+ stub_request(:post, "https://www.example.com").with(query: "foo=bar%3Dbaz")
108
+
109
+ client.post(uri, "", params: {:foo => "bar=baz"}, headers: {'Content-Type' => 'text/plain'})
110
+ end
111
+
112
+ it "returns the response" do
113
+ stub_request(:post, uri)
114
+
115
+ response = client.post(uri, "", headers: {'Content-Type' => 'text/plain'})
116
+ expect(response).to be_an_instance_of(Puppet::HTTP::Response)
117
+ expect(response).to be_success
118
+ expect(response.code).to eq(200)
119
+ end
120
+
121
+ it "sets content-type for the body" do
122
+ stub_request(:post, uri).with(headers: {"Content-Type" => "text/plain"})
123
+
124
+ client.post(uri, "hello", headers: {'Content-Type' => 'text/plain'})
125
+ end
126
+
127
+ it "streams the response body when a block is given" do
128
+ stub_request(:post, uri).to_return(body: "abc")
129
+
130
+ io = StringIO.new
131
+ client.post(uri, "", headers: {'Content-Type' => 'text/plain'}) do |response|
132
+ response.read_body do |data|
133
+ io.write(data)
134
+ end
135
+ end
136
+
137
+ expect(io.string).to eq("abc")
138
+ end
139
+
140
+ it 'raises an ArgumentError if `body` is missing' do
141
+ expect {
142
+ client.post(uri, nil, headers: {'Content-Type' => 'text/plain'})
143
+ }.to raise_error(ArgumentError, /'post' requires a string 'body' argument/)
144
+ end
145
+
146
+ context 'when connecting' do
147
+ it 'accepts an ssl context' do
148
+ stub_request(:post, uri)
149
+
150
+ other_context = Puppet::SSL::SSLContext.new
151
+
152
+ client.post(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {ssl_context: other_context})
153
+ end
154
+
155
+ it 'accepts include_system_store' do
156
+ stub_request(:post, uri)
157
+
158
+ client.post(uri, "", headers: {'Content-Type' => 'text/plain'}, options: {include_system_store: true})
159
+ end
160
+ end
161
+ end
162
+
163
+ context "Basic Auth" do
164
+ it "submits credentials for GET requests" do
165
+ stub_request(:get, uri).with(basic_auth: credentials)
166
+
167
+ client.get(uri, options: {basic_auth: {user: 'user', password: 'pass'}})
168
+ end
169
+
170
+ it "submits credentials for POST requests" do
171
+ stub_request(:post, uri).with(basic_auth: credentials)
172
+
173
+ client.post(uri, "", options: {content_type: 'text/plain', basic_auth: {user: 'user', password: 'pass'}})
174
+ end
175
+
176
+ it "returns response containing access denied" do
177
+ stub_request(:get, uri).with(basic_auth: credentials).to_return(status: [403, "Ye Shall Not Pass"])
178
+
179
+ response = client.get(uri, options: { basic_auth: {user: 'user', password: 'pass'}})
180
+ expect(response.code).to eq(403)
181
+ expect(response.reason).to eq("Ye Shall Not Pass")
182
+ expect(response).to_not be_success
183
+ end
184
+
185
+ it 'includes basic auth if user is nil' do
186
+ stub_request(:get, uri).with do |req|
187
+ expect(req.headers).to include('Authorization')
188
+ end
189
+
190
+ client.get(uri, options: {basic_auth: {user: nil, password: 'pass'}})
191
+ end
192
+
193
+ it 'includes basic auth if password is nil' do
194
+ stub_request(:get, uri).with do |req|
195
+ expect(req.headers).to include('Authorization')
196
+ end
197
+
198
+ client.get(uri, options: {basic_auth: {user: 'user', password: nil}})
199
+ end
200
+ end
201
+ end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'webmock/rspec'
3
2
  require 'puppet/http'
4
3
 
5
4
  describe Puppet::HTTP::Resolver do
@@ -22,10 +21,11 @@ describe Puppet::HTTP::Resolver do
22
21
  end
23
22
 
24
23
  context 'when resolving using server_list' do
24
+ let(:subject) { Puppet::HTTP::Resolver::ServerList.new(client, server_list_setting: Puppet.settings.setting(:server_list), default_port: 8142, services: Puppet::HTTP::Service::SERVICE_NAMES) }
25
+
25
26
  before :each do
26
27
  Puppet[:server_list] = 'ca.example.com:8141,apple.example.com'
27
28
  end
28
- let(:subject) { Puppet::HTTP::Resolver::ServerList.new(client, server_list_setting: Puppet.settings.setting(:server_list), default_port: 8142, services: [:puppet, :ca]) }
29
29
 
30
30
  it 'returns a service based on the current server_list setting' do
31
31
  stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 200)
@@ -43,7 +43,18 @@ describe Puppet::HTTP::Resolver do
43
43
  expect(service.url.to_s).to eq("https://ca.example.com:8141/puppet-ca/v1")
44
44
  end
45
45
 
46
- it 'falls fails if no servers in server_list are accessible' do
46
+ it 'logs unsuccessful HTTP 500 responses' do
47
+ Puppet[:log_level] = "debug"
48
+
49
+ stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: [500, 'Internal Server Error'])
50
+ stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 200)
51
+
52
+ subject.resolve(session, :ca)
53
+
54
+ expect(@logs.map(&:message)).to include(/Puppet server ca.example.com:8141 is unavailable: 500 Internal Server Error/)
55
+ end
56
+
57
+ it 'fails if no servers in server_list are accessible' do
47
58
  stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 503)
48
59
  stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 503)
49
60
 
@@ -58,6 +69,26 @@ describe Puppet::HTTP::Resolver do
58
69
  expect(service).to be_an_instance_of(Puppet::HTTP::Service::Ca)
59
70
  expect(service.url.to_s).to eq("https://apple.example.com:8142/puppet-ca/v1")
60
71
  end
72
+
73
+ it 'resolves once per session' do
74
+ failed = stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 503)
75
+ passed = stub_request(:get, "https://apple.example.com:8142/status/v1/simple/master").to_return(status: 200)
76
+
77
+ service = subject.resolve(session, :puppet)
78
+ expect(service).to be_a(Puppet::HTTP::Service::Compiler)
79
+ expect(service.url.to_s).to eq("https://apple.example.com:8142/puppet/v3")
80
+
81
+ service = subject.resolve(session, :fileserver)
82
+ expect(service).to be_a(Puppet::HTTP::Service::FileServer)
83
+ expect(service.url.to_s).to eq("https://apple.example.com:8142/puppet/v3")
84
+
85
+ service = subject.resolve(session, :report)
86
+ expect(service).to be_a(Puppet::HTTP::Service::Report)
87
+ expect(service.url.to_s).to eq("https://apple.example.com:8142/puppet/v3")
88
+
89
+ expect(failed).to have_been_requested
90
+ expect(passed).to have_been_requested
91
+ end
61
92
  end
62
93
 
63
94
  context 'when resolving using SRV' do
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+ require 'puppet/http'
3
+
4
+ describe Puppet::HTTP::Response do
5
+ let(:uri) { URI.parse('https://www.example.com') }
6
+ let(:client) { Puppet::HTTP::Client.new }
7
+
8
+ it "returns the request URL" do
9
+ stub_request(:get, uri)
10
+
11
+ response = client.get(uri)
12
+ expect(response.url).to eq(uri)
13
+ end
14
+
15
+ it "returns the HTTP code" do
16
+ stub_request(:get, uri)
17
+
18
+ response = client.get(uri)
19
+ expect(response.code).to eq(200)
20
+ end
21
+
22
+ it "returns the HTTP reason string" do
23
+ stub_request(:get, uri).to_return(status: [418, "I'm a teapot"])
24
+
25
+ response = client.get(uri)
26
+ expect(response.reason).to eq("I'm a teapot")
27
+ end
28
+
29
+ it "returns the response body" do
30
+ stub_request(:get, uri).to_return(status: 200, body: "I'm the body")
31
+
32
+ response = client.get(uri)
33
+ expect(response.body).to eq("I'm the body")
34
+ end
35
+
36
+ it "streams the response body" do
37
+ stub_request(:get, uri).to_return(status: 200, body: "I'm the streaming body")
38
+
39
+ content = StringIO.new
40
+ client.get(uri) do |response|
41
+ response.read_body do |data|
42
+ content << data
43
+ end
44
+ end
45
+ expect(content.string).to eq("I'm the streaming body")
46
+ end
47
+
48
+ it "raises if a block isn't given when streaming" do
49
+ stub_request(:get, uri).to_return(status: 200, body: "")
50
+
51
+ expect {
52
+ client.get(uri) do |response|
53
+ response.read_body
54
+ end
55
+ }.to raise_error(Puppet::HTTP::HTTPError, %r{Request to https://www.example.com failed after .* seconds: A block is required})
56
+ end
57
+
58
+ it "returns success for all 2xx codes" do
59
+ stub_request(:get, uri).to_return(status: 202)
60
+
61
+ expect(client.get(uri)).to be_success
62
+ end
63
+
64
+ it "returns a header value" do
65
+ stub_request(:get, uri).to_return(status: 200, headers: { 'Content-Encoding' => 'gzip' })
66
+
67
+ expect(client.get(uri)['Content-Encoding']).to eq('gzip')
68
+ end
69
+
70
+ it "enumerates headers" do
71
+ stub_request(:get, uri).to_return(status: 200, headers: { 'Content-Encoding' => 'gzip' })
72
+
73
+ expect(client.get(uri).each_header.to_a).to eq([['content-encoding', 'gzip']])
74
+ end
75
+ end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
- require 'webmock/rspec'
3
2
  require 'puppet/http'
4
3
 
5
4
  describe Puppet::HTTP::Service::Ca do
6
5
  let(:ssl_context) { Puppet::SSL::SSLContext.new }
7
6
  let(:client) { Puppet::HTTP::Client.new(ssl_context: ssl_context) }
7
+ let(:session) { Puppet::HTTP::Session.new(client, []) }
8
8
  let(:subject) { client.create_session.route_to(:ca) }
9
9
 
10
10
  before :each do
@@ -23,15 +23,6 @@ describe Puppet::HTTP::Service::Ca do
23
23
 
24
24
  subject.get_certificate('ca')
25
25
  end
26
-
27
-
28
- it 'includes the X-Puppet-Profiling header when Puppet[:profile] is true' do
29
- stub_request(:get, uri).with(headers: {'X-Puppet-Version' => /./, 'User-Agent' => /./, 'X-Puppet-Profiling' => 'true'})
30
-
31
- Puppet[:profile] = true
32
-
33
- subject.get_certificate('ca')
34
- end
35
26
  end
36
27
 
37
28
  context 'when routing to the CA service' do
@@ -64,10 +55,27 @@ describe Puppet::HTTP::Service::Ca do
64
55
  let(:pem) { cert.to_pem }
65
56
  let(:url) { "https://www.example.com/puppet-ca/v1/certificate/ca" }
66
57
 
58
+ it 'includes headers set via the :http_extra_headers and :profile settings' do
59
+ stub_request(:get, url).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'})
60
+
61
+ Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
62
+ Puppet[:profile] = true
63
+
64
+ subject.get_certificate('ca')
65
+ end
66
+
67
67
  it 'gets a certificate from the "certificate" endpoint' do
68
68
  stub_request(:get, url).to_return(body: pem)
69
69
 
70
- expect(subject.get_certificate('ca')).to eq(pem)
70
+ _, body = subject.get_certificate('ca')
71
+ expect(body).to eq(pem)
72
+ end
73
+
74
+ it 'returns the request response' do
75
+ stub_request(:get, url).to_return(body: pem)
76
+
77
+ resp, _ = subject.get_certificate('ca')
78
+ expect(resp).to be_a(Puppet::HTTP::Response)
71
79
  end
72
80
 
73
81
  it 'accepts text/plain responses' do
@@ -94,10 +102,27 @@ describe Puppet::HTTP::Service::Ca do
94
102
  let(:pem) { crl.to_pem }
95
103
  let(:url) { "https://www.example.com/puppet-ca/v1/certificate_revocation_list/ca" }
96
104
 
105
+ it 'includes headers set via the :http_extra_headers and :profile settings' do
106
+ stub_request(:get, url).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'})
107
+
108
+ Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
109
+ Puppet[:profile] = true
110
+
111
+ subject.get_certificate_revocation_list
112
+ end
113
+
97
114
  it 'gets a CRL from "certificate_revocation_list" endpoint' do
98
115
  stub_request(:get, url).to_return(body: pem)
99
116
 
100
- expect(subject.get_certificate_revocation_list).to eq(pem)
117
+ _, body = subject.get_certificate_revocation_list
118
+ expect(body).to eq(pem)
119
+ end
120
+
121
+ it 'returns the request response' do
122
+ stub_request(:get, url).to_return(body: pem)
123
+
124
+ resp, _ = subject.get_certificate_revocation_list
125
+ expect(resp).to be_a(Puppet::HTTP::Response)
101
126
  end
102
127
 
103
128
  it 'accepts text/plain responses' do
@@ -136,12 +161,28 @@ describe Puppet::HTTP::Service::Ca do
136
161
  let(:pem) { request.to_pem }
137
162
  let(:url) { "https://www.example.com/puppet-ca/v1/certificate_request/infinity" }
138
163
 
164
+ it 'includes headers set via the :http_extra_headers and :profile settings' do
165
+ stub_request(:put, url).with(headers: {'Example-Header' => 'real-thing', 'another' => 'thing', 'X-Puppet-Profiling' => 'true'})
166
+
167
+ Puppet[:http_extra_headers] = 'Example-Header:real-thing,another:thing'
168
+ Puppet[:profile] = true
169
+
170
+ subject.put_certificate_request('infinity', request)
171
+ end
172
+
139
173
  it 'submits a CSR to the "certificate_request" endpoint' do
140
174
  stub_request(:put, url).with(body: pem, headers: { 'Content-Type' => 'text/plain' })
141
175
 
142
176
  subject.put_certificate_request('infinity', request)
143
177
  end
144
178
 
179
+ it 'returns the request response' do
180
+ stub_request(:put, url).with(body: pem, headers: { 'Content-Type' => 'text/plain' })
181
+
182
+ resp = subject.put_certificate_request('infinity', request)
183
+ expect(resp).to be_a(Puppet::HTTP::Response)
184
+ end
185
+
145
186
  it 'raises response error if unsuccessful' do
146
187
  stub_request(:put, url).to_return(status: [400, 'Bad Request'])
147
188