puppet 6.16.0 → 7.0.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 (645) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -3
  3. data/Gemfile.lock +31 -33
  4. data/README.md +4 -5
  5. data/Rakefile +4 -12
  6. data/conf/fileserver.conf +5 -10
  7. data/ext/build_defaults.yaml +1 -1
  8. data/ext/osx/file_mapping.yaml +0 -5
  9. data/ext/project_data.yaml +1 -14
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/ext/windows/service/daemon.rb +6 -5
  12. data/install.rb +21 -17
  13. data/lib/puppet.rb +11 -20
  14. data/lib/puppet/agent.rb +2 -2
  15. data/lib/puppet/agent/locker.rb +0 -7
  16. data/lib/puppet/application.rb +172 -98
  17. data/lib/puppet/application/agent.rb +22 -6
  18. data/lib/puppet/application/apply.rb +18 -20
  19. data/lib/puppet/application/device.rb +100 -104
  20. data/lib/puppet/application/doc.rb +1 -1
  21. data/lib/puppet/application/filebucket.rb +15 -11
  22. data/lib/puppet/application/lookup.rb +16 -4
  23. data/lib/puppet/application/ssl.rb +1 -1
  24. data/lib/puppet/configurer.rb +66 -31
  25. data/lib/puppet/configurer/downloader.rb +31 -10
  26. data/lib/puppet/configurer/plugin_handler.rb +21 -19
  27. data/lib/puppet/confine.rb +2 -2
  28. data/lib/puppet/confine/any.rb +1 -1
  29. data/lib/puppet/defaults.rb +166 -169
  30. data/lib/puppet/environments.rb +41 -15
  31. data/lib/puppet/face/catalog.rb +1 -1
  32. data/lib/puppet/face/config.rb +56 -16
  33. data/lib/puppet/face/epp.rb +12 -2
  34. data/lib/puppet/face/facts.rb +66 -6
  35. data/lib/puppet/face/help.rb +1 -1
  36. data/lib/puppet/face/node.rb +3 -3
  37. data/lib/puppet/face/node/clean.rb +2 -2
  38. data/lib/puppet/face/plugin.rb +5 -8
  39. data/lib/puppet/feature/base.rb +1 -1
  40. data/lib/puppet/ffi/windows.rb +12 -0
  41. data/lib/puppet/ffi/windows/api_types.rb +311 -0
  42. data/lib/puppet/ffi/windows/constants.rb +404 -0
  43. data/lib/puppet/ffi/windows/functions.rb +628 -0
  44. data/lib/puppet/ffi/windows/structs.rb +338 -0
  45. data/lib/puppet/file_bucket/dipper.rb +1 -1
  46. data/lib/puppet/file_serving/configuration.rb +0 -5
  47. data/lib/puppet/file_serving/configuration/parser.rb +3 -32
  48. data/lib/puppet/file_serving/http_metadata.rb +13 -1
  49. data/lib/puppet/file_serving/metadata.rb +4 -1
  50. data/lib/puppet/file_serving/mount.rb +1 -2
  51. data/lib/puppet/file_serving/mount/locales.rb +1 -2
  52. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -2
  53. data/lib/puppet/file_serving/mount/plugins.rb +1 -2
  54. data/lib/puppet/file_serving/terminus_selector.rb +7 -8
  55. data/lib/puppet/file_system/file_impl.rb +4 -4
  56. data/lib/puppet/file_system/uniquefile.rb +8 -16
  57. data/lib/puppet/forge.rb +1 -1
  58. data/lib/puppet/forge/cache.rb +1 -1
  59. data/lib/puppet/forge/repository.rb +3 -8
  60. data/lib/puppet/functions/epp.rb +1 -0
  61. data/lib/puppet/functions/inline_epp.rb +1 -0
  62. data/lib/puppet/functions/lstrip.rb +4 -4
  63. data/lib/puppet/functions/new.rb +8 -3
  64. data/lib/puppet/functions/reverse_each.rb +1 -1
  65. data/lib/puppet/functions/rstrip.rb +4 -4
  66. data/lib/puppet/functions/step.rb +1 -1
  67. data/lib/puppet/functions/strip.rb +4 -4
  68. data/lib/puppet/generate/models/type/type.rb +4 -1
  69. data/lib/puppet/gettext/config.rb +5 -5
  70. data/lib/puppet/gettext/module_translations.rb +4 -4
  71. data/lib/puppet/http.rb +23 -13
  72. data/lib/puppet/http/client.rb +170 -115
  73. data/lib/puppet/{network/resolver.rb → http/dns.rb} +2 -2
  74. data/lib/puppet/http/errors.rb +16 -0
  75. data/lib/puppet/http/external_client.rb +5 -7
  76. data/lib/puppet/{network/http → http}/factory.rb +8 -11
  77. data/lib/puppet/{network/http → http}/pool.rb +61 -26
  78. data/lib/puppet/{network/http/session.rb → http/pool_entry.rb} +2 -3
  79. data/lib/puppet/http/proxy.rb +137 -0
  80. data/lib/puppet/http/redirector.rb +13 -19
  81. data/lib/puppet/http/resolver.rb +10 -23
  82. data/lib/puppet/http/resolver/server_list.rb +23 -45
  83. data/lib/puppet/http/resolver/settings.rb +7 -10
  84. data/lib/puppet/http/resolver/srv.rb +11 -15
  85. data/lib/puppet/http/response.rb +49 -48
  86. data/lib/puppet/http/response_converter.rb +24 -0
  87. data/lib/puppet/http/response_net_http.rb +42 -0
  88. data/lib/puppet/http/retry_after_handler.rb +4 -13
  89. data/lib/puppet/http/service.rb +15 -27
  90. data/lib/puppet/http/service/ca.rb +11 -22
  91. data/lib/puppet/http/service/compiler.rb +23 -70
  92. data/lib/puppet/http/service/file_server.rb +19 -28
  93. data/lib/puppet/http/service/puppetserver.rb +53 -0
  94. data/lib/puppet/http/service/report.rb +8 -10
  95. data/lib/puppet/http/session.rb +16 -24
  96. data/lib/puppet/{network/http → http}/site.rb +1 -2
  97. data/lib/puppet/indirector.rb +1 -1
  98. data/lib/puppet/indirector/catalog/compiler.rb +1 -1
  99. data/lib/puppet/indirector/catalog/rest.rb +2 -4
  100. data/lib/puppet/indirector/exec.rb +1 -1
  101. data/lib/puppet/indirector/fact_search.rb +60 -0
  102. data/lib/puppet/indirector/facts/facter.rb +27 -6
  103. data/lib/puppet/indirector/facts/json.rb +27 -0
  104. data/lib/puppet/indirector/facts/rest.rb +3 -22
  105. data/lib/puppet/indirector/facts/yaml.rb +4 -59
  106. data/lib/puppet/indirector/file_bucket_file/rest.rb +3 -9
  107. data/lib/puppet/indirector/file_content/rest.rb +3 -7
  108. data/lib/puppet/indirector/file_metadata/http.rb +25 -5
  109. data/lib/puppet/indirector/file_metadata/rest.rb +5 -11
  110. data/lib/puppet/indirector/file_server.rb +1 -8
  111. data/lib/puppet/indirector/generic_http.rb +0 -11
  112. data/lib/puppet/indirector/hiera.rb +4 -0
  113. data/lib/puppet/indirector/indirection.rb +1 -1
  114. data/lib/puppet/indirector/json.rb +5 -1
  115. data/lib/puppet/indirector/msgpack.rb +1 -1
  116. data/lib/puppet/indirector/node/json.rb +8 -0
  117. data/lib/puppet/indirector/node/rest.rb +2 -4
  118. data/lib/puppet/indirector/report/json.rb +34 -0
  119. data/lib/puppet/indirector/report/processor.rb +2 -2
  120. data/lib/puppet/indirector/report/rest.rb +3 -8
  121. data/lib/puppet/indirector/request.rb +2 -103
  122. data/lib/puppet/indirector/rest.rb +12 -263
  123. data/lib/puppet/indirector/yaml.rb +1 -1
  124. data/lib/puppet/module.rb +1 -2
  125. data/lib/puppet/module_tool/applications.rb +0 -1
  126. data/lib/puppet/network/authconfig.rb +2 -96
  127. data/lib/puppet/network/authorization.rb +13 -35
  128. data/lib/puppet/network/format_support.rb +2 -2
  129. data/lib/puppet/network/formats.rb +2 -1
  130. data/lib/puppet/network/http.rb +3 -3
  131. data/lib/puppet/network/http/api/indirected_routes.rb +3 -21
  132. data/lib/puppet/network/http/api/master/v3.rb +11 -13
  133. data/lib/puppet/network/http/api/master/v3/environments.rb +0 -1
  134. data/lib/puppet/network/http/connection.rb +247 -316
  135. data/lib/puppet/network/http/handler.rb +0 -1
  136. data/lib/puppet/network/http/route.rb +2 -2
  137. data/lib/puppet/network/http_pool.rb +16 -34
  138. data/lib/puppet/node.rb +1 -30
  139. data/lib/puppet/node/environment.rb +12 -5
  140. data/lib/puppet/node/facts.rb +17 -0
  141. data/lib/puppet/pal/json_catalog_encoder.rb +4 -0
  142. data/lib/puppet/pal/pal_impl.rb +93 -14
  143. data/lib/puppet/parameter.rb +1 -1
  144. data/lib/puppet/parser/ast/leaf.rb +5 -5
  145. data/lib/puppet/parser/ast/pops_bridge.rb +0 -42
  146. data/lib/puppet/parser/compiler.rb +1 -199
  147. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +14 -39
  148. data/lib/puppet/parser/functions.rb +21 -17
  149. data/lib/puppet/parser/functions/create_resources.rb +11 -7
  150. data/lib/puppet/parser/resource.rb +3 -71
  151. data/lib/puppet/parser/resource/param.rb +6 -0
  152. data/lib/puppet/parser/type_loader.rb +2 -2
  153. data/lib/puppet/pops/adaptable.rb +7 -13
  154. data/lib/puppet/pops/adapters.rb +8 -4
  155. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -3
  156. data/lib/puppet/pops/evaluator/evaluator_impl.rb +27 -13
  157. data/lib/puppet/pops/evaluator/runtime3_converter.rb +2 -2
  158. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +3 -3
  159. data/lib/puppet/pops/evaluator/runtime3_support.rb +1 -1
  160. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +6 -8
  161. data/lib/puppet/pops/loader/runtime3_type_loader.rb +4 -2
  162. data/lib/puppet/pops/loaders.rb +18 -11
  163. data/lib/puppet/pops/lookup/context.rb +1 -1
  164. data/lib/puppet/pops/lookup/hiera_config.rb +14 -1
  165. data/lib/puppet/pops/model/ast.pp +0 -42
  166. data/lib/puppet/pops/model/ast.rb +0 -290
  167. data/lib/puppet/pops/model/factory.rb +0 -45
  168. data/lib/puppet/pops/model/model_label_provider.rb +0 -5
  169. data/lib/puppet/pops/model/model_tree_dumper.rb +0 -22
  170. data/lib/puppet/pops/model/pn_transformer.rb +0 -16
  171. data/lib/puppet/pops/parser/egrammar.ra +0 -56
  172. data/lib/puppet/pops/parser/eparser.rb +1520 -1712
  173. data/lib/puppet/pops/parser/lexer2.rb +4 -4
  174. data/lib/puppet/pops/parser/parser_support.rb +0 -5
  175. data/lib/puppet/pops/resource/resource_type_impl.rb +2 -22
  176. data/lib/puppet/pops/types/iterable.rb +34 -8
  177. data/lib/puppet/pops/types/p_meta_type.rb +1 -1
  178. data/lib/puppet/pops/types/p_type_set_type.rb +4 -0
  179. data/lib/puppet/pops/types/type_calculator.rb +0 -7
  180. data/lib/puppet/pops/types/type_parser.rb +0 -4
  181. data/lib/puppet/pops/types/types.rb +0 -1
  182. data/lib/puppet/pops/validation/checker4_0.rb +28 -42
  183. data/lib/puppet/pops/validation/tasks_checker.rb +0 -12
  184. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -1
  185. data/lib/puppet/provider.rb +0 -13
  186. data/lib/puppet/provider/file/windows.rb +1 -1
  187. data/lib/puppet/provider/nameservice.rb +0 -18
  188. data/lib/puppet/provider/package/apt.rb +34 -0
  189. data/lib/puppet/provider/package/aptitude.rb +1 -1
  190. data/lib/puppet/provider/package/dpkg.rb +1 -11
  191. data/lib/puppet/provider/package/gem.rb +27 -5
  192. data/lib/puppet/provider/package/pip.rb +0 -1
  193. data/lib/puppet/provider/package/pip2.rb +17 -0
  194. data/lib/puppet/provider/package/pkg.rb +0 -4
  195. data/lib/puppet/provider/package/portage.rb +1 -1
  196. data/lib/puppet/provider/package/puppet_gem.rb +6 -4
  197. data/lib/puppet/provider/package/puppetserver_gem.rb +180 -0
  198. data/lib/puppet/provider/package/yum.rb +2 -1
  199. data/lib/puppet/provider/package/zypper.rb +3 -0
  200. data/lib/puppet/provider/service/smf.rb +191 -73
  201. data/lib/puppet/provider/service/windows.rb +23 -7
  202. data/lib/puppet/provider/user/aix.rb +1 -1
  203. data/lib/puppet/provider/user/directoryservice.rb +0 -10
  204. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  205. data/lib/puppet/provider/user/useradd.rb +11 -4
  206. data/lib/puppet/provider/user/windows_adsi.rb +18 -1
  207. data/lib/puppet/reference/configuration.rb +2 -0
  208. data/lib/puppet/reference/indirection.rb +1 -1
  209. data/lib/puppet/reports/http.rb +2 -0
  210. data/lib/puppet/resource.rb +3 -90
  211. data/lib/puppet/resource/catalog.rb +1 -14
  212. data/lib/puppet/resource/type.rb +5 -112
  213. data/lib/puppet/resource/type_collection.rb +3 -48
  214. data/lib/puppet/runtime.rb +1 -2
  215. data/lib/puppet/settings.rb +84 -35
  216. data/lib/puppet/settings/base_setting.rb +26 -2
  217. data/lib/puppet/settings/integer_setting.rb +17 -0
  218. data/lib/puppet/settings/port_setting.rb +15 -0
  219. data/lib/puppet/settings/priority_setting.rb +5 -4
  220. data/lib/puppet/ssl.rb +10 -6
  221. data/lib/puppet/ssl/base.rb +3 -5
  222. data/lib/puppet/ssl/certificate.rb +0 -6
  223. data/lib/puppet/ssl/certificate_request.rb +1 -12
  224. data/lib/puppet/ssl/certificate_signer.rb +6 -0
  225. data/lib/puppet/ssl/oids.rb +3 -1
  226. data/lib/puppet/ssl/ssl_context.rb +2 -2
  227. data/lib/puppet/ssl/ssl_provider.rb +37 -1
  228. data/lib/puppet/ssl/state_machine.rb +3 -1
  229. data/lib/puppet/ssl/verifier.rb +2 -0
  230. data/lib/puppet/test/test_helper.rb +19 -16
  231. data/lib/puppet/transaction.rb +3 -9
  232. data/lib/puppet/transaction/persistence.rb +1 -1
  233. data/lib/puppet/transaction/report.rb +10 -8
  234. data/lib/puppet/trusted_external.rb +29 -1
  235. data/lib/puppet/type.rb +9 -77
  236. data/lib/puppet/type/file.rb +45 -22
  237. data/lib/puppet/type/file/checksum.rb +5 -5
  238. data/lib/puppet/type/file/source.rb +33 -13
  239. data/lib/puppet/type/filebucket.rb +4 -4
  240. data/lib/puppet/type/notify.rb +2 -2
  241. data/lib/puppet/type/package.rb +5 -13
  242. data/lib/puppet/type/service.rb +53 -0
  243. data/lib/puppet/type/user.rb +18 -3
  244. data/lib/puppet/util.rb +41 -3
  245. data/lib/puppet/util/autoload.rb +9 -7
  246. data/lib/puppet/util/character_encoding.rb +9 -5
  247. data/lib/puppet/util/checksums.rb +19 -4
  248. data/lib/puppet/util/execution.rb +2 -13
  249. data/lib/puppet/util/fileparsing.rb +2 -2
  250. data/lib/puppet/util/http_proxy.rb +2 -215
  251. data/lib/puppet/util/monkey_patches.rb +0 -46
  252. data/lib/puppet/util/provider_features.rb +1 -1
  253. data/lib/puppet/util/rdoc.rb +0 -7
  254. data/lib/puppet/util/reference.rb +1 -1
  255. data/lib/puppet/util/retry_action.rb +1 -1
  256. data/lib/puppet/util/rubygems.rb +5 -1
  257. data/lib/puppet/util/run_mode.rb +14 -2
  258. data/lib/puppet/util/windows.rb +3 -7
  259. data/lib/puppet/util/windows/daemon.rb +360 -0
  260. data/lib/puppet/util/windows/error.rb +1 -0
  261. data/lib/puppet/util/windows/eventlog.rb +5 -15
  262. data/lib/puppet/util/windows/file.rb +8 -242
  263. data/lib/puppet/util/windows/monkey_patches/process.rb +414 -0
  264. data/lib/puppet/util/windows/principal.rb +8 -6
  265. data/lib/puppet/util/windows/process.rb +4 -226
  266. data/lib/puppet/util/windows/registry.rb +11 -11
  267. data/lib/puppet/util/windows/security.rb +4 -4
  268. data/lib/puppet/util/windows/service.rb +52 -486
  269. data/lib/puppet/util/windows/string.rb +12 -13
  270. data/lib/puppet/util/windows/user.rb +242 -8
  271. data/lib/puppet/util/yaml.rb +0 -22
  272. data/lib/puppet/vendor/require_vendored.rb +0 -1
  273. data/lib/puppet/version.rb +1 -1
  274. data/lib/puppet/x509.rb +5 -1
  275. data/lib/puppet/x509/cert_provider.rb +29 -1
  276. data/locales/puppet.pot +713 -1380
  277. data/man/man5/puppet.conf.5 +84 -98
  278. data/man/man8/puppet-agent.8 +7 -4
  279. data/man/man8/puppet-apply.8 +1 -1
  280. data/man/man8/puppet-catalog.8 +1 -1
  281. data/man/man8/puppet-config.8 +6 -6
  282. data/man/man8/puppet-describe.8 +1 -1
  283. data/man/man8/puppet-device.8 +1 -1
  284. data/man/man8/puppet-doc.8 +1 -1
  285. data/man/man8/puppet-epp.8 +1 -1
  286. data/man/man8/puppet-facts.8 +55 -9
  287. data/man/man8/puppet-filebucket.8 +6 -6
  288. data/man/man8/puppet-generate.8 +1 -1
  289. data/man/man8/puppet-help.8 +1 -1
  290. data/man/man8/puppet-lookup.8 +2 -2
  291. data/man/man8/puppet-module.8 +1 -58
  292. data/man/man8/puppet-node.8 +7 -4
  293. data/man/man8/puppet-parser.8 +1 -1
  294. data/man/man8/puppet-plugin.8 +1 -1
  295. data/man/man8/puppet-report.8 +4 -1
  296. data/man/man8/puppet-resource.8 +1 -1
  297. data/man/man8/puppet-script.8 +1 -1
  298. data/man/man8/puppet-ssl.8 +1 -1
  299. data/man/man8/puppet.8 +2 -2
  300. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/provider/applytest/applytest.rb +2 -0
  301. data/spec/fixtures/integration/application/apply/environments/spec/modules/amod/lib/puppet/type/applytest.rb +25 -0
  302. data/spec/fixtures/unit/forge/bacula-releases.json +128 -0
  303. data/spec/fixtures/unit/forge/bacula.tar.gz +0 -0
  304. data/spec/fixtures/unit/provider/package/puppetserver_gem/gem-list-local-packages +30 -0
  305. data/spec/fixtures/unit/provider/service/smf/{svcs.out → svcs_instances.out} +0 -0
  306. data/spec/integration/application/agent_spec.rb +157 -59
  307. data/spec/integration/application/apply_spec.rb +150 -150
  308. data/spec/integration/application/doc_spec.rb +16 -6
  309. data/spec/integration/application/filebucket_spec.rb +78 -29
  310. data/spec/integration/application/help_spec.rb +44 -0
  311. data/spec/integration/application/lookup_spec.rb +13 -0
  312. data/spec/integration/application/module_spec.rb +68 -0
  313. data/spec/integration/application/plugin_spec.rb +76 -4
  314. data/spec/integration/configurer_spec.rb +14 -0
  315. data/spec/integration/data_binding_spec.rb +82 -0
  316. data/spec/integration/defaults_spec.rb +33 -5
  317. data/spec/integration/directory_environments_spec.rb +17 -17
  318. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  319. data/spec/integration/indirector/facts/facter_spec.rb +8 -6
  320. data/spec/integration/network/http_pool_spec.rb +29 -30
  321. data/spec/integration/node/environment_spec.rb +1 -1
  322. data/spec/integration/parser/catalog_spec.rb +0 -38
  323. data/spec/integration/parser/compiler_spec.rb +11 -0
  324. data/spec/integration/parser/node_spec.rb +0 -9
  325. data/spec/integration/parser/pcore_resource_spec.rb +0 -37
  326. data/spec/integration/type/file_spec.rb +6 -5
  327. data/spec/integration/util/execution_spec.rb +22 -0
  328. data/spec/integration/util/windows/adsi_spec.rb +2 -2
  329. data/spec/integration/util/windows/monkey_patches/process_spec.rb +231 -0
  330. data/spec/integration/util/windows/process_spec.rb +26 -32
  331. data/spec/integration/util/windows/registry_spec.rb +7 -7
  332. data/spec/integration/util/windows/security_spec.rb +1 -1
  333. data/spec/integration/util/windows/user_spec.rb +47 -5
  334. data/spec/integration/util_spec.rb +7 -33
  335. data/spec/lib/puppet_spec/matchers.rb +0 -80
  336. data/spec/lib/puppet_spec/puppetserver.rb +9 -1
  337. data/spec/lib/puppet_spec/settings.rb +7 -1
  338. data/spec/shared_contexts/types_setup.rb +2 -0
  339. data/spec/spec_helper.rb +2 -0
  340. data/spec/unit/agent_spec.rb +0 -2
  341. data/spec/unit/application/agent_spec.rb +3 -4
  342. data/spec/unit/application/config_spec.rb +224 -4
  343. data/spec/unit/application/doc_spec.rb +2 -2
  344. data/spec/unit/application/face_base_spec.rb +6 -4
  345. data/spec/unit/application/facts_spec.rb +74 -8
  346. data/spec/unit/application/filebucket_spec.rb +41 -39
  347. data/spec/unit/application/resource_spec.rb +3 -1
  348. data/spec/unit/application/ssl_spec.rb +17 -4
  349. data/spec/unit/application_spec.rb +9 -4
  350. data/spec/unit/certificate_factory_spec.rb +1 -1
  351. data/spec/unit/configurer/downloader_spec.rb +14 -0
  352. data/spec/unit/configurer/fact_handler_spec.rb +4 -4
  353. data/spec/unit/configurer/plugin_handler_spec.rb +56 -18
  354. data/spec/unit/configurer_spec.rb +96 -44
  355. data/spec/unit/confine_spec.rb +2 -1
  356. data/spec/unit/context/trusted_information_spec.rb +12 -10
  357. data/spec/unit/defaults_spec.rb +77 -28
  358. data/spec/unit/environments_spec.rb +96 -32
  359. data/spec/unit/face/config_spec.rb +65 -12
  360. data/spec/unit/face/facts_spec.rb +4 -0
  361. data/spec/unit/face/node_spec.rb +2 -2
  362. data/spec/unit/face/plugin_spec.rb +73 -33
  363. data/spec/unit/file_bucket/file_spec.rb +1 -1
  364. data/spec/unit/file_serving/configuration/parser_spec.rb +14 -18
  365. data/spec/unit/file_serving/configuration_spec.rb +6 -12
  366. data/spec/unit/file_serving/http_metadata_spec.rb +37 -14
  367. data/spec/unit/file_serving/mount/locales_spec.rb +2 -2
  368. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +2 -2
  369. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -2
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +45 -26
  371. data/spec/unit/file_system/uniquefile_spec.rb +18 -0
  372. data/spec/unit/file_system_spec.rb +1 -2
  373. data/spec/unit/functions/camelcase_spec.rb +1 -1
  374. data/spec/unit/functions/capitalize_spec.rb +1 -1
  375. data/spec/unit/functions/downcase_spec.rb +1 -1
  376. data/spec/unit/functions/inline_epp_spec.rb +26 -1
  377. data/spec/unit/functions/upcase_spec.rb +1 -1
  378. data/spec/unit/http/client_spec.rb +71 -17
  379. data/spec/unit/{network/resolver_spec.rb → http/dns_spec.rb} +3 -3
  380. data/spec/unit/http/external_client_spec.rb +4 -4
  381. data/spec/unit/{network/http → http}/factory_spec.rb +5 -11
  382. data/spec/unit/{network/http/session_spec.rb → http/pool_entry_spec.rb} +3 -3
  383. data/spec/unit/{network/http → http}/pool_spec.rb +12 -17
  384. data/spec/unit/{util/http_proxy_spec.rb → http/proxy_spec.rb} +2 -69
  385. data/spec/unit/http/resolver_spec.rb +34 -15
  386. data/spec/unit/http/response_spec.rb +6 -0
  387. data/spec/unit/http/service/ca_spec.rb +2 -3
  388. data/spec/unit/http/service/compiler_spec.rb +51 -65
  389. data/spec/unit/http/service/file_server_spec.rb +5 -6
  390. data/spec/unit/http/service/puppetserver_spec.rb +112 -0
  391. data/spec/unit/http/service/report_spec.rb +2 -3
  392. data/spec/unit/http/service_spec.rb +1 -3
  393. data/spec/unit/http/session_spec.rb +24 -35
  394. data/spec/unit/{network/http → http}/site_spec.rb +3 -3
  395. data/spec/unit/indirector/catalog/json_spec.rb +1 -1
  396. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  397. data/spec/unit/indirector/facts/facter_spec.rb +97 -0
  398. data/spec/unit/indirector/facts/json_spec.rb +255 -0
  399. data/spec/unit/indirector/facts/rest_spec.rb +1 -1
  400. data/spec/unit/indirector/file_bucket_file/file_spec.rb +5 -3
  401. data/spec/unit/indirector/file_content/rest_spec.rb +0 -4
  402. data/spec/unit/indirector/file_metadata/http_spec.rb +27 -0
  403. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -4
  404. data/spec/unit/indirector/file_server_spec.rb +1 -15
  405. data/spec/unit/indirector/json_spec.rb +8 -8
  406. data/spec/unit/indirector/msgpack_spec.rb +8 -8
  407. data/spec/unit/indirector/node/json_spec.rb +33 -0
  408. data/spec/unit/indirector/node/rest_spec.rb +1 -1
  409. data/spec/{integration/indirector/report/yaml.rb → unit/indirector/report/json_spec.rb} +13 -24
  410. data/spec/unit/indirector/report/rest_spec.rb +2 -17
  411. data/spec/unit/indirector/report/yaml_spec.rb +72 -8
  412. data/spec/unit/indirector/request_spec.rb +3 -267
  413. data/spec/unit/indirector/rest_spec.rb +98 -752
  414. data/spec/unit/indirector/yaml_spec.rb +7 -7
  415. data/spec/unit/interface_spec.rb +3 -3
  416. data/spec/unit/module_tool/tar/mini_spec.rb +20 -0
  417. data/spec/unit/network/authconfig_spec.rb +2 -132
  418. data/spec/unit/network/authorization_spec.rb +2 -55
  419. data/spec/unit/network/format_support_spec.rb +3 -2
  420. data/spec/unit/network/formats_spec.rb +4 -4
  421. data/spec/unit/network/http/api/indirected_routes_spec.rb +3 -98
  422. data/spec/unit/network/http/api/master/v3/environments_spec.rb +12 -23
  423. data/spec/unit/network/http/api/master/v3_spec.rb +28 -7
  424. data/spec/unit/network/http/api_spec.rb +10 -0
  425. data/spec/unit/network/http/connection_spec.rb +61 -73
  426. data/spec/unit/network/http/handler_spec.rb +0 -6
  427. data/spec/unit/network/http_pool_spec.rb +0 -4
  428. data/spec/unit/node/environment_spec.rb +51 -22
  429. data/spec/unit/node_spec.rb +2 -54
  430. data/spec/unit/parser/ast/block_expression_spec.rb +1 -1
  431. data/spec/unit/parser/functions/create_resources_spec.rb +2 -20
  432. data/spec/unit/parser/scope_spec.rb +1 -1
  433. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -8
  434. data/spec/unit/pops/loaders/loaders_spec.rb +77 -22
  435. data/spec/unit/pops/lookup/lookup_spec.rb +25 -0
  436. data/spec/unit/pops/parser/parse_application_spec.rb +4 -22
  437. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +0 -1
  438. data/spec/unit/pops/parser/parse_capabilities_spec.rb +8 -21
  439. data/spec/unit/pops/parser/parse_site_spec.rb +20 -24
  440. data/spec/unit/pops/resource/resource_type_impl_spec.rb +0 -71
  441. data/spec/unit/pops/serialization/to_from_hr_spec.rb +1 -1
  442. data/spec/unit/pops/types/type_calculator_spec.rb +7 -17
  443. data/spec/unit/pops/types/type_factory_spec.rb +1 -1
  444. data/spec/unit/pops/validator/validator_spec.rb +61 -46
  445. data/spec/unit/pops/visitor_spec.rb +1 -1
  446. data/spec/unit/provider/exec_spec.rb +4 -3
  447. data/spec/unit/provider/nameservice_spec.rb +0 -57
  448. data/spec/unit/provider/package/apt_spec.rb +77 -0
  449. data/spec/unit/provider/package/aptitude_spec.rb +1 -0
  450. data/spec/unit/provider/package/dpkg_spec.rb +22 -55
  451. data/spec/unit/provider/package/gem_spec.rb +32 -0
  452. data/spec/unit/provider/package/openbsd_spec.rb +2 -0
  453. data/spec/unit/provider/package/pip2_spec.rb +36 -0
  454. data/spec/unit/provider/package/puppet_gem_spec.rb +6 -2
  455. data/spec/unit/provider/package/puppetserver_gem_spec.rb +137 -0
  456. data/spec/unit/provider/package/yum_spec.rb +31 -0
  457. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  458. data/spec/unit/provider/service/base_spec.rb +2 -4
  459. data/spec/unit/provider/service/bsd_spec.rb +5 -1
  460. data/spec/unit/provider/service/daemontools_spec.rb +1 -1
  461. data/spec/unit/provider/service/debian_spec.rb +3 -5
  462. data/spec/unit/provider/service/freebsd_spec.rb +1 -1
  463. data/spec/unit/provider/service/gentoo_spec.rb +4 -5
  464. data/spec/unit/provider/service/init_spec.rb +45 -5
  465. data/spec/unit/provider/service/launchd_spec.rb +5 -6
  466. data/spec/unit/provider/service/openrc_spec.rb +4 -5
  467. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  468. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  469. data/spec/unit/provider/service/runit_spec.rb +2 -1
  470. data/spec/unit/provider/service/smf_spec.rb +402 -166
  471. data/spec/unit/provider/service/src_spec.rb +3 -5
  472. data/spec/unit/provider/service/systemd_spec.rb +3 -6
  473. data/spec/unit/provider/service/upstart_spec.rb +4 -5
  474. data/spec/unit/provider/service/windows_spec.rb +50 -15
  475. data/spec/unit/provider/user/openbsd_spec.rb +1 -0
  476. data/spec/unit/provider/user/useradd_spec.rb +22 -16
  477. data/spec/unit/provider/user/windows_adsi_spec.rb +82 -0
  478. data/spec/unit/provider_spec.rb +0 -12
  479. data/spec/unit/puppet_pal_2pec.rb +40 -0
  480. data/spec/unit/puppet_pal_catalog_spec.rb +45 -0
  481. data/spec/unit/reports/store_spec.rb +17 -13
  482. data/spec/unit/resource/type_collection_spec.rb +2 -22
  483. data/spec/unit/resource_spec.rb +3 -59
  484. data/spec/unit/settings/http_extra_headers_spec.rb +2 -4
  485. data/spec/unit/settings/integer_setting_spec.rb +42 -0
  486. data/spec/unit/settings/port_setting_spec.rb +31 -0
  487. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  488. data/spec/unit/settings_spec.rb +586 -239
  489. data/spec/unit/ssl/base_spec.rb +36 -3
  490. data/spec/unit/ssl/certificate_request_spec.rb +15 -45
  491. data/spec/unit/ssl/certificate_spec.rb +2 -11
  492. data/spec/unit/ssl/ssl_provider_spec.rb +78 -49
  493. data/spec/unit/ssl/state_machine_spec.rb +0 -1
  494. data/spec/unit/ssl/verifier_spec.rb +0 -21
  495. data/spec/unit/test/test_helper_spec.rb +17 -0
  496. data/spec/unit/transaction/persistence_spec.rb +15 -0
  497. data/spec/unit/transaction/report_spec.rb +3 -3
  498. data/spec/unit/transaction/resource_harness_spec.rb +2 -2
  499. data/spec/unit/transaction_spec.rb +45 -79
  500. data/spec/unit/type/file/checksum_spec.rb +6 -6
  501. data/spec/unit/type/file/content_spec.rb +1 -1
  502. data/spec/unit/type/file/ensure_spec.rb +1 -1
  503. data/spec/unit/type/file/mode_spec.rb +1 -1
  504. data/spec/unit/type/file/source_spec.rb +4 -5
  505. data/spec/unit/type/file_spec.rb +134 -102
  506. data/spec/unit/type/filebucket_spec.rb +1 -1
  507. data/spec/unit/type/package_spec.rb +1 -1
  508. data/spec/unit/type/service_spec.rb +209 -0
  509. data/spec/unit/type/user_spec.rb +31 -2
  510. data/spec/unit/type_spec.rb +70 -0
  511. data/spec/unit/util/backups_spec.rb +0 -2
  512. data/spec/unit/util/character_encoding_spec.rb +4 -4
  513. data/spec/unit/util/checksums_spec.rb +16 -0
  514. data/spec/unit/util/command_line_spec.rb +11 -6
  515. data/spec/unit/util/execution_spec.rb +0 -29
  516. data/spec/unit/util/monkey_patches_spec.rb +0 -6
  517. data/spec/unit/util/rubygems_spec.rb +2 -2
  518. data/spec/unit/util/run_mode_spec.rb +27 -127
  519. data/spec/unit/util/windows/api_types_spec.rb +104 -40
  520. data/spec/unit/util/windows/service_spec.rb +4 -4
  521. data/spec/unit/util/windows/string_spec.rb +1 -3
  522. data/spec/unit/util/yaml_spec.rb +0 -54
  523. data/spec/unit/util_spec.rb +3 -21
  524. data/spec/unit/x509/cert_provider_spec.rb +1 -1
  525. metadata +76 -214
  526. data/conf/auth.conf +0 -150
  527. data/lib/puppet/application/cert.rb +0 -76
  528. data/lib/puppet/application/key.rb +0 -4
  529. data/lib/puppet/application/man.rb +0 -4
  530. data/lib/puppet/application/status.rb +0 -4
  531. data/lib/puppet/face/key.rb +0 -16
  532. data/lib/puppet/face/man.rb +0 -145
  533. data/lib/puppet/face/module/build.rb +0 -14
  534. data/lib/puppet/face/module/generate.rb +0 -14
  535. data/lib/puppet/face/module/search.rb +0 -103
  536. data/lib/puppet/face/status.rb +0 -51
  537. data/lib/puppet/indirector/certificate/file.rb +0 -9
  538. data/lib/puppet/indirector/certificate/rest.rb +0 -18
  539. data/lib/puppet/indirector/certificate_request/file.rb +0 -9
  540. data/lib/puppet/indirector/certificate_request/memory.rb +0 -7
  541. data/lib/puppet/indirector/certificate_request/rest.rb +0 -11
  542. data/lib/puppet/indirector/file_content/http.rb +0 -22
  543. data/lib/puppet/indirector/key/file.rb +0 -46
  544. data/lib/puppet/indirector/key/memory.rb +0 -7
  545. data/lib/puppet/indirector/ssl_file.rb +0 -162
  546. data/lib/puppet/indirector/status.rb +0 -3
  547. data/lib/puppet/indirector/status/local.rb +0 -12
  548. data/lib/puppet/indirector/status/rest.rb +0 -27
  549. data/lib/puppet/module_tool/applications/searcher.rb +0 -29
  550. data/lib/puppet/network/auth_config_parser.rb +0 -90
  551. data/lib/puppet/network/authstore.rb +0 -283
  552. data/lib/puppet/network/http/api/master/v3/authorization.rb +0 -18
  553. data/lib/puppet/network/http/api/master/v3/environment.rb +0 -85
  554. data/lib/puppet/network/http/base_pool.rb +0 -36
  555. data/lib/puppet/network/http/compression.rb +0 -127
  556. data/lib/puppet/network/http/connection_adapter.rb +0 -182
  557. data/lib/puppet/network/http/nocache_pool.rb +0 -28
  558. data/lib/puppet/network/rest_controller.rb +0 -2
  559. data/lib/puppet/network/rights.rb +0 -210
  560. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +0 -64
  561. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +0 -20
  562. data/lib/puppet/parser/environment_compiler.rb +0 -199
  563. data/lib/puppet/pops/types/enumeration.rb +0 -16
  564. data/lib/puppet/resource/capability_finder.rb +0 -154
  565. data/lib/puppet/rest/errors.rb +0 -15
  566. data/lib/puppet/rest/response.rb +0 -35
  567. data/lib/puppet/rest/route.rb +0 -85
  568. data/lib/puppet/rest/routes.rb +0 -135
  569. data/lib/puppet/ssl/host.rb +0 -505
  570. data/lib/puppet/ssl/key.rb +0 -61
  571. data/lib/puppet/ssl/validator.rb +0 -61
  572. data/lib/puppet/ssl/validator/default_validator.rb +0 -209
  573. data/lib/puppet/ssl/validator/no_validator.rb +0 -22
  574. data/lib/puppet/ssl/verifier_adapter.rb +0 -58
  575. data/lib/puppet/status.rb +0 -40
  576. data/lib/puppet/util/connection.rb +0 -88
  577. data/lib/puppet/util/ssl.rb +0 -83
  578. data/lib/puppet/util/windows/api_types.rb +0 -282
  579. data/lib/puppet/vendor/load_pathspec.rb +0 -1
  580. data/lib/puppet/vendor/pathspec/CHANGELOG.md +0 -2
  581. data/lib/puppet/vendor/pathspec/LICENSE +0 -201
  582. data/lib/puppet/vendor/pathspec/PUPPET_README.md +0 -6
  583. data/lib/puppet/vendor/pathspec/README.md +0 -53
  584. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +0 -122
  585. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +0 -275
  586. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +0 -17
  587. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +0 -14
  588. data/man/man8/puppet-key.8 +0 -126
  589. data/man/man8/puppet-man.8 +0 -76
  590. data/man/man8/puppet-status.8 +0 -108
  591. data/spec/integration/faces/config_spec.rb +0 -91
  592. data/spec/integration/faces/documentation_spec.rb +0 -57
  593. data/spec/integration/file_bucket/file_spec.rb +0 -50
  594. data/spec/integration/file_serving/content_spec.rb +0 -7
  595. data/spec/integration/file_serving/fileset_spec.rb +0 -12
  596. data/spec/integration/file_serving/metadata_spec.rb +0 -8
  597. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -20
  598. data/spec/integration/file_system/uniquefile_spec.rb +0 -26
  599. data/spec/integration/module_tool/forge_spec.rb +0 -51
  600. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  601. data/spec/integration/network/authconfig_spec.rb +0 -256
  602. data/spec/integration/provider/service/init_spec.rb +0 -48
  603. data/spec/integration/provider/service/systemd_spec.rb +0 -25
  604. data/spec/integration/provider/service/windows_spec.rb +0 -50
  605. data/spec/integration/reference/providers_spec.rb +0 -21
  606. data/spec/integration/reports_spec.rb +0 -13
  607. data/spec/integration/ssl/certificate_request_spec.rb +0 -44
  608. data/spec/integration/ssl/host_spec.rb +0 -72
  609. data/spec/integration/ssl/key_spec.rb +0 -99
  610. data/spec/integration/test/test_helper_spec.rb +0 -31
  611. data/spec/shared_behaviours/file_serving_model.rb +0 -51
  612. data/spec/unit/capability_spec.rb +0 -414
  613. data/spec/unit/face/catalog_spec.rb +0 -6
  614. data/spec/unit/face/key_spec.rb +0 -9
  615. data/spec/unit/face/man_spec.rb +0 -25
  616. data/spec/unit/face/module/search_spec.rb +0 -231
  617. data/spec/unit/face/module_spec.rb +0 -3
  618. data/spec/unit/face/status_spec.rb +0 -9
  619. data/spec/unit/indirector/certificate/file_spec.rb +0 -14
  620. data/spec/unit/indirector/certificate/rest_spec.rb +0 -61
  621. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -14
  622. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -25
  623. data/spec/unit/indirector/key/file_spec.rb +0 -79
  624. data/spec/unit/indirector/ssl_file_spec.rb +0 -305
  625. data/spec/unit/indirector/status/local_spec.rb +0 -10
  626. data/spec/unit/indirector/status/rest_spec.rb +0 -50
  627. data/spec/unit/man_spec.rb +0 -31
  628. data/spec/unit/module_tool/applications/searcher_spec.rb +0 -38
  629. data/spec/unit/network/auth_config_parser_spec.rb +0 -115
  630. data/spec/unit/network/authstore_spec.rb +0 -422
  631. data/spec/unit/network/http/api/master/v3/authorization_spec.rb +0 -57
  632. data/spec/unit/network/http/api/master/v3/environment_spec.rb +0 -185
  633. data/spec/unit/network/http/compression_spec.rb +0 -240
  634. data/spec/unit/network/http/nocache_pool_spec.rb +0 -64
  635. data/spec/unit/network/http_spec.rb +0 -9
  636. data/spec/unit/network/rights_spec.rb +0 -439
  637. data/spec/unit/parser/environment_compiler_spec.rb +0 -723
  638. data/spec/unit/pops/types/enumeration_spec.rb +0 -51
  639. data/spec/unit/resource/capability_finder_spec.rb +0 -143
  640. data/spec/unit/rest/route_spec.rb +0 -132
  641. data/spec/unit/ssl/host_spec.rb +0 -650
  642. data/spec/unit/ssl/key_spec.rb +0 -173
  643. data/spec/unit/ssl/validator_spec.rb +0 -278
  644. data/spec/unit/status_spec.rb +0 -45
  645. data/spec/unit/util/ssl_spec.rb +0 -91
@@ -505,7 +505,6 @@ describe Puppet::SSL::StateMachine, unless: Puppet::Util::Platform.jruby? do
505
505
  Puppet[:certificate_revocation] = false
506
506
 
507
507
  expect(cert_provider).not_to receive(:load_crls)
508
- expect(Puppet::Rest::Routes).not_to receive(:get_crls)
509
508
 
510
509
  state.next_state
511
510
 
@@ -6,7 +6,6 @@ describe Puppet::SSL::Verifier do
6
6
  let(:host) { 'example.com' }
7
7
  let(:http) { Net::HTTP.new(host) }
8
8
  let(:verifier) { described_class.new(host, ssl_context) }
9
- let(:adapter) { Puppet::SSL::VerifierAdapter.new(Puppet::SSL::Validator::DefaultValidator.new) }
10
9
 
11
10
  context '#reusable?' do
12
11
  it 'Verifiers with the same ssl_context are reusable' do
@@ -16,26 +15,6 @@ describe Puppet::SSL::Verifier do
16
15
  it 'Verifiers with different ssl_contexts are not reusable' do
17
16
  expect(verifier).to_not be_reusable(described_class.new(host, Puppet::SSL::SSLContext.new))
18
17
  end
19
-
20
- it 'Verifier is not reusable with VerifierAdapter' do
21
- expect(verifier).to_not be_reusable(adapter)
22
- end
23
-
24
- it 'VerifierAdapter is not reusable with Verifier' do
25
- expect(adapter).to_not be_reusable(verifier)
26
- end
27
-
28
- it 'VerifierAdapters with the same class of Validator are reusable' do
29
- expect(
30
- adapter
31
- ).to be_reusable(Puppet::SSL::VerifierAdapter.new(Puppet::SSL::Validator::DefaultValidator.new))
32
- end
33
-
34
- it 'VerifierAdapters with different classes of Validators are not reusable' do
35
- expect(
36
- adapter
37
- ).to_not be_reusable(Puppet::SSL::VerifierAdapter.new(Puppet::SSL::Validator::NoValidator.new))
38
- end
39
18
  end
40
19
 
41
20
  context '#setup_connection' do
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe "TestHelper" do
4
+ context "#after_each_test" do
5
+ it "restores the original environment" do
6
+ varname = 'test_helper_spec-test_variable'
7
+ Puppet::Util.set_env(varname, "\u16A0")
8
+
9
+ expect(Puppet::Util.get_env(varname)).to eq("\u16A0")
10
+
11
+ # Prematurely trigger the after_each_test method
12
+ Puppet::Test::TestHelper.after_each_test
13
+
14
+ expect(Puppet::Util::get_env(varname)).to be_nil
15
+ end
16
+ end
17
+ end
@@ -123,6 +123,21 @@ describe Puppet::Transaction::Persistence do
123
123
  persistence = Puppet::Transaction::Persistence.new
124
124
  persistence.load
125
125
  end
126
+
127
+ it 'should load Time and Symbols' do
128
+ write_state_file(<<~END)
129
+ File[/tmp/audit]:
130
+ parameters:
131
+ mtime:
132
+ system_value:
133
+ - 2020-07-15 05:38:12.427678398 +00:00
134
+ ensure:
135
+ system_value:
136
+ END
137
+
138
+ persistence = Puppet::Transaction::Persistence.new
139
+ expect(persistence.load.dig("File[/tmp/audit]", "parameters", "mtime", "system_value")).to contain_exactly(be_a(Time))
140
+ end
126
141
  end
127
142
  end
128
143
 
@@ -663,7 +663,7 @@ Version:
663
663
  :status => stringifier.convert('success'),
664
664
  }
665
665
 
666
- event = Puppet::Transaction::Event.new(event_hash)
666
+ event = Puppet::Transaction::Event.new(**event_hash)
667
667
 
668
668
  status = Puppet::Resource::Status.new(Puppet::Type.type(:notify).new(:title => "a resource"))
669
669
  status.changed = true
@@ -675,7 +675,7 @@ Version:
675
675
  report.code_id = "some code id"
676
676
  report.catalog_uuid = "some catalog uuid"
677
677
  report.cached_catalog_status = "not_used"
678
- report.master_used = "test:000"
678
+ report.server_used = "test:000"
679
679
  report.add_resource_status(status)
680
680
  report.transaction_completed = true
681
681
  report.finalize_report
@@ -693,7 +693,7 @@ Version:
693
693
  report.code_id = "some code id"
694
694
  report.catalog_uuid = "some catalog uuid"
695
695
  report.cached_catalog_status = "not_used"
696
- report.master_used = "test:000"
696
+ report.server_used = "test:000"
697
697
  report.add_resource_status(status)
698
698
  report.transaction_completed = true
699
699
  report.finalize_report
@@ -612,14 +612,14 @@ describe Puppet::Transaction::ResourceHarness do
612
612
  allow_any_instance_of(Puppet::Transaction::Event).to receive(:corrective_change).and_return(true)
613
613
  status = @harness.evaluate(resource)
614
614
  sync_event = status.events[0]
615
- expect(sync_event.message).to match(/content changed '{md5}[0-9a-f]+' to '{md5}[0-9a-f]+' \(corrective\)/)
615
+ expect(sync_event.message).to match(/content changed '{sha256}[0-9a-f]+' to '{sha256}[0-9a-f]+' \(corrective\)/)
616
616
  end
617
617
 
618
618
  it "contains no modifier when intentional change" do
619
619
  allow_any_instance_of(Puppet::Transaction::Event).to receive(:corrective_change).and_return(false)
620
620
  status = @harness.evaluate(resource)
621
621
  sync_event = status.events[0]
622
- expect(sync_event.message).to match(/content changed '{md5}[0-9a-f]+' to '{md5}[0-9a-f]+'$/)
622
+ expect(sync_event.message).to match(/content changed '{sha256}[0-9a-f]+' to '{sha256}[0-9a-f]+'$/)
623
623
  end
624
624
  end
625
625
  end
@@ -598,115 +598,81 @@ describe Puppet::Transaction do
598
598
  transaction.prefetch_if_necessary(resource)
599
599
  end
600
600
 
601
- it "should not rescue SystemExit without future_features flag" do
602
- Puppet.settings[:future_features] = false
601
+ it "should not rescue SystemExit" do
603
602
  expect(resource.provider.class).to receive(:prefetch).and_raise(SystemExit, "SystemMessage")
604
603
  expect { transaction.prefetch_if_necessary(resource) }.to raise_error(SystemExit, "SystemMessage")
605
604
  end
606
605
 
607
- it "should not rescue SystemExit with future_features flag" do
608
- Puppet.settings[:future_features] = true
609
- expect(resource.provider.class).to receive(:prefetch).and_raise(SystemExit, "SystemMessage")
610
- expect { transaction.prefetch_if_necessary(resource) }.to raise_error(SystemExit, "SystemMessage")
611
- end
612
-
613
- it "should rescue LoadError without future_features flag" do
614
- Puppet.settings[:future_features] = false
615
- expect(resource.provider.class).to receive(:prefetch).and_raise(LoadError, "LoadMessage")
616
- expect { transaction.prefetch_if_necessary(resource) }.not_to raise_error
617
- end
618
-
619
- it "should rescue LoadError with future_features flag" do
620
- Puppet.settings[:future_features] = true
606
+ it "should mark resources as failed when prefetching raises LoadError" do
621
607
  expect(resource.provider.class).to receive(:prefetch).and_raise(LoadError, "LoadMessage")
622
- expect { transaction.prefetch_if_necessary(resource) }.not_to raise_error
608
+ transaction.prefetch_if_necessary(resource)
609
+ expect(transaction.prefetched_providers[:package][:pkgng]).to be_truthy
623
610
  end
624
611
 
625
- describe "and prefetching fails" do
612
+ describe "and prefetching raises Puppet::Error" do
626
613
  before :each do
627
614
  expect(resource.provider.class).to receive(:prefetch).and_raise(Puppet::Error, "message")
628
615
  end
629
616
 
630
- context "without future_features flag" do
631
- before :each do
632
- Puppet.settings[:future_features] = false
633
- end
634
-
635
- it "should not rescue prefetch executions" do
636
- expect { transaction.prefetch_if_necessary(resource) }.to raise_error(Puppet::Error)
637
- end
617
+ it "should rescue prefetch executions" do
618
+ transaction.prefetch_if_necessary(resource)
638
619
 
639
- it "should log the exception during prefetch" do
640
- expect(Puppet).to receive(:log_exception).with(anything, "Could not prefetch package provider 'pkgng': message")
641
- expect { transaction.prefetch_if_necessary(resource) }.to raise_error(Puppet::Error, "message")
642
- end
620
+ expect(transaction.prefetched_providers[:package][:pkgng]).to be_truthy
643
621
  end
644
622
 
645
- context "with future_features flag" do
646
- before :each do
647
- Puppet.settings[:future_features] = true
648
- end
623
+ it "should mark resources as failed", :unless => RUBY_PLATFORM == 'java' do
624
+ transaction.evaluate
649
625
 
650
- it "should rescue prefetch executions" do
651
- transaction.prefetch_if_necessary(resource)
626
+ expect(transaction.resource_status(resource).failed?).to be_truthy
627
+ end
652
628
 
653
- expect(transaction.prefetched_providers[:package][:pkgng]).to be_truthy
654
- end
629
+ it "should mark a provider that has failed prefetch" do
630
+ transaction.prefetch_if_necessary(resource)
655
631
 
656
- it "should mark resources as failed", :unless => RUBY_PLATFORM == 'java' do
657
- transaction.evaluate
632
+ expect(transaction.prefetch_failed_providers[:package][:pkgng]).to be_truthy
633
+ end
658
634
 
659
- expect(transaction.resource_status(resource).failed?).to be_truthy
635
+ describe "and new resources are generated" do
636
+ let(:generator) { Puppet::Type.type(:notify).new :title => "generator" }
637
+ let(:generated) do
638
+ %w[a b c].map { |name| Puppet::Type.type(:package).new :title => "foo", :name => name, :provider => :apt }
660
639
  end
661
640
 
662
- it "should mark a provider that has failed prefetch" do
663
- transaction.prefetch_if_necessary(resource)
664
-
665
- expect(transaction.prefetch_failed_providers[:package][:pkgng]).to be_truthy
641
+ before :each do
642
+ catalog.add_resource generator
643
+ allow(generator).to receive(:generate).and_return(generated)
644
+ allow(catalog).to receive(:container_of).and_return(generator)
666
645
  end
667
646
 
668
- describe "and new resources are generated" do
669
- let(:generator) { Puppet::Type.type(:notify).new :title => "generator" }
670
- let(:generated) do
671
- %w[a b c].map { |name| Puppet::Type.type(:package).new :title => "foo", :name => name, :provider => :apt }
672
- end
673
-
674
- before :each do
675
- catalog.add_resource generator
676
- allow(generator).to receive(:generate).and_return(generated)
677
- allow(catalog).to receive(:container_of).and_return(generator)
678
- end
679
-
680
- it "should not evaluate resources with a failed provider, even if the prefetch is rescued" do
681
- #Only the generator resource should be applied, all the other resources are failed, and skipped.
682
- catalog.remove_resource resource2
683
- expect(transaction).to receive(:apply).once
647
+ it "should not evaluate resources with a failed provider, even if the prefetch is rescued" do
648
+ #Only the generator resource should be applied, all the other resources are failed, and skipped.
649
+ catalog.remove_resource resource2
650
+ expect(transaction).to receive(:apply).once
684
651
 
685
- transaction.evaluate
686
- end
652
+ transaction.evaluate
653
+ end
687
654
 
688
- it "should not fail other resources added after the failing resource", :unless => RUBY_PLATFORM == 'java' do
689
- new_resource = Puppet::Type.type(:notify).new :name => "baz"
690
- catalog.add_resource(new_resource)
655
+ it "should not fail other resources added after the failing resource", :unless => RUBY_PLATFORM == 'java' do
656
+ new_resource = Puppet::Type.type(:notify).new :name => "baz"
657
+ catalog.add_resource(new_resource)
691
658
 
692
- transaction.evaluate
659
+ transaction.evaluate
693
660
 
694
- expect(transaction.resource_status(new_resource).failed?).to be_falsey
695
- end
661
+ expect(transaction.resource_status(new_resource).failed?).to be_falsey
662
+ end
696
663
 
697
- it "should fail other resources that require the failing resource" do
698
- new_resource = Puppet::Type.type(:notify).new(:name => "baz", :require => resource)
699
- catalog.add_resource(new_resource)
664
+ it "should fail other resources that require the failing resource" do
665
+ new_resource = Puppet::Type.type(:notify).new(:name => "baz", :require => resource)
666
+ catalog.add_resource(new_resource)
700
667
 
701
- catalog.remove_resource resource2
702
- expect(transaction).to receive(:apply).once
668
+ catalog.remove_resource resource2
669
+ expect(transaction).to receive(:apply).once
703
670
 
704
- transaction.evaluate
671
+ transaction.evaluate
705
672
 
706
- expect(transaction.resource_status(resource).failed?).to be_truthy
707
- expect(transaction.resource_status(new_resource).dependency_failed?).to be_truthy
708
- expect(transaction.skip?(new_resource)).to be_truthy
709
- end
673
+ expect(transaction.resource_status(resource).failed?).to be_truthy
674
+ expect(transaction.resource_status(new_resource).dependency_failed?).to be_truthy
675
+ expect(transaction.skip?(new_resource)).to be_truthy
710
676
  end
711
677
  end
712
678
  end
@@ -18,8 +18,8 @@ describe checksum do
18
18
  @checksum.sum("foobar")
19
19
  end
20
20
 
21
- it "should use :md5 to sum when no value is set" do
22
- expect(@checksum).to receive(:md5).with("foobar").and_return("yay")
21
+ it "should use :sha256 to sum when no value is set" do
22
+ expect(@checksum).to receive(:sha256).with("foobar").and_return("yay")
23
23
  @checksum.sum("foobar")
24
24
  end
25
25
 
@@ -47,8 +47,8 @@ describe checksum do
47
47
  expect(@checksum.sum("foobar")).to eq("{sha384}#{sum}")
48
48
  end
49
49
 
50
- it "should use :md5 as its default type" do
51
- expect(@checksum.default).to eq(:md5)
50
+ it "should use :sha256 as its default type" do
51
+ expect(@checksum.default).to eq(:sha256)
52
52
  end
53
53
 
54
54
  it "should use its current value when asked to sum a file's content" do
@@ -57,8 +57,8 @@ describe checksum do
57
57
  @checksum.sum_file(@path)
58
58
  end
59
59
 
60
- it "should use :md5 to sum a file when no value is set" do
61
- expect(@checksum).to receive(:md5_file).with(@path).and_return("yay")
60
+ it "should use :sha256 to sum a file when no value is set" do
61
+ expect(@checksum).to receive(:sha256_file).with(@path).and_return("yay")
62
62
  @checksum.sum_file(@path)
63
63
  end
64
64
 
@@ -7,7 +7,7 @@ describe Puppet::Type.type(:file).attrclass(:content), :uses_checksums => true d
7
7
  let(:filename) { tmpfile('testfile') }
8
8
  let(:environment) { Puppet::Node::Environment.create(:testing, []) }
9
9
  let(:catalog) { Puppet::Resource::Catalog.new(:test, environment) }
10
- let(:resource) { Puppet::Type.type(:file).new :path => filename, :catalog => catalog }
10
+ let(:resource) { Puppet::Type.type(:file).new :path => filename, :catalog => catalog, :backup => 'puppet' }
11
11
 
12
12
  before do
13
13
  File.open(filename, 'w') {|f| f.write "initial file content"}
@@ -85,7 +85,7 @@ describe Puppet::Type.type(:file).attrclass(:ensure) do
85
85
  }.to raise_error(Puppet::Error, /Cannot create #{newpath}; parent directory #{File.dirname(newpath)} does not exist/)
86
86
  end
87
87
 
88
- it "should accept octal mode as fixnum" do
88
+ it "should accept octal mode as integer" do
89
89
  resource[:mode] = '0700'
90
90
  expect(resource).to receive(:property_fix)
91
91
  expect(Dir).to receive(:mkdir).with(path, 0700)
@@ -11,7 +11,7 @@ describe Puppet::Type.type(:file).attrclass(:mode) do
11
11
  it "should reject non-string values" do
12
12
  expect {
13
13
  mode.value = 0755
14
- }.to raise_error(Puppet::Error, /The file mode specification must be a string, not '(?:Fixnum|Integer)'/)
14
+ }.to raise_error(Puppet::Error, /The file mode specification must be a string, not 'Integer'/)
15
15
  end
16
16
 
17
17
  it "should accept values specified as octal numbers in strings" do
@@ -1,7 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'uri'
3
3
  require 'puppet/network/http_pool'
4
- #require 'puppet/network/resolver'
5
4
 
6
5
  describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
7
6
  include PuppetSpec::Files
@@ -22,8 +21,8 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
22
21
  @foobar = make_absolute("/foo/bar baz")
23
22
  @feebooz = make_absolute("/fee/booz baz")
24
23
 
25
- @foobar_uri = URI.unescape(Puppet::Util.path_to_uri(@foobar).to_s)
26
- @feebooz_uri = URI.unescape(Puppet::Util.path_to_uri(@feebooz).to_s)
24
+ @foobar_uri = Puppet::Util.uri_unescape(Puppet::Util.path_to_uri(@foobar).to_s)
25
+ @feebooz_uri = Puppet::Util.uri_unescape(Puppet::Util.path_to_uri(@feebooz).to_s)
27
26
  end
28
27
 
29
28
  it "should be a subclass of Parameter" do
@@ -82,7 +81,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
82
81
  describe "#munge" do
83
82
  it "should prefix file scheme to absolute paths" do
84
83
  resource[:source] = filename
85
- expect(resource[:source]).to eq([URI.unescape(Puppet::Util.path_to_uri(filename).to_s)])
84
+ expect(resource[:source]).to eq([Puppet::Util.uri_unescape(Puppet::Util.path_to_uri(filename).to_s)])
86
85
  end
87
86
 
88
87
  %w[file puppet].each do |scheme|
@@ -521,7 +520,7 @@ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
521
520
  end
522
521
 
523
522
  it "should return the default source port" do
524
- Puppet[:masterport] = 1234
523
+ Puppet[:serverport] = 1234
525
524
  expect(resource.parameter(:source).port).to eq(1234)
526
525
  end
527
526
  end
@@ -1,8 +1,37 @@
1
+ # coding: utf-8
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Puppet::Type.type(:file) do
4
5
  include PuppetSpec::Files
5
6
 
7
+ # precomputed checksum values for FILE_CONTENT
8
+ FILE_CONTENT = 'file content'.freeze
9
+ CHECKSUM_VALUES = {
10
+ md5: 'd10b4c3ff123b26dc068d43a8bef2d23',
11
+ md5lite: 'd10b4c3ff123b26dc068d43a8bef2d23',
12
+ sha256: 'e0ac3601005dfa1864f5392aabaf7d898b1b5bab854f1acb4491bcd806b76b0c',
13
+ sha256lite: 'e0ac3601005dfa1864f5392aabaf7d898b1b5bab854f1acb4491bcd806b76b0c',
14
+ sha1: '87758871f598e1a3b4679953589ae2f57a0bb43c',
15
+ sha1lite: '87758871f598e1a3b4679953589ae2f57a0bb43c',
16
+ sha224: '2aefaaa5f4d8f17f82f3e1bb407e190cede9aa1311fa4533ce505531',
17
+ sha384: '61c7783501ebd90233650357fefbe5a141b7618f907b8f043bbaa92c0f610c785a641ddd479fa81d650cd86e29aa6858',
18
+ sha512: '2fb1877301854ac92dd518018f97407a0a88bb696bfef0a51e9efbd39917353500009e15bd72c3f0e4bf690115870bfab926565d5ad97269d922dbbb41261221',
19
+ mtime: 'Jan 26 13:59:49 2016',
20
+ ctime: 'Jan 26 13:59:49 2016'
21
+ }.freeze
22
+
23
+ INVALID_CHECKSUM_VALUES = {
24
+ md5: '00000000000000000000000000000000',
25
+ md5lite: '00000000000000000000000000000000',
26
+ sha256: '0000000000000000000000000000000000000000000000000000000000000000',
27
+ sha256lite: '0000000000000000000000000000000000000000000000000000000000000000',
28
+ sha1: '0000000000000000000000000000000000000000',
29
+ sha1lite: '0000000000000000000000000000000000000000',
30
+ sha224: '00000000000000000000000000000000000000000000000000000000',
31
+ sha384: '000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
32
+ sha512: '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
33
+ }.freeze
34
+
6
35
  let(:path) { tmpfile('file_testing') }
7
36
  let(:file) { described_class.new(:path => path, :catalog => catalog) }
8
37
  let(:provider) { file.provider }
@@ -105,6 +134,10 @@ describe Puppet::Type.type(:file) do
105
134
  end
106
135
 
107
136
  describe "the backup parameter" do
137
+ it 'should be disabled by default' do
138
+ expect(file[:backup]).to eq(nil)
139
+ end
140
+
108
141
  [false, 'false', :false].each do |value|
109
142
  it "should disable backup if the value is #{value.inspect}" do
110
143
  file[:backup] = value
@@ -746,7 +779,7 @@ describe Puppet::Type.type(:file) do
746
779
  it "should set the checksum parameter based on the metadata" do
747
780
  allow(file).to receive(:perform_recursion).and_return([@first])
748
781
  allow(@resource).to receive(:[]=)
749
- expect(@resource).to receive(:[]=).with(:checksum, "md5")
782
+ expect(@resource).to receive(:[]=).with(:checksum, "sha256")
750
783
  file.recurse_remote("first" => @resource)
751
784
  end
752
785
 
@@ -782,7 +815,7 @@ describe Puppet::Type.type(:file) do
782
815
  allow(file).to receive(:perform_recursion).and_return([@first])
783
816
 
784
817
  allow(file).to receive(:[]=)
785
- expect(file). to receive(:[]=).with(:checksum, "md5")
818
+ expect(file). to receive(:[]=).with(:checksum, "sha256")
786
819
 
787
820
  file.recurse_remote("first" => @resource)
788
821
  end
@@ -791,7 +824,7 @@ describe Puppet::Type.type(:file) do
791
824
  let(:sources) do
792
825
  h = {}
793
826
  %w{/a /b /c /d}.each do |key|
794
- h[key] = URI.unescape(Puppet::Util.path_to_uri(File.expand_path(key)).to_s)
827
+ h[key] = Puppet::Util.uri_unescape(Puppet::Util.path_to_uri(File.expand_path(key)).to_s)
795
828
  end
796
829
  h
797
830
  end
@@ -900,7 +933,7 @@ describe Puppet::Type.type(:file) do
900
933
  end
901
934
 
902
935
  it "should fail if it can't backup the file" do
903
- # Default: file[:backup] = true
936
+ file[:backup] = true
904
937
  allow(file).to receive(:stat).and_return(double('stat', :ftype => 'file'))
905
938
  allow(file).to receive(:perform_backup).and_return(false)
906
939
 
@@ -909,7 +942,7 @@ describe Puppet::Type.type(:file) do
909
942
 
910
943
  describe "backing up directories" do
911
944
  it "should not backup directories if backup is true and force is false" do
912
- # Default: file[:backup] = true
945
+ file[:backup] = true
913
946
  file[:force] = false
914
947
  allow(file).to receive(:stat).and_return(double('stat', :ftype => 'directory'))
915
948
 
@@ -919,7 +952,7 @@ describe Puppet::Type.type(:file) do
919
952
  end
920
953
 
921
954
  it "should backup directories if backup is true and force is true" do
922
- # Default: file[:backup] = true
955
+ file[:backup] = true
923
956
  file[:force] = true
924
957
  allow(file).to receive(:stat).and_return(double('stat', :ftype => 'directory'))
925
958
 
@@ -946,7 +979,7 @@ describe Puppet::Type.type(:file) do
946
979
  end
947
980
 
948
981
  it "should remove a directory if backup is true and force is true" do
949
- # Default: file[:backup] = true
982
+ file[:backup] = true
950
983
  file[:force] = true
951
984
  allow(file).to receive(:stat).and_return(double('stat', :ftype => 'directory'))
952
985
 
@@ -978,6 +1011,7 @@ describe Puppet::Type.type(:file) do
978
1011
  end
979
1012
 
980
1013
  it "should fail if the file is not a directory, link, file, fifo, socket, or is unknown" do
1014
+ file[:backup] = 'puppet'
981
1015
  allow(file).to receive(:stat).and_return(double('stat', :ftype => 'blockSpecial'))
982
1016
 
983
1017
  expect(file).to receive(:warning).with("Could not back up file of type blockSpecial")
@@ -1108,38 +1142,6 @@ describe Puppet::Type.type(:file) do
1108
1142
  end
1109
1143
 
1110
1144
  describe "#write" do
1111
- describe "when validating the checksum" do
1112
- before { allow(file).to receive(:validate_checksum?).and_return(true) }
1113
-
1114
- it "should fail if the checksum parameter and content checksums do not match" do
1115
- checksum = double('checksum_parameter', :sum => 'checksum_b', :sum_file => 'checksum_b')
1116
- allow(file).to receive(:parameter).with(:checksum).and_return(checksum)
1117
- allow(file).to receive(:parameter).with(:source).and_return(nil)
1118
-
1119
-
1120
- property = double('content_property', :actual_content => "something", :length => "something".length, :write => 'checksum_a')
1121
- allow(file).to receive(:property).with(:content).and_return(property)
1122
-
1123
- expect { file.write property }.to raise_error(Puppet::Error) end
1124
- end
1125
-
1126
- describe "when not validating the checksum" do
1127
- before do
1128
- allow(file).to receive(:validate_checksum?).and_return(false)
1129
- end
1130
-
1131
- it "should not fail if the checksum property and content checksums do not match" do
1132
- checksum = double('checksum_parameter', :sum => 'checksum_b')
1133
- allow(file).to receive(:parameter).with(:checksum).and_return(checksum)
1134
- allow(file).to receive(:parameter).with(:source).and_return(nil)
1135
-
1136
- property = double('content_property', :actual_content => "something", :length => "something".length, :write => 'checksum_a')
1137
- allow(file).to receive(:property).with(:content).and_return(property)
1138
-
1139
- expect { file.write property }.to_not raise_error
1140
- end
1141
- end
1142
-
1143
1145
  describe "when resource mode is supplied" do
1144
1146
  before do
1145
1147
  allow(file).to receive(:property_fix)
@@ -1191,7 +1193,7 @@ describe Puppet::Type.type(:file) do
1191
1193
  describe "when resource mode is not supplied" do
1192
1194
  context "and content is supplied" do
1193
1195
  it "should default to 0644 mode" do
1194
- file = described_class.new(:path => path, :content => "file content")
1196
+ file = described_class.new(:path => path, :content => FILE_CONTENT)
1195
1197
 
1196
1198
  file.write file.parameter(:content)
1197
1199
 
@@ -1214,35 +1216,6 @@ describe Puppet::Type.type(:file) do
1214
1216
  end
1215
1217
  end
1216
1218
 
1217
- describe "#fail_if_checksum_is_wrong" do
1218
- it "should fail if the checksum of the file doesn't match the expected one" do
1219
- expect do
1220
- allow(file.parameter(:checksum)).to receive(:sum_file).and_return('wrong!!')
1221
- file.instance_eval do
1222
- fail_if_checksum_is_wrong(self[:path], 'anything!')
1223
- end
1224
- end.to raise_error(Puppet::Error, /File written to disk did not match checksum/)
1225
- end
1226
-
1227
- it "should not fail if the checksum is correct" do
1228
- expect do
1229
- allow(file.parameter(:checksum)).to receive(:sum_file).and_return('anything!')
1230
- file.instance_eval do
1231
- fail_if_checksum_is_wrong(self[:path], 'anything!')
1232
- end
1233
- end.not_to raise_error
1234
- end
1235
-
1236
- it "should not fail if the checksum is absent" do
1237
- expect do
1238
- allow(file.parameter(:checksum)).to receive(:sum_file).and_return(nil)
1239
- file.instance_eval do
1240
- fail_if_checksum_is_wrong(self[:path], 'anything!')
1241
- end
1242
- end.not_to raise_error
1243
- end
1244
- end
1245
-
1246
1219
  describe "#write_temporary_file?" do
1247
1220
  it "should be true if the file has specified content" do
1248
1221
  file[:content] = 'some content'
@@ -1462,7 +1435,7 @@ describe Puppet::Type.type(:file) do
1462
1435
  expect(Puppet::FileServing::Metadata.indirection).to receive(:find).with(source, anything).and_return(metadata)
1463
1436
 
1464
1437
  uri = file.parameters[:source].uri
1465
- expect(URI.unescape(uri.path)).to eq(filename)
1438
+ expect(Puppet::Util.uri_unescape(uri.path)).to eq(filename)
1466
1439
  expect(uri.path.encoding).to eq(Encoding::UTF_8)
1467
1440
  end
1468
1441
 
@@ -1486,29 +1459,16 @@ describe Puppet::Type.type(:file) do
1486
1459
  expect_any_instance_of(Puppet::Indirector::FileMetadata::Rest).to receive(:find).with(request_key(filename[1..-1])).and_return(metadata)
1487
1460
 
1488
1461
  uri = file.parameters[:source].uri
1489
- expect(URI.unescape(uri.path)).to eq(filename)
1462
+ expect(Puppet::Util.uri_unescape(uri.path)).to eq(filename)
1490
1463
  expect(uri.path.encoding).to eq(Encoding::UTF_8)
1491
1464
  end
1492
1465
  end
1493
1466
 
1494
1467
  describe "when using source" do
1468
+ let(:source) { tmpfile('file_source') }
1469
+
1495
1470
  before do
1496
- file[:source] = File.expand_path('/one')
1497
- # Contents of an empty file generate the below hash values
1498
- # in case you need to add support for additional algorithms in future
1499
- @checksum_values = {
1500
- :md5 => 'd41d8cd98f00b204e9800998ecf8427e',
1501
- :md5lite => 'd41d8cd98f00b204e9800998ecf8427e',
1502
- :sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1503
- :sha256lite => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1504
- :sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1505
- :sha1lite => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1506
- :sha224 => 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f',
1507
- :sha384 => '38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b',
1508
- :sha512 => 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e',
1509
- :mtime => 'Jan 26 13:59:49 2016',
1510
- :ctime => 'Jan 26 13:59:49 2016'
1511
- }
1471
+ file[:source] = source
1512
1472
  end
1513
1473
 
1514
1474
  Puppet::Type::File::ParameterChecksum.value_collection.values.reject {|v| v == :none}.each do |checksum_type|
@@ -1527,9 +1487,51 @@ describe Puppet::Type.type(:file) do
1527
1487
  end
1528
1488
 
1529
1489
  it 'should validate a valid checksum_value' do
1530
- file[:checksum_value] = @checksum_values[checksum_type]
1490
+ file[:checksum_value] = CHECKSUM_VALUES[checksum_type]
1531
1491
  expect { file.validate }.to_not raise_error
1532
1492
  end
1493
+
1494
+ it 'fails if the checksum_value parameter and written file do not match' do
1495
+ skip if checksum_type =~ /^(ctime|mtime)/
1496
+
1497
+ File.write(source, FILE_CONTENT)
1498
+ file[:checksum_value] = INVALID_CHECKSUM_VALUES[checksum_type]
1499
+
1500
+ expect {
1501
+ file.property(:checksum_value).sync
1502
+ }.to raise_error(Puppet::Error, /File written to disk did not match desired checksum/)
1503
+
1504
+ expect(Puppet::FileSystem).to_not be_exist(file[:path])
1505
+ end
1506
+
1507
+ it 'fails if the checksum_value parameter does not match, but the metadata does' do
1508
+ skip if checksum_type =~ /^(ctime|mtime)/
1509
+
1510
+ File.write(source, FILE_CONTENT)
1511
+ file[:checksum_value] = INVALID_CHECKSUM_VALUES[checksum_type]
1512
+ allow(file.parameter(:source).metadata).to receive(:checksum).and_return(file[:checksum_value])
1513
+
1514
+ expect {
1515
+ file.property(:checksum_value).sync
1516
+ }.to raise_error(Puppet::Error, /File written to disk did not match desired checksum/)
1517
+
1518
+ expect(Puppet::FileSystem).to_not be_exist(file[:path])
1519
+ end
1520
+
1521
+ it 'replaces a file from a source when the checksum matches' do
1522
+ File.write(source, FILE_CONTENT)
1523
+ file[:checksum_value] = CHECKSUM_VALUES[checksum_type]
1524
+
1525
+ file.property(:checksum_value).sync
1526
+ checksum = file.parameter(:checksum).sum_file(file[:path])
1527
+
1528
+ if checksum_type =~ /^(ctime|mtime)/
1529
+ # file on disk ctime/mtime will be later than expected time
1530
+ expect(checksum).to match(/{#{checksum_type}}/)
1531
+ else
1532
+ expect(checksum).to eq("{#{checksum_type}}#{file[:checksum_value]}")
1533
+ end
1534
+ end
1533
1535
  end
1534
1536
  end
1535
1537
 
@@ -1591,19 +1593,8 @@ describe Puppet::Type.type(:file) do
1591
1593
  end
1592
1594
 
1593
1595
  describe "when using content" do
1594
- before do
1595
- file[:content] = 'file contents'
1596
- @checksum_values = {
1597
- :md5 => 'd41d8cd98f00b204e9800998ecf8427e',
1598
- :md5lite => 'd41d8cd98f00b204e9800998ecf8427e',
1599
- :sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1600
- :sha256lite => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1601
- :sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1602
- :sha1lite => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1603
- :sha224 => 'd14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f',
1604
- :sha384 => '38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b',
1605
- :sha512 => 'cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e',
1606
- }
1596
+ before :each do
1597
+ file[:content] = FILE_CONTENT
1607
1598
  end
1608
1599
 
1609
1600
  (Puppet::Type::File::ParameterChecksum.value_collection.values - SOURCE_ONLY_CHECKSUMS).each do |checksum_type|
@@ -1622,9 +1613,43 @@ describe Puppet::Type.type(:file) do
1622
1613
  end
1623
1614
 
1624
1615
  it 'should validate a valid checksum_value' do
1625
- file[:checksum_value] = @checksum_values[checksum_type]
1616
+ file[:checksum_value] = CHECKSUM_VALUES[checksum_type]
1626
1617
  expect { file.validate }.to_not raise_error
1627
1618
  end
1619
+
1620
+ it 'fails if the checksum_value parameter and written file do not match' do
1621
+ file[:checksum_value] = INVALID_CHECKSUM_VALUES[checksum_type]
1622
+
1623
+ expect {
1624
+ file.property(:content).sync
1625
+ }.to raise_error(Puppet::Error, /File written to disk did not match desired checksum/)
1626
+
1627
+ expect(Puppet::FileSystem).to_not be_exist(file[:path])
1628
+ end
1629
+
1630
+ it 'fails if the calculated checksum for the content and written file do not match' do
1631
+ allow(file.parameter(:checksum)).to receive(:sum).and_return(INVALID_CHECKSUM_VALUES[checksum_type])
1632
+
1633
+ expect {
1634
+ file.property(:content).sync
1635
+ }.to raise_error(Puppet::Error, /File written to disk did not match desired checksum/)
1636
+
1637
+ expect(Puppet::FileSystem).to_not be_exist(file[:path])
1638
+ end
1639
+
1640
+ it 'replaces a file from content when the checksum matches' do
1641
+ file[:checksum_value] = CHECKSUM_VALUES[checksum_type]
1642
+
1643
+ file.property(:content).sync
1644
+ checksum = file.parameter(:checksum).sum_file(file[:path])
1645
+
1646
+ if checksum_type =~ /^(ctime|mtime)/
1647
+ # file on disk ctime/mtime will be later than expected time
1648
+ expect(checksum).to match(/{#{checksum_type}}/)
1649
+ else
1650
+ expect(checksum).to eq("{#{checksum_type}}#{file[:checksum_value]}")
1651
+ end
1652
+ end
1628
1653
  end
1629
1654
  end
1630
1655
 
@@ -1657,6 +1682,13 @@ describe Puppet::Type.type(:file) do
1657
1682
  file[:checksum_value] = ''
1658
1683
  expect { file.validate }.to_not raise_error
1659
1684
  end
1685
+
1686
+ it 'writes a file' do
1687
+ file[:ensure] = :file
1688
+ file.property(:ensure).sync
1689
+
1690
+ expect(file.parameter(:checksum).sum_file(file[:path])).to eq('{none}')
1691
+ end
1660
1692
  end
1661
1693
 
1662
1694
  describe "when auditing" do