puppet 4.3.2 → 4.4.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 (487) hide show
  1. checksums.yaml +4 -4
  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/debian/README.source +1 -1
  9. data/ext/debian/control +1 -1
  10. data/ext/debian/copyright +4 -4
  11. data/ext/debian/puppetmaster.README.debian +11 -9
  12. data/ext/emacs/puppet-mode.el +1 -1
  13. data/ext/envpuppet +2 -2
  14. data/ext/ips/puppetagent.xml +1 -1
  15. data/ext/ips/puppetmaster.xml +1 -1
  16. data/ext/project_data.yaml +8 -0
  17. data/ext/puppet-test +3 -3
  18. data/ext/rack/example-passenger-vhost.conf +1 -1
  19. data/ext/redhat/puppet.spec.erb +2 -2
  20. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  21. data/ext/solaris/pkginfo +1 -1
  22. data/ext/solaris/smf/puppet.xml +1 -1
  23. data/ext/suse/puppet.spec +2 -2
  24. data/ext/upload_facts.rb +1 -1
  25. data/ext/windows/puppet_interactive.bat +6 -0
  26. data/ext/windows/puppet_shell.bat +9 -0
  27. data/ext/windows/run_puppet_interactive.bat +9 -0
  28. data/ext/yaml_nodes.rb +1 -1
  29. data/install.rb +30 -20
  30. data/lib/puppet/agent.rb +1 -1
  31. data/lib/puppet/application/agent.rb +4 -2
  32. data/lib/puppet/application/apply.rb +7 -4
  33. data/lib/puppet/application/cert.rb +1 -1
  34. data/lib/puppet/application/device.rb +1 -1
  35. data/lib/puppet/application/filebucket.rb +1 -1
  36. data/lib/puppet/application/inspect.rb +1 -1
  37. data/lib/puppet/application/lookup.rb +4 -4
  38. data/lib/puppet/application/master.rb +2 -2
  39. data/lib/puppet/application/resource.rb +1 -1
  40. data/lib/puppet/configurer.rb +100 -22
  41. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  42. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  43. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  44. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  45. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  46. data/lib/puppet/defaults.rb +65 -19
  47. data/lib/puppet/environments.rb +3 -1
  48. data/lib/puppet/face/config.rb +1 -1
  49. data/lib/puppet/face/epp.rb +1 -1
  50. data/lib/puppet/face/help/man.erb +1 -1
  51. data/lib/puppet/face/module/install.rb +6 -6
  52. data/lib/puppet/face/parser.rb +12 -9
  53. data/lib/puppet/face/status.rb +2 -1
  54. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  55. data/lib/puppet/feature/telnet.rb +9 -0
  56. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  57. data/lib/puppet/file_serving/metadata.rb +18 -2
  58. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  59. data/lib/puppet/file_system.rb +2 -2
  60. data/lib/puppet/file_system/file_impl.rb +2 -2
  61. data/lib/puppet/file_system/memory_impl.rb +1 -1
  62. data/lib/puppet/file_system/uniquefile.rb +1 -1
  63. data/lib/puppet/forge.rb +1 -1
  64. data/lib/puppet/forge/repository.rb +1 -31
  65. data/lib/puppet/functions.rb +45 -6
  66. data/lib/puppet/functions/assert_type.rb +9 -9
  67. data/lib/puppet/functions/each.rb +5 -13
  68. data/lib/puppet/functions/filter.rb +5 -14
  69. data/lib/puppet/functions/map.rb +6 -14
  70. data/lib/puppet/functions/reduce.rb +5 -13
  71. data/lib/puppet/functions/reverse_each.rb +82 -0
  72. data/lib/puppet/functions/scanf.rb +15 -18
  73. data/lib/puppet/functions/slice.rb +22 -36
  74. data/lib/puppet/functions/split.rb +2 -2
  75. data/lib/puppet/functions/step.rb +88 -0
  76. data/lib/puppet/functions/type.rb +70 -0
  77. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  78. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  79. data/lib/puppet/indirector/file_content/http.rb +15 -0
  80. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  81. data/lib/puppet/indirector/generic_http.rb +16 -0
  82. data/lib/puppet/indirector/node/exec.rb +1 -1
  83. data/lib/puppet/indirector/node/ldap.rb +1 -1
  84. data/lib/puppet/indirector/rest.rb +2 -1
  85. data/lib/puppet/info_service/class_information_service.rb +13 -12
  86. data/lib/puppet/loaders.rb +1 -0
  87. data/lib/puppet/module.rb +3 -0
  88. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  89. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  90. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  91. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  92. data/lib/puppet/network/http/pool.rb +9 -0
  93. data/lib/puppet/node.rb +1 -1
  94. data/lib/puppet/node/environment.rb +11 -2
  95. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  96. data/lib/puppet/parser/compiler.rb +3 -3
  97. data/lib/puppet/parser/environment_compiler.rb +0 -1
  98. data/lib/puppet/parser/functions.rb +28 -16
  99. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  100. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  101. data/lib/puppet/parser/functions/map.rb +1 -1
  102. data/lib/puppet/parser/functions/scanf.rb +15 -26
  103. data/lib/puppet/parser/functions/slice.rb +17 -24
  104. data/lib/puppet/parser/functions/split.rb +1 -1
  105. data/lib/puppet/parser/resource.rb +19 -17
  106. data/lib/puppet/parser/scope.rb +176 -5
  107. data/lib/puppet/plugins/data_providers/data_provider.rb +54 -13
  108. data/lib/puppet/pops.rb +0 -8
  109. data/lib/puppet/pops/adaptable.rb +4 -1
  110. data/lib/puppet/pops/adapters.rb +38 -13
  111. data/lib/puppet/pops/binder/binder.rb +21 -17
  112. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  113. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  114. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  115. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  116. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  117. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  118. data/lib/puppet/pops/binder/injector.rb +53 -48
  119. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  120. data/lib/puppet/pops/binder/producers.rb +67 -62
  121. data/lib/puppet/pops/evaluator/access_operator.rb +95 -93
  122. data/lib/puppet/pops/evaluator/closure.rb +84 -68
  123. data/lib/puppet/pops/evaluator/collector_transformer.rb +18 -14
  124. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  125. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  126. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  127. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  128. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  129. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  130. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  131. data/lib/puppet/pops/evaluator/runtime3_support.rb +41 -45
  132. data/lib/puppet/pops/issue_reporter.rb +6 -4
  133. data/lib/puppet/pops/issues.rb +34 -11
  134. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  135. data/lib/puppet/pops/loader/loader.rb +1 -1
  136. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  137. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  138. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +16 -12
  139. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  140. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  141. data/lib/puppet/pops/loaders.rb +51 -9
  142. data/lib/puppet/pops/lookup.rb +14 -12
  143. data/lib/puppet/pops/merge_strategy.rb +16 -19
  144. data/lib/puppet/pops/model/factory.rb +26 -2
  145. data/lib/puppet/pops/model/model.rb +8 -8
  146. data/lib/puppet/pops/model/model_label_provider.rb +13 -7
  147. data/lib/puppet/pops/model/model_meta.rb +17 -0
  148. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  149. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  150. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  151. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  152. data/lib/puppet/pops/parser/evaluating_parser.rb +14 -10
  153. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  154. data/lib/puppet/pops/parser/lexer2.rb +26 -19
  155. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  156. data/lib/puppet/pops/parser/locator.rb +21 -0
  157. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  158. data/lib/puppet/pops/parser/slurp_support.rb +11 -7
  159. data/lib/puppet/pops/types/class_loader.rb +23 -19
  160. data/lib/puppet/pops/types/enumeration.rb +9 -26
  161. data/lib/puppet/pops/types/iterable.rb +308 -0
  162. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  163. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  164. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  165. data/lib/puppet/pops/types/type_calculator.rb +138 -381
  166. data/lib/puppet/pops/types/type_factory.rb +91 -57
  167. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  168. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  169. data/lib/puppet/pops/types/type_parser.rb +159 -112
  170. data/lib/puppet/pops/types/types.rb +2057 -1247
  171. data/lib/puppet/pops/utils.rb +11 -10
  172. data/lib/puppet/pops/validation.rb +11 -9
  173. data/lib/puppet/pops/validation/checker4_0.rb +83 -55
  174. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  175. data/lib/puppet/provider/aixobject.rb +1 -1
  176. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  177. data/lib/puppet/provider/cron/crontab.rb +1 -1
  178. data/lib/puppet/provider/exec/windows.rb +1 -1
  179. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  180. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  181. data/lib/puppet/provider/package/appdmg.rb +3 -2
  182. data/lib/puppet/provider/package/dnf.rb +1 -1
  183. data/lib/puppet/provider/package/pip.rb +5 -8
  184. data/lib/puppet/provider/package/pip3.rb +1 -1
  185. data/lib/puppet/provider/package/pkg.rb +1 -1
  186. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  187. data/lib/puppet/provider/package/pkgng.rb +13 -4
  188. data/lib/puppet/provider/package/windows.rb +1 -1
  189. data/lib/puppet/provider/package/yum.rb +1 -1
  190. data/lib/puppet/provider/package/zypper.rb +19 -0
  191. data/lib/puppet/provider/service/debian.rb +2 -2
  192. data/lib/puppet/provider/service/launchd.rb +6 -18
  193. data/lib/puppet/provider/service/systemd.rb +9 -2
  194. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  195. data/lib/puppet/provider/user/aix.rb +1 -1
  196. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  197. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  198. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  199. data/lib/puppet/reference/configuration.rb +1 -1
  200. data/lib/puppet/reference/providers.rb +1 -1
  201. data/lib/puppet/resource.rb +15 -12
  202. data/lib/puppet/resource/capability_finder.rb +20 -13
  203. data/lib/puppet/resource/catalog.rb +60 -3
  204. data/lib/puppet/resource/status.rb +11 -2
  205. data/lib/puppet/resource/type.rb +28 -38
  206. data/lib/puppet/settings.rb +1 -1
  207. data/lib/puppet/settings/config_file.rb +1 -1
  208. data/lib/puppet/settings/environment_conf.rb +13 -5
  209. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  210. data/lib/puppet/ssl/certificate_request.rb +4 -4
  211. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  212. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  213. data/lib/puppet/test/test_helper.rb +16 -4
  214. data/lib/puppet/transaction.rb +15 -2
  215. data/lib/puppet/transaction/additional_resource_generator.rb +6 -2
  216. data/lib/puppet/transaction/report.rb +31 -1
  217. data/lib/puppet/transaction/resource_harness.rb +0 -25
  218. data/lib/puppet/type.rb +11 -11
  219. data/lib/puppet/type/augeas.rb +1 -1
  220. data/lib/puppet/type/cron.rb +12 -12
  221. data/lib/puppet/type/file.rb +91 -39
  222. data/lib/puppet/type/file/checksum_value.rb +53 -0
  223. data/lib/puppet/type/file/content.rb +26 -111
  224. data/lib/puppet/type/file/data_sync.rb +84 -0
  225. data/lib/puppet/type/file/ensure.rb +17 -14
  226. data/lib/puppet/type/file/selcontext.rb +1 -1
  227. data/lib/puppet/type/file/source.rb +103 -18
  228. data/lib/puppet/type/filebucket.rb +1 -1
  229. data/lib/puppet/type/interface.rb +8 -3
  230. data/lib/puppet/type/macauthorization.rb +1 -1
  231. data/lib/puppet/type/package.rb +6 -0
  232. data/lib/puppet/type/schedule.rb +1 -1
  233. data/lib/puppet/type/stage.rb +1 -1
  234. data/lib/puppet/type/user.rb +19 -17
  235. data/lib/puppet/type/yumrepo.rb +20 -0
  236. data/lib/puppet/util.rb +109 -22
  237. data/lib/puppet/util/autoload.rb +16 -11
  238. data/lib/puppet/util/checksums.rb +74 -31
  239. data/lib/puppet/util/execution.rb +1 -1
  240. data/lib/puppet/util/http_proxy.rb +72 -0
  241. data/lib/puppet/util/log.rb +2 -0
  242. data/lib/puppet/util/logging.rb +43 -1
  243. data/lib/puppet/util/monkey_patches.rb +2 -2
  244. data/lib/puppet/util/multi_match.rb +51 -0
  245. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  246. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  247. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  248. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  249. data/lib/puppet/util/plist.rb +130 -0
  250. data/lib/puppet/util/resource_template.rb +1 -1
  251. data/lib/puppet/util/run_mode.rb +2 -2
  252. data/lib/puppet/util/skip_tags.rb +9 -0
  253. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  254. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  255. data/lib/puppet/util/windows/adsi.rb +4 -4
  256. data/lib/puppet/util/windows/api_types.rb +24 -18
  257. data/lib/puppet/util/windows/com.rb +3 -3
  258. data/lib/puppet/util/windows/error.rb +1 -1
  259. data/lib/puppet/util/windows/file.rb +8 -8
  260. data/lib/puppet/util/windows/principal.rb +23 -14
  261. data/lib/puppet/util/windows/process.rb +78 -11
  262. data/lib/puppet/util/windows/registry.rb +1 -1
  263. data/lib/puppet/util/windows/root_certs.rb +5 -5
  264. data/lib/puppet/util/windows/security.rb +33 -35
  265. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  266. data/lib/puppet/util/windows/sid.rb +42 -4
  267. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  268. data/lib/puppet/util/windows/user.rb +10 -10
  269. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  270. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  271. data/lib/puppet/vendor/pathspec/README.md +1 -1
  272. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  273. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  274. data/lib/puppet/version.rb +1 -1
  275. data/lib/semver.rb +17 -1
  276. data/man/man5/puppet.conf.5 +12 -12
  277. data/man/man8/extlookup2hiera.8 +1 -1
  278. data/man/man8/puppet-agent.8 +2 -2
  279. data/man/man8/puppet-apply.8 +2 -2
  280. data/man/man8/puppet-ca.8 +2 -2
  281. data/man/man8/puppet-catalog.8 +2 -2
  282. data/man/man8/puppet-cert.8 +2 -2
  283. data/man/man8/puppet-certificate.8 +2 -2
  284. data/man/man8/puppet-certificate_request.8 +2 -2
  285. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  286. data/man/man8/puppet-config.8 +3 -3
  287. data/man/man8/puppet-describe.8 +1 -1
  288. data/man/man8/puppet-device.8 +1 -1
  289. data/man/man8/puppet-doc.8 +1 -1
  290. data/man/man8/puppet-epp.8 +2 -2
  291. data/man/man8/puppet-facts.8 +2 -2
  292. data/man/man8/puppet-file.8 +2 -2
  293. data/man/man8/puppet-filebucket.8 +2 -2
  294. data/man/man8/puppet-help.8 +2 -2
  295. data/man/man8/puppet-inspect.8 +2 -2
  296. data/man/man8/puppet-key.8 +2 -2
  297. data/man/man8/puppet-man.8 +2 -2
  298. data/man/man8/puppet-master.8 +2 -2
  299. data/man/man8/puppet-module.8 +9 -9
  300. data/man/man8/puppet-node.8 +2 -2
  301. data/man/man8/puppet-parser.8 +2 -2
  302. data/man/man8/puppet-plugin.8 +2 -2
  303. data/man/man8/puppet-report.8 +2 -2
  304. data/man/man8/puppet-resource.8 +2 -2
  305. data/man/man8/puppet-resource_type.8 +2 -2
  306. data/man/man8/puppet-status.8 +3 -3
  307. data/man/man8/puppet.8 +1 -1
  308. data/spec/fixtures/module.tar.gz +0 -0
  309. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  310. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  311. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  312. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  313. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  314. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  315. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  316. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  317. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  318. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  319. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  320. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  321. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +3 -1
  322. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  323. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  324. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  325. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  326. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  327. 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
  328. 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
  329. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  330. 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
  331. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  332. 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
  333. 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
  334. data/spec/integration/defaults_spec.rb +14 -2
  335. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  336. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  337. data/spec/integration/node/environment_spec.rb +13 -0
  338. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  339. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  340. data/spec/integration/parser/undef_param_spec.rb +8 -0
  341. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  342. data/spec/integration/test/test_helper_spec.rb +28 -0
  343. data/spec/integration/transaction/report_spec.rb +16 -0
  344. data/spec/integration/transaction_spec.rb +11 -0
  345. data/spec/integration/type/file_spec.rb +194 -4
  346. data/spec/integration/type/package_spec.rb +5 -1
  347. data/spec/integration/type/tidy_spec.rb +21 -9
  348. data/spec/integration/util/execution_spec.rb +22 -0
  349. data/spec/integration/util/windows/principal_spec.rb +90 -4
  350. data/spec/integration/util/windows/process_spec.rb +31 -0
  351. data/spec/integration/util/windows/security_spec.rb +6 -6
  352. data/spec/integration/util/windows/user_spec.rb +1 -1
  353. data/spec/integration/util_spec.rb +49 -27
  354. data/spec/lib/puppet_spec/compiler.rb +17 -0
  355. data/spec/lib/puppet_spec/files.rb +2 -2
  356. data/spec/lib/puppet_spec/pops.rb +13 -0
  357. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  358. data/spec/shared_contexts/types_setup.rb +96 -0
  359. data/spec/unit/agent_spec.rb +1 -0
  360. data/spec/unit/application/agent_spec.rb +10 -0
  361. data/spec/unit/application/apply_spec.rb +9 -0
  362. data/spec/unit/configurer/downloader_spec.rb +5 -5
  363. data/spec/unit/configurer_spec.rb +271 -39
  364. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  365. data/spec/unit/defaults_spec.rb +15 -0
  366. data/spec/unit/environments_spec.rb +24 -4
  367. data/spec/unit/face/parser_spec.rb +43 -2
  368. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  369. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  370. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  371. data/spec/unit/file_system_spec.rb +26 -0
  372. data/spec/unit/functions/assert_type_spec.rb +36 -2
  373. data/spec/unit/functions/defined_spec.rb +2 -2
  374. data/spec/unit/functions/epp_spec.rb +11 -3
  375. data/spec/unit/functions/lookup_spec.rb +58 -13
  376. data/spec/unit/functions/regsubst_spec.rb +1 -1
  377. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  378. data/spec/unit/functions/step_spec.rb +113 -0
  379. data/spec/unit/functions/type_spec.rb +35 -0
  380. data/spec/unit/functions4_spec.rb +61 -5
  381. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  382. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  383. data/spec/unit/indirector/indirection_spec.rb +1 -1
  384. data/spec/unit/info_service_spec.rb +94 -32
  385. data/spec/unit/module_spec.rb +14 -0
  386. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  387. data/spec/unit/network/authstore_spec.rb +1 -1
  388. data/spec/unit/network/http/connection_spec.rb +1 -0
  389. data/spec/unit/network/http/pool_spec.rb +30 -0
  390. data/spec/unit/node_spec.rb +1 -1
  391. data/spec/unit/parser/compiler_spec.rb +16 -0
  392. data/spec/unit/parser/scope_spec.rb +28 -11
  393. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  394. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  395. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +7 -1
  396. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  397. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  398. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  399. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  400. data/spec/unit/pops/loaders/loaders_spec.rb +44 -1
  401. data/spec/unit/pops/parser/lexer2_spec.rb +112 -3
  402. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  403. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  404. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  405. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  406. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  407. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  408. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  409. data/spec/unit/pops/types/type_calculator_spec.rb +275 -373
  410. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  411. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  412. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  413. data/spec/unit/pops/types/types_spec.rb +241 -0
  414. data/spec/unit/pops/validator/validator_spec.rb +100 -43
  415. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  416. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  417. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  418. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  419. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  420. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  421. data/spec/unit/provider/package/pip_spec.rb +47 -34
  422. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  423. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  424. data/spec/unit/provider/package/yum_spec.rb +11 -0
  425. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  426. data/spec/unit/provider/service/launchd_spec.rb +17 -35
  427. data/spec/unit/provider/service/systemd_spec.rb +7 -0
  428. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  429. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  430. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  431. data/spec/unit/resource/catalog_spec.rb +33 -1
  432. data/spec/unit/resource/type_spec.rb +149 -7
  433. data/spec/unit/resource_spec.rb +96 -57
  434. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  435. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  436. data/spec/unit/transaction/report_spec.rb +27 -0
  437. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  438. data/spec/unit/transaction_spec.rb +5 -0
  439. data/spec/unit/type/file/checksum_spec.rb +6 -0
  440. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  441. data/spec/unit/type/file/content_spec.rb +12 -193
  442. data/spec/unit/type/file/source_spec.rb +211 -119
  443. data/spec/unit/type/file_spec.rb +133 -34
  444. data/spec/unit/type/interface_spec.rb +32 -0
  445. data/spec/unit/type/macauthorization_spec.rb +4 -1
  446. data/spec/unit/type/yumrepo_spec.rb +2 -2
  447. data/spec/unit/util/filetype_spec.rb +1 -1
  448. data/spec/unit/util/http_proxy_spec.rb +2 -2
  449. data/spec/unit/util/log/destinations_spec.rb +0 -2
  450. data/spec/unit/util/logging_spec.rb +69 -0
  451. data/spec/unit/util/multi_match_spec.rb +39 -0
  452. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  453. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  454. data/spec/unit/util/plist_spec.rb +110 -0
  455. data/spec/unit/util/resource_template_spec.rb +2 -2
  456. data/spec/unit/util/run_mode_spec.rb +27 -3
  457. data/spec/unit/util/windows/adsi_spec.rb +4 -4
  458. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  459. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  460. data/spec/unit/util/windows/sid_spec.rb +1 -1
  461. data/spec/unit/util_spec.rb +123 -13
  462. data/tasks/cfpropertylist.rake +15 -0
  463. metadata +114 -26
  464. data/lib/puppet/vendor/load_plist.rb +0 -1
  465. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  466. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  467. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  468. data/lib/puppet/vendor/plist/README +0 -36
  469. data/lib/puppet/vendor/plist/Rakefile +0 -144
  470. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  471. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  472. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  473. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  474. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  475. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  476. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  477. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  478. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  479. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  480. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  481. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  482. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  483. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  484. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  485. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  486. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  487. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
@@ -39,6 +39,19 @@ describe Puppet::Settings::EnvironmentConf do
39
39
  expect(envconf.environment_timeout).to eq(180)
40
40
  end
41
41
 
42
+ it "reads a static_catalogs from config" do
43
+ setup_environment_conf(config, :static_catalogs => true)
44
+
45
+ expect(envconf.static_catalogs).to eq(true)
46
+ end
47
+
48
+ it "can retrieve untruthy settings" do
49
+ Puppet[:static_catalogs] = true
50
+ setup_environment_conf(config, :static_catalogs => false)
51
+
52
+ expect(envconf.static_catalogs).to eq(false)
53
+ end
54
+
42
55
  it "can retrieve raw settings" do
43
56
  setup_environment_conf(config, :manifest => 'manifest.pp')
44
57
 
@@ -64,10 +77,14 @@ describe Puppet::Settings::EnvironmentConf do
64
77
  expect(envconf.config_version).to be_nil
65
78
  end
66
79
 
67
- it "returns a defult of 0 for environment_timeout when config has none" do
80
+ it "returns a default of 0 for environment_timeout when config has none" do
68
81
  expect(envconf.environment_timeout).to eq(0)
69
82
  end
70
83
 
84
+ it "returns default of true for static_catalogs when config has none" do
85
+ expect(envconf.static_catalogs).to eq(true)
86
+ end
87
+
71
88
  it "can still retrieve raw setting" do
72
89
  expect(envconf.raw_setting(:manifest)).to be_nil
73
90
  end
@@ -105,14 +105,14 @@ describe Puppet::SSL::CertificateRevocationList do
105
105
  end
106
106
 
107
107
  it "returns the last update time in UTC" do
108
- # http://tools.ietf.org/html/rfc5280#section-5.1.2.4
108
+ # https://tools.ietf.org/html/rfc5280#section-5.1.2.4
109
109
  thisUpdate = @crl.generate(@cert, @key).last_update
110
110
  expect(thisUpdate).to be_utc
111
111
  expects_time_close_to_now(thisUpdate)
112
112
  end
113
113
 
114
114
  it "returns the next update time in UTC 5 years from now" do
115
- # http://tools.ietf.org/html/rfc5280#section-5.1.2.5
115
+ # https://tools.ietf.org/html/rfc5280#section-5.1.2.5
116
116
  nextUpdate = @crl.generate(@cert, @key).next_update
117
117
  expect(nextUpdate).to be_utc
118
118
  expects_time_close_to_five_years(nextUpdate)
@@ -179,7 +179,7 @@ describe Puppet::SSL::CertificateRevocationList do
179
179
  end
180
180
 
181
181
  it "adds a non-critical CRL reason specifying key compromise by default" do
182
- # http://tools.ietf.org/html/rfc5280#section-5.3.1
182
+ # https://tools.ietf.org/html/rfc5280#section-5.3.1
183
183
  serial = 1
184
184
  @crl.revoke(serial, @key)
185
185
 
@@ -52,6 +52,24 @@ describe Puppet::Transaction::Report do
52
52
  expect(report.transaction_uuid).to eq("some transaction uuid")
53
53
  end
54
54
 
55
+ it "should be able to set code_id" do
56
+ report = Puppet::Transaction::Report.new("inspect")
57
+ report.code_id = "some code id"
58
+ expect(report.code_id).to eq("some code id")
59
+ end
60
+
61
+ it "should be able to set catalog_uuid" do
62
+ report = Puppet::Transaction::Report.new("inspect")
63
+ report.catalog_uuid = "some catalog uuid"
64
+ expect(report.catalog_uuid).to eq("some catalog uuid")
65
+ end
66
+
67
+ it "should be able to set cached_catalog_status" do
68
+ report = Puppet::Transaction::Report.new("inspect")
69
+ report.cached_catalog_status = "explicitly_requested"
70
+ expect(report.cached_catalog_status).to eq("explicitly_requested")
71
+ end
72
+
55
73
  it "should take 'environment' as an argument" do
56
74
  expect(Puppet::Transaction::Report.new("inspect", "some configuration version", "some environment").environment).to eq("some environment")
57
75
  end
@@ -419,6 +437,9 @@ describe Puppet::Transaction::Report do
419
437
  expect(tripped.time.to_i).to eq(report.time.to_i)
420
438
  expect(tripped.configuration_version).to eq(report.configuration_version)
421
439
  expect(tripped.transaction_uuid).to eq(report.transaction_uuid)
440
+ expect(tripped.code_id).to eq(report.code_id)
441
+ expect(tripped.catalog_uuid).to eq(report.catalog_uuid)
442
+ expect(tripped.cached_catalog_status).to eq(report.cached_catalog_status)
422
443
  expect(tripped.report_format).to eq(report.report_format)
423
444
  expect(tripped.puppet_version).to eq(report.puppet_version)
424
445
  expect(tripped.kind).to eq(report.kind)
@@ -485,6 +506,9 @@ describe Puppet::Transaction::Report do
485
506
  report = Puppet::Transaction::Report.new('apply', 1357986, 'test_environment', "df34516e-4050-402d-a166-05b03b940749")
486
507
  report << Puppet::Util::Log.new(:level => :warning, :message => "log message")
487
508
  report.add_times("timing", 4)
509
+ report.code_id = "some code id"
510
+ report.catalog_uuid = "some catalog uuid"
511
+ report.cached_catalog_status = "not_used"
488
512
  report.add_resource_status(status)
489
513
  report.finalize_report
490
514
  report
@@ -498,6 +522,9 @@ describe Puppet::Transaction::Report do
498
522
  report = Puppet::Transaction::Report.new('apply', 1357986, 'test_environment', "df34516e-4050-402d-a166-05b03b940749")
499
523
  report << Puppet::Util::Log.new(:level => :warning, :message => "log message")
500
524
  report.add_times("timing", 4)
525
+ report.code_id = "some code id"
526
+ report.catalog_uuid = "some catalog uuid"
527
+ report.cached_catalog_status = "not_used"
501
528
  report.add_resource_status(status)
502
529
  report.finalize_report
503
530
  report
@@ -418,53 +418,6 @@ describe Puppet::Transaction::ResourceHarness do
418
418
  end
419
419
  end
420
420
 
421
- describe "when applying changes" do
422
- it "should not apply changes if allow_changes?() returns false" do
423
- test_file = tmpfile('foo')
424
- resource = Puppet::Type.type(:file).new :path => test_file, :backup => false, :ensure => :file
425
- resource.expects(:err).never # make sure no exceptions get swallowed
426
- @harness.expects(:allow_changes?).with(resource).returns false
427
- status = @harness.evaluate(resource)
428
- expect(Puppet::FileSystem.exist?(test_file)).to eq(false)
429
- end
430
- end
431
-
432
- describe "when determining whether the resource can be changed" do
433
- before do
434
- @resource.stubs(:purging?).returns true
435
- @resource.stubs(:deleting?).returns true
436
- end
437
-
438
- it "should be true if the resource is not being purged" do
439
- @resource.expects(:purging?).returns false
440
- expect(@harness).to be_allow_changes(@resource)
441
- end
442
-
443
- it "should be true if the resource is not being deleted" do
444
- @resource.expects(:deleting?).returns false
445
- expect(@harness).to be_allow_changes(@resource)
446
- end
447
-
448
- it "should be true if the resource has no dependents" do
449
- @harness.relationship_graph.expects(:dependents).with(@resource).returns []
450
- expect(@harness).to be_allow_changes(@resource)
451
- end
452
-
453
- it "should be true if all dependents are being deleted" do
454
- dep = stub 'dependent', :deleting? => true
455
- @harness.relationship_graph.expects(:dependents).with(@resource).returns [dep]
456
- @resource.expects(:purging?).returns true
457
- expect(@harness).to be_allow_changes(@resource)
458
- end
459
-
460
- it "should be false if the resource's dependents are not being deleted" do
461
- dep = stub 'dependent', :deleting? => false, :ref => "myres"
462
- @resource.expects(:warning)
463
- @harness.relationship_graph.expects(:dependents).with(@resource).returns [dep]
464
- expect(@harness).not_to be_allow_changes(@resource)
465
- end
466
- end
467
-
468
421
  describe "when finding the schedule" do
469
422
  before do
470
423
  @catalog = Puppet::Resource::Catalog.new
@@ -365,6 +365,11 @@ describe Puppet::Transaction do
365
365
  expect(@transaction).to be_skip(@resource)
366
366
  end
367
367
 
368
+ it "should skip resources tagged with the skip tags" do
369
+ @transaction.stubs(:skip_tags?).returns(true)
370
+ expect(@transaction).to be_skip(@resource)
371
+ end
372
+
368
373
  it "should skip unscheduled resources" do
369
374
  @transaction.stubs(:scheduled?).returns(false)
370
375
  expect(@transaction).to be_skip(@resource)
@@ -76,4 +76,10 @@ describe checksum do
76
76
  expect(sum).to eq("something")
77
77
  end
78
78
  end
79
+
80
+ it 'should use values allowed by the supported_checksum_types setting' do
81
+ values = checksum.value_collection.values.reject {|v| v == :none}.map {|v| v.to_s}
82
+ Puppet.settings[:supported_checksum_types] = values
83
+ expect(Puppet.settings[:supported_checksum_types]).to eq(values)
84
+ end
79
85
  end
@@ -0,0 +1,286 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+
4
+ describe Puppet::Type.type(:file).attrclass(:checksum_value), :uses_checksums => true do
5
+ include PuppetSpec::Files
6
+ include_context 'with supported checksum types'
7
+
8
+ let(:path) { tmpfile('foo_bar') }
9
+ let(:source_file) { file_containing('temp_foo', 'nothing at all') }
10
+ let(:environment) { Puppet::Node::Environment.create(:testing, []) }
11
+ let(:catalog) { Puppet::Resource::Catalog.new(:test, environment) }
12
+ let(:resource) { Puppet::Type.type(:file).new(:path => path, :catalog => catalog) }
13
+
14
+ it "should be a property" do
15
+ expect(described_class.superclass).to eq(Puppet::Property)
16
+ end
17
+
18
+ describe "when retrieving the current checksum_value" do
19
+ let(:checksum_value) { described_class.new(:resource => resource) }
20
+
21
+ it "should not compute a checksum if source is absent" do
22
+ resource.expects(:stat).never
23
+ expect(checksum_value.retrieve).to be_nil
24
+ end
25
+
26
+ describe "when using a source" do
27
+ before do
28
+ resource[:source] = source_file
29
+ end
30
+
31
+ it "should return :absent if the target does not exist" do
32
+ resource.expects(:stat).returns nil
33
+
34
+ expect(checksum_value.retrieve).to eq(:absent)
35
+ end
36
+
37
+ it "should not manage content on directories" do
38
+ stat = mock 'stat', :ftype => "directory"
39
+ resource.expects(:stat).returns stat
40
+
41
+ expect(checksum_value.retrieve).to be_nil
42
+ end
43
+
44
+ it "should not manage content on links" do
45
+ stat = mock 'stat', :ftype => "link"
46
+ resource.expects(:stat).returns stat
47
+
48
+ expect(checksum_value.retrieve).to be_nil
49
+ end
50
+
51
+ it "should always return the checksum as a string" do
52
+ resource[:checksum] = :mtime
53
+
54
+ stat = mock 'stat', :ftype => "file"
55
+ resource.expects(:stat).returns stat
56
+
57
+ time = Time.now
58
+ resource.parameter(:checksum).expects(:mtime_file).with(resource[:path]).returns time
59
+
60
+ expect(checksum_value.retrieve).to eq(time.to_s)
61
+ end
62
+ end
63
+
64
+ with_digest_algorithms do
65
+ it "should return the checksum of the target if it exists and is a normal file" do
66
+ stat = mock 'stat', :ftype => "file"
67
+ resource.expects(:stat).returns stat
68
+ resource.parameter(:checksum).expects("#{digest_algorithm}_file".intern).with(resource[:path]).returns "mysum"
69
+ resource[:source] = source_file
70
+
71
+ expect(checksum_value.retrieve).to eq("mysum")
72
+ end
73
+ end
74
+ end
75
+
76
+ describe "when testing whether the checksum_value is in sync" do
77
+ let(:checksum_value) { described_class.new(:resource => resource) }
78
+
79
+ before do
80
+ resource[:ensure] = :file
81
+ end
82
+
83
+ it "should return true if source is not specified" do
84
+ checksum_value.should = "foo"
85
+ expect(checksum_value).to be_safe_insync("whatever")
86
+ end
87
+
88
+ describe "when a source is provided" do
89
+ before do
90
+ resource[:source] = source_file
91
+ end
92
+
93
+ with_digest_algorithms do
94
+ before(:each) do
95
+ resource[:checksum] = digest_algorithm
96
+ end
97
+
98
+ it "should return true if the resource shouldn't be a regular file" do
99
+ resource.expects(:should_be_file?).returns false
100
+ checksum_value.should = "foo"
101
+ expect(checksum_value).to be_safe_insync("whatever")
102
+ end
103
+
104
+ it "should return false if the current checksum_value is :absent" do
105
+ checksum_value.should = "foo"
106
+ expect(checksum_value).not_to be_safe_insync(:absent)
107
+ end
108
+
109
+ it "should return false if the file should be a file but is not present" do
110
+ resource.expects(:should_be_file?).returns true
111
+ checksum_value.should = "foo"
112
+
113
+ expect(checksum_value).not_to be_safe_insync(:absent)
114
+ end
115
+
116
+ describe "and the file exists" do
117
+ before do
118
+ resource.stubs(:stat).returns mock("stat")
119
+ checksum_value.should = "somechecksum"
120
+ end
121
+
122
+ it "should return false if the current checksum_value is different from the desired checksum_value" do
123
+ expect(checksum_value).not_to be_safe_insync("otherchecksum")
124
+ end
125
+
126
+ it "should return true if the current checksum_value is the same as the desired checksum_value" do
127
+ expect(checksum_value).to be_safe_insync("somechecksum")
128
+ end
129
+
130
+ it "should include the diff module" do
131
+ expect(checksum_value.respond_to?("diff")).to eq(false)
132
+ end
133
+
134
+ [true, false].product([true, false]).each do |cfg, param|
135
+ describe "and Puppet[:show_diff] is #{cfg} and show_diff => #{param}" do
136
+ before do
137
+ Puppet[:show_diff] = cfg
138
+ resource.stubs(:show_diff?).returns param
139
+ resource[:loglevel] = "debug"
140
+ end
141
+
142
+ if cfg and param
143
+ it "should display a diff" do
144
+ checksum_value.expects(:diff).returns("my diff").once
145
+ checksum_value.expects(:debug).with("\nmy diff").once
146
+ expect(checksum_value).not_to be_safe_insync("otherchecksum")
147
+ end
148
+ else
149
+ it "should not display a diff" do
150
+ checksum_value.expects(:diff).never
151
+ expect(checksum_value).not_to be_safe_insync("otherchecksum")
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end
158
+
159
+ let(:saved_time) { Time.now }
160
+ [:ctime, :mtime].each do |time_stat|
161
+ [["older", -1, false], ["same", 0, true], ["newer", 1, true]].each do
162
+ |compare, target_time, success|
163
+ describe "with #{compare} target #{time_stat} compared to source" do
164
+ before do
165
+ resource[:checksum] = time_stat
166
+ checksum_value.should = saved_time.to_s
167
+ end
168
+
169
+ it "should return #{success}" do
170
+ if success
171
+ expect(checksum_value).to be_safe_insync((saved_time+target_time).to_s)
172
+ else
173
+ expect(checksum_value).not_to be_safe_insync((saved_time+target_time).to_s)
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+ describe "with #{time_stat}" do
180
+ before do
181
+ resource[:checksum] = time_stat
182
+ end
183
+
184
+ it "should not be insync if trying to create it" do
185
+ checksum_value.should = saved_time.to_s
186
+ expect(checksum_value).not_to be_safe_insync(:absent)
187
+ end
188
+
189
+ it "should raise an error if checksum_value is not a checksum" do
190
+ checksum_value.should = "some content"
191
+ expect {
192
+ checksum_value.safe_insync?(saved_time.to_s)
193
+ }.to raise_error(/Resource with checksum_type #{time_stat} didn't contain a date in/)
194
+ end
195
+
196
+ it "should not be insync even if checksum_value is the absent symbol" do
197
+ checksum_value.should = :absent
198
+ expect(checksum_value).not_to be_safe_insync(:absent)
199
+ end
200
+ end
201
+ end
202
+
203
+ describe "and :replace is false" do
204
+ before do
205
+ resource.stubs(:replace?).returns false
206
+ end
207
+
208
+ it "should be insync if the file exists and the checksum_value is different" do
209
+ resource.stubs(:stat).returns mock('stat')
210
+
211
+ expect(checksum_value).to be_safe_insync("whatever")
212
+ end
213
+
214
+ it "should be insync if the file exists and the checksum_value is right" do
215
+ resource.stubs(:stat).returns mock('stat')
216
+
217
+ expect(checksum_value).to be_safe_insync("something")
218
+ end
219
+
220
+ it "should not be insync if the file does not exist" do
221
+ checksum_value.should = "foo"
222
+ expect(checksum_value).not_to be_safe_insync(:absent)
223
+ end
224
+ end
225
+ end
226
+ end
227
+
228
+ describe "when testing whether the checksum_value is initialized in the resource and in sync" do
229
+ CHECKSUM_TYPES_TO_TRY.each do |checksum_type, checksum|
230
+ describe "sync with checksum type #{checksum_type} and the file exists" do
231
+ before do
232
+ @new_resource = Puppet::Type.type(:file).new :ensure => :file, :path => path, :catalog => catalog,
233
+ :checksum_value => checksum, :checksum => checksum_type, :source => source_file
234
+ @new_resource.stubs(:stat).returns mock('stat')
235
+ end
236
+
237
+ it "should return false if the current checksum_value is different from the desired checksum_value" do
238
+ expect(@new_resource.parameters[:checksum_value]).not_to be_safe_insync("abcdef")
239
+ end
240
+
241
+ it "should return true if the current checksum_value is the same as the desired checksum_value" do
242
+ expect(@new_resource.parameters[:checksum_value]).to be_safe_insync(checksum)
243
+ end
244
+ end
245
+ end
246
+ end
247
+
248
+ describe "when changing the checksum_value" do
249
+ let(:checksum_value) { described_class.new(:resource => resource) }
250
+
251
+ before do
252
+ resource.stubs(:[]).with(:path).returns "/boo"
253
+ resource.stubs(:stat).returns "eh"
254
+ end
255
+
256
+ it "should raise if source is absent" do
257
+ resource.expects(:write).never
258
+
259
+ expect { checksum_value.sync }.to raise_error "checksum_value#sync should not be called without a source parameter"
260
+ end
261
+
262
+ describe "when using a source" do
263
+ before do
264
+ resource[:source] = source_file
265
+ end
266
+
267
+ it "should use the file's :write method to write the checksum_value" do
268
+ resource.expects(:write).with(resource.parameter(:source))
269
+
270
+ checksum_value.sync
271
+ end
272
+
273
+ it "should return :file_changed if the file already existed" do
274
+ resource.expects(:stat).returns "something"
275
+ resource.stubs(:write)
276
+ expect(checksum_value.sync).to eq(:file_changed)
277
+ end
278
+
279
+ it "should return :file_created if the file did not exist" do
280
+ resource.expects(:stat).returns nil
281
+ resource.stubs(:write)
282
+ expect(checksum_value.sync).to eq(:file_created)
283
+ end
284
+ end
285
+ end
286
+ end