puppet 6.13.0 → 6.18.0

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 (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
@@ -179,37 +179,78 @@ describe Puppet::Agent do
179
179
  expect(@agent.run).to eq(:result)
180
180
  end
181
181
 
182
+ describe "and a puppet agent is already running" do
183
+ before(:each) do
184
+ allow_any_instance_of(Object).to receive(:sleep)
185
+ lockfile = double('lockfile')
186
+ expect(@agent).to receive(:lockfile).and_return(lockfile).at_least(:once)
187
+ # so the lock method raises Puppet::LockError
188
+ allow(lockfile).to receive(:lock).and_return(false)
189
+ end
190
+
191
+ it "should notify that a run is already in progres" do
192
+ client = AgentTestClient.new
193
+ expect(AgentTestClient).to receive(:new).and_return(client)
194
+ expect(Puppet).to receive(:notice).with(/Run of .* already in progress; skipping .* exists/)
195
+ @agent.run
196
+ end
197
+
198
+ it "should inform that a run is already in progres and try to run every X seconds if waitforlock is used" do
199
+ # so the locked file exists
200
+ allow(File).to receive(:file?).and_return(true)
201
+ # so we don't have to wait again for the run to exit (default maxwaitforcert is 60)
202
+ # first 0 is to get the time, second 0 is to inform user, then 1000 so the time expires
203
+ allow(Time).to receive(:now).and_return(0, 0, 1000)
204
+ allow(Puppet).to receive(:info)
205
+ client = AgentTestClient.new
206
+ expect(AgentTestClient).to receive(:new).and_return(client)
207
+
208
+ Puppet[:waitforlock] = 1
209
+ Puppet[:maxwaitforlock] = 2
210
+ expect(Puppet).to receive(:info).with(/Another puppet instance is already running; --waitforlock flag used, waiting for running instance to finish./)
211
+ expect(Puppet).to receive(:info).with(/Will try again in #{Puppet[:waitforlock]} seconds./)
212
+ @agent.run
213
+ end
214
+
215
+ it "should notify that the run is exiting if waitforlock is used and maxwaitforlock is exceeded" do
216
+ # so we don't have to wait again for the run to exit (default maxwaitforcert is 60)
217
+ # first 0 is to get the time, then 1000 so that the time expires
218
+ allow(Time).to receive(:now).and_return(0, 1000)
219
+ client = AgentTestClient.new
220
+ expect(AgentTestClient).to receive(:new).and_return(client)
221
+
222
+ Puppet[:waitforlock] = 1
223
+ expect(Puppet).to receive(:notice).with(/Exiting now because the maxwaitforlock timeout has been exceeded./)
224
+ @agent.run
225
+ end
226
+ end
227
+
182
228
  describe "when should_fork is true", :if => Puppet.features.posix? && RUBY_PLATFORM != 'java' do
183
229
  before do
184
230
  @agent = Puppet::Agent.new(AgentTestClient, true)
185
231
 
186
232
  # So we don't actually try to hit the filesystem.
187
233
  allow(@agent).to receive(:lock).and_yield
188
-
189
- allow(Kernel).to receive(:fork)
190
- allow(Process).to receive(:waitpid2).and_return([123, double('process::status', :exitstatus => 0)])
191
- allow(@agent).to receive(:exit)
192
234
  end
193
235
 
194
236
  it "should run the agent in a forked process" do
195
237
  client = AgentTestClient.new
196
238
  expect(AgentTestClient).to receive(:new).and_return(client)
197
239
 
198
- expect(client).to receive(:run)
240
+ expect(client).to receive(:run).and_return(0)
199
241
 
200
242
  expect(Kernel).to receive(:fork).and_yield
201
- @agent.run
243
+ expect { @agent.run }.to exit_with(0)
202
244
  end
203
245
 
204
246
  it "should exit child process if child exit" do
205
247
  client = AgentTestClient.new
206
248
  expect(AgentTestClient).to receive(:new).and_return(client)
207
249
 
208
- expect(client).to receive(:run).and_raise(SystemExit)
250
+ expect(client).to receive(:run).and_raise(SystemExit.new(-1))
209
251
 
210
252
  expect(Kernel).to receive(:fork).and_yield
211
- expect(@agent).to receive(:exit).with(-1)
212
- @agent.run
253
+ expect { @agent.run }.to exit_with(-1)
213
254
  end
214
255
 
215
256
  it 'should exit with 1 if an exception is raised' do
@@ -219,31 +260,44 @@ describe Puppet::Agent do
219
260
  expect(client).to receive(:run).and_raise(StandardError)
220
261
 
221
262
  expect(Kernel).to receive(:fork).and_yield
222
- expect(@agent).to receive(:exit).with(1)
223
- @agent.run
263
+ expect { @agent.run }.to exit_with(1)
224
264
  end
225
265
 
226
- it "should re-raise exit happening in the child" do
227
- allow(Process).to receive(:waitpid2).and_return([123, double('process::status', :exitstatus => -1)])
228
- expect { @agent.run }.to raise_error(SystemExit)
266
+ it 'should exit with 254 if NoMemoryError exception is raised' do
267
+ client = AgentTestClient.new
268
+ expect(AgentTestClient).to receive(:new).and_return(client)
269
+
270
+ expect(client).to receive(:run).and_raise(NoMemoryError)
271
+
272
+ expect(Kernel).to receive(:fork).and_yield
273
+ expect { @agent.run }.to exit_with(254)
229
274
  end
230
275
 
231
- it "should re-raise NoMoreMemory happening in the child" do
232
- allow(Process).to receive(:waitpid2).and_return([123, double('process::status', :exitstatus => -2)])
233
- expect { @agent.run }.to raise_error(NoMemoryError)
276
+ it "should return the block exit code as the child exit code" do
277
+ expect(Kernel).to receive(:fork).and_yield
278
+ expect {
279
+ @agent.run_in_fork {
280
+ 777
281
+ }
282
+ }.to exit_with(777)
234
283
  end
235
284
 
236
- it "should return the child exit code" do
237
- allow(Process).to receive(:waitpid2).and_return([123, double('process::status', :exitstatus => 777)])
238
- expect(@agent.run).to eq(777)
285
+ it "should return `1` exit code if the block returns `nil`" do
286
+ expect(Kernel).to receive(:fork).and_yield
287
+ expect {
288
+ @agent.run_in_fork {
289
+ nil
290
+ }
291
+ }.to exit_with(1)
239
292
  end
240
293
 
241
- it "should return the block exit code as the child exit code" do
294
+ it "should return `1` exit code if the block returns `false`" do
242
295
  expect(Kernel).to receive(:fork).and_yield
243
- expect(@agent).to receive(:exit).with(777)
244
- @agent.run_in_fork {
245
- 777
246
- }
296
+ expect {
297
+ @agent.run_in_fork {
298
+ false
299
+ }
300
+ }.to exit_with(1)
247
301
  end
248
302
  end
249
303
 
@@ -283,7 +337,7 @@ describe Puppet::Agent do
283
337
  expect(client).not_to receive(:handling)
284
338
  expect(Puppet).to receive(:log_exception).with(be_an_instance_of(Puppet::Agent::RunTimeoutError), anything)
285
339
 
286
- expect(@agent.run).to eq(1)
340
+ expect(@agent.run).to eq(nil)
287
341
  end
288
342
  end
289
343
  end
@@ -12,16 +12,16 @@ describe Puppet::Application::Agent do
12
12
  before :each do
13
13
  @puppetd = Puppet::Application[:agent]
14
14
 
15
- @daemon = Puppet::Daemon.new(nil)
15
+ @agent = double('agent')
16
+ allow(Puppet::Agent).to receive(:new).and_return(@agent)
17
+
18
+ @daemon = Puppet::Daemon.new(@agent, nil)
16
19
  allow(@daemon).to receive(:daemonize)
17
20
  allow(@daemon).to receive(:start)
18
21
  allow(@daemon).to receive(:stop)
19
22
  allow(Puppet::Daemon).to receive(:new).and_return(@daemon)
20
23
  Puppet[:daemonize] = false
21
24
 
22
- @agent = double('agent')
23
- allow(Puppet::Agent).to receive(:new).and_return(@agent)
24
-
25
25
  @puppetd.preinit
26
26
  allow(Puppet::Util::Log).to receive(:newdestination)
27
27
 
@@ -122,6 +122,10 @@ describe Puppet::Application::Agent do
122
122
  end
123
123
  end
124
124
 
125
+ it "should log the agent start time" do
126
+ expect(@puppetd.options[:start_time]).to be_a(Time)
127
+ end
128
+
125
129
  it "should set waitforcert to 0 with --onetime and if --waitforcert wasn't given" do
126
130
  allow(@agent).to receive(:run).and_return(2)
127
131
  Puppet[:onetime] = true
@@ -505,7 +509,7 @@ describe Puppet::Application::Agent do
505
509
 
506
510
  it "should run the agent with the supplied job_id" do
507
511
  @puppetd.options[:job_id] = 'special id'
508
- expect(@agent).to receive(:run).with(:job_id => 'special id').and_return(:report)
512
+ expect(@agent).to receive(:run).with(hash_including(:job_id => 'special id')).and_return(:report)
509
513
 
510
514
  expect { execute_agent }.to exit_with 0
511
515
  end
@@ -567,10 +571,9 @@ describe Puppet::Application::Agent do
567
571
  allow_any_instance_of(Puppet::X509::CertProvider).to receive(:load_request).and_return(nil)
568
572
 
569
573
  expect {
570
- expect {
571
- @puppetd.fingerprint
572
- }.to exit_with(1)
573
- }.to output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
574
+ @puppetd.fingerprint
575
+ }.to exit_with(1)
576
+ .and output(/Fingerprint asked but neither the certificate, nor the certificate request have been issued/).to_stderr
574
577
  end
575
578
 
576
579
  it "should log an error if an exception occurs" do
@@ -3,95 +3,133 @@ require 'spec_helper'
3
3
  require 'puppet/application/describe'
4
4
 
5
5
  describe Puppet::Application::Describe do
6
- before :each do
7
- @describe = Puppet::Application[:describe]
8
- end
6
+ let(:describe) { Puppet::Application[:describe] }
7
+
8
+ it "lists all types" do
9
+ describe.command_line.args << '--list'
9
10
 
10
- it "should declare a main command" do
11
- expect(@describe).to respond_to(:main)
11
+ expect {
12
+ describe.run
13
+ }.to output(/These are the types known to puppet:/).to_stdout
12
14
  end
13
15
 
14
- it "should declare a preinit block" do
15
- expect(@describe).to respond_to(:preinit)
16
+ it "describes a single type" do
17
+ describe.command_line.args << 'exec'
18
+
19
+ expect {
20
+ describe.run
21
+ }.to output(/exec.*====.*Executes external commands/m).to_stdout
16
22
  end
17
23
 
18
- [:providers,:list,:meta].each do |option|
19
- it "should declare handle_#{option} method" do
20
- expect(@describe).to respond_to("handle_#{option}".to_sym)
21
- end
24
+ it "describes multiple types" do
25
+ describe.command_line.args.concat(['exec', 'file'])
22
26
 
23
- it "should store argument value when calling handle_#{option}" do
24
- expect(@describe.options).to receive(:[]=).with("#{option}".to_sym, 'arg')
25
- @describe.send("handle_#{option}".to_sym, 'arg')
26
- end
27
+ expect {
28
+ describe.run
29
+ }.to output(/Executes external commands.*Manages files, including their content, ownership, and permissions./m).to_stdout
27
30
  end
28
31
 
32
+ it "describes parameters for the type by default" do
33
+ describe.command_line.args << 'exec'
29
34
 
30
- describe "in preinit" do
31
- it "should set options[:parameters] to true" do
32
- @describe.preinit
35
+ expect {
36
+ describe.run
37
+ }.to output(/Parameters\n----------/m).to_stdout
38
+ end
33
39
 
34
- expect(@describe.options[:parameters]).to be_truthy
35
- end
40
+ it "lists parameter names, but excludes description in short mode" do
41
+ describe.command_line.args.concat(['exec', '-s'])
42
+
43
+ expect {
44
+ describe.run
45
+ }.to output(/Parameters.*command, creates, cwd/m).to_stdout
36
46
  end
37
47
 
38
- describe "when handling parameters" do
39
- it "should set options[:parameters] to false" do
40
- @describe.handle_short(nil)
48
+ it "outputs providers for the type" do
49
+ describe.command_line.args.concat(['exec', '--providers'])
41
50
 
42
- expect(@describe.options[:parameters]).to be_falsey
43
- end
51
+ expect {
52
+ describe.run
53
+ }.to output(/Providers.*#{Regexp.escape('**posix**')}.*#{Regexp.escape('**windows**')}/m).to_stdout
44
54
  end
45
55
 
46
- describe "during setup" do
47
- it "should collect arguments in options[:types]" do
48
- allow(@describe.command_line).to receive(:args).and_return(['1','2'])
49
- @describe.setup
56
+ it "lists metaparameters for a type" do
57
+ describe.command_line.args.concat(['exec', '--meta'])
50
58
 
51
- expect(@describe.options[:types]).to eq(['1','2'])
52
- end
59
+ expect {
60
+ describe.run
61
+ }.to output(/Meta Parameters.*#{Regexp.escape('**notify**')}/m).to_stdout
53
62
  end
54
63
 
55
- describe "when running" do
64
+ it "outputs no documentation if the summary is missing" do
65
+ Puppet::Type.newtype(:describe_test) {}
66
+
67
+ describe.command_line.args << '--list'
68
+ expect {
69
+ describe.run
70
+ }.to output(/#{Regexp.escape("describe_test - .. no documentation ..")}/).to_stdout
71
+ end
56
72
 
57
- before :each do
58
- @typedoc = double('type_doc')
59
- allow(TypeDoc).to receive(:new).and_return(@typedoc)
73
+ it "outputs the first short sentence ending in a dot" do
74
+ Puppet::Type.newtype(:describe_test) do
75
+ @doc = "ends in a dot."
60
76
  end
61
77
 
62
- it "should call list_types if options list is set" do
63
- @describe.options[:list] = true
78
+ describe.command_line.args << '--list'
79
+ expect {
80
+ describe.run
81
+ }.to output(/#{Regexp.escape("describe_test - ends in a dot\n")}/).to_stdout
82
+ end
64
83
 
65
- expect(@typedoc).to receive(:list_types)
84
+ it "outputs the first short sentence missing a dot" do
85
+ Puppet::Type.newtype(:describe_test) do
86
+ @doc = "missing a dot"
87
+ end
66
88
 
67
- @describe.run_command
89
+ describe.command_line.args << '--list'
90
+ expect {
91
+ describe.run
92
+ }.to output(/describe_test - missing a dot\n/).to_stdout
93
+ end
94
+
95
+ it "truncates long summaries ending in a dot" do
96
+ Puppet::Type.newtype(:describe_test) do
97
+ @doc = "This sentence is more than 45 characters and ends in a dot."
68
98
  end
69
99
 
70
- it "should call format_type for each given types" do
71
- @describe.options[:list] = false
72
- @describe.options[:types] = ['type']
100
+ describe.command_line.args << '--list'
101
+ expect {
102
+ describe.run
103
+ }.to output(/#{Regexp.escape("describe_test - This sentence is more than 45 characters and ...")}/).to_stdout
104
+ end
73
105
 
74
- expect(@typedoc).to receive(:format_type).with('type', @describe.options)
75
- @describe.run_command
106
+ it "truncates long summaries missing a dot" do
107
+ Puppet::Type.newtype(:describe_test) do
108
+ @doc = "This sentence is more than 45 characters and is missing a dot"
76
109
  end
110
+
111
+ describe.command_line.args << '--list'
112
+ expect {
113
+ describe.run
114
+ }.to output(/#{Regexp.escape("describe_test - This sentence is more than 45 characters and ...")}/).to_stdout
77
115
  end
78
116
 
79
- it "should format text with long non-space runs without garbling" do
80
- @f = Formatter.new(76)
117
+ it "formats text with long non-space runs without garbling" do
118
+ f = Formatter.new(76)
81
119
 
82
- @teststring = <<TESTSTRING
120
+ teststring = <<TESTSTRING
83
121
  . 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 nick@magpie.puppetlabs.lan
84
122
  **this part should not repeat!**
85
123
  TESTSTRING
86
124
 
87
- @expected_result = <<EXPECTED
125
+ expected_result = <<EXPECTED
88
126
  .
89
127
  1234567890123456789012345678901234567890123456789012345678901234567890123456
90
128
  7890123456789012345678901234567890 nick@magpie.puppetlabs.lan
91
129
  **this part should not repeat!**
92
130
  EXPECTED
93
131
 
94
- result = @f.wrap(@teststring, {:indent => 0, :scrub => true})
95
- expect(result).to eql(@expected_result)
132
+ result = f.wrap(teststring, {:indent => 0, :scrub => true})
133
+ expect(result).to eql(expected_result)
96
134
  end
97
135
  end
@@ -459,7 +459,7 @@ describe Puppet::Application::Device do
459
459
  resource = Puppet::Type.type(:user).new(:name => "jim").to_resource
460
460
  allow(device.command_line).to receive(:args).and_return(['user', 'jim'])
461
461
  expect(Puppet::Resource.indirection).to receive(:find).with('user/jim').and_return(resource)
462
- expect(device).to receive(:puts).with("user { 'jim':\n}")
462
+ expect(device).to receive(:puts).with("user { 'jim':\n ensure => 'absent',\n}")
463
463
  expect { device.main }.to exit_with 0
464
464
  end
465
465
 
@@ -470,7 +470,7 @@ describe Puppet::Application::Device do
470
470
  allow(device.options).to receive(:[]).with(:to_yaml).and_return(true)
471
471
  allow(device.command_line).to receive(:args).and_return(['user'])
472
472
  expect(Puppet::Resource.indirection).to receive(:search).with('user/', {}).and_return(resources)
473
- expect(device).to receive(:puts).with("---\nuser:\n title: {}\n")
473
+ expect(device).to receive(:puts).with("---\nuser:\n title:\n ensure: absent\n")
474
474
  expect { device.main }.to exit_with 0
475
475
  end
476
476
  end
@@ -423,16 +423,18 @@ EOT
423
423
  it "should work if asked to render json" do
424
424
  allow(app.command_line).to receive(:args).and_return(%w{count_args a b c --render-as json})
425
425
  expect {
426
- expect { app.run }.to exit_with(0)
427
- }.to have_printed(/3/)
426
+ app.run
427
+ }.to exit_with(0)
428
+ .and output(/3/).to_stdout
428
429
  end
429
430
 
430
431
  it "should invoke when_rendering hook 's' when asked to render-as 's'" do
431
432
  allow(app.command_line).to receive(:args).and_return(%w{with_s_rendering_hook --render-as s})
432
433
  app.action = app.face.get_action(:with_s_rendering_hook)
433
434
  expect {
434
- expect { app.run }.to exit_with(0)
435
- }.to have_printed(/you invoked the 's' rendering hook/)
435
+ app.run
436
+ }.to exit_with(0)
437
+ .and output(/you invoked the 's' rendering hook/).to_stdout
436
438
  end
437
439
  end
438
440
 
@@ -2,21 +2,50 @@ require 'spec_helper'
2
2
  require 'puppet/application/facts'
3
3
 
4
4
  describe Puppet::Application::Facts do
5
+ let(:app) { Puppet::Application[:facts] }
6
+ let(:values) { {"filesystems" => "apfs,autofs,devfs"} }
7
+
5
8
  before :each do
6
- allow(subject.command_line).to receive(:subcommand_name).and_return('facts')
9
+ Puppet::Node::Facts.indirection.terminus_class = :memory
7
10
  end
8
11
 
9
- it "should return facts if a key is given to find" do
10
- Puppet::Node::Facts.indirection.reset_terminus_class
11
- expect(Puppet::Node::Facts.indirection).to receive(:find).and_return(Puppet::Node::Facts.new('whatever', {}))
12
- allow(subject.command_line).to receive(:args).and_return(%w{find whatever --render-as yaml})
12
+ it "returns facts for a given node" do
13
+ facts = Puppet::Node::Facts.new('whatever', values)
14
+ Puppet::Node::Facts.indirection.save(facts)
15
+
16
+ app.command_line.args = %w{find whatever --render-as yaml}
17
+
18
+ # due to PUP-10105 we emit the class tag when we shouldn't
19
+ expected = Regexp.new(<<~END)
20
+ --- !ruby/object:Puppet::Node::Facts
21
+ name: whatever
22
+ values:
23
+ filesystems: apfs,autofs,devfs
24
+ END
13
25
 
14
26
  expect {
15
- expect {
16
- subject.run
17
- }.to exit_with(0)
18
- }.to have_printed(/object:Puppet::Node::Facts/)
27
+ app.run
28
+ }.to exit_with(0)
29
+ .and output(expected).to_stdout
30
+ end
19
31
 
20
- expect(@logs).to be_empty
32
+ it "returns facts for the current node when the name is omitted" do
33
+ facts = Puppet::Node::Facts.new(Puppet[:certname], values)
34
+ Puppet::Node::Facts.indirection.save(facts)
35
+
36
+ app.command_line.args = %w{find --render-as yaml}
37
+
38
+ # due to PUP-10105 we emit the class tag when we shouldn't
39
+ expected = Regexp.new(<<~END)
40
+ --- !ruby/object:Puppet::Node::Facts
41
+ name: #{Puppet[:certname]}
42
+ values:
43
+ filesystems: apfs,autofs,devfs
44
+ END
45
+
46
+ expect {
47
+ app.run
48
+ }.to exit_with(0)
49
+ .and output(expected).to_stdout
21
50
  end
22
51
  end