puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -1,10 +1,12 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
  require 'uri'
4
+ require 'puppet/network/http_pool'
5
+ #require 'puppet/network/resolver'
4
6
 
5
- source = Puppet::Type.type(:file).attrclass(:source)
6
- describe Puppet::Type.type(:file).attrclass(:source) do
7
+ describe Puppet::Type.type(:file).attrclass(:source), :uses_checksums => true do
7
8
  include PuppetSpec::Files
9
+ include_context 'with supported checksum types'
8
10
 
9
11
  around :each do |example|
10
12
  Puppet.override(:environments => Puppet::Environments::Static.new) do
@@ -12,10 +14,12 @@ describe Puppet::Type.type(:file).attrclass(:source) do
12
14
  end
13
15
  end
14
16
 
17
+ let(:filename) { tmpfile('file_source_validate') }
18
+ let(:environment) { Puppet::Node::Environment.remote("myenv") }
19
+ let(:catalog) { Puppet::Resource::Catalog.new(:test, environment) }
20
+ let(:resource) { Puppet::Type.type(:file).new :path => filename, :catalog => catalog }
21
+
15
22
  before do
16
- # Wow that's a messy interface to the resource.
17
- @environment = Puppet::Node::Environment.remote("myenv")
18
- @resource = stub 'resource', :[]= => nil, :property => nil, :catalog => Puppet::Resource::Catalog.new(nil, @environment), :line => 0, :file => ''
19
23
  @foobar = make_absolute("/foo/bar baz")
20
24
  @feebooz = make_absolute("/fee/booz baz")
21
25
 
@@ -24,13 +28,10 @@ describe Puppet::Type.type(:file).attrclass(:source) do
24
28
  end
25
29
 
26
30
  it "should be a subclass of Parameter" do
27
- expect(source.superclass).to eq(Puppet::Parameter)
31
+ expect(described_class.superclass).to eq(Puppet::Parameter)
28
32
  end
29
33
 
30
34
  describe "#validate" do
31
- let(:path) { tmpfile('file_source_validate') }
32
- let(:resource) { Puppet::Type.type(:file).new(:path => path) }
33
-
34
35
  it "should fail if the set values are not URLs" do
35
36
  URI.expects(:parse).with('foo').raises RuntimeError
36
37
 
@@ -38,7 +39,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
38
39
  end
39
40
 
40
41
  it "should fail if the URI is not a local file, file URI, or puppet URI" do
41
- expect(lambda { resource[:source] = %w{http://foo/bar} }).to raise_error(Puppet::Error, /Cannot use URLs of type 'http' as source for fileserving/)
42
+ expect(lambda { resource[:source] = %w{ftp://foo/bar} }).to raise_error(Puppet::Error, /Cannot use URLs of type 'ftp' as source for fileserving/)
42
43
  end
43
44
 
44
45
  it "should strip trailing forward slashes", :unless => Puppet.features.microsoft_windows? do
@@ -80,12 +81,9 @@ describe Puppet::Type.type(:file).attrclass(:source) do
80
81
  end
81
82
 
82
83
  describe "#munge" do
83
- let(:path) { tmpfile('file_source_munge') }
84
- let(:resource) { Puppet::Type.type(:file).new(:path => path) }
85
-
86
84
  it "should prefix file scheme to absolute paths" do
87
- resource[:source] = path
88
- expect(resource[:source]).to eq([URI.unescape(Puppet::Util.path_to_uri(path).to_s)])
85
+ resource[:source] = filename
86
+ expect(resource[:source]).to eq([URI.unescape(Puppet::Util.path_to_uri(filename).to_s)])
89
87
  end
90
88
 
91
89
  %w[file puppet].each do |scheme|
@@ -99,27 +97,27 @@ describe Puppet::Type.type(:file).attrclass(:source) do
99
97
  describe "when returning the metadata" do
100
98
  before do
101
99
  @metadata = stub 'metadata', :source= => nil
102
- @resource.stubs(:[]).with(:links).returns :manage
103
- @resource.stubs(:[]).with(:source_permissions).returns :use
104
- @resource.stubs(:[]).with(:checksum).returns :checksum
100
+ resource.stubs(:[]).with(:links).returns :manage
101
+ resource.stubs(:[]).with(:source_permissions).returns :use
102
+ resource.stubs(:[]).with(:checksum).returns :checksum
105
103
  end
106
104
 
107
105
  it "should return already-available metadata" do
108
- @source = source.new(:resource => @resource)
106
+ @source = described_class.new(:resource => resource)
109
107
  @source.metadata = "foo"
110
108
  expect(@source.metadata).to eq("foo")
111
109
  end
112
110
 
113
111
  it "should return nil if no @should value is set and no metadata is available" do
114
- @source = source.new(:resource => @resource)
112
+ @source = described_class.new(:resource => resource)
115
113
  expect(@source.metadata).to be_nil
116
114
  end
117
115
 
118
116
  it "should collect its metadata using the Metadata class if it is not already set" do
119
- @source = source.new(:resource => @resource, :value => @foobar)
117
+ @source = described_class.new(:resource => resource, :value => @foobar)
120
118
  Puppet::FileServing::Metadata.indirection.expects(:find).with do |uri, options|
121
119
  expect(uri).to eq @foobar_uri
122
- expect(options[:environment]).to eq @environment
120
+ expect(options[:environment]).to eq environment
123
121
  expect(options[:links]).to eq :manage
124
122
  expect(options[:checksum_type]).to eq :checksum
125
123
  end.returns @metadata
@@ -129,9 +127,9 @@ describe Puppet::Type.type(:file).attrclass(:source) do
129
127
 
130
128
  it "should use the metadata from the first found source" do
131
129
  metadata = stub 'metadata', :source= => nil
132
- @source = source.new(:resource => @resource, :value => [@foobar, @feebooz])
130
+ @source = described_class.new(:resource => resource, :value => [@foobar, @feebooz])
133
131
  options = {
134
- :environment => @environment,
132
+ :environment => environment,
135
133
  :links => :manage,
136
134
  :source_permissions => :use,
137
135
  :checksum_type => :checksum
@@ -143,10 +141,10 @@ describe Puppet::Type.type(:file).attrclass(:source) do
143
141
 
144
142
  it "should store the found source as the metadata's source" do
145
143
  metadata = mock 'metadata'
146
- @source = source.new(:resource => @resource, :value => @foobar)
144
+ @source = described_class.new(:resource => resource, :value => @foobar)
147
145
  Puppet::FileServing::Metadata.indirection.expects(:find).with do |uri, options|
148
146
  expect(uri).to eq @foobar_uri
149
- expect(options[:environment]).to eq @environment
147
+ expect(options[:environment]).to eq environment
150
148
  expect(options[:links]).to eq :manage
151
149
  expect(options[:checksum_type]).to eq :checksum
152
150
  end.returns metadata
@@ -156,10 +154,10 @@ describe Puppet::Type.type(:file).attrclass(:source) do
156
154
  end
157
155
 
158
156
  it "should fail intelligently if an exception is encountered while querying for metadata" do
159
- @source = source.new(:resource => @resource, :value => @foobar)
157
+ @source = described_class.new(:resource => resource, :value => @foobar)
160
158
  Puppet::FileServing::Metadata.indirection.expects(:find).with do |uri, options|
161
159
  expect(uri).to eq @foobar_uri
162
- expect(options[:environment]).to eq @environment
160
+ expect(options[:environment]).to eq environment
163
161
  expect(options[:links]).to eq :manage
164
162
  expect(options[:checksum_type]).to eq :checksum
165
163
  end.raises RuntimeError
@@ -169,10 +167,10 @@ describe Puppet::Type.type(:file).attrclass(:source) do
169
167
  end
170
168
 
171
169
  it "should fail if no specified sources can be found" do
172
- @source = source.new(:resource => @resource, :value => @foobar)
170
+ @source = described_class.new(:resource => resource, :value => @foobar)
173
171
  Puppet::FileServing::Metadata.indirection.expects(:find).with do |uri, options|
174
172
  expect(uri).to eq @foobar_uri
175
- expect(options[:environment]).to eq @environment
173
+ expect(options[:environment]).to eq environment
176
174
  expect(options[:links]).to eq :manage
177
175
  expect(options[:checksum_type]).to eq :checksum
178
176
  end.returns nil
@@ -184,15 +182,15 @@ describe Puppet::Type.type(:file).attrclass(:source) do
184
182
  end
185
183
 
186
184
  it "should have a method for setting the desired values on the resource" do
187
- expect(source.new(:resource => @resource)).to respond_to(:copy_source_values)
185
+ expect(described_class.new(:resource => resource)).to respond_to(:copy_source_values)
188
186
  end
189
187
 
190
188
  describe "when copying the source values" do
191
189
  before :each do
192
190
  @resource = Puppet::Type.type(:file).new :path => @foobar
193
191
 
194
- @source = source.new(:resource => @resource)
195
- @metadata = stub 'metadata', :owner => 100, :group => 200, :mode => "173", :checksum => "{md5}asdfasdf", :ftype => "file", :source => @foobar
192
+ @source = described_class.new(:resource => @resource)
193
+ @metadata = stub 'metadata', :owner => 100, :group => 200, :mode => "173", :checksum => "{md5}asdfasdf", :checksum_type => "md5", :ftype => "file", :source => @foobar
196
194
  @source.stubs(:metadata).returns @metadata
197
195
 
198
196
  Puppet.features.stubs(:root?).returns true
@@ -202,7 +200,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
202
200
  @metadata.stubs(:mode).returns 0173
203
201
  @resource[:source_permissions] = :use
204
202
  if Puppet::Util::Platform.windows?
205
- expect { @source.copy_source_values }.to raise_error("Copying owner/mode/group from the source file on Windows is not supported; use source_permissions => ignore.")
203
+ expect { @source.copy_source_values }.to raise_error("Should not have tried to use source owner/mode/group on Windows")
206
204
  else
207
205
  expect { @source.copy_source_values }.not_to raise_error
208
206
  end
@@ -212,7 +210,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
212
210
  @metadata.stubs(:mode).returns "173"
213
211
  @resource[:source_permissions] = :use
214
212
  if Puppet::Util::Platform.windows?
215
- expect { @source.copy_source_values }.to raise_error("Copying owner/mode/group from the source file on Windows is not supported; use source_permissions => ignore.")
213
+ expect { @source.copy_source_values }.to raise_error("Should not have tried to use source owner/mode/group on Windows")
216
214
  else
217
215
  expect { @source.copy_source_values }.not_to raise_error
218
216
  end
@@ -248,20 +246,22 @@ describe Puppet::Type.type(:file).attrclass(:source) do
248
246
  context "when source_permissions is `use`" do
249
247
  before :each do
250
248
  @resource[:source_permissions] = "use"
249
+ @resource[:checksum] = :sha256
251
250
  end
252
251
 
253
- it "should copy the metadata's owner, group, checksum, and mode to the resource if they are not set on the resource" do
252
+ it "should copy the metadata's owner, group, checksum, checksum_type, and mode to the resource if they are not set on the resource" do
254
253
  @source.copy_source_values
255
254
 
256
255
  expect(@resource[:owner]).to eq(100)
257
256
  expect(@resource[:group]).to eq(200)
258
257
  expect(@resource[:mode]).to eq("173")
259
258
 
260
- # Metadata calls it checksum, we call it content.
259
+ # Metadata calls it checksum and checksum_type, we call it content and checksum.
261
260
  expect(@resource[:content]).to eq(@metadata.checksum)
261
+ expect(@resource[:checksum]).to eq(@metadata.checksum_type.to_sym)
262
262
  end
263
263
 
264
- it "should not copy the metadata's owner, group, checksum and mode to the resource if they are already set" do
264
+ it "should not copy the metadata's owner, group, checksum, checksum_type, and mode to the resource if they are already set" do
265
265
  @resource[:owner] = 1
266
266
  @resource[:group] = 2
267
267
  @resource[:mode] = '173'
@@ -273,6 +273,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
273
273
  expect(@resource[:group]).to eq(2)
274
274
  expect(@resource[:mode]).to eq('173')
275
275
  expect(@resource[:content]).not_to eq(@metadata.checksum)
276
+ expect(@resource[:checksum]).not_to eq(@metadata.checksum_type.to_sym)
276
277
  end
277
278
 
278
279
  describe "and puppet is not running as root" do
@@ -398,67 +399,17 @@ describe Puppet::Type.type(:file).attrclass(:source) do
398
399
  expect(@resource[:mode]).to be_nil
399
400
  end
400
401
  end
401
-
402
- describe "on Windows when source_permissions is `use`" do
403
- before :each do
404
- Puppet.features.stubs(:microsoft_windows?).returns true
405
- @resource[:source_permissions] = "use"
406
- end
407
- let(:err_message) { "Copying owner/mode/group from the" <<
408
- " source file on Windows is not supported;" <<
409
- " use source_permissions => ignore." }
410
-
411
- it "should issue error when copying from remote sources" do
412
- @source.stubs(:local?).returns false
413
-
414
- expect { @source.copy_source_values }.to raise_error(err_message)
415
- end
416
-
417
- it "should issue error when copying from local sources" do
418
- @source.stubs(:local?).returns true
419
-
420
- expect { @source.copy_source_values }.to raise_error(err_message)
421
- end
422
-
423
- it "should issue error when copying metadata from remote sources if only user is unspecified" do
424
- @source.stubs(:local?).returns false
425
- @resource[:group] = 2
426
- @resource[:mode] = "0003"
427
-
428
- expect { @source.copy_source_values }.to raise_error(err_message)
429
- end
430
-
431
- it "should issue error when copying metadata from remote sources if only group is unspecified" do
432
- @source.stubs(:local?).returns false
433
- @resource[:owner] = 1
434
- @resource[:mode] = "0003"
435
-
436
- expect { @source.copy_source_values }.to raise_error(err_message)
437
- end
438
-
439
- it "should issue error when copying metadata from remote sources if only mode is unspecified" do
440
- @source.stubs(:local?).returns false
441
- @resource[:owner] = 1
442
- @resource[:group] = 2
443
-
444
- expect { @source.copy_source_values }.to raise_error(err_message)
445
- end
446
-
447
- it "should not issue error when copying metadata from remote sources if group, owner, and mode are all specified" do
448
- @source.stubs(:local?).returns false
449
- @resource[:owner] = 1
450
- @resource[:group] = 2
451
- @resource[:mode] = "0003"
452
-
453
- expect { @source.copy_source_values }.not_to raise_error
454
- end
455
- end
456
402
  end
457
403
 
458
404
  describe "and the source is a link" do
405
+ before do
406
+ Puppet.features.stubs(:microsoft_windows?).returns false
407
+ end
408
+
459
409
  it "should set the target to the link destination" do
460
410
  @metadata.stubs(:ftype).returns "link"
461
411
  @metadata.stubs(:links).returns "manage"
412
+ @metadata.stubs(:checksum_type).returns nil
462
413
  @resource.stubs(:[])
463
414
  @resource.stubs(:[]=)
464
415
 
@@ -471,7 +422,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
471
422
  end
472
423
 
473
424
  it "should have a local? method" do
474
- expect(source.new(:resource => @resource)).to be_respond_to(:local?)
425
+ expect(described_class.new(:resource => resource)).to be_respond_to(:local?)
475
426
  end
476
427
 
477
428
  context "when accessing source properties" do
@@ -520,45 +471,186 @@ describe Puppet::Type.type(:file).attrclass(:source) do
520
471
  end
521
472
  end
522
473
 
523
- describe "for remote sources" do
524
- let(:sourcepath) { "/path/to/source" }
525
- let(:uri) { URI::Generic.build(:scheme => 'puppet', :host => 'server', :port => 8192, :path => sourcepath).to_s }
474
+ %w{puppet http}.each do |scheme|
475
+ describe "for remote (#{scheme}) sources" do
476
+ let(:sourcepath) { "/path/to/source" }
477
+ let(:uri) { URI::Generic.build(:scheme => scheme, :host => 'server', :port => 8192, :path => sourcepath).to_s }
478
+
479
+ before(:each) do
480
+ metadata = Puppet::FileServing::Metadata.new(path, :source => uri, 'type' => 'file')
481
+ #metadata = stub('remote', :ftype => "file", :source => uri)
482
+ Puppet::FileServing::Metadata.indirection.stubs(:find).
483
+ with(uri,all_of(has_key(:environment), has_key(:links))).returns metadata
484
+ Puppet::FileServing::Metadata.indirection.stubs(:find).
485
+ with(uri,all_of(has_key(:environment), has_key(:links))).returns metadata
486
+ resource[:source] = uri
487
+ end
488
+
489
+ it "should not be local" do
490
+ expect(resource.parameter(:source)).not_to be_local
491
+ end
492
+
493
+ it "should be able to return the metadata source full path" do
494
+ expect(resource.parameter(:source).full_path).to eq("/path/to/source")
495
+ end
496
+
497
+ it "should be able to return the source server" do
498
+ expect(resource.parameter(:source).server).to eq("server")
499
+ end
500
+
501
+ it "should be able to return the source port" do
502
+ expect(resource.parameter(:source).port).to eq(8192)
503
+ end
504
+
505
+ if scheme == 'puppet'
506
+ describe "which don't specify server or port" do
507
+ let(:uri) { "puppet:///path/to/source" }
508
+
509
+ it "should return the default source server" do
510
+ Puppet[:server] = "myserver"
511
+ expect(resource.parameter(:source).server).to eq("myserver")
512
+ end
513
+
514
+ it "should return the default source port" do
515
+ Puppet[:masterport] = 1234
516
+ expect(resource.parameter(:source).port).to eq(1234)
517
+ end
518
+ end
519
+ end
520
+ end
521
+ end
522
+ end
523
+
524
+ describe "when writing" do
525
+ describe "as puppet apply" do
526
+ let(:source_content) { "source file content\r\n"*10 }
527
+ before do
528
+ Puppet[:default_file_terminus] = "file_server"
529
+ resource[:source] = file_containing('apply', source_content)
530
+ end
531
+
532
+ it "should copy content from the source to the file" do
533
+ source = resource.parameter(:source)
534
+ resource.write(source)
535
+
536
+ expect(Puppet::FileSystem.binread(filename)).to eq(source_content)
537
+ end
538
+
539
+ with_digest_algorithms do
540
+ it "should return the checksum computed" do
541
+ File.open(filename, 'wb') do |file|
542
+ source = resource.parameter(:source)
543
+ resource[:checksum] = digest_algorithm
544
+ expect(source.write(file)).to eq("{#{digest_algorithm}}#{digest(source_content)}")
545
+ end
546
+ end
547
+ end
548
+ end
549
+
550
+ describe "from local source" do
551
+ let(:source_content) { "source file content\r\n"*10 }
552
+ before do
553
+ resource[:backup] = false
554
+ resource[:source] = file_containing('source', source_content)
555
+ end
556
+
557
+ it "should copy content from the source to the file" do
558
+ source = resource.parameter(:source)
559
+ resource.write(source)
526
560
 
527
- before(:each) do
528
- metadata = Puppet::FileServing::Metadata.new(path, :source => uri, 'type' => 'file')
529
- #metadata = stub('remote', :ftype => "file", :source => uri)
530
- Puppet::FileServing::Metadata.indirection.stubs(:find).
531
- with(uri,all_of(has_key(:environment), has_key(:links))).returns metadata
532
- resource[:source] = uri
561
+ expect(Puppet::FileSystem.binread(filename)).to eq(source_content)
533
562
  end
534
563
 
535
- it "should not be local" do
536
- expect(resource.parameter(:source)).not_to be_local
564
+ with_digest_algorithms do
565
+ it "should return the checksum computed" do
566
+ File.open(filename, 'wb') do |file|
567
+ source = resource.parameter(:source)
568
+ resource[:checksum] = digest_algorithm
569
+ expect(source.write(file)).to eq("{#{digest_algorithm}}#{digest(source_content)}")
570
+ end
571
+ end
537
572
  end
573
+ end
574
+
575
+ describe 'from remote source' do
576
+ let(:source_content) { "source file content\n"*10 }
577
+ let(:source) { resource.newattr(:source) }
578
+ let(:response) { stub_everything('response') }
579
+ let(:conn) { mock('connection') }
580
+
581
+ before do
582
+ resource[:backup] = false
538
583
 
539
- it "should be able to return the metadata source full path" do
540
- expect(resource.parameter(:source).full_path).to eq("/path/to/source")
584
+ response.stubs(:read_body).multiple_yields(*source_content.lines)
585
+ conn.stubs(:request_get).yields(response)
541
586
  end
542
587
 
543
- it "should be able to return the source server" do
544
- expect(resource.parameter(:source).server).to eq("server")
588
+ it 'should use an explicit fileserver if source starts with puppet://' do
589
+ response.stubs(:code).returns('200')
590
+ source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet://somehostname/test/foo', :ftype => 'file')
591
+ Puppet::Network::HttpPool.expects(:http_instance).with('somehostname', anything).returns(conn)
592
+
593
+ resource.write(source)
545
594
  end
546
595
 
547
- it "should be able to return the source port" do
548
- expect(resource.parameter(:source).port).to eq(8192)
596
+ it 'should use the default fileserver if source starts with puppet:///' do
597
+ response.stubs(:code).returns('200')
598
+ source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet:///test/foo', :ftype => 'file')
599
+ Puppet::Network::HttpPool.expects(:http_instance).with(Puppet.settings[:server], anything).returns(conn)
600
+
601
+ resource.write(source)
549
602
  end
550
603
 
551
- describe "which don't specify server or port" do
552
- let(:uri) { "puppet:///path/to/source" }
604
+ it 'should percent encode reserved characters' do
605
+ response.stubs(:code).returns('200')
606
+ Puppet::Network::HttpPool.stubs(:http_instance).returns(conn)
607
+ source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet:///test/foo bar', :ftype => 'file')
608
+
609
+ conn.unstub(:request_get)
610
+ conn.expects(:request_get).with("#{Puppet::Network::HTTP::MASTER_URL_PREFIX}/v3/file_content/test/foo%20bar?environment=myenv&", anything).yields(response)
553
611
 
554
- it "should return the default source server" do
555
- Puppet[:server] = "myserver"
556
- expect(resource.parameter(:source).server).to eq("myserver")
612
+ resource.write(source)
613
+ end
614
+
615
+ describe 'when handling file_content responses' do
616
+ before do
617
+ File.open(filename, 'w') {|f| f.write "initial file content"}
557
618
  end
558
619
 
559
- it "should return the default source port" do
560
- Puppet[:masterport] = 1234
561
- expect(resource.parameter(:source).port).to eq(1234)
620
+ before(:each) do
621
+ Puppet::Network::HttpPool.stubs(:http_instance).returns(conn)
622
+ source.stubs(:metadata).returns stub_everything('metadata', :source => 'puppet:///test/foo', :ftype => 'file')
623
+ end
624
+
625
+ it 'should not write anything if source is not found' do
626
+ response.stubs(:code).returns('404')
627
+
628
+ expect { resource.write(source) }.to raise_error(Net::HTTPError, /404/)
629
+ expect(File.read(filename)).to eq('initial file content')
630
+ end
631
+
632
+ it 'should raise an HTTP error in case of server error' do
633
+ response.stubs(:code).returns('500')
634
+
635
+ expect { resource.write(source) }.to raise_error(Net::HTTPError, /500/)
636
+ end
637
+
638
+ context 'and the request was successful' do
639
+ before(:each) { response.stubs(:code).returns '200' }
640
+
641
+ it 'should write the contents to the file' do
642
+ resource.write(source)
643
+ expect(Puppet::FileSystem.binread(filename)).to eq(source_content)
644
+ end
645
+
646
+ with_digest_algorithms do
647
+ it 'should return the checksum computed' do
648
+ File.open(filename, 'w') do |file|
649
+ resource[:checksum] = digest_algorithm
650
+ expect(source.write(file)).to eq("{#{digest_algorithm}}#{digest(source_content)}")
651
+ end
652
+ end
653
+ end
562
654
  end
563
655
  end
564
656
  end