puppet 6.12.0-x64-mingw32 → 6.17.0-x64-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 (412) 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 +39 -36
  6. data/README.md +18 -25
  7. data/ext/project_data.yaml +1 -1
  8. data/ext/windows/service/daemon.rb +3 -3
  9. data/lib/puppet.rb +52 -13
  10. data/lib/puppet/agent.rb +20 -14
  11. data/lib/puppet/application/agent.rb +26 -17
  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/plugin.rb +1 -0
  16. data/lib/puppet/application/resource.rb +1 -1
  17. data/lib/puppet/application/ssl.rb +4 -4
  18. data/lib/puppet/configurer.rb +65 -69
  19. data/lib/puppet/configurer/plugin_handler.rb +10 -1
  20. data/lib/puppet/confine.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 +154 -58
  24. data/lib/puppet/environments.rb +27 -20
  25. data/lib/puppet/face/facts.rb +8 -5
  26. data/lib/puppet/face/help.rb +29 -3
  27. data/lib/puppet/face/module/search.rb +5 -0
  28. data/lib/puppet/face/plugin.rb +2 -2
  29. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  30. data/lib/puppet/file_serving/metadata.rb +4 -1
  31. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  32. data/lib/puppet/file_system/file_impl.rb +14 -10
  33. data/lib/puppet/file_system/memory_file.rb +6 -0
  34. data/lib/puppet/file_system/memory_impl.rb +13 -0
  35. data/lib/puppet/file_system/uniquefile.rb +12 -16
  36. data/lib/puppet/file_system/windows.rb +7 -10
  37. data/lib/puppet/forge.rb +1 -1
  38. data/lib/puppet/forge/cache.rb +1 -1
  39. data/lib/puppet/forge/repository.rb +4 -7
  40. data/lib/puppet/functions/call.rb +1 -1
  41. data/lib/puppet/functions/eyaml_lookup_key.rb +13 -8
  42. data/lib/puppet/functions/filter.rb +1 -0
  43. data/lib/puppet/functions/reduce.rb +2 -4
  44. data/lib/puppet/http.rb +5 -0
  45. data/lib/puppet/http/client.rb +293 -73
  46. data/lib/puppet/http/errors.rb +2 -0
  47. data/lib/puppet/http/external_client.rb +90 -0
  48. data/lib/puppet/http/redirector.rb +43 -7
  49. data/lib/puppet/http/resolver.rb +46 -3
  50. data/lib/puppet/http/resolver/server_list.rb +76 -16
  51. data/lib/puppet/http/resolver/settings.rb +23 -3
  52. data/lib/puppet/http/resolver/srv.rb +29 -3
  53. data/lib/puppet/http/response.rb +87 -1
  54. data/lib/puppet/http/retry_after_handler.rb +39 -0
  55. data/lib/puppet/http/service.rb +151 -7
  56. data/lib/puppet/http/service/ca.rb +76 -14
  57. data/lib/puppet/http/service/compiler.rb +319 -0
  58. data/lib/puppet/http/service/file_server.rb +206 -0
  59. data/lib/puppet/http/service/report.rb +49 -23
  60. data/lib/puppet/http/session.rb +103 -7
  61. data/lib/puppet/indirector.rb +1 -1
  62. data/lib/puppet/indirector/catalog/compiler.rb +10 -0
  63. data/lib/puppet/indirector/catalog/rest.rb +34 -0
  64. data/lib/puppet/indirector/facts/rest.rb +42 -0
  65. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  66. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  67. data/lib/puppet/indirector/file_content/http.rb +5 -0
  68. data/lib/puppet/indirector/file_content/rest.rb +30 -0
  69. data/lib/puppet/indirector/file_metadata/http.rb +27 -8
  70. data/lib/puppet/indirector/file_metadata/rest.rb +52 -0
  71. data/lib/puppet/indirector/json.rb +1 -1
  72. data/lib/puppet/indirector/msgpack.rb +1 -1
  73. data/lib/puppet/indirector/node/rest.rb +24 -0
  74. data/lib/puppet/indirector/report/rest.rb +19 -0
  75. data/lib/puppet/indirector/report/yaml.rb +23 -0
  76. data/lib/puppet/indirector/request.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +12 -0
  78. data/lib/puppet/indirector/status/rest.rb +18 -0
  79. data/lib/puppet/loaders.rb +6 -0
  80. data/lib/puppet/metatype/manager.rb +80 -80
  81. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  82. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  83. data/lib/puppet/network/http/base_pool.rb +7 -2
  84. data/lib/puppet/network/http/compression.rb +7 -0
  85. data/lib/puppet/network/http/connection.rb +6 -0
  86. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  87. data/lib/puppet/network/http/nocache_pool.rb +2 -0
  88. data/lib/puppet/network/http/pool.rb +13 -6
  89. data/lib/puppet/network/http_pool.rb +2 -1
  90. data/lib/puppet/node/environment.rb +11 -1
  91. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  92. data/lib/puppet/pal/pal_impl.rb +4 -29
  93. data/lib/puppet/parser/ast/leaf.rb +5 -5
  94. data/lib/puppet/parser/ast/pops_bridge.rb +6 -15
  95. data/lib/puppet/parser/compiler.rb +43 -33
  96. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  97. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  98. data/lib/puppet/parser/environment_compiler.rb +4 -1
  99. data/lib/puppet/parser/functions.rb +18 -13
  100. data/lib/puppet/parser/functions/filter.rb +1 -0
  101. data/lib/puppet/parser/resource.rb +3 -2
  102. data/lib/puppet/parser/resource/param.rb +6 -0
  103. data/lib/puppet/pops/evaluator/access_operator.rb +2 -2
  104. data/lib/puppet/pops/evaluator/evaluator_impl.rb +6 -6
  105. data/lib/puppet/pops/issues.rb +5 -0
  106. data/lib/puppet/pops/loader/puppet_plan_instantiator.rb +12 -3
  107. data/lib/puppet/pops/loaders.rb +7 -5
  108. data/lib/puppet/pops/parser/evaluating_parser.rb +5 -7
  109. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  110. data/lib/puppet/pops/types/p_object_type_extension.rb +10 -0
  111. data/lib/puppet/pops/types/type_calculator.rb +24 -0
  112. data/lib/puppet/pops/validation/checker4_0.rb +11 -1
  113. data/lib/puppet/pops/validation/tasks_checker.rb +5 -1
  114. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  115. data/lib/puppet/provider/aix_object.rb +4 -2
  116. data/lib/puppet/provider/group/aix.rb +1 -0
  117. data/lib/puppet/provider/group/groupadd.rb +57 -24
  118. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  119. data/lib/puppet/provider/package/aix.rb +17 -2
  120. data/lib/puppet/provider/package/apt.rb +78 -4
  121. data/lib/puppet/provider/package/aptitude.rb +1 -1
  122. data/lib/puppet/provider/package/dnfmodule.rb +69 -15
  123. data/lib/puppet/provider/package/dpkg.rb +14 -7
  124. data/lib/puppet/provider/package/fink.rb +20 -3
  125. data/lib/puppet/provider/package/gem.rb +41 -7
  126. data/lib/puppet/provider/package/openbsd.rb +13 -1
  127. data/lib/puppet/provider/package/pacman.rb +2 -5
  128. data/lib/puppet/provider/package/pip.rb +143 -48
  129. data/lib/puppet/provider/package/pip3.rb +0 -2
  130. data/lib/puppet/provider/package/pkg.rb +18 -5
  131. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  132. data/lib/puppet/provider/package/pkgng.rb +16 -4
  133. data/lib/puppet/provider/package/portage.rb +2 -2
  134. data/lib/puppet/provider/package/puppet_gem.rb +6 -2
  135. data/lib/puppet/provider/package/rpm.rb +6 -213
  136. data/lib/puppet/provider/package/yum.rb +109 -25
  137. data/lib/puppet/provider/package/zypper.rb +59 -1
  138. data/lib/puppet/provider/service/systemd.rb +22 -4
  139. data/lib/puppet/provider/service/windows.rb +23 -7
  140. data/lib/puppet/provider/user/aix.rb +1 -0
  141. data/lib/puppet/provider/user/directoryservice.rb +30 -5
  142. data/lib/puppet/provider/user/useradd.rb +22 -12
  143. data/lib/puppet/reports/http.rb +15 -9
  144. data/lib/puppet/reports/store.rb +1 -1
  145. data/lib/puppet/resource.rb +2 -1
  146. data/lib/puppet/resource/type.rb +8 -0
  147. data/lib/puppet/resource/type_collection.rb +20 -16
  148. data/lib/puppet/runtime.rb +31 -1
  149. data/lib/puppet/settings.rb +4 -0
  150. data/lib/puppet/settings/http_extra_headers_setting.rb +25 -0
  151. data/lib/puppet/ssl.rb +1 -0
  152. data/lib/puppet/ssl/certificate.rb +2 -1
  153. data/lib/puppet/ssl/host.rb +4 -4
  154. data/lib/puppet/ssl/oids.rb +1 -0
  155. data/lib/puppet/ssl/ssl_context.rb +2 -2
  156. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  157. data/lib/puppet/ssl/state_machine.rb +81 -35
  158. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  159. data/lib/puppet/test/test_helper.rb +15 -11
  160. data/lib/puppet/transaction/report.rb +2 -2
  161. data/lib/puppet/transaction/resource_harness.rb +1 -1
  162. data/lib/puppet/trusted_external.rb +29 -1
  163. data/lib/puppet/type.rb +18 -6
  164. data/lib/puppet/type/file.rb +51 -13
  165. data/lib/puppet/type/file/checksum.rb +4 -4
  166. data/lib/puppet/type/file/source.rb +51 -60
  167. data/lib/puppet/type/group.rb +2 -2
  168. data/lib/puppet/type/package.rb +102 -10
  169. data/lib/puppet/type/service.rb +55 -8
  170. data/lib/puppet/type/user.rb +3 -28
  171. data/lib/puppet/util.rb +39 -15
  172. data/lib/puppet/util/at_fork.rb +1 -1
  173. data/lib/puppet/util/autoload.rb +4 -18
  174. data/lib/puppet/util/checksums.rb +19 -4
  175. data/lib/puppet/util/fileparsing.rb +2 -2
  176. data/lib/puppet/util/instance_loader.rb +14 -10
  177. data/lib/puppet/util/log/destinations.rb +2 -11
  178. data/lib/puppet/util/package/version/debian.rb +175 -0
  179. data/lib/puppet/util/package/version/gem.rb +15 -0
  180. data/lib/puppet/util/package/version/pip.rb +167 -0
  181. data/lib/puppet/util/package/version/range.rb +53 -0
  182. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  183. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  184. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  185. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  186. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  187. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  188. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  189. data/lib/puppet/util/package/version/rpm.rb +73 -0
  190. data/lib/puppet/util/pidlock.rb +36 -10
  191. data/lib/puppet/util/platform.rb +5 -0
  192. data/lib/puppet/util/plist.rb +6 -0
  193. data/lib/puppet/util/provider_features.rb +1 -1
  194. data/lib/puppet/util/reference.rb +1 -1
  195. data/lib/puppet/util/rpm_compare.rb +193 -0
  196. data/lib/puppet/util/storage.rb +0 -1
  197. data/lib/puppet/util/windows/adsi.rb +2 -2
  198. data/lib/puppet/util/windows/api_types.rb +45 -32
  199. data/lib/puppet/util/windows/eventlog.rb +1 -6
  200. data/lib/puppet/util/windows/principal.rb +8 -6
  201. data/lib/puppet/util/windows/process.rb +15 -14
  202. data/lib/puppet/util/windows/registry.rb +11 -11
  203. data/lib/puppet/util/windows/security.rb +1 -0
  204. data/lib/puppet/util/windows/service.rb +43 -26
  205. data/lib/puppet/util/windows/sid.rb +3 -3
  206. data/lib/puppet/util/windows/user.rb +23 -8
  207. data/lib/puppet/util/yaml.rb +1 -1
  208. data/lib/puppet/version.rb +1 -1
  209. data/locales/puppet.pot +707 -574
  210. data/man/man5/puppet.conf.5 +74 -14
  211. data/man/man8/puppet-agent.8 +7 -7
  212. data/man/man8/puppet-apply.8 +1 -1
  213. data/man/man8/puppet-catalog.8 +1 -1
  214. data/man/man8/puppet-config.8 +1 -1
  215. data/man/man8/puppet-describe.8 +1 -1
  216. data/man/man8/puppet-device.8 +2 -2
  217. data/man/man8/puppet-doc.8 +1 -1
  218. data/man/man8/puppet-epp.8 +1 -1
  219. data/man/man8/puppet-facts.8 +1 -1
  220. data/man/man8/puppet-filebucket.8 +17 -2
  221. data/man/man8/puppet-generate.8 +1 -1
  222. data/man/man8/puppet-help.8 +6 -3
  223. data/man/man8/puppet-key.8 +1 -1
  224. data/man/man8/puppet-lookup.8 +1 -1
  225. data/man/man8/puppet-man.8 +1 -1
  226. data/man/man8/puppet-module.8 +4 -1
  227. data/man/man8/puppet-node.8 +1 -1
  228. data/man/man8/puppet-parser.8 +1 -1
  229. data/man/man8/puppet-plugin.8 +1 -1
  230. data/man/man8/puppet-report.8 +1 -1
  231. data/man/man8/puppet-resource.8 +1 -1
  232. data/man/man8/puppet-script.8 +1 -1
  233. data/man/man8/puppet-ssl.8 +2 -2
  234. data/man/man8/puppet-status.8 +1 -1
  235. data/man/man8/puppet.8 +2 -2
  236. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  237. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  238. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  239. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  240. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  241. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  242. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  243. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  244. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  245. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +1 -102
  246. 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 -106
  247. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +1 -106
  248. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +1 -102
  249. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +1 -98
  250. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +1 -102
  251. 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 -102
  252. data/spec/integration/application/agent_spec.rb +483 -0
  253. data/spec/integration/application/apply_spec.rb +132 -3
  254. data/spec/integration/application/filebucket_spec.rb +190 -0
  255. data/spec/integration/application/plugin_spec.rb +73 -0
  256. data/spec/integration/configurer_spec.rb +26 -7
  257. data/spec/integration/defaults_spec.rb +1 -2
  258. data/spec/integration/http/client_spec.rb +47 -37
  259. data/spec/integration/indirector/facts/facter_spec.rb +4 -0
  260. data/spec/integration/indirector/report/yaml.rb +83 -0
  261. data/spec/integration/module_tool/forge_spec.rb +2 -15
  262. data/spec/integration/network/http_pool_spec.rb +93 -20
  263. data/spec/integration/node/environment_spec.rb +15 -0
  264. data/spec/integration/parser/compiler_spec.rb +11 -0
  265. data/spec/integration/type/file_spec.rb +1 -1
  266. data/spec/integration/util/windows/adsi_spec.rb +6 -1
  267. data/spec/integration/util/windows/registry_spec.rb +7 -7
  268. data/spec/integration/util/windows/user_spec.rb +40 -5
  269. data/spec/lib/puppet/test_ca.rb +2 -2
  270. data/spec/lib/puppet_spec/https.rb +16 -7
  271. data/spec/lib/puppet_spec/puppetserver.rb +119 -0
  272. data/spec/shared_contexts/https.rb +29 -0
  273. data/spec/unit/agent_spec.rb +80 -26
  274. data/spec/unit/application/agent_spec.rb +9 -5
  275. data/spec/unit/application/apply_spec.rb +2 -12
  276. data/spec/unit/application/describe_spec.rb +88 -50
  277. data/spec/unit/application/device_spec.rb +2 -2
  278. data/spec/unit/application/filebucket_spec.rb +22 -2
  279. data/spec/unit/application/resource_spec.rb +2 -2
  280. data/spec/unit/configurer/fact_handler_spec.rb +4 -8
  281. data/spec/unit/configurer/plugin_handler_spec.rb +36 -19
  282. data/spec/unit/configurer_spec.rb +17 -18
  283. data/spec/unit/context/trusted_information_spec.rb +25 -2
  284. data/spec/unit/daemon_spec.rb +5 -64
  285. data/spec/unit/defaults_spec.rb +25 -2
  286. data/spec/unit/environments_spec.rb +65 -28
  287. data/spec/unit/face/facts_spec.rb +24 -20
  288. data/spec/unit/face/module/search_spec.rb +17 -0
  289. data/spec/unit/face/plugin_spec.rb +12 -10
  290. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  291. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  292. data/spec/unit/file_system/uniquefile_spec.rb +11 -0
  293. data/spec/unit/file_system_spec.rb +26 -2
  294. data/spec/unit/functions/lookup_spec.rb +13 -0
  295. data/spec/unit/http/client_spec.rb +327 -35
  296. data/spec/unit/http/external_client_spec.rb +201 -0
  297. data/spec/unit/http/resolver_spec.rb +34 -2
  298. data/spec/unit/http/response_spec.rb +75 -0
  299. data/spec/unit/http/service/ca_spec.rb +53 -11
  300. data/spec/unit/http/service/compiler_spec.rb +627 -0
  301. data/spec/unit/http/service/file_server_spec.rb +308 -0
  302. data/spec/unit/http/service/report_spec.rb +27 -9
  303. data/spec/unit/http/service_spec.rb +98 -5
  304. data/spec/unit/http/session_spec.rb +190 -7
  305. data/spec/unit/indirector/catalog/compiler_spec.rb +47 -29
  306. data/spec/unit/indirector/catalog/rest_spec.rb +59 -2
  307. data/spec/unit/indirector/facts/rest_spec.rb +79 -24
  308. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  309. data/spec/unit/indirector/file_content/rest_spec.rb +53 -2
  310. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  311. data/spec/unit/indirector/file_metadata/rest_spec.rb +110 -2
  312. data/spec/unit/indirector/node/rest_spec.rb +57 -2
  313. data/spec/unit/indirector/report/rest_spec.rb +58 -51
  314. data/spec/unit/indirector/request_spec.rb +1 -1
  315. data/spec/unit/indirector/resource/ral_spec.rb +7 -8
  316. data/spec/unit/indirector/rest_spec.rb +13 -0
  317. data/spec/unit/indirector/status/rest_spec.rb +43 -2
  318. data/spec/unit/interface_spec.rb +3 -3
  319. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  320. data/spec/unit/network/http/connection_spec.rb +559 -175
  321. data/spec/unit/network/http/nocache_pool_spec.rb +25 -3
  322. data/spec/unit/network/http/pool_spec.rb +89 -11
  323. data/spec/unit/network/http_pool_spec.rb +63 -57
  324. data/spec/unit/network/http_spec.rb +1 -1
  325. data/spec/unit/node/environment_spec.rb +16 -0
  326. data/spec/unit/node/facts_spec.rb +2 -1
  327. data/spec/unit/node_spec.rb +7 -4
  328. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  329. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  330. data/spec/unit/parser/scope_spec.rb +1 -1
  331. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  332. data/spec/unit/pops/loaders/loaders_spec.rb +1 -1
  333. data/spec/unit/pops/serialization/to_from_hr_spec.rb +6 -1
  334. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  335. data/spec/unit/pops/validator/validator_spec.rb +7 -2
  336. data/spec/unit/provider/aix_object_spec.rb +16 -2
  337. data/spec/unit/provider/group/groupadd_spec.rb +181 -56
  338. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  339. data/spec/unit/provider/package/aix_spec.rb +29 -0
  340. data/spec/unit/provider/package/apt_spec.rb +43 -2
  341. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  342. data/spec/unit/provider/package/dnfmodule_spec.rb +76 -15
  343. data/spec/unit/provider/package/dpkg_spec.rb +28 -6
  344. data/spec/unit/provider/package/gem_spec.rb +40 -0
  345. data/spec/unit/provider/package/openbsd_spec.rb +17 -0
  346. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  347. data/spec/unit/provider/package/pip_spec.rb +68 -19
  348. data/spec/unit/provider/package/pkg_spec.rb +15 -1
  349. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  350. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  351. data/spec/unit/provider/package/portage_spec.rb +5 -0
  352. data/spec/unit/provider/package/puppet_gem_spec.rb +8 -0
  353. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  354. data/spec/unit/provider/package/yum_spec.rb +292 -0
  355. data/spec/unit/provider/package/zypper_spec.rb +84 -0
  356. data/spec/unit/provider/service/init_spec.rb +1 -0
  357. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  358. data/spec/unit/provider/service/openwrt_spec.rb +1 -0
  359. data/spec/unit/provider/service/redhat_spec.rb +9 -0
  360. data/spec/unit/provider/service/systemd_spec.rb +92 -12
  361. data/spec/unit/provider/service/windows_spec.rb +22 -14
  362. data/spec/unit/provider/user/directoryservice_spec.rb +41 -0
  363. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  364. data/spec/unit/provider/user/useradd_spec.rb +43 -24
  365. data/spec/unit/provider/user/windows_adsi_spec.rb +3 -3
  366. data/spec/unit/puppet_pal_2pec.rb +0 -26
  367. data/spec/unit/puppet_pal_catalog_spec.rb +46 -0
  368. data/spec/unit/puppet_spec.rb +47 -0
  369. data/spec/unit/reports/http_spec.rb +70 -52
  370. data/spec/unit/resource_spec.rb +3 -3
  371. data/spec/unit/settings/autosign_setting_spec.rb +1 -1
  372. data/spec/unit/settings/http_extra_headers_spec.rb +64 -0
  373. data/spec/unit/ssl/certificate_spec.rb +7 -0
  374. data/spec/unit/ssl/host_spec.rb +4 -2
  375. data/spec/unit/ssl/oids_spec.rb +1 -0
  376. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  377. data/spec/unit/ssl/state_machine_spec.rb +99 -13
  378. data/spec/unit/test/test_helper_spec.rb +17 -0
  379. data/spec/unit/transaction/persistence_spec.rb +1 -10
  380. data/spec/unit/transaction/report_spec.rb +5 -1
  381. data/spec/unit/transaction_spec.rb +0 -2
  382. data/spec/unit/type/file/ensure_spec.rb +1 -2
  383. data/spec/unit/type/file/source_spec.rb +89 -38
  384. data/spec/unit/type/file_spec.rb +122 -96
  385. data/spec/unit/type/package_spec.rb +8 -0
  386. data/spec/unit/type/service_spec.rb +185 -8
  387. data/spec/unit/type/user_spec.rb +1 -2
  388. data/spec/unit/type_spec.rb +50 -0
  389. data/spec/unit/util/at_fork_spec.rb +3 -2
  390. data/spec/unit/util/autoload_spec.rb +2 -1
  391. data/spec/unit/util/checksums_spec.rb +16 -0
  392. data/spec/unit/util/log/destinations_spec.rb +1 -29
  393. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  394. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  395. data/spec/unit/util/package/version/range_spec.rb +175 -0
  396. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  397. data/spec/unit/util/pidlock_spec.rb +112 -42
  398. data/spec/unit/util/plist_spec.rb +20 -0
  399. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  400. data/spec/unit/util/storage_spec.rb +1 -8
  401. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  402. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  403. data/spec/unit/util/windows/service_spec.rb +4 -4
  404. data/spec/unit/util/windows/sid_spec.rb +2 -2
  405. data/spec/unit/util_spec.rb +3 -3
  406. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  407. data/tasks/generate_cert_fixtures.rake +15 -1
  408. data/tasks/manpages.rake +5 -35
  409. metadata +73 -12
  410. data/COMMITTERS.md +0 -244
  411. data/spec/integration/faces/plugin_spec.rb +0 -61
  412. data/spec/integration/test/test_helper_spec.rb +0 -31
@@ -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
@@ -14,14 +14,6 @@ describe Puppet::Application::Apply do
14
14
  Puppet[:reports] = "none"
15
15
  end
16
16
 
17
- after :each do
18
- Puppet::Node::Facts.indirection.reset_terminus_class
19
- Puppet::Node::Facts.indirection.cache_class = nil
20
-
21
- Puppet::Node.indirection.reset_terminus_class
22
- Puppet::Node.indirection.cache_class = nil
23
- end
24
-
25
17
  [:debug,:loadclasses,:test,:verbose,:use_nodes,:detailed_exitcodes,:catalog, :write_catalog_summary].each do |option|
26
18
  it "should declare handle_#{option} method" do
27
19
  expect(@apply).to respond_to("handle_#{option}".to_sym)
@@ -182,13 +174,11 @@ describe Puppet::Application::Apply do
182
174
  Puppet[:prerun_command] = ''
183
175
  Puppet[:postrun_command] = ''
184
176
 
185
- Puppet::Node::Facts.indirection.terminus_class = :memory
186
- Puppet::Node::Facts.indirection.cache_class = :memory
187
177
  Puppet::Node.indirection.terminus_class = :memory
188
178
  Puppet::Node.indirection.cache_class = :memory
189
179
 
190
- @facts = Puppet::Node::Facts.new(Puppet[:node_name_value])
191
- Puppet::Node::Facts.indirection.save(@facts)
180
+ facts = Puppet::Node::Facts.new(Puppet[:node_name_value])
181
+ Puppet::Node::Facts.indirection.save(facts)
192
182
 
193
183
  @node = Puppet::Node.new(Puppet[:node_name_value])
194
184
  Puppet::Node.indirection.save(@node)
@@ -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
@@ -114,12 +114,31 @@ describe Puppet::Application::Filebucket do
114
114
  @filebucket.setup
115
115
  end
116
116
 
117
- it "should default to the first server_list entry if set" do
117
+ it "should default to the first good server_list entry if server_list is set" do
118
+ stub_request(:get, "https://foo:8140/status/v1/simple/master").to_return(status: 200)
118
119
  Puppet[:server_list] = "foo,bar,baz"
119
120
  expect(Puppet::FileBucket::Dipper).to receive(:new).with(hash_including(Server: "foo"))
120
121
  @filebucket.setup
121
122
  end
122
123
 
124
+ it "should walk server_list until it finds a good entry" do
125
+ stub_request(:get, "https://foo:8140/status/v1/simple/master").to_return(status: 502)
126
+ stub_request(:get, "https://bar:8140/status/v1/simple/master").to_return(status: 200)
127
+ Puppet[:server_list] = "foo,bar,baz"
128
+ expect(Puppet::FileBucket::Dipper).to receive(:new).with(hash_including(Server: "bar"))
129
+ @filebucket.setup
130
+ end
131
+
132
+ # FileBucket catches any exceptions raised, logs them, then just exits
133
+ it "raises an error if there are no functional servers in server_list" do
134
+ stub_request(:get, "https://foo:8140/status/v1/simple/master").to_return(status: 404)
135
+ stub_request(:get, "https://bar:8140/status/v1/simple/master").to_return(status: 404)
136
+ Puppet[:server] = 'horacio'
137
+ Puppet[:server_list] = "foo,bar"
138
+
139
+ expect{@filebucket.setup}.to exit_with(1)
140
+ end
141
+
123
142
  it "should fall back to server if server_list is empty" do
124
143
  Puppet[:server_list] = ""
125
144
  expect(Puppet::FileBucket::Dipper).to receive(:new).with(hash_including(Server: "puppet"))
@@ -127,8 +146,9 @@ describe Puppet::Application::Filebucket do
127
146
  end
128
147
 
129
148
  it "should take both the server and port specified in server_list" do
149
+ stub_request(:get, "https://foo:632/status/v1/simple/master").to_return(status: 200)
130
150
  Puppet[:server_list] = "foo:632,bar:6215,baz:351"
131
- expect(Puppet::FileBucket::Dipper).to receive(:new).with({ :Server => "foo", :Port => "632" })
151
+ expect(Puppet::FileBucket::Dipper).to receive(:new).with({ :Server => "foo", :Port => 632 })
132
152
  @filebucket.setup
133
153
  end
134
154
  end
@@ -12,9 +12,9 @@ describe Puppet::Application::Resource do
12
12
  end
13
13
 
14
14
  describe "in preinit" do
15
- it "should init extra_params to empty array" do
15
+ it "should include provider parameter by default" do
16
16
  @resource_app.preinit
17
- expect(@resource_app.extra_params).to eq([])
17
+ expect(@resource_app.extra_params).to eq([:provider])
18
18
  end
19
19
  end
20
20
 
@@ -22,10 +22,6 @@ describe Puppet::Configurer::FactHandler do
22
22
 
23
23
  let(:facthandler) { FactHandlerTester.new('production') }
24
24
 
25
- before :each do
26
- Puppet::Node::Facts.indirection.terminus_class = :memory
27
- end
28
-
29
25
  describe "when finding facts" do
30
26
  it "should use the node name value to retrieve the facts" do
31
27
  foo_facts = Puppet::Node::Facts.new('foo')
@@ -108,7 +104,7 @@ describe Puppet::Configurer::FactHandler do
108
104
  expect(text).to include(test_fact[:encoded])
109
105
 
110
106
  # this is not sufficient to test whether these values are sent via HTTP GET or HTTP POST in actual catalog request
111
- expect(JSON.parse(URI.unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
107
+ expect(JSON.parse(Puppet::Util.uri_unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
112
108
  end
113
109
  end
114
110
  end
@@ -133,7 +129,7 @@ describe Puppet::Configurer::FactHandler do
133
129
  expect(to_upload).to eq({:facts_format => 'application/json', :facts => text})
134
130
  expect(text).to include(test_fact[:encoded])
135
131
 
136
- expect(JSON.parse(URI.unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
132
+ expect(JSON.parse(Puppet::Util.uri_unescape(to_upload[:facts]))['values']).to eq(test_fact[:hash])
137
133
  end
138
134
  end
139
135
  end
@@ -142,9 +138,9 @@ describe Puppet::Configurer::FactHandler do
142
138
  facts = Puppet::Node::Facts.new(Puppet[:node_name_value], 'my_name_fact' => 'other_node_name')
143
139
  Puppet::Node::Facts.indirection.save(facts)
144
140
 
145
- # prefer URI.unescape but validate CGI also works
141
+ # prefer Puppet::Util.uri_unescape but validate CGI also works
146
142
  encoded_facts = facthandler.facts_for_uploading[:facts]
147
- expect(URI.unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
143
+ expect(Puppet::Util.uri_unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
148
144
  expect(CGI.unescape(encoded_facts)).to validate_against('api/schemas/facts.json')
149
145
  end
150
146
  end
@@ -6,13 +6,17 @@ describe Puppet::Configurer::PluginHandler do
6
6
  let(:pluginhandler) { Puppet::Configurer::PluginHandler.new() }
7
7
  let(:environment) { Puppet::Node::Environment.create(:myenv, []) }
8
8
 
9
+ before :each do
10
+ # PluginHandler#load_plugin has an extra-strong rescue clause
11
+ # this mock is to make sure that we don't silently ignore errors
12
+ expect(Puppet).not_to receive(:err)
13
+ end
14
+
9
15
  context "server agent version is 5.3.4" do
10
- before :each do
11
- # PluginHandler#load_plugin has an extra-strong rescue clause
12
- # this mock is to make sure that we don't silently ignore errors
13
- expect(Puppet).not_to receive(:err)
14
- # Server_agent version needs to be at 5.3.4 in order to mount locales
15
- Puppet.push_context({:server_agent_version => "5.3.4"})
16
+ around do |example|
17
+ Puppet.override(server_agent_version: "5.3.4") do
18
+ example.run
19
+ end
16
20
  end
17
21
 
18
22
  it "downloads plugins, facts, and locales" do
@@ -43,12 +47,10 @@ describe Puppet::Configurer::PluginHandler do
43
47
  end
44
48
 
45
49
  context "server agent version is 5.3.3" do
46
- before :each do
47
- # PluginHandler#load_plugin has an extra-strong rescue clause
48
- # this mock is to make sure that we don't silently ignore errors
49
- expect(Puppet).not_to receive(:err)
50
- # Server_agent version needs to be at 5.3.4 in order to mount locales
51
- Puppet.push_context({:server_agent_version => "5.3.3"})
50
+ around do |example|
51
+ Puppet.override(server_agent_version: "5.3.3") do
52
+ example.run
53
+ end
52
54
  end
53
55
 
54
56
  it "returns downloaded plugin, fact, but not locale filenames" do
@@ -69,15 +71,30 @@ describe Puppet::Configurer::PluginHandler do
69
71
  end
70
72
 
71
73
  context "blank server agent version" do
72
- before :each do
73
- # PluginHandler#load_plugin has an extra-strong rescue clause
74
- # this mock is to make sure that we don't silently ignore errors
75
- expect(Puppet).not_to receive(:err)
76
- # Server_agent version needs to be at 5.3.4 in order to mount locales
77
- # A blank version will default to 0.0
78
- Puppet.push_context({:server_agent_version => ""})
74
+ around do |example|
75
+ Puppet.override(server_agent_version: "") do
76
+ example.run
77
+ end
78
+ end
79
+
80
+ it "returns downloaded plugin, fact, but not locale filenames" do
81
+ times_called = 0
82
+ allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
83
+ times_called += 1
84
+
85
+ if times_called == 1
86
+ %w[/a]
87
+ else
88
+ %w[/b]
89
+ end
90
+ end
91
+
92
+ expect(pluginhandler.download_plugins(environment)).to match_array(%w[/a /b])
93
+ expect(times_called).to eq(2)
79
94
  end
95
+ end
80
96
 
97
+ context "nil server agent version" do
81
98
  it "returns downloaded plugin, fact, but not locale filenames" do
82
99
  times_called = 0
83
100
  allow_any_instance_of(Puppet::Configurer::Downloader).to receive(:evaluate) do
@@ -4,20 +4,18 @@ require 'webmock/rspec'
4
4
 
5
5
  describe Puppet::Configurer do
6
6
  before do
7
- Puppet::Node::Facts.indirection.terminus_class = :memory
8
- Puppet::Node::Facts.indirection.save(facts)
9
-
10
7
  Puppet[:server] = "puppetmaster"
11
8
  Puppet[:report] = true
12
9
 
13
10
  catalog.add_resource(resource)
14
11
  end
15
12
 
13
+ let(:node_name) { Puppet[:node_name_value] }
16
14
  let(:configurer) { Puppet::Configurer.new }
17
15
  let(:report) { Puppet::Transaction::Report.new }
18
- let(:catalog) { Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
16
+ let(:catalog) { Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote(Puppet[:environment].to_sym)) }
19
17
  let(:resource) { Puppet::Resource.new(:notice, 'a') }
20
- let(:facts) { Puppet::Node::Facts.new(Puppet[:node_name_value]) }
18
+ let(:facts) { Puppet::Node::Facts.new(node_name) }
21
19
 
22
20
  describe "when executing a pre-run hook" do
23
21
  it "should do nothing if the hook is set to an empty string" do
@@ -104,6 +102,7 @@ describe Puppet::Configurer do
104
102
  end
105
103
 
106
104
  it "should respect node_name_fact when setting the host on a report" do
105
+ Puppet[:node_name_value] = nil
107
106
  Puppet[:node_name_fact] = 'my_name_fact'
108
107
  facts.values = {'my_name_fact' => 'node_name_from_fact'}
109
108
  Puppet::Node::Facts.indirection.save(facts)
@@ -149,7 +148,7 @@ describe Puppet::Configurer do
149
148
  configurer = Puppet::Configurer.new("test_tuuid", "test_jid")
150
149
 
151
150
  report = Puppet::Transaction::Report.new(nil, "test", "aaaa")
152
- expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid').and_return(report)
151
+ expect(Puppet::Transaction::Report).to receive(:new).with(anything, anything, 'test_tuuid', 'test_jid', anything).and_return(report)
153
152
  expect(configurer).to receive(:send_report).with(report)
154
153
 
155
154
  configurer.run
@@ -319,7 +318,7 @@ describe Puppet::Configurer do
319
318
  end
320
319
 
321
320
  it "should refetch the catalog if the server specifies a new environment in the catalog" do
322
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
321
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
323
322
  expect(configurer).to receive(:retrieve_catalog).and_return(catalog).twice
324
323
 
325
324
  configurer.run
@@ -614,7 +613,7 @@ describe Puppet::Configurer do
614
613
  end
615
614
 
616
615
  it "should set its cached_catalog_status to 'explicitly requested' if the cached catalog is from a different environment" do
617
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
616
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
618
617
  expects_cached_catalog_only(cached_catalog)
619
618
 
620
619
  options = {}
@@ -647,7 +646,7 @@ describe Puppet::Configurer do
647
646
  end
648
647
 
649
648
  it "should return the cached catalog when the environment doesn't match" do
650
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
649
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
651
650
  expects_cached_catalog_only(cached_catalog)
652
651
 
653
652
  allow(Puppet).to receive(:info)
@@ -705,7 +704,7 @@ describe Puppet::Configurer do
705
704
  Puppet[:environment] = 'second_env'
706
705
  configurer = Puppet::Configurer.new
707
706
 
708
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote("production"))
707
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote("production"))
709
708
  expects_new_catalog_only(catalog)
710
709
 
711
710
  expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
@@ -727,7 +726,7 @@ describe Puppet::Configurer do
727
726
  Puppet[:environment] = 'second_env'
728
727
  configurer = Puppet::Configurer.new
729
728
 
730
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote("production"))
729
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote("production"))
731
730
  expects_cached_catalog_only(catalog)
732
731
 
733
732
  expect(Puppet).to receive(:err).with("Not using catalog because its environment 'production' does not match agent specified environment 'second_env' and strict_environment_mode is set")
@@ -827,7 +826,7 @@ describe Puppet::Configurer do
827
826
  end
828
827
 
829
828
  it "should return nil if its cached catalog environment doesn't match server-specified environment" do
830
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
829
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
831
830
 
832
831
  expects_fallback_to_cached_catalog(cached_catalog)
833
832
 
@@ -837,7 +836,7 @@ describe Puppet::Configurer do
837
836
  end
838
837
 
839
838
  it "should set its cached_catalog_status to 'not_used' if the cached catalog environment doesn't match server-specified environment" do
840
- cached_catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote('second_env'))
839
+ cached_catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote('second_env'))
841
840
 
842
841
  expects_fallback_to_cached_catalog(cached_catalog)
843
842
 
@@ -857,7 +856,7 @@ describe Puppet::Configurer do
857
856
  it "should not update the cached catalog in noop mode" do
858
857
  Puppet[:noop] = true
859
858
 
860
- stub_request(:get, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
859
+ stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
861
860
 
862
861
  Puppet::Resource::Catalog.indirection.cache_class = :json
863
862
  path = Puppet::Resource::Catalog.indirection.cache.path(catalog.name)
@@ -871,7 +870,7 @@ describe Puppet::Configurer do
871
870
  Puppet[:noop] = false
872
871
  Puppet[:log_level] = 'info'
873
872
 
874
- stub_request(:get, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
873
+ stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
875
874
 
876
875
  Puppet::Resource::Catalog.indirection.cache_class = :json
877
876
  cache_path = Puppet::Resource::Catalog.indirection.cache.path(Puppet[:node_name_value])
@@ -884,7 +883,7 @@ describe Puppet::Configurer do
884
883
  end
885
884
 
886
885
  it "successfully applies the catalog without a cache" do
887
- stub_request(:get, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
886
+ stub_request(:post, %r{/puppet/v3/catalog}).to_return(:status => 200, :body => catalog.render(:json), :headers => {'Content-Type' => 'application/json'})
888
887
 
889
888
  Puppet::Resource::Catalog.indirection.cache_class = nil
890
889
 
@@ -999,7 +998,7 @@ describe Puppet::Configurer do
999
998
 
1000
999
  it "should not failover during an apply run" do
1001
1000
  Puppet.settings[:server_list] = ["myserver:123"]
1002
- catalog = Puppet::Resource::Catalog.new("tester", Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
1001
+ catalog = Puppet::Resource::Catalog.new(node_name, Puppet::Node::Environment.remote(Puppet[:environment].to_sym))
1003
1002
  configurer.run(catalog: catalog)
1004
1003
  end
1005
1004
 
@@ -1044,7 +1043,7 @@ describe Puppet::Configurer do
1044
1043
  Puppet::Resource::Catalog.indirection.terminus_class = :rest
1045
1044
 
1046
1045
  stub_request(:get, 'https://myserver:123/status/v1/simple/master').to_return(status: 200)
1047
- stub_request(:get, %r{https://myserver:123/puppet/v3/catalog}).to_return(status: 200)
1046
+ stub_request(:post, %r{https://myserver:123/puppet/v3/catalog}).to_return(status: 200)
1048
1047
  node_request = stub_request(:get, %r{https://myserver:123/puppet/v3/node/}).to_return(status: 200)
1049
1048
 
1050
1049
  configurer.run