puppet 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +6 -6
  4. data/LICENSE +1 -1
  5. data/README.md +8 -9
  6. data/conf/auth.conf +2 -2
  7. data/ext/README.environment +1 -1
  8. data/ext/build_defaults.yaml +1 -1
  9. data/ext/debian/README.source +1 -1
  10. data/ext/debian/control +1 -1
  11. data/ext/debian/copyright +4 -4
  12. data/ext/debian/puppetmaster.README.debian +11 -9
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/ext/envpuppet +2 -2
  15. data/ext/ips/puppetagent.xml +1 -1
  16. data/ext/ips/puppetmaster.xml +1 -1
  17. data/ext/project_data.yaml +8 -0
  18. data/ext/puppet-test +3 -3
  19. data/ext/rack/example-passenger-vhost.conf +1 -1
  20. data/ext/redhat/puppet.spec.erb +2 -2
  21. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  22. data/ext/solaris/pkginfo +1 -1
  23. data/ext/solaris/smf/puppet.xml +1 -1
  24. data/ext/suse/puppet.spec +2 -2
  25. data/ext/upload_facts.rb +1 -1
  26. data/ext/windows/puppet_interactive.bat +6 -0
  27. data/ext/windows/puppet_shell.bat +9 -0
  28. data/ext/windows/run_puppet_interactive.bat +9 -0
  29. data/ext/yaml_nodes.rb +1 -1
  30. data/install.rb +30 -20
  31. data/lib/hiera/scope.rb +1 -1
  32. data/lib/puppet/agent.rb +1 -1
  33. data/lib/puppet/application/agent.rb +4 -2
  34. data/lib/puppet/application/apply.rb +7 -4
  35. data/lib/puppet/application/cert.rb +1 -1
  36. data/lib/puppet/application/device.rb +1 -1
  37. data/lib/puppet/application/filebucket.rb +1 -1
  38. data/lib/puppet/application/inspect.rb +1 -1
  39. data/lib/puppet/application/lookup.rb +45 -47
  40. data/lib/puppet/application/master.rb +2 -2
  41. data/lib/puppet/application/resource.rb +1 -1
  42. data/lib/puppet/configurer.rb +100 -22
  43. data/lib/puppet/data_providers/hiera_config.rb +28 -3
  44. data/lib/puppet/data_providers/hiera_interpolate.rb +30 -15
  45. data/lib/puppet/data_providers/hiera_support.rb +1 -1
  46. data/lib/puppet/data_providers/json_data_provider_factory.rb +2 -2
  47. data/lib/puppet/data_providers/lookup_adapter.rb +73 -26
  48. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +2 -2
  49. data/lib/puppet/defaults.rb +69 -22
  50. data/lib/puppet/environments.rb +3 -1
  51. data/lib/puppet/face/config.rb +1 -1
  52. data/lib/puppet/face/epp.rb +1 -1
  53. data/lib/puppet/face/help/man.erb +1 -1
  54. data/lib/puppet/face/module/install.rb +6 -6
  55. data/lib/puppet/face/parser.rb +12 -9
  56. data/lib/puppet/face/status.rb +2 -1
  57. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  58. data/lib/puppet/feature/telnet.rb +9 -0
  59. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  60. data/lib/puppet/file_serving/metadata.rb +18 -2
  61. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  62. data/lib/puppet/file_system/file_impl.rb +2 -2
  63. data/lib/puppet/file_system/memory_impl.rb +1 -1
  64. data/lib/puppet/file_system/uniquefile.rb +1 -1
  65. data/lib/puppet/file_system.rb +2 -2
  66. data/lib/puppet/forge/repository.rb +1 -31
  67. data/lib/puppet/forge.rb +1 -1
  68. data/lib/puppet/functions/assert_type.rb +9 -9
  69. data/lib/puppet/functions/each.rb +5 -13
  70. data/lib/puppet/functions/filter.rb +5 -14
  71. data/lib/puppet/functions/lookup.rb +126 -150
  72. data/lib/puppet/functions/map.rb +6 -14
  73. data/lib/puppet/functions/match.rb +1 -0
  74. data/lib/puppet/functions/reduce.rb +5 -13
  75. data/lib/puppet/functions/reverse_each.rb +82 -0
  76. data/lib/puppet/functions/scanf.rb +15 -18
  77. data/lib/puppet/functions/slice.rb +22 -36
  78. data/lib/puppet/functions/split.rb +2 -2
  79. data/lib/puppet/functions/step.rb +88 -0
  80. data/lib/puppet/functions/type.rb +70 -0
  81. data/lib/puppet/functions.rb +45 -6
  82. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  83. data/lib/puppet/indirector/catalog/compiler.rb +188 -5
  84. data/lib/puppet/indirector/facts/facter.rb +2 -13
  85. data/lib/puppet/indirector/file_content/http.rb +15 -0
  86. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  87. data/lib/puppet/indirector/generic_http.rb +16 -0
  88. data/lib/puppet/indirector/hiera.rb +3 -1
  89. data/lib/puppet/indirector/indirection.rb +6 -2
  90. data/lib/puppet/indirector/json.rb +2 -2
  91. data/lib/puppet/indirector/node/exec.rb +1 -1
  92. data/lib/puppet/indirector/node/ldap.rb +1 -1
  93. data/lib/puppet/indirector/rest.rb +2 -1
  94. data/lib/puppet/info_service/class_information_service.rb +13 -12
  95. data/lib/puppet/loaders.rb +1 -0
  96. data/lib/puppet/module.rb +6 -2
  97. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +9 -2
  98. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -1
  99. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +2 -2
  100. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  101. data/lib/puppet/network/http/pool.rb +9 -0
  102. data/lib/puppet/node/environment.rb +11 -2
  103. data/lib/puppet/node.rb +11 -2
  104. data/lib/puppet/parser/ast/pops_bridge.rb +19 -22
  105. data/lib/puppet/parser/compiler.rb +4 -11
  106. data/lib/puppet/parser/environment_compiler.rb +0 -1
  107. data/lib/puppet/parser/functions/fqdn_rand.rb +1 -1
  108. data/lib/puppet/parser/functions/inline_template.rb +1 -1
  109. data/lib/puppet/parser/functions/lookup.rb +128 -149
  110. data/lib/puppet/parser/functions/map.rb +1 -1
  111. data/lib/puppet/parser/functions/match.rb +1 -0
  112. data/lib/puppet/parser/functions/scanf.rb +15 -26
  113. data/lib/puppet/parser/functions/slice.rb +17 -24
  114. data/lib/puppet/parser/functions/split.rb +1 -1
  115. data/lib/puppet/parser/functions.rb +28 -16
  116. data/lib/puppet/parser/resource.rb +19 -17
  117. data/lib/puppet/parser/scope.rb +176 -5
  118. data/lib/puppet/plugins/data_providers/data_provider.rb +56 -14
  119. data/lib/puppet/pops/adaptable.rb +4 -1
  120. data/lib/puppet/pops/adapters.rb +80 -12
  121. data/lib/puppet/pops/binder/binder.rb +21 -17
  122. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  123. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  124. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  125. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  126. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  127. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  128. data/lib/puppet/pops/binder/injector.rb +53 -48
  129. data/lib/puppet/pops/binder/key_factory.rb +10 -6
  130. data/lib/puppet/pops/binder/producers.rb +67 -62
  131. data/lib/puppet/pops/evaluator/access_operator.rb +98 -96
  132. data/lib/puppet/pops/evaluator/closure.rb +122 -106
  133. data/lib/puppet/pops/evaluator/collector_transformer.rb +34 -14
  134. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +0 -1
  135. data/lib/puppet/pops/evaluator/compare_operator.rb +13 -9
  136. data/lib/puppet/pops/evaluator/epp_evaluator.rb +9 -8
  137. data/lib/puppet/pops/evaluator/evaluator_impl.rb +78 -76
  138. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +85 -0
  139. data/lib/puppet/pops/evaluator/relationship_operator.rb +13 -11
  140. data/lib/puppet/pops/evaluator/runtime3_converter.rb +5 -0
  141. data/lib/puppet/pops/evaluator/runtime3_support.rb +47 -42
  142. data/lib/puppet/pops/functions/function.rb +6 -2
  143. data/lib/puppet/pops/issue_reporter.rb +6 -4
  144. data/lib/puppet/pops/issues.rb +50 -11
  145. data/lib/puppet/pops/loader/base_loader.rb +1 -1
  146. data/lib/puppet/pops/loader/loader.rb +1 -1
  147. data/lib/puppet/pops/loader/loader_paths.rb +15 -0
  148. data/lib/puppet/pops/loader/module_loaders.rb +17 -13
  149. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +18 -13
  150. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -3
  151. data/lib/puppet/pops/loader/type_definition_instantiator.rb +55 -0
  152. data/lib/puppet/pops/loaders.rb +51 -9
  153. data/lib/puppet/pops/lookup/explainer.rb +73 -3
  154. data/lib/puppet/pops/lookup/invocation.rb +21 -19
  155. data/lib/puppet/pops/lookup.rb +17 -12
  156. data/lib/puppet/pops/merge_strategy.rb +16 -19
  157. data/lib/puppet/pops/model/factory.rb +179 -157
  158. data/lib/puppet/pops/model/model.rb +17 -8
  159. data/lib/puppet/pops/model/model_label_provider.rb +14 -7
  160. data/lib/puppet/pops/model/model_meta.rb +17 -0
  161. data/lib/puppet/pops/model/model_tree_dumper.rb +8 -0
  162. data/lib/puppet/pops/parser/egrammar.ra +38 -14
  163. data/lib/puppet/pops/parser/eparser.rb +1353 -1276
  164. data/lib/puppet/pops/parser/epp_support.rb +11 -7
  165. data/lib/puppet/pops/parser/evaluating_parser.rb +17 -13
  166. data/lib/puppet/pops/parser/heredoc_support.rb +15 -11
  167. data/lib/puppet/pops/parser/lexer2.rb +428 -403
  168. data/lib/puppet/pops/parser/lexer_support.rb +85 -7
  169. data/lib/puppet/pops/parser/locator.rb +21 -0
  170. data/lib/puppet/pops/parser/parser_support.rb +19 -16
  171. data/lib/puppet/pops/parser/slurp_support.rb +16 -8
  172. data/lib/puppet/pops/types/class_loader.rb +23 -19
  173. data/lib/puppet/pops/types/enumeration.rb +9 -26
  174. data/lib/puppet/pops/types/iterable.rb +308 -0
  175. data/lib/puppet/pops/types/recursion_guard.rb +82 -0
  176. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  177. data/lib/puppet/pops/types/type_asserter.rb +10 -9
  178. data/lib/puppet/pops/types/type_calculator.rb +140 -387
  179. data/lib/puppet/pops/types/type_factory.rb +91 -57
  180. data/lib/puppet/pops/types/type_formatter.rb +334 -0
  181. data/lib/puppet/pops/types/type_mismatch_describer.rb +226 -59
  182. data/lib/puppet/pops/types/type_parser.rb +159 -112
  183. data/lib/puppet/pops/types/types.rb +2057 -1253
  184. data/lib/puppet/pops/utils.rb +11 -10
  185. data/lib/puppet/pops/validation/checker4_0.rb +115 -63
  186. data/lib/puppet/pops/validation/validator_factory_4_0.rb +8 -4
  187. data/lib/puppet/pops/validation.rb +11 -9
  188. data/lib/puppet/pops.rb +0 -8
  189. data/lib/puppet/provider/aixobject.rb +1 -1
  190. data/lib/puppet/provider/augeas/augeas.rb +1 -1
  191. data/lib/puppet/provider/cron/crontab.rb +1 -1
  192. data/lib/puppet/provider/exec/windows.rb +1 -1
  193. data/lib/puppet/provider/group/windows_adsi.rb +2 -2
  194. data/lib/puppet/provider/macauthorization/macauthorization.rb +10 -9
  195. data/lib/puppet/provider/nameservice/directoryservice.rb +35 -50
  196. data/lib/puppet/provider/package/appdmg.rb +3 -2
  197. data/lib/puppet/provider/package/dnf.rb +1 -1
  198. data/lib/puppet/provider/package/pip.rb +16 -9
  199. data/lib/puppet/provider/package/pip3.rb +1 -1
  200. data/lib/puppet/provider/package/pkg.rb +1 -1
  201. data/lib/puppet/provider/package/pkgdmg.rb +3 -2
  202. data/lib/puppet/provider/package/pkgng.rb +13 -4
  203. data/lib/puppet/provider/package/rpm.rb +0 -1
  204. data/lib/puppet/provider/package/windows.rb +1 -1
  205. data/lib/puppet/provider/package/yum.rb +2 -2
  206. data/lib/puppet/provider/package/zypper.rb +19 -0
  207. data/lib/puppet/provider/service/debian.rb +7 -20
  208. data/lib/puppet/provider/service/init.rb +7 -0
  209. data/lib/puppet/provider/service/launchd.rb +6 -12
  210. data/lib/puppet/provider/service/systemd.rb +9 -2
  211. data/lib/puppet/provider/sshkey/parsed.rb +1 -1
  212. data/lib/puppet/provider/user/aix.rb +1 -1
  213. data/lib/puppet/provider/user/directoryservice.rb +33 -58
  214. data/lib/puppet/provider/user/windows_adsi.rb +2 -2
  215. data/lib/puppet/provider/yumrepo/inifile.rb +6 -3
  216. data/lib/puppet/provider/zfs/zfs.rb +1 -1
  217. data/lib/puppet/provider/zpool/zpool.rb +1 -1
  218. data/lib/puppet/reference/configuration.rb +1 -1
  219. data/lib/puppet/reference/providers.rb +1 -1
  220. data/lib/puppet/resource/capability_finder.rb +20 -13
  221. data/lib/puppet/resource/catalog.rb +60 -3
  222. data/lib/puppet/resource/status.rb +11 -2
  223. data/lib/puppet/resource/type.rb +33 -42
  224. data/lib/puppet/resource.rb +15 -12
  225. data/lib/puppet/settings/config_file.rb +1 -1
  226. data/lib/puppet/settings/environment_conf.rb +13 -5
  227. data/lib/puppet/settings.rb +1 -1
  228. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  229. data/lib/puppet/ssl/certificate_request.rb +4 -4
  230. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  231. data/lib/puppet/ssl/validator/default_validator.rb +1 -1
  232. data/lib/puppet/test/test_helper.rb +16 -4
  233. data/lib/puppet/transaction/additional_resource_generator.rb +23 -5
  234. data/lib/puppet/transaction/report.rb +31 -1
  235. data/lib/puppet/transaction/resource_harness.rb +0 -25
  236. data/lib/puppet/transaction.rb +15 -2
  237. data/lib/puppet/type/augeas.rb +1 -1
  238. data/lib/puppet/type/cron.rb +12 -12
  239. data/lib/puppet/type/file/checksum_value.rb +53 -0
  240. data/lib/puppet/type/file/content.rb +26 -111
  241. data/lib/puppet/type/file/data_sync.rb +84 -0
  242. data/lib/puppet/type/file/ensure.rb +17 -14
  243. data/lib/puppet/type/file/selcontext.rb +1 -1
  244. data/lib/puppet/type/file/source.rb +103 -18
  245. data/lib/puppet/type/file.rb +91 -39
  246. data/lib/puppet/type/filebucket.rb +1 -1
  247. data/lib/puppet/type/group.rb +6 -2
  248. data/lib/puppet/type/interface.rb +8 -3
  249. data/lib/puppet/type/macauthorization.rb +1 -1
  250. data/lib/puppet/type/package.rb +6 -0
  251. data/lib/puppet/type/schedule.rb +1 -1
  252. data/lib/puppet/type/stage.rb +1 -1
  253. data/lib/puppet/type/user.rb +19 -17
  254. data/lib/puppet/type/yumrepo.rb +20 -0
  255. data/lib/puppet/type.rb +11 -11
  256. data/lib/puppet/util/autoload.rb +16 -11
  257. data/lib/puppet/util/checksums.rb +74 -31
  258. data/lib/puppet/util/execution.rb +1 -1
  259. data/lib/puppet/util/http_proxy.rb +72 -0
  260. data/lib/puppet/util/log.rb +2 -0
  261. data/lib/puppet/util/logging.rb +43 -1
  262. data/lib/puppet/util/monkey_patches.rb +2 -2
  263. data/lib/puppet/util/multi_match.rb +51 -0
  264. data/lib/puppet/util/network_device/cisco/device.rb +10 -2
  265. data/lib/puppet/util/network_device/cisco/interface.rb +21 -8
  266. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  267. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  268. data/lib/puppet/util/plist.rb +130 -0
  269. data/lib/puppet/util/resource_template.rb +1 -1
  270. data/lib/puppet/util/run_mode.rb +2 -2
  271. data/lib/puppet/util/skip_tags.rb +9 -0
  272. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  273. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  274. data/lib/puppet/util/windows/adsi.rb +65 -28
  275. data/lib/puppet/util/windows/api_types.rb +24 -18
  276. data/lib/puppet/util/windows/com.rb +3 -3
  277. data/lib/puppet/util/windows/error.rb +1 -1
  278. data/lib/puppet/util/windows/file.rb +8 -8
  279. data/lib/puppet/util/windows/principal.rb +190 -0
  280. data/lib/puppet/util/windows/process.rb +78 -11
  281. data/lib/puppet/util/windows/registry.rb +22 -16
  282. data/lib/puppet/util/windows/root_certs.rb +5 -5
  283. data/lib/puppet/util/windows/security.rb +33 -35
  284. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  285. data/lib/puppet/util/windows/sid.rb +84 -15
  286. data/lib/puppet/util/windows/taskscheduler.rb +15 -15
  287. data/lib/puppet/util/windows/user.rb +10 -10
  288. data/lib/puppet/util/windows.rb +4 -0
  289. data/lib/puppet/util.rb +109 -22
  290. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  291. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  292. data/lib/puppet/vendor/pathspec/README.md +1 -1
  293. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  294. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +14 -0
  295. data/lib/puppet/version.rb +1 -1
  296. data/lib/puppet.rb +17 -0
  297. data/lib/semver.rb +17 -1
  298. data/man/man5/puppet.conf.5 +12 -12
  299. data/man/man8/extlookup2hiera.8 +1 -1
  300. data/man/man8/puppet-agent.8 +2 -2
  301. data/man/man8/puppet-apply.8 +2 -2
  302. data/man/man8/puppet-ca.8 +2 -2
  303. data/man/man8/puppet-catalog.8 +2 -2
  304. data/man/man8/puppet-cert.8 +2 -2
  305. data/man/man8/puppet-certificate.8 +2 -2
  306. data/man/man8/puppet-certificate_request.8 +2 -2
  307. data/man/man8/puppet-certificate_revocation_list.8 +2 -2
  308. data/man/man8/puppet-config.8 +3 -3
  309. data/man/man8/puppet-describe.8 +1 -1
  310. data/man/man8/puppet-device.8 +1 -1
  311. data/man/man8/puppet-doc.8 +1 -1
  312. data/man/man8/puppet-epp.8 +2 -2
  313. data/man/man8/puppet-facts.8 +2 -2
  314. data/man/man8/puppet-file.8 +2 -2
  315. data/man/man8/puppet-filebucket.8 +2 -2
  316. data/man/man8/puppet-help.8 +2 -2
  317. data/man/man8/puppet-inspect.8 +2 -2
  318. data/man/man8/puppet-key.8 +2 -2
  319. data/man/man8/puppet-man.8 +2 -2
  320. data/man/man8/puppet-master.8 +2 -2
  321. data/man/man8/puppet-module.8 +9 -9
  322. data/man/man8/puppet-node.8 +2 -2
  323. data/man/man8/puppet-parser.8 +2 -2
  324. data/man/man8/puppet-plugin.8 +2 -2
  325. data/man/man8/puppet-report.8 +2 -2
  326. data/man/man8/puppet-resource.8 +2 -2
  327. data/man/man8/puppet-resource_type.8 +2 -2
  328. data/man/man8/puppet-status.8 +3 -3
  329. data/man/man8/puppet.8 +1 -1
  330. data/spec/fixtures/module.tar.gz +0 -0
  331. data/spec/fixtures/unit/application/environments/production/data/common.yaml +4 -0
  332. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  333. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  334. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/data.pp +10 -0
  335. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  336. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  337. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  338. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  339. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  340. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  341. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  342. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  343. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  344. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  345. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  346. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  347. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  348. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  349. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  350. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  351. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  352. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  353. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -1
  354. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/data/empty.json +0 -0
  355. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/hiera.yaml +5 -0
  356. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/manifests/init.pp +2 -0
  357. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_json/metadata.json +9 -0
  358. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/data/empty.yaml +1 -0
  359. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  360. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  361. data/spec/fixtures/unit/functions/lookup/environments/production/modules/empty_yaml/metadata.json +9 -0
  362. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +2 -1
  363. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  364. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  365. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  366. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  367. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  368. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  369. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  370. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  371. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  372. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  373. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  374. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  375. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  376. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +81 -0
  377. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  378. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  379. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  380. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  381. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  382. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_fetch_if_not_on_the_local_disk.yml +205 -0
  383. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_not_update_if_content_on_disk_is_up-to-date.yml +213 -0
  384. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  385. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_mtime_is_older_on_disk.yml +205 -0
  386. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  387. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_not_on_the_local_disk.yml +205 -0
  388. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_not_update_if_mtime_is_newer_on_disk.yml +205 -0
  389. data/spec/integration/defaults_spec.rb +14 -2
  390. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  391. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  392. data/spec/integration/node/environment_spec.rb +13 -0
  393. data/spec/integration/parser/collection_spec.rb +8 -0
  394. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  395. data/spec/integration/parser/parameter_defaults_spec.rb +336 -0
  396. data/spec/integration/parser/undef_param_spec.rb +8 -0
  397. data/spec/integration/provider/yumrepo_spec.rb +1 -1
  398. data/spec/integration/test/test_helper_spec.rb +28 -0
  399. data/spec/integration/transaction/report_spec.rb +16 -0
  400. data/spec/integration/transaction_spec.rb +11 -0
  401. data/spec/integration/type/file_spec.rb +194 -4
  402. data/spec/integration/type/package_spec.rb +5 -1
  403. data/spec/integration/type/tidy_spec.rb +21 -9
  404. data/spec/integration/util/execution_spec.rb +22 -0
  405. data/spec/integration/util/windows/principal_spec.rb +201 -0
  406. data/spec/integration/util/windows/process_spec.rb +31 -0
  407. data/spec/{unit → integration}/util/windows/registry_spec.rb +91 -1
  408. data/spec/integration/util/windows/security_spec.rb +8 -8
  409. data/spec/integration/util/windows/user_spec.rb +1 -1
  410. data/spec/integration/util_spec.rb +49 -27
  411. data/spec/lib/puppet_spec/compiler.rb +17 -0
  412. data/spec/lib/puppet_spec/files.rb +2 -2
  413. data/spec/lib/puppet_spec/pops.rb +13 -0
  414. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  415. data/spec/shared_contexts/types_setup.rb +96 -0
  416. data/spec/unit/agent_spec.rb +1 -0
  417. data/spec/unit/application/agent_spec.rb +10 -0
  418. data/spec/unit/application/apply_spec.rb +9 -0
  419. data/spec/unit/application/lookup_spec.rb +138 -28
  420. data/spec/unit/configurer/downloader_spec.rb +5 -5
  421. data/spec/unit/configurer_spec.rb +271 -39
  422. data/spec/unit/data_providers/hiera_data_provider_spec.rb +182 -5
  423. data/spec/unit/data_providers/hiera_interpolation_spec.rb +57 -0
  424. data/spec/unit/defaults_spec.rb +15 -0
  425. data/spec/unit/environments_spec.rb +24 -4
  426. data/spec/unit/face/epp_face_spec.rb +2 -2
  427. data/spec/unit/face/parser_spec.rb +43 -2
  428. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  429. data/spec/unit/file_serving/metadata_spec.rb +50 -0
  430. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  431. data/spec/unit/file_system_spec.rb +26 -0
  432. data/spec/unit/functions/assert_type_spec.rb +36 -2
  433. data/spec/unit/functions/defined_spec.rb +2 -2
  434. data/spec/unit/functions/epp_spec.rb +17 -9
  435. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  436. data/spec/unit/functions/lookup_spec.rb +88 -16
  437. data/spec/unit/functions/regsubst_spec.rb +1 -1
  438. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  439. data/spec/unit/functions/step_spec.rb +113 -0
  440. data/spec/unit/functions/type_spec.rb +35 -0
  441. data/spec/unit/functions4_spec.rb +62 -6
  442. data/spec/unit/hiera/scope_spec.rb +5 -2
  443. data/spec/unit/indirector/catalog/compiler_spec.rb +705 -4
  444. data/spec/unit/indirector/file_bucket_file/file_spec.rb +1 -1
  445. data/spec/unit/indirector/indirection_spec.rb +1 -1
  446. data/spec/unit/indirector/json_spec.rb +1 -1
  447. data/spec/unit/info_service_spec.rb +94 -32
  448. data/spec/unit/module_spec.rb +14 -0
  449. data/spec/unit/module_tool/applications/builder_spec.rb +4 -4
  450. data/spec/unit/network/authstore_spec.rb +1 -1
  451. data/spec/unit/network/http/connection_spec.rb +1 -0
  452. data/spec/unit/network/http/pool_spec.rb +30 -0
  453. data/spec/unit/node_spec.rb +8 -0
  454. data/spec/unit/parser/compiler_spec.rb +16 -18
  455. data/spec/unit/parser/scope_spec.rb +28 -11
  456. data/spec/unit/pops/evaluator/access_ops_spec.rb +7 -7
  457. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  458. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -2
  459. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +4 -4
  460. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  461. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +6 -0
  462. data/spec/unit/pops/loaders/dependency_loader_spec.rb +53 -0
  463. data/spec/unit/pops/loaders/loaders_spec.rb +127 -2
  464. data/spec/unit/pops/parser/lexer2_spec.rb +118 -3
  465. data/spec/unit/pops/parser/parse_calls_spec.rb +8 -0
  466. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  467. data/spec/unit/pops/parser/parser_spec.rb +10 -0
  468. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  469. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  470. data/spec/unit/pops/types/recursion_guard_spec.rb +91 -0
  471. data/spec/unit/pops/types/type_acceptor_spec.rb +105 -0
  472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  473. data/spec/unit/pops/types/type_calculator_spec.rb +275 -390
  474. data/spec/unit/pops/types/type_formatter_spec.rb +280 -0
  475. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +152 -0
  476. data/spec/unit/pops/types/type_parser_spec.rb +58 -13
  477. data/spec/unit/pops/types/types_spec.rb +241 -0
  478. data/spec/unit/pops/validator/validator_spec.rb +159 -15
  479. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  480. data/spec/unit/provider/group/windows_adsi_spec.rb +8 -8
  481. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  482. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  483. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  484. data/spec/unit/provider/package/dnf_spec.rb +16 -0
  485. data/spec/unit/provider/package/pip3_spec.rb +60 -42
  486. data/spec/unit/provider/package/pip_spec.rb +88 -47
  487. data/spec/unit/provider/package/pkgdmg_spec.rb +18 -9
  488. data/spec/unit/provider/package/pkgng_spec.rb +4 -2
  489. data/spec/unit/provider/package/rpm_spec.rb +2 -25
  490. data/spec/unit/provider/package/yum_spec.rb +12 -1
  491. data/spec/unit/provider/package/zypper_spec.rb +14 -0
  492. data/spec/unit/provider/service/debian_spec.rb +6 -24
  493. data/spec/unit/provider/service/init_spec.rb +11 -1
  494. data/spec/unit/provider/service/launchd_spec.rb +18 -25
  495. data/spec/unit/provider/service/systemd_spec.rb +25 -12
  496. data/spec/unit/provider/service/upstart_spec.rb +57 -0
  497. data/spec/unit/provider/sshkey/parsed_spec.rb +20 -19
  498. data/spec/unit/provider/user/directoryservice_spec.rb +40 -59
  499. data/spec/unit/provider/user/windows_adsi_spec.rb +5 -5
  500. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  501. data/spec/unit/resource/capability_finder_spec.rb +28 -15
  502. data/spec/unit/resource/catalog_spec.rb +33 -1
  503. data/spec/unit/resource/type_spec.rb +149 -7
  504. data/spec/unit/resource_spec.rb +99 -50
  505. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  506. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  507. data/spec/unit/transaction/report_spec.rb +27 -0
  508. data/spec/unit/transaction/resource_harness_spec.rb +0 -47
  509. data/spec/unit/transaction_spec.rb +5 -0
  510. data/spec/unit/type/file/checksum_spec.rb +6 -0
  511. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  512. data/spec/unit/type/file/content_spec.rb +12 -193
  513. data/spec/unit/type/file/source_spec.rb +211 -119
  514. data/spec/unit/type/file_spec.rb +133 -34
  515. data/spec/unit/type/interface_spec.rb +32 -0
  516. data/spec/unit/type/macauthorization_spec.rb +4 -1
  517. data/spec/unit/type/yumrepo_spec.rb +2 -2
  518. data/spec/unit/util/filetype_spec.rb +1 -1
  519. data/spec/unit/util/http_proxy_spec.rb +2 -2
  520. data/spec/unit/util/log/destinations_spec.rb +0 -2
  521. data/spec/unit/util/logging_spec.rb +69 -0
  522. data/spec/unit/util/multi_match_spec.rb +39 -0
  523. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  524. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  525. data/spec/unit/util/plist_spec.rb +110 -0
  526. data/spec/unit/util/resource_template_spec.rb +2 -2
  527. data/spec/unit/util/run_mode_spec.rb +27 -3
  528. data/spec/unit/util/windows/adsi_spec.rb +46 -38
  529. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  530. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  531. data/spec/unit/util/windows/sid_spec.rb +48 -11
  532. data/spec/unit/util_spec.rb +123 -13
  533. data/tasks/cfpropertylist.rake +15 -0
  534. metadata +3342 -3195
  535. data/lib/puppet/vendor/load_plist.rb +0 -1
  536. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  537. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  538. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  539. data/lib/puppet/vendor/plist/README +0 -36
  540. data/lib/puppet/vendor/plist/Rakefile +0 -144
  541. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  542. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  543. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  544. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  545. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  546. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  547. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  548. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  549. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  550. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  551. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  552. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  553. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  554. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  555. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  556. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  557. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  558. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  559. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  560. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -14,13 +14,13 @@ describe "Puppet::Util::Windows::Security", :if => Puppet.features.microsoft_win
14
14
  before :all do
15
15
  @sids = {
16
16
  :current_user => Puppet::Util::Windows::SID.name_to_sid(Puppet::Util::Windows::ADSI::User.current_user_name),
17
- :system => Win32::Security::SID::LocalSystem,
18
- :administrators => Win32::Security::SID::BuiltinAdministrators,
17
+ :system => Puppet::Util::Windows::SID::LocalSystem,
18
+ :administrators => Puppet::Util::Windows::SID::BuiltinAdministrators,
19
19
  :guest => Puppet::Util::Windows::SID.name_to_sid("Guest"),
20
- :users => Win32::Security::SID::BuiltinUsers,
21
- :power_users => Win32::Security::SID::PowerUsers,
22
- :none => Win32::Security::SID::Nobody,
23
- :everyone => Win32::Security::SID::Everyone
20
+ :users => Puppet::Util::Windows::SID::BuiltinUsers,
21
+ :power_users => Puppet::Util::Windows::SID::PowerUsers,
22
+ :none => Puppet::Util::Windows::SID::Nobody,
23
+ :everyone => Puppet::Util::Windows::SID::Everyone
24
24
  }
25
25
  # The TCP/IP NetBIOS Helper service (aka 'lmhosts') has ended up
26
26
  # disabled on some VMs for reasons we couldn't track down. This
@@ -478,7 +478,7 @@ describe "Puppet::Util::Windows::Security", :if => Puppet.features.microsoft_win
478
478
  user = Puppet::Util::Windows::ADSI::User.create("puppet#{rand(10000)}")
479
479
  user.commit
480
480
  begin
481
- sid = Puppet::Util::Windows::ADSI::User.new(user.name).sid.to_s
481
+ sid = Puppet::Util::Windows::ADSI::User.new(user.name).sid.sid
482
482
  winsec.set_owner(sid, path)
483
483
  winsec.set_mode(WindowsSecurityTester::S_IRWXU, path)
484
484
  ensure
@@ -494,7 +494,7 @@ describe "Puppet::Util::Windows::Security", :if => Puppet.features.microsoft_win
494
494
  group = Puppet::Util::Windows::ADSI::Group.create("puppet#{rand(10000)}")
495
495
  group.commit
496
496
  begin
497
- sid = Puppet::Util::Windows::ADSI::Group.new(group.name).sid.to_s
497
+ sid = Puppet::Util::Windows::ADSI::Group.new(group.name).sid.sid
498
498
  winsec.set_group(sid, path)
499
499
  winsec.set_mode(WindowsSecurityTester::S_IRWXG, path)
500
500
  ensure
@@ -67,7 +67,7 @@ describe "Puppet::Util::Windows::User", :if => Puppet.features.microsoft_windows
67
67
  yield
68
68
  }.to raise_error { |error|
69
69
  expect(error).to be_a(Puppet::Util::Windows::Error)
70
- # http://msdn.microsoft.com/en-us/library/windows/desktop/ms681385(v=vs.85).aspx
70
+ # https://msdn.microsoft.com/en-us/library/windows/desktop/ms681385(v=vs.85).aspx
71
71
  # ERROR_LOGON_FAILURE 1326
72
72
  expect(error.code).to eq(1326)
73
73
  }
@@ -27,9 +27,10 @@ describe Puppet::Util do
27
27
  expect { Puppet::Util::Execution.execute(command) }.to raise_error(Puppet::ExecutionFailure, /Execution of '#{command}' returned 43: /)
28
28
  expect($CHILD_STATUS.exitstatus).to eq(43)
29
29
  end
30
+ end
30
31
 
31
- it "replace_file should preserve original ACEs from existing replaced file on Windows",
32
- :if => Puppet.features.microsoft_windows? do
32
+ describe "#replace_file on Windows", :if => Puppet.features.microsoft_windows? do
33
+ it "replace_file should preserve original ACEs from existing replaced file on Windows" do
33
34
 
34
35
  file = tmpfile("somefile")
35
36
  FileUtils.touch(file)
@@ -54,8 +55,7 @@ describe Puppet::Util do
54
55
  expect(replaced_sd.dacl).to eq(expected_sd.dacl)
55
56
  end
56
57
 
57
- it "replace_file should use reasonable default ACEs on a new file on Windows",
58
- :if => Puppet.features.microsoft_windows? do
58
+ it "replace_file should use reasonable default ACEs on a new file on Windows" do
59
59
 
60
60
  dir = tmpdir('DACL_playground')
61
61
  protected_sd = Puppet::Util::Windows::Security.get_security_descriptor(dir)
@@ -76,36 +76,58 @@ describe Puppet::Util do
76
76
 
77
77
  expect(new_sd.dacl).to eq(expected_sd.dacl)
78
78
  end
79
- end
80
79
 
81
- it "replace_file should work with filenames that include - and . (PUP-1389)", :if => Puppet.features.microsoft_windows? do
82
- expected_content = 'some content'
83
- dir = tmpdir('ReplaceFile_playground')
84
- destination_file = File.join(dir, 'some-file.xml')
80
+ it "replace_file should work with filenames that include - and . (PUP-1389)" do
81
+ expected_content = 'some content'
82
+ dir = tmpdir('ReplaceFile_playground')
83
+ destination_file = File.join(dir, 'some-file.xml')
84
+
85
+ Puppet::Util.replace_file(destination_file, nil) do |temp_file|
86
+ temp_file.open
87
+ temp_file.write(expected_content)
88
+ end
85
89
 
86
- Puppet::Util.replace_file(destination_file, nil) do |temp_file|
87
- temp_file.open
88
- temp_file.write(expected_content)
90
+ actual_content = File.read(destination_file)
91
+ expect(actual_content).to eq(expected_content)
89
92
  end
90
93
 
91
- actual_content = File.read(destination_file)
92
- expect(actual_content).to eq(expected_content)
94
+ it "replace_file should work with filenames that include special characters (PUP-1389)" do
95
+ expected_content = 'some content'
96
+ dir = tmpdir('ReplaceFile_playground')
97
+ # http://www.fileformat.info/info/unicode/char/00e8/index.htm
98
+ # dest_name = "somèfile.xml"
99
+ dest_name = "som\u00E8file.xml"
100
+ destination_file = File.join(dir, dest_name)
101
+
102
+ Puppet::Util.replace_file(destination_file, nil) do |temp_file|
103
+ temp_file.open
104
+ temp_file.write(expected_content)
105
+ end
106
+
107
+ actual_content = File.read(destination_file)
108
+ expect(actual_content).to eq(expected_content)
109
+ end
93
110
  end
94
111
 
95
- it "replace_file should work with filenames that include special characters (PUP-1389)", :if => Puppet.features.microsoft_windows? do
96
- expected_content = 'some content'
97
- dir = tmpdir('ReplaceFile_playground')
98
- # http://www.fileformat.info/info/unicode/char/00e8/index.htm
99
- # dest_name = "somèfile.xml"
100
- dest_name = "som\u00E8file.xml"
101
- destination_file = File.join(dir, dest_name)
102
-
103
- Puppet::Util.replace_file(destination_file, nil) do |temp_file|
104
- temp_file.open
105
- temp_file.write(expected_content)
112
+ describe "#which on Windows", :if => Puppet.features.microsoft_windows? do
113
+ let (:rune_utf8) { "\u16A0\u16C7\u16BB\u16EB\u16D2\u16E6\u16A6\u16EB\u16A0\u16B1\u16A9\u16A0\u16A2\u16B1\u16EB\u16A0\u16C1\u16B1\u16AA\u16EB\u16B7\u16D6\u16BB\u16B9\u16E6\u16DA\u16B3\u16A2\u16D7" }
114
+ let (:filename) { 'foo.exe' }
115
+ let (:filepath) { File.expand_path('C:\\' + rune_utf8 + '\\' + filename) }
116
+
117
+ before :each do
118
+ FileTest.stubs(:file?).returns false
119
+ FileTest.stubs(:file?).with(filepath).returns true
120
+
121
+ FileTest.stubs(:executable?).returns false
122
+ FileTest.stubs(:executable?).with(filepath).returns true
106
123
  end
107
124
 
108
- actual_content = File.read(destination_file)
109
- expect(actual_content).to eq(expected_content)
125
+ it "should be able to use UTF8 characters in the path" do
126
+ path = "C:\\" + rune_utf8 + "#{File::PATH_SEPARATOR}c:\\windows\\system32#{File::PATH_SEPARATOR}c:\\windows"
127
+ Puppet::Util.withenv( { "PATH" => path } , :windows) do
128
+ expect(Puppet::Util.which(filename)).to eq(filepath)
129
+ end
130
+ end
110
131
  end
132
+
111
133
  end
@@ -46,4 +46,21 @@ module PuppetSpec::Compiler
46
46
  relationships.traverse { |resource| order_seen << resource.ref }
47
47
  order_seen
48
48
  end
49
+
50
+ def collect_notices(code, node = Puppet::Node.new('foonode'))
51
+ Puppet[:code] = code
52
+ compiler = Puppet::Parser::Compiler.new(node)
53
+ logs = []
54
+ Puppet::Util::Log.with_destination(Puppet::Test::LogCollector.new(logs)) do
55
+ yield(compiler)
56
+ end
57
+ logs = logs.select { |log| log.level == :notice }.map { |log| log.message }
58
+ logs
59
+ end
60
+
61
+ def eval_and_collect_notices(code, node = Puppet::Node.new('foonode'))
62
+ collect_notices(code, node) do |compiler|
63
+ compiler.compile
64
+ end
65
+ end
49
66
  end
@@ -28,7 +28,7 @@ module PuppetSpec::Files
28
28
  def self.tmpfile(name, dir = nil)
29
29
  # Generate a temporary file, just for the name...
30
30
  source = dir ? Tempfile.new(name, dir) : Tempfile.new(name)
31
- path = source.path
31
+ path = source.path.encode(Encoding::UTF_8)
32
32
  source.close!
33
33
 
34
34
  record_tmp(File.expand_path(path))
@@ -59,7 +59,7 @@ module PuppetSpec::Files
59
59
 
60
60
  def tmpdir(name) PuppetSpec::Files.tmpdir(name) end
61
61
  def self.tmpdir(name)
62
- dir = Dir.mktmpdir(name)
62
+ dir = Dir.mktmpdir(name).encode!(Encoding::UTF_8)
63
63
 
64
64
  record_tmp(dir)
65
65
 
@@ -13,4 +13,17 @@ module PuppetSpec::Pops
13
13
  "expected Acceptor[#{actual.diagnostics.collect { |i| i.issue.issue_code }.join(',')}] to not contain issue #{expected.issue_code}"
14
14
  end
15
15
  end
16
+
17
+ # Checks if an Acceptor has any issues
18
+ matcher :have_any_issues do
19
+ match do |actual|
20
+ !actual.diagnostics.empty?
21
+ end
22
+ failure_message do |actual|
23
+ 'expected Acceptor[] to contain at least one issue'
24
+ end
25
+ failure_message_when_negated do |actual|
26
+ "expected Acceptor[#{actual.diagnostics.collect { |i| i.issue.issue_code }.join(',')}] to not contain any issues"
27
+ end
28
+ end
16
29
  end
@@ -16,7 +16,7 @@ shared_examples_for 'all iterative functions argument checks' do |func|
16
16
  compile_to_catalog(<<-MANIFEST)
17
17
  3.14.#{func} |$k, $v| { }
18
18
  MANIFEST
19
- end.to raise_error(Puppet::Error, /must be something enumerable/)
19
+ end.to raise_error(Puppet::Error, /expects an Iterable value, got Float/)
20
20
  end
21
21
 
22
22
  it 'raises an error when called with any parameters besides a block' do
@@ -0,0 +1,96 @@
1
+ shared_context 'types_setup' do
2
+
3
+ # Do not include the special type Unit in this list
4
+ def all_types
5
+ [ Puppet::Pops::Types::PAnyType,
6
+ Puppet::Pops::Types::PUndefType,
7
+ Puppet::Pops::Types::PNotUndefType,
8
+ Puppet::Pops::Types::PDataType,
9
+ Puppet::Pops::Types::PScalarType,
10
+ Puppet::Pops::Types::PStringType,
11
+ Puppet::Pops::Types::PNumericType,
12
+ Puppet::Pops::Types::PIntegerType,
13
+ Puppet::Pops::Types::PFloatType,
14
+ Puppet::Pops::Types::PRegexpType,
15
+ Puppet::Pops::Types::PBooleanType,
16
+ Puppet::Pops::Types::PCollectionType,
17
+ Puppet::Pops::Types::PArrayType,
18
+ Puppet::Pops::Types::PHashType,
19
+ Puppet::Pops::Types::PIterableType,
20
+ Puppet::Pops::Types::PIteratorType,
21
+ Puppet::Pops::Types::PRuntimeType,
22
+ Puppet::Pops::Types::PHostClassType,
23
+ Puppet::Pops::Types::PResourceType,
24
+ Puppet::Pops::Types::PPatternType,
25
+ Puppet::Pops::Types::PEnumType,
26
+ Puppet::Pops::Types::PVariantType,
27
+ Puppet::Pops::Types::PStructType,
28
+ Puppet::Pops::Types::PTupleType,
29
+ Puppet::Pops::Types::PCallableType,
30
+ Puppet::Pops::Types::PType,
31
+ Puppet::Pops::Types::POptionalType,
32
+ Puppet::Pops::Types::PDefaultType,
33
+ Puppet::Pops::Types::PTypeReferenceType,
34
+ Puppet::Pops::Types::PTypeAliasType,
35
+ ]
36
+ end
37
+
38
+ def scalar_types
39
+ # PVariantType is also scalar, if its types are all Scalar
40
+ [
41
+ Puppet::Pops::Types::PScalarType,
42
+ Puppet::Pops::Types::PStringType,
43
+ Puppet::Pops::Types::PNumericType,
44
+ Puppet::Pops::Types::PIntegerType,
45
+ Puppet::Pops::Types::PFloatType,
46
+ Puppet::Pops::Types::PRegexpType,
47
+ Puppet::Pops::Types::PBooleanType,
48
+ Puppet::Pops::Types::PPatternType,
49
+ Puppet::Pops::Types::PEnumType,
50
+ ]
51
+ end
52
+
53
+ def numeric_types
54
+ # PVariantType is also numeric, if its types are all numeric
55
+ [
56
+ Puppet::Pops::Types::PNumericType,
57
+ Puppet::Pops::Types::PIntegerType,
58
+ Puppet::Pops::Types::PFloatType,
59
+ ]
60
+ end
61
+
62
+ def string_types
63
+ # PVariantType is also string type, if its types are all compatible
64
+ [
65
+ Puppet::Pops::Types::PStringType,
66
+ Puppet::Pops::Types::PPatternType,
67
+ Puppet::Pops::Types::PEnumType,
68
+ ]
69
+ end
70
+
71
+ def collection_types
72
+ # PVariantType is also string type, if its types are all compatible
73
+ [
74
+ Puppet::Pops::Types::PCollectionType,
75
+ Puppet::Pops::Types::PHashType,
76
+ Puppet::Pops::Types::PArrayType,
77
+ Puppet::Pops::Types::PStructType,
78
+ Puppet::Pops::Types::PTupleType,
79
+ ]
80
+ end
81
+
82
+ def data_compatible_types
83
+ result = scalar_types
84
+ result << Puppet::Pops::Types::PDataType
85
+ result << array_t(types::PDataType::DEFAULT)
86
+ result << types::TypeFactory.hash_of_data
87
+ result << Puppet::Pops::Types::PUndefType
88
+ result << not_undef_t(types::PDataType.new)
89
+ result << constrained_tuple_t(range_t(0, nil), types::PDataType::DEFAULT)
90
+ result
91
+ end
92
+
93
+ def type_from_class(c)
94
+ c.is_a?(Class) ? c::DEFAULT : c
95
+ end
96
+ end
@@ -1,6 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
3
  require 'puppet/agent'
4
+ require 'puppet/configurer'
4
5
 
5
6
  class AgentTestClient
6
7
  def run
@@ -343,12 +343,22 @@ describe Puppet::Application::Agent do
343
343
 
344
344
  it "should not set catalog cache class if :catalog_cache_terminus is explicitly nil" do
345
345
  Puppet[:catalog_cache_terminus] = nil
346
+ Puppet::Resource::Catalog.indirection.unstub(:cache_class=)
346
347
  Puppet::Resource::Catalog.indirection.expects(:cache_class=).never
347
348
 
348
349
  @puppetd.initialize_app_defaults
349
350
  @puppetd.setup
350
351
  end
351
352
 
353
+ it "should set catalog cache class to nil during a noop run" do
354
+ Puppet[:catalog_cache_terminus] = "json"
355
+ Puppet[:noop] = true
356
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(nil)
357
+
358
+ @puppetd.initialize_app_defaults
359
+ @puppetd.setup
360
+ end
361
+
352
362
  it "should default facts_terminus setting to 'facter'" do
353
363
  @puppetd.initialize_app_defaults
354
364
  expect(Puppet[:facts_terminus]).to eq(:facter)
@@ -478,4 +478,13 @@ describe Puppet::Application::Apply do
478
478
  @apply.initialize_app_defaults
479
479
  @apply.setup
480
480
  end
481
+
482
+ it "should set catalog cache class to nil during a noop run" do
483
+ Puppet[:catalog_cache_terminus] = "json"
484
+ Puppet[:noop] = true
485
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(nil)
486
+
487
+ @apply.initialize_app_defaults
488
+ @apply.setup
489
+ end
481
490
  end
@@ -14,6 +14,16 @@ describe Puppet::Application::Lookup do
14
14
  expect { lookup.run_command }.to raise_error(RuntimeError, expected_error)
15
15
  end
16
16
 
17
+ it "does not allow invalid arguments for '--merge'" do
18
+ lookup.options[:node] = 'dantooine.local'
19
+ lookup.options[:merge] = 'something_bad'
20
+ lookup.command_line.stubs(:args).returns(['atton', 'kreia'])
21
+
22
+ expected_error = "The --merge option only accepts 'first', 'hash', 'unique', or 'deep'\nRun 'puppet lookup --help' for more details"
23
+
24
+ expect { lookup.run_command }.to raise_error(RuntimeError, expected_error)
25
+ end
26
+
17
27
  it "does not allow deep merge options if '--merge' was not set to deep" do
18
28
  lookup.options[:node] = 'dantooine.local'
19
29
  lookup.options[:merge_hash_arrays] = true
@@ -44,6 +54,18 @@ describe Puppet::Application::Lookup do
44
54
  expect { lookup.run_command }.to output("rand\n").to_stdout
45
55
  end
46
56
 
57
+ %w(first unique hash deep).each do |opt|
58
+
59
+ it "accepts --merge #{opt}" do
60
+ lookup.options[:node] = 'dantooine.local'
61
+ lookup.options[:merge] = opt
62
+ lookup.command_line.stubs(:args).returns(['atton', 'kreia'])
63
+ lookup.stubs(:generate_scope).yields('scope')
64
+ Puppet::Pops::Lookup.stubs(:lookup).returns('rand')
65
+ expect { lookup.run_command }.to output("--- rand\n...\n").to_stdout
66
+ end
67
+ end
68
+
47
69
  it "prints the value found by lookup" do
48
70
  lookup.options[:node] = 'dantooine.local'
49
71
  lookup.command_line.stubs(:args).returns(['atton', 'kreia'])
@@ -56,7 +78,7 @@ describe Puppet::Application::Lookup do
56
78
  end
57
79
 
58
80
 
59
- context 'when asked to explain' do
81
+ context 'when given a valid configuration' do
60
82
  let (:lookup) { Puppet::Application[:lookup] }
61
83
 
62
84
  # There is a fully configured 'sample' environment in fixtures at this location
@@ -64,7 +86,7 @@ describe Puppet::Application::Lookup do
64
86
 
65
87
  let(:facts) { Puppet::Node::Facts.new("facts", {}) }
66
88
 
67
- let(:node) { Puppet::Node.new("testnode", :facts => facts, :environment => environment) }
89
+ let(:node) { Puppet::Node.new("testnode", :facts => facts, :environment => 'production') }
68
90
 
69
91
  let(:expected_json_hash) { {
70
92
  'type' => 'merge',
@@ -104,30 +126,30 @@ describe Puppet::Application::Lookup do
104
126
  :event => :result,
105
127
  :value => 'This is A',
106
128
  :branches => [
107
- { :key => 'a',
108
- :event => :not_found,
109
- :type => :global,
110
- :name => :hiera
111
- },
112
- {
113
- :type => :data_provider,
114
- :name => 'Hiera Data Provider, version 4',
115
- :configuration_path => "#{environmentpath}/production/hiera.yaml",
116
- :branches => [
129
+ { :key => 'a',
130
+ :event => :not_found,
131
+ :type => :global,
132
+ :name => :hiera
133
+ },
117
134
  {
118
135
  :type => :data_provider,
119
- :name => 'common',
136
+ :name => 'Hiera Data Provider, version 4',
137
+ :configuration_path => "#{environmentpath}/production/hiera.yaml",
120
138
  :branches => [
121
- {
122
- :key => 'a',
123
- :value => 'This is A',
124
- :event => :found,
125
- :type => :path,
126
- :original_path => 'common',
127
- :path => "#{environmentpath}/production/data/common.yaml",
128
- }]
129
- }]
130
- }]
139
+ {
140
+ :type => :data_provider,
141
+ :name => 'common',
142
+ :branches => [
143
+ {
144
+ :key => 'a',
145
+ :value => 'This is A',
146
+ :event => :found,
147
+ :type => :path,
148
+ :original_path => 'common',
149
+ :path => "#{environmentpath}/production/data/common.yaml",
150
+ }]
151
+ }]
152
+ }]
131
153
  } }
132
154
 
133
155
  around(:each) do |example|
@@ -140,8 +162,8 @@ describe Puppet::Application::Lookup do
140
162
  end
141
163
  end
142
164
 
143
- it 'produces human readable text by default' do
144
- lookup.options[:node] = Puppet::Node.new("testnode", :facts => facts, :environment => 'production')
165
+ it '--explain produces human readable text by default' do
166
+ lookup.options[:node] = node
145
167
  lookup.options[:explain] = true
146
168
  lookup.command_line.stubs(:args).returns(['a'])
147
169
  expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
@@ -152,14 +174,70 @@ Merge strategy first
152
174
  ConfigurationPath "#{environmentpath}/production/hiera.yaml"
153
175
  Data Provider "common"
154
176
  Path "#{environmentpath}/production/data/common.yaml"
155
- Original path: common
177
+ Original path: "common"
156
178
  Found key: "a" value: "This is A"
157
179
  Merged result: "This is A"
158
180
  EXPLANATION
159
181
  end
160
182
 
183
+ it '--explain produces human readable text of a hash merge when using --explain-options' do
184
+ lookup.options[:node] = node
185
+ lookup.options[:explain_options] = true
186
+ expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
187
+ Merge strategy hash
188
+ Data Binding "hiera"
189
+ No such key: "lookup_options"
190
+ Data Provider "Hiera Data Provider, version 4"
191
+ ConfigurationPath "#{environmentpath}/production/hiera.yaml"
192
+ Data Provider "common"
193
+ Path "#{environmentpath}/production/data/common.yaml"
194
+ Original path: "common"
195
+ Found key: "lookup_options" value: {
196
+ "a" => "first"
197
+ }
198
+ Merged result: {
199
+ "a" => "first"
200
+ }
201
+ EXPLANATION
202
+ end
203
+
204
+ it '--explain produces human readable text of a hash merge when using both --explain and --explain-options' do
205
+ lookup.options[:node] = node
206
+ lookup.options[:explain] = true
207
+ lookup.options[:explain_options] = true
208
+ lookup.command_line.stubs(:args).returns(['a'])
209
+ expect { lookup.run_command }.to output(<<-EXPLANATION).to_stdout
210
+ Searching for "lookup_options"
211
+ Merge strategy hash
212
+ Data Binding "hiera"
213
+ No such key: "lookup_options"
214
+ Data Provider "Hiera Data Provider, version 4"
215
+ ConfigurationPath "#{environmentpath}/production/hiera.yaml"
216
+ Data Provider "common"
217
+ Path "#{environmentpath}/production/data/common.yaml"
218
+ Original path: "common"
219
+ Found key: "lookup_options" value: {
220
+ "a" => "first"
221
+ }
222
+ Merged result: {
223
+ "a" => "first"
224
+ }
225
+ Searching for "a"
226
+ Merge strategy first
227
+ Data Binding "hiera"
228
+ No such key: "a"
229
+ Data Provider "Hiera Data Provider, version 4"
230
+ ConfigurationPath "#{environmentpath}/production/hiera.yaml"
231
+ Data Provider "common"
232
+ Path "#{environmentpath}/production/data/common.yaml"
233
+ Original path: "common"
234
+ Found key: "a" value: "This is A"
235
+ Merged result: "This is A"
236
+ EXPLANATION
237
+ end
238
+
161
239
  it 'can produce a yaml explanation' do
162
- lookup.options[:node] = Puppet::Node.new("testnode", :facts => facts, :environment => 'production')
240
+ lookup.options[:node] = node
163
241
  lookup.options[:explain] = true
164
242
  lookup.options[:render_as] = :yaml
165
243
  lookup.command_line.stubs(:args).returns(['a'])
@@ -176,7 +254,7 @@ Merge strategy first
176
254
  end
177
255
 
178
256
  it 'can produce a json explanation' do
179
- lookup.options[:node] = Puppet::Node.new("testnode", :facts => facts, :environment => 'production')
257
+ lookup.options[:node] = node
180
258
  lookup.options[:explain] = true
181
259
  lookup.options[:render_as] = :json
182
260
  lookup.command_line.stubs(:args).returns(['a'])
@@ -191,5 +269,37 @@ Merge strategy first
191
269
  end
192
270
  expect(JSON.parse(output)).to eq(expected_json_hash)
193
271
  end
272
+
273
+ context 'the global scope' do
274
+ it "is unaffected by global variables unless '--compile' is used" do
275
+ lookup.options[:node] = node
276
+ lookup.command_line.stubs(:args).returns(['c'])
277
+ expect { lookup.run_command }.to output("--- This is\n...\n").to_stdout
278
+ end
279
+
280
+ it "is affected by global variables when '--compile' is used" do
281
+ lookup.options[:node] = node
282
+ lookup.options[:compile] = true
283
+ lookup.command_line.stubs(:args).returns(['c'])
284
+ expect { lookup.run_command }.to output("--- This is C from site.pp\n...\n").to_stdout
285
+ end
286
+ end
287
+
288
+ context 'using a puppet function as data provider' do
289
+ let(:node) { Puppet::Node.new("testnode", :facts => facts, :environment => 'puppet_func_provider') }
290
+
291
+ it "works OK in the absense of '--compile'" do
292
+ lookup.options[:node] = node
293
+ lookup.command_line.stubs(:args).returns(['c'])
294
+ expect { lookup.run_command }.to output("--- This is C from data.pp\n...\n").to_stdout
295
+ end
296
+
297
+ it "global scope is affected by global variables when '--compile' is used" do
298
+ lookup.options[:node] = node
299
+ lookup.options[:compile] = true
300
+ lookup.command_line.stubs(:args).returns(['c'])
301
+ expect { lookup.run_command }.to output("--- This is C from site.pp\n...\n").to_stdout
302
+ end
303
+ end
194
304
  end
195
305
  end
@@ -82,13 +82,13 @@ describe Puppet::Configurer::Downloader do
82
82
  expect(file[:source_permissions]).to eq(:ignore)
83
83
  end
84
84
 
85
- it "should allow source_permissions to be overridden" do
86
- file = generate_file_resource(:source_permissions => :use)
85
+ describe "on POSIX", :if => Puppet.features.posix? do
86
+ it "should allow source_permissions to be overridden" do
87
+ file = generate_file_resource(:source_permissions => :use)
87
88
 
88
- expect(file[:source_permissions]).to eq(:use)
89
- end
89
+ expect(file[:source_permissions]).to eq(:use)
90
+ end
90
91
 
91
- describe "on POSIX", :if => Puppet.features.posix? do
92
92
  it "should always set the owner to the current UID" do
93
93
  Process.expects(:uid).returns 51
94
94