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
@@ -418,7 +418,7 @@ describe Puppet::Type.type(:file) do
418
418
  it "should not copy values to the child which were set by the source" do
419
419
  source = File.expand_path(__FILE__)
420
420
  file[:source] = source
421
- metadata = stub 'metadata', :owner => "root", :group => "root", :mode => '0755', :ftype => "file", :checksum => "{md5}whatever", :source => source
421
+ metadata = stub 'metadata', :owner => "root", :group => "root", :mode => '0755', :ftype => "file", :checksum => "{md5}whatever", :checksum_type => "md5", :source => source
422
422
  file.parameter(:source).stubs(:metadata).returns metadata
423
423
 
424
424
  file.parameter(:source).copy_source_values
@@ -518,19 +518,6 @@ describe Puppet::Type.type(:file) do
518
518
 
519
519
  end
520
520
 
521
- describe "#remove_less_specific_files" do
522
- it "should remove any nested files that are already in the catalog" do
523
- foo = described_class.new :path => File.join(file[:path], 'foo')
524
- bar = described_class.new :path => File.join(file[:path], 'bar')
525
- baz = described_class.new :path => File.join(file[:path], 'baz')
526
-
527
- catalog.add_resource(foo)
528
- catalog.add_resource(bar)
529
-
530
- expect(file.remove_less_specific_files([foo, bar, baz])).to eq([baz])
531
- end
532
- end
533
-
534
521
  describe "#remove_less_specific_files" do
535
522
  it "should remove any nested files that are already in the catalog" do
536
523
  foo = described_class.new :path => File.join(file[:path], 'foo')
@@ -720,6 +707,13 @@ describe Puppet::Type.type(:file) do
720
707
  file.recurse_remote("first" => @resource)
721
708
  end
722
709
 
710
+ it "should set the checksum parameter based on the metadata" do
711
+ file.stubs(:perform_recursion).returns [@first]
712
+ @resource.stubs(:[]=)
713
+ @resource.expects(:[]=).with(:checksum, "md5")
714
+ file.recurse_remote("first" => @resource)
715
+ end
716
+
723
717
  it "should store the metadata in the source property for each resource so the source does not have to requery the metadata" do
724
718
  file.stubs(:perform_recursion).returns [@first]
725
719
  @resource.expects(:parameter).with(:source).returns @parameter
@@ -747,6 +741,16 @@ describe Puppet::Type.type(:file) do
747
741
  file.recurse_remote("first" => @resource)
748
742
  end
749
743
 
744
+ it "should update the main file's checksum parameter if the relative path is '.'" do
745
+ @first.stubs(:relative_path).returns "."
746
+ file.stubs(:perform_recursion).returns [@first]
747
+
748
+ file.stubs(:[]=)
749
+ file.expects(:[]=).with(:checksum, "md5")
750
+
751
+ file.recurse_remote("first" => @resource)
752
+ end
753
+
750
754
  describe "and multiple sources are provided" do
751
755
  let(:sources) do
752
756
  h = {}
@@ -1070,11 +1074,13 @@ describe Puppet::Type.type(:file) do
1070
1074
  it "should fail if the checksum parameter and content checksums do not match" do
1071
1075
  checksum = stub('checksum_parameter', :sum => 'checksum_b', :sum_file => 'checksum_b')
1072
1076
  file.stubs(:parameter).with(:checksum).returns(checksum)
1077
+ file.stubs(:parameter).with(:source).returns(nil)
1078
+
1073
1079
 
1074
1080
  property = stub('content_property', :actual_content => "something", :length => "something".length, :write => 'checksum_a')
1075
1081
  file.stubs(:property).with(:content).returns(property)
1076
1082
 
1077
- expect { file.write :NOTUSED }.to raise_error(Puppet::Error)
1083
+ expect { file.write property }.to raise_error(Puppet::Error)
1078
1084
  end
1079
1085
  end
1080
1086
 
@@ -1084,11 +1090,12 @@ describe Puppet::Type.type(:file) do
1084
1090
  it "should not fail if the checksum property and content checksums do not match" do
1085
1091
  checksum = stub('checksum_parameter', :sum => 'checksum_b')
1086
1092
  file.stubs(:parameter).with(:checksum).returns(checksum)
1093
+ file.stubs(:parameter).with(:source).returns(nil)
1087
1094
 
1088
1095
  property = stub('content_property', :actual_content => "something", :length => "something".length, :write => 'checksum_a')
1089
1096
  file.stubs(:property).with(:content).returns(property)
1090
1097
 
1091
- expect { file.write :NOTUSED }.to_not raise_error
1098
+ expect { file.write property }.to_not raise_error
1092
1099
  end
1093
1100
  end
1094
1101
 
@@ -1101,13 +1108,13 @@ describe Puppet::Type.type(:file) do
1101
1108
  it "should convert symbolic mode to int" do
1102
1109
  file[:mode] = 'oga=r'
1103
1110
  Puppet::Util.expects(:replace_file).with(file[:path], 0444)
1104
- file.write :NOTUSED
1111
+ file.write
1105
1112
  end
1106
1113
 
1107
1114
  it "should support int modes" do
1108
1115
  file[:mode] = '0444'
1109
1116
  Puppet::Util.expects(:replace_file).with(file[:path], 0444)
1110
- file.write :NOTUSED
1117
+ file.write
1111
1118
  end
1112
1119
  end
1113
1120
 
@@ -1117,19 +1124,19 @@ describe Puppet::Type.type(:file) do
1117
1124
  it "should set a umask of 0" do
1118
1125
  file[:mode] = 'oga=r'
1119
1126
  Puppet::Util.expects(:withumask).with(0)
1120
- file.write :NOTUSED
1127
+ file.write
1121
1128
  end
1122
1129
 
1123
1130
  it "should convert symbolic mode to int" do
1124
1131
  file[:mode] = 'oga=r'
1125
1132
  File.expects(:open).with(file[:path], anything, 0444)
1126
- file.write :NOTUSED
1133
+ file.write
1127
1134
  end
1128
1135
 
1129
1136
  it "should support int modes" do
1130
1137
  file[:mode] = '0444'
1131
1138
  File.expects(:open).with(file[:path], anything, 0444)
1132
- file.write :NOTUSED
1139
+ file.write
1133
1140
  end
1134
1141
  end
1135
1142
  end
@@ -1139,7 +1146,7 @@ describe Puppet::Type.type(:file) do
1139
1146
  it "should default to 0644 mode" do
1140
1147
  file = described_class.new(:path => path, :content => "file content")
1141
1148
 
1142
- file.write :NOTUSED
1149
+ file.write file.parameter(:content)
1143
1150
 
1144
1151
  expect(File.stat(file[:path]).mode & 0777).to eq(0644)
1145
1152
  end
@@ -1151,7 +1158,7 @@ describe Puppet::Type.type(:file) do
1151
1158
 
1152
1159
  umask_from_the_user = 0777
1153
1160
  Puppet::Util.withumask(umask_from_the_user) do
1154
- file.write :NOTUSED
1161
+ file.write
1155
1162
  end
1156
1163
 
1157
1164
  expect(File.stat(file[:path]).mode & 0777).to eq(0644)
@@ -1189,16 +1196,6 @@ describe Puppet::Type.type(:file) do
1189
1196
  end
1190
1197
  end
1191
1198
 
1192
- describe "#write_content" do
1193
- it "should delegate writing the file to the content property" do
1194
- io = stub('io')
1195
- file[:content] = "some content here"
1196
- file.property(:content).expects(:write).with(io)
1197
-
1198
- file.send(:write_content, io)
1199
- end
1200
- end
1201
-
1202
1199
  describe "#write_temporary_file?" do
1203
1200
  it "should be true if the file has specified content" do
1204
1201
  file[:content] = 'some content'
@@ -1393,7 +1390,18 @@ describe Puppet::Type.type(:file) do
1393
1390
  describe "when using source" do
1394
1391
  before do
1395
1392
  file[:source] = File.expand_path('/one')
1393
+ @checksum_values = {
1394
+ :md5 => 'd41d8cd98f00b204e9800998ecf8427e',
1395
+ :md5lite => 'd41d8cd98f00b204e9800998ecf8427e',
1396
+ :sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1397
+ :sha256lite => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1398
+ :sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1399
+ :sha1lite => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1400
+ :mtime => 'Jan 26 13:59:49 2016',
1401
+ :ctime => 'Jan 26 13:59:49 2016'
1402
+ }
1396
1403
  end
1404
+
1397
1405
  Puppet::Type::File::ParameterChecksum.value_collection.values.reject {|v| v == :none}.each do |checksum_type|
1398
1406
  describe "with checksum '#{checksum_type}'" do
1399
1407
  before do
@@ -1401,12 +1409,66 @@ describe Puppet::Type.type(:file) do
1401
1409
  end
1402
1410
 
1403
1411
  it 'should validate' do
1412
+ expect { file.validate }.to_not raise_error
1413
+ end
1414
+
1415
+ it 'should fail on an invalid checksum_value' do
1416
+ file[:checksum_value] = ''
1417
+ expect { file.validate }.to raise_error(Puppet::Error, "Checksum value '' is not a valid checksum type #{checksum_type}")
1418
+ end
1404
1419
 
1420
+ it 'should validate a valid checksum_value' do
1421
+ file[:checksum_value] = @checksum_values[checksum_type]
1405
1422
  expect { file.validate }.to_not raise_error
1406
1423
  end
1407
1424
  end
1408
1425
  end
1409
1426
 
1427
+ describe "on Windows when source_permissions is `use`" do
1428
+ before :each do
1429
+ Puppet.features.stubs(:microsoft_windows?).returns true
1430
+ file[:source_permissions] = "use"
1431
+ end
1432
+ let(:err_message) { "Copying owner/mode/group from the" <<
1433
+ " source file on Windows is not supported;" <<
1434
+ " use source_permissions => ignore." }
1435
+
1436
+ it "should issue error when retrieving" do
1437
+ expect { file.retrieve }.to raise_error(err_message)
1438
+ end
1439
+
1440
+ it "should issue error when retrieving if only user is unspecified" do
1441
+ file[:group] = 2
1442
+ file[:mode] = "0003"
1443
+
1444
+ expect { file.retrieve }.to raise_error(err_message)
1445
+ end
1446
+
1447
+ it "should issue error when retrieving if only group is unspecified" do
1448
+ file[:owner] = 1
1449
+ file[:mode] = "0003"
1450
+
1451
+ expect { file.retrieve }.to raise_error(err_message)
1452
+ end
1453
+
1454
+ it "should issue error when retrieving if only mode is unspecified" do
1455
+ file[:owner] = 1
1456
+ file[:group] = 2
1457
+
1458
+ expect { file.retrieve }.to raise_error(err_message)
1459
+ end
1460
+
1461
+ it "should issue warning when retrieve if group, owner, and mode are all specified" do
1462
+ file[:owner] = 1
1463
+ file[:group] = 2
1464
+ file[:mode] = "0003"
1465
+
1466
+ file.parameter(:source).expects(:copy_source_values)
1467
+ file.expects(:warning).with(err_message)
1468
+ expect { file.retrieve }.not_to raise_error
1469
+ end
1470
+ end
1471
+
1410
1472
  describe "with checksum 'none'" do
1411
1473
  before do
1412
1474
  file[:checksum] = :none
@@ -1421,6 +1483,14 @@ describe Puppet::Type.type(:file) do
1421
1483
  describe "when using content" do
1422
1484
  before do
1423
1485
  file[:content] = 'file contents'
1486
+ @checksum_values = {
1487
+ :md5 => 'd41d8cd98f00b204e9800998ecf8427e',
1488
+ :md5lite => 'd41d8cd98f00b204e9800998ecf8427e',
1489
+ :sha256 => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1490
+ :sha256lite => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
1491
+ :sha1 => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1492
+ :sha1lite => 'da39a3ee5e6b4b0d3255bfef95601890afd80709',
1493
+ }
1424
1494
  end
1425
1495
 
1426
1496
  (Puppet::Type::File::ParameterChecksum.value_collection.values - SOURCE_ONLY_CHECKSUMS).each do |checksum_type|
@@ -1432,6 +1502,16 @@ describe Puppet::Type.type(:file) do
1432
1502
  it 'should validate' do
1433
1503
  expect { file.validate }.to_not raise_error
1434
1504
  end
1505
+
1506
+ it 'should fail on an invalid checksum_value' do
1507
+ file[:checksum_value] = ''
1508
+ expect { file.validate }.to raise_error(Puppet::Error, "Checksum value '' is not a valid checksum type #{checksum_type}")
1509
+ end
1510
+
1511
+ it 'should validate a valid checksum_value' do
1512
+ file[:checksum_value] = @checksum_values[checksum_type]
1513
+ expect { file.validate }.to_not raise_error
1514
+ end
1435
1515
  end
1436
1516
  end
1437
1517
 
@@ -1446,6 +1526,26 @@ describe Puppet::Type.type(:file) do
1446
1526
  end
1447
1527
  end
1448
1528
 
1529
+ describe "when checksum is none" do
1530
+ before do
1531
+ file[:checksum] = :none
1532
+ end
1533
+
1534
+ it 'should validate' do
1535
+ expect { file.validate }.to_not raise_error
1536
+ end
1537
+
1538
+ it 'should fail on an invalid checksum_value' do
1539
+ file[:checksum_value] = 'boo'
1540
+ expect { file.validate }.to raise_error(Puppet::Error, "Checksum value 'boo' is not a valid checksum type none")
1541
+ end
1542
+
1543
+ it 'should validate a valid checksum_value' do
1544
+ file[:checksum_value] = ''
1545
+ expect { file.validate }.to_not raise_error
1546
+ end
1547
+ end
1548
+
1449
1549
  describe "when auditing" do
1450
1550
  before :each do
1451
1551
  # to prevent the catalog from trying to write state.yaml
@@ -1501,5 +1601,4 @@ describe Puppet::Type.type(:file) do
1501
1601
  end
1502
1602
  end
1503
1603
  end
1504
-
1505
1604
  end
@@ -67,6 +67,38 @@ describe Puppet::Type.type(:interface) do
67
67
  end
68
68
  end
69
69
 
70
+ describe "interface mode" do
71
+ it "should allow :access" do
72
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :mode => :access)
73
+ end
74
+
75
+ it "should allow :trunk" do
76
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :mode => :trunk)
77
+ end
78
+
79
+ it "should allow 'dynamic auto'" do
80
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :mode => 'dynamic auto')
81
+ end
82
+
83
+ it "should allow 'dynamic desirable'" do
84
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :mode => 'dynamic desirable')
85
+ end
86
+ end
87
+
88
+ describe "interface encapsulation" do
89
+ it "should allow :dot1q" do
90
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :encapsulation => :dot1q)
91
+ end
92
+
93
+ it "should allow :isl" do
94
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :encapsulation => :isl)
95
+ end
96
+
97
+ it "should allow :negotiate" do
98
+ Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :encapsulation => :negotiate)
99
+ end
100
+ end
101
+
70
102
  describe "especially ipaddress" do
71
103
  it "should allow ipv4 addresses" do
72
104
  Puppet::Type.type(:interface).new(:name => "FastEthernet 0/1", :ipaddress => "192.168.0.1/24")
@@ -1,6 +1,9 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
 
4
+ module Puppet::Util::Plist
5
+ end
6
+
4
7
  macauth_type = Puppet::Type.type(:macauthorization)
5
8
 
6
9
  describe Puppet::Type.type(:macauthorization), "when checking macauthorization objects" do
@@ -10,7 +13,7 @@ describe Puppet::Type.type(:macauthorization), "when checking macauthorization o
10
13
  authplist["rules"] = { "foorule" => "foo" }
11
14
  authplist["rights"] = { "fooright" => "foo" }
12
15
  provider_class = macauth_type.provider(macauth_type.providers[0])
13
- Plist.stubs(:parse_xml).with("/etc/authorization").returns(authplist)
16
+ Puppet::Util::Plist.stubs(:parse_plist).with("/etc/authorization").returns(authplist)
14
17
  macauth_type.stubs(:defaultprovider).returns provider_class
15
18
  @resource = macauth_type.new(:name => 'foo')
16
19
  end
@@ -49,9 +49,9 @@ shared_examples_for "a yumrepo parameter that expects a boolean parameter" do |p
49
49
  instance = described_class.new(:name => 'puppetlabs', param => value)
50
50
  expect(instance[param]).to eq value
51
51
  end
52
- it "accepts #{value} downcased to #{value.downcase}" do
52
+ it "accepts #{value} downcased to #{value.downcase} and capitalizes it" do
53
53
  instance = described_class.new(:name => 'puppetlabs', param => value.downcase)
54
- expect(instance[param]).to eq value.downcase
54
+ expect(instance[param]).to eq value.downcase.capitalize
55
55
  end
56
56
  it "fails on valid value #{value} contained in another value" do
57
57
  expect {
@@ -183,7 +183,7 @@ describe Puppet::Util::FileType do
183
183
  let(:crontab_output) { 'suntab_output' }
184
184
 
185
185
  # possible crontab output was taken from here:
186
- # http://docs.oracle.com/cd/E19082-01/819-2380/sysrescron-60/index.html
186
+ # https://docs.oracle.com/cd/E19082-01/819-2380/sysrescron-60/index.html
187
187
  let(:absent_crontab) do
188
188
  'crontab: can\'t open your crontab file'
189
189
  end
@@ -127,14 +127,14 @@ describe Puppet::Util::HttpProxy do
127
127
  no_proxy = '127.0.0.1, localhost, mydomain.com, *.otherdomain.com, oddport.com:8080, *.otheroddport.com:8080, .anotherdomain.com, .anotheroddport.com:8080'
128
128
  it "should return false if no_proxy does not exist in env" do
129
129
  Puppet::Util.withenv('no_proxy' => nil) do
130
- dest = 'http://puppetlabs.com'
130
+ dest = 'https://puppetlabs.com'
131
131
  expect(subject.no_proxy?(dest)).to be false
132
132
  end
133
133
  end
134
134
 
135
135
  it "should return false if the dest does not match any element in the no_proxy list" do
136
136
  Puppet::Util.withenv('no_proxy' => no_proxy) do
137
- dest = 'http://puppetlabs.com'
137
+ dest = 'https://puppetlabs.com'
138
138
  expect(subject.no_proxy?(dest)).to be false
139
139
  end
140
140
  end
@@ -28,8 +28,6 @@ describe Puppet::Util::Log.desttypes[:file] do
28
28
  include PuppetSpec::Files
29
29
 
30
30
  before do
31
- File.stubs(:open) # prevent actually creating the file
32
- File.stubs(:chown) # prevent chown on non existing file from failing
33
31
  @class = Puppet::Util::Log.desttypes[:file]
34
32
  end
35
33
 
@@ -177,6 +177,75 @@ describe Puppet::Util::Logging do
177
177
  end
178
178
  end
179
179
 
180
+ describe "when sending a warn_once" do
181
+ before(:each) {
182
+ @logger.clear_deprecation_warnings
183
+ }
184
+ after(:each) {
185
+ # this is required because of bugs in Mocha whe tearing down expectations for each test
186
+ # why it works elsewhere is a mystery.
187
+ @logger.unstub(:warning)
188
+ }
189
+
190
+ it "warns with file when only file is given" do
191
+ @logger.expects(:warning).with(regexp_matches(/wet paint.*\(in aFile\)/m))
192
+ @logger.warn_once('kind', 'wp', "wet paint", 'aFile')
193
+ end
194
+
195
+ it "warns with unknown file and line when only line is given" do
196
+ @logger.expects(:warning).with(regexp_matches(/wet paint.*\(in unknown file, line 5\)/m))
197
+ @logger.warn_once('kind', 'wp', "wet paint", nil, 5)
198
+ end
199
+
200
+ it "warns with file and line when both are given" do
201
+ @logger.expects(:warning).with(regexp_matches(/wet paint.*\(at aFile:5\)/m))
202
+ @logger.warn_once('kind', 'wp', "wet paint",'aFile', 5)
203
+ end
204
+
205
+ it "warns once per key" do
206
+ @logger.expects(:warning).with(regexp_matches(/wet paint.*/m)).once
207
+ 5.times do
208
+ @logger.warn_once('kind', 'wp', "wet paint")
209
+ end
210
+ end
211
+ end
212
+
213
+ describe "does not warn about undefined variables when disabled_warnings says so" do
214
+ let(:logger) { LoggingTester.new }
215
+
216
+ around(:each) do |example|
217
+ Puppet.settings.initialize_global_settings
218
+ logger.clear_deprecation_warnings
219
+ Puppet[:disable_warnings] = ['undefined_variables']
220
+ example.run
221
+ Puppet[:disable_warnings] = []
222
+ logger.unstub(:warning)
223
+ end
224
+
225
+ it "does not produce warning if kind is disabled" do
226
+ logger.expects(:warning).never
227
+ logger.warn_once('undefined_variables', 'wp', "wet paint")
228
+ end
229
+ end
230
+
231
+ describe "warns about undefined variables when deprecations are in disabled_warnings" do
232
+ let(:logger) { LoggingTester.new }
233
+
234
+ around(:each) do |example|
235
+ Puppet.settings.initialize_global_settings
236
+ logger.clear_deprecation_warnings
237
+ Puppet[:disable_warnings] = ['deprecations']
238
+ example.run
239
+ Puppet[:disable_warnings] = []
240
+ logger.unstub(:warning)
241
+ end
242
+
243
+ it "produces warning even if deprecation warnings are disabled " do
244
+ logger.expects(:warning).once
245
+ logger.warn_once('undefined_variables', 'wp', "wet paint")
246
+ end
247
+ end
248
+
180
249
  describe "when formatting exceptions" do
181
250
  it "should be able to format a chain of exceptions" do
182
251
  exc3 = Puppet::Error.new("original")