puppet 6.14.0 → 6.19.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 (496) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -7
  3. data/Gemfile +4 -2
  4. data/Gemfile.lock +36 -34
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  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/agent/locker.rb +0 -7
  11. data/lib/puppet/application/agent.rb +25 -9
  12. data/lib/puppet/application/apply.rb +18 -20
  13. data/lib/puppet/application/device.rb +1 -1
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/filebucket.rb +5 -14
  16. data/lib/puppet/application/lookup.rb +16 -4
  17. data/lib/puppet/application/plugin.rb +1 -0
  18. data/lib/puppet/application/ssl.rb +3 -3
  19. data/lib/puppet/configurer.rb +68 -24
  20. data/lib/puppet/configurer/downloader.rb +31 -10
  21. data/lib/puppet/configurer/plugin_handler.rb +1 -1
  22. data/lib/puppet/confine.rb +2 -2
  23. data/lib/puppet/confine/any.rb +1 -1
  24. data/lib/puppet/context/trusted_information.rb +14 -8
  25. data/lib/puppet/daemon.rb +13 -27
  26. data/lib/puppet/defaults.rb +141 -41
  27. data/lib/puppet/environments.rb +55 -15
  28. data/lib/puppet/face/catalog.rb +1 -1
  29. data/lib/puppet/face/config.rb +46 -16
  30. data/lib/puppet/face/facts.rb +1 -1
  31. data/lib/puppet/face/help.rb +29 -3
  32. data/lib/puppet/face/module/search.rb +5 -0
  33. data/lib/puppet/face/node.rb +3 -3
  34. data/lib/puppet/face/node/clean.rb +2 -2
  35. data/lib/puppet/face/plugin.rb +2 -2
  36. data/lib/puppet/face/status.rb +1 -1
  37. data/lib/puppet/feature/base.rb +1 -1
  38. data/lib/puppet/file_bucket/dipper.rb +1 -1
  39. data/lib/puppet/file_serving/http_metadata.rb +14 -2
  40. data/lib/puppet/file_serving/metadata.rb +4 -1
  41. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  42. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  43. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  44. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  45. data/lib/puppet/file_system/file_impl.rb +17 -13
  46. data/lib/puppet/file_system/uniquefile.rb +12 -16
  47. data/lib/puppet/forge.rb +1 -1
  48. data/lib/puppet/forge/cache.rb +1 -1
  49. data/lib/puppet/forge/repository.rb +4 -7
  50. data/lib/puppet/functions/call.rb +1 -1
  51. data/lib/puppet/functions/filter.rb +1 -0
  52. data/lib/puppet/functions/lstrip.rb +4 -4
  53. data/lib/puppet/functions/new.rb +8 -3
  54. data/lib/puppet/functions/reduce.rb +2 -4
  55. data/lib/puppet/functions/reverse_each.rb +1 -1
  56. data/lib/puppet/functions/rstrip.rb +4 -4
  57. data/lib/puppet/functions/step.rb +1 -1
  58. data/lib/puppet/functions/strip.rb +4 -4
  59. data/lib/puppet/gettext/config.rb +5 -5
  60. data/lib/puppet/gettext/module_translations.rb +4 -4
  61. data/lib/puppet/http.rb +3 -0
  62. data/lib/puppet/http/client.rb +215 -60
  63. data/lib/puppet/http/external_client.rb +90 -0
  64. data/lib/puppet/http/redirector.rb +43 -7
  65. data/lib/puppet/http/resolver.rb +43 -3
  66. data/lib/puppet/http/resolver/server_list.rb +66 -24
  67. data/lib/puppet/http/resolver/settings.rb +21 -1
  68. data/lib/puppet/http/resolver/srv.rb +28 -2
  69. data/lib/puppet/http/response.rb +82 -1
  70. data/lib/puppet/http/retry_after_handler.rb +39 -0
  71. data/lib/puppet/http/service.rb +70 -2
  72. data/lib/puppet/http/service/ca.rb +71 -9
  73. data/lib/puppet/http/service/compiler.rb +214 -12
  74. data/lib/puppet/http/service/file_server.rb +106 -5
  75. data/lib/puppet/http/service/puppetserver.rb +39 -0
  76. data/lib/puppet/http/service/report.rb +36 -3
  77. data/lib/puppet/http/session.rb +60 -8
  78. data/lib/puppet/indirector.rb +1 -1
  79. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  80. data/lib/puppet/indirector/catalog/rest.rb +2 -1
  81. data/lib/puppet/indirector/exec.rb +1 -1
  82. data/lib/puppet/indirector/facts/facter.rb +3 -3
  83. data/lib/puppet/indirector/facts/rest.rb +2 -1
  84. data/lib/puppet/indirector/facts/yaml.rb +1 -1
  85. data/lib/puppet/indirector/file_bucket_file/rest.rb +48 -0
  86. data/lib/puppet/indirector/file_content/http.rb +5 -0
  87. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  88. data/lib/puppet/indirector/file_metadata/http.rb +28 -8
  89. data/lib/puppet/indirector/file_metadata/rest.rb +6 -4
  90. data/lib/puppet/indirector/hiera.rb +4 -0
  91. data/lib/puppet/indirector/indirection.rb +1 -1
  92. data/lib/puppet/indirector/json.rb +1 -1
  93. data/lib/puppet/indirector/msgpack.rb +1 -1
  94. data/lib/puppet/indirector/node/rest.rb +2 -1
  95. data/lib/puppet/indirector/report/processor.rb +2 -2
  96. data/lib/puppet/indirector/report/yaml.rb +23 -0
  97. data/lib/puppet/indirector/request.rb +5 -5
  98. data/lib/puppet/indirector/rest.rb +7 -1
  99. data/lib/puppet/indirector/status/rest.rb +2 -1
  100. data/lib/puppet/indirector/yaml.rb +1 -1
  101. data/lib/puppet/metatype/manager.rb +80 -80
  102. data/lib/puppet/module.rb +1 -2
  103. data/lib/puppet/network/format_support.rb +2 -2
  104. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  105. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  106. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  107. data/lib/puppet/network/http/base_pool.rb +6 -1
  108. data/lib/puppet/network/http/compression.rb +7 -0
  109. data/lib/puppet/network/http/connection.rb +2 -0
  110. data/lib/puppet/network/http/connection_adapter.rb +184 -0
  111. data/lib/puppet/network/http/nocache_pool.rb +1 -0
  112. data/lib/puppet/network/http/pool.rb +2 -4
  113. data/lib/puppet/network/http/route.rb +2 -2
  114. data/lib/puppet/network/http_pool.rb +2 -1
  115. data/lib/puppet/node/environment.rb +22 -5
  116. data/lib/puppet/node/facts.rb +17 -0
  117. data/lib/puppet/pal/catalog_compiler.rb +5 -0
  118. data/lib/puppet/pal/pal_impl.rb +30 -31
  119. data/lib/puppet/parameter.rb +1 -1
  120. data/lib/puppet/parser/ast/leaf.rb +5 -5
  121. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  122. data/lib/puppet/parser/compiler.rb +43 -33
  123. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  124. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  125. data/lib/puppet/parser/environment_compiler.rb +4 -1
  126. data/lib/puppet/parser/functions.rb +18 -9
  127. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  128. data/lib/puppet/parser/functions/filter.rb +1 -0
  129. data/lib/puppet/parser/resource.rb +3 -2
  130. data/lib/puppet/parser/resource/param.rb +6 -0
  131. data/lib/puppet/parser/type_loader.rb +2 -2
  132. data/lib/puppet/pops/adaptable.rb +7 -13
  133. data/lib/puppet/pops/adapters.rb +8 -4
  134. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  135. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  136. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  137. data/lib/puppet/pops/issues.rb +5 -0
  138. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  139. data/lib/puppet/pops/loaders.rb +24 -15
  140. data/lib/puppet/pops/lookup/context.rb +1 -1
  141. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  142. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  143. data/lib/puppet/pops/types/iterable.rb +34 -8
  144. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  145. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  146. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  147. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  148. data/lib/puppet/provider/file/windows.rb +1 -1
  149. data/lib/puppet/provider/group/windows_adsi.rb +3 -3
  150. data/lib/puppet/provider/package/aix.rb +17 -2
  151. data/lib/puppet/provider/package/apt.rb +98 -1
  152. data/lib/puppet/provider/package/aptitude.rb +1 -1
  153. data/lib/puppet/provider/package/dnfmodule.rb +61 -14
  154. data/lib/puppet/provider/package/dpkg.rb +1 -1
  155. data/lib/puppet/provider/package/gem.rb +45 -9
  156. data/lib/puppet/provider/package/pacman.rb +2 -5
  157. data/lib/puppet/provider/package/pip.rb +143 -48
  158. data/lib/puppet/provider/package/pip2.rb +17 -0
  159. data/lib/puppet/provider/package/pip3.rb +0 -2
  160. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  161. data/lib/puppet/provider/package/pkgng.rb +16 -4
  162. data/lib/puppet/provider/package/portage.rb +2 -2
  163. data/lib/puppet/provider/package/puppet_gem.rb +11 -2
  164. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  165. data/lib/puppet/provider/package/rpm.rb +6 -213
  166. data/lib/puppet/provider/package/yum.rb +101 -20
  167. data/lib/puppet/provider/package/zypper.rb +62 -1
  168. data/lib/puppet/provider/service/systemd.rb +22 -4
  169. data/lib/puppet/provider/service/windows.rb +23 -7
  170. data/lib/puppet/provider/user/aix.rb +1 -1
  171. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  172. data/lib/puppet/provider/user/useradd.rb +16 -5
  173. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  174. data/lib/puppet/reports/http.rb +15 -9
  175. data/lib/puppet/resource.rb +2 -1
  176. data/lib/puppet/resource/type.rb +10 -1
  177. data/lib/puppet/resource/type_collection.rb +20 -16
  178. data/lib/puppet/rest/route.rb +2 -2
  179. data/lib/puppet/runtime.rb +25 -2
  180. data/lib/puppet/settings.rb +20 -6
  181. data/lib/puppet/ssl.rb +1 -0
  182. data/lib/puppet/ssl/host.rb +4 -4
  183. data/lib/puppet/ssl/oids.rb +1 -0
  184. data/lib/puppet/ssl/ssl_context.rb +2 -2
  185. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  186. data/lib/puppet/ssl/state_machine.rb +79 -37
  187. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  188. data/lib/puppet/ssl/verifier_adapter.rb +9 -1
  189. data/lib/puppet/test/test_helper.rb +19 -14
  190. data/lib/puppet/transaction.rb +2 -2
  191. data/lib/puppet/transaction/persistence.rb +1 -1
  192. data/lib/puppet/transaction/report.rb +14 -10
  193. data/lib/puppet/trusted_external.rb +29 -1
  194. data/lib/puppet/type.rb +21 -8
  195. data/lib/puppet/type/file.rb +40 -15
  196. data/lib/puppet/type/file/checksum.rb +4 -4
  197. data/lib/puppet/type/file/source.rb +35 -13
  198. data/lib/puppet/type/filebucket.rb +1 -1
  199. data/lib/puppet/type/notify.rb +2 -2
  200. data/lib/puppet/type/package.rb +41 -3
  201. data/lib/puppet/type/service.rb +59 -8
  202. data/lib/puppet/type/user.rb +19 -29
  203. data/lib/puppet/util.rb +41 -3
  204. data/lib/puppet/util/at_fork.rb +1 -1
  205. data/lib/puppet/util/autoload.rb +13 -25
  206. data/lib/puppet/util/character_encoding.rb +9 -5
  207. data/lib/puppet/util/checksums.rb +19 -4
  208. data/lib/puppet/util/connection.rb +8 -8
  209. data/lib/puppet/util/execution.rb +2 -2
  210. data/lib/puppet/util/fileparsing.rb +2 -2
  211. data/lib/puppet/util/instance_loader.rb +14 -10
  212. data/lib/puppet/util/log/destinations.rb +1 -10
  213. data/lib/puppet/util/package/version/debian.rb +175 -0
  214. data/lib/puppet/util/package/version/gem.rb +15 -0
  215. data/lib/puppet/util/package/version/pip.rb +167 -0
  216. data/lib/puppet/util/package/version/range.rb +53 -0
  217. data/lib/puppet/util/package/version/range/eq.rb +14 -0
  218. data/lib/puppet/util/package/version/range/gt.rb +14 -0
  219. data/lib/puppet/util/package/version/range/gt_eq.rb +14 -0
  220. data/lib/puppet/util/package/version/range/lt.rb +14 -0
  221. data/lib/puppet/util/package/version/range/lt_eq.rb +14 -0
  222. data/lib/puppet/util/package/version/range/min_max.rb +21 -0
  223. data/lib/puppet/util/package/version/range/simple.rb +11 -0
  224. data/lib/puppet/util/package/version/rpm.rb +73 -0
  225. data/lib/puppet/util/pidlock.rb +13 -7
  226. data/lib/puppet/util/platform.rb +5 -0
  227. data/lib/puppet/util/provider_features.rb +1 -1
  228. data/lib/puppet/util/reference.rb +1 -1
  229. data/lib/puppet/util/rpm_compare.rb +193 -0
  230. data/lib/puppet/util/run_mode.rb +5 -1
  231. data/lib/puppet/util/windows.rb +1 -0
  232. data/lib/puppet/util/windows/adsi.rb +2 -2
  233. data/lib/puppet/util/windows/api_types.rb +60 -33
  234. data/lib/puppet/util/windows/eventlog.rb +1 -6
  235. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  236. data/lib/puppet/util/windows/principal.rb +8 -6
  237. data/lib/puppet/util/windows/process.rb +15 -14
  238. data/lib/puppet/util/windows/registry.rb +11 -11
  239. data/lib/puppet/util/windows/security.rb +5 -4
  240. data/lib/puppet/util/windows/service.rb +43 -26
  241. data/lib/puppet/util/windows/sid.rb +3 -3
  242. data/lib/puppet/util/windows/user.rb +242 -8
  243. data/lib/puppet/version.rb +1 -1
  244. data/locales/puppet.pot +627 -507
  245. data/man/man5/puppet.conf.5 +93 -20
  246. data/man/man8/puppet-agent.8 +7 -4
  247. data/man/man8/puppet-apply.8 +1 -1
  248. data/man/man8/puppet-catalog.8 +1 -1
  249. data/man/man8/puppet-config.8 +6 -6
  250. data/man/man8/puppet-describe.8 +1 -1
  251. data/man/man8/puppet-device.8 +1 -1
  252. data/man/man8/puppet-doc.8 +1 -1
  253. data/man/man8/puppet-epp.8 +1 -1
  254. data/man/man8/puppet-facts.8 +1 -1
  255. data/man/man8/puppet-filebucket.8 +1 -1
  256. data/man/man8/puppet-generate.8 +1 -1
  257. data/man/man8/puppet-help.8 +6 -3
  258. data/man/man8/puppet-key.8 +1 -1
  259. data/man/man8/puppet-lookup.8 +2 -2
  260. data/man/man8/puppet-man.8 +1 -1
  261. data/man/man8/puppet-module.8 +4 -1
  262. data/man/man8/puppet-node.8 +4 -4
  263. data/man/man8/puppet-parser.8 +1 -1
  264. data/man/man8/puppet-plugin.8 +1 -1
  265. data/man/man8/puppet-report.8 +1 -1
  266. data/man/man8/puppet-resource.8 +1 -1
  267. data/man/man8/puppet-script.8 +1 -1
  268. data/man/man8/puppet-ssl.8 +1 -1
  269. data/man/man8/puppet-status.8 +2 -2
  270. data/man/man8/puppet.8 +2 -2
  271. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  272. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  273. data/spec/fixtures/ssl/unknown-127.0.0.1-key.pem +67 -0
  274. data/spec/fixtures/ssl/unknown-127.0.0.1.pem +48 -0
  275. data/spec/fixtures/ssl/unknown-ca-key.pem +67 -0
  276. data/spec/fixtures/ssl/unknown-ca.pem +59 -0
  277. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  278. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  279. data/spec/fixtures/unit/provider/package/dnfmodule/{dnf-module-list-installed.txt → dnf-module-list.txt} +8 -0
  280. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +2 -0
  281. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  282. data/spec/fixtures/unit/provider/package/yum/yum-check-update-subscription-manager.txt +9 -0
  283. data/spec/fixtures/unit/provider/package/zypper/zypper-search-uninstalled.out +13 -0
  284. data/spec/fixtures/unit/provider/service/systemd/list_unit_files_services +9 -0
  285. data/spec/integration/application/agent_spec.rb +479 -0
  286. data/spec/integration/application/apply_spec.rb +279 -150
  287. data/spec/integration/application/config_spec.rb +74 -0
  288. data/spec/integration/application/doc_spec.rb +16 -6
  289. data/spec/integration/application/filebucket_spec.rb +239 -0
  290. data/spec/integration/application/help_spec.rb +42 -0
  291. data/spec/integration/application/lookup_spec.rb +13 -0
  292. data/spec/integration/application/module_spec.rb +68 -0
  293. data/spec/integration/application/plugin_spec.rb +123 -0
  294. data/spec/integration/configurer_spec.rb +14 -0
  295. data/spec/integration/data_binding_spec.rb +82 -0
  296. data/spec/integration/defaults_spec.rb +27 -3
  297. data/spec/integration/directory_environments_spec.rb +17 -17
  298. data/spec/integration/http/client_spec.rb +39 -40
  299. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  300. data/spec/integration/indirector/report/yaml.rb +83 -0
  301. data/spec/integration/network/http_pool_spec.rb +84 -19
  302. data/spec/integration/node/environment_spec.rb +15 -0
  303. data/spec/integration/parser/compiler_spec.rb +11 -0
  304. data/spec/integration/type/file_spec.rb +1 -1
  305. data/spec/integration/util/execution_spec.rb +22 -0
  306. data/spec/integration/util/windows/adsi_spec.rb +8 -3
  307. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  308. data/spec/integration/util/windows/process_spec.rb +26 -32
  309. data/spec/integration/util/windows/registry_spec.rb +7 -7
  310. data/spec/integration/util/windows/user_spec.rb +47 -5
  311. data/spec/integration/util_spec.rb +7 -33
  312. data/spec/lib/puppet/test_ca.rb +2 -2
  313. data/spec/lib/puppet_spec/https.rb +16 -7
  314. data/spec/lib/puppet_spec/matchers.rb +0 -80
  315. data/spec/lib/puppet_spec/puppetserver.rb +127 -0
  316. data/spec/shared_contexts/https.rb +29 -0
  317. data/spec/shared_contexts/types_setup.rb +2 -0
  318. data/spec/unit/agent_spec.rb +80 -26
  319. data/spec/unit/application/agent_spec.rb +12 -9
  320. data/spec/unit/application/device_spec.rb +2 -2
  321. data/spec/unit/application/doc_spec.rb +2 -2
  322. data/spec/unit/application/face_base_spec.rb +6 -4
  323. data/spec/unit/application/facts_spec.rb +41 -10
  324. data/spec/unit/application/filebucket_spec.rb +22 -2
  325. data/spec/unit/application/man_spec.rb +52 -0
  326. data/spec/unit/application/resource_spec.rb +3 -1
  327. data/spec/unit/application/ssl_spec.rb +15 -2
  328. data/spec/unit/application_spec.rb +9 -4
  329. data/spec/unit/configurer/downloader_spec.rb +10 -0
  330. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  331. data/spec/unit/configurer_spec.rb +87 -38
  332. data/spec/unit/confine_spec.rb +2 -1
  333. data/spec/unit/context/trusted_information_spec.rb +25 -2
  334. data/spec/unit/daemon_spec.rb +5 -64
  335. data/spec/unit/defaults_spec.rb +24 -1
  336. data/spec/unit/environments_spec.rb +107 -32
  337. data/spec/unit/face/config_spec.rb +59 -1
  338. data/spec/unit/face/module/search_spec.rb +17 -0
  339. data/spec/unit/face/node_spec.rb +2 -2
  340. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  341. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  342. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  343. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  344. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  345. data/spec/unit/file_system/uniquefile_spec.rb +29 -0
  346. data/spec/unit/file_system_spec.rb +11 -2
  347. data/spec/unit/http/client_spec.rb +173 -59
  348. data/spec/unit/http/external_client_spec.rb +201 -0
  349. data/spec/unit/http/resolver_spec.rb +44 -5
  350. data/spec/unit/http/response_spec.rb +6 -0
  351. data/spec/unit/http/service/ca_spec.rb +27 -5
  352. data/spec/unit/http/service/compiler_spec.rb +186 -9
  353. data/spec/unit/http/service/file_server_spec.rb +37 -6
  354. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  355. data/spec/unit/http/service/report_spec.rb +5 -4
  356. data/spec/unit/http/service_spec.rb +3 -4
  357. data/spec/unit/http/session_spec.rb +48 -12
  358. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -0
  359. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  360. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  361. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  362. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +82 -2
  363. data/spec/unit/indirector/file_metadata/http_spec.rb +194 -0
  364. data/spec/unit/indirector/file_metadata/rest_spec.rb +15 -14
  365. data/spec/unit/indirector/json_spec.rb +8 -8
  366. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  367. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  368. data/spec/unit/indirector/request_spec.rb +5 -5
  369. data/spec/unit/indirector/rest_spec.rb +14 -1
  370. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  371. data/spec/unit/indirector/yaml_spec.rb +7 -7
  372. data/spec/unit/interface_spec.rb +3 -3
  373. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  374. data/spec/unit/network/format_support_spec.rb +3 -2
  375. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -1
  376. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  377. data/spec/unit/network/http/connection_spec.rb +552 -190
  378. data/spec/unit/network/http/nocache_pool_spec.rb +22 -0
  379. data/spec/unit/network/http/pool_spec.rb +3 -3
  380. data/spec/unit/network/http_pool_spec.rb +63 -57
  381. data/spec/unit/network/http_spec.rb +1 -1
  382. data/spec/unit/node/environment_spec.rb +33 -0
  383. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  384. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  385. data/spec/unit/parser/scope_spec.rb +1 -1
  386. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  387. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  388. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  389. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  390. data/spec/unit/provider/exec_spec.rb +4 -3
  391. data/spec/unit/provider/group/windows_adsi_spec.rb +43 -10
  392. data/spec/unit/provider/package/aix_spec.rb +29 -0
  393. data/spec/unit/provider/package/apt_spec.rb +107 -0
  394. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  395. data/spec/unit/provider/package/dnfmodule_spec.rb +54 -15
  396. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  397. data/spec/unit/provider/package/gem_spec.rb +40 -0
  398. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  399. data/spec/unit/provider/package/pacman_spec.rb +6 -21
  400. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  401. data/spec/unit/provider/package/pip_spec.rb +68 -19
  402. data/spec/unit/provider/package/pkgdmg_spec.rb +1 -1
  403. data/spec/unit/provider/package/pkgng_spec.rb +38 -0
  404. data/spec/unit/provider/package/portage_spec.rb +5 -0
  405. data/spec/unit/provider/package/puppet_gem_spec.rb +12 -1
  406. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  407. data/spec/unit/provider/package/rpm_spec.rb +0 -212
  408. data/spec/unit/provider/package/yum_spec.rb +274 -1
  409. data/spec/unit/provider/package/zypper_spec.rb +98 -0
  410. data/spec/unit/provider/service/base_spec.rb +2 -4
  411. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  412. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  413. data/spec/unit/provider/service/debian_spec.rb +3 -5
  414. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  415. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  416. data/spec/unit/provider/service/init_spec.rb +46 -5
  417. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  418. data/spec/unit/provider/service/openbsd_spec.rb +9 -0
  419. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  420. data/spec/unit/provider/service/openwrt_spec.rb +2 -1
  421. data/spec/unit/provider/service/redhat_spec.rb +10 -1
  422. data/spec/unit/provider/service/runit_spec.rb +2 -1
  423. data/spec/unit/provider/service/smf_spec.rb +1 -1
  424. data/spec/unit/provider/service/src_spec.rb +3 -5
  425. data/spec/unit/provider/service/systemd_spec.rb +95 -18
  426. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  427. data/spec/unit/provider/service/windows_spec.rb +50 -14
  428. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  429. data/spec/unit/provider/user/useradd_spec.rb +30 -16
  430. data/spec/unit/provider/user/windows_adsi_spec.rb +85 -3
  431. data/spec/unit/puppet_pal_2pec.rb +11 -0
  432. data/spec/unit/puppet_pal_catalog_spec.rb +43 -0
  433. data/spec/unit/puppet_spec.rb +33 -0
  434. data/spec/unit/reports/http_spec.rb +70 -52
  435. data/spec/unit/reports/store_spec.rb +17 -13
  436. data/spec/unit/resource_spec.rb +3 -3
  437. data/spec/unit/rest/route_spec.rb +4 -4
  438. data/spec/unit/settings_spec.rb +44 -22
  439. data/spec/unit/ssl/host_spec.rb +4 -2
  440. data/spec/unit/ssl/oids_spec.rb +1 -0
  441. data/spec/unit/ssl/ssl_provider_spec.rb +69 -43
  442. data/spec/unit/ssl/state_machine_spec.rb +90 -14
  443. data/spec/unit/test/test_helper_spec.rb +17 -0
  444. data/spec/unit/transaction/persistence_spec.rb +15 -0
  445. data/spec/unit/transaction/report_spec.rb +7 -1
  446. data/spec/unit/type/file/source_spec.rb +4 -4
  447. data/spec/unit/type/file_spec.rb +122 -96
  448. data/spec/unit/type/filebucket_spec.rb +1 -1
  449. data/spec/unit/type/service_spec.rb +218 -8
  450. data/spec/unit/type/user_spec.rb +32 -3
  451. data/spec/unit/type_spec.rb +50 -0
  452. data/spec/unit/util/at_fork_spec.rb +2 -2
  453. data/spec/unit/util/autoload_spec.rb +2 -1
  454. data/spec/unit/util/character_encoding_spec.rb +4 -4
  455. data/spec/unit/util/checksums_spec.rb +16 -0
  456. data/spec/unit/util/command_line_spec.rb +11 -6
  457. data/spec/unit/util/log/destinations_spec.rb +1 -29
  458. data/spec/unit/util/package/version/debian_spec.rb +83 -0
  459. data/spec/unit/util/package/version/pip_spec.rb +464 -0
  460. data/spec/unit/util/package/version/range_spec.rb +175 -0
  461. data/spec/unit/util/package/version/rpm_spec.rb +121 -0
  462. data/spec/unit/util/pidlock_spec.rb +83 -47
  463. data/spec/unit/util/rpm_compare_spec.rb +196 -0
  464. data/spec/unit/util/run_mode_spec.rb +6 -6
  465. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  466. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  467. data/spec/unit/util/windows/service_spec.rb +4 -4
  468. data/spec/unit/util/windows/sid_spec.rb +2 -2
  469. data/spec/unit/util_spec.rb +3 -3
  470. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  471. data/tasks/generate_cert_fixtures.rake +15 -1
  472. data/tasks/manpages.rake +5 -35
  473. metadata +90 -51
  474. data/spec/integration/faces/config_spec.rb +0 -91
  475. data/spec/integration/faces/documentation_spec.rb +0 -57
  476. data/spec/integration/faces/plugin_spec.rb +0 -63
  477. data/spec/integration/file_bucket/file_spec.rb +0 -50
  478. data/spec/integration/file_serving/content_spec.rb +0 -7
  479. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  480. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  481. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  482. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  483. data/spec/integration/module_tool/forge_spec.rb +0 -64
  484. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  485. data/spec/integration/provider/service/init_spec.rb +0 -48
  486. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  487. data/spec/integration/provider/service/windows_spec.rb +0 -50
  488. data/spec/integration/reference/providers_spec.rb +0 -21
  489. data/spec/integration/reports_spec.rb +0 -13
  490. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  491. data/spec/integration/ssl/host_spec.rb +0 -72
  492. data/spec/integration/ssl/key_spec.rb +0 -99
  493. data/spec/integration/test/test_helper_spec.rb +0 -31
  494. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  495. data/spec/unit/face/man_spec.rb +0 -25
  496. data/spec/unit/man_spec.rb +0 -31
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'webmock/rspec'
3
2
  require 'puppet/http'
4
3
 
5
4
  describe Puppet::HTTP::Service::FileServer do
@@ -13,7 +12,7 @@ describe Puppet::HTTP::Service::FileServer do
13
12
 
14
13
  before :each do
15
14
  Puppet[:server] = 'www.example.com'
16
- Puppet[:masterport] = 443
15
+ Puppet[:serverport] = 443
17
16
  end
18
17
 
19
18
  context 'when making requests' do
@@ -32,7 +31,7 @@ describe Puppet::HTTP::Service::FileServer do
32
31
  context 'when routing to the file service' do
33
32
  it 'defaults the server and port based on settings' do
34
33
  Puppet[:server] = 'file.example.com'
35
- Puppet[:masterport] = 8141
34
+ Puppet[:serverport] = 8141
36
35
 
37
36
  stub_request(:get, "https://file.example.com:8141/puppet/v3/file_content/:mount/:path?environment=testing")
38
37
 
@@ -63,10 +62,19 @@ describe Puppet::HTTP::Service::FileServer do
63
62
  status: 200, body: filemetadata.render, headers: { 'Content-Type' => 'application/json' }
64
63
  )
65
64
 
66
- metadata = subject.get_file_metadata(path: request_path, environment: environment)
65
+ _, metadata = subject.get_file_metadata(path: request_path, environment: environment)
67
66
  expect(metadata.path).to eq(path)
68
67
  end
69
68
 
69
+ it 'returns the request response' do
70
+ stub_request(:get, url).to_return(
71
+ status: 200, body: filemetadata.render, headers: { 'Content-Type' => 'application/json' }
72
+ )
73
+
74
+ resp, _ = subject.get_file_metadata(path: request_path, environment: environment)
75
+ expect(resp).to be_a(Puppet::HTTP::Response)
76
+ end
77
+
70
78
  it 'raises a protocol error if the Content-Type header is missing from the response' do
71
79
  stub_request(:get, url).to_return(status: 200, body: '', headers: {})
72
80
 
@@ -136,10 +144,19 @@ describe Puppet::HTTP::Service::FileServer do
136
144
  status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' }
137
145
  )
138
146
 
139
- metadatas = subject.get_file_metadatas(path: request_path, environment: environment)
147
+ _, metadatas = subject.get_file_metadatas(path: request_path, environment: environment)
140
148
  expect(metadatas.first.path).to eq(path)
141
149
  end
142
150
 
151
+ it 'returns the request response' do
152
+ stub_request(:get, url).to_return(
153
+ status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' }
154
+ )
155
+
156
+ resp, _ = subject.get_file_metadatas(path: request_path, environment: environment)
157
+ expect(resp).to be_a(Puppet::HTTP::Response)
158
+ end
159
+
143
160
  it 'automatically converts an array of parameters to the stringified query' do
144
161
  url = "https://www.example.com/puppet/v3/file_metadatas/:mount/#{path}?checksum_type=md5&environment=testing&ignore=CVS&ignore=.git&ignore=.hg&links=manage&recurse=false&source_permissions=ignore"
145
162
  stub_request(:get, url).with(
@@ -148,7 +165,7 @@ describe Puppet::HTTP::Service::FileServer do
148
165
  status: 200, body: formatter.render_multiple(filemetadatas), headers: { 'Content-Type' => 'application/json' }
149
166
  )
150
167
 
151
- metadatas = subject.get_file_metadatas(path: request_path, environment: environment, ignore: ['CVS', '.git', '.hg'])
168
+ _, metadatas = subject.get_file_metadatas(path: request_path, environment: environment, ignore: ['CVS', '.git', '.hg'])
152
169
  expect(metadatas.first.path).to eq(path)
153
170
  end
154
171
 
@@ -222,6 +239,13 @@ describe Puppet::HTTP::Service::FileServer do
222
239
  }.to yield_with_args("and beyond")
223
240
  end
224
241
 
242
+ it 'returns the request response' do
243
+ stub_request(:get, uri)
244
+
245
+ resp = subject.get_file_content(path: '/:mount/:path', environment: environment) { |b| b }
246
+ expect(resp).to be_a(Puppet::HTTP::Response)
247
+ end
248
+
225
249
  it 'raises response error if unsuccessful' do
226
250
  stub_request(:get, uri).to_return(status: [400, 'Bad Request'])
227
251
 
@@ -255,6 +279,13 @@ describe Puppet::HTTP::Service::FileServer do
255
279
  }.to yield_with_args("and beyond")
256
280
  end
257
281
 
282
+ it 'returns the request response' do
283
+ stub_request(:get, uri)
284
+
285
+ resp = subject.get_static_file_content(path: '/:mount/:path', environment: environment, code_id: code_id) { |b| b }
286
+ expect(resp).to be_a(Puppet::HTTP::Response)
287
+ end
288
+
258
289
  it 'raises response error if unsuccessful' do
259
290
  stub_request(:get, uri).to_return(status: [400, 'Bad Request'])
260
291
 
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+ require 'puppet/http'
3
+
4
+ describe Puppet::HTTP::Service::Puppetserver do
5
+ let(:ssl_context) { Puppet::SSL::SSLContext.new }
6
+ let(:client) { Puppet::HTTP::Client.new(ssl_context: ssl_context) }
7
+ let(:subject) { client.create_session.route_to(:puppetserver) }
8
+
9
+ before :each do
10
+ Puppet[:server] = 'puppetserver.example.com'
11
+ end
12
+
13
+ context 'when making requests' do
14
+ it 'includes default HTTP headers' do
15
+ stub_request(:get, "https://puppetserver.example.com:8140/status/v1/simple/master").with do |request|
16
+ expect(request.headers).to include({'X-Puppet-Version' => /./, 'User-Agent' => /./})
17
+ expect(request.headers).to_not include('X-Puppet-Profiling')
18
+ end.to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
19
+
20
+ subject.get_simple_status
21
+ end
22
+
23
+ it 'includes extra headers' do
24
+ Puppet[:http_extra_headers] = 'region:us-west'
25
+
26
+ stub_request(:get, "https://puppetserver.example.com:8140/status/v1/simple/master")
27
+ .with(headers: {'Region' => 'us-west'})
28
+ .to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
29
+
30
+ subject.get_simple_status
31
+ end
32
+ end
33
+
34
+ context 'when routing to the puppetserver service' do
35
+ it 'defaults the server and port based on settings' do
36
+ Puppet[:server] = 'compiler2.example.com'
37
+ Puppet[:serverport] = 8141
38
+
39
+ stub_request(:get, "https://compiler2.example.com:8141/status/v1/simple/master")
40
+ .to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
41
+
42
+ subject.get_simple_status
43
+ end
44
+ end
45
+
46
+ context 'when getting puppetserver status' do
47
+ let(:url) { "https://puppetserver.example.com:8140/status/v1/simple/master" }
48
+
49
+ it 'returns the request response and status' do
50
+ stub_request(:get, url)
51
+ .to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
52
+
53
+ resp, status = subject.get_simple_status
54
+ expect(resp).to be_a(Puppet::HTTP::Response)
55
+ expect(status).to eq('running')
56
+ end
57
+
58
+ it 'raises a response error if unsuccessful' do
59
+ stub_request(:get, url).to_return(status: [500, 'Internal Server Error'])
60
+
61
+ expect {
62
+ subject.get_simple_status
63
+ }.to raise_error do |err|
64
+ expect(err).to be_an_instance_of(Puppet::HTTP::ResponseError)
65
+ expect(err.message).to eq("Internal Server Error")
66
+ expect(err.response.code).to eq(500)
67
+ end
68
+ end
69
+
70
+ it 'accepts an ssl context' do
71
+ stub_request(:get, url)
72
+ .to_return(body: "running", headers: {'Content-Type' => 'text/plain;charset=utf-8'})
73
+
74
+ other_ctx = Puppet::SSL::SSLContext.new
75
+ expect(client).to receive(:connect).with(URI(url), options: {ssl_context: other_ctx}).and_call_original
76
+
77
+ session = client.create_session
78
+ service = Puppet::HTTP::Service.create_service(client, session, :puppetserver, 'puppetserver.example.com', 8140)
79
+ service.get_simple_status(ssl_context: other_ctx)
80
+ end
81
+ end
82
+ end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'webmock/rspec'
3
2
  require 'puppet/http'
4
3
 
5
4
  describe Puppet::HTTP::Service::Report do
@@ -37,11 +36,11 @@ describe Puppet::HTTP::Service::Report do
37
36
  subject.put_report('report', report, environment: environment)
38
37
  end
39
38
 
40
- it 'fallbacks to server and masterport' do
39
+ it 'fallbacks to server and serverport' do
41
40
  Puppet[:report_server] = nil
42
41
  Puppet[:report_port] = nil
43
42
  Puppet[:server] = 'report2.example.com'
44
- Puppet[:masterport] = 8142
43
+ Puppet[:serverport] = 8142
45
44
 
46
45
  stub_request(:put, "https://report2.example.com:8142/puppet/v3/report/report?environment=testing")
47
46
 
@@ -85,7 +84,9 @@ describe Puppet::HTTP::Service::Report do
85
84
  stub_request(:put, url)
86
85
  .to_return(status: 200, body: body, headers: {'Content-Type' => 'application/json'})
87
86
 
88
- expect(subject.put_report('infinity', report, environment: environment).body).to eq(body)
87
+ resp = subject.put_report('infinity', report, environment: environment)
88
+ expect(resp.body).to eq(body)
89
+ expect(resp).to be_a(Puppet::HTTP::Response)
89
90
  end
90
91
 
91
92
  it 'raises response error if unsuccessful' do
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'webmock/rspec'
3
2
  require 'puppet/http'
4
3
  require 'puppet/file_serving'
5
4
  require 'puppet/file_serving/content'
@@ -17,7 +16,7 @@ describe Puppet::HTTP::Service do
17
16
  @client.get(
18
17
  url,
19
18
  headers: add_puppet_headers({'Default-Header' => 'default-value'}),
20
- ssl_context: ssl_context
19
+ options: {ssl_context: ssl_context}
21
20
  )
22
21
  end
23
22
 
@@ -82,14 +81,14 @@ describe Puppet::HTTP::Service do
82
81
  end
83
82
 
84
83
  it "connects to the base URL with a nil ssl context" do
85
- expect(client).to receive(:connect).with(url, ssl_context: nil)
84
+ expect(client).to receive(:connect).with(url, options: {ssl_context: nil})
86
85
 
87
86
  service.connect
88
87
  end
89
88
 
90
89
  it "accepts an optional ssl_context" do
91
90
  other_ctx = Puppet::SSL::SSLContext.new
92
- expect(client).to receive(:connect).with(url, ssl_context: other_ctx)
91
+ expect(client).to receive(:connect).with(url, options: {ssl_context: other_ctx})
93
92
 
94
93
  service.connect(ssl_context: other_ctx)
95
94
  end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'webmock/rspec'
3
2
  require 'puppet/http'
4
3
 
5
4
  describe Puppet::HTTP::Session do
@@ -10,10 +9,14 @@ describe Puppet::HTTP::Session do
10
9
  double('good', url: uri, connect: nil)
11
10
  }
12
11
  let(:bad_service) {
12
+ create_bad_service
13
+ }
14
+
15
+ def create_bad_service(failure_message = 'whoops')
13
16
  service = double('bad', url: uri)
14
- allow(service).to receive(:connect).and_raise(Puppet::HTTP::ConnectionError, 'whoops')
17
+ allow(service).to receive(:connect).and_raise(Puppet::HTTP::ConnectionError, failure_message)
15
18
  service
16
- }
19
+ end
17
20
 
18
21
  class DummyResolver < Puppet::HTTP::Resolver
19
22
  attr_reader :count
@@ -23,7 +26,7 @@ describe Puppet::HTTP::Session do
23
26
  @count = 0
24
27
  end
25
28
 
26
- def resolve(session, name, ssl_context: nil)
29
+ def resolve(session, name, ssl_context: nil, canceled_handler: nil)
27
30
  @count += 1
28
31
  return @service if check_connection?(session, @service, ssl_context: ssl_context)
29
32
  end
@@ -31,13 +34,11 @@ describe Puppet::HTTP::Session do
31
34
 
32
35
  context 'when routing' do
33
36
  it 'returns the first resolved service' do
34
- Puppet[:log_level] = :debug
35
37
  resolvers = [DummyResolver.new(bad_service), DummyResolver.new(good_service)]
36
38
  session = described_class.new(client, resolvers)
37
39
  resolved = session.route_to(:ca)
38
40
 
39
41
  expect(resolved).to eq(good_service)
40
- expect(@logs).to include(an_object_having_attributes(level: :debug, message: "Connection to #{uri} failed, trying next route: whoops"))
41
42
  end
42
43
 
43
44
  it 'only resolves once per session' do
@@ -58,6 +59,18 @@ describe Puppet::HTTP::Session do
58
59
  }.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
59
60
  end
60
61
 
62
+ it 'logs all routing failures as errors when there are no more routes' do
63
+ resolvers = [DummyResolver.new(create_bad_service('whoops1')), DummyResolver.new(create_bad_service('whoops2'))]
64
+ session = described_class.new(client, resolvers)
65
+
66
+ expect {
67
+ session.route_to(:ca)
68
+ }.to raise_error(Puppet::HTTP::RouteError, 'No more routes to ca')
69
+
70
+ expect(@logs).to include(an_object_having_attributes(level: :err, message: "Connection to #{uri} failed, trying next route: whoops1"),
71
+ an_object_having_attributes(level: :err, message: "Connection to #{uri} failed, trying next route: whoops2"))
72
+ end
73
+
61
74
  it 'accepts an ssl context to use when connecting' do
62
75
  alt_context = Puppet::SSL::SSLContext.new
63
76
  expect(good_service).to receive(:connect).with(ssl_context: alt_context)
@@ -143,16 +156,15 @@ describe Puppet::HTTP::Session do
143
156
  expect(service.url).to eq(URI("https://bar.example.com:8140/puppet-ca/v1"))
144
157
  end
145
158
 
146
- it "fails if server_list doesn't return anything valid" do
147
- Puppet[:server_list] = 'foo.example.com,bar.example.com'
159
+ it "does not fallback from server_list to the settings resolver when server_list is exhausted" do
160
+ Puppet[:server_list] = 'foo.example.com'
148
161
 
149
- allow_any_instance_of(Puppet::Network::Resolver).to receive(:each_srv_record)
162
+ expect_any_instance_of(Puppet::HTTP::Resolver::Settings).to receive(:resolve).never
150
163
  stub_request(:get, "https://foo.example.com:8140/status/v1/simple/master").to_return(status: 500)
151
- stub_request(:get, "https://bar.example.com:8140/status/v1/simple/master").to_return(status: 500)
152
164
 
153
165
  expect {
154
166
  session.route_to(:ca)
155
- }.to raise_error(Puppet::Error, "Could not select a functional puppet master from server_list: 'foo.example.com,bar.example.com'")
167
+ }.to raise_error(Puppet::HTTP::RouteError, "No more routes to ca")
156
168
  end
157
169
 
158
170
  it "raises when there are no more routes" do
@@ -166,9 +178,12 @@ describe Puppet::HTTP::Session do
166
178
 
167
179
  Puppet::HTTP::Service::SERVICE_NAMES.each do |name|
168
180
  it "resolves #{name} using server_list" do
169
- stub_request(:get, "https://ca.example.com:8141/status/v1/simple/master").to_return(status: 200)
181
+ Puppet[:server_list] = 'apple.example.com'
182
+ req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
170
183
 
171
184
  session.route_to(name)
185
+
186
+ expect(req).to have_been_requested
172
187
  end
173
188
  end
174
189
 
@@ -183,6 +198,27 @@ describe Puppet::HTTP::Session do
183
198
 
184
199
  expect(session.route_to(:report).url.to_s).to eq("https://cherry.example.com:8140/puppet/v3")
185
200
  end
201
+
202
+ it 'resolves once for all services in a session' do
203
+ Puppet[:server_list] = 'apple.example.com'
204
+ req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
205
+
206
+ Puppet::HTTP::Service::SERVICE_NAMES.each do |name|
207
+ session.route_to(name)
208
+ end
209
+
210
+ expect(req).to have_been_requested
211
+ end
212
+
213
+ it 'resolves server_list for each new session' do
214
+ Puppet[:server_list] = 'apple.example.com'
215
+ req = stub_request(:get, "https://apple.example.com:8140/status/v1/simple/master").to_return(status: 200)
216
+
217
+ client.create_session.route_to(:puppet)
218
+ client.create_session.route_to(:puppet)
219
+
220
+ expect(req).to have_been_requested.twice
221
+ end
186
222
  end
187
223
 
188
224
  context 'when retrieving capabilities' do
@@ -477,6 +477,7 @@ describe Puppet::Resource::Catalog::Compiler do
477
477
  end
478
478
 
479
479
  it "should add 'pe_serverversion' when PE" do
480
+ allow(File).to receive(:readable?).and_call_original
480
481
  allow(File).to receive(:readable?).with(pe_version_file).and_return(true)
481
482
  allow(File).to receive(:zero?).with(pe_version_file).and_return(false)
482
483
  allow(File).to receive(:read).and_call_original
@@ -24,7 +24,7 @@ describe Puppet::Resource::Catalog::Json do
24
24
  end
25
25
 
26
26
  before :each do
27
- allow(Puppet.run_mode).to receive(:master?).and_return(true)
27
+ allow(Puppet.run_mode).to receive(:server?).and_return(true)
28
28
  Puppet[:server_datadir] = tmpdir('jsondir')
29
29
  FileUtils.mkdir_p(File.join(Puppet[:server_datadir], 'indirector_testing'))
30
30
  Puppet.push_context(:loaders => Puppet::Pops::Loaders.new(env))
@@ -10,7 +10,7 @@ describe Puppet::Resource::Catalog::Rest do
10
10
 
11
11
  before :each do
12
12
  Puppet[:server] = 'compiler.example.com'
13
- Puppet[:masterport] = 8140
13
+ Puppet[:serverport] = 8140
14
14
 
15
15
  described_class.indirection.terminus_class = :rest
16
16
  end
@@ -9,7 +9,7 @@ describe Puppet::Node::Facts::Rest do
9
9
 
10
10
  before do
11
11
  Puppet[:server] = 'compiler.example.com'
12
- Puppet[:masterport] = 8140
12
+ Puppet[:serverport] = 8140
13
13
 
14
14
  described_class.indirection.terminus_class = :rest
15
15
  end
@@ -3,7 +3,87 @@ require 'spec_helper'
3
3
  require 'puppet/indirector/file_bucket_file/rest'
4
4
 
5
5
  describe Puppet::FileBucketFile::Rest do
6
- it "should be a sublcass of Puppet::Indirector::REST" do
7
- expect(Puppet::FileBucketFile::Rest.superclass).to equal(Puppet::Indirector::REST)
6
+ let(:rest_path) {"filebucket://xanadu:8141/"}
7
+ let(:file_bucket_file) {Puppet::FileBucket::File.new('file contents', :bucket_path => '/some/random/path')}
8
+ let(:files_original_path) {'/path/to/file'}
9
+ let(:dest_path) {"#{rest_path}#{file_bucket_file.name}/#{files_original_path}"}
10
+ let(:file_bucket_path) {"#{rest_path}#{file_bucket_file.checksum_type}/#{file_bucket_file.checksum_data}/#{files_original_path}"}
11
+ let(:source_path) {"#{rest_path}#{file_bucket_file.checksum_type}/#{file_bucket_file.checksum_data}"}
12
+
13
+ let(:uri) { %r{/puppet/v3/file_bucket_file} }
14
+
15
+ describe '#head' do
16
+ it 'includes the environment as a request parameter' do
17
+ stub_request(:head, uri).with(query: hash_including(environment: 'outerspace'))
18
+
19
+ described_class.indirection.head(file_bucket_path, :bucket_path => file_bucket_file.bucket_path, environment: Puppet::Node::Environment.remote('outerspace'))
20
+ end
21
+
22
+ it 'includes bucket path in the request if bucket path is set' do
23
+ stub_request(:head, uri).with(query: hash_including(bucket_path: '/some/random/path'))
24
+
25
+ described_class.indirection.head(file_bucket_path, :bucket_path => file_bucket_file.bucket_path)
26
+ end
27
+
28
+ it "returns nil on 404" do
29
+ stub_request(:head, uri).to_return(status: 404)
30
+
31
+ expect(described_class.indirection.head(file_bucket_path, :bucket_path => file_bucket_file.bucket_path)).to be_falsy
32
+ end
33
+
34
+ it "raises for all other fail codes" do
35
+ stub_request(:head, uri).to_return(status: [503, 'server unavailable'])
36
+
37
+ expect{described_class.indirection.head(file_bucket_path, :bucket_path => file_bucket_file.bucket_path)}.to raise_error(Net::HTTPError, "Error 503 on SERVER: server unavailable")
38
+ end
39
+ end
40
+
41
+ describe '#find' do
42
+ it 'includes the environment as a request parameter' do
43
+ stub_request(:get, uri).with(query: hash_including(environment: 'outerspace')).to_return(status: 200, headers: {'Content-Type' => 'application/octet-stream'})
44
+
45
+ described_class.indirection.find(source_path, :bucket_path => nil, environment: Puppet::Node::Environment.remote('outerspace'))
46
+ end
47
+
48
+ {bucket_path: 'path', diff_with: '4aabe1257043bd0', list_all: 'true', fromdate: '20200404', todate: '20200404'}.each do |param, val|
49
+ it "includes #{param} as a parameter in the request if #{param} is set" do
50
+ stub_request(:get, uri).with(query: hash_including(param => val)).to_return(status: 200, headers: {'Content-Type' => 'application/octet-stream'})
51
+
52
+ options = { param => val }
53
+ described_class.indirection.find(source_path, **options)
54
+ end
55
+ end
56
+
57
+ it 'raises if unsuccessful' do
58
+ stub_request(:get, uri).to_return(status: [503, 'server unavailable'])
59
+
60
+ expect{described_class.indirection.find(source_path, :bucket_path => nil)}.to raise_error(Net::HTTPError, "Error 503 on SERVER: server unavailable")
61
+ end
62
+
63
+ it 'raises if Content-Type is not included in the response' do
64
+ stub_request(:get, uri).to_return(status: 200, headers: {})
65
+
66
+ expect{described_class.indirection.find(source_path, :bucket_path => nil)}.to raise_error(RuntimeError, "No content type in http response; cannot parse")
67
+ end
68
+ end
69
+
70
+ describe '#save' do
71
+ it 'includes the environment as a request parameter' do
72
+ stub_request(:put, uri).with(query: hash_including(environment: 'outerspace'))
73
+
74
+ described_class.indirection.save(file_bucket_file, dest_path, environment: Puppet::Node::Environment.remote('outerspace'))
75
+ end
76
+
77
+ it 'sends the contents of the file as the request body' do
78
+ stub_request(:put, uri).with(body: file_bucket_file.contents)
79
+
80
+ described_class.indirection.save(file_bucket_file, dest_path)
81
+ end
82
+
83
+ it 'raises if unsuccessful' do
84
+ stub_request(:put, uri).to_return(status: [503, 'server unavailable'])
85
+
86
+ expect{described_class.indirection.save(file_bucket_file, dest_path)}.to raise_error(Net::HTTPError, "Error 503 on SERVER: server unavailable")
87
+ end
8
88
  end
9
89
  end