puppet 4.0.0 → 4.10.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 (1667) hide show
  1. checksums.yaml +4 -4
  2. data/COMMITTERS.md +2 -2
  3. data/CONTRIBUTING.md +34 -10
  4. data/Gemfile +26 -9
  5. data/LICENSE +3 -3
  6. data/MAINTAINERS +71 -0
  7. data/README.md +9 -11
  8. data/Rakefile +35 -0
  9. data/conf/auth.conf +2 -2
  10. data/conf/puppet.conf +1 -1
  11. data/ext/README.environment +1 -1
  12. data/ext/build_defaults.yaml +10 -37
  13. data/ext/debian/README.source +1 -1
  14. data/ext/debian/control +3 -5
  15. data/ext/debian/copyright +4 -4
  16. data/ext/debian/puppet.default +0 -5
  17. data/ext/debian/puppet.init +1 -16
  18. data/ext/debian/puppet.logrotate +14 -5
  19. data/ext/debian/puppetmaster.README.debian +11 -9
  20. data/ext/emacs/puppet-mode.el +1 -1
  21. data/ext/envpuppet +2 -2
  22. data/ext/ips/puppetagent.xml +1 -1
  23. data/ext/ips/puppetmaster.xml +1 -1
  24. data/ext/osx/puppet.plist +30 -0
  25. data/ext/project_data.yaml +31 -15
  26. data/ext/puppet-test +3 -3
  27. data/ext/rack/example-passenger-vhost.conf +1 -1
  28. data/ext/redhat/client.init +67 -17
  29. data/ext/redhat/client.sysconfig +1 -10
  30. data/ext/redhat/logrotate +15 -3
  31. data/ext/redhat/puppet.spec.erb +6 -11
  32. data/ext/redhat/server.init +1 -1
  33. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  34. data/ext/solaris/pkginfo +1 -1
  35. data/ext/solaris/smf/puppet +44 -0
  36. data/ext/solaris/smf/puppet.xml +44 -0
  37. data/ext/suse/client.init +30 -33
  38. data/ext/suse/puppet.spec +2 -2
  39. data/ext/suse/server.init +2 -2
  40. data/ext/systemd/puppet.service +13 -1
  41. data/ext/upload_facts.rb +1 -1
  42. data/ext/windows/puppet_interactive.bat +6 -0
  43. data/ext/windows/puppet_shell.bat +9 -0
  44. data/ext/windows/run_puppet_interactive.bat +9 -0
  45. data/ext/windows/service/daemon.rb +2 -1
  46. data/ext/yaml_nodes.rb +1 -1
  47. data/install.rb +98 -65
  48. data/lib/hiera/puppet_function.rb +28 -18
  49. data/lib/hiera/scope.rb +12 -14
  50. data/lib/hiera_puppet.rb +6 -14
  51. data/lib/puppet/agent/locker.rb +11 -2
  52. data/lib/puppet/agent.rb +12 -27
  53. data/lib/puppet/application/agent.rb +40 -19
  54. data/lib/puppet/application/apply.rb +69 -16
  55. data/lib/puppet/application/ca.rb +1 -0
  56. data/lib/puppet/application/cert.rb +52 -3
  57. data/lib/puppet/application/device.rb +10 -5
  58. data/lib/puppet/application/face_base.rb +4 -0
  59. data/lib/puppet/application/filebucket.rb +79 -5
  60. data/lib/puppet/application/generate.rb +5 -0
  61. data/lib/puppet/application/inspect.rb +5 -2
  62. data/lib/puppet/application/lookup.rb +344 -0
  63. data/lib/puppet/application/master.rb +22 -7
  64. data/lib/puppet/application/resource.rb +2 -6
  65. data/lib/puppet/application.rb +20 -4
  66. data/lib/puppet/application_support.rb +1 -1
  67. data/lib/puppet/compilable_resource_type.rb +15 -0
  68. data/lib/puppet/configurer/plugin_handler.rb +7 -5
  69. data/lib/puppet/configurer.rb +184 -42
  70. data/lib/puppet/context/trusted_information.rb +21 -1
  71. data/lib/puppet/context.rb +16 -1
  72. data/lib/puppet/daemon.rb +17 -13
  73. data/lib/puppet/data_binding.rb +4 -2
  74. data/lib/puppet/data_providers/data_adapter.rb +14 -68
  75. data/lib/puppet/data_providers/data_function_support.rb +13 -26
  76. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -9
  77. data/lib/puppet/data_providers/function_module_data_provider.rb +7 -22
  78. data/lib/puppet/data_providers/hiera_config.rb +151 -0
  79. data/lib/puppet/data_providers/hiera_env_data_provider.rb +25 -0
  80. data/lib/puppet/data_providers/hiera_interpolate.rb +21 -0
  81. data/lib/puppet/data_providers/hiera_module_data_provider.rb +30 -0
  82. data/lib/puppet/data_providers/hiera_support.rb +42 -0
  83. data/lib/puppet/data_providers/json_data_provider_factory.rb +38 -0
  84. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +40 -0
  85. data/lib/puppet/data_providers.rb +17 -14
  86. data/lib/puppet/defaults.rb +291 -59
  87. data/lib/puppet/environments.rb +105 -10
  88. data/lib/puppet/error.rb +31 -1
  89. data/lib/puppet/etc.rb +125 -0
  90. data/lib/puppet/external/dot.rb +1 -1
  91. data/lib/puppet/face/ca.rb +6 -1
  92. data/lib/puppet/face/catalog.rb +1 -1
  93. data/lib/puppet/face/certificate.rb +7 -1
  94. data/lib/puppet/face/certificate_request.rb +2 -0
  95. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  96. data/lib/puppet/face/config.rb +2 -2
  97. data/lib/puppet/face/epp.rb +63 -17
  98. data/lib/puppet/face/file.rb +3 -0
  99. data/lib/puppet/face/generate.rb +64 -0
  100. data/lib/puppet/face/help/face.erb +3 -0
  101. data/lib/puppet/face/help/man.erb +1 -1
  102. data/lib/puppet/face/help.rb +35 -27
  103. data/lib/puppet/face/key.rb +1 -0
  104. data/lib/puppet/face/man.rb +5 -3
  105. data/lib/puppet/face/module/changes.rb +2 -1
  106. data/lib/puppet/face/module/generate.rb +1 -1
  107. data/lib/puppet/face/module/install.rb +6 -6
  108. data/lib/puppet/face/parser.rb +12 -9
  109. data/lib/puppet/face/plugin.rb +7 -14
  110. data/lib/puppet/face/status.rb +4 -1
  111. data/lib/puppet/feature/base.rb +9 -2
  112. data/lib/puppet/feature/cfacter.rb +1 -0
  113. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  114. data/lib/puppet/feature/external_facts.rb +1 -1
  115. data/lib/puppet/feature/hiera_eyaml.rb +3 -0
  116. data/lib/puppet/feature/hocon.rb +3 -0
  117. data/lib/puppet/feature/telnet.rb +9 -0
  118. data/lib/puppet/file_bucket/dipper.rb +58 -2
  119. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  120. data/lib/puppet/file_serving/metadata.rb +30 -9
  121. data/lib/puppet/file_serving/terminus_helper.rb +7 -8
  122. data/lib/puppet/file_serving/terminus_selector.rb +2 -0
  123. data/lib/puppet/file_system/file_impl.rb +11 -2
  124. data/lib/puppet/file_system/memory_impl.rb +9 -1
  125. data/lib/puppet/file_system/path_pattern.rb +1 -0
  126. data/lib/puppet/file_system/uniquefile.rb +3 -3
  127. data/lib/puppet/file_system/windows.rb +36 -13
  128. data/lib/puppet/file_system.rb +46 -5
  129. data/lib/puppet/forge/repository.rb +3 -35
  130. data/lib/puppet/forge.rb +7 -7
  131. data/lib/puppet/functions/alert.rb +14 -0
  132. data/lib/puppet/functions/assert_type.rb +53 -19
  133. data/lib/puppet/functions/binary_file.rb +19 -0
  134. data/lib/puppet/functions/break.rb +22 -0
  135. data/lib/puppet/functions/contain.rb +33 -0
  136. data/lib/puppet/functions/crit.rb +14 -0
  137. data/lib/puppet/functions/debug.rb +14 -0
  138. data/lib/puppet/functions/defined.rb +160 -0
  139. data/lib/puppet/functions/dig.rb +23 -0
  140. data/lib/puppet/functions/each.rb +89 -39
  141. data/lib/puppet/functions/emerg.rb +14 -0
  142. data/lib/puppet/functions/epp.rb +29 -37
  143. data/lib/puppet/functions/err.rb +14 -0
  144. data/lib/puppet/functions/eyaml_lookup_key.rb +90 -0
  145. data/lib/puppet/functions/filter.rb +64 -38
  146. data/lib/puppet/functions/find_file.rb +31 -0
  147. data/lib/puppet/functions/hiera.rb +76 -3
  148. data/lib/puppet/functions/hiera_array.rb +66 -4
  149. data/lib/puppet/functions/hiera_hash.rb +74 -2
  150. data/lib/puppet/functions/hiera_include.rb +78 -5
  151. data/lib/puppet/functions/hocon_data.rb +35 -0
  152. data/lib/puppet/functions/include.rb +21 -0
  153. data/lib/puppet/functions/info.rb +14 -0
  154. data/lib/puppet/functions/inline_epp.rb +44 -71
  155. data/lib/puppet/functions/json_data.rb +29 -0
  156. data/lib/puppet/functions/lest.rb +17 -0
  157. data/lib/puppet/functions/lookup.rb +172 -184
  158. data/lib/puppet/functions/map.rb +60 -33
  159. data/lib/puppet/functions/match.rb +30 -12
  160. data/lib/puppet/functions/new.rb +31 -0
  161. data/lib/puppet/functions/next.rb +23 -0
  162. data/lib/puppet/functions/notice.rb +14 -0
  163. data/lib/puppet/functions/reduce.rb +99 -70
  164. data/lib/puppet/functions/regsubst.rb +23 -26
  165. data/lib/puppet/functions/require.rb +37 -0
  166. data/lib/puppet/functions/return.rb +22 -0
  167. data/lib/puppet/functions/reverse_each.rb +25 -0
  168. data/lib/puppet/functions/scanf.rb +15 -18
  169. data/lib/puppet/functions/slice.rb +22 -36
  170. data/lib/puppet/functions/split.rb +3 -3
  171. data/lib/puppet/functions/step.rb +26 -0
  172. data/lib/puppet/functions/strftime.rb +35 -0
  173. data/lib/puppet/functions/then.rb +14 -0
  174. data/lib/puppet/functions/type.rb +31 -0
  175. data/lib/puppet/functions/unwrap.rb +40 -0
  176. data/lib/puppet/functions/versioncmp.rb +36 -0
  177. data/lib/puppet/functions/warning.rb +14 -0
  178. data/lib/puppet/functions/with.rb +15 -7
  179. data/lib/puppet/functions/yaml_data.rb +38 -0
  180. data/lib/puppet/functions.rb +213 -35
  181. data/lib/puppet/generate/models/type/property.rb +70 -0
  182. data/lib/puppet/generate/models/type/type.rb +61 -0
  183. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  184. data/lib/puppet/generate/type.rb +239 -0
  185. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  186. data/lib/puppet/graph/simple_graph.rb +6 -8
  187. data/lib/puppet/indirector/catalog/compiler.rb +196 -9
  188. data/lib/puppet/indirector/catalog/static_compiler.rb +50 -31
  189. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  190. data/lib/puppet/indirector/face.rb +6 -1
  191. data/lib/puppet/indirector/facts/facter.rb +9 -1
  192. data/lib/puppet/indirector/file_bucket_file/file.rb +137 -25
  193. data/lib/puppet/indirector/file_content/http.rb +15 -0
  194. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  195. data/lib/puppet/indirector/generic_http.rb +16 -0
  196. data/lib/puppet/indirector/hiera.rb +7 -1
  197. data/lib/puppet/indirector/indirection.rb +12 -3
  198. data/lib/puppet/indirector/json.rb +3 -3
  199. data/lib/puppet/indirector/key/ca.rb +2 -2
  200. data/lib/puppet/indirector/key/file.rb +2 -1
  201. data/lib/puppet/indirector/msgpack.rb +2 -2
  202. data/lib/puppet/indirector/node/exec.rb +1 -1
  203. data/lib/puppet/indirector/node/ldap.rb +1 -1
  204. data/lib/puppet/indirector/request.rb +36 -12
  205. data/lib/puppet/indirector/resource_type/parser.rb +10 -3
  206. data/lib/puppet/indirector/rest.rb +80 -5
  207. data/lib/puppet/indirector/ssl_file.rb +24 -3
  208. data/lib/puppet/indirector/terminus.rb +4 -4
  209. data/lib/puppet/info_service/class_information_service.rb +111 -0
  210. data/lib/puppet/info_service.rb +7 -0
  211. data/lib/puppet/interface/documentation.rb +1 -1
  212. data/lib/puppet/interface/face_collection.rb +1 -1
  213. data/lib/puppet/interface.rb +14 -2
  214. data/lib/puppet/loaders.rb +6 -0
  215. data/lib/puppet/metatype/manager.rb +25 -8
  216. data/lib/puppet/module.rb +65 -31
  217. data/lib/puppet/module_tool/applications/application.rb +1 -1
  218. data/lib/puppet/module_tool/applications/builder.rb +5 -4
  219. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  220. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  221. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  222. data/lib/puppet/module_tool/checksums.rb +1 -1
  223. data/lib/puppet/module_tool/errors/installer.rb +2 -2
  224. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  225. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  226. data/lib/puppet/module_tool/metadata.rb +34 -11
  227. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +14 -3
  228. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  229. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
  230. data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +2 -2
  231. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  232. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -2
  233. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  234. data/lib/puppet/module_tool.rb +5 -5
  235. data/lib/puppet/network/auth_config_parser.rb +1 -1
  236. data/lib/puppet/network/authconfig.rb +21 -1
  237. data/lib/puppet/network/authorization.rb +8 -1
  238. data/lib/puppet/network/http/api/indirected_routes.rb +23 -34
  239. data/lib/puppet/network/http/api/master/v3/environment.rb +63 -0
  240. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  241. data/lib/puppet/network/http/compression.rb +2 -1
  242. data/lib/puppet/network/http/connection.rb +2 -0
  243. data/lib/puppet/network/http/error.rb +1 -1
  244. data/lib/puppet/network/http/factory.rb +8 -4
  245. data/lib/puppet/network/http/handler.rb +3 -2
  246. data/lib/puppet/network/http/pool.rb +9 -0
  247. data/lib/puppet/network/http/rack/rest.rb +25 -2
  248. data/lib/puppet/network/http/webrick.rb +2 -1
  249. data/lib/puppet/network/rights.rb +1 -11
  250. data/lib/puppet/node/environment.rb +53 -14
  251. data/lib/puppet/node/facts.rb +1 -1
  252. data/lib/puppet/node.rb +39 -8
  253. data/lib/puppet/parameter/boolean.rb +1 -1
  254. data/lib/puppet/parameter/value.rb +1 -1
  255. data/lib/puppet/parameter.rb +23 -3
  256. data/lib/puppet/parser/ast/pops_bridge.rb +101 -27
  257. data/lib/puppet/parser/ast/resource.rb +5 -0
  258. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  259. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  260. data/lib/puppet/parser/ast.rb +5 -0
  261. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  262. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +60 -0
  263. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  264. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  265. data/lib/puppet/parser/compiler.rb +334 -42
  266. data/lib/puppet/parser/e4_parser_adapter.rb +13 -12
  267. data/lib/puppet/parser/environment_compiler.rb +201 -0
  268. data/lib/puppet/parser/functions/assert_type.rb +47 -17
  269. data/lib/puppet/parser/functions/binary_file.rb +24 -0
  270. data/lib/puppet/parser/functions/break.rb +39 -0
  271. data/lib/puppet/parser/functions/contain.rb +7 -15
  272. data/lib/puppet/parser/functions/create_resources.rb +39 -23
  273. data/lib/puppet/parser/functions/defined.rb +106 -69
  274. data/lib/puppet/parser/functions/dig.rb +29 -0
  275. data/lib/puppet/parser/functions/each.rb +86 -28
  276. data/lib/puppet/parser/functions/epp.rb +30 -38
  277. data/lib/puppet/parser/functions/file.rb +3 -1
  278. data/lib/puppet/parser/functions/filter.rb +60 -24
  279. data/lib/puppet/parser/functions/find_file.rb +28 -0
  280. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  281. data/lib/puppet/parser/functions/hiera.rb +98 -28
  282. data/lib/puppet/parser/functions/hiera_array.rb +86 -29
  283. data/lib/puppet/parser/functions/hiera_hash.rb +96 -31
  284. data/lib/puppet/parser/functions/hiera_include.rb +96 -41
  285. data/lib/puppet/parser/functions/include.rb +4 -8
  286. data/lib/puppet/parser/functions/inline_epp.rb +36 -61
  287. data/lib/puppet/parser/functions/inline_template.rb +2 -2
  288. data/lib/puppet/parser/functions/lest.rb +49 -0
  289. data/lib/puppet/parser/functions/lookup.rb +129 -151
  290. data/lib/puppet/parser/functions/map.rb +56 -21
  291. data/lib/puppet/parser/functions/match.rb +29 -13
  292. data/lib/puppet/parser/functions/new.rb +926 -0
  293. data/lib/puppet/parser/functions/next.rb +38 -0
  294. data/lib/puppet/parser/functions/reduce.rb +98 -61
  295. data/lib/puppet/parser/functions/regsubst.rb +4 -2
  296. data/lib/puppet/parser/functions/require.rb +4 -27
  297. data/lib/puppet/parser/functions/return.rb +71 -0
  298. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  299. data/lib/puppet/parser/functions/scanf.rb +25 -31
  300. data/lib/puppet/parser/functions/slice.rb +18 -25
  301. data/lib/puppet/parser/functions/split.rb +2 -2
  302. data/lib/puppet/parser/functions/step.rb +84 -0
  303. data/lib/puppet/parser/functions/strftime.rb +185 -0
  304. data/lib/puppet/parser/functions/then.rb +73 -0
  305. data/lib/puppet/parser/functions/type.rb +53 -0
  306. data/lib/puppet/parser/functions/with.rb +17 -9
  307. data/lib/puppet/parser/functions.rb +34 -16
  308. data/lib/puppet/parser/resource.rb +149 -35
  309. data/lib/puppet/parser/scope.rb +354 -89
  310. data/lib/puppet/parser/templatewrapper.rb +2 -1
  311. data/lib/puppet/parser/type_loader.rb +1 -1
  312. data/lib/puppet/parser.rb +3 -1
  313. data/lib/puppet/plugins/configuration.rb +11 -2
  314. data/lib/puppet/plugins/data_providers/data_provider.rb +406 -0
  315. data/lib/puppet/plugins/data_providers/registry.rb +51 -0
  316. data/lib/puppet/plugins/data_providers.rb +15 -60
  317. data/lib/puppet/pops/adaptable.rb +4 -4
  318. data/lib/puppet/pops/adapters.rb +114 -31
  319. data/lib/puppet/pops/binder/binder.rb +21 -17
  320. data/lib/puppet/pops/binder/binder_issues.rb +8 -6
  321. data/lib/puppet/pops/binder/bindings_checker.rb +12 -8
  322. data/lib/puppet/pops/binder/bindings_composer.rb +16 -12
  323. data/lib/puppet/pops/binder/bindings_factory.rb +108 -104
  324. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  325. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  326. data/lib/puppet/pops/binder/bindings_model.rb +49 -47
  327. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  328. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  329. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +10 -6
  330. data/lib/puppet/pops/binder/injector.rb +55 -50
  331. data/lib/puppet/pops/binder/key_factory.rb +10 -12
  332. data/lib/puppet/pops/binder/producers.rb +70 -65
  333. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +1 -1
  334. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  335. data/lib/puppet/pops/evaluator/access_operator.rb +261 -142
  336. data/lib/puppet/pops/evaluator/callable_signature.rb +7 -0
  337. data/lib/puppet/pops/evaluator/closure.rb +251 -109
  338. data/lib/puppet/pops/evaluator/collector_transformer.rb +45 -26
  339. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  340. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +4 -0
  341. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +5 -2
  342. data/lib/puppet/pops/evaluator/compare_operator.rb +110 -10
  343. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -10
  344. data/lib/puppet/pops/evaluator/evaluator_impl.rb +239 -117
  345. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  346. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +84 -0
  347. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  348. data/lib/puppet/pops/evaluator/relationship_operator.rb +18 -11
  349. data/lib/puppet/pops/evaluator/runtime3_converter.rb +60 -51
  350. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +119 -0
  351. data/lib/puppet/pops/evaluator/runtime3_support.rb +119 -82
  352. data/lib/puppet/pops/functions/dispatch.rb +33 -8
  353. data/lib/puppet/pops/functions/dispatcher.rb +17 -16
  354. data/lib/puppet/pops/functions/function.rb +30 -4
  355. data/lib/puppet/pops/issue_reporter.rb +49 -21
  356. data/lib/puppet/pops/issues.rb +292 -18
  357. data/lib/puppet/pops/label_provider.rb +18 -4
  358. data/lib/puppet/pops/loader/base_loader.rb +74 -20
  359. data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
  360. data/lib/puppet/pops/loader/loader.rb +53 -48
  361. data/lib/puppet/pops/loader/loader_paths.rb +113 -6
  362. data/lib/puppet/pops/loader/module_loaders.rb +72 -28
  363. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  364. data/lib/puppet/pops/loader/predefined_loader.rb +29 -0
  365. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  366. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +80 -0
  367. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +16 -4
  368. data/lib/puppet/pops/loader/runtime3_type_loader.rb +96 -0
  369. data/lib/puppet/pops/loader/static_loader.rb +139 -38
  370. data/lib/puppet/pops/loader/type_definition_instantiator.rb +93 -0
  371. data/lib/puppet/pops/loader/typed_name.rb +48 -0
  372. data/lib/puppet/pops/loaders.rb +209 -29
  373. data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  374. data/lib/puppet/pops/lookup/context.rb +200 -0
  375. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  376. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  377. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  378. data/lib/puppet/pops/lookup/data_provider.rb +107 -0
  379. data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  380. data/lib/puppet/pops/lookup/explainer.rb +594 -0
  381. data/lib/puppet/pops/lookup/function_provider.rb +110 -0
  382. data/lib/puppet/pops/lookup/global_data_provider.rb +78 -0
  383. data/lib/puppet/pops/lookup/hiera_config.rb +782 -0
  384. data/lib/puppet/pops/lookup/interpolation.rb +153 -0
  385. data/lib/puppet/pops/lookup/invocation.rb +251 -0
  386. data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  387. data/lib/puppet/pops/lookup/lookup_adapter.rb +510 -0
  388. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  389. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  390. data/lib/puppet/pops/lookup/module_data_provider.rb +81 -0
  391. data/lib/puppet/pops/lookup/sub_lookup.rb +90 -0
  392. data/lib/puppet/pops/lookup.rb +47 -49
  393. data/lib/puppet/pops/merge_strategy.rb +183 -47
  394. data/lib/puppet/pops/migration/migration_checker.rb +58 -0
  395. data/lib/puppet/pops/model/ast_transformer.rb +8 -1
  396. data/lib/puppet/pops/model/factory.rb +257 -161
  397. data/lib/puppet/pops/model/model.rb +25 -8
  398. data/lib/puppet/pops/model/model_label_provider.rb +30 -6
  399. data/lib/puppet/pops/model/model_meta.rb +50 -3
  400. data/lib/puppet/pops/model/model_tree_dumper.rb +44 -0
  401. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  402. data/lib/puppet/pops/parser/egrammar.ra +155 -38
  403. data/lib/puppet/pops/parser/eparser.rb +1894 -1314
  404. data/lib/puppet/pops/parser/epp_support.rb +27 -12
  405. data/lib/puppet/pops/parser/evaluating_parser.rb +27 -13
  406. data/lib/puppet/pops/parser/heredoc_support.rb +20 -16
  407. data/lib/puppet/pops/parser/interpolation_support.rb +14 -1
  408. data/lib/puppet/pops/parser/lexer2.rb +466 -380
  409. data/lib/puppet/pops/parser/lexer_support.rb +132 -25
  410. data/lib/puppet/pops/parser/locator.rb +63 -9
  411. data/lib/puppet/pops/parser/parser_support.rb +49 -40
  412. data/lib/puppet/pops/parser/slurp_support.rb +37 -12
  413. data/lib/puppet/pops/patterns.rb +16 -1
  414. data/lib/puppet/pops/pcore.rb +96 -0
  415. data/lib/puppet/pops/puppet_stack.rb +43 -0
  416. data/lib/puppet/pops/resource/param.rb +55 -0
  417. data/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
  418. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  419. data/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
  420. data/lib/puppet/pops/serialization/abstract_writer.rb +207 -0
  421. data/lib/puppet/pops/serialization/deserializer.rb +77 -0
  422. data/lib/puppet/pops/serialization/extension.rb +157 -0
  423. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  424. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  425. data/lib/puppet/pops/serialization/json.rb +297 -0
  426. data/lib/puppet/pops/serialization/object.rb +71 -0
  427. data/lib/puppet/pops/serialization/rgen.rb +152 -0
  428. data/lib/puppet/pops/serialization/serializer.rb +118 -0
  429. data/lib/puppet/pops/serialization/time_factory.rb +67 -0
  430. data/lib/puppet/pops/serialization.rb +17 -0
  431. data/lib/puppet/pops/time/timespan.rb +718 -0
  432. data/lib/puppet/pops/time/timestamp.rb +148 -0
  433. data/lib/puppet/pops/types/annotatable.rb +36 -0
  434. data/lib/puppet/pops/types/class_loader.rb +25 -23
  435. data/lib/puppet/pops/types/enumeration.rb +9 -27
  436. data/lib/puppet/pops/types/implementation_registry.rb +141 -0
  437. data/lib/puppet/pops/types/iterable.rb +308 -0
  438. data/lib/puppet/pops/types/p_binary_type.rb +220 -0
  439. data/lib/puppet/pops/types/p_meta_type.rb +83 -0
  440. data/lib/puppet/pops/types/p_object_type.rb +886 -0
  441. data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  442. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +187 -0
  443. data/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
  444. data/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
  445. data/lib/puppet/pops/types/p_timespan_type.rb +141 -0
  446. data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
  447. data/lib/puppet/pops/types/p_type_set_type.rb +352 -0
  448. data/lib/puppet/pops/types/puppet_object.rb +16 -0
  449. data/lib/puppet/pops/types/recursion_guard.rb +136 -0
  450. data/lib/puppet/pops/types/ruby_generator.rb +275 -0
  451. data/lib/puppet/pops/types/string_converter.rb +1033 -0
  452. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  453. data/lib/puppet/pops/types/type_asserter.rb +21 -19
  454. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  455. data/lib/puppet/pops/types/type_calculator.rb +244 -1186
  456. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  457. data/lib/puppet/pops/types/type_factory.rb +270 -164
  458. data/lib/puppet/pops/types/type_formatter.rb +686 -0
  459. data/lib/puppet/pops/types/type_mismatch_describer.rb +1105 -0
  460. data/lib/puppet/pops/types/type_parser.rb +372 -280
  461. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  462. data/lib/puppet/pops/types/types.rb +3293 -295
  463. data/lib/puppet/pops/utils.rb +11 -10
  464. data/lib/puppet/pops/validation/checker4_0.rb +289 -75
  465. data/lib/puppet/pops/validation/validator_factory_4_0.rb +13 -5
  466. data/lib/puppet/pops/validation.rb +56 -18
  467. data/lib/puppet/pops/visitor.rb +9 -6
  468. data/lib/puppet/pops.rb +44 -25
  469. data/lib/puppet/property/ensure.rb +1 -1
  470. data/lib/puppet/property.rb +67 -7
  471. data/lib/puppet/provider/aixobject.rb +4 -4
  472. data/lib/puppet/provider/augeas/augeas.rb +57 -2
  473. data/lib/puppet/provider/cron/crontab.rb +1 -1
  474. data/lib/puppet/provider/exec/windows.rb +1 -1
  475. data/lib/puppet/provider/exec.rb +10 -3
  476. data/lib/puppet/provider/group/aix.rb +4 -4
  477. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  478. data/lib/puppet/provider/group/pw.rb +1 -0
  479. data/lib/puppet/provider/group/windows_adsi.rb +23 -7
  480. data/lib/puppet/provider/macauthorization/macauthorization.rb +11 -10
  481. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  482. data/lib/puppet/provider/mcx/mcxcontent.rb +5 -4
  483. data/lib/puppet/provider/mount/parsed.rb +159 -2
  484. data/lib/puppet/provider/nameservice/directoryservice.rb +55 -62
  485. data/lib/puppet/provider/nameservice.rb +23 -8
  486. data/lib/puppet/provider/package/appdmg.rb +7 -6
  487. data/lib/puppet/provider/package/apple.rb +1 -1
  488. data/lib/puppet/provider/package/apt.rb +1 -1
  489. data/lib/puppet/provider/package/dnf.rb +46 -0
  490. data/lib/puppet/provider/package/gem.rb +29 -3
  491. data/lib/puppet/provider/package/nim.rb +2 -2
  492. data/lib/puppet/provider/package/openbsd.rb +7 -7
  493. data/lib/puppet/provider/package/pacman.rb +11 -10
  494. data/lib/puppet/provider/package/pip.rb +83 -22
  495. data/lib/puppet/provider/package/pip3.rb +20 -0
  496. data/lib/puppet/provider/package/pkg.rb +12 -8
  497. data/lib/puppet/provider/package/pkgdmg.rb +11 -8
  498. data/lib/puppet/provider/package/pkgin.rb +4 -4
  499. data/lib/puppet/provider/package/pkgng.rb +143 -0
  500. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  501. data/lib/puppet/provider/package/portage.rb +48 -8
  502. data/lib/puppet/provider/package/ports.rb +0 -3
  503. data/lib/puppet/provider/package/puppet_gem.rb +0 -0
  504. data/lib/puppet/provider/package/rpm.rb +123 -17
  505. data/lib/puppet/provider/package/sun.rb +1 -1
  506. data/lib/puppet/provider/package/tdnf.rb +28 -0
  507. data/lib/puppet/provider/package/windows/exe_package.rb +10 -9
  508. data/lib/puppet/provider/package/windows/msi_package.rb +4 -4
  509. data/lib/puppet/provider/package/windows/package.rb +9 -1
  510. data/lib/puppet/provider/package/windows.rb +1 -1
  511. data/lib/puppet/provider/package/yum.rb +62 -83
  512. data/lib/puppet/provider/package/zypper.rb +69 -15
  513. data/lib/puppet/provider/package.rb +6 -2
  514. data/lib/puppet/provider/parsedfile.rb +2 -2
  515. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +39 -7
  516. data/lib/puppet/provider/selmodule/semodule.rb +20 -16
  517. data/lib/puppet/provider/service/base.rb +4 -3
  518. data/lib/puppet/provider/service/bsd.rb +9 -9
  519. data/lib/puppet/provider/service/daemontools.rb +5 -5
  520. data/lib/puppet/provider/service/debian.rb +14 -5
  521. data/lib/puppet/provider/service/freebsd.rb +1 -1
  522. data/lib/puppet/provider/service/init.rb +27 -3
  523. data/lib/puppet/provider/service/launchd.rb +57 -19
  524. data/lib/puppet/provider/service/rcng.rb +51 -0
  525. data/lib/puppet/provider/service/redhat.rb +2 -1
  526. data/lib/puppet/provider/service/runit.rb +4 -4
  527. data/lib/puppet/provider/service/smf.rb +59 -8
  528. data/lib/puppet/provider/service/src.rb +66 -39
  529. data/lib/puppet/provider/service/systemd.rb +141 -22
  530. data/lib/puppet/provider/service/upstart.rb +1 -1
  531. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  532. data/lib/puppet/provider/sshkey/parsed.rb +20 -10
  533. data/lib/puppet/provider/user/aix.rb +11 -5
  534. data/lib/puppet/provider/user/directoryservice.rb +43 -66
  535. data/lib/puppet/provider/user/hpux.rb +1 -1
  536. data/lib/puppet/provider/user/openbsd.rb +1 -0
  537. data/lib/puppet/provider/user/pw.rb +1 -0
  538. data/lib/puppet/provider/user/user_role_add.rb +19 -2
  539. data/lib/puppet/provider/user/windows_adsi.rb +51 -2
  540. data/lib/puppet/provider/yumrepo/inifile.rb +9 -6
  541. data/lib/puppet/provider/zfs/zfs.rb +2 -2
  542. data/lib/puppet/provider/zone/solaris.rb +6 -3
  543. data/lib/puppet/provider/zpool/zpool.rb +2 -2
  544. data/lib/puppet/provider.rb +9 -7
  545. data/lib/puppet/reference/configuration.rb +13 -5
  546. data/lib/puppet/reference/indirection.rb +2 -2
  547. data/lib/puppet/reference/providers.rb +2 -3
  548. data/lib/puppet/reference/report.rb +9 -12
  549. data/lib/puppet/reference/type.rb +1 -1
  550. data/lib/puppet/reports.rb +5 -1
  551. data/lib/puppet/resource/capability_finder.rb +128 -0
  552. data/lib/puppet/resource/catalog.rb +167 -40
  553. data/lib/puppet/resource/status.rb +30 -5
  554. data/lib/puppet/resource/type.rb +247 -50
  555. data/lib/puppet/resource/type_collection.rb +83 -10
  556. data/lib/puppet/resource.rb +212 -146
  557. data/lib/puppet/settings/base_setting.rb +9 -3
  558. data/lib/puppet/settings/config_file.rb +3 -2
  559. data/lib/puppet/settings/directory_setting.rb +6 -0
  560. data/lib/puppet/settings/environment_conf.rb +26 -6
  561. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  562. data/lib/puppet/settings/file_setting.rb +20 -9
  563. data/lib/puppet/settings/ini_file.rb +2 -2
  564. data/lib/puppet/settings/server_list_setting.rb +20 -0
  565. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  566. data/lib/puppet/settings.rb +117 -45
  567. data/lib/puppet/ssl/base.rb +14 -1
  568. data/lib/puppet/ssl/certificate.rb +1 -1
  569. data/lib/puppet/ssl/certificate_authority/interface.rb +166 -26
  570. data/lib/puppet/ssl/certificate_authority.rb +49 -13
  571. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  572. data/lib/puppet/ssl/certificate_request.rb +5 -5
  573. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  574. data/lib/puppet/ssl/configuration.rb +4 -1
  575. data/lib/puppet/ssl/host.rb +26 -4
  576. data/lib/puppet/ssl/inventory.rb +10 -3
  577. data/lib/puppet/ssl/key.rb +7 -3
  578. data/lib/puppet/ssl/oids.rb +43 -3
  579. data/lib/puppet/ssl/validator/default_validator.rb +3 -3
  580. data/lib/puppet/syntax_checkers/base64.rb +41 -0
  581. data/lib/puppet/syntax_checkers/json.rb +0 -2
  582. data/lib/puppet/test/test_helper.rb +21 -7
  583. data/lib/puppet/transaction/additional_resource_generator.rb +101 -8
  584. data/lib/puppet/transaction/event.rb +29 -2
  585. data/lib/puppet/transaction/event_manager.rb +1 -1
  586. data/lib/puppet/transaction/persistence.rb +84 -0
  587. data/lib/puppet/transaction/report.rb +86 -4
  588. data/lib/puppet/transaction/resource_harness.rb +95 -35
  589. data/lib/puppet/transaction.rb +64 -36
  590. data/lib/puppet/type/augeas.rb +13 -4
  591. data/lib/puppet/type/component.rb +11 -0
  592. data/lib/puppet/type/cron.rb +13 -13
  593. data/lib/puppet/type/exec.rb +43 -19
  594. data/lib/puppet/type/file/checksum.rb +1 -0
  595. data/lib/puppet/type/file/checksum_value.rb +53 -0
  596. data/lib/puppet/type/file/content.rb +36 -121
  597. data/lib/puppet/type/file/data_sync.rb +92 -0
  598. data/lib/puppet/type/file/ensure.rb +22 -19
  599. data/lib/puppet/type/file/selcontext.rb +1 -1
  600. data/lib/puppet/type/file/source.rb +121 -34
  601. data/lib/puppet/type/file/target.rb +2 -2
  602. data/lib/puppet/type/file.rb +146 -46
  603. data/lib/puppet/type/filebucket.rb +1 -1
  604. data/lib/puppet/type/group.rb +26 -8
  605. data/lib/puppet/type/host.rb +1 -1
  606. data/lib/puppet/type/interface.rb +8 -3
  607. data/lib/puppet/type/macauthorization.rb +1 -1
  608. data/lib/puppet/type/mount.rb +25 -2
  609. data/lib/puppet/type/notify.rb +1 -1
  610. data/lib/puppet/type/package.rb +32 -12
  611. data/lib/puppet/type/resources.rb +1 -1
  612. data/lib/puppet/type/schedule.rb +5 -5
  613. data/lib/puppet/type/scheduled_task.rb +14 -1
  614. data/lib/puppet/type/service.rb +24 -0
  615. data/lib/puppet/type/ssh_authorized_key.rb +17 -11
  616. data/lib/puppet/type/sshkey.rb +5 -3
  617. data/lib/puppet/type/stage.rb +1 -1
  618. data/lib/puppet/type/tidy.rb +10 -5
  619. data/lib/puppet/type/user.rb +83 -26
  620. data/lib/puppet/type/yumrepo.rb +28 -8
  621. data/lib/puppet/type/zone.rb +6 -6
  622. data/lib/puppet/type.rb +175 -41
  623. data/lib/puppet/util/autoload.rb +16 -11
  624. data/lib/puppet/util/character_encoding.rb +95 -0
  625. data/lib/puppet/util/checksums.rb +74 -31
  626. data/lib/puppet/util/classgen.rb +1 -1
  627. data/lib/puppet/util/command_line/trollop.rb +1 -1
  628. data/lib/puppet/util/command_line.rb +10 -2
  629. data/lib/puppet/util/execution.rb +35 -16
  630. data/lib/puppet/util/feature.rb +1 -1
  631. data/lib/puppet/util/filetype.rb +11 -5
  632. data/lib/puppet/util/http_proxy.rb +132 -0
  633. data/lib/puppet/util/inifile.rb +1 -1
  634. data/lib/puppet/util/instance_loader.rb +1 -1
  635. data/lib/puppet/util/log/destinations.rb +23 -2
  636. data/lib/puppet/util/log.rb +78 -9
  637. data/lib/puppet/util/logging.rb +82 -3
  638. data/lib/puppet/util/monkey_patches.rb +20 -7
  639. data/lib/puppet/util/multi_match.rb +51 -0
  640. data/lib/puppet/util/network_device/cisco/device.rb +24 -6
  641. data/lib/puppet/util/network_device/cisco/interface.rb +21 -9
  642. data/lib/puppet/util/network_device/config.rb +1 -1
  643. data/lib/puppet/util/network_device/transport/ssh.rb +7 -3
  644. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  645. data/lib/puppet/util/plist.rb +151 -0
  646. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  647. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  648. data/lib/puppet/util/profiler.rb +1 -1
  649. data/lib/puppet/util/psych_support.rb +1 -1
  650. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  651. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  652. data/lib/puppet/util/rdoc.rb +2 -2
  653. data/lib/puppet/util/reference.rb +4 -2
  654. data/lib/puppet/util/resource_template.rb +1 -1
  655. data/lib/puppet/util/rubygems.rb +1 -1
  656. data/lib/puppet/util/run_mode.rb +3 -16
  657. data/lib/puppet/util/skip_tags.rb +9 -0
  658. data/lib/puppet/util/splayer.rb +18 -0
  659. data/lib/puppet/util/tagging.rb +8 -2
  660. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  661. data/lib/puppet/util/windows/access_control_entry.rb +2 -2
  662. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  663. data/lib/puppet/util/windows/adsi.rb +212 -75
  664. data/lib/puppet/util/windows/api_types.rb +24 -18
  665. data/lib/puppet/util/windows/com.rb +3 -3
  666. data/lib/puppet/util/windows/error.rb +1 -1
  667. data/lib/puppet/util/windows/file.rb +112 -19
  668. data/lib/puppet/util/windows/principal.rb +190 -0
  669. data/lib/puppet/util/windows/process.rb +88 -11
  670. data/lib/puppet/util/windows/registry.rb +22 -16
  671. data/lib/puppet/util/windows/root_certs.rb +5 -5
  672. data/lib/puppet/util/windows/security.rb +38 -37
  673. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  674. data/lib/puppet/util/windows/sid.rb +84 -15
  675. data/lib/puppet/util/windows/taskscheduler.rb +99 -43
  676. data/lib/puppet/util/windows/user.rb +32 -14
  677. data/lib/puppet/util/windows.rb +5 -0
  678. data/lib/puppet/util/yaml.rb +15 -3
  679. data/lib/puppet/util.rb +125 -23
  680. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  681. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  682. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  683. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  684. data/lib/puppet/vendor/pathspec/README.md +1 -1
  685. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  686. data/lib/puppet/vendor/require_vendored.rb +0 -1
  687. data/lib/puppet/vendor/rgen/README.rdoc +1 -1
  688. data/lib/puppet/vendor/rgen_patch.rb +1 -1
  689. data/lib/puppet/vendor/semantic/lib/semantic.rb +4 -6
  690. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  691. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  692. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/module_release.rb +17 -5
  693. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  694. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  695. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  696. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  697. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  698. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  699. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  700. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  701. data/lib/puppet/version.rb +7 -3
  702. data/lib/puppet.rb +86 -2
  703. data/lib/puppet_x.rb +7 -1
  704. data/lib/semver.rb +36 -13
  705. data/locales/config.yaml +29 -0
  706. data/locales/puppet.pot +93 -0
  707. data/man/man5/puppet.conf.5 +61 -19
  708. data/man/man8/extlookup2hiera.8 +2 -2
  709. data/man/man8/puppet-agent.8 +6 -3
  710. data/man/man8/puppet-apply.8 +6 -3
  711. data/man/man8/puppet-ca.8 +3 -3
  712. data/man/man8/puppet-catalog.8 +3 -3
  713. data/man/man8/puppet-cert.8 +3 -3
  714. data/man/man8/puppet-certificate.8 +3 -3
  715. data/man/man8/puppet-certificate_request.8 +3 -3
  716. data/man/man8/puppet-certificate_revocation_list.8 +3 -3
  717. data/man/man8/puppet-config.8 +4 -4
  718. data/man/man8/puppet-describe.8 +2 -2
  719. data/man/man8/puppet-device.8 +7 -4
  720. data/man/man8/puppet-doc.8 +2 -2
  721. data/man/man8/puppet-epp.8 +3 -3
  722. data/man/man8/puppet-facts.8 +3 -3
  723. data/man/man8/puppet-file.8 +3 -3
  724. data/man/man8/puppet-filebucket.8 +3 -3
  725. data/man/man8/puppet-help.8 +3 -3
  726. data/man/man8/puppet-inspect.8 +3 -3
  727. data/man/man8/puppet-key.8 +3 -3
  728. data/man/man8/puppet-man.8 +3 -3
  729. data/man/man8/puppet-master.8 +6 -3
  730. data/man/man8/puppet-module.8 +10 -10
  731. data/man/man8/puppet-node.8 +3 -3
  732. data/man/man8/puppet-parser.8 +3 -3
  733. data/man/man8/puppet-plugin.8 +3 -3
  734. data/man/man8/puppet-report.8 +3 -3
  735. data/man/man8/puppet-resource.8 +3 -3
  736. data/man/man8/puppet-resource_type.8 +3 -3
  737. data/man/man8/puppet-status.8 +4 -4
  738. data/man/man8/puppet.8 +2 -2
  739. data/spec/fixtures/module.tar.gz +0 -0
  740. data/spec/fixtures/unit/application/environments/production/data/common.yaml +22 -0
  741. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  742. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  743. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  744. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/environment/data.pp +10 -0
  745. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  746. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  747. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  748. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  749. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  750. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  751. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  752. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  753. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  754. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  755. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  756. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  757. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  758. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  759. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  760. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  761. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  762. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  763. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  764. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  765. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  766. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  767. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  768. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +22 -0
  769. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  770. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +48 -0
  771. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  772. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  773. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  774. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  775. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  776. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  777. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  778. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  779. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  780. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  781. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  782. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +2 -0
  783. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  784. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml +1 -0
  785. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml +1 -0
  786. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  787. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  788. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +20 -0
  789. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  790. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  791. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  792. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  793. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  794. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  795. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  796. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  797. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  798. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  799. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  800. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  801. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  802. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  803. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  804. data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +3 -1
  805. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
  806. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
  807. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
  808. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/lib/puppet/bindings/xyz/default.rb +9 -0
  809. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
  810. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
  811. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
  812. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
  813. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
  814. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
  815. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +2 -0
  816. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  817. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
  818. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  819. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  820. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  821. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/manifests/init.pp +2 -0
  822. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/data/empty.json +0 -0
  823. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/hiera.yaml +5 -0
  824. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/manifests/init.pp +2 -0
  825. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/metadata.json +9 -0
  826. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
  827. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/hiera.yaml +5 -0
  828. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
  829. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/metadata.json +9 -0
  830. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
  831. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
  832. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
  833. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/metadata.json +9 -0
  834. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/data/empty.yaml +2 -0
  835. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  836. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  837. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/metadata.json +9 -0
  838. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/data/first.json +4 -0
  839. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  840. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  841. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/metadata.json +9 -0
  842. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  843. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/manifests/init.pp +3 -0
  844. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/metadata.json +9 -0
  845. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  846. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  847. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/manifests/init.pp +3 -0
  848. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/metawcp/metadata.json +9 -0
  849. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  850. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  851. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  852. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  853. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
  854. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  855. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  856. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  857. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  858. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  859. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  860. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  861. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  862. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  863. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  864. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +87 -0
  865. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  866. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  867. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  868. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
  869. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
  870. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
  871. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
  872. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
  873. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
  874. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
  875. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  876. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
  877. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
  878. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +1 -10
  879. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  880. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +93 -85
  881. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +11 -7
  882. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +8 -0
  883. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +1 -0
  884. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +1 -0
  885. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +3 -0
  886. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  887. data/spec/fixtures/unit/provider/package/yum/yum-check-update-obsoletes.txt +195 -0
  888. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  889. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
  890. data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
  891. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  892. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  893. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  894. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  895. 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
  896. 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
  897. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  898. 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
  899. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  900. 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
  901. 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
  902. data/spec/integration/agent/logging_spec.rb +15 -14
  903. data/spec/integration/application/apply_spec.rb +432 -29
  904. data/spec/integration/application/doc_spec.rb +0 -0
  905. data/spec/integration/application/lookup_spec.rb +155 -0
  906. data/spec/integration/configurer_spec.rb +0 -0
  907. data/spec/integration/data_binding_spec.rb +195 -0
  908. data/spec/integration/defaults_spec.rb +27 -2
  909. data/spec/integration/directory_environments_spec.rb +16 -0
  910. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  911. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  912. data/spec/integration/environments/settings_spec.rb +32 -4
  913. data/spec/integration/faces/ca_spec.rb +0 -0
  914. data/spec/integration/faces/config_spec.rb +80 -0
  915. data/spec/integration/faces/documentation_spec.rb +1 -1
  916. data/spec/integration/faces/plugin_spec.rb +0 -4
  917. data/spec/integration/file_bucket/file_spec.rb +2 -2
  918. data/spec/integration/file_serving/fileset_spec.rb +0 -0
  919. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
  920. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  921. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
  922. data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
  923. data/spec/integration/indirector/facts/facter_spec.rb +97 -0
  924. data/spec/integration/indirector/file_content/file_server_spec.rb +0 -0
  925. data/spec/integration/indirector/file_metadata/file_server_spec.rb +0 -0
  926. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  927. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  928. data/spec/integration/network/formats_spec.rb +0 -0
  929. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  930. data/spec/integration/node/environment_spec.rb +34 -0
  931. data/spec/integration/node/facts_spec.rb +0 -0
  932. data/spec/integration/node_spec.rb +0 -0
  933. data/spec/integration/parser/catalog_spec.rb +14 -2
  934. data/spec/integration/parser/collection_spec.rb +18 -0
  935. data/spec/integration/parser/compiler_spec.rb +877 -666
  936. data/spec/integration/parser/dynamic_scoping_spec.rb +67 -0
  937. data/spec/integration/parser/parameter_defaults_spec.rb +358 -0
  938. data/spec/integration/parser/pcore_resource_spec.rb +245 -0
  939. data/spec/integration/parser/resource_expressions_spec.rb +10 -5
  940. data/spec/integration/parser/scope_spec.rb +46 -7
  941. data/spec/integration/parser/undef_param_spec.rb +9 -1
  942. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  943. data/spec/integration/provider/mount_spec.rb +23 -36
  944. data/spec/integration/provider/service/init_spec.rb +0 -0
  945. data/spec/integration/provider/service/windows_spec.rb +3 -2
  946. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
  947. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  948. data/spec/integration/reference/providers_spec.rb +0 -0
  949. data/spec/integration/reports_spec.rb +0 -0
  950. data/spec/integration/resource/catalog_spec.rb +1 -1
  951. data/spec/integration/resource/type_collection_spec.rb +8 -0
  952. data/spec/integration/ssl/autosign_spec.rb +18 -3
  953. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  954. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  955. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  956. data/spec/integration/ssl/host_spec.rb +0 -1
  957. data/spec/integration/ssl/key_spec.rb +104 -0
  958. data/spec/integration/test/test_helper_spec.rb +32 -0
  959. data/spec/integration/transaction/report_spec.rb +682 -0
  960. data/spec/integration/transaction_spec.rb +126 -2
  961. data/spec/integration/type/exec_spec.rb +0 -0
  962. data/spec/integration/type/file_spec.rb +553 -51
  963. data/spec/integration/type/package_spec.rb +72 -1
  964. data/spec/integration/type/tidy_spec.rb +21 -9
  965. data/spec/integration/type/user_spec.rb +13 -6
  966. data/spec/integration/type_spec.rb +0 -0
  967. data/spec/integration/util/autoload_spec.rb +0 -0
  968. data/spec/integration/util/execution_spec.rb +30 -0
  969. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  970. data/spec/integration/util/settings_spec.rb +26 -0
  971. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  972. data/spec/integration/util/windows/principal_spec.rb +250 -0
  973. data/spec/integration/util/windows/process_spec.rb +35 -2
  974. data/spec/{unit → integration}/util/windows/registry_spec.rb +92 -2
  975. data/spec/integration/util/windows/security_spec.rb +75 -21
  976. data/spec/integration/util/windows/user_spec.rb +27 -5
  977. data/spec/integration/util_spec.rb +49 -27
  978. data/spec/lib/matchers/include_in_order.rb +2 -3
  979. data/spec/lib/matchers/resource.rb +22 -1
  980. data/spec/lib/puppet/face/1.0.0/huzzah.rb +0 -0
  981. data/spec/lib/puppet/face/basetest.rb +0 -0
  982. data/spec/lib/puppet/face/huzzah.rb +0 -0
  983. data/spec/lib/puppet_spec/compiler.rb +32 -3
  984. data/spec/lib/puppet_spec/files.rb +16 -2
  985. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  986. data/spec/lib/puppet_spec/language.rb +3 -1
  987. data/spec/lib/puppet_spec/matchers.rb +6 -4
  988. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  989. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  990. data/spec/lib/puppet_spec/network.rb +12 -8
  991. data/spec/lib/puppet_spec/pops.rb +13 -0
  992. data/spec/lib/puppet_spec/unindent.rb +5 -0
  993. data/spec/lib/puppet_spec/verbose.rb +0 -0
  994. data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
  995. data/spec/shared_behaviours/file_server_terminus.rb +0 -0
  996. data/spec/shared_behaviours/file_serving.rb +0 -0
  997. data/spec/shared_behaviours/iterative_functions.rb +9 -9
  998. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  999. data/spec/shared_behaviours/path_parameters.rb +0 -0
  1000. data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
  1001. data/spec/shared_contexts/types_setup.rb +106 -0
  1002. data/spec/shared_examples/rhel_package_provider.rb +357 -0
  1003. data/spec/spec_helper.rb +23 -2
  1004. data/spec/unit/agent/locker_spec.rb +4 -4
  1005. data/spec/unit/agent_spec.rb +12 -46
  1006. data/spec/unit/application/agent_spec.rb +15 -0
  1007. data/spec/unit/application/apply_spec.rb +31 -1
  1008. data/spec/unit/application/cert_spec.rb +20 -0
  1009. data/spec/unit/application/certificate_spec.rb +0 -0
  1010. data/spec/unit/application/config_spec.rb +0 -0
  1011. data/spec/unit/application/describe_spec.rb +0 -0
  1012. data/spec/unit/application/device_spec.rb +0 -0
  1013. data/spec/unit/application/doc_spec.rb +0 -0
  1014. data/spec/unit/application/face_base_spec.rb +16 -0
  1015. data/spec/unit/application/facts_spec.rb +0 -0
  1016. data/spec/unit/application/filebucket_spec.rb +88 -2
  1017. data/spec/unit/application/indirection_base_spec.rb +0 -0
  1018. data/spec/unit/application/inspect_spec.rb +28 -10
  1019. data/spec/unit/application/lookup_spec.rb +532 -0
  1020. data/spec/unit/application/master_spec.rb +33 -7
  1021. data/spec/unit/application/resource_spec.rb +0 -0
  1022. data/spec/unit/application_spec.rb +3 -3
  1023. data/spec/unit/capability_spec.rb +416 -0
  1024. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  1025. data/spec/unit/configurer/downloader_spec.rb +5 -5
  1026. data/spec/unit/configurer/fact_handler_spec.rb +0 -0
  1027. data/spec/unit/configurer/plugin_handler_spec.rb +18 -15
  1028. data/spec/unit/configurer_spec.rb +336 -39
  1029. data/spec/unit/confine/exists_spec.rb +0 -0
  1030. data/spec/unit/confine/false_spec.rb +0 -0
  1031. data/spec/unit/confine/feature_spec.rb +0 -0
  1032. data/spec/unit/confine/true_spec.rb +0 -0
  1033. data/spec/unit/confine/variable_spec.rb +0 -0
  1034. data/spec/unit/confine_collection_spec.rb +0 -0
  1035. data/spec/unit/confine_spec.rb +0 -0
  1036. data/spec/unit/confiner_spec.rb +0 -0
  1037. data/spec/unit/context/trusted_information_spec.rb +24 -1
  1038. data/spec/unit/daemon_spec.rb +18 -8
  1039. data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
  1040. data/spec/unit/data_providers/function_data_provider_spec.rb +30 -3
  1041. data/spec/unit/data_providers/hiera_data_provider_spec.rb +361 -0
  1042. data/spec/unit/defaults_spec.rb +47 -0
  1043. data/spec/unit/environments_spec.rb +26 -4
  1044. data/spec/unit/etc_spec.rb +234 -0
  1045. data/spec/unit/external/pson_spec.rb +0 -0
  1046. data/spec/unit/face/ca_spec.rb +10 -0
  1047. data/spec/unit/face/catalog_spec.rb +0 -0
  1048. data/spec/unit/face/certificate_request_spec.rb +10 -0
  1049. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  1050. data/spec/unit/face/certificate_spec.rb +10 -2
  1051. data/spec/unit/face/config_spec.rb +47 -0
  1052. data/spec/unit/face/epp_face_spec.rb +24 -5
  1053. data/spec/unit/face/facts_spec.rb +0 -0
  1054. data/spec/unit/face/file_spec.rb +4 -0
  1055. data/spec/unit/face/generate_spec.rb +230 -0
  1056. data/spec/unit/face/help_spec.rb +70 -0
  1057. data/spec/unit/face/key_spec.rb +10 -0
  1058. data/spec/unit/face/module/search_spec.rb +1 -1
  1059. data/spec/unit/face/node_spec.rb +1 -1
  1060. data/spec/unit/face/parser_spec.rb +49 -2
  1061. data/spec/unit/face/plugin_spec.rb +29 -4
  1062. data/spec/unit/face/status_spec.rb +10 -0
  1063. data/spec/unit/face_spec.rb +0 -0
  1064. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  1065. data/spec/unit/file_bucket/file_spec.rb +0 -0
  1066. data/spec/unit/file_serving/base_spec.rb +0 -0
  1067. data/spec/unit/file_serving/configuration/parser_spec.rb +25 -30
  1068. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  1069. data/spec/unit/file_serving/content_spec.rb +0 -0
  1070. data/spec/unit/file_serving/fileset_spec.rb +0 -0
  1071. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  1072. data/spec/unit/file_serving/metadata_spec.rb +51 -1
  1073. data/spec/unit/file_serving/mount/file_spec.rb +0 -0
  1074. data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
  1075. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
  1076. data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
  1077. data/spec/unit/file_serving/mount_spec.rb +0 -0
  1078. data/spec/unit/file_serving/terminus_helper_spec.rb +2 -3
  1079. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  1080. data/spec/unit/file_system/uniquefile_spec.rb +20 -0
  1081. data/spec/unit/file_system_spec.rb +373 -6
  1082. data/spec/unit/forge/repository_spec.rb +27 -0
  1083. data/spec/unit/functions/assert_type_spec.rb +48 -8
  1084. data/spec/unit/functions/binary_file_spec.rb +46 -0
  1085. data/spec/unit/functions/break_spec.rb +89 -0
  1086. data/spec/unit/{parser/functions → functions}/contain_spec.rb +68 -3
  1087. data/spec/unit/functions/defined_spec.rb +289 -0
  1088. data/spec/unit/functions/dig_spec.rb +58 -0
  1089. data/spec/unit/functions/epp_spec.rb +17 -9
  1090. data/spec/unit/functions/filter_spec.rb +18 -0
  1091. data/spec/unit/functions/find_file_spec.rb +69 -0
  1092. data/spec/unit/functions/hiera_spec.rb +451 -49
  1093. data/spec/unit/functions/include_spec.rb +175 -0
  1094. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  1095. data/spec/unit/functions/lest_spec.rb +34 -0
  1096. data/spec/unit/functions/logging_spec.rb +54 -0
  1097. data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
  1098. data/spec/unit/functions/lookup_spec.rb +2904 -265
  1099. data/spec/unit/functions/match_spec.rb +2 -2
  1100. data/spec/unit/functions/new_spec.rb +694 -0
  1101. data/spec/unit/functions/next_spec.rb +93 -0
  1102. data/spec/unit/functions/regsubst_spec.rb +30 -9
  1103. data/spec/unit/functions/require_spec.rb +83 -0
  1104. data/spec/unit/functions/return_spec.rb +105 -0
  1105. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  1106. data/spec/unit/functions/scanf_spec.rb +1 -1
  1107. data/spec/unit/{parser/functions → functions}/shared.rb +15 -12
  1108. data/spec/unit/functions/split_spec.rb +11 -3
  1109. data/spec/unit/functions/step_spec.rb +113 -0
  1110. data/spec/unit/functions/strftime_spec.rb +152 -0
  1111. data/spec/unit/functions/then_spec.rb +40 -0
  1112. data/spec/unit/functions/type_spec.rb +35 -0
  1113. data/spec/unit/functions/unwrap_spec.rb +29 -0
  1114. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  1115. data/spec/unit/functions4_spec.rb +357 -71
  1116. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  1117. data/spec/unit/graph/relationship_graph_spec.rb +0 -0
  1118. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  1119. data/spec/unit/graph/simple_graph_spec.rb +1 -1
  1120. data/spec/unit/hiera/scope_spec.rb +6 -3
  1121. data/spec/unit/hiera_puppet_spec.rb +49 -8
  1122. data/spec/unit/indirector/catalog/compiler_spec.rb +752 -8
  1123. data/spec/unit/indirector/catalog/json_spec.rb +0 -0
  1124. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
  1125. data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
  1126. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  1127. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  1128. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
  1129. data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
  1130. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  1131. data/spec/unit/indirector/certificate/file_spec.rb +0 -0
  1132. data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
  1133. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
  1134. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  1135. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
  1136. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
  1137. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
  1138. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  1139. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
  1140. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
  1141. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
  1142. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
  1143. data/spec/unit/indirector/code_spec.rb +0 -0
  1144. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  1145. data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
  1146. data/spec/unit/indirector/envelope_spec.rb +0 -0
  1147. data/spec/unit/indirector/exec_spec.rb +0 -0
  1148. data/spec/unit/indirector/face_spec.rb +10 -2
  1149. data/spec/unit/indirector/facts/facter_spec.rb +7 -7
  1150. data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
  1151. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  1152. data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
  1153. data/spec/unit/indirector/file_bucket_file/file_spec.rb +86 -4
  1154. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
  1155. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
  1156. data/spec/unit/indirector/file_content/file_spec.rb +0 -0
  1157. data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
  1158. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
  1159. data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
  1160. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
  1161. data/spec/unit/indirector/file_server_spec.rb +0 -0
  1162. data/spec/unit/indirector/indirection_spec.rb +13 -2
  1163. data/spec/unit/indirector/json_spec.rb +1 -1
  1164. data/spec/unit/indirector/key/ca_spec.rb +0 -0
  1165. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  1166. data/spec/unit/indirector/key/file_spec.rb +1 -1
  1167. data/spec/unit/indirector/ldap_spec.rb +0 -0
  1168. data/spec/unit/indirector/memory_spec.rb +0 -0
  1169. data/spec/unit/indirector/msgpack_spec.rb +11 -1
  1170. data/spec/unit/indirector/node/exec_spec.rb +0 -0
  1171. data/spec/unit/indirector/node/ldap_spec.rb +0 -0
  1172. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  1173. data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
  1174. data/spec/unit/indirector/node/plain_spec.rb +0 -0
  1175. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  1176. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  1177. data/spec/unit/indirector/node/yaml_spec.rb +0 -0
  1178. data/spec/unit/indirector/plain_spec.rb +0 -0
  1179. data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
  1180. data/spec/unit/indirector/report/processor_spec.rb +0 -0
  1181. data/spec/unit/indirector/report/rest_spec.rb +0 -0
  1182. data/spec/unit/indirector/report/yaml_spec.rb +0 -0
  1183. data/spec/unit/indirector/request_spec.rb +17 -8
  1184. data/spec/unit/indirector/resource/ral_spec.rb +0 -0
  1185. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
  1186. data/spec/unit/indirector/resource_type/parser_spec.rb +5 -0
  1187. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -0
  1188. data/spec/unit/indirector/rest_spec.rb +107 -9
  1189. data/spec/unit/indirector/ssl_file_spec.rb +4 -4
  1190. data/spec/unit/indirector/status/rest_spec.rb +0 -0
  1191. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  1192. data/spec/unit/indirector/terminus_spec.rb +0 -0
  1193. data/spec/unit/indirector/yaml_spec.rb +1 -1
  1194. data/spec/unit/indirector_spec.rb +0 -0
  1195. data/spec/unit/info_service_spec.rb +298 -0
  1196. data/spec/unit/interface/action_builder_spec.rb +0 -0
  1197. data/spec/unit/interface/action_manager_spec.rb +0 -0
  1198. data/spec/unit/interface/action_spec.rb +0 -0
  1199. data/spec/unit/interface/documentation_spec.rb +0 -0
  1200. data/spec/unit/interface/face_collection_spec.rb +0 -0
  1201. data/spec/unit/interface/option_builder_spec.rb +0 -0
  1202. data/spec/unit/interface/option_spec.rb +0 -0
  1203. data/spec/unit/interface_spec.rb +27 -0
  1204. data/spec/unit/man_spec.rb +1 -1
  1205. data/spec/unit/module_spec.rb +118 -74
  1206. data/spec/unit/module_tool/application_spec.rb +1 -1
  1207. data/spec/unit/module_tool/applications/builder_spec.rb +44 -9
  1208. data/spec/unit/module_tool/applications/installer_spec.rb +11 -2
  1209. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  1210. data/spec/unit/module_tool/applications/upgrader_spec.rb +9 -1
  1211. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  1212. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  1213. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  1214. data/spec/unit/module_tool_spec.rb +3 -3
  1215. data/spec/unit/network/auth_config_parser_spec.rb +16 -0
  1216. data/spec/unit/network/authconfig_spec.rb +62 -32
  1217. data/spec/unit/network/authorization_spec.rb +30 -2
  1218. data/spec/unit/network/authstore_spec.rb +2 -2
  1219. data/spec/unit/network/format_handler_spec.rb +0 -0
  1220. data/spec/unit/network/format_spec.rb +0 -0
  1221. data/spec/unit/network/formats_spec.rb +0 -0
  1222. data/spec/unit/network/http/api/indirected_routes_spec.rb +70 -71
  1223. data/spec/unit/network/http/api/master/v3/environment_spec.rb +60 -0
  1224. data/spec/unit/network/http/api/master/v3_spec.rb +22 -4
  1225. data/spec/unit/network/http/compression_spec.rb +40 -9
  1226. data/spec/unit/network/http/connection_spec.rb +25 -19
  1227. data/spec/unit/network/http/error_spec.rb +2 -1
  1228. data/spec/unit/network/http/factory_spec.rb +18 -0
  1229. data/spec/unit/network/http/handler_spec.rb +11 -8
  1230. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  1231. data/spec/unit/network/http/pool_spec.rb +30 -0
  1232. data/spec/unit/network/http/rack/rest_spec.rb +7 -0
  1233. data/spec/unit/network/http/rack_spec.rb +0 -0
  1234. data/spec/unit/network/http/session_spec.rb +0 -0
  1235. data/spec/unit/network/http/site_spec.rb +0 -0
  1236. data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
  1237. data/spec/unit/network/http/webrick_spec.rb +1 -1
  1238. data/spec/unit/network/http_pool_spec.rb +0 -0
  1239. data/spec/unit/network/http_spec.rb +0 -0
  1240. data/spec/unit/network/resolver_spec.rb +0 -0
  1241. data/spec/unit/network/rights_spec.rb +4 -4
  1242. data/spec/unit/network/server_spec.rb +0 -0
  1243. data/spec/unit/node/environment_spec.rb +10 -0
  1244. data/spec/unit/node/facts_spec.rb +0 -0
  1245. data/spec/unit/node_spec.rb +41 -0
  1246. data/spec/unit/other/selinux_spec.rb +0 -0
  1247. data/spec/unit/parameter/path_spec.rb +0 -0
  1248. data/spec/unit/parameter/value_collection_spec.rb +0 -0
  1249. data/spec/unit/parameter/value_spec.rb +0 -0
  1250. data/spec/unit/parameter_spec.rb +11 -0
  1251. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  1252. data/spec/unit/parser/compiler_spec.rb +134 -33
  1253. data/spec/unit/parser/environment_compiler_spec.rb +688 -0
  1254. data/spec/unit/parser/files_spec.rb +0 -0
  1255. data/spec/unit/parser/functions/create_resources_spec.rb +86 -5
  1256. data/spec/unit/parser/functions/digest_spec.rb +0 -0
  1257. data/spec/unit/parser/functions/fail_spec.rb +0 -0
  1258. data/spec/unit/parser/functions/file_spec.rb +7 -1
  1259. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -2
  1260. data/spec/unit/parser/functions/generate_spec.rb +3 -12
  1261. data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
  1262. data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
  1263. data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
  1264. data/spec/unit/parser/functions/hiera_spec.rb +1 -1
  1265. data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
  1266. data/spec/unit/parser/functions/lookup_spec.rb +1 -1
  1267. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  1268. data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
  1269. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  1270. data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
  1271. data/spec/unit/parser/functions/split_spec.rb +1 -1
  1272. data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
  1273. data/spec/unit/parser/functions/tag_spec.rb +0 -0
  1274. data/spec/unit/parser/functions/template_spec.rb +1 -1
  1275. data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
  1276. data/spec/unit/parser/functions_spec.rb +0 -0
  1277. data/spec/unit/parser/relationship_spec.rb +0 -0
  1278. data/spec/unit/parser/resource/param_spec.rb +0 -0
  1279. data/spec/unit/parser/resource_spec.rb +31 -32
  1280. data/spec/unit/parser/scope_spec.rb +85 -18
  1281. data/spec/unit/parser/templatewrapper_spec.rb +1 -1
  1282. data/spec/unit/parser/type_loader_spec.rb +0 -0
  1283. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  1284. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  1285. data/spec/unit/pops/evaluator/access_ops_spec.rb +133 -18
  1286. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +170 -0
  1287. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  1288. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +3 -0
  1289. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +160 -41
  1290. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +29 -25
  1291. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  1292. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  1293. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +133 -0
  1294. data/spec/unit/pops/evaluator/variables_spec.rb +2 -2
  1295. data/spec/unit/pops/issues_spec.rb +16 -16
  1296. data/spec/unit/pops/label_provider_spec.rb +5 -1
  1297. data/spec/unit/pops/loaders/dependency_loader_spec.rb +66 -1
  1298. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  1299. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  1300. data/spec/unit/pops/loaders/loaders_spec.rb +410 -56
  1301. data/spec/unit/pops/loaders/module_loaders_spec.rb +63 -2
  1302. data/spec/unit/pops/loaders/static_loader_spec.rb +83 -18
  1303. data/spec/unit/pops/lookup/context_spec.rb +334 -0
  1304. data/spec/unit/pops/lookup/interpolation_spec.rb +333 -0
  1305. data/spec/unit/pops/lookup/lookup_spec.rb +262 -0
  1306. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  1307. data/spec/unit/pops/migration_spec.rb +53 -0
  1308. data/spec/unit/pops/parser/lexer2_spec.rb +377 -10
  1309. data/spec/unit/pops/parser/parse_application_spec.rb +35 -0
  1310. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +31 -0
  1311. data/spec/unit/pops/parser/parse_calls_spec.rb +25 -0
  1312. data/spec/unit/pops/parser/parse_capabilities_spec.rb +40 -0
  1313. data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
  1314. data/spec/unit/pops/parser/parse_heredoc_spec.rb +26 -0
  1315. data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
  1316. data/spec/unit/pops/parser/parse_site_spec.rb +51 -0
  1317. data/spec/unit/pops/parser/parser_rspec_helper.rb +6 -0
  1318. data/spec/unit/pops/parser/parser_spec.rb +28 -0
  1319. data/spec/unit/pops/parser/source_pos_adapter_spec.rb +26 -0
  1320. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  1321. data/spec/unit/pops/resource/resource_type_impl_spec.rb +111 -0
  1322. data/spec/unit/pops/serialization/packer_spec.rb +154 -0
  1323. data/spec/unit/pops/serialization/rgen_spec.rb +88 -0
  1324. data/spec/unit/pops/serialization/serialization_spec.rb +314 -0
  1325. data/spec/unit/pops/time/timespan_spec.rb +121 -0
  1326. data/spec/unit/pops/types/enumeration_spec.rb +13 -12
  1327. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  1328. data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
  1329. data/spec/unit/pops/types/p_object_type_spec.rb +1167 -0
  1330. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +327 -0
  1331. data/spec/unit/pops/types/p_sensitive_type_spec.rb +169 -0
  1332. data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
  1333. data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
  1334. data/spec/unit/pops/types/p_type_set_type_spec.rb +453 -0
  1335. data/spec/unit/pops/types/recursion_guard_spec.rb +93 -0
  1336. data/spec/unit/pops/types/ruby_generator_spec.rb +625 -0
  1337. data/spec/unit/pops/types/string_converter_spec.rb +1029 -0
  1338. data/spec/unit/pops/types/type_acceptor_spec.rb +106 -0
  1339. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  1340. data/spec/unit/pops/types/type_calculator_spec.rb +1095 -871
  1341. data/spec/unit/pops/types/type_factory_spec.rb +132 -91
  1342. data/spec/unit/pops/types/type_formatter_spec.rb +396 -0
  1343. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +228 -0
  1344. data/spec/unit/pops/types/type_parser_spec.rb +203 -36
  1345. data/spec/unit/pops/types/types_spec.rb +599 -0
  1346. data/spec/unit/pops/validation_spec.rb +66 -0
  1347. data/spec/unit/pops/validator/validator_spec.rb +400 -18
  1348. data/spec/unit/property/ensure_spec.rb +0 -0
  1349. data/spec/unit/property/keyvalue_spec.rb +0 -0
  1350. data/spec/unit/property/list_spec.rb +0 -0
  1351. data/spec/unit/property/ordered_list_spec.rb +0 -0
  1352. data/spec/unit/property_spec.rb +49 -12
  1353. data/spec/unit/provider/augeas/augeas_spec.rb +59 -0
  1354. data/spec/unit/provider/cisco_spec.rb +0 -0
  1355. data/spec/unit/provider/command_spec.rb +0 -0
  1356. data/spec/unit/provider/cron/crontab_spec.rb +0 -0
  1357. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  1358. data/spec/unit/provider/exec/posix_spec.rb +0 -0
  1359. data/spec/unit/provider/exec/shell_spec.rb +0 -0
  1360. data/spec/unit/provider/exec/windows_spec.rb +0 -0
  1361. data/spec/unit/provider/exec_spec.rb +0 -0
  1362. data/spec/unit/provider/file/posix_spec.rb +0 -0
  1363. data/spec/unit/provider/file/windows_spec.rb +0 -0
  1364. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  1365. data/spec/unit/provider/group/groupadd_spec.rb +0 -0
  1366. data/spec/unit/provider/group/ldap_spec.rb +0 -0
  1367. data/spec/unit/provider/group/pw_spec.rb +0 -0
  1368. data/spec/unit/provider/group/windows_adsi_spec.rb +88 -18
  1369. data/spec/unit/provider/host/parsed_spec.rb +0 -0
  1370. data/spec/unit/provider/interface/cisco_spec.rb +0 -0
  1371. data/spec/unit/provider/ldap_spec.rb +0 -0
  1372. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  1373. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
  1374. data/spec/unit/provider/mount/parsed_spec.rb +31 -5
  1375. data/spec/unit/provider/mount_spec.rb +0 -0
  1376. data/spec/unit/provider/naginator_spec.rb +0 -0
  1377. data/spec/unit/provider/nameservice/directoryservice_spec.rb +14 -19
  1378. data/spec/unit/provider/nameservice_spec.rb +54 -12
  1379. data/spec/unit/provider/network_device_spec.rb +0 -0
  1380. data/spec/unit/provider/package/aix_spec.rb +0 -0
  1381. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  1382. data/spec/unit/provider/package/apt_spec.rb +5 -0
  1383. data/spec/unit/provider/package/aptitude_spec.rb +0 -0
  1384. data/spec/unit/provider/package/aptrpm_spec.rb +3 -3
  1385. data/spec/unit/provider/package/base_spec.rb +18 -0
  1386. data/spec/unit/provider/package/dnf_spec.rb +30 -0
  1387. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  1388. data/spec/unit/provider/package/freebsd_spec.rb +0 -0
  1389. data/spec/unit/provider/package/gem_spec.rb +77 -0
  1390. data/spec/unit/provider/package/hpux_spec.rb +0 -0
  1391. data/spec/unit/provider/package/macports_spec.rb +0 -0
  1392. data/spec/unit/provider/package/nim_spec.rb +6 -6
  1393. data/spec/unit/provider/package/openbsd_spec.rb +0 -0
  1394. data/spec/unit/provider/package/opkg_spec.rb +0 -0
  1395. data/spec/unit/provider/package/pacman_spec.rb +55 -0
  1396. data/spec/unit/provider/package/pip3_spec.rb +22 -0
  1397. data/spec/unit/provider/package/pip_spec.rb +173 -46
  1398. data/spec/unit/provider/package/pkg_spec.rb +139 -99
  1399. data/spec/unit/provider/package/pkgdmg_spec.rb +32 -8
  1400. data/spec/unit/provider/package/pkgin_spec.rb +23 -13
  1401. data/spec/unit/provider/package/pkgng_spec.rb +186 -0
  1402. data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
  1403. data/spec/unit/provider/package/portage_spec.rb +64 -8
  1404. data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
  1405. data/spec/unit/provider/package/rpm_spec.rb +170 -12
  1406. data/spec/unit/provider/package/sun_spec.rb +0 -0
  1407. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  1408. data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -1
  1409. data/spec/unit/provider/package/windows/msi_package_spec.rb +0 -1
  1410. data/spec/unit/provider/package/windows/package_spec.rb +45 -1
  1411. data/spec/unit/provider/package/windows_spec.rb +8 -2
  1412. data/spec/unit/provider/package/yum_spec.rb +29 -466
  1413. data/spec/unit/provider/package/zypper_spec.rb +64 -19
  1414. data/spec/unit/provider/parsedfile_spec.rb +0 -0
  1415. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +523 -70
  1416. data/spec/unit/provider/selboolean_spec.rb +0 -0
  1417. data/spec/unit/provider/selmodule_spec.rb +0 -0
  1418. data/spec/unit/provider/service/base_spec.rb +44 -27
  1419. data/spec/unit/provider/service/bsd_spec.rb +130 -0
  1420. data/spec/unit/provider/service/daemontools_spec.rb +0 -0
  1421. data/spec/unit/provider/service/debian_spec.rb +38 -0
  1422. data/spec/unit/provider/service/freebsd_spec.rb +17 -0
  1423. data/spec/unit/provider/service/gentoo_spec.rb +8 -0
  1424. data/spec/unit/provider/service/init_spec.rb +42 -1
  1425. data/spec/unit/provider/service/launchd_spec.rb +124 -25
  1426. data/spec/unit/provider/service/openbsd_spec.rb +1 -0
  1427. data/spec/unit/provider/service/openrc_spec.rb +7 -0
  1428. data/spec/unit/provider/service/openwrt_spec.rb +0 -0
  1429. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  1430. data/spec/unit/provider/service/redhat_spec.rb +9 -1
  1431. data/spec/unit/provider/service/runit_spec.rb +0 -0
  1432. data/spec/unit/provider/service/smf_spec.rb +77 -13
  1433. data/spec/unit/provider/service/src_spec.rb +31 -4
  1434. data/spec/unit/provider/service/systemd_spec.rb +228 -39
  1435. data/spec/unit/provider/service/upstart_spec.rb +64 -0
  1436. data/spec/unit/provider/service/windows_spec.rb +0 -0
  1437. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -1
  1438. data/spec/unit/provider/sshkey/parsed_spec.rb +42 -18
  1439. data/spec/unit/provider/user/aix_spec.rb +7 -0
  1440. data/spec/unit/provider/user/directoryservice_spec.rb +164 -83
  1441. data/spec/unit/provider/user/hpux_spec.rb +0 -0
  1442. data/spec/unit/provider/user/ldap_spec.rb +0 -0
  1443. data/spec/unit/provider/user/openbsd_spec.rb +0 -0
  1444. data/spec/unit/provider/user/pw_spec.rb +0 -0
  1445. data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
  1446. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  1447. data/spec/unit/provider/user/windows_adsi_spec.rb +160 -7
  1448. data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
  1449. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  1450. data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
  1451. data/spec/unit/provider/zone/solaris_spec.rb +64 -12
  1452. data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
  1453. data/spec/unit/provider_spec.rb +0 -0
  1454. data/spec/unit/puppet_spec.rb +15 -1
  1455. data/spec/unit/relationship_spec.rb +0 -0
  1456. data/spec/unit/reports/http_spec.rb +0 -0
  1457. data/spec/unit/reports/store_spec.rb +0 -0
  1458. data/spec/unit/reports_spec.rb +10 -0
  1459. data/spec/unit/resource/capability_finder_spec.rb +147 -0
  1460. data/spec/unit/resource/catalog_spec.rb +235 -10
  1461. data/spec/unit/resource/status_spec.rb +0 -0
  1462. data/spec/unit/resource/type_collection_spec.rb +23 -2
  1463. data/spec/unit/resource/type_spec.rb +169 -12
  1464. data/spec/unit/resource_spec.rb +137 -48
  1465. data/spec/unit/semver_spec.rb +241 -0
  1466. data/spec/unit/settings/directory_setting_spec.rb +0 -0
  1467. data/spec/unit/settings/duration_setting_spec.rb +0 -0
  1468. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  1469. data/spec/unit/settings/file_setting_spec.rb +37 -0
  1470. data/spec/unit/settings/ini_file_spec.rb +58 -1
  1471. data/spec/unit/settings/path_setting_spec.rb +0 -0
  1472. data/spec/unit/settings/priority_setting_spec.rb +0 -0
  1473. data/spec/unit/settings_spec.rb +116 -3
  1474. data/spec/unit/ssl/base_spec.rb +9 -0
  1475. data/spec/unit/ssl/certificate_authority/interface_spec.rb +180 -13
  1476. data/spec/unit/ssl/certificate_authority_spec.rb +82 -28
  1477. data/spec/unit/ssl/certificate_factory_spec.rb +2 -2
  1478. data/spec/unit/ssl/certificate_request_attributes_spec.rb +6 -0
  1479. data/spec/unit/ssl/certificate_request_spec.rb +4 -5
  1480. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  1481. data/spec/unit/ssl/certificate_spec.rb +1 -1
  1482. data/spec/unit/ssl/configuration_spec.rb +11 -2
  1483. data/spec/unit/ssl/host_spec.rb +3 -3
  1484. data/spec/unit/ssl/inventory_spec.rb +27 -3
  1485. data/spec/unit/ssl/key_spec.rb +7 -7
  1486. data/spec/unit/ssl/oids_spec.rb +24 -13
  1487. data/spec/unit/status_spec.rb +0 -0
  1488. data/spec/unit/transaction/additional_resource_generator_spec.rb +160 -31
  1489. data/spec/unit/transaction/event_manager_spec.rb +0 -0
  1490. data/spec/unit/transaction/event_spec.rb +3 -1
  1491. data/spec/unit/transaction/persistence_spec.rb +178 -0
  1492. data/spec/unit/transaction/report_spec.rb +138 -2
  1493. data/spec/unit/transaction/resource_harness_spec.rb +81 -37
  1494. data/spec/unit/transaction_spec.rb +50 -0
  1495. data/spec/unit/type/augeas_spec.rb +0 -0
  1496. data/spec/unit/type/component_spec.rb +0 -0
  1497. data/spec/unit/type/computer_spec.rb +0 -0
  1498. data/spec/unit/type/cron_spec.rb +0 -0
  1499. data/spec/unit/type/exec_spec.rb +57 -12
  1500. data/spec/unit/type/file/checksum_spec.rb +6 -0
  1501. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  1502. data/spec/unit/type/file/content_spec.rb +59 -208
  1503. data/spec/unit/type/file/ctime_spec.rb +0 -0
  1504. data/spec/unit/type/file/ensure_spec.rb +0 -0
  1505. data/spec/unit/type/file/group_spec.rb +0 -0
  1506. data/spec/unit/type/file/mode_spec.rb +0 -0
  1507. data/spec/unit/type/file/mtime_spec.rb +0 -0
  1508. data/spec/unit/type/file/owner_spec.rb +0 -0
  1509. data/spec/unit/type/file/selinux_spec.rb +0 -0
  1510. data/spec/unit/type/file/source_spec.rb +211 -119
  1511. data/spec/unit/type/file/type_spec.rb +0 -0
  1512. data/spec/unit/type/file_spec.rb +165 -35
  1513. data/spec/unit/type/filebucket_spec.rb +0 -0
  1514. data/spec/unit/type/group_spec.rb +0 -0
  1515. data/spec/unit/type/host_spec.rb +4 -4
  1516. data/spec/unit/type/interface_spec.rb +32 -0
  1517. data/spec/unit/type/k5login_spec.rb +0 -0
  1518. data/spec/unit/type/macauthorization_spec.rb +4 -1
  1519. data/spec/unit/type/mailalias_spec.rb +0 -0
  1520. data/spec/unit/type/maillist_spec.rb +0 -0
  1521. data/spec/unit/type/mcx_spec.rb +0 -0
  1522. data/spec/unit/type/mount_spec.rb +50 -8
  1523. data/spec/unit/type/nagios_spec.rb +0 -0
  1524. data/spec/unit/type/noop_metaparam_spec.rb +0 -0
  1525. data/spec/unit/type/package/package_settings_spec.rb +0 -0
  1526. data/spec/unit/type/package_spec.rb +1 -0
  1527. data/spec/unit/type/resources_spec.rb +0 -0
  1528. data/spec/unit/type/schedule_spec.rb +0 -0
  1529. data/spec/unit/type/selboolean_spec.rb +0 -0
  1530. data/spec/unit/type/selmodule_spec.rb +0 -0
  1531. data/spec/unit/type/service_spec.rb +21 -0
  1532. data/spec/unit/type/ssh_authorized_key_spec.rb +0 -0
  1533. data/spec/unit/type/sshkey_spec.rb +0 -0
  1534. data/spec/unit/type/stage_spec.rb +0 -0
  1535. data/spec/unit/type/tidy_spec.rb +4 -4
  1536. data/spec/unit/type/user_spec.rb +40 -7
  1537. data/spec/unit/type/vlan_spec.rb +1 -1
  1538. data/spec/unit/type/whit_spec.rb +0 -0
  1539. data/spec/unit/type/yumrepo_spec.rb +3 -7
  1540. data/spec/unit/type/zfs_spec.rb +0 -0
  1541. data/spec/unit/type/zone_spec.rb +0 -0
  1542. data/spec/unit/type/zpool_spec.rb +0 -0
  1543. data/spec/unit/type_spec.rb +119 -1
  1544. data/spec/unit/util/autoload_spec.rb +0 -0
  1545. data/spec/unit/util/backups_spec.rb +0 -0
  1546. data/spec/unit/util/character_encoding_spec.rb +88 -0
  1547. data/spec/unit/util/checksums_spec.rb +0 -0
  1548. data/spec/unit/util/colors_spec.rb +0 -0
  1549. data/spec/unit/util/command_line_spec.rb +11 -0
  1550. data/spec/unit/util/constant_inflector_spec.rb +0 -0
  1551. data/spec/unit/util/diff_spec.rb +0 -0
  1552. data/spec/unit/util/errors_spec.rb +0 -0
  1553. data/spec/unit/util/execution_spec.rb +13 -1
  1554. data/spec/unit/util/execution_stub_spec.rb +0 -0
  1555. data/spec/unit/util/feature_spec.rb +1 -1
  1556. data/spec/unit/util/filetype_spec.rb +4 -4
  1557. data/spec/unit/util/http_proxy_spec.rb +91 -0
  1558. data/spec/unit/util/ldap/connection_spec.rb +0 -0
  1559. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  1560. data/spec/unit/util/ldap/manager_spec.rb +0 -0
  1561. data/spec/unit/util/log/destinations_spec.rb +0 -2
  1562. data/spec/unit/util/log_spec.rb +125 -1
  1563. data/spec/unit/util/logging_spec.rb +69 -0
  1564. data/spec/unit/util/metric_spec.rb +0 -0
  1565. data/spec/unit/util/monkey_patches_spec.rb +95 -3
  1566. data/spec/unit/util/multi_match_spec.rb +39 -0
  1567. data/spec/unit/util/nagios_maker_spec.rb +0 -0
  1568. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  1569. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
  1570. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  1571. data/spec/unit/util/network_device/config_spec.rb +0 -0
  1572. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
  1573. data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
  1574. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  1575. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  1576. data/spec/unit/util/network_device_spec.rb +1 -1
  1577. data/spec/unit/util/package_spec.rb +0 -0
  1578. data/spec/unit/util/plist_spec.rb +135 -0
  1579. data/spec/unit/util/posix_spec.rb +0 -0
  1580. data/spec/unit/util/rdoc_spec.rb +0 -0
  1581. data/spec/unit/util/resource_template_spec.rb +2 -2
  1582. data/spec/unit/util/retry_action_spec.rb +0 -0
  1583. data/spec/unit/util/run_mode_spec.rb +27 -3
  1584. data/spec/unit/util/selinux_spec.rb +0 -0
  1585. data/spec/unit/util/splayer_spec.rb +45 -0
  1586. data/spec/unit/util/storage_spec.rb +8 -1
  1587. data/spec/unit/util/suidmanager_spec.rb +0 -0
  1588. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
  1589. data/spec/unit/util/tagging_spec.rb +4 -0
  1590. data/spec/unit/util/user_attr_spec.rb +0 -0
  1591. data/spec/unit/util/warnings_spec.rb +0 -0
  1592. data/spec/unit/util/windows/adsi_spec.rb +196 -60
  1593. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  1594. data/spec/unit/util/windows/file_spec.rb +89 -0
  1595. data/spec/unit/util/windows/root_certs_spec.rb +0 -0
  1596. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  1597. data/spec/unit/util/windows/sid_spec.rb +76 -24
  1598. data/spec/unit/util/yaml_spec.rb +13 -1
  1599. data/spec/unit/util_spec.rb +219 -15
  1600. data/spec/unit/version_spec.rb +19 -0
  1601. data/spec/watchr.rb +0 -0
  1602. data/tasks/cfpropertylist.rake +15 -0
  1603. metadata +770 -115
  1604. data/ext/puppet-nm-dispatcher +0 -13
  1605. data/ext/puppetlisten/puppetlisten.rb +0 -77
  1606. data/ext/puppetlisten/puppetrun.rb +0 -38
  1607. data/ext/systemd/puppetmaster.service +0 -11
  1608. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  1609. data/lib/puppet/pops/types/types_meta.rb +0 -223
  1610. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  1611. data/lib/puppet/vendor/load_plist.rb +0 -1
  1612. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  1613. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  1614. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  1615. data/lib/puppet/vendor/plist/README +0 -36
  1616. data/lib/puppet/vendor/plist/Rakefile +0 -144
  1617. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  1618. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  1619. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  1620. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  1621. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  1622. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  1623. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  1624. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  1625. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  1626. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  1627. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  1628. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  1629. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  1630. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  1631. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  1632. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  1633. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  1634. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  1635. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  1636. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  1637. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  1638. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  1639. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  1640. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  1641. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  1642. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  1643. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  1644. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  1645. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  1646. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  1647. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
  1648. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -3
  1649. data/spec/integration/data_binding.rb +0 -104
  1650. data/spec/integration/parser/functions/require_spec.rb +0 -43
  1651. data/spec/integration/provider/package_spec.rb +0 -33
  1652. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  1653. data/spec/unit/parser/functions/include_spec.rb +0 -55
  1654. data/spec/unit/parser/functions/require_spec.rb +0 -68
  1655. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
  1656. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  1657. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  1658. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
  1659. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  1660. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  1661. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
  1662. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
  1663. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  1664. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  1665. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  1666. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  1667. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/lib/puppet/functions/user/caller.rb +0 -0
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
  require 'puppet_spec/compiler'
3
3
  require 'matchers/resource'
4
4
 
5
+ # COPY OF UNIT TEST
5
6
  class CompilerTestResource
6
7
  attr_accessor :builtin, :virtual, :evaluated, :type, :title
7
8
 
@@ -49,6 +50,10 @@ class CompilerTestResource
49
50
  def line
50
51
  "42"
51
52
  end
53
+
54
+ def resource_type
55
+ self.class
56
+ end
52
57
  end
53
58
 
54
59
  describe Puppet::Parser::Compiler do
@@ -79,849 +84,1055 @@ describe Puppet::Parser::Compiler do
79
84
  @scope.resource = @scope_resource
80
85
  end
81
86
 
82
- it "should fail intelligently when a class-level compile fails" do
83
- Puppet::Parser::Compiler.expects(:new).raises ArgumentError
84
- expect { Puppet::Parser::Compiler.compile(@node) }.to raise_error(Puppet::Error)
85
- end
86
-
87
- it "should use the node's environment as its environment" do
88
- expect(@compiler.environment).to equal(@node.environment)
89
- end
90
-
91
- it "fails if the node's environment has validation errors" do
92
- conflicted_environment = Puppet::Node::Environment.create(:testing, [], '/some/environment.conf/manifest.pp')
93
- conflicted_environment.stubs(:validation_errors).returns(['bad environment'])
94
- @node.environment = conflicted_environment
95
- expect { Puppet::Parser::Compiler.compile(@node) }.to raise_error(Puppet::Error, /Compilation has been halted because.*bad environment/)
96
- end
97
-
98
- it "should include the resource type collection helper" do
99
- expect(Puppet::Parser::Compiler.ancestors).to be_include(Puppet::Resource::TypeCollectionHelper)
100
- end
101
-
102
- it "should be able to return a class list containing all added classes" do
103
- @compiler.add_class ""
104
- @compiler.add_class "one"
105
- @compiler.add_class "two"
106
-
107
- expect(@compiler.classlist.sort).to eq(%w{one two}.sort)
108
- end
109
-
110
- describe "when initializing" do
111
-
112
- it "should set its node attribute" do
113
- expect(@compiler.node).to equal(@node)
114
- end
115
- it "should detect when ast nodes are absent" do
116
- expect(@compiler.ast_nodes?).to be_falsey
117
- end
118
-
119
- it "should detect when ast nodes are present" do
120
- @known_resource_types.expects(:nodes?).returns true
121
- expect(@compiler.ast_nodes?).to be_truthy
122
- end
123
-
124
- it "should copy the known_resource_types version to the catalog" do
125
- expect(@compiler.catalog.version).to eq(@known_resource_types.version)
126
- end
127
-
128
- it "should copy any node classes into the class list" do
129
- node = Puppet::Node.new("mynode")
130
- node.classes = %w{foo bar}
131
- compiler = Puppet::Parser::Compiler.new(node)
132
-
133
- expect(compiler.classlist).to match_array(['foo', 'bar'])
134
- end
135
-
136
- it "should transform node class hashes into a class list" do
137
- node = Puppet::Node.new("mynode")
138
- node.classes = {'foo'=>{'one'=>'p1'}, 'bar'=>{'two'=>'p2'}}
139
- compiler = Puppet::Parser::Compiler.new(node)
87
+ # NEW INTEGRATION TEST
88
+ describe "when evaluating collections" do
89
+ it 'matches on container inherited tags' do
90
+ Puppet[:code] = <<-MANIFEST
91
+ class xport_test {
92
+ tag('foo_bar')
93
+ @notify { 'nbr1':
94
+ message => 'explicitly tagged',
95
+ tag => 'foo_bar'
96
+ }
97
+
98
+ @notify { 'nbr2':
99
+ message => 'implicitly tagged'
100
+ }
101
+
102
+ Notify <| tag == 'foo_bar' |> {
103
+ message => 'overridden'
104
+ }
105
+ }
106
+ include xport_test
107
+ MANIFEST
140
108
 
141
- expect(compiler.classlist).to match_array(['foo', 'bar'])
142
- end
109
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
143
110
 
144
- it "should add a 'main' stage to the catalog" do
145
- expect(@compiler.catalog.resource(:stage, :main)).to be_instance_of(Puppet::Parser::Resource)
111
+ expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
112
+ expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
146
113
  end
147
114
  end
148
115
 
149
- describe "when managing scopes" do
150
-
151
- it "should create a top scope" do
152
- expect(@compiler.topscope).to be_instance_of(Puppet::Parser::Scope)
153
- end
154
-
155
- it "should be able to create new scopes" do
156
- expect(@compiler.newscope(@compiler.topscope)).to be_instance_of(Puppet::Parser::Scope)
157
- end
158
-
159
- it "should set the parent scope of the new scope to be the passed-in parent" do
160
- scope = mock 'scope'
161
- newscope = @compiler.newscope(scope)
116
+ describe "when evaluating node classes" do
117
+ include PuppetSpec::Compiler
162
118
 
163
- expect(newscope.parent).to equal(scope)
164
- end
119
+ describe "when provided classes in hash format" do
120
+ it 'looks up default parameter values from inherited class (PUP-2532)' do
121
+ catalog = compile_to_catalog(<<-CODE)
122
+ class a {
123
+ Notify { message => "defaulted" }
124
+ include c
125
+ notify { bye: }
126
+ }
127
+ class b { Notify { message => "inherited" } }
128
+ class c inherits b { notify { hi: } }
165
129
 
166
- it "should set the parent scope of the new scope to its topscope if the parent passed in is nil" do
167
- scope = mock 'scope'
168
- newscope = @compiler.newscope(nil)
130
+ include a
131
+ notify {hi_test: message => Notify[hi][message] }
132
+ notify {bye_test: message => Notify[bye][message] }
133
+ CODE
169
134
 
170
- expect(newscope.parent).to equal(@compiler.topscope)
135
+ expect(catalog).to have_resource("Notify[hi_test]").with_parameter(:message, "inherited")
136
+ expect(catalog).to have_resource("Notify[bye_test]").with_parameter(:message, "defaulted")
137
+ end
171
138
  end
172
139
  end
173
140
 
174
- describe "when compiling" do
175
-
176
- def compile_methods
177
- [:set_node_parameters, :evaluate_main, :evaluate_ast_node, :evaluate_node_classes, :evaluate_generators, :fail_on_unevaluated,
178
- :finish, :store, :extract, :evaluate_relationships]
179
- end
180
-
181
- # Stub all of the main compile methods except the ones we're specifically interested in.
182
- def compile_stub(*except)
183
- (compile_methods - except).each { |m| @compiler.stubs(m) }
184
- end
185
-
186
- it "should set node parameters as variables in the top scope" do
187
- params = {"a" => "b", "c" => "d"}
188
- @node.stubs(:parameters).returns(params)
189
- compile_stub(:set_node_parameters)
190
- @compiler.compile
191
- expect(@compiler.topscope['a']).to eq("b")
192
- expect(@compiler.topscope['c']).to eq("d")
193
- end
194
-
195
- it "should set the client and server versions on the catalog" do
196
- params = {"clientversion" => "2", "serverversion" => "3"}
197
- @node.stubs(:parameters).returns(params)
198
- compile_stub(:set_node_parameters)
199
- @compiler.compile
200
- expect(@compiler.catalog.client_version).to eq("2")
201
- expect(@compiler.catalog.server_version).to eq("3")
202
- end
203
-
204
- it "should evaluate the main class if it exists" do
205
- compile_stub(:evaluate_main)
206
- main_class = @known_resource_types.add Puppet::Resource::Type.new(:hostclass, "")
207
- main_class.expects(:evaluate_code).with { |r| r.is_a?(Puppet::Parser::Resource) }
208
- @compiler.topscope.expects(:source=).with(main_class)
209
-
210
- @compiler.compile
211
- end
212
-
213
- it "should create a new, empty 'main' if no main class exists" do
214
- compile_stub(:evaluate_main)
215
- @compiler.compile
216
- expect(@known_resource_types.find_hostclass("")).to be_instance_of(Puppet::Resource::Type)
217
- end
218
-
219
- it "should add an edge between the main stage and main class" do
220
- @compiler.compile
221
- expect(stage = @compiler.catalog.resource(:stage, "main")).to be_instance_of(Puppet::Parser::Resource)
222
- expect(klass = @compiler.catalog.resource(:class, "")).to be_instance_of(Puppet::Parser::Resource)
223
-
224
- expect(@compiler.catalog.edge?(stage, klass)).to be_truthy
225
- end
226
-
227
- it "should evaluate all added collections" do
228
- colls = []
229
- # And when the collections fail to evaluate.
230
- colls << mock("coll1-false")
231
- colls << mock("coll2-false")
232
- colls.each { |c| c.expects(:evaluate).returns(false) }
233
-
234
- @compiler.add_collection(colls[0])
235
- @compiler.add_collection(colls[1])
236
-
237
- compile_stub(:evaluate_generators)
238
- @compiler.compile
239
- end
240
-
241
- it "should ignore builtin resources" do
242
- resource = resource(:file, "testing")
243
-
244
- @compiler.add_resource(@scope, resource)
245
- resource.expects(:evaluate).never
246
-
247
- @compiler.compile
248
- end
249
-
250
- it "should evaluate unevaluated resources" do
251
- resource = CompilerTestResource.new(:file, "testing")
252
-
253
- @compiler.add_resource(@scope, resource)
141
+ context "when converting catalog to resource" do
142
+ it "the same environment is used for compilation as for transformation to resource form" do
143
+ Puppet[:code] = <<-MANIFEST
144
+ notify { 'dummy':
145
+ }
146
+ MANIFEST
254
147
 
255
- # We have to now mark the resource as evaluated
256
- resource.expects(:evaluate).with { |*whatever| resource.evaluated = true }
148
+ Puppet::Parser::Resource::Catalog.any_instance.expects(:to_resource).with do |catalog|
149
+ Puppet.lookup(:current_environment).name == :production
150
+ end
257
151
 
258
- @compiler.compile
152
+ Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
259
153
  end
154
+ end
260
155
 
261
- it "should not evaluate already-evaluated resources" do
262
- resource = resource(:file, "testing")
263
- resource.stubs(:evaluated?).returns true
264
-
265
- @compiler.add_resource(@scope, resource)
266
- resource.expects(:evaluate).never
267
-
268
- @compiler.compile
156
+ context 'when working with $settings name space' do
157
+ include PuppetSpec::Compiler
158
+ it 'makes $settings::strict available as string' do
159
+ node = Puppet::Node.new("testing")
160
+ catalog = compile_to_catalog(<<-MANIFEST, node)
161
+ notify { 'test': message => $settings::strict == 'warning' }
162
+ MANIFEST
163
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
269
164
  end
270
165
 
271
- it "should evaluate unevaluated resources created by evaluating other resources" do
272
- resource = CompilerTestResource.new(:file, "testing")
273
- @compiler.add_resource(@scope, resource)
274
-
275
- resource2 = CompilerTestResource.new(:file, "other")
276
-
277
- # We have to now mark the resource as evaluated
278
- resource.expects(:evaluate).with { |*whatever| resource.evaluated = true; @compiler.add_resource(@scope, resource2) }
279
- resource2.expects(:evaluate).with { |*whatever| resource2.evaluated = true }
280
-
281
-
282
- @compiler.compile
166
+ it 'can return boolean settings as Boolean' do
167
+ node = Puppet::Node.new("testing")
168
+ catalog = compile_to_catalog(<<-MANIFEST, node)
169
+ notify { 'test': message => $settings::storeconfigs == false }
170
+ MANIFEST
171
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
283
172
  end
173
+ end
284
174
 
285
- describe "when finishing" do
286
- before do
287
- @compiler.send(:evaluate_main)
288
- @catalog = @compiler.catalog
289
- end
290
-
291
- def add_resource(name, parent = nil)
292
- resource = Puppet::Parser::Resource.new "file", name, :scope => @scope
293
- @compiler.add_resource(@scope, resource)
294
- @catalog.add_edge(parent, resource) if parent
295
- resource
296
- end
297
-
298
- it "should call finish() on all resources" do
299
- # Add a resource that does respond to :finish
300
- resource = Puppet::Parser::Resource.new "file", "finish", :scope => @scope
301
- resource.expects(:finish)
302
-
303
- @compiler.add_resource(@scope, resource)
304
-
305
- # And one that does not
306
- dnf_resource = stub_everything "dnf", :ref => "File[dnf]", :type => "file"
307
-
308
- @compiler.add_resource(@scope, dnf_resource)
309
-
310
- @compiler.send(:finish)
175
+ context 'when working with $server_facts' do
176
+ include PuppetSpec::Compiler
177
+ context 'and have opted in to trusted_server_facts' do
178
+ before :each do
179
+ Puppet[:trusted_server_facts] = true
311
180
  end
312
181
 
313
- it "should call finish() in add_resource order" do
314
- resources = sequence('resources')
182
+ it 'should make $trusted available' do
183
+ node = Puppet::Node.new("testing")
184
+ node.add_server_facts({ "server_fact" => "foo" })
315
185
 
316
- resource1 = add_resource("finish1")
317
- resource1.expects(:finish).in_sequence(resources)
318
-
319
- resource2 = add_resource("finish2")
320
- resource2.expects(:finish).in_sequence(resources)
186
+ catalog = compile_to_catalog(<<-MANIFEST, node)
187
+ notify { 'test': message => $server_facts[server_fact] }
188
+ MANIFEST
321
189
 
322
- @compiler.send(:finish)
190
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, "foo")
323
191
  end
324
192
 
325
- it "should add each container's metaparams to its contained resources" do
326
- main = @catalog.resource(:class, :main)
327
- main[:noop] = true
328
-
329
- resource1 = add_resource("meh", main)
193
+ it 'should not allow assignment to $server_facts' do
194
+ node = Puppet::Node.new("testing")
195
+ node.add_server_facts({ "server_fact" => "foo" })
330
196
 
331
- @compiler.send(:finish)
332
- expect(resource1[:noop]).to be_truthy
197
+ expect do
198
+ compile_to_catalog(<<-MANIFEST, node)
199
+ $server_facts = 'changed'
200
+ notify { 'test': message => $server_facts == 'changed' }
201
+ MANIFEST
202
+ end.to raise_error(Puppet::PreformattedError, /Attempt to assign to a reserved variable name: '\$server_facts'.*/)
333
203
  end
204
+ end
334
205
 
335
- it "should add metaparams recursively" do
336
- main = @catalog.resource(:class, :main)
337
- main[:noop] = true
338
-
339
- resource1 = add_resource("meh", main)
340
- resource2 = add_resource("foo", resource1)
341
-
342
- @compiler.send(:finish)
343
- expect(resource2[:noop]).to be_truthy
206
+ context 'and have not opted in to hashed_node_data' do
207
+ before :each do
208
+ Puppet[:trusted_server_facts] = false
344
209
  end
345
210
 
346
- it "should prefer metaparams from immediate parents" do
347
- main = @catalog.resource(:class, :main)
348
- main[:noop] = true
349
-
350
- resource1 = add_resource("meh", main)
351
- resource2 = add_resource("foo", resource1)
211
+ it 'should not make $server_facts available' do
212
+ node = Puppet::Node.new("testing")
213
+ node.add_server_facts({ "server_fact" => "foo" })
352
214
 
353
- resource1[:noop] = false
215
+ catalog = compile_to_catalog(<<-MANIFEST, node)
216
+ notify { 'test': message => ($server_facts == undef) }
217
+ MANIFEST
354
218
 
355
- @compiler.send(:finish)
356
- expect(resource2[:noop]).to be_falsey
219
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
357
220
  end
358
221
 
359
- it "should merge tags downward" do
360
- main = @catalog.resource(:class, :main)
361
- main.tag("one")
362
-
363
- resource1 = add_resource("meh", main)
364
- resource1.tag "two"
365
- resource2 = add_resource("foo", resource1)
222
+ it 'should allow assignment to $server_facts' do
223
+ catalog = compile_to_catalog(<<-MANIFEST)
224
+ $server_facts = 'changed'
225
+ notify { 'test': message => $server_facts == 'changed' }
226
+ MANIFEST
366
227
 
367
- @compiler.send(:finish)
368
- expect(resource2.tags).to be_include("one")
369
- expect(resource2.tags).to be_include("two")
228
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
370
229
  end
230
+ it 'should warn about assignment to $server_facts' do
231
+ catalog = compile_to_catalog(<<-MANIFEST)
232
+ $server_facts = 'changed'
233
+ notify { 'test': message => $server_facts == 'changed' }
234
+ MANIFEST
235
+ expect(@logs).to have_matching_log(/Assignment to \$server_facts is deprecated/)
371
236
 
372
- it "should work if only middle resources have metaparams set" do
373
- main = @catalog.resource(:class, :main)
374
-
375
- resource1 = add_resource("meh", main)
376
- resource1[:noop] = true
377
- resource2 = add_resource("foo", resource1)
378
-
379
- @compiler.send(:finish)
380
- expect(resource2[:noop]).to be_truthy
237
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
381
238
  end
382
239
  end
240
+ end
241
+ describe "the compiler when using 4.x language constructs" do
242
+ include PuppetSpec::Compiler
383
243
 
384
- it "should return added resources in add order" do
385
- resource1 = resource(:file, "yay")
386
- @compiler.add_resource(@scope, resource1)
387
- resource2 = resource(:file, "youpi")
388
- @compiler.add_resource(@scope, resource2)
389
-
390
- expect(@compiler.resources).to eq([resource1, resource2])
391
- end
392
-
393
- it "should add resources that do not conflict with existing resources" do
394
- resource = resource(:file, "yay")
395
- @compiler.add_resource(@scope, resource)
396
-
397
- expect(@compiler.catalog).to be_vertex(resource)
398
- end
399
-
400
- it "should fail to add resources that conflict with existing resources" do
401
- path = make_absolute("/foo")
402
- file1 = resource(:file, path)
403
- file2 = resource(:file, path)
404
-
405
- @compiler.add_resource(@scope, file1)
406
- expect { @compiler.add_resource(@scope, file2) }.to raise_error(Puppet::Resource::Catalog::DuplicateResourceError)
407
- end
244
+ if Puppet.features.microsoft_windows?
245
+ it "should be able to determine the configuration version from a local version control repository" do
246
+ pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows")
247
+ # This should always work, because we should always be
248
+ # in the puppet repo when we run this.
249
+ version = %x{git rev-parse HEAD}.chomp
408
250
 
409
- it "should add an edge from the scope resource to the added resource" do
410
- resource = resource(:file, "yay")
411
- @compiler.add_resource(@scope, resource)
251
+ Puppet.settings[:config_version] = 'git rev-parse HEAD'
412
252
 
413
- expect(@compiler.catalog).to be_edge(@scope.resource, resource)
253
+ compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("testnode"))
254
+ compiler.catalog.version.should == version
255
+ end
414
256
  end
415
257
 
416
- it "should not add non-class resources that don't specify a stage to the 'main' stage" do
417
- main = @compiler.catalog.resource(:stage, :main)
418
- resource = resource(:file, "foo")
419
- @compiler.add_resource(@scope, resource)
258
+ it 'assigns multiple variables from a class' do
259
+ node = Puppet::Node.new("testnodex")
260
+ catalog = compile_to_catalog(<<-PP, node)
261
+ class foo::bar::example($x = 100) {
262
+ $a = 10
263
+ $c = undef
264
+ }
265
+ include foo::bar::example
266
+
267
+ [$a, $x, $c] = Class['foo::bar::example']
268
+ notify{'check_me': message => "$a, $x, -${c}-" }
269
+ PP
270
+ expect(catalog).to have_resource("Notify[check_me]").with_parameter(:message, "10, 100, --")
271
+ end
272
+
273
+ it 'errors on attempt to assigns multiple variables from a class when variable does not exist' do
274
+ node = Puppet::Node.new("testnodex")
275
+ expect do
276
+ compile_to_catalog(<<-PP, node)
277
+ class foo::bar::example($x = 100) {
278
+ $ah = 10
279
+ $c = undef
280
+ }
281
+ include foo::bar::example
282
+
283
+ [$a, $x, $c] = Class['foo::bar::example']
284
+ notify{'check_me': message => "$a, $x, -${c}-" }
285
+ PP
286
+ end.to raise_error(/No value for required variable '\$foo::bar::example::a'/)
287
+ end
288
+
289
+ it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
290
+ node = Puppet::Node.new("testnodex")
291
+ node.classes = ['foo', 'bar']
292
+ catalog = compile_to_catalog(<<-PP, node)
293
+ class foo
294
+ {
295
+ notify { foo_notify: }
296
+ include bar
297
+ }
298
+ class bar
299
+ {
300
+ notify { bar_notify: }
301
+ }
302
+ PP
303
+
304
+ catalog = Puppet::Parser::Compiler.compile(node)
305
+
306
+ expect(catalog).to have_resource("Notify[foo_notify]")
307
+ expect(catalog).to have_resource("Notify[bar_notify]")
308
+ end
309
+
310
+ it 'applies defaults for defines with qualified names (PUP-2302)' do
311
+ catalog = compile_to_catalog(<<-CODE)
312
+ define my::thing($msg = 'foo') { notify {'check_me': message => $msg } }
313
+ My::Thing { msg => 'evoe' }
314
+ my::thing { 'name': }
315
+ CODE
316
+
317
+ expect(catalog).to have_resource("Notify[check_me]").with_parameter(:message, "evoe")
318
+ end
319
+
320
+ it 'Applies defaults from dynamic scopes (3x and future with reverted PUP-867)' do
321
+ catalog = compile_to_catalog(<<-CODE)
322
+ class a {
323
+ Notify { message => "defaulted" }
324
+ include b
325
+ notify { bye: }
326
+ }
327
+ class b { notify { hi: } }
420
328
 
421
- expect(@compiler.catalog).not_to be_edge(main, resource)
329
+ include a
330
+ CODE
331
+ expect(catalog).to have_resource("Notify[hi]").with_parameter(:message, "defaulted")
332
+ expect(catalog).to have_resource("Notify[bye]").with_parameter(:message, "defaulted")
422
333
  end
423
334
 
424
- it "should not add any parent-edges to stages" do
425
- stage = resource(:stage, "other")
426
- @compiler.add_resource(@scope, stage)
335
+ it 'gets default from inherited class (PUP-867)' do
336
+ catalog = compile_to_catalog(<<-CODE)
337
+ class a {
338
+ Notify { message => "defaulted" }
339
+ include c
340
+ notify { bye: }
341
+ }
342
+ class b { Notify { message => "inherited" } }
343
+ class c inherits b { notify { hi: } }
427
344
 
428
- @scope.resource = resource(:class, "foo")
345
+ include a
346
+ CODE
429
347
 
430
- expect(@compiler.catalog.edge?(@scope.resource, stage)).to be_falsey
348
+ expect(catalog).to have_resource("Notify[hi]").with_parameter(:message, "inherited")
349
+ expect(catalog).to have_resource("Notify[bye]").with_parameter(:message, "defaulted")
431
350
  end
432
351
 
433
- it "should not attempt to add stages to other stages" do
434
- other_stage = resource(:stage, "other")
435
- second_stage = resource(:stage, "second")
436
- @compiler.add_resource(@scope, other_stage)
437
- @compiler.add_resource(@scope, second_stage)
438
-
439
- second_stage[:stage] = "other"
440
-
441
- expect(@compiler.catalog.edge?(other_stage, second_stage)).to be_falsey
442
- end
352
+ it 'looks up default parameter values from inherited class (PUP-2532)' do
353
+ catalog = compile_to_catalog(<<-CODE)
354
+ class a {
355
+ Notify { message => "defaulted" }
356
+ include c
357
+ notify { bye: }
358
+ }
359
+ class b { Notify { message => "inherited" } }
360
+ class c inherits b { notify { hi: } }
361
+
362
+ include a
363
+ notify {hi_test: message => Notify[hi][message] }
364
+ notify {bye_test: message => Notify[bye][message] }
365
+ CODE
366
+
367
+ expect(catalog).to have_resource("Notify[hi_test]").with_parameter(:message, "inherited")
368
+ expect(catalog).to have_resource("Notify[bye_test]").with_parameter(:message, "defaulted")
369
+ end
370
+
371
+ it 'does not allow override of class parameters using a resource override expression' do
372
+ expect do
373
+ compile_to_catalog(<<-CODE)
374
+ Class[a] { x => 2}
375
+ CODE
376
+ end.to raise_error(/Resource Override can only.*got: Class\[a\].*/)
377
+ end
378
+
379
+ describe 'when resolving class references' do
380
+ include Matchers::Resource
381
+
382
+ { 'string' => 'myWay',
383
+ 'class reference' => 'Class["myWay"]',
384
+ 'resource reference' => 'Resource["class", "myWay"]'
385
+ }.each do |label, code|
386
+ it "allows camel cased class name reference in 'include' using a #{label}" do
387
+ catalog = compile_to_catalog(<<-"PP")
388
+ class myWay {
389
+ notify { 'I did it': message => 'my way'}
390
+ }
391
+ include #{code}
392
+ PP
393
+ expect(catalog).to have_resource("Notify[I did it]")
394
+ end
395
+ end
443
396
 
444
- it "should have a method for looking up resources" do
445
- resource = resource(:yay, "foo")
446
- @compiler.add_resource(@scope, resource)
447
- expect(@compiler.findresource("Yay[foo]")).to equal(resource)
448
- end
397
+ describe 'and classname is a Resource Reference and strict == :error' do
398
+ before(:each) do
399
+ Puppet[:strict] = :error
400
+ end
449
401
 
450
- it "should be able to look resources up by type and title" do
451
- resource = resource(:yay, "foo")
452
- @compiler.add_resource(@scope, resource)
453
- expect(@compiler.findresource("Yay", "foo")).to equal(resource)
454
- end
402
+ it 'is reported as an error' do
403
+ expect {
404
+ compile_to_catalog(<<-PP)
405
+ notice Class[ToothFairy]
406
+ PP
407
+ }.to raise_error(/Illegal Class name in class reference. A TypeReference\['ToothFairy'\]-Type cannot be used where a String is expected/)
408
+ end
409
+ end
455
410
 
456
- it "should not evaluate virtual defined resources" do
457
- resource = resource(:file, "testing")
458
- resource.virtual = true
459
- @compiler.add_resource(@scope, resource)
411
+ describe 'and classname is a Resource Reference and strict == :warning' do
412
+ before(:each) do
413
+ Puppet[:strict] = :warning
414
+ end
460
415
 
461
- resource.expects(:evaluate).never
416
+ it 'is reported as a deprecation warning' do
417
+ expect {
418
+ compile_to_catalog(<<-PP)
419
+ notice Class[ToothFairy]
420
+ PP
421
+ expect(@logs).to have_matching_log(/Upper cased class-name in a Class\[<class-name>\] is deprecated, class-name should be a lowercase string/)
462
422
 
463
- @compiler.compile
464
- end
465
- end
423
+ }.to_not raise_error()
424
+ end
425
+ end
466
426
 
467
- describe "when evaluating collections" do
427
+ describe 'and classname is a Resource Reference and strict == :off' do
428
+ before(:each) do
429
+ Puppet[:strict] = :off
430
+ end
468
431
 
469
- it "should evaluate each collection" do
470
- 2.times { |i|
471
- coll = mock 'coll%s' % i
472
- @compiler.add_collection(coll)
432
+ it 'is not reported' do
433
+ expect {
434
+ compile_to_catalog(<<-PP)
435
+ notice Class[ToothFairy]
436
+ PP
437
+ expect(@logs).to_not have_matching_log(/Warning: Upper cased class-name in a Class\[<class-name>\] is deprecated, class-name should be a lowercase string/)
473
438
 
474
- # This is the hard part -- we have to emulate the fact that
475
- # collections delete themselves if they are done evaluating.
476
- coll.expects(:evaluate).with do
477
- @compiler.delete_collection(coll)
439
+ }.to_not raise_error()
478
440
  end
479
- }
441
+ end
480
442
 
481
- @compiler.compile
482
- end
443
+ it "should not favor local scope (with class included in topscope)" do
444
+ catalog = compile_to_catalog(<<-PP)
445
+ class experiment {
446
+ class baz {
447
+ }
448
+ notify {"x" : require => Class['baz'] }
449
+ notify {"y" : require => Class['experiment::baz'] }
450
+ }
451
+ class baz {
452
+ }
453
+ include baz
454
+ include experiment
455
+ include experiment::baz
456
+ PP
483
457
 
484
- it "should not fail when there are unevaluated resource collections that do not refer to specific resources" do
485
- coll = stub 'coll', :evaluate => false
486
- coll.expects(:unresolved_resources).returns(nil)
458
+ expect(catalog).to have_resource("Notify[x]").with_parameter(:require, be_resource("Class[Baz]"))
459
+ expect(catalog).to have_resource("Notify[y]").with_parameter(:require, be_resource("Class[Experiment::Baz]"))
460
+ end
487
461
 
488
- @compiler.add_collection(coll)
462
+ it "should not favor local scope, (with class not included in topscope)" do
463
+ catalog = compile_to_catalog(<<-PP)
464
+ class experiment {
465
+ class baz {
466
+ }
467
+ notify {"x" : require => Class['baz'] }
468
+ notify {"y" : require => Class['experiment::baz'] }
469
+ }
470
+ class baz {
471
+ }
472
+ include experiment
473
+ include experiment::baz
474
+ PP
489
475
 
490
- expect { @compiler.compile }.not_to raise_error
476
+ expect(catalog).to have_resource("Notify[x]").with_parameter(:require, be_resource("Class[Baz]"))
477
+ expect(catalog).to have_resource("Notify[y]").with_parameter(:require, be_resource("Class[Experiment::Baz]"))
478
+ end
491
479
  end
492
480
 
493
- it "should fail when there are unevaluated resource collections that refer to a specific resource" do
494
- coll = stub 'coll', :evaluate => false
495
- coll.expects(:unresolved_resources).returns(:something)
496
-
497
- @compiler.add_collection(coll)
481
+ describe "(ticket #13349) when explicitly specifying top scope" do
482
+ ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
483
+ describe "with #{include}" do
484
+ it "should find the top level class" do
485
+ catalog = compile_to_catalog(<<-MANIFEST)
486
+ class { 'foo::test': }
487
+ class foo::test {
488
+ #{include}
489
+ }
490
+ class bar::baz {
491
+ notify { 'good!': }
492
+ }
493
+ class foo::bar::baz {
494
+ notify { 'bad!': }
495
+ }
496
+ MANIFEST
498
497
 
499
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, 'Failed to realize virtual resources something')
498
+ expect(catalog).to have_resource("Class[Bar::Baz]")
499
+ expect(catalog).to have_resource("Notify[good!]")
500
+ expect(catalog).not_to have_resource("Class[Foo::Bar::Baz]")
501
+ expect(catalog).not_to have_resource("Notify[bad!]")
502
+ end
503
+ end
504
+ end
500
505
  end
501
506
 
502
- it "should fail when there are unevaluated resource collections that refer to multiple specific resources" do
503
- coll = stub 'coll', :evaluate => false
504
- coll.expects(:unresolved_resources).returns([:one, :two])
505
-
506
- @compiler.add_collection(coll)
507
-
508
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, 'Failed to realize virtual resources one, two')
509
- end
510
- end
507
+ it 'should recompute the version after input files are re-parsed' do
508
+ Puppet[:code] = 'class foo { }'
509
+ first_time = Time.at(1)
510
+ second_time = Time.at(200)
511
+ Time.stubs(:now).returns(first_time)
512
+ node = Puppet::Node.new('mynode')
513
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i)
514
+ Time.stubs(:now).returns(second_time)
515
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i) # no change because files didn't change
516
+ Puppet[:code] = nil
517
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(second_time.to_i)
518
+ end
519
+
520
+ ['define', 'class', 'node'].each do |thing|
521
+ it "'#{thing}' is not allowed inside evaluated conditional constructs" do
522
+ expect do
523
+ compile_to_catalog(<<-PP)
524
+ if true {
525
+ #{thing} foo {
526
+ }
527
+ notify { decoy: }
528
+ }
529
+ PP
530
+ end.to raise_error(Puppet::Error, /Classes, definitions, and nodes may only appear at toplevel/)
531
+ end
511
532
 
512
- describe "when evaluating relationships" do
513
- it "should evaluate each relationship with its catalog" do
514
- dep = stub 'dep'
515
- dep.expects(:evaluate).with(@compiler.catalog)
516
- @compiler.add_relationship dep
517
- @compiler.evaluate_relationships
533
+ it "'#{thing}' is not allowed inside un-evaluated conditional constructs" do
534
+ expect do
535
+ compile_to_catalog(<<-PP)
536
+ if false {
537
+ #{thing} foo {
538
+ }
539
+ notify { decoy: }
540
+ }
541
+ PP
542
+ end.to raise_error(Puppet::Error, /Classes, definitions, and nodes may only appear at toplevel/)
543
+ end
518
544
  end
519
- end
520
545
 
521
- describe "when told to evaluate missing classes" do
546
+ describe "relationships to non existing resources when strict == :error" do
547
+ before(:each) do
548
+ Puppet[:strict] = :error
549
+ end
522
550
 
523
- it "should fail if there's no source listed for the scope" do
524
- scope = stub 'scope', :source => nil
525
- expect { @compiler.evaluate_classes(%w{one two}, scope) }.to raise_error(Puppet::DevError)
551
+ [ 'before',
552
+ 'subscribe',
553
+ 'notify',
554
+ 'require'].each do |meta_param|
555
+ it "are reported as an error when formed via meta parameter #{meta_param}" do
556
+ expect {
557
+ compile_to_catalog(<<-PP)
558
+ notify{ x : #{meta_param} => Notify[tooth_fairy] }
559
+ PP
560
+ }.to raise_error(/Could not find resource 'Notify\[tooth_fairy\]' in parameter '#{meta_param}'/)
561
+ end
562
+ end
526
563
  end
527
564
 
528
- it "should raise an error if a class is not found" do
529
- @scope.expects(:find_hostclass).with("notfound").returns(nil)
530
- expect{ @compiler.evaluate_classes(%w{notfound}, @scope) }.to raise_error(Puppet::Error, /Could not find class/)
531
- end
565
+ describe "relationships to non existing resources when strict == :warning" do
566
+ before(:each) do
567
+ Puppet[:strict] = :warning
568
+ end
532
569
 
533
- it "should raise an error when it can't find class" do
534
- klasses = {'foo'=>nil}
535
- @node.classes = klasses
536
- @compiler.topscope.expects(:find_hostclass).with('foo').returns(nil)
537
- expect{ @compiler.compile }.to raise_error(Puppet::Error, /Could not find class foo for testnode/)
570
+ [ 'before',
571
+ 'subscribe',
572
+ 'notify',
573
+ 'require'].each do |meta_param|
574
+ it "are reported as a warning when formed via meta parameter #{meta_param}" do
575
+ expect {
576
+ compile_to_catalog(<<-PP)
577
+ notify{ x : #{meta_param} => Notify[tooth_fairy] }
578
+ PP
579
+ expect(@logs).to have_matching_log(/Could not find resource 'Notify\[tooth_fairy\]' in parameter '#{meta_param}'/)
580
+
581
+ }.to_not raise_error()
582
+ end
583
+ end
538
584
  end
539
- end
540
-
541
- describe "when evaluating found classes" do
542
-
543
- before do
544
- Puppet.settings[:data_binding_terminus] = "none"
545
- @class = stub 'class', :name => "my::class"
546
- @scope.stubs(:find_hostclass).with("myclass").returns(@class)
547
585
 
548
- @resource = stub 'resource', :ref => "Class[myclass]", :type => "file"
549
- end
586
+ describe "relationships to non existing resources when strict == :off" do
587
+ before(:each) do
588
+ Puppet[:strict] = :off
589
+ end
550
590
 
551
- around do |example|
552
- Puppet.override(
553
- :environments => Puppet::Environments::Static.new(environment),
554
- :description => "Static loader for specs"
555
- ) do
556
- example.run
591
+ [ 'before',
592
+ 'subscribe',
593
+ 'notify',
594
+ 'require'].each do |meta_param|
595
+ it "does not log an error for meta parameter #{meta_param}" do
596
+ expect {
597
+ compile_to_catalog(<<-PP)
598
+ notify{ x : #{meta_param} => Notify[tooth_fairy] }
599
+ PP
600
+ expect(@logs).to_not have_matching_log(/Could not find resource 'Notify\[tooth_fairy\]' in parameter '#{meta_param}'/)
601
+ }.to_not raise_error()
602
+ end
557
603
  end
558
604
  end
559
605
 
560
- it "should evaluate each class" do
561
- @compiler.catalog.stubs(:tag)
606
+ describe "relationships can be formed" do
607
+ def extract_name(ref)
608
+ ref.sub(/File\[(\w+)\]/, '\1')
609
+ end
562
610
 
563
- @class.expects(:ensure_in_catalog).with(@scope)
564
- @scope.stubs(:class_scope).with(@class)
611
+ def assert_creates_relationships(relationship_code, expectations)
612
+ base_manifest = <<-MANIFEST
613
+ file { [a,b,c]:
614
+ mode => '0644',
615
+ }
616
+ file { [d,e]:
617
+ mode => '0755',
618
+ }
619
+ MANIFEST
620
+ catalog = compile_to_catalog(base_manifest + relationship_code)
565
621
 
566
- @compiler.evaluate_classes(%w{myclass}, @scope)
567
- end
622
+ resources = catalog.resources.select { |res| res.type == 'File' }
568
623
 
569
- describe "and the classes are specified as a hash with parameters" do
570
- before do
571
- @node.classes = {}
572
- @ast_obj = Puppet::Parser::AST::Leaf.new(:value => 'foo')
573
- end
624
+ actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
625
+ resources.map do |res|
626
+ dependents = Array(res[relation])
627
+ dependents.map { |ref| [res.title, extract_name(ref)] }
628
+ end.inject(&:concat)
629
+ end
574
630
 
575
- # Define the given class with default parameters
576
- def define_class(name, parameters)
577
- @node.classes[name] = parameters
578
- klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'p1' => @ast_obj, 'p2' => @ast_obj})
579
- @compiler.topscope.known_resource_types.add klass
631
+ expect(actual_relationships).to match_array(expectations[:relationships] || [])
632
+ expect(actual_subscriptions).to match_array(expectations[:subscriptions] || [])
580
633
  end
581
634
 
582
- def compile
583
- @catalog = @compiler.compile
635
+ it "of regular type" do
636
+ assert_creates_relationships("File[a] -> File[b]",
637
+ :relationships => [['a','b']])
584
638
  end
585
639
 
586
- it "should record which classes are evaluated" do
587
- classes = {'foo'=>{}, 'bar::foo'=>{}, 'bar'=>{}}
588
- classes.each { |c, params| define_class(c, params) }
589
- compile()
590
- classes.each { |name, p| expect(@catalog.classes).to include(name) }
640
+ it "of subscription type" do
641
+ assert_creates_relationships("File[a] ~> File[b]",
642
+ :subscriptions => [['a', 'b']])
591
643
  end
592
644
 
593
- it "should provide default values for parameters that have no values specified" do
594
- define_class('foo', {})
595
- compile()
596
- expect(@catalog.resource(:class, 'foo')['p1']).to eq("foo")
645
+ it "between multiple resources expressed as resource with multiple titles" do
646
+ assert_creates_relationships("File[a,b] -> File[c,d]",
647
+ :relationships => [['a', 'c'],
648
+ ['b', 'c'],
649
+ ['a', 'd'],
650
+ ['b', 'd']])
597
651
  end
598
652
 
599
- it "should use any provided values" do
600
- define_class('foo', {'p1' => 'real_value'})
601
- compile()
602
- expect(@catalog.resource(:class, 'foo')['p1']).to eq("real_value")
653
+ it "between collection expressions" do
654
+ assert_creates_relationships("File <| mode == '0644' |> -> File <| mode == '0755' |>",
655
+ :relationships => [['a', 'd'],
656
+ ['b', 'd'],
657
+ ['c', 'd'],
658
+ ['a', 'e'],
659
+ ['b', 'e'],
660
+ ['c', 'e']])
603
661
  end
604
662
 
605
- it "should support providing some but not all values" do
606
- define_class('foo', {'p1' => 'real_value'})
607
- compile()
608
- expect(@catalog.resource(:class, 'Foo')['p1']).to eq("real_value")
609
- expect(@catalog.resource(:class, 'Foo')['p2']).to eq("foo")
663
+ it "between resources expressed as Strings" do
664
+ assert_creates_relationships("'File[a]' -> 'File[b]'",
665
+ :relationships => [['a', 'b']])
610
666
  end
611
667
 
612
- it "should ensure each node class is in catalog and has appropriate tags" do
613
- klasses = ['bar::foo']
614
- @node.classes = klasses
615
- ast_obj = Puppet::Parser::AST::Leaf.new(:value => 'foo')
616
- klasses.each do |name|
617
- klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'p1' => ast_obj, 'p2' => ast_obj})
618
- @compiler.topscope.known_resource_types.add klass
619
- end
620
- catalog = @compiler.compile
668
+ it "between resources expressed as variables" do
669
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['a', 'b']])
670
+ $var = File[a]
671
+ $var -> File[b]
672
+ MANIFEST
621
673
 
622
- r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
623
- expect(r2.tags).to eq(Puppet::Util::TagSet.new(['bar::foo', 'class', 'bar', 'foo']))
624
674
  end
625
- end
626
675
 
627
- it "should fail if required parameters are missing" do
628
- klass = {'foo'=>{'a'=>'one'}}
629
- @node.classes = klass
630
- klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'a' => nil, 'b' => nil})
631
- @compiler.topscope.known_resource_types.add klass
632
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Must pass b to Class[Foo]")
633
- end
634
-
635
- it "should fail if invalid parameters are passed" do
636
- klass = {'foo'=>{'3'=>'one'}}
637
- @node.classes = klass
638
- klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {})
639
- @compiler.topscope.known_resource_types.add klass
640
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Invalid parameter: '3' on Class[Foo]")
641
- end
642
-
643
- it "should ensure class is in catalog without params" do
644
- @node.classes = klasses = {'foo'=>nil}
645
- foo = Puppet::Resource::Type.new(:hostclass, 'foo')
646
- @compiler.topscope.known_resource_types.add foo
647
- catalog = @compiler.compile
648
- expect(catalog.classes).to include 'foo'
649
- end
650
-
651
- it "should not evaluate the resources created for found classes unless asked" do
652
- @compiler.catalog.stubs(:tag)
676
+ it "between resources expressed as case statements" do
677
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['s1', 't2']])
678
+ $var = 10
679
+ case $var {
680
+ 10: {
681
+ file { s1: }
682
+ }
683
+ 12: {
684
+ file { s2: }
685
+ }
686
+ }
687
+ ->
688
+ case $var + 2 {
689
+ 10: {
690
+ file { t1: }
691
+ }
692
+ 12: {
693
+ file { t2: }
694
+ }
695
+ }
696
+ MANIFEST
697
+ end
653
698
 
654
- @resource.expects(:evaluate).never
699
+ it "using deep access in array" do
700
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['a', 'b']])
701
+ $var = [ [ [ File[a], File[b] ] ] ]
702
+ $var[0][0][0] -> $var[0][0][1]
703
+ MANIFEST
655
704
 
656
- @class.expects(:ensure_in_catalog).returns(@resource)
657
- @scope.stubs(:class_scope).with(@class)
705
+ end
658
706
 
659
- @compiler.evaluate_classes(%w{myclass}, @scope)
660
- end
707
+ it "using deep access in hash" do
708
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['a', 'b']])
709
+ $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
710
+ $var[foo][bar][source] -> $var[foo][bar][target]
711
+ MANIFEST
661
712
 
662
- it "should immediately evaluate the resources created for found classes when asked" do
663
- @compiler.catalog.stubs(:tag)
713
+ end
664
714
 
665
- @resource.expects(:evaluate)
666
- @class.expects(:ensure_in_catalog).returns(@resource)
667
- @scope.stubs(:class_scope).with(@class)
715
+ it "using resource declarations" do
716
+ assert_creates_relationships("file { l: } -> file { r: }", :relationships => [['l', 'r']])
717
+ end
668
718
 
669
- @compiler.evaluate_classes(%w{myclass}, @scope, false)
719
+ it "between entries in a chain of relationships" do
720
+ assert_creates_relationships("File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]",
721
+ :relationships => [['a', 'b'], ['d', 'c']],
722
+ :subscriptions => [['b', 'c'], ['e', 'd']])
723
+ end
670
724
  end
671
725
 
672
- it "should skip classes that have already been evaluated" do
673
- @compiler.catalog.stubs(:tag)
674
-
675
- @scope.stubs(:class_scope).with(@class).returns(@scope)
676
-
677
- @compiler.expects(:add_resource).never
678
-
679
- @resource.expects(:evaluate).never
680
-
681
- Puppet::Parser::Resource.expects(:new).never
682
- @compiler.evaluate_classes(%w{myclass}, @scope, false)
683
- end
726
+ context "when dealing with variable references" do
727
+ it 'an initial underscore in a variable name is ok' do
728
+ catalog = compile_to_catalog(<<-MANIFEST)
729
+ class a { $_a = 10}
730
+ include a
731
+ notify { 'test': message => $a::_a }
732
+ MANIFEST
684
733
 
685
- it "should skip classes previously evaluated with different capitalization" do
686
- @compiler.catalog.stubs(:tag)
687
- @scope.stubs(:find_hostclass).with("MyClass").returns(@class)
688
- @scope.stubs(:class_scope).with(@class).returns(@scope)
689
- @compiler.expects(:add_resource).never
690
- @resource.expects(:evaluate).never
691
- Puppet::Parser::Resource.expects(:new).never
692
- @compiler.evaluate_classes(%w{MyClass}, @scope, false)
693
- end
694
- end
734
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, 10)
735
+ end
695
736
 
696
- describe "when evaluating AST nodes with no AST nodes present" do
737
+ it 'an initial underscore in not ok if elsewhere than last segment' do
738
+ expect do
739
+ catalog = compile_to_catalog(<<-MANIFEST)
740
+ class a { $_a = 10}
741
+ include a
742
+ notify { 'test': message => $_a::_a }
743
+ MANIFEST
744
+ end.to raise_error(/Illegal variable name/)
745
+ end
697
746
 
698
- it "should do nothing" do
699
- @compiler.expects(:ast_nodes?).returns(false)
700
- @compiler.known_resource_types.expects(:nodes).never
701
- Puppet::Parser::Resource.expects(:new).never
747
+ it 'a missing variable as default value becomes undef' do
748
+ # strict variables not on
749
+ catalog = compile_to_catalog(<<-MANIFEST)
750
+ class a ($b=$x) { notify {test: message=>"yes ${undef == $b}" } }
751
+ include a
752
+ MANIFEST
702
753
 
703
- @compiler.send(:evaluate_ast_node)
754
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, "yes true")
755
+ end
704
756
  end
705
- end
706
757
 
707
- describe "when evaluating AST nodes with AST nodes present" do
758
+ context 'when working with the trusted data hash' do
759
+ context 'and have opted in to hashed_node_data' do
760
+ it 'should make $trusted available' do
761
+ node = Puppet::Node.new("testing")
762
+ node.trusted_data = { "data" => "value" }
708
763
 
709
- before do
710
- @compiler.known_resource_types.stubs(:nodes?).returns true
764
+ catalog = compile_to_catalog(<<-MANIFEST, node)
765
+ notify { 'test': message => $trusted[data] }
766
+ MANIFEST
711
767
 
712
- # Set some names for our test
713
- @node.stubs(:names).returns(%w{a b c})
714
- @compiler.known_resource_types.stubs(:node).with("a").returns(nil)
715
- @compiler.known_resource_types.stubs(:node).with("b").returns(nil)
716
- @compiler.known_resource_types.stubs(:node).with("c").returns(nil)
768
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, "value")
769
+ end
717
770
 
718
- # It should check this last, of course.
719
- @compiler.known_resource_types.stubs(:node).with("default").returns(nil)
720
- end
771
+ it 'should not allow assignment to $trusted' do
772
+ node = Puppet::Node.new("testing")
773
+ node.trusted_data = { "data" => "value" }
721
774
 
722
- it "should fail if the named node cannot be found" do
723
- expect { @compiler.send(:evaluate_ast_node) }.to raise_error(Puppet::ParseError)
775
+ expect do
776
+ compile_to_catalog(<<-MANIFEST, node)
777
+ $trusted = 'changed'
778
+ notify { 'test': message => $trusted == 'changed' }
779
+ MANIFEST
780
+ end.to raise_error(Puppet::PreformattedError, /Attempt to assign to a reserved variable name: '\$trusted'/)
781
+ end
782
+ end
724
783
  end
725
784
 
726
- it "should evaluate the first node class matching the node name" do
727
- node_class = stub 'node', :name => "c", :evaluate_code => nil
728
- @compiler.known_resource_types.stubs(:node).with("c").returns(node_class)
729
-
730
- node_resource = stub 'node resource', :ref => "Node[c]", :evaluate => nil, :type => "node"
731
- node_class.expects(:ensure_in_catalog).returns(node_resource)
785
+ context 'when using typed parameters in definition' do
786
+ it 'accepts type compliant arguments' do
787
+ catalog = compile_to_catalog(<<-MANIFEST)
788
+ define foo(String $x) { }
789
+ foo { 'test': x =>'say friend' }
790
+ MANIFEST
791
+ expect(catalog).to have_resource("Foo[test]").with_parameter(:x, 'say friend')
792
+ end
732
793
 
733
- @compiler.compile
734
- end
794
+ it 'accepts undef as the default for an Optional argument' do
795
+ catalog = compile_to_catalog(<<-MANIFEST)
796
+ define foo(Optional[String] $x = undef) {
797
+ notify { "expected": message => $x == undef }
798
+ }
799
+ foo { 'test': }
800
+ MANIFEST
801
+ expect(catalog).to have_resource("Notify[expected]").with_parameter(:message, true)
802
+ end
735
803
 
736
- it "should match the default node if no matching node can be found" do
737
- node_class = stub 'node', :name => "default", :evaluate_code => nil
738
- @compiler.known_resource_types.stubs(:node).with("default").returns(node_class)
804
+ it 'accepts anything when parameters are untyped' do
805
+ expect do
806
+ catalog = compile_to_catalog(<<-MANIFEST)
807
+ define foo($a, $b, $c) { }
808
+ foo { 'test': a => String, b=>10, c=>undef }
809
+ MANIFEST
810
+ end.to_not raise_error()
811
+ end
739
812
 
740
- node_resource = stub 'node resource', :ref => "Node[default]", :evaluate => nil, :type => "node"
741
- node_class.expects(:ensure_in_catalog).returns(node_resource)
813
+ it 'denies non type compliant arguments' do
814
+ expect do
815
+ catalog = compile_to_catalog(<<-MANIFEST)
816
+ define foo(Integer $x) { }
817
+ foo { 'test': x =>'say friend' }
818
+ MANIFEST
819
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got String/)
820
+ end
742
821
 
743
- @compiler.compile
744
- end
822
+ it 'denies undef for a non-optional type' do
823
+ expect do
824
+ catalog = compile_to_catalog(<<-MANIFEST)
825
+ define foo(Integer $x) { }
826
+ foo { 'test': x => undef }
827
+ MANIFEST
828
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got Undef/)
829
+ end
745
830
 
746
- it "should evaluate the node resource immediately rather than using lazy evaluation" do
747
- node_class = stub 'node', :name => "c"
748
- @compiler.known_resource_types.stubs(:node).with("c").returns(node_class)
831
+ it 'denies non type compliant default argument' do
832
+ expect do
833
+ catalog = compile_to_catalog(<<-MANIFEST)
834
+ define foo(Integer $x = 'pow') { }
835
+ foo { 'test': }
836
+ MANIFEST
837
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got String/)
838
+ end
749
839
 
750
- node_resource = stub 'node resource', :ref => "Node[c]", :type => "node"
751
- node_class.expects(:ensure_in_catalog).returns(node_resource)
840
+ it 'denies undef as the default for a non-optional type' do
841
+ expect do
842
+ catalog = compile_to_catalog(<<-MANIFEST)
843
+ define foo(Integer $x = undef) { }
844
+ foo { 'test': }
845
+ MANIFEST
846
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got Undef/)
847
+ end
752
848
 
753
- node_resource.expects(:evaluate)
849
+ it 'accepts a Resource as a Type' do
850
+ catalog = compile_to_catalog(<<-MANIFEST)
851
+ define bar($text) { }
852
+ define foo(Type[Bar] $x) {
853
+ notify { 'test': message => $x[text] }
854
+ }
855
+ bar { 'joke': text => 'knock knock' }
856
+ foo { 'test': x => Bar[joke] }
857
+ MANIFEST
858
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, 'knock knock')
859
+ end
754
860
 
755
- @compiler.send(:evaluate_ast_node)
861
+ it 'uses infer_set when reporting type mismatch' do
862
+ expect do
863
+ catalog = compile_to_catalog(<<-MANIFEST)
864
+ define foo(Struct[{b => Integer, d=>String}] $a) { }
865
+ foo{ bar: a => {b => 5, c => 'stuff'}}
866
+ MANIFEST
867
+ end.to raise_error(/Foo\[bar\]:\s+parameter 'a' expects a value for key 'd'\s+parameter 'a' unrecognized key 'c'/m)
868
+ end
756
869
  end
757
- end
758
870
 
759
- describe "when evaluating node classes" do
760
- include PuppetSpec::Compiler
871
+ context 'when using typed parameters in class' do
872
+ it 'accepts type compliant arguments' do
873
+ catalog = compile_to_catalog(<<-MANIFEST)
874
+ class foo(String $x) { }
875
+ class { 'foo': x =>'say friend' }
876
+ MANIFEST
877
+ expect(catalog).to have_resource("Class[Foo]").with_parameter(:x, 'say friend')
878
+ end
761
879
 
762
- describe "when provided classes in array format" do
763
- let(:node) { Puppet::Node.new('someone', :classes => ['something']) }
880
+ it 'accepts undef as the default for an Optional argument' do
881
+ catalog = compile_to_catalog(<<-MANIFEST)
882
+ class foo(Optional[String] $x = undef) {
883
+ notify { "expected": message => $x == undef }
884
+ }
885
+ class { 'foo': }
886
+ MANIFEST
887
+ expect(catalog).to have_resource("Notify[expected]").with_parameter(:message, true)
888
+ end
764
889
 
765
- describe "when the class exists" do
766
- it "should succeed if the class is already included" do
767
- manifest = <<-MANIFEST
768
- class something {}
769
- include something
890
+ it 'accepts anything when parameters are untyped' do
891
+ expect do
892
+ catalog = compile_to_catalog(<<-MANIFEST)
893
+ class foo($a, $b, $c) { }
894
+ class { 'foo': a => String, b=>10, c=>undef }
770
895
  MANIFEST
896
+ end.to_not raise_error()
897
+ end
771
898
 
772
- catalog = compile_to_catalog(manifest, node)
773
-
774
- expect(catalog.resource('Class', 'Something')).not_to be_nil
775
- end
899
+ it 'denies non type compliant arguments' do
900
+ expect do
901
+ catalog = compile_to_catalog(<<-MANIFEST)
902
+ class foo(Integer $x) { }
903
+ class { 'foo': x =>'say friend' }
904
+ MANIFEST
905
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got String/)
906
+ end
776
907
 
777
- it "should evaluate the class without parameters if it's not already included" do
778
- manifest = "class something {}"
908
+ it 'denies undef for a non-optional type' do
909
+ expect do
910
+ catalog = compile_to_catalog(<<-MANIFEST)
911
+ class foo(Integer $x) { }
912
+ class { 'foo': x => undef }
913
+ MANIFEST
914
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got Undef/)
915
+ end
779
916
 
780
- catalog = compile_to_catalog(manifest, node)
917
+ it 'denies non type compliant default argument' do
918
+ expect do
919
+ catalog = compile_to_catalog(<<-MANIFEST)
920
+ class foo(Integer $x = 'pow') { }
921
+ class { 'foo': }
922
+ MANIFEST
923
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got String/)
924
+ end
781
925
 
782
- expect(catalog.resource('Class', 'Something')).not_to be_nil
783
- end
926
+ it 'denies undef as the default for a non-optional type' do
927
+ expect do
928
+ catalog = compile_to_catalog(<<-MANIFEST)
929
+ class foo(Integer $x = undef) { }
930
+ class { 'foo': }
931
+ MANIFEST
932
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got Undef/)
784
933
  end
785
934
 
786
- it "should fail if the class doesn't exist" do
787
- expect { compile_to_catalog('', node) }.to raise_error(Puppet::Error, /Could not find class something/)
935
+ it 'accepts a Resource as a Type' do
936
+ catalog = compile_to_catalog(<<-MANIFEST)
937
+ define bar($text) { }
938
+ class foo(Type[Bar] $x) {
939
+ notify { 'test': message => $x[text] }
940
+ }
941
+ bar { 'joke': text => 'knock knock' }
942
+ class { 'foo': x => Bar[joke] }
943
+ MANIFEST
944
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, 'knock knock')
788
945
  end
789
946
  end
790
947
 
791
- describe "when provided classes in hash format" do
792
- describe "for classes without parameters" do
793
- let(:node) { Puppet::Node.new('someone', :classes => {'something' => {}}) }
794
-
795
- describe "when the class exists" do
796
- it "should succeed if the class is already included" do
797
- manifest = <<-MANIFEST
798
- class something {}
799
- include something
800
- MANIFEST
801
-
802
- catalog = compile_to_catalog(manifest, node)
803
-
804
- expect(catalog.resource('Class', 'Something')).not_to be_nil
805
- end
806
-
807
- it "should evaluate the class if it's not already included" do
808
- manifest = <<-MANIFEST
809
- class something {}
810
- MANIFEST
811
-
812
- catalog = compile_to_catalog(manifest, node)
813
-
814
- expect(catalog.resource('Class', 'Something')).not_to be_nil
815
- end
816
- end
948
+ context 'when using typed parameters in lambdas' do
949
+ it 'accepts type compliant arguments' do
950
+ catalog = compile_to_catalog(<<-MANIFEST)
951
+ with('value') |String $x| { notify { "$x": } }
952
+ MANIFEST
953
+ expect(catalog).to have_resource("Notify[value]")
954
+ end
817
955
 
818
- it "should fail if the class doesn't exist" do
819
- expect { compile_to_catalog('', node) }.to raise_error(Puppet::Error, /Could not find class something/)
820
- end
956
+ it 'handles an array as a single argument' do
957
+ catalog = compile_to_catalog(<<-MANIFEST)
958
+ with(['value', 'second']) |$x| { notify { "${x[0]} ${x[1]}": } }
959
+ MANIFEST
960
+ expect(catalog).to have_resource("Notify[value second]")
821
961
  end
822
962
 
823
- describe "for classes with parameters" do
824
- let(:node) { Puppet::Node.new('someone', :classes => {'something' => {'configuron' => 'defrabulated'}}) }
963
+ it 'denies when missing required arguments' do
964
+ expect do
965
+ compile_to_catalog(<<-MANIFEST)
966
+ with(1) |$x, $y| { }
967
+ MANIFEST
968
+ end.to raise_error(/Parameter \$y is required but no value was given/m)
969
+ end
825
970
 
826
- describe "when the class exists" do
827
- it "should fail if the class is already included" do
828
- manifest = <<-MANIFEST
829
- class something($configuron=frabulated) {}
830
- include something
831
- MANIFEST
971
+ it 'accepts anything when parameters are untyped' do
972
+ catalog = compile_to_catalog(<<-MANIFEST)
973
+ ['value', 1, true, undef].each |$x| { notify { "value: $x": } }
974
+ MANIFEST
832
975
 
833
- expect { compile_to_catalog(manifest, node) }.to raise_error(Puppet::Error, /Class\[Something\] is already declared/)
834
- end
976
+ expect(catalog).to have_resource("Notify[value: value]")
977
+ expect(catalog).to have_resource("Notify[value: 1]")
978
+ expect(catalog).to have_resource("Notify[value: true]")
979
+ expect(catalog).to have_resource("Notify[value: ]")
980
+ end
835
981
 
836
- it "should evaluate the class if it's not already included" do
837
- manifest = <<-MANIFEST
838
- class something($configuron=frabulated) {}
839
- MANIFEST
982
+ it 'accepts type-compliant, slurped arguments' do
983
+ catalog = compile_to_catalog(<<-MANIFEST)
984
+ with(1, 2) |Integer *$x| { notify { "${$x[0] + $x[1]}": } }
985
+ MANIFEST
986
+ expect(catalog).to have_resource("Notify[3]")
987
+ end
840
988
 
841
- catalog = compile_to_catalog(manifest, node)
989
+ it 'denies non-type-compliant arguments' do
990
+ expect do
991
+ compile_to_catalog(<<-MANIFEST)
992
+ with(1) |String $x| { }
993
+ MANIFEST
994
+ end.to raise_error(/block parameter 'x' expects a String value, got Integer/m)
995
+ end
842
996
 
843
- resource = catalog.resource('Class', 'Something')
844
- expect(resource['configuron']).to eq('defrabulated')
845
- end
846
- end
997
+ it 'denies non-type-compliant, slurped arguments' do
998
+ expect do
999
+ compile_to_catalog(<<-MANIFEST)
1000
+ with(1, "hello") |Integer *$x| { }
1001
+ MANIFEST
1002
+ end.to raise_error(/block parameter 'x' expects an Integer value, got String/m)
1003
+ end
847
1004
 
848
- it "should fail if the class doesn't exist" do
849
- expect { compile_to_catalog('', node) }.to raise_error(Puppet::Error, /Could not find class something/)
850
- end
1005
+ it 'denies non-type-compliant default argument' do
1006
+ expect do
1007
+ compile_to_catalog(<<-MANIFEST)
1008
+ with(1) |$x, String $defaulted = 1| { notify { "${$x + $defaulted}": }}
1009
+ MANIFEST
1010
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
1011
+ end
851
1012
 
852
- it 'evaluates classes declared with parameters before unparameterized classes' do
853
- node = Puppet::Node.new('someone', :classes => { 'app::web' => {}, 'app' => { 'port' => 8080 } })
854
- manifest = <<-MANIFEST
855
- class app($port = 80) { }
1013
+ it 'raises an error when a default argument value is an incorrect type and there are no arguments passed' do
1014
+ expect do
1015
+ compile_to_catalog(<<-MANIFEST)
1016
+ with() |String $defaulted = 1| {}
1017
+ MANIFEST
1018
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
1019
+ end
856
1020
 
857
- class app::web($port = $app::port) inherits app {
858
- notify { expected: message => "$port" }
859
- }
1021
+ it 'raises an error when the default argument for a slurped parameter is an incorrect type' do
1022
+ expect do
1023
+ compile_to_catalog(<<-MANIFEST)
1024
+ with() |String *$defaulted = 1| {}
860
1025
  MANIFEST
1026
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
1027
+ end
861
1028
 
862
- catalog = compile_to_catalog(manifest, node)
1029
+ it 'allows using an array as the default slurped value' do
1030
+ catalog = compile_to_catalog(<<-MANIFEST)
1031
+ with() |String *$defaulted = [hi]| { notify { $defaulted[0]: } }
1032
+ MANIFEST
863
1033
 
864
- expect(catalog).to have_resource("Class[App]").with_parameter(:port, 8080)
865
- expect(catalog).to have_resource("Class[App::Web]")
866
- expect(catalog).to have_resource("Notify[expected]").with_parameter(:message, "8080")
867
- end
1034
+ expect(catalog).to have_resource('Notify[hi]')
868
1035
  end
869
- end
870
- end
871
1036
 
872
- describe "when managing resource overrides" do
1037
+ it 'allows using a value of the type as the default slurped value' do
1038
+ catalog = compile_to_catalog(<<-MANIFEST)
1039
+ with() |String *$defaulted = hi| { notify { $defaulted[0]: } }
1040
+ MANIFEST
873
1041
 
874
- before do
875
- @override = stub 'override', :ref => "File[/foo]", :type => "my"
876
- @resource = resource(:file, "/foo")
877
- end
1042
+ expect(catalog).to have_resource('Notify[hi]')
1043
+ end
878
1044
 
879
- it "should be able to store overrides" do
880
- expect { @compiler.add_override(@override) }.not_to raise_error
881
- end
1045
+ it 'allows specifying the type of a slurped parameter as an array' do
1046
+ catalog = compile_to_catalog(<<-MANIFEST)
1047
+ with() |Array[String] *$defaulted = hi| { notify { $defaulted[0]: } }
1048
+ MANIFEST
882
1049
 
883
- it "should apply overrides to the appropriate resources" do
884
- @compiler.add_resource(@scope, @resource)
885
- @resource.expects(:merge).with(@override)
1050
+ expect(catalog).to have_resource('Notify[hi]')
1051
+ end
886
1052
 
887
- @compiler.add_override(@override)
1053
+ it 'raises an error when the number of default values does not match the parameter\'s size specification' do
1054
+ expect do
1055
+ compile_to_catalog(<<-MANIFEST)
1056
+ with() |Array[String, 2] *$defaulted = hi| { }
1057
+ MANIFEST
1058
+ end.to raise_error(/block expects at least 2 arguments, got 1/m)
1059
+ end
888
1060
 
889
- @compiler.compile
890
- end
1061
+ it 'raises an error when the number of passed values does not match the parameter\'s size specification' do
1062
+ expect do
1063
+ compile_to_catalog(<<-MANIFEST)
1064
+ with(hi) |Array[String, 2] *$passed| { }
1065
+ MANIFEST
1066
+ end.to raise_error(/block expects at least 2 arguments, got 1/m)
1067
+ end
891
1068
 
892
- it "should accept overrides before the related resource has been created" do
893
- @resource.expects(:merge).with(@override)
1069
+ it 'matches when the number of arguments passed for a slurp parameter match the size specification' do
1070
+ catalog = compile_to_catalog(<<-MANIFEST)
1071
+ with(hi, bye) |Array[String, 2] *$passed| {
1072
+ $passed.each |$n| { notify { $n: } }
1073
+ }
1074
+ MANIFEST
894
1075
 
895
- # First store the override
896
- @compiler.add_override(@override)
1076
+ expect(catalog).to have_resource('Notify[hi]')
1077
+ expect(catalog).to have_resource('Notify[bye]')
1078
+ end
897
1079
 
898
- # Then the resource
899
- @compiler.add_resource(@scope, @resource)
1080
+ it 'raises an error when the number of allowed slurp parameters exceeds the size constraint' do
1081
+ expect do
1082
+ compile_to_catalog(<<-MANIFEST)
1083
+ with(hi, bye) |Array[String, 1, 1] *$passed| { }
1084
+ MANIFEST
1085
+ end.to raise_error(/block expects 1 argument, got 2/m)
1086
+ end
900
1087
 
901
- # And compile, so they get resolved
902
- @compiler.compile
903
- end
1088
+ it 'allows passing slurped arrays by specifying an array of arrays' do
1089
+ catalog = compile_to_catalog(<<-MANIFEST)
1090
+ with([hi], [bye]) |Array[Array[String, 1, 1]] *$passed| {
1091
+ notify { $passed[0][0]: }
1092
+ notify { $passed[1][0]: }
1093
+ }
1094
+ MANIFEST
904
1095
 
905
- it "should fail if the compile is finished and resource overrides have not been applied" do
906
- @compiler.add_override(@override)
1096
+ expect(catalog).to have_resource('Notify[hi]')
1097
+ expect(catalog).to have_resource('Notify[bye]')
1098
+ end
907
1099
 
908
- expect { @compiler.compile }.to raise_error Puppet::ParseError, 'Could not find resource(s) File[/foo] for overriding'
909
- end
910
- end
1100
+ it 'raises an error when a required argument follows an optional one' do
1101
+ expect do
1102
+ compile_to_catalog(<<-MANIFEST)
1103
+ with() |$y = first, $x, Array[String, 1] *$passed = bye| {}
1104
+ MANIFEST
1105
+ end.to raise_error(/Parameter \$x is required/)
1106
+ end
911
1107
 
1108
+ it 'raises an error when the minimum size of a slurped argument makes it required and it follows an optional argument' do
1109
+ expect do
1110
+ compile_to_catalog(<<-MANIFEST)
1111
+ with() |$x = first, Array[String, 1] *$passed| {}
1112
+ MANIFEST
1113
+ end.to raise_error(/Parameter \$passed is required/)
1114
+ end
912
1115
 
913
- context "when converting catalog to resource" do
914
- it "the same environment is used for compilation as for transformation to resource form" do
915
- Puppet[:code] = <<-MANIFEST
916
- notify { 'dummy':
1116
+ it 'allows slurped arguments with a minimum size of 0 after an optional argument' do
1117
+ catalog = compile_to_catalog(<<-MANIFEST)
1118
+ with() |$x = first, Array[String, 0] *$passed| {
1119
+ notify { $x: }
917
1120
  }
918
1121
  MANIFEST
919
1122
 
920
- Puppet::Parser::Resource::Catalog.any_instance.expects(:to_resource).with do |catalog|
921
- Puppet.lookup(:current_environment).name == :production
1123
+ expect(catalog).to have_resource('Notify[first]')
922
1124
  end
923
1125
 
924
- Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
1126
+ it 'accepts a Resource as a Type' do
1127
+ catalog = compile_to_catalog(<<-MANIFEST)
1128
+ define bar($text) { }
1129
+ bar { 'joke': text => 'knock knock' }
1130
+
1131
+ with(Bar[joke]) |Type[Bar] $joke| { notify { "${joke[text]}": } }
1132
+ MANIFEST
1133
+ expect(catalog).to have_resource("Notify[knock knock]")
1134
+ end
925
1135
  end
926
1136
  end
1137
+
927
1138
  end