puppet 6.16.0-x64-mingw32 → 6.20.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 (458) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +2 -16
  3. data/Gemfile +6 -2
  4. data/Gemfile.lock +40 -36
  5. data/README.md +3 -4
  6. data/Rakefile +4 -12
  7. data/lib/puppet/agent.rb +2 -2
  8. data/lib/puppet/agent/locker.rb +0 -7
  9. data/lib/puppet/application.rb +10 -6
  10. data/lib/puppet/application/agent.rb +23 -6
  11. data/lib/puppet/application/apply.rb +20 -21
  12. data/lib/puppet/application/device.rb +1 -0
  13. data/lib/puppet/application/doc.rb +1 -1
  14. data/lib/puppet/application/filebucket.rb +2 -2
  15. data/lib/puppet/application/lookup.rb +16 -4
  16. data/lib/puppet/application/script.rb +1 -0
  17. data/lib/puppet/application_support.rb +7 -0
  18. data/lib/puppet/configurer.rb +70 -20
  19. data/lib/puppet/configurer/downloader.rb +31 -10
  20. data/lib/puppet/confine.rb +2 -2
  21. data/lib/puppet/confine/any.rb +1 -1
  22. data/lib/puppet/defaults.rb +113 -46
  23. data/lib/puppet/environments.rb +84 -59
  24. data/lib/puppet/face/catalog.rb +1 -1
  25. data/lib/puppet/face/config.rb +56 -16
  26. data/lib/puppet/face/epp.rb +12 -2
  27. data/lib/puppet/face/facts.rb +60 -0
  28. data/lib/puppet/face/node.rb +3 -3
  29. data/lib/puppet/face/node/clean.rb +2 -2
  30. data/lib/puppet/face/status.rb +1 -1
  31. data/lib/puppet/feature/base.rb +1 -1
  32. data/lib/puppet/ffi/posix.rb +10 -0
  33. data/lib/puppet/ffi/posix/constants.rb +14 -0
  34. data/lib/puppet/ffi/posix/functions.rb +24 -0
  35. data/lib/puppet/file_bucket/dipper.rb +1 -1
  36. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  37. data/lib/puppet/file_serving/metadata.rb +4 -1
  38. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  39. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  40. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  41. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  42. data/lib/puppet/file_system/file_impl.rb +4 -4
  43. data/lib/puppet/file_system/uniquefile.rb +8 -16
  44. data/lib/puppet/forge.rb +1 -1
  45. data/lib/puppet/forge/cache.rb +1 -1
  46. data/lib/puppet/forge/repository.rb +3 -7
  47. data/lib/puppet/functions/epp.rb +1 -0
  48. data/lib/puppet/functions/inline_epp.rb +1 -0
  49. data/lib/puppet/functions/lstrip.rb +4 -4
  50. data/lib/puppet/functions/new.rb +8 -3
  51. data/lib/puppet/functions/reverse_each.rb +1 -1
  52. data/lib/puppet/functions/rstrip.rb +4 -4
  53. data/lib/puppet/functions/step.rb +1 -1
  54. data/lib/puppet/functions/strip.rb +4 -4
  55. data/lib/puppet/gettext/config.rb +5 -5
  56. data/lib/puppet/gettext/module_translations.rb +4 -4
  57. data/lib/puppet/http.rb +1 -0
  58. data/lib/puppet/http/client.rb +6 -1
  59. data/lib/puppet/http/redirector.rb +9 -7
  60. data/lib/puppet/http/resolver.rb +5 -8
  61. data/lib/puppet/http/resolver/server_list.rb +18 -36
  62. data/lib/puppet/http/resolver/settings.rb +4 -4
  63. data/lib/puppet/http/resolver/srv.rb +5 -5
  64. data/lib/puppet/http/response.rb +19 -0
  65. data/lib/puppet/http/service.rb +3 -1
  66. data/lib/puppet/http/service/compiler.rb +1 -1
  67. data/lib/puppet/http/service/file_server.rb +1 -1
  68. data/lib/puppet/http/service/puppetserver.rb +39 -0
  69. data/lib/puppet/http/session.rb +5 -4
  70. data/lib/puppet/indirector.rb +1 -1
  71. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  72. data/lib/puppet/indirector/exec.rb +1 -1
  73. data/lib/puppet/indirector/fact_search.rb +60 -0
  74. data/lib/puppet/indirector/facts/facter.rb +3 -3
  75. data/lib/puppet/indirector/facts/json.rb +27 -0
  76. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  77. data/lib/puppet/indirector/file_content/rest.rb +1 -1
  78. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  79. data/lib/puppet/indirector/file_metadata/rest.rb +2 -2
  80. data/lib/puppet/indirector/hiera.rb +4 -0
  81. data/lib/puppet/indirector/indirection.rb +1 -1
  82. data/lib/puppet/indirector/json.rb +5 -1
  83. data/lib/puppet/indirector/msgpack.rb +1 -1
  84. data/lib/puppet/indirector/node/json.rb +8 -0
  85. data/lib/puppet/indirector/report/json.rb +34 -0
  86. data/lib/puppet/indirector/report/processor.rb +2 -2
  87. data/lib/puppet/indirector/request.rb +5 -5
  88. data/lib/puppet/indirector/yaml.rb +1 -1
  89. data/lib/puppet/module.rb +1 -2
  90. data/lib/puppet/module_tool/applications/installer.rb +48 -2
  91. data/lib/puppet/module_tool/errors/shared.rb +17 -2
  92. data/lib/puppet/network/format_support.rb +2 -2
  93. data/lib/puppet/network/formats.rb +2 -1
  94. data/lib/puppet/network/http/api/indirected_routes.rb +1 -1
  95. data/lib/puppet/network/http/api/master/v3/environment.rb +3 -0
  96. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  97. data/lib/puppet/network/http/connection_adapter.rb +6 -4
  98. data/lib/puppet/network/http/route.rb +2 -2
  99. data/lib/puppet/node/environment.rb +12 -5
  100. data/lib/puppet/node/facts.rb +17 -0
  101. data/lib/puppet/pal/pal_impl.rb +90 -13
  102. data/lib/puppet/parameter.rb +1 -1
  103. data/lib/puppet/parser/ast/leaf.rb +7 -6
  104. data/lib/puppet/parser/ast/pops_bridge.rb +0 -4
  105. data/lib/puppet/parser/compiler.rb +1 -1
  106. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +2 -0
  107. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +2 -0
  108. data/lib/puppet/parser/environment_compiler.rb +4 -1
  109. data/lib/puppet/parser/functions.rb +21 -17
  110. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  111. data/lib/puppet/parser/resource.rb +3 -2
  112. data/lib/puppet/parser/resource/param.rb +6 -0
  113. data/lib/puppet/parser/templatewrapper.rb +1 -1
  114. data/lib/puppet/parser/type_loader.rb +2 -2
  115. data/lib/puppet/pops/adaptable.rb +7 -13
  116. data/lib/puppet/pops/adapters.rb +8 -4
  117. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  118. data/lib/puppet/pops/evaluator/deferred_resolver.rb +5 -3
  119. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -8
  120. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  121. data/lib/puppet/pops/issues.rb +5 -0
  122. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  123. data/lib/puppet/pops/loaders.rb +18 -11
  124. data/lib/puppet/pops/lookup/context.rb +1 -1
  125. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  126. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  127. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -0
  128. data/lib/puppet/pops/types/iterable.rb +34 -8
  129. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  130. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  131. data/lib/puppet/pops/validation/checker4_0.rb +29 -15
  132. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  133. data/lib/puppet/provider/file/windows.rb +1 -1
  134. data/lib/puppet/provider/package/apt.rb +38 -0
  135. data/lib/puppet/provider/package/aptitude.rb +1 -1
  136. data/lib/puppet/provider/package/dpkg.rb +1 -1
  137. data/lib/puppet/provider/package/gem.rb +4 -2
  138. data/lib/puppet/provider/package/pip2.rb +17 -0
  139. data/lib/puppet/provider/package/puppet_gem.rb +5 -0
  140. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  141. data/lib/puppet/provider/package/yum.rb +2 -1
  142. data/lib/puppet/provider/package/zypper.rb +3 -0
  143. data/lib/puppet/provider/service/windows.rb +23 -7
  144. data/lib/puppet/provider/user/aix.rb +3 -3
  145. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  146. data/lib/puppet/provider/user/useradd.rb +11 -4
  147. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  148. data/lib/puppet/reference/configuration.rb +6 -5
  149. data/lib/puppet/reports/http.rb +2 -0
  150. data/lib/puppet/resource.rb +2 -1
  151. data/lib/puppet/resource/type.rb +10 -1
  152. data/lib/puppet/rest/route.rb +2 -2
  153. data/lib/puppet/settings.rb +63 -21
  154. data/lib/puppet/settings/alias_setting.rb +37 -0
  155. data/lib/puppet/settings/base_setting.rb +26 -2
  156. data/lib/puppet/ssl/ssl_context.rb +2 -2
  157. data/lib/puppet/ssl/ssl_provider.rb +20 -1
  158. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  159. data/lib/puppet/test/test_helper.rb +18 -13
  160. data/lib/puppet/transaction.rb +2 -2
  161. data/lib/puppet/transaction/persistence.rb +1 -1
  162. data/lib/puppet/transaction/report.rb +12 -8
  163. data/lib/puppet/trusted_external.rb +29 -1
  164. data/lib/puppet/type.rb +15 -7
  165. data/lib/puppet/type/file.rb +40 -15
  166. data/lib/puppet/type/file/checksum.rb +4 -4
  167. data/lib/puppet/type/file/source.rb +32 -12
  168. data/lib/puppet/type/filebucket.rb +1 -1
  169. data/lib/puppet/type/notify.rb +2 -2
  170. data/lib/puppet/type/service.rb +53 -0
  171. data/lib/puppet/type/user.rb +18 -3
  172. data/lib/puppet/util.rb +41 -3
  173. data/lib/puppet/util/autoload.rb +10 -15
  174. data/lib/puppet/util/character_encoding.rb +9 -5
  175. data/lib/puppet/util/checksums.rb +19 -4
  176. data/lib/puppet/util/connection.rb +8 -8
  177. data/lib/puppet/util/execution.rb +2 -2
  178. data/lib/puppet/util/fact_dif.rb +62 -0
  179. data/lib/puppet/util/fileparsing.rb +2 -2
  180. data/lib/puppet/util/posix.rb +54 -5
  181. data/lib/puppet/util/provider_features.rb +1 -1
  182. data/lib/puppet/util/reference.rb +1 -1
  183. data/lib/puppet/util/rubygems.rb +5 -1
  184. data/lib/puppet/util/run_mode.rb +5 -1
  185. data/lib/puppet/util/windows.rb +1 -0
  186. data/lib/puppet/util/windows/api_types.rb +60 -33
  187. data/lib/puppet/util/windows/eventlog.rb +1 -6
  188. data/lib/puppet/util/windows/monkey_patches/dir.rb +40 -0
  189. data/lib/puppet/util/windows/principal.rb +8 -6
  190. data/lib/puppet/util/windows/registry.rb +11 -11
  191. data/lib/puppet/util/windows/security.rb +4 -4
  192. data/lib/puppet/util/windows/service.rb +43 -26
  193. data/lib/puppet/util/windows/user.rb +242 -8
  194. data/lib/puppet/version.rb +1 -1
  195. data/locales/puppet.pot +501 -443
  196. data/man/man5/puppet.conf.5 +70 -24
  197. data/man/man8/puppet-agent.8 +8 -5
  198. data/man/man8/puppet-apply.8 +2 -2
  199. data/man/man8/puppet-catalog.8 +1 -1
  200. data/man/man8/puppet-config.8 +6 -6
  201. data/man/man8/puppet-describe.8 +1 -1
  202. data/man/man8/puppet-device.8 +2 -2
  203. data/man/man8/puppet-doc.8 +1 -1
  204. data/man/man8/puppet-epp.8 +1 -1
  205. data/man/man8/puppet-facts.8 +32 -1
  206. data/man/man8/puppet-filebucket.8 +3 -3
  207. data/man/man8/puppet-generate.8 +1 -1
  208. data/man/man8/puppet-help.8 +1 -1
  209. data/man/man8/puppet-key.8 +1 -1
  210. data/man/man8/puppet-lookup.8 +2 -2
  211. data/man/man8/puppet-man.8 +1 -1
  212. data/man/man8/puppet-module.8 +1 -1
  213. data/man/man8/puppet-node.8 +7 -4
  214. data/man/man8/puppet-parser.8 +1 -1
  215. data/man/man8/puppet-plugin.8 +1 -1
  216. data/man/man8/puppet-report.8 +4 -1
  217. data/man/man8/puppet-resource.8 +1 -1
  218. data/man/man8/puppet-script.8 +2 -2
  219. data/man/man8/puppet-ssl.8 +1 -1
  220. data/man/man8/puppet-status.8 +2 -2
  221. data/man/man8/puppet.8 +2 -2
  222. data/spec/fixtures/integration/application/agent/cached_deferred_catalog.json +91 -0
  223. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  224. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  225. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  226. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  227. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  228. data/spec/fixtures/unit/provider/user/aix/aix_passwd_file.out +4 -0
  229. data/spec/integration/application/agent_spec.rb +263 -54
  230. data/spec/integration/application/apply_spec.rb +168 -149
  231. data/spec/integration/application/doc_spec.rb +16 -6
  232. data/spec/integration/application/filebucket_spec.rb +70 -21
  233. data/spec/integration/application/help_spec.rb +42 -0
  234. data/spec/integration/application/lookup_spec.rb +13 -0
  235. data/spec/integration/application/module_spec.rb +68 -0
  236. data/spec/integration/application/plugin_spec.rb +53 -3
  237. data/spec/integration/configurer_spec.rb +14 -0
  238. data/spec/integration/data_binding_spec.rb +82 -0
  239. data/spec/integration/defaults_spec.rb +20 -3
  240. data/spec/integration/directory_environments_spec.rb +17 -17
  241. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  242. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  243. data/spec/integration/network/http_pool_spec.rb +26 -9
  244. data/spec/integration/node/environment_spec.rb +1 -1
  245. data/spec/integration/parser/compiler_spec.rb +11 -0
  246. data/spec/integration/resource/type_collection_spec.rb +2 -6
  247. data/spec/integration/transaction_spec.rb +4 -9
  248. data/spec/integration/type/file_spec.rb +1 -1
  249. data/spec/integration/util/execution_spec.rb +22 -0
  250. data/spec/integration/util/windows/adsi_spec.rb +5 -3
  251. data/spec/integration/util/windows/monkey_patches/dir_spec.rb +11 -0
  252. data/spec/integration/util/windows/process_spec.rb +26 -32
  253. data/spec/integration/util/windows/registry_spec.rb +7 -17
  254. data/spec/integration/util/windows/user_spec.rb +47 -5
  255. data/spec/integration/util_spec.rb +7 -33
  256. data/spec/lib/puppet_spec/matchers.rb +0 -80
  257. data/spec/lib/puppet_spec/puppetserver.rb +8 -0
  258. data/spec/lib/puppet_spec/settings.rb +6 -1
  259. data/spec/shared_contexts/types_setup.rb +2 -0
  260. data/spec/spec_helper.rb +1 -4
  261. data/spec/unit/agent_spec.rb +8 -6
  262. data/spec/unit/application/agent_spec.rb +3 -5
  263. data/spec/unit/application/config_spec.rb +224 -4
  264. data/spec/unit/application/doc_spec.rb +2 -2
  265. data/spec/unit/application/face_base_spec.rb +6 -4
  266. data/spec/unit/application/facts_spec.rb +41 -10
  267. data/spec/unit/application/filebucket_spec.rb +0 -2
  268. data/spec/unit/application/man_spec.rb +52 -0
  269. data/spec/unit/application/resource_spec.rb +3 -1
  270. data/spec/unit/application/ssl_spec.rb +15 -2
  271. data/spec/unit/application_spec.rb +60 -13
  272. data/spec/unit/configurer/downloader_spec.rb +10 -0
  273. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  274. data/spec/unit/configurer_spec.rb +86 -37
  275. data/spec/unit/confine/feature_spec.rb +1 -1
  276. data/spec/unit/confine_spec.rb +10 -3
  277. data/spec/unit/context/trusted_information_spec.rb +10 -4
  278. data/spec/unit/defaults_spec.rb +20 -1
  279. data/spec/unit/environments_spec.rb +176 -32
  280. data/spec/unit/face/config_spec.rb +65 -12
  281. data/spec/unit/face/node_spec.rb +2 -13
  282. data/spec/unit/file_serving/configuration/parser_spec.rb +0 -1
  283. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  284. data/spec/unit/file_serving/metadata_spec.rb +3 -3
  285. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  286. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  287. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  288. data/spec/unit/file_serving/terminus_helper_spec.rb +11 -4
  289. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  290. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  291. data/spec/unit/file_system_spec.rb +1 -2
  292. data/spec/unit/forge/module_release_spec.rb +2 -7
  293. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  294. data/spec/unit/http/client_spec.rb +64 -9
  295. data/spec/unit/http/resolver_spec.rb +24 -5
  296. data/spec/unit/http/response_spec.rb +6 -0
  297. data/spec/unit/http/service/ca_spec.rb +2 -3
  298. data/spec/unit/http/service/compiler_spec.rb +51 -3
  299. data/spec/unit/http/service/file_server_spec.rb +2 -3
  300. data/spec/unit/http/service/puppetserver_spec.rb +82 -0
  301. data/spec/unit/http/service/report_spec.rb +2 -3
  302. data/spec/unit/http/service_spec.rb +1 -2
  303. data/spec/unit/http/session_spec.rb +8 -21
  304. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  305. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  306. data/spec/unit/indirector/face_spec.rb +0 -1
  307. data/spec/unit/indirector/facts/facter_spec.rb +0 -1
  308. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  309. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  310. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +26 -8
  311. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  312. data/spec/unit/indirector/indirection_spec.rb +8 -12
  313. data/spec/unit/indirector/json_spec.rb +8 -8
  314. data/spec/unit/indirector/key/file_spec.rb +0 -1
  315. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  316. data/spec/unit/indirector/node/json_spec.rb +33 -0
  317. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  318. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  319. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  320. data/spec/unit/indirector/request_spec.rb +5 -5
  321. data/spec/unit/indirector/rest_spec.rb +1 -1
  322. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  323. data/spec/unit/indirector/yaml_spec.rb +7 -7
  324. data/spec/unit/indirector_spec.rb +2 -2
  325. data/spec/unit/interface_spec.rb +3 -3
  326. data/spec/unit/module_tool/applications/installer_spec.rb +66 -0
  327. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  328. data/spec/unit/network/authconfig_spec.rb +0 -3
  329. data/spec/unit/network/format_support_spec.rb +3 -2
  330. data/spec/unit/network/http/api/indirected_routes_spec.rb +2 -10
  331. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  332. data/spec/unit/network/http/connection_spec.rb +42 -32
  333. data/spec/unit/network/http/handler_spec.rb +0 -5
  334. data/spec/unit/node/environment_spec.rb +18 -1
  335. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  336. data/spec/unit/parser/compiler_spec.rb +3 -19
  337. data/spec/unit/parser/environment_compiler_spec.rb +7 -0
  338. data/spec/unit/parser/resource_spec.rb +14 -8
  339. data/spec/unit/parser/scope_spec.rb +1 -1
  340. data/spec/unit/parser/templatewrapper_spec.rb +4 -3
  341. data/spec/unit/pops/evaluator/deferred_resolver_spec.rb +20 -0
  342. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +15 -1
  343. data/spec/unit/pops/loaders/loaders_spec.rb +71 -1
  344. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  345. data/spec/unit/pops/types/type_calculator_spec.rb +1 -11
  346. data/spec/unit/property_spec.rb +1 -0
  347. data/spec/unit/provider/exec_spec.rb +4 -3
  348. data/spec/unit/provider/nameservice_spec.rb +66 -65
  349. data/spec/unit/provider/package/apt_spec.rb +76 -3
  350. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  351. data/spec/unit/provider/package/base_spec.rb +6 -5
  352. data/spec/unit/provider/package/dpkg_spec.rb +22 -7
  353. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  354. data/spec/unit/provider/package/pacman_spec.rb +18 -12
  355. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  356. data/spec/unit/provider/package/pip_spec.rb +6 -11
  357. data/spec/unit/provider/package/pkgdmg_spec.rb +0 -4
  358. data/spec/unit/provider/package/puppet_gem_spec.rb +4 -1
  359. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  360. data/spec/unit/provider/package/yum_spec.rb +31 -0
  361. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  362. data/spec/unit/provider/service/base_spec.rb +2 -4
  363. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  364. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  365. data/spec/unit/provider/service/debian_spec.rb +3 -5
  366. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  367. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  368. data/spec/unit/provider/service/init_spec.rb +45 -5
  369. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  370. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  371. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  372. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  373. data/spec/unit/provider/service/runit_spec.rb +2 -1
  374. data/spec/unit/provider/service/smf_spec.rb +1 -1
  375. data/spec/unit/provider/service/src_spec.rb +3 -5
  376. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  377. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  378. data/spec/unit/provider/service/windows_spec.rb +50 -14
  379. data/spec/unit/provider/user/aix_spec.rb +5 -0
  380. data/spec/unit/provider/user/hpux_spec.rb +1 -1
  381. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  382. data/spec/unit/provider/user/pw_spec.rb +2 -0
  383. data/spec/unit/provider/user/useradd_spec.rb +23 -16
  384. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  385. data/spec/unit/provider_spec.rb +8 -10
  386. data/spec/unit/puppet_pal_2pec.rb +40 -0
  387. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  388. data/spec/unit/reports/store_spec.rb +17 -13
  389. data/spec/unit/resource/capability_finder_spec.rb +6 -1
  390. data/spec/unit/resource/type_spec.rb +1 -1
  391. data/spec/unit/resource_spec.rb +14 -13
  392. data/spec/unit/rest/route_spec.rb +4 -4
  393. data/spec/unit/settings_spec.rb +576 -239
  394. data/spec/unit/ssl/base_spec.rb +0 -1
  395. data/spec/unit/ssl/host_spec.rb +0 -5
  396. data/spec/unit/ssl/ssl_provider_spec.rb +82 -50
  397. data/spec/unit/test/test_helper_spec.rb +17 -0
  398. data/spec/unit/transaction/additional_resource_generator_spec.rb +3 -7
  399. data/spec/unit/transaction/event_manager_spec.rb +14 -11
  400. data/spec/unit/transaction/persistence_spec.rb +15 -0
  401. data/spec/unit/transaction/report_spec.rb +3 -1
  402. data/spec/unit/transaction_spec.rb +13 -4
  403. data/spec/unit/type/file/content_spec.rb +0 -1
  404. data/spec/unit/type/file/selinux_spec.rb +0 -2
  405. data/spec/unit/type/file/source_spec.rb +4 -4
  406. data/spec/unit/type/file_spec.rb +122 -102
  407. data/spec/unit/type/filebucket_spec.rb +1 -1
  408. data/spec/unit/type/group_spec.rb +13 -6
  409. data/spec/unit/type/resources_spec.rb +7 -7
  410. data/spec/unit/type/service_spec.rb +210 -1
  411. data/spec/unit/type/tidy_spec.rb +0 -1
  412. data/spec/unit/type/user_spec.rb +31 -2
  413. data/spec/unit/type_spec.rb +52 -2
  414. data/spec/unit/util/at_fork_spec.rb +2 -2
  415. data/spec/unit/util/autoload_spec.rb +5 -1
  416. data/spec/unit/util/backups_spec.rb +1 -2
  417. data/spec/unit/util/character_encoding_spec.rb +4 -4
  418. data/spec/unit/util/checksums_spec.rb +16 -0
  419. data/spec/unit/util/command_line_spec.rb +11 -6
  420. data/spec/unit/util/execution_spec.rb +15 -11
  421. data/spec/unit/util/inifile_spec.rb +6 -14
  422. data/spec/unit/util/log_spec.rb +8 -7
  423. data/spec/unit/util/logging_spec.rb +3 -3
  424. data/spec/unit/util/posix_spec.rb +363 -15
  425. data/spec/unit/util/rubygems_spec.rb +2 -2
  426. data/spec/unit/util/run_mode_spec.rb +6 -6
  427. data/spec/unit/util/selinux_spec.rb +76 -52
  428. data/spec/unit/util/storage_spec.rb +3 -1
  429. data/spec/unit/util/suidmanager_spec.rb +44 -41
  430. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  431. data/spec/unit/util/windows/service_spec.rb +4 -4
  432. data/spec/unit/util_spec.rb +16 -9
  433. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  434. metadata +52 -53
  435. data/spec/integration/faces/config_spec.rb +0 -91
  436. data/spec/integration/faces/documentation_spec.rb +0 -57
  437. data/spec/integration/file_bucket/file_spec.rb +0 -50
  438. data/spec/integration/file_serving/content_spec.rb +0 -7
  439. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  440. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  441. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  442. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  443. data/spec/integration/module_tool/forge_spec.rb +0 -51
  444. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  445. data/spec/integration/provider/service/init_spec.rb +0 -48
  446. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  447. data/spec/integration/provider/service/windows_spec.rb +0 -50
  448. data/spec/integration/reference/providers_spec.rb +0 -21
  449. data/spec/integration/reports_spec.rb +0 -13
  450. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  451. data/spec/integration/ssl/host_spec.rb +0 -72
  452. data/spec/integration/ssl/key_spec.rb +0 -99
  453. data/spec/integration/test/test_helper_spec.rb +0 -31
  454. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  455. data/spec/unit/face/catalog_spec.rb +0 -6
  456. data/spec/unit/face/man_spec.rb +0 -25
  457. data/spec/unit/face/module_spec.rb +0 -3
  458. data/spec/unit/man_spec.rb +0 -31
@@ -15,13 +15,6 @@ describe Puppet::Face[:node, '0.0.1'] do
15
15
  end
16
16
 
17
17
  describe 'when running #clean' do
18
- before :each do
19
- allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
20
- allow(Puppet::Node::Facts.indirection).to receive(:cache_class=)
21
- allow(Puppet::Node).to receive(:terminus_class=)
22
- allow(Puppet::Node).to receive(:cache_class=)
23
- end
24
-
25
18
  it 'should invoke #cleanup' do
26
19
  expect(subject).to receive(:cleanup).with('hostname')
27
20
  subject.clean('hostname')
@@ -30,10 +23,6 @@ describe Puppet::Face[:node, '0.0.1'] do
30
23
 
31
24
  describe "clean action" do
32
25
  before :each do
33
- allow(Puppet::Node::Facts.indirection).to receive(:terminus_class=)
34
- allow(Puppet::Node::Facts.indirection).to receive(:cache_class=)
35
- allow(Puppet::Node).to receive(:terminus_class=)
36
- allow(Puppet::Node).to receive(:cache_class=)
37
26
  allow(subject).to receive(:cleanup)
38
27
  end
39
28
 
@@ -74,9 +63,9 @@ describe Puppet::Face[:node, '0.0.1'] do
74
63
  subject.clean('hostname')
75
64
  end
76
65
 
77
- it "should run in master mode" do
66
+ it "should run in server mode" do
78
67
  subject.clean('hostname')
79
- expect(Puppet.run_mode).to be_master
68
+ expect(Puppet.run_mode).to be_server
80
69
  end
81
70
 
82
71
  it "should set node cache as yaml" do
@@ -87,7 +87,6 @@ describe Puppet::FileServing::Configuration::Parser do
87
87
  before do
88
88
  @mount = double('testmount', :name => "one", :validate => true)
89
89
  expect(Puppet::FileServing::Mount::File).to receive(:new).with("one").and_return(@mount)
90
- allow(@parser).to receive(:add_modules_mount)
91
90
  end
92
91
 
93
92
  it "should set the mount path to the path attribute from that section" do
@@ -30,11 +30,6 @@ describe Puppet::FileServing::HttpMetadata do
30
30
  end
31
31
 
32
32
  context "with no Last-Modified or Content-MD5 header from the server" do
33
- before do
34
- allow(http_response).to receive(:[]).with('last-modified').and_return(nil)
35
- allow(http_response).to receive(:[]).with('content-md5').and_return(nil)
36
- end
37
-
38
33
  it "should use :mtime as the checksum type, based on current time" do
39
34
  # Stringifying Time.now does some rounding; do so here so we don't end up with a time
40
35
  # that's greater than the stringified version returned by collect.
@@ -51,13 +46,9 @@ describe Puppet::FileServing::HttpMetadata do
51
46
  context "with a Last-Modified header from the server" do
52
47
  let(:time) { Time.now.utc }
53
48
 
54
- before do
55
- allow(http_response).to receive(:[]).with('content-md5').and_return(nil)
56
- end
57
-
58
49
  it "should use :mtime as the checksum type, based on Last-Modified" do
59
50
  # HTTP uses "GMT" not "UTC"
60
- allow(http_response).to receive(:[]).with('last-modified').and_return(time.strftime("%a, %d %b %Y %T GMT"))
51
+ http_response.add_field('last-modified', time.strftime("%a, %d %b %Y %T GMT"))
61
52
  metadata = described_class.new(http_response)
62
53
  metadata.collect
63
54
  expect( metadata.checksum_type ).to eq :mtime
@@ -70,16 +61,48 @@ describe Puppet::FileServing::HttpMetadata do
70
61
  let(:base64) { Digest::MD5.new.base64digest input }
71
62
  let(:hex) { Digest::MD5.new.hexdigest input }
72
63
 
73
- before do
74
- allow(http_response).to receive(:[]).with('last-modified').and_return(nil)
75
- allow(http_response).to receive(:[]).with('content-md5').and_return(base64)
64
+ it "should use the md5 checksum" do
65
+ http_response.add_field('content-md5', base64)
66
+ metadata = described_class.new(http_response)
67
+ metadata.collect
68
+ expect( metadata.checksum_type ).to eq :md5
69
+ expect( metadata.checksum ).to eq "{md5}#{hex}"
76
70
  end
71
+ end
72
+
73
+ context "with X-Checksum-Md5" do
74
+ let(:md5) { "c58989e9740a748de4f5054286faf99b" }
77
75
 
78
76
  it "should use the md5 checksum" do
77
+ http_response.add_field('X-Checksum-Md5', md5)
79
78
  metadata = described_class.new(http_response)
80
79
  metadata.collect
81
80
  expect( metadata.checksum_type ).to eq :md5
82
- expect( metadata.checksum ).to eq "{md5}#{hex}"
81
+ expect( metadata.checksum ).to eq "{md5}#{md5}"
82
+ end
83
+ end
84
+
85
+ context "with X-Checksum-Sha1" do
86
+ let(:sha1) { "01e4d15746f4274b84d740a93e04b9fd2882e3ea" }
87
+
88
+ it "should use the SHA1 checksum" do
89
+ http_response.add_field('X-Checksum-Sha1', sha1)
90
+ metadata = described_class.new(http_response)
91
+ metadata.collect
92
+ expect( metadata.checksum_type ).to eq :sha1
93
+ expect( metadata.checksum ).to eq "{sha1}#{sha1}"
94
+ end
95
+ end
96
+
97
+ context "with X-Checksum-Sha256" do
98
+ let(:sha256) { "a3eda98259c30e1e75039c2123670c18105e1c46efb672e42ca0e4cbe77b002a" }
99
+
100
+ it "should use the SHA256 checksum" do
101
+ http_response.add_field('X-Checksum-Sha256', sha256)
102
+ metadata = described_class.new(http_response)
103
+ metadata.collect
104
+ expect( metadata.checksum_type ).to eq :sha256
105
+ expect( metadata.checksum ).to eq "{sha256}#{sha256}"
83
106
  end
84
107
  end
85
108
  end
@@ -266,9 +266,9 @@ describe Puppet::FileServing::Metadata, :uses_checksums => true do
266
266
  path = tmpfile('bar')
267
267
  FileUtils.touch(path)
268
268
 
269
- allow(Puppet::Util::Windows::Security).to receive(:get_owner).with(path, :use).and_raise(invalid_error)
270
- allow(Puppet::Util::Windows::Security).to receive(:get_group).with(path, :use).and_raise(invalid_error)
271
- allow(Puppet::Util::Windows::Security).to receive(:get_mode).with(path, :use).and_raise(invalid_error)
269
+ allow(Puppet::Util::Windows::Security).to receive(:get_owner).with(path).and_raise(invalid_error)
270
+ allow(Puppet::Util::Windows::Security).to receive(:get_group).with(path).and_raise(invalid_error)
271
+ allow(Puppet::Util::Windows::Security).to receive(:get_mode).with(path).and_raise(invalid_error)
272
272
 
273
273
  stat = Puppet::FileSystem.stat(path)
274
274
 
@@ -52,13 +52,13 @@ describe Puppet::FileServing::Mount::Locales do
52
52
  expect(@mount.search("foo/bar", @request)).to eq(["/"])
53
53
  end
54
54
 
55
- it "should return nil if no modules can be found that have locales and modulepath is invalid" do
55
+ it "should return the default search module path if no modules can be found that have locales and modulepath is invalid" do
56
56
  mod = double('module')
57
57
  allow(mod).to receive(:locales?).and_return(false)
58
58
 
59
59
  allow(@environment).to receive(:modules).and_return([])
60
60
  allow(@environment).to receive(:modulepath).and_return([])
61
- expect(@mount.search("foo/bar", @request)).to be_nil
61
+ expect(@mount.search("foo/bar", @request)).to eq([Puppet[:codedir]])
62
62
  end
63
63
 
64
64
  it "should return the locale paths for each module that has locales" do
@@ -52,13 +52,13 @@ describe Puppet::FileServing::Mount::PluginFacts do
52
52
  expect(@mount.search("foo/bar", @request)).to eq(["/"])
53
53
  end
54
54
 
55
- it "should return nil if no modules can be found that have plugins and modulepath is invalid" do
55
+ it "should return the default search module path if no modules can be found that have plugins and modulepath is invalid" do
56
56
  mod = double('module')
57
57
  allow(mod).to receive(:pluginfacts?).and_return(false)
58
58
 
59
59
  allow(@environment).to receive(:modules).and_return([])
60
60
  allow(@environment).to receive(:modulepath).and_return([])
61
- expect(@mount.search("foo/bar", @request)).to be_nil
61
+ expect(@mount.search("foo/bar", @request)).to eq([Puppet[:codedir]])
62
62
  end
63
63
 
64
64
  it "should return the plugin paths for each module that has plugins" do
@@ -52,13 +52,13 @@ describe Puppet::FileServing::Mount::Plugins do
52
52
  expect(@mount.search("foo/bar", @request)).to eq(["/"])
53
53
  end
54
54
 
55
- it "should return nil if no modules can be found that have plugins and modulepath is invalid" do
55
+ it "should return the default search module path if no modules can be found that have plugins and modulepath is invalid" do
56
56
  mod = double('module')
57
57
  allow(mod).to receive(:plugins?).and_return(false)
58
58
 
59
59
  allow(@environment).to receive(:modules).and_return([])
60
60
  allow(@environment).to receive(:modulepath).and_return([])
61
- expect(@mount.search("foo/bar", @request)).to be_nil
61
+ expect(@mount.search("foo/bar", @request)).to eq([Puppet[:codedir]])
62
62
  end
63
63
 
64
64
  it "should return the plugin paths for each module that has plugins" do
@@ -2,13 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  require 'puppet/file_serving/terminus_helper'
4
4
 
5
+ class Puppet::FileServing::TestHelper
6
+ include Puppet::FileServing::TerminusHelper
7
+
8
+ attr_reader :model
9
+
10
+ def initialize(model)
11
+ @model = model
12
+ end
13
+ end
14
+
5
15
  describe Puppet::FileServing::TerminusHelper do
6
16
  before do
7
- @helper = Object.new
8
- @helper.extend(Puppet::FileServing::TerminusHelper)
9
-
10
17
  @model = double('model')
11
- allow(@helper).to receive(:model).and_return(@model)
18
+ @helper = Puppet::FileServing::TestHelper.new(@model)
12
19
 
13
20
  @request = double('request', :key => "url", :options => {})
14
21
 
@@ -3,62 +3,81 @@ require 'spec_helper'
3
3
  require 'puppet/file_serving/terminus_selector'
4
4
 
5
5
  describe Puppet::FileServing::TerminusSelector do
6
- before do
7
- @object = Object.new
8
- @object.extend(Puppet::FileServing::TerminusSelector)
6
+ class TestSelector
7
+ include Puppet::FileServing::TerminusSelector
8
+ end
9
9
 
10
- @request = double('request', :key => "mymod/myfile", :options => {:node => "whatever"}, :server => nil, :protocol => nil)
10
+ def create_request(key)
11
+ Puppet::Indirector::Request.new(:indirection_name, :find, key, nil, {node: 'whatever'})
11
12
  end
12
13
 
14
+ subject { TestSelector.new }
15
+
13
16
  describe "when being used to select termini" do
14
17
  it "should return :file if the request key is fully qualified" do
15
- expect(@request).to receive(:key).and_return(File.expand_path('/foo'))
16
- expect(@object.select(@request)).to eq(:file)
18
+ request = create_request(File.expand_path('/foo'))
19
+
20
+ expect(subject.select(request)).to eq(:file)
21
+ end
22
+
23
+ it "should return :file_server if the request key is relative" do
24
+ request = create_request('modules/my_module/path/to_file')
25
+
26
+ expect(subject.select(request)).to eq(:file_server)
17
27
  end
18
28
 
19
29
  it "should return :file if the URI protocol is set to 'file'" do
20
- expect(@request).to receive(:protocol).and_return("file")
21
- expect(@object.select(@request)).to eq(:file)
30
+ request = create_request(Puppet::Util.path_to_uri(File.expand_path("/foo")).to_s)
31
+
32
+ expect(subject.select(request)).to eq(:file)
22
33
  end
23
34
 
24
35
  it "should return :http if the URI protocol is set to 'http'" do
25
- expect(@request).to receive(:protocol).and_return("http")
26
- expect(@object.select(@request)).to eq :http
36
+ request = create_request("http://www.example.com")
37
+
38
+ expect(subject.select(request)).to eq(:http)
27
39
  end
28
40
 
29
41
  it "should return :http if the URI protocol is set to 'https'" do
30
- expect(@request).to receive(:protocol).and_return("https")
31
- expect(@object.select(@request)).to eq :http
42
+ request = create_request("https://www.example.com")
43
+
44
+ expect(subject.select(request)).to eq(:http)
45
+ end
46
+
47
+ it "should return :http if the path starts with a double slash" do
48
+ request = create_request("https://www.example.com//index.html")
49
+
50
+ expect(subject.select(request)).to eq(:http)
32
51
  end
33
52
 
34
53
  it "should fail when a protocol other than :puppet, :http(s) or :file is used" do
35
- allow(@request).to receive(:protocol).and_return("ftp")
36
- expect { @object.select(@request) }.to raise_error(ArgumentError)
54
+ request = create_request("ftp://ftp.example.com")
55
+
56
+ expect {
57
+ subject.select(request)
58
+ }.to raise_error(ArgumentError, /URI protocol 'ftp' is not currently supported for file serving/)
37
59
  end
38
60
 
39
61
  describe "and the protocol is 'puppet'" do
40
- before do
41
- allow(@request).to receive(:protocol).and_return("puppet")
42
- end
43
-
44
62
  it "should choose :rest when a server is specified" do
45
- allow(@request).to receive(:protocol).and_return("puppet")
46
- expect(@request).to receive(:server).and_return("foo")
47
- expect(@object.select(@request)).to eq(:rest)
63
+ request = create_request("puppet://puppetserver.example.com")
64
+
65
+ expect(subject.select(request)).to eq(:rest)
48
66
  end
49
67
 
50
68
  # This is so a given file location works when bootstrapping with no server.
51
69
  it "should choose :rest when default_file_terminus is rest" do
52
- allow(@request).to receive(:protocol).and_return("puppet")
53
70
  Puppet[:server] = 'localhost'
54
- expect(@object.select(@request)).to eq(:rest)
71
+ request = create_request("puppet:///plugins")
72
+
73
+ expect(subject.select(request)).to eq(:rest)
55
74
  end
56
75
 
57
76
  it "should choose :file_server when default_file_terminus is file_server and no server is specified on the request" do
58
- expect(@request).to receive(:protocol).and_return("puppet")
59
- expect(@request).to receive(:server).and_return(nil)
60
77
  Puppet[:default_file_terminus] = 'file_server'
61
- expect(@object.select(@request)).to eq(:file_server)
78
+ request = create_request("puppet:///plugins")
79
+
80
+ expect(subject.select(request)).to eq(:file_server)
62
81
  end
63
82
  end
64
83
  end
@@ -84,6 +84,24 @@ describe Puppet::FileSystem::Uniquefile do
84
84
  }.to raise_error(Errno::ENOENT, %r{No such file or directory - A directory component in .* does not exist or is a dangling symbolic link})
85
85
  end
86
86
 
87
+ it "should use UTF8 characters in TMP,TEMP,TMPDIR environment variable", :if => Puppet::Util::Platform.windows? do
88
+ rune_utf8 = "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7"
89
+ temp_rune_utf8 = File.join(Dir.tmpdir, rune_utf8)
90
+ Puppet::FileSystem.mkpath(temp_rune_utf8)
91
+
92
+ # Set the temporary environment variables to the UTF8 temp path
93
+ Puppet::Util::Windows::Process.set_environment_variable('TMPDIR', temp_rune_utf8)
94
+ Puppet::Util::Windows::Process.set_environment_variable('TMP', temp_rune_utf8)
95
+ Puppet::Util::Windows::Process.set_environment_variable('TEMP', temp_rune_utf8)
96
+
97
+ # Create a unique file
98
+ filename = Puppet::FileSystem::Uniquefile.open_tmp('foo') do |file|
99
+ File.dirname(file.path)
100
+ end
101
+
102
+ expect(filename).to eq(temp_rune_utf8)
103
+ end
104
+
87
105
  context "Ruby 1.9.3 Tempfile tests" do
88
106
  # the remaining tests in this file are ported directly from the ruby 1.9.3 source,
89
107
  # since most of this file was ported from there
@@ -872,8 +872,7 @@ describe "Puppet::FileSystem" do
872
872
 
873
873
  # regardless of slash direction, return value is drive letter
874
874
  expanded = Puppet::FileSystem.expand_path(slash)
875
- expect(expanded).to eq(ENV['SystemDrive'] + File::SEPARATOR)
876
- expect(expanded).to eq(File.expand_path(slash))
875
+ expect(expanded).to match(/^[a-z]:/i)
877
876
  end
878
877
  end
879
878
 
@@ -22,13 +22,8 @@ describe Puppet::Forge::ModuleRelease do
22
22
  let(:uri) { " "}
23
23
  let(:release) { Puppet::Forge::ModuleRelease.new(ssl_repository, JSON.parse(release_json)) }
24
24
 
25
- let(:mock_file) {
26
- mock_io = StringIO.new
27
- allow(mock_io).to receive(:path).and_return('/dev/null')
28
- mock_io
29
- }
30
-
31
- let(:mock_dir) { '/tmp' }
25
+ let(:mock_file) { double('file', path: '/dev/null') }
26
+ let(:mock_dir) { tmpdir('dir') }
32
27
 
33
28
  let(:destination) { tmpfile('forge_module_release') }
34
29
 
@@ -1,8 +1,10 @@
1
-
2
1
  require 'spec_helper'
3
2
 
3
+ require 'puppet_spec/compiler'
4
+
4
5
  describe "the inline_epp function" do
5
6
  include PuppetSpec::Files
7
+ include PuppetSpec::Compiler
6
8
 
7
9
  let :node do Puppet::Node.new('localhost') end
8
10
  let :compiler do Puppet::Parser::Compiler.new(node) end
@@ -73,6 +75,29 @@ describe "the inline_epp function" do
73
75
  expect(eval_template("string was: <%= $string %>")).to eq("string was: the string value")
74
76
  end
75
77
 
78
+ context "when using Sensitive" do
79
+ it "returns an unwrapped sensitive value as a String" do
80
+ expect(eval_and_collect_notices(<<~END)).to eq(["opensesame"])
81
+ notice(inline_epp("<%= Sensitive('opensesame').unwrap %>"))
82
+ END
83
+ end
84
+
85
+ it "rewraps a sensitive value" do
86
+ # note entire result is redacted, not just sensitive part
87
+ expect(eval_and_collect_notices(<<~END)).to eq(["Sensitive [value redacted]"])
88
+ notice(inline_epp("This is sensitive <%= Sensitive('opensesame') %>"))
89
+ END
90
+ end
91
+
92
+ it "can be double wrapped" do
93
+ catalog = compile_to_catalog(<<~END)
94
+ notify { 'title':
95
+ message => Sensitive(inline_epp("<%= Sensitive('opensesame') %>"))
96
+ }
97
+ END
98
+ expect(catalog.resource(:notify, 'title')['message']).to eq('opensesame')
99
+ end
100
+ end
76
101
 
77
102
  def eval_template_with_args(content, args_hash)
78
103
  epp_function.call(scope, content, args_hash)
@@ -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::Client do
@@ -507,6 +506,20 @@ describe Puppet::HTTP::Client do
507
506
 
508
507
  client.get(uri, options: {basic_auth: {user: 'user', password: nil}})
509
508
  end
509
+
510
+ it 'observes userinfo in the URL' do
511
+ stub_request(:get, uri).with(basic_auth: credentials)
512
+
513
+ client.get(URI("https://user:pass@www.example.com"))
514
+ end
515
+
516
+ it 'prefers explicit basic_auth credentials' do
517
+ uri = URI("https://ignored_user:ignored_pass@www.example.com")
518
+
519
+ stub_request(:get, "https://www.example.com").with(basic_auth: credentials)
520
+
521
+ client.get(uri, options: {basic_auth: {user: 'user', password: 'pass'}})
522
+ end
510
523
  end
511
524
 
512
525
  context "when redirecting" do
@@ -535,10 +548,41 @@ describe Puppet::HTTP::Client do
535
548
  expect(response).to be_success
536
549
  end
537
550
 
538
- it "preserves query parameters" do
539
- query = { 'debug' => true }
540
- stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: bar_url))
541
- stub_request(:get, bar_url).with(query: query).to_return(status: 200)
551
+ it "updates the Host header from the Location host and port" do
552
+ stub_request(:get, start_url).with(headers: { 'Host' => 'www.example.com:8140' })
553
+ .to_return(redirect_to(url: other_host))
554
+ stub_request(:get, other_host).with(headers: { 'Host' => 'other.example.com:8140' })
555
+ .to_return(status: 200)
556
+
557
+ response = client.get(start_url)
558
+ expect(response).to be_success
559
+ end
560
+
561
+ it "omits the default HTTPS port from the Host header" do
562
+ stub_request(:get, start_url).with(headers: { 'Host' => 'www.example.com:8140' })
563
+ .to_return(redirect_to(url: "https://other.example.com/qux"))
564
+ stub_request(:get, "https://other.example.com/qux").with(headers: { 'Host' => 'other.example.com' })
565
+ .to_return(status: 200)
566
+
567
+ response = client.get(start_url)
568
+ expect(response).to be_success
569
+ end
570
+
571
+ it "omits the default HTTP port from the Host header" do
572
+ stub_request(:get, start_url).with(headers: { 'Host' => 'www.example.com:8140' })
573
+ .to_return(redirect_to(url: "http://other.example.com/qux"))
574
+ stub_request(:get, "http://other.example.com/qux").with(headers: { 'Host' => 'other.example.com' })
575
+ .to_return(status: 200)
576
+
577
+ response = client.get(start_url)
578
+ expect(response).to be_success
579
+ end
580
+
581
+ it "applies query parameters from the location header" do
582
+ query = { 'redirected' => false }
583
+
584
+ stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: "#{bar_url}?redirected=true"))
585
+ stub_request(:get, bar_url).with(query: {'redirected' => 'true'}).to_return(status: 200)
542
586
 
543
587
  response = client.get(start_url, params: query)
544
588
  expect(response).to be_success
@@ -569,16 +613,27 @@ describe Puppet::HTTP::Client do
569
613
  expect(response).to be_success
570
614
  end
571
615
 
572
- it "preserves query parameters given a relative location" do
616
+ it "applies query parameters from the location header" do
573
617
  relative_url = "/people.html"
574
- query = { 'debug' => true }
575
- stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: relative_url))
576
- stub_request(:get, "https://www.example.com:8140/people.html").with(query: query).to_return(status: 200)
618
+ query = { 'redirected' => false }
619
+ stub_request(:get, start_url).with(query: query).to_return(redirect_to(url: "#{relative_url}?redirected=true"))
620
+ stub_request(:get, "https://www.example.com:8140/people.html").with(query: {'redirected' => 'true'}).to_return(status: 200)
577
621
 
578
622
  response = client.get(start_url, params: query)
579
623
  expect(response).to be_success
580
624
  end
581
625
 
626
+ it "removes dot segments from a relative location" do
627
+ # from https://tools.ietf.org/html/rfc3986#section-5.4.2
628
+ base_url = URI("http://a/b/c/d;p?q")
629
+ relative_url = "../../../../g"
630
+ stub_request(:get, base_url).to_return(redirect_to(url: relative_url))
631
+ stub_request(:get, "http://a/g").to_return(status: 200)
632
+
633
+ response = client.get(base_url)
634
+ expect(response).to be_success
635
+ end
636
+
582
637
  it "preserves request body for each request" do
583
638
  data = 'some data'
584
639
  stub_request(:put, start_url).with(body: data).to_return(redirect_to(url: bar_url))