puppet 4.0.0 → 5.0.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 (2045) hide show
  1. data/COMMITTERS.md +2 -2
  2. data/CONTRIBUTING.md +51 -10
  3. data/Gemfile +27 -14
  4. data/LICENSE +3 -3
  5. data/MAINTAINERS +66 -0
  6. data/README.md +9 -11
  7. data/Rakefile +36 -0
  8. data/conf/auth.conf +23 -2
  9. data/conf/fileserver.conf +7 -12
  10. data/conf/hiera.yaml +11 -0
  11. data/conf/puppet.conf +1 -1
  12. data/ext/README.environment +1 -1
  13. data/ext/build_defaults.yaml +10 -37
  14. data/ext/debian/README.source +1 -1
  15. data/ext/debian/control +3 -5
  16. data/ext/debian/copyright +4 -4
  17. data/ext/debian/puppet-common.install +0 -1
  18. data/ext/debian/puppet-common.manpages +0 -2
  19. data/ext/debian/puppet.default +0 -5
  20. data/ext/debian/puppet.init +1 -16
  21. data/ext/debian/puppet.logrotate +14 -5
  22. data/ext/debian/puppetmaster.README.debian +11 -9
  23. data/ext/envpuppet +2 -2
  24. data/ext/hiera/hiera.yaml +15 -0
  25. data/ext/ips/puppetagent.xml +1 -1
  26. data/ext/ips/puppetmaster.xml +1 -1
  27. data/ext/logcheck/puppet +1 -1
  28. data/ext/osx/puppet.plist +30 -0
  29. data/ext/project_data.yaml +29 -16
  30. data/ext/puppet-test +3 -27
  31. data/ext/rack/config.ru +2 -2
  32. data/ext/rack/example-passenger-vhost.conf +1 -1
  33. data/ext/redhat/client.init +67 -17
  34. data/ext/redhat/client.sysconfig +1 -10
  35. data/ext/redhat/logrotate +15 -3
  36. data/ext/redhat/puppet.spec.erb +6 -14
  37. data/ext/redhat/server.init +1 -1
  38. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  39. data/ext/solaris/pkginfo +1 -1
  40. data/ext/solaris/smf/puppet +44 -0
  41. data/ext/solaris/smf/puppet.xml +44 -0
  42. data/ext/suse/client.init +30 -33
  43. data/ext/suse/puppet.spec +2 -2
  44. data/ext/suse/server.init +2 -2
  45. data/ext/systemd/puppet.service +13 -1
  46. data/ext/upload_facts.rb +1 -1
  47. data/ext/windows/puppet_interactive.bat +6 -0
  48. data/ext/windows/puppet_shell.bat +9 -0
  49. data/ext/windows/run_puppet_interactive.bat +9 -0
  50. data/ext/windows/service/daemon.rb +10 -15
  51. data/ext/yaml_nodes.rb +1 -1
  52. data/install.rb +99 -66
  53. data/lib/hiera/puppet_function.rb +28 -18
  54. data/lib/hiera/scope.rb +12 -14
  55. data/lib/hiera_puppet.rb +6 -14
  56. data/lib/puppet/agent/disabler.rb +3 -3
  57. data/lib/puppet/agent/locker.rb +12 -3
  58. data/lib/puppet/agent.rb +35 -39
  59. data/lib/puppet/application/agent.rb +53 -25
  60. data/lib/puppet/application/apply.rb +83 -28
  61. data/lib/puppet/application/ca.rb +1 -0
  62. data/lib/puppet/application/cert.rb +54 -5
  63. data/lib/puppet/application/describe.rb +2 -2
  64. data/lib/puppet/application/device.rb +80 -50
  65. data/lib/puppet/application/doc.rb +9 -9
  66. data/lib/puppet/application/face_base.rb +11 -12
  67. data/lib/puppet/application/filebucket.rb +84 -10
  68. data/lib/puppet/application/generate.rb +5 -0
  69. data/lib/puppet/application/lookup.rb +357 -0
  70. data/lib/puppet/application/master.rb +33 -26
  71. data/lib/puppet/application/resource.rb +22 -23
  72. data/lib/puppet/application.rb +31 -15
  73. data/lib/puppet/application_support.rb +1 -1
  74. data/lib/puppet/compilable_resource_type.rb +15 -0
  75. data/lib/puppet/configurer/downloader.rb +2 -2
  76. data/lib/puppet/configurer/fact_handler.rb +13 -4
  77. data/lib/puppet/configurer/plugin_handler.rb +7 -5
  78. data/lib/puppet/configurer.rb +198 -55
  79. data/lib/puppet/context/trusted_information.rb +22 -2
  80. data/lib/puppet/context.rb +20 -5
  81. data/lib/puppet/daemon.rb +17 -13
  82. data/lib/puppet/data_binding.rb +4 -2
  83. data/lib/puppet/defaults.rb +309 -123
  84. data/lib/puppet/environments.rb +105 -10
  85. data/lib/puppet/error.rb +32 -2
  86. data/lib/puppet/etc.rb +161 -0
  87. data/lib/puppet/external/dot.rb +1 -1
  88. data/lib/puppet/external/pson/common.rb +4 -0
  89. data/lib/puppet/face/ca.rb +56 -44
  90. data/lib/puppet/face/catalog/select.rb +4 -4
  91. data/lib/puppet/face/catalog.rb +3 -3
  92. data/lib/puppet/face/certificate.rb +28 -22
  93. data/lib/puppet/face/certificate_request.rb +3 -1
  94. data/lib/puppet/face/certificate_revocation_list.rb +3 -1
  95. data/lib/puppet/face/config.rb +12 -12
  96. data/lib/puppet/face/epp.rb +96 -50
  97. data/lib/puppet/face/facts.rb +5 -5
  98. data/lib/puppet/face/generate.rb +64 -0
  99. data/lib/puppet/face/help/face.erb +3 -0
  100. data/lib/puppet/face/help/man.erb +1 -1
  101. data/lib/puppet/face/help.rb +37 -29
  102. data/lib/puppet/face/key.rb +4 -3
  103. data/lib/puppet/face/man.rb +12 -10
  104. data/lib/puppet/face/module/build.rb +7 -7
  105. data/lib/puppet/face/module/changes.rb +8 -7
  106. data/lib/puppet/face/module/generate.rb +25 -25
  107. data/lib/puppet/face/module/install.rb +19 -15
  108. data/lib/puppet/face/module/list.rb +16 -12
  109. data/lib/puppet/face/module/search.rb +4 -4
  110. data/lib/puppet/face/module/uninstall.rb +13 -10
  111. data/lib/puppet/face/module/upgrade.rb +11 -7
  112. data/lib/puppet/face/module.rb +3 -3
  113. data/lib/puppet/face/node/clean.rb +8 -8
  114. data/lib/puppet/face/node.rb +6 -6
  115. data/lib/puppet/face/parser.rb +28 -25
  116. data/lib/puppet/face/plugin.rb +14 -21
  117. data/lib/puppet/face/report.rb +10 -10
  118. data/lib/puppet/face/resource.rb +13 -13
  119. data/lib/puppet/face/status.rb +9 -6
  120. data/lib/puppet/feature/base.rb +13 -5
  121. data/lib/puppet/feature/cfpropertylist.rb +3 -0
  122. data/lib/puppet/feature/eventlog.rb +1 -1
  123. data/lib/puppet/feature/hiera_eyaml.rb +3 -0
  124. data/lib/puppet/feature/hocon.rb +3 -0
  125. data/lib/puppet/feature/telnet.rb +9 -0
  126. data/lib/puppet/file_bucket/dipper.rb +62 -6
  127. data/lib/puppet/file_bucket/file.rb +4 -17
  128. data/lib/puppet/file_serving/base.rb +3 -3
  129. data/lib/puppet/file_serving/configuration/parser.rb +12 -12
  130. data/lib/puppet/file_serving/configuration.rb +3 -3
  131. data/lib/puppet/file_serving/content.rb +1 -1
  132. data/lib/puppet/file_serving/fileset.rb +7 -5
  133. data/lib/puppet/file_serving/http_metadata.rb +46 -0
  134. data/lib/puppet/file_serving/metadata.rb +33 -12
  135. data/lib/puppet/file_serving/mount/file.rb +6 -6
  136. data/lib/puppet/file_serving/mount/modules.rb +1 -1
  137. data/lib/puppet/file_serving/mount.rb +1 -1
  138. data/lib/puppet/file_serving/terminus_helper.rb +7 -8
  139. data/lib/puppet/file_serving/terminus_selector.rb +3 -1
  140. data/lib/puppet/file_system/file_impl.rb +13 -4
  141. data/lib/puppet/file_system/memory_impl.rb +10 -2
  142. data/lib/puppet/file_system/path_pattern.rb +7 -6
  143. data/lib/puppet/file_system/uniquefile.rb +5 -5
  144. data/lib/puppet/file_system/windows.rb +39 -16
  145. data/lib/puppet/file_system.rb +46 -5
  146. data/lib/puppet/forge/cache.rb +1 -0
  147. data/lib/puppet/forge/errors.rb +12 -12
  148. data/lib/puppet/forge/repository.rb +5 -36
  149. data/lib/puppet/forge.rb +17 -15
  150. data/lib/puppet/functions/alert.rb +14 -0
  151. data/lib/puppet/functions/annotate.rb +108 -0
  152. data/lib/puppet/functions/assert_type.rb +53 -19
  153. data/lib/puppet/functions/binary_file.rb +19 -0
  154. data/lib/puppet/functions/break.rb +22 -0
  155. data/lib/puppet/functions/call.rb +42 -0
  156. data/lib/puppet/functions/contain.rb +33 -0
  157. data/lib/puppet/functions/crit.rb +14 -0
  158. data/lib/puppet/functions/debug.rb +14 -0
  159. data/lib/puppet/functions/defined.rb +160 -0
  160. data/lib/puppet/functions/dig.rb +23 -0
  161. data/lib/puppet/functions/each.rb +89 -39
  162. data/lib/puppet/functions/emerg.rb +14 -0
  163. data/lib/puppet/functions/epp.rb +29 -37
  164. data/lib/puppet/functions/err.rb +14 -0
  165. data/lib/puppet/functions/eyaml_lookup_key.rb +94 -0
  166. data/lib/puppet/functions/filter.rb +64 -38
  167. data/lib/puppet/functions/find_file.rb +31 -0
  168. data/lib/puppet/functions/hiera.rb +83 -3
  169. data/lib/puppet/functions/hiera_array.rb +73 -4
  170. data/lib/puppet/functions/hiera_hash.rb +82 -2
  171. data/lib/puppet/functions/hiera_include.rb +93 -6
  172. data/lib/puppet/functions/hocon_data.rb +41 -0
  173. data/lib/puppet/functions/include.rb +21 -0
  174. data/lib/puppet/functions/info.rb +14 -0
  175. data/lib/puppet/functions/inline_epp.rb +44 -71
  176. data/lib/puppet/functions/json_data.rb +33 -0
  177. data/lib/puppet/functions/lest.rb +17 -0
  178. data/lib/puppet/functions/lookup.rb +172 -184
  179. data/lib/puppet/functions/map.rb +60 -33
  180. data/lib/puppet/functions/match.rb +32 -14
  181. data/lib/puppet/functions/new.rb +31 -0
  182. data/lib/puppet/functions/next.rb +23 -0
  183. data/lib/puppet/functions/notice.rb +14 -0
  184. data/lib/puppet/functions/reduce.rb +112 -71
  185. data/lib/puppet/functions/regsubst.rb +23 -26
  186. data/lib/puppet/functions/require.rb +37 -0
  187. data/lib/puppet/functions/return.rb +22 -0
  188. data/lib/puppet/functions/reverse_each.rb +25 -0
  189. data/lib/puppet/functions/scanf.rb +15 -18
  190. data/lib/puppet/functions/slice.rb +25 -39
  191. data/lib/puppet/functions/split.rb +3 -3
  192. data/lib/puppet/functions/step.rb +26 -0
  193. data/lib/puppet/functions/strftime.rb +43 -0
  194. data/lib/puppet/functions/then.rb +14 -0
  195. data/lib/puppet/functions/type.rb +31 -0
  196. data/lib/puppet/functions/unique.rb +132 -0
  197. data/lib/puppet/functions/unwrap.rb +40 -0
  198. data/lib/puppet/functions/versioncmp.rb +36 -0
  199. data/lib/puppet/functions/warning.rb +14 -0
  200. data/lib/puppet/functions/with.rb +15 -7
  201. data/lib/puppet/functions/yaml_data.rb +42 -0
  202. data/lib/puppet/functions.rb +226 -76
  203. data/lib/puppet/generate/models/type/property.rb +70 -0
  204. data/lib/puppet/generate/models/type/type.rb +62 -0
  205. data/lib/puppet/generate/templates/type/pcore.erb +42 -0
  206. data/lib/puppet/generate/type.rb +239 -0
  207. data/lib/puppet/graph/rb_tree_map.rb +1 -1
  208. data/lib/puppet/graph/relationship_graph.rb +4 -1
  209. data/lib/puppet/graph/simple_graph.rb +51 -74
  210. data/lib/puppet/indirector/catalog/compiler.rb +242 -38
  211. data/lib/puppet/indirector/catalog/json.rb +18 -0
  212. data/lib/puppet/indirector/certificate/disabled_ca.rb +1 -1
  213. data/lib/puppet/indirector/certificate_request/ca.rb +3 -3
  214. data/lib/puppet/indirector/certificate_request/disabled_ca.rb +1 -1
  215. data/lib/puppet/indirector/certificate_revocation_list/disabled_ca.rb +1 -1
  216. data/lib/puppet/indirector/certificate_status/file.rb +6 -6
  217. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  218. data/lib/puppet/indirector/exec.rb +2 -2
  219. data/lib/puppet/indirector/face.rb +24 -19
  220. data/lib/puppet/indirector/facts/facter.rb +9 -1
  221. data/lib/puppet/indirector/file_bucket_file/file.rb +142 -29
  222. data/lib/puppet/indirector/file_content/http.rb +15 -0
  223. data/lib/puppet/indirector/file_metadata/http.rb +27 -0
  224. data/lib/puppet/indirector/file_server.rb +10 -2
  225. data/lib/puppet/indirector/generic_http.rb +16 -0
  226. data/lib/puppet/indirector/hiera.rb +12 -4
  227. data/lib/puppet/indirector/indirection.rb +25 -18
  228. data/lib/puppet/indirector/json.rb +11 -12
  229. data/lib/puppet/indirector/key/ca.rb +2 -2
  230. data/lib/puppet/indirector/key/disabled_ca.rb +1 -1
  231. data/lib/puppet/indirector/key/file.rb +4 -3
  232. data/lib/puppet/indirector/ldap.rb +6 -5
  233. data/lib/puppet/indirector/memory.rb +1 -1
  234. data/lib/puppet/indirector/msgpack.rb +9 -8
  235. data/lib/puppet/indirector/node/exec.rb +9 -7
  236. data/lib/puppet/indirector/node/ldap.rb +10 -8
  237. data/lib/puppet/indirector/node/plain.rb +2 -1
  238. data/lib/puppet/indirector/node/write_only_yaml.rb +6 -1
  239. data/lib/puppet/indirector/node/yaml.rb +0 -9
  240. data/lib/puppet/indirector/report/processor.rb +2 -2
  241. data/lib/puppet/indirector/report/rest.rb +13 -0
  242. data/lib/puppet/indirector/request.rb +40 -23
  243. data/lib/puppet/indirector/resource/ral.rb +1 -1
  244. data/lib/puppet/indirector/resource/validator.rb +1 -1
  245. data/lib/puppet/indirector/rest.rb +103 -10
  246. data/lib/puppet/indirector/ssl_file.rb +33 -12
  247. data/lib/puppet/indirector/terminus.rb +7 -7
  248. data/lib/puppet/indirector/yaml.rb +5 -5
  249. data/lib/puppet/indirector.rb +2 -2
  250. data/lib/puppet/info_service/class_information_service.rb +110 -0
  251. data/lib/puppet/info_service.rb +7 -0
  252. data/lib/puppet/interface/documentation.rb +1 -1
  253. data/lib/puppet/interface/face_collection.rb +7 -2
  254. data/lib/puppet/interface.rb +12 -4
  255. data/lib/puppet/loaders.rb +6 -0
  256. data/lib/puppet/metatype/manager.rb +25 -8
  257. data/lib/puppet/module.rb +73 -34
  258. data/lib/puppet/module_tool/applications/application.rb +8 -9
  259. data/lib/puppet/module_tool/applications/builder.rb +9 -9
  260. data/lib/puppet/module_tool/applications/checksummer.rb +2 -2
  261. data/lib/puppet/module_tool/applications/installer.rb +21 -20
  262. data/lib/puppet/module_tool/applications/searcher.rb +1 -1
  263. data/lib/puppet/module_tool/applications/uninstaller.rb +2 -1
  264. data/lib/puppet/module_tool/applications/unpacker.rb +4 -4
  265. data/lib/puppet/module_tool/applications/upgrader.rb +19 -18
  266. data/lib/puppet/module_tool/checksums.rb +1 -1
  267. data/lib/puppet/module_tool/contents_description.rb +1 -1
  268. data/lib/puppet/module_tool/dependency.rb +0 -1
  269. data/lib/puppet/module_tool/errors/installer.rb +23 -23
  270. data/lib/puppet/module_tool/errors/shared.rb +44 -42
  271. data/lib/puppet/module_tool/errors/uninstaller.rb +13 -9
  272. data/lib/puppet/module_tool/errors/upgrader.rb +11 -11
  273. data/lib/puppet/module_tool/install_directory.rb +1 -1
  274. data/lib/puppet/module_tool/installed_modules.rb +10 -10
  275. data/lib/puppet/module_tool/local_tarball.rb +7 -7
  276. data/lib/puppet/module_tool/metadata.rb +47 -21
  277. data/lib/puppet/module_tool/shared_behaviors.rb +6 -6
  278. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +14 -3
  279. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +48 -38
  280. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +19 -4
  281. data/lib/puppet/module_tool/skeleton/templates/generator/{tests → examples}/init.pp.erb +3 -3
  282. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  283. data/lib/puppet/module_tool/skeleton/templates/generator/spec/classes/init_spec.rb.erb +1 -2
  284. data/lib/puppet/module_tool/tar/mini.rb +3 -3
  285. data/lib/puppet/module_tool/tar.rb +5 -4
  286. data/lib/puppet/module_tool.rb +11 -7
  287. data/lib/puppet/network/auth_config_parser.rb +13 -12
  288. data/lib/puppet/network/authconfig.rb +23 -3
  289. data/lib/puppet/network/authorization.rb +8 -1
  290. data/lib/puppet/network/authstore.rb +2 -2
  291. data/lib/puppet/network/format.rb +7 -7
  292. data/lib/puppet/network/format_handler.rb +12 -9
  293. data/lib/puppet/network/format_support.rb +11 -5
  294. data/lib/puppet/network/formats.rb +38 -27
  295. data/lib/puppet/network/http/api/indirected_routes.rb +86 -58
  296. data/lib/puppet/network/http/api/master/v3/environment.rb +82 -0
  297. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  298. data/lib/puppet/network/http/compression.rb +12 -8
  299. data/lib/puppet/network/http/connection.rb +21 -15
  300. data/lib/puppet/network/http/error.rb +14 -10
  301. data/lib/puppet/network/http/factory.rb +8 -4
  302. data/lib/puppet/network/http/handler.rb +11 -6
  303. data/lib/puppet/network/http/issues.rb +1 -0
  304. data/lib/puppet/network/http/pool.rb +10 -1
  305. data/lib/puppet/network/http/rack/rest.rb +27 -3
  306. data/lib/puppet/network/http/rack.rb +2 -2
  307. data/lib/puppet/network/http/request.rb +34 -20
  308. data/lib/puppet/network/http/response.rb +13 -1
  309. data/lib/puppet/network/http/webrick/rest.rb +2 -2
  310. data/lib/puppet/network/http/webrick.rb +7 -6
  311. data/lib/puppet/network/rights.rb +7 -17
  312. data/lib/puppet/network/server.rb +2 -2
  313. data/lib/puppet/node/environment.rb +73 -17
  314. data/lib/puppet/node/facts.rb +1 -6
  315. data/lib/puppet/node.rb +61 -18
  316. data/lib/puppet/parameter/boolean.rb +1 -1
  317. data/lib/puppet/parameter/package_options.rb +1 -1
  318. data/lib/puppet/parameter/path.rb +3 -3
  319. data/lib/puppet/parameter/value.rb +1 -1
  320. data/lib/puppet/parameter/value_collection.rb +4 -4
  321. data/lib/puppet/parameter.rb +24 -29
  322. data/lib/puppet/parser/ast/node.rb +1 -1
  323. data/lib/puppet/parser/ast/pops_bridge.rb +103 -29
  324. data/lib/puppet/parser/ast/resource.rb +5 -0
  325. data/lib/puppet/parser/ast/resource_instance.rb +5 -1
  326. data/lib/puppet/parser/ast/resourceparam.rb +5 -0
  327. data/lib/puppet/parser/ast.rb +5 -0
  328. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  329. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +57 -0
  330. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  331. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  332. data/lib/puppet/parser/compiler.rb +351 -128
  333. data/lib/puppet/parser/e4_parser_adapter.rb +14 -14
  334. data/lib/puppet/parser/environment_compiler.rb +199 -0
  335. data/lib/puppet/parser/functions/assert_type.rb +47 -17
  336. data/lib/puppet/parser/functions/binary_file.rb +24 -0
  337. data/lib/puppet/parser/functions/break.rb +39 -0
  338. data/lib/puppet/parser/functions/contain.rb +7 -15
  339. data/lib/puppet/parser/functions/create_resources.rb +49 -25
  340. data/lib/puppet/parser/functions/defined.rb +106 -69
  341. data/lib/puppet/parser/functions/dig.rb +29 -0
  342. data/lib/puppet/parser/functions/each.rb +86 -28
  343. data/lib/puppet/parser/functions/epp.rb +30 -38
  344. data/lib/puppet/parser/functions/file.rb +4 -2
  345. data/lib/puppet/parser/functions/filter.rb +60 -24
  346. data/lib/puppet/parser/functions/find_file.rb +28 -0
  347. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  348. data/lib/puppet/parser/functions/generate.rb +5 -4
  349. data/lib/puppet/parser/functions/hiera.rb +98 -28
  350. data/lib/puppet/parser/functions/hiera_array.rb +86 -29
  351. data/lib/puppet/parser/functions/hiera_hash.rb +96 -31
  352. data/lib/puppet/parser/functions/hiera_include.rb +96 -41
  353. data/lib/puppet/parser/functions/include.rb +5 -8
  354. data/lib/puppet/parser/functions/inline_epp.rb +36 -61
  355. data/lib/puppet/parser/functions/inline_template.rb +3 -3
  356. data/lib/puppet/parser/functions/lest.rb +49 -0
  357. data/lib/puppet/parser/functions/lookup.rb +129 -151
  358. data/lib/puppet/parser/functions/map.rb +56 -21
  359. data/lib/puppet/parser/functions/match.rb +29 -13
  360. data/lib/puppet/parser/functions/new.rb +939 -0
  361. data/lib/puppet/parser/functions/next.rb +38 -0
  362. data/lib/puppet/parser/functions/reduce.rb +98 -61
  363. data/lib/puppet/parser/functions/regsubst.rb +4 -2
  364. data/lib/puppet/parser/functions/require.rb +4 -27
  365. data/lib/puppet/parser/functions/return.rb +71 -0
  366. data/lib/puppet/parser/functions/reverse_each.rb +83 -0
  367. data/lib/puppet/parser/functions/scanf.rb +25 -31
  368. data/lib/puppet/parser/functions/slice.rb +18 -25
  369. data/lib/puppet/parser/functions/split.rb +2 -2
  370. data/lib/puppet/parser/functions/step.rb +84 -0
  371. data/lib/puppet/parser/functions/strftime.rb +185 -0
  372. data/lib/puppet/parser/functions/then.rb +73 -0
  373. data/lib/puppet/parser/functions/type.rb +53 -0
  374. data/lib/puppet/parser/functions/with.rb +17 -9
  375. data/lib/puppet/parser/functions.rb +39 -21
  376. data/lib/puppet/parser/parser_factory.rb +0 -30
  377. data/lib/puppet/parser/relationship.rb +49 -20
  378. data/lib/puppet/parser/resource/param.rb +0 -3
  379. data/lib/puppet/parser/resource.rb +165 -50
  380. data/lib/puppet/parser/scope.rb +419 -200
  381. data/lib/puppet/parser/templatewrapper.rb +4 -3
  382. data/lib/puppet/parser/type_loader.rb +2 -2
  383. data/lib/puppet/parser.rb +3 -1
  384. data/lib/puppet/plugins/configuration.rb +15 -58
  385. data/lib/puppet/plugins/syntax_checkers.rb +6 -11
  386. data/lib/puppet/pops/adaptable.rb +12 -7
  387. data/lib/puppet/pops/adapters.rb +102 -73
  388. data/lib/puppet/pops/evaluator/access_operator.rb +248 -158
  389. data/lib/puppet/pops/evaluator/callable_signature.rb +7 -0
  390. data/lib/puppet/pops/evaluator/closure.rb +251 -109
  391. data/lib/puppet/pops/evaluator/collector_transformer.rb +51 -37
  392. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  393. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +6 -2
  394. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +8 -5
  395. data/lib/puppet/pops/evaluator/compare_operator.rb +113 -13
  396. data/lib/puppet/pops/evaluator/epp_evaluator.rb +17 -11
  397. data/lib/puppet/pops/evaluator/evaluator_impl.rb +281 -151
  398. data/lib/puppet/pops/evaluator/external_syntax_support.rb +2 -9
  399. data/lib/puppet/pops/evaluator/json_strict_literal_evaluator.rb +82 -0
  400. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  401. data/lib/puppet/pops/evaluator/puppet_proc.rb +1 -1
  402. data/lib/puppet/pops/evaluator/relationship_operator.rb +44 -20
  403. data/lib/puppet/pops/evaluator/runtime3_converter.rb +74 -49
  404. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +117 -0
  405. data/lib/puppet/pops/evaluator/runtime3_support.rb +142 -91
  406. data/lib/puppet/pops/functions/dispatch.rb +34 -14
  407. data/lib/puppet/pops/functions/dispatcher.rb +17 -16
  408. data/lib/puppet/pops/functions/function.rb +30 -4
  409. data/lib/puppet/pops/issue_reporter.rb +49 -21
  410. data/lib/puppet/pops/issues.rb +404 -102
  411. data/lib/puppet/pops/label_provider.rb +18 -4
  412. data/lib/puppet/pops/loader/base_loader.rb +74 -20
  413. data/lib/puppet/pops/loader/dependency_loader.rb +27 -2
  414. data/lib/puppet/pops/loader/gem_support.rb +2 -2
  415. data/lib/puppet/pops/loader/loader.rb +57 -48
  416. data/lib/puppet/pops/loader/loader_paths.rb +113 -6
  417. data/lib/puppet/pops/loader/module_loaders.rb +128 -35
  418. data/lib/puppet/pops/loader/null_loader.rb +17 -1
  419. data/lib/puppet/pops/loader/predefined_loader.rb +24 -0
  420. data/lib/puppet/pops/loader/puppet_function_instantiator.rb +84 -0
  421. data/lib/puppet/pops/loader/puppet_resource_type_impl_instantiator.rb +79 -0
  422. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +19 -7
  423. data/lib/puppet/pops/loader/runtime3_type_loader.rb +96 -0
  424. data/lib/puppet/pops/loader/static_loader.rb +111 -41
  425. data/lib/puppet/pops/loader/type_definition_instantiator.rb +93 -0
  426. data/lib/puppet/pops/loader/typed_name.rb +54 -0
  427. data/lib/puppet/pops/loaders.rb +213 -31
  428. data/lib/puppet/pops/lookup/configured_data_provider.rb +93 -0
  429. data/lib/puppet/pops/lookup/context.rb +200 -0
  430. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  431. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +145 -0
  432. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +126 -0
  433. data/lib/puppet/pops/lookup/data_provider.rb +92 -0
  434. data/lib/puppet/pops/lookup/environment_data_provider.rb +35 -0
  435. data/lib/puppet/pops/lookup/explainer.rb +594 -0
  436. data/lib/puppet/pops/lookup/function_provider.rb +110 -0
  437. data/lib/puppet/pops/lookup/global_data_provider.rb +75 -0
  438. data/lib/puppet/pops/lookup/hiera_config.rb +761 -0
  439. data/lib/puppet/pops/lookup/interpolation.rb +154 -0
  440. data/lib/puppet/pops/lookup/invocation.rb +261 -0
  441. data/lib/puppet/pops/lookup/location_resolver.rb +99 -0
  442. data/lib/puppet/pops/lookup/lookup_adapter.rb +471 -0
  443. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  444. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +92 -0
  445. data/lib/puppet/pops/lookup/module_data_provider.rb +89 -0
  446. data/lib/puppet/pops/lookup/sub_lookup.rb +92 -0
  447. data/lib/puppet/pops/lookup.rb +49 -49
  448. data/lib/puppet/pops/merge_strategy.rb +197 -46
  449. data/lib/puppet/pops/migration/migration_checker.rb +58 -0
  450. data/lib/puppet/pops/model/ast.pp +692 -0
  451. data/lib/puppet/pops/model/ast.rb +4833 -0
  452. data/lib/puppet/pops/model/ast_transformer.rb +15 -9
  453. data/lib/puppet/pops/model/factory.rb +550 -527
  454. data/lib/puppet/pops/model/model_label_provider.rb +33 -8
  455. data/lib/puppet/pops/model/model_tree_dumper.rb +52 -7
  456. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  457. data/lib/puppet/pops/parser/egrammar.ra +190 -67
  458. data/lib/puppet/pops/parser/eparser.rb +1823 -1338
  459. data/lib/puppet/pops/parser/epp_support.rb +27 -12
  460. data/lib/puppet/pops/parser/evaluating_parser.rb +31 -17
  461. data/lib/puppet/pops/parser/heredoc_support.rb +20 -16
  462. data/lib/puppet/pops/parser/interpolation_support.rb +18 -5
  463. data/lib/puppet/pops/parser/lexer2.rb +460 -383
  464. data/lib/puppet/pops/parser/lexer_support.rb +132 -25
  465. data/lib/puppet/pops/parser/locator.rb +86 -9
  466. data/lib/puppet/pops/parser/parser_support.rb +59 -54
  467. data/lib/puppet/pops/parser/slurp_support.rb +37 -12
  468. data/lib/puppet/pops/patterns.rb +16 -1
  469. data/lib/puppet/pops/pcore.rb +103 -0
  470. data/lib/puppet/pops/puppet_stack.rb +43 -0
  471. data/lib/puppet/pops/resource/param.rb +55 -0
  472. data/lib/puppet/pops/resource/resource_type_impl.rb +314 -0
  473. data/lib/puppet/pops/resource/resource_type_set.pcore +22 -0
  474. data/lib/puppet/pops/semantic_error.rb +12 -0
  475. data/lib/puppet/pops/serialization/abstract_reader.rb +176 -0
  476. data/lib/puppet/pops/serialization/abstract_writer.rb +215 -0
  477. data/lib/puppet/pops/serialization/deserializer.rb +80 -0
  478. data/lib/puppet/pops/serialization/extension.rb +157 -0
  479. data/lib/puppet/pops/serialization/from_data_converter.rb +181 -0
  480. data/lib/puppet/pops/serialization/instance_reader.rb +19 -0
  481. data/lib/puppet/pops/serialization/instance_writer.rb +14 -0
  482. data/lib/puppet/pops/serialization/json.rb +297 -0
  483. data/lib/puppet/pops/serialization/json_path.rb +126 -0
  484. data/lib/puppet/pops/serialization/object.rb +71 -0
  485. data/lib/puppet/pops/serialization/serializer.rb +139 -0
  486. data/lib/puppet/pops/serialization/time_factory.rb +67 -0
  487. data/lib/puppet/pops/serialization/to_data_converter.rb +292 -0
  488. data/lib/puppet/pops/serialization.rb +41 -0
  489. data/lib/puppet/pops/time/timespan.rb +718 -0
  490. data/lib/puppet/pops/time/timestamp.rb +148 -0
  491. data/lib/puppet/pops/types/annotatable.rb +36 -0
  492. data/lib/puppet/pops/types/annotation.rb +71 -0
  493. data/lib/puppet/pops/types/class_loader.rb +29 -29
  494. data/lib/puppet/pops/types/enumeration.rb +9 -27
  495. data/lib/puppet/pops/types/implementation_registry.rb +141 -0
  496. data/lib/puppet/pops/types/iterable.rb +308 -0
  497. data/lib/puppet/pops/types/p_binary_type.rb +226 -0
  498. data/lib/puppet/pops/types/p_meta_type.rb +87 -0
  499. data/lib/puppet/pops/types/p_object_type.rb +925 -0
  500. data/lib/puppet/pops/types/p_runtime_type.rb +115 -0
  501. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +191 -0
  502. data/lib/puppet/pops/types/p_sem_ver_type.rb +141 -0
  503. data/lib/puppet/pops/types/p_sensitive_type.rb +73 -0
  504. data/lib/puppet/pops/types/p_timespan_type.rb +192 -0
  505. data/lib/puppet/pops/types/p_timestamp_type.rb +69 -0
  506. data/lib/puppet/pops/types/p_type_set_type.rb +360 -0
  507. data/lib/puppet/pops/types/puppet_object.rb +26 -0
  508. data/lib/puppet/pops/types/recursion_guard.rb +136 -0
  509. data/lib/puppet/pops/types/ruby_generator.rb +439 -0
  510. data/lib/puppet/pops/types/ruby_method.rb +31 -0
  511. data/lib/puppet/pops/types/string_converter.rb +1099 -0
  512. data/lib/puppet/pops/types/type_acceptor.rb +25 -0
  513. data/lib/puppet/pops/types/type_asserter.rb +21 -19
  514. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  515. data/lib/puppet/pops/types/type_calculator.rb +252 -1232
  516. data/lib/puppet/pops/types/type_conversion_error.rb +15 -0
  517. data/lib/puppet/pops/types/type_factory.rb +300 -166
  518. data/lib/puppet/pops/types/type_formatter.rb +734 -0
  519. data/lib/puppet/pops/types/type_mismatch_describer.rb +1106 -0
  520. data/lib/puppet/pops/types/type_parser.rb +382 -275
  521. data/lib/puppet/pops/types/type_set_reference.rb +59 -0
  522. data/lib/puppet/pops/types/types.rb +3287 -289
  523. data/lib/puppet/pops/utils.rb +7 -30
  524. data/lib/puppet/pops/validation/checker4_0.rb +353 -125
  525. data/lib/puppet/pops/validation/validator_factory_4_0.rb +13 -5
  526. data/lib/puppet/pops/validation.rb +50 -18
  527. data/lib/puppet/pops/visitor.rb +30 -6
  528. data/lib/puppet/pops.rb +46 -57
  529. data/lib/puppet/property/ensure.rb +4 -4
  530. data/lib/puppet/property/list.rb +1 -10
  531. data/lib/puppet/property.rb +84 -21
  532. data/lib/puppet/provider/aixobject.rb +11 -11
  533. data/lib/puppet/provider/augeas/augeas.rb +89 -34
  534. data/lib/puppet/provider/command.rb +1 -1
  535. data/lib/puppet/provider/cron/crontab.rb +3 -3
  536. data/lib/puppet/provider/exec/posix.rb +4 -4
  537. data/lib/puppet/provider/exec/windows.rb +4 -4
  538. data/lib/puppet/provider/exec.rb +14 -7
  539. data/lib/puppet/provider/file/posix.rb +5 -5
  540. data/lib/puppet/provider/file/windows.rb +4 -4
  541. data/lib/puppet/provider/group/aix.rb +6 -6
  542. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  543. data/lib/puppet/provider/group/groupadd.rb +2 -2
  544. data/lib/puppet/provider/group/pw.rb +2 -1
  545. data/lib/puppet/provider/group/windows_adsi.rb +23 -7
  546. data/lib/puppet/provider/host/parsed.rb +1 -1
  547. data/lib/puppet/provider/macauthorization/macauthorization.rb +20 -19
  548. data/lib/puppet/provider/mailalias/aliases.rb +1 -1
  549. data/lib/puppet/provider/maillist/mailman.rb +2 -2
  550. data/lib/puppet/provider/mcx/mcxcontent.rb +6 -5
  551. data/lib/puppet/provider/mount/parsed.rb +162 -3
  552. data/lib/puppet/provider/mount.rb +2 -1
  553. data/lib/puppet/provider/naginator.rb +1 -1
  554. data/lib/puppet/provider/nameservice/directoryservice.rb +65 -72
  555. data/lib/puppet/provider/nameservice.rb +40 -17
  556. data/lib/puppet/provider/network_device.rb +2 -1
  557. data/lib/puppet/provider/package/aix.rb +5 -5
  558. data/lib/puppet/provider/package/appdmg.rb +7 -6
  559. data/lib/puppet/provider/package/apple.rb +2 -2
  560. data/lib/puppet/provider/package/apt.rb +5 -5
  561. data/lib/puppet/provider/package/aptitude.rb +1 -1
  562. data/lib/puppet/provider/package/aptrpm.rb +2 -2
  563. data/lib/puppet/provider/package/blastwave.rb +4 -4
  564. data/lib/puppet/provider/package/dnf.rb +46 -0
  565. data/lib/puppet/provider/package/dpkg.rb +3 -3
  566. data/lib/puppet/provider/package/fink.rb +3 -3
  567. data/lib/puppet/provider/package/freebsd.rb +1 -1
  568. data/lib/puppet/provider/package/gem.rb +35 -9
  569. data/lib/puppet/provider/package/hpux.rb +1 -1
  570. data/lib/puppet/provider/package/nim.rb +17 -14
  571. data/lib/puppet/provider/package/openbsd.rb +11 -11
  572. data/lib/puppet/provider/package/opkg.rb +1 -1
  573. data/lib/puppet/provider/package/pacman.rb +20 -19
  574. data/lib/puppet/provider/package/pip.rb +83 -22
  575. data/lib/puppet/provider/package/pip3.rb +20 -0
  576. data/lib/puppet/provider/package/pkg.rb +21 -17
  577. data/lib/puppet/provider/package/pkgdmg.rb +12 -9
  578. data/lib/puppet/provider/package/pkgin.rb +6 -6
  579. data/lib/puppet/provider/package/pkgng.rb +143 -0
  580. data/lib/puppet/provider/package/pkgutil.rb +7 -7
  581. data/lib/puppet/provider/package/portage.rb +183 -35
  582. data/lib/puppet/provider/package/ports.rb +3 -6
  583. data/lib/puppet/provider/package/portupgrade.rb +4 -4
  584. data/lib/puppet/provider/package/puppet_gem.rb +0 -0
  585. data/lib/puppet/provider/package/rpm.rb +130 -21
  586. data/lib/puppet/provider/package/rug.rb +1 -1
  587. data/lib/puppet/provider/package/sun.rb +4 -3
  588. data/lib/puppet/provider/package/tdnf.rb +28 -0
  589. data/lib/puppet/provider/package/up2date.rb +1 -1
  590. data/lib/puppet/provider/package/urpmi.rb +1 -1
  591. data/lib/puppet/provider/package/windows/exe_package.rb +10 -9
  592. data/lib/puppet/provider/package/windows/msi_package.rb +4 -4
  593. data/lib/puppet/provider/package/windows/package.rb +12 -4
  594. data/lib/puppet/provider/package/windows.rb +5 -5
  595. data/lib/puppet/provider/package/yum.rb +73 -94
  596. data/lib/puppet/provider/package/zypper.rb +70 -16
  597. data/lib/puppet/provider/package.rb +6 -2
  598. data/lib/puppet/provider/parsedfile.rb +3 -3
  599. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +39 -7
  600. data/lib/puppet/provider/selmodule/semodule.rb +20 -16
  601. data/lib/puppet/provider/service/base.rb +4 -3
  602. data/lib/puppet/provider/service/bsd.rb +9 -9
  603. data/lib/puppet/provider/service/daemontools.rb +5 -5
  604. data/lib/puppet/provider/service/debian.rb +14 -5
  605. data/lib/puppet/provider/service/freebsd.rb +1 -1
  606. data/lib/puppet/provider/service/init.rb +27 -3
  607. data/lib/puppet/provider/service/launchd.rb +57 -19
  608. data/lib/puppet/provider/service/rcng.rb +51 -0
  609. data/lib/puppet/provider/service/redhat.rb +2 -1
  610. data/lib/puppet/provider/service/runit.rb +4 -4
  611. data/lib/puppet/provider/service/smf.rb +59 -8
  612. data/lib/puppet/provider/service/src.rb +66 -39
  613. data/lib/puppet/provider/service/systemd.rb +141 -22
  614. data/lib/puppet/provider/service/upstart.rb +1 -3
  615. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  616. data/lib/puppet/provider/sshkey/parsed.rb +20 -10
  617. data/lib/puppet/provider/user/aix.rb +12 -6
  618. data/lib/puppet/provider/user/directoryservice.rb +43 -66
  619. data/lib/puppet/provider/user/hpux.rb +1 -1
  620. data/lib/puppet/provider/user/ldap.rb +1 -1
  621. data/lib/puppet/provider/user/openbsd.rb +1 -0
  622. data/lib/puppet/provider/user/pw.rb +1 -0
  623. data/lib/puppet/provider/user/user_role_add.rb +19 -2
  624. data/lib/puppet/provider/user/useradd.rb +1 -1
  625. data/lib/puppet/provider/user/windows_adsi.rb +51 -2
  626. data/lib/puppet/provider/yumrepo/inifile.rb +12 -9
  627. data/lib/puppet/provider/zfs/zfs.rb +2 -2
  628. data/lib/puppet/provider/zone/solaris.rb +6 -3
  629. data/lib/puppet/provider/zpool/zpool.rb +2 -2
  630. data/lib/puppet/provider.rb +11 -7
  631. data/lib/puppet/reference/configuration.rb +13 -5
  632. data/lib/puppet/reference/indirection.rb +3 -3
  633. data/lib/puppet/reference/metaparameter.rb +1 -1
  634. data/lib/puppet/reference/providers.rb +8 -9
  635. data/lib/puppet/reference/report.rb +9 -12
  636. data/lib/puppet/reference/type.rb +3 -3
  637. data/lib/puppet/relationship.rb +7 -9
  638. data/lib/puppet/reports/http.rb +6 -2
  639. data/lib/puppet/reports.rb +5 -1
  640. data/lib/puppet/resource/capability_finder.rb +128 -0
  641. data/lib/puppet/resource/catalog.rb +163 -51
  642. data/lib/puppet/resource/status.rb +34 -20
  643. data/lib/puppet/resource/type.rb +246 -97
  644. data/lib/puppet/resource/type_collection.rb +97 -17
  645. data/lib/puppet/resource.rb +242 -199
  646. data/lib/puppet/settings/array_setting.rb +1 -1
  647. data/lib/puppet/settings/autosign_setting.rb +1 -1
  648. data/lib/puppet/settings/base_setting.rb +9 -3
  649. data/lib/puppet/settings/boolean_setting.rb +1 -1
  650. data/lib/puppet/settings/config_file.rb +4 -3
  651. data/lib/puppet/settings/directory_setting.rb +6 -0
  652. data/lib/puppet/settings/duration_setting.rb +1 -1
  653. data/lib/puppet/settings/enum_setting.rb +1 -1
  654. data/lib/puppet/settings/environment_conf.rb +28 -8
  655. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  656. data/lib/puppet/settings/file_setting.rb +22 -11
  657. data/lib/puppet/settings/ini_file.rb +2 -2
  658. data/lib/puppet/settings/priority_setting.rb +1 -1
  659. data/lib/puppet/settings/server_list_setting.rb +20 -0
  660. data/lib/puppet/settings/symbolic_enum_setting.rb +17 -0
  661. data/lib/puppet/settings/terminus_setting.rb +1 -1
  662. data/lib/puppet/settings/ttl_setting.rb +2 -2
  663. data/lib/puppet/settings.rb +118 -46
  664. data/lib/puppet/ssl/base.rb +16 -3
  665. data/lib/puppet/ssl/certificate.rb +1 -1
  666. data/lib/puppet/ssl/certificate_authority/interface.rb +172 -32
  667. data/lib/puppet/ssl/certificate_authority.rb +67 -31
  668. data/lib/puppet/ssl/certificate_factory.rb +5 -5
  669. data/lib/puppet/ssl/certificate_request.rb +19 -19
  670. data/lib/puppet/ssl/certificate_request_attributes.rb +3 -3
  671. data/lib/puppet/ssl/certificate_revocation_list.rb +3 -3
  672. data/lib/puppet/ssl/certificate_signer.rb +1 -1
  673. data/lib/puppet/ssl/configuration.rb +4 -1
  674. data/lib/puppet/ssl/host.rb +47 -25
  675. data/lib/puppet/ssl/inventory.rb +11 -4
  676. data/lib/puppet/ssl/key.rb +8 -4
  677. data/lib/puppet/ssl/oids.rb +48 -8
  678. data/lib/puppet/ssl/validator/default_validator.rb +6 -7
  679. data/lib/puppet/syntax_checkers/base64.rb +41 -0
  680. data/lib/puppet/syntax_checkers/json.rb +5 -7
  681. data/lib/puppet/test/test_helper.rb +21 -11
  682. data/lib/puppet/transaction/additional_resource_generator.rb +105 -11
  683. data/lib/puppet/transaction/event.rb +45 -7
  684. data/lib/puppet/transaction/event_manager.rb +7 -7
  685. data/lib/puppet/transaction/persistence.rb +84 -0
  686. data/lib/puppet/transaction/report.rb +113 -37
  687. data/lib/puppet/transaction/resource_harness.rb +99 -37
  688. data/lib/puppet/transaction.rb +100 -54
  689. data/lib/puppet/type/augeas.rb +15 -6
  690. data/lib/puppet/type/component.rb +11 -0
  691. data/lib/puppet/type/cron.rb +27 -44
  692. data/lib/puppet/type/exec.rb +82 -52
  693. data/lib/puppet/type/file/checksum.rb +1 -0
  694. data/lib/puppet/type/file/checksum_value.rb +53 -0
  695. data/lib/puppet/type/file/content.rb +37 -122
  696. data/lib/puppet/type/file/data_sync.rb +92 -0
  697. data/lib/puppet/type/file/ensure.rb +22 -19
  698. data/lib/puppet/type/file/group.rb +3 -3
  699. data/lib/puppet/type/file/mode.rb +10 -6
  700. data/lib/puppet/type/file/owner.rb +3 -3
  701. data/lib/puppet/type/file/selcontext.rb +19 -2
  702. data/lib/puppet/type/file/source.rb +134 -37
  703. data/lib/puppet/type/file/target.rb +2 -2
  704. data/lib/puppet/type/file.rb +160 -61
  705. data/lib/puppet/type/filebucket.rb +3 -8
  706. data/lib/puppet/type/group.rb +28 -10
  707. data/lib/puppet/type/host.rb +7 -7
  708. data/lib/puppet/type/interface.rb +9 -4
  709. data/lib/puppet/type/k5login.rb +1 -1
  710. data/lib/puppet/type/macauthorization.rb +2 -2
  711. data/lib/puppet/type/mailalias.rb +2 -18
  712. data/lib/puppet/type/maillist.rb +1 -1
  713. data/lib/puppet/type/mount.rb +31 -8
  714. data/lib/puppet/type/notify.rb +3 -1
  715. data/lib/puppet/type/package.rb +37 -17
  716. data/lib/puppet/type/resources.rb +7 -7
  717. data/lib/puppet/type/schedule.rb +14 -14
  718. data/lib/puppet/type/scheduled_task.rb +18 -5
  719. data/lib/puppet/type/service.rb +25 -1
  720. data/lib/puppet/type/ssh_authorized_key.rb +20 -30
  721. data/lib/puppet/type/sshkey.rb +9 -7
  722. data/lib/puppet/type/stage.rb +1 -1
  723. data/lib/puppet/type/tidy.rb +24 -15
  724. data/lib/puppet/type/user.rb +112 -53
  725. data/lib/puppet/type/yumrepo.rb +36 -16
  726. data/lib/puppet/type/zone.rb +13 -13
  727. data/lib/puppet/type/zpool.rb +3 -3
  728. data/lib/puppet/type.rb +175 -47
  729. data/lib/puppet/util/at_fork/noop.rb +18 -0
  730. data/lib/puppet/util/at_fork/solaris.rb +158 -0
  731. data/lib/puppet/util/at_fork.rb +35 -0
  732. data/lib/puppet/util/autoload.rb +18 -13
  733. data/lib/puppet/util/backups.rb +6 -6
  734. data/lib/puppet/util/character_encoding.rb +98 -0
  735. data/lib/puppet/util/checksums.rb +74 -31
  736. data/lib/puppet/util/classgen.rb +5 -5
  737. data/lib/puppet/util/command_line/puppet_option_parser.rb +3 -3
  738. data/lib/puppet/util/command_line/trollop.rb +32 -32
  739. data/lib/puppet/util/command_line.rb +14 -6
  740. data/lib/puppet/util/diff.rb +1 -1
  741. data/lib/puppet/util/errors.rb +4 -4
  742. data/lib/puppet/util/execution.rb +42 -23
  743. data/lib/puppet/util/feature.rb +5 -5
  744. data/lib/puppet/util/fileparsing.rb +8 -8
  745. data/lib/puppet/util/filetype.rb +26 -20
  746. data/lib/puppet/util/http_proxy.rb +132 -0
  747. data/lib/puppet/util/inifile.rb +5 -5
  748. data/lib/puppet/util/instance_loader.rb +2 -2
  749. data/lib/puppet/util/json_lockfile.rb +4 -4
  750. data/lib/puppet/util/ldap/connection.rb +2 -2
  751. data/lib/puppet/util/ldap/manager.rb +2 -2
  752. data/lib/puppet/util/limits.rb +1 -1
  753. data/lib/puppet/util/log/destinations.rb +33 -18
  754. data/lib/puppet/util/log.rb +92 -16
  755. data/lib/puppet/util/logging.rb +88 -6
  756. data/lib/puppet/util/metric.rb +9 -6
  757. data/lib/puppet/util/monkey_patches.rb +41 -65
  758. data/lib/puppet/util/multi_match.rb +51 -0
  759. data/lib/puppet/util/network_device/cisco/device.rb +29 -11
  760. data/lib/puppet/util/network_device/cisco/interface.rb +21 -9
  761. data/lib/puppet/util/network_device/config.rb +7 -7
  762. data/lib/puppet/util/network_device/transport/ssh.rb +13 -9
  763. data/lib/puppet/util/network_device/transport/telnet.rb +39 -36
  764. data/lib/puppet/util/network_device.rb +1 -1
  765. data/lib/puppet/util/plist.rb +153 -0
  766. data/lib/puppet/util/posix.rb +5 -5
  767. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  768. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  769. data/lib/puppet/util/profiler/wall_clock.rb +1 -1
  770. data/lib/puppet/util/profiler.rb +1 -1
  771. data/lib/puppet/util/provider_features.rb +1 -1
  772. data/lib/puppet/util/psych_support.rb +4 -12
  773. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +3 -3
  774. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  775. data/lib/puppet/util/rdoc.rb +6 -6
  776. data/lib/puppet/util/reference.rb +9 -7
  777. data/lib/puppet/util/resource_template.rb +2 -2
  778. data/lib/puppet/util/retry_action.rb +2 -2
  779. data/lib/puppet/util/rubygems.rb +1 -1
  780. data/lib/puppet/util/run_mode.rb +3 -16
  781. data/lib/puppet/util/selinux.rb +54 -12
  782. data/lib/puppet/util/skip_tags.rb +9 -0
  783. data/lib/puppet/util/splayer.rb +18 -0
  784. data/lib/puppet/util/storage.rb +5 -5
  785. data/lib/puppet/util/suidmanager.rb +4 -4
  786. data/lib/puppet/util/symbolic_file_mode.rb +9 -9
  787. data/lib/puppet/util/tag_set.rb +1 -4
  788. data/lib/puppet/util/tagging.rb +9 -3
  789. data/lib/puppet/util/watcher/periodic_watcher.rb +2 -2
  790. data/lib/puppet/util/windows/access_control_entry.rb +2 -2
  791. data/lib/puppet/util/windows/access_control_list.rb +3 -3
  792. data/lib/puppet/util/windows/adsi.rb +222 -85
  793. data/lib/puppet/util/windows/api_types.rb +28 -19
  794. data/lib/puppet/util/windows/com.rb +7 -7
  795. data/lib/puppet/util/windows/error.rb +3 -3
  796. data/lib/puppet/util/windows/eventlog.rb +192 -0
  797. data/lib/puppet/util/windows/file.rb +115 -22
  798. data/lib/puppet/util/windows/principal.rb +191 -0
  799. data/lib/puppet/util/windows/process.rb +90 -13
  800. data/lib/puppet/util/windows/registry.rb +31 -25
  801. data/lib/puppet/util/windows/root_certs.rb +6 -6
  802. data/lib/puppet/util/windows/security.rb +52 -51
  803. data/lib/puppet/util/windows/security_descriptor.rb +1 -1
  804. data/lib/puppet/util/windows/sid.rb +89 -20
  805. data/lib/puppet/util/windows/taskscheduler.rb +154 -98
  806. data/lib/puppet/util/windows/user.rb +38 -20
  807. data/lib/puppet/util/windows.rb +7 -0
  808. data/lib/puppet/util/yaml.rb +15 -3
  809. data/lib/puppet/util.rb +259 -33
  810. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +1 -1
  811. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +1 -1
  812. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  813. data/lib/puppet/vendor/pathspec/LICENSE +2 -2
  814. data/lib/puppet/vendor/pathspec/README.md +1 -1
  815. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  816. data/lib/puppet/vendor/require_vendored.rb +0 -1
  817. data/lib/puppet/vendor/semantic/lib/semantic.rb +4 -6
  818. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  819. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  820. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/module_release.rb +17 -5
  821. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  822. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  823. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  824. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  825. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version.rb +203 -0
  826. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/version_range.rb +758 -0
  827. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +9 -0
  828. data/lib/puppet/vendor/semantic_puppet/locales/config.yaml +21 -0
  829. data/lib/puppet/version.rb +7 -3
  830. data/lib/puppet.rb +104 -6
  831. data/lib/puppet_x.rb +7 -1
  832. data/locales/config.yaml +29 -0
  833. data/locales/puppet.pot +7995 -0
  834. data/man/man5/puppet.conf.5 +61 -41
  835. data/man/man8/puppet-agent.8 +6 -3
  836. data/man/man8/puppet-apply.8 +6 -3
  837. data/man/man8/puppet-ca.8 +3 -3
  838. data/man/man8/puppet-catalog.8 +3 -3
  839. data/man/man8/puppet-cert.8 +3 -3
  840. data/man/man8/puppet-certificate.8 +3 -3
  841. data/man/man8/puppet-certificate_request.8 +3 -3
  842. data/man/man8/puppet-certificate_revocation_list.8 +3 -3
  843. data/man/man8/puppet-config.8 +4 -4
  844. data/man/man8/puppet-describe.8 +2 -2
  845. data/man/man8/puppet-device.8 +7 -4
  846. data/man/man8/puppet-doc.8 +2 -2
  847. data/man/man8/puppet-epp.8 +3 -3
  848. data/man/man8/puppet-facts.8 +3 -3
  849. data/man/man8/puppet-filebucket.8 +3 -3
  850. data/man/man8/puppet-help.8 +3 -3
  851. data/man/man8/puppet-inspect.8 +3 -3
  852. data/man/man8/puppet-key.8 +3 -3
  853. data/man/man8/puppet-man.8 +3 -3
  854. data/man/man8/puppet-master.8 +6 -3
  855. data/man/man8/puppet-module.8 +10 -10
  856. data/man/man8/puppet-node.8 +3 -3
  857. data/man/man8/puppet-parser.8 +3 -3
  858. data/man/man8/puppet-plugin.8 +3 -3
  859. data/man/man8/puppet-report.8 +3 -3
  860. data/man/man8/puppet-resource.8 +3 -3
  861. data/man/man8/puppet-status.8 +4 -4
  862. data/man/man8/puppet.8 +2 -2
  863. data/spec/fixtures/module.tar.gz +0 -0
  864. data/spec/fixtures/unit/application/environments/production/data/common.yaml +22 -0
  865. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  866. data/spec/fixtures/unit/application/environments/production/manifests/site.pp +1 -0
  867. data/spec/fixtures/unit/application/environments/puppet_func_provider/environment.conf +1 -0
  868. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/environment/data.pp +10 -0
  869. data/spec/fixtures/unit/application/environments/puppet_func_provider/manifests/site.pp +1 -0
  870. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  871. data/spec/fixtures/unit/data_providers/environments/{sample → hiera_bad_syntax_json}/environment.conf +1 -1
  872. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  873. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  874. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  875. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  876. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  877. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  878. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  879. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  880. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  881. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  882. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  883. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  884. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  885. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  886. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  887. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  888. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/third_utf8.json +3 -0
  889. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/utf8.yaml +3 -0
  890. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  891. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  892. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +22 -0
  893. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  894. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +48 -0
  895. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  896. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  897. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  898. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  899. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  900. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/common.yaml +4 -0
  901. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/data/specific.yaml +4 -0
  902. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  903. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/hiera.yaml +7 -0
  904. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  905. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  906. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +2 -0
  907. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  908. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server1.yaml +1 -0
  909. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/server2.yaml +1 -0
  910. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  911. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  912. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +20 -0
  913. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  914. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  915. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/common.yaml +4 -0
  916. data/spec/fixtures/unit/data_providers/environments/hiera_modules/data/specific.yaml +4 -0
  917. data/spec/fixtures/unit/data_providers/environments/hiera_modules/environment.conf +2 -0
  918. data/spec/fixtures/unit/data_providers/environments/hiera_modules/hiera.yaml +7 -0
  919. data/spec/fixtures/unit/data_providers/environments/hiera_modules/manifests/site.pp +1 -0
  920. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/data/common.yaml +6 -0
  921. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/hiera.yaml +5 -0
  922. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/manifests/init.pp +2 -0
  923. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/one/metadata.json +9 -0
  924. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +4 -0
  925. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/hiera.yaml +5 -0
  926. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/manifests/init.pp +3 -0
  927. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/metadata.json +9 -0
  928. data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +3 -1
  929. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +2 -1
  930. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +2 -1
  931. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/metadata.json +9 -0
  932. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/functions/data.pp +6 -0
  933. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/manifests/init.pp +9 -0
  934. data/spec/fixtures/unit/data_providers/environments/production/modules/xyz/metadata.json +9 -0
  935. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  936. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  937. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/abc/metadata.json +9 -0
  938. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +1 -0
  939. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/manifests/init.pp +2 -0
  940. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bad_data/metadata.json +9 -0
  941. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/bca/metadata.json +9 -0
  942. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/data/empty.json +0 -0
  943. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/hiera.yaml +5 -0
  944. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/manifests/init.pp +2 -0
  945. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_json/metadata.json +9 -0
  946. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/data/empty_key.json +1 -0
  947. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/hiera.yaml +5 -0
  948. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/manifests/init.pp +2 -0
  949. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_json/metadata.json +9 -0
  950. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/data/empty_key.yaml +1 -0
  951. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/hiera.yaml +5 -0
  952. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/manifests/init.pp +2 -0
  953. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_key_yaml/metadata.json +9 -0
  954. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/data/empty.yaml +2 -0
  955. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/hiera.yaml +5 -0
  956. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/manifests/init.pp +2 -0
  957. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/empty_yaml/metadata.json +9 -0
  958. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/data/first.json +4 -0
  959. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  960. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  961. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/hieraprovider/metadata.json +9 -0
  962. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  963. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/manifests/init.pp +3 -0
  964. data/spec/fixtures/unit/functions/lookup_fixture/environments/production/modules/meta/metadata.json +9 -0
  965. data/spec/fixtures/unit/module/trailing-comma.json +1 -1
  966. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  967. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/functions/usee_puppet.pp +3 -0
  968. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/functions/usee/usee_ruby.rb +6 -0
  969. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/lib/puppet/type/usee_type.rb +5 -0
  970. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/manifests/init.pp +8 -0
  971. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee/types/zero.pp +1 -0
  972. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/usee2/lib/puppet/functions/usee2/callee.rb +5 -0
  973. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet.pp +5 -0
  974. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_puppet_init.pp +5 -0
  975. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/functions/puppet_calling_ruby.pp +5 -0
  976. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/caller2.rb +5 -0
  977. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet.rb +5 -0
  978. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_puppet_init.rb +5 -0
  979. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/lib/puppet/functions/user/ruby_calling_ruby.rb +5 -0
  980. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/manifests/init.pp +87 -0
  981. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{user → modules/user}/metadata.json +2 -1
  982. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseeone.pp +1 -0
  983. data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/modules/user/types/withuseezero.pp +1 -0
  984. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcalled.pp +3 -0
  985. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller.pp +3 -0
  986. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/functions/puppetcaller4.pp +3 -0
  987. data/spec/fixtures/unit/pops/loaders/loaders/mix_4x_and_3x_functions/user/lib/puppet/functions/user/callingpuppet.rb +5 -0
  988. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/functions/hello.pp +3 -0
  989. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/manifests/init.pp +3 -0
  990. data/spec/fixtures/unit/pops/loaders/loaders/module_no_lib/modules/modulea/metadata.json +10 -0
  991. data/spec/fixtures/unit/pops/loaders/loaders/no_modules/manifests/site.pp +10 -0
  992. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/hello.pp +3 -0
  993. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/functions/subspace/hello.pp +3 -0
  994. data/spec/fixtures/unit/pops/loaders/loaders/single_module/modules/modulea/metadata.json +1 -10
  995. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  996. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +93 -85
  997. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +11 -7
  998. data/spec/fixtures/unit/provider/package/pkgng/pkg.info +8 -0
  999. data/spec/fixtures/unit/provider/package/pkgng/pkg.query +1 -0
  1000. data/spec/fixtures/unit/provider/package/pkgng/pkg.query_absent +1 -0
  1001. data/spec/fixtures/unit/provider/package/pkgng/pkg.version +3 -0
  1002. data/spec/fixtures/unit/provider/package/yum/yum-check-update-broken-notices.txt +187 -0
  1003. data/spec/fixtures/unit/provider/package/yum/yum-check-update-obsoletes.txt +195 -0
  1004. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  1005. data/spec/fixtures/unit/provider/package/zypper/zypper-list-updates-empty.out +3 -0
  1006. data/spec/fixtures/unit/provider/service/smf/svcs.out +4 -3
  1007. data/spec/fixtures/unit/provider/sshkey/parsed/sample_with_blank_lines +8 -0
  1008. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  1009. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  1010. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  1011. 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
  1012. 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
  1013. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_md5/should_update_if_content_differs_on_disk.yml +213 -0
  1014. 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
  1015. data/spec/fixtures/vcr/cassettes/Puppet_Type_File/when_sourcing/from_http/using_mtime/should_fetch_if_no_header_specified.yml +197 -0
  1016. 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
  1017. 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
  1018. data/spec/integration/agent/logging_spec.rb +15 -14
  1019. data/spec/integration/application/apply_spec.rb +442 -32
  1020. data/spec/integration/application/doc_spec.rb +0 -0
  1021. data/spec/integration/application/lookup_spec.rb +155 -0
  1022. data/spec/integration/configurer_spec.rb +1 -1
  1023. data/spec/integration/data_binding_spec.rb +195 -0
  1024. data/spec/integration/defaults_spec.rb +29 -4
  1025. data/spec/integration/directory_environments_spec.rb +16 -0
  1026. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  1027. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  1028. data/spec/integration/environments/settings_spec.rb +32 -4
  1029. data/spec/integration/faces/ca_spec.rb +0 -0
  1030. data/spec/integration/faces/config_spec.rb +80 -0
  1031. data/spec/integration/faces/documentation_spec.rb +2 -2
  1032. data/spec/integration/faces/plugin_spec.rb +0 -4
  1033. data/spec/integration/file_bucket/file_spec.rb +2 -2
  1034. data/spec/integration/file_serving/fileset_spec.rb +0 -0
  1035. data/spec/integration/file_serving/terminus_helper_spec.rb +0 -0
  1036. data/spec/integration/file_system/uniquefile_spec.rb +29 -0
  1037. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -0
  1038. data/spec/integration/indirector/direct_file_server_spec.rb +0 -0
  1039. data/spec/integration/indirector/facts/facter_spec.rb +97 -0
  1040. data/spec/integration/indirector/file_content/file_server_spec.rb +1 -0
  1041. data/spec/integration/indirector/file_metadata/file_server_spec.rb +1 -0
  1042. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  1043. data/spec/integration/module_tool/tar/mini_spec.rb +28 -0
  1044. data/spec/integration/network/formats_spec.rb +0 -0
  1045. data/spec/integration/network/http/api/indirected_routes_spec.rb +33 -0
  1046. data/spec/integration/node/environment_spec.rb +34 -0
  1047. data/spec/integration/node/facts_spec.rb +0 -0
  1048. data/spec/integration/node_spec.rb +0 -0
  1049. data/spec/integration/parser/catalog_spec.rb +15 -3
  1050. data/spec/integration/parser/class_spec.rb +6 -6
  1051. data/spec/integration/parser/collection_spec.rb +18 -0
  1052. data/spec/integration/parser/compiler_spec.rb +911 -658
  1053. data/spec/integration/parser/dynamic_scoping_spec.rb +66 -0
  1054. data/spec/integration/parser/parameter_defaults_spec.rb +358 -0
  1055. data/spec/integration/parser/pcore_resource_spec.rb +260 -0
  1056. data/spec/integration/parser/resource_expressions_spec.rb +10 -5
  1057. data/spec/integration/parser/scope_spec.rb +99 -11
  1058. data/spec/integration/parser/undef_param_spec.rb +9 -1
  1059. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  1060. data/spec/integration/provider/mount_spec.rb +23 -36
  1061. data/spec/integration/provider/service/init_spec.rb +0 -0
  1062. data/spec/integration/provider/service/windows_spec.rb +3 -2
  1063. data/spec/integration/provider/ssh_authorized_key_spec.rb +0 -0
  1064. data/spec/integration/provider/yumrepo_spec.rb +4 -1
  1065. data/spec/integration/reference/providers_spec.rb +0 -0
  1066. data/spec/integration/reports_spec.rb +0 -0
  1067. data/spec/integration/resource/catalog_spec.rb +1 -5
  1068. data/spec/integration/resource/type_collection_spec.rb +14 -0
  1069. data/spec/integration/ssl/autosign_spec.rb +18 -3
  1070. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  1071. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  1072. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  1073. data/spec/integration/ssl/host_spec.rb +0 -1
  1074. data/spec/integration/ssl/key_spec.rb +104 -0
  1075. data/spec/integration/test/test_helper_spec.rb +32 -0
  1076. data/spec/integration/transaction/report_spec.rb +683 -1
  1077. data/spec/integration/transaction_spec.rb +128 -4
  1078. data/spec/integration/type/exec_spec.rb +0 -0
  1079. data/spec/integration/type/file_spec.rb +582 -51
  1080. data/spec/integration/type/package_spec.rb +79 -2
  1081. data/spec/integration/type/tidy_spec.rb +21 -9
  1082. data/spec/integration/type/user_spec.rb +13 -6
  1083. data/spec/integration/type_spec.rb +0 -0
  1084. data/spec/integration/util/autoload_spec.rb +0 -0
  1085. data/spec/integration/util/execution_spec.rb +30 -0
  1086. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  1087. data/spec/integration/util/settings_spec.rb +26 -0
  1088. data/spec/integration/util/windows/adsi_spec.rb +99 -0
  1089. data/spec/integration/util/windows/principal_spec.rb +250 -0
  1090. data/spec/integration/util/windows/process_spec.rb +35 -2
  1091. data/spec/{unit → integration}/util/windows/registry_spec.rb +92 -2
  1092. data/spec/integration/util/windows/security_spec.rb +75 -21
  1093. data/spec/integration/util/windows/user_spec.rb +27 -5
  1094. data/spec/integration/util_spec.rb +49 -27
  1095. data/spec/lib/matchers/include_in_order.rb +2 -3
  1096. data/spec/lib/matchers/json.rb +3 -3
  1097. data/spec/lib/matchers/resource.rb +22 -1
  1098. data/spec/lib/puppet/face/1.0.0/huzzah.rb +1 -1
  1099. data/spec/lib/puppet/face/basetest.rb +1 -1
  1100. data/spec/lib/puppet/face/huzzah.rb +1 -1
  1101. data/spec/lib/puppet/face/version_matching.rb +1 -1
  1102. data/spec/lib/puppet/indirector_testing.rb +4 -0
  1103. data/spec/lib/puppet_spec/character_encoding.rb +12 -0
  1104. data/spec/lib/puppet_spec/compiler.rb +40 -4
  1105. data/spec/lib/puppet_spec/files.rb +16 -2
  1106. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  1107. data/spec/lib/puppet_spec/language.rb +3 -1
  1108. data/spec/lib/puppet_spec/matchers.rb +6 -4
  1109. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  1110. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  1111. data/spec/lib/puppet_spec/modules.rb +2 -2
  1112. data/spec/lib/puppet_spec/network.rb +22 -14
  1113. data/spec/lib/puppet_spec/pops.rb +13 -0
  1114. data/spec/lib/puppet_spec/unindent.rb +5 -0
  1115. data/spec/lib/puppet_spec/verbose.rb +0 -0
  1116. data/spec/shared_behaviours/all_parsedfile_providers.rb +0 -0
  1117. data/spec/shared_behaviours/file_server_terminus.rb +0 -0
  1118. data/spec/shared_behaviours/file_serving.rb +0 -0
  1119. data/spec/shared_behaviours/iterative_functions.rb +9 -9
  1120. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  1121. data/spec/shared_behaviours/path_parameters.rb +0 -0
  1122. data/spec/shared_behaviours/things_that_declare_options.rb +0 -0
  1123. data/spec/shared_contexts/types_setup.rb +143 -0
  1124. data/spec/shared_examples/rhel_package_provider.rb +356 -0
  1125. data/spec/spec_helper.rb +23 -13
  1126. data/spec/unit/agent/locker_spec.rb +4 -4
  1127. data/spec/unit/agent_spec.rb +23 -46
  1128. data/spec/unit/application/agent_spec.rb +22 -0
  1129. data/spec/unit/application/apply_spec.rb +59 -14
  1130. data/spec/unit/application/cert_spec.rb +20 -0
  1131. data/spec/unit/application/certificate_spec.rb +0 -0
  1132. data/spec/unit/application/config_spec.rb +0 -0
  1133. data/spec/unit/application/describe_spec.rb +19 -0
  1134. data/spec/unit/application/device_spec.rb +41 -2
  1135. data/spec/unit/application/doc_spec.rb +0 -0
  1136. data/spec/unit/application/face_base_spec.rb +22 -6
  1137. data/spec/unit/application/facts_spec.rb +0 -0
  1138. data/spec/unit/application/filebucket_spec.rb +88 -2
  1139. data/spec/unit/application/indirection_base_spec.rb +0 -0
  1140. data/spec/unit/application/lookup_spec.rb +532 -0
  1141. data/spec/unit/application/master_spec.rb +53 -11
  1142. data/spec/unit/application/resource_spec.rb +39 -1
  1143. data/spec/unit/application_spec.rb +3 -9
  1144. data/spec/unit/capability_spec.rb +412 -0
  1145. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  1146. data/spec/unit/configurer/downloader_spec.rb +5 -5
  1147. data/spec/unit/configurer/fact_handler_spec.rb +76 -20
  1148. data/spec/unit/configurer/plugin_handler_spec.rb +5 -8
  1149. data/spec/unit/configurer_spec.rb +372 -58
  1150. data/spec/unit/confine/exists_spec.rb +0 -0
  1151. data/spec/unit/confine/false_spec.rb +0 -0
  1152. data/spec/unit/confine/feature_spec.rb +0 -0
  1153. data/spec/unit/confine/true_spec.rb +0 -0
  1154. data/spec/unit/confine/variable_spec.rb +0 -0
  1155. data/spec/unit/confine_collection_spec.rb +0 -0
  1156. data/spec/unit/confine_spec.rb +0 -0
  1157. data/spec/unit/confiner_spec.rb +0 -0
  1158. data/spec/unit/context/trusted_information_spec.rb +24 -1
  1159. data/spec/unit/daemon_spec.rb +18 -8
  1160. data/spec/unit/data_providers/function_data_provider_spec.rb +30 -3
  1161. data/spec/unit/data_providers/hiera_data_provider_spec.rb +361 -0
  1162. data/spec/unit/defaults_spec.rb +34 -17
  1163. data/spec/unit/environments_spec.rb +26 -4
  1164. data/spec/unit/etc_spec.rb +442 -0
  1165. data/spec/unit/external/pson_spec.rb +0 -0
  1166. data/spec/unit/face/ca_spec.rb +10 -0
  1167. data/spec/unit/face/catalog_spec.rb +0 -0
  1168. data/spec/unit/face/certificate_request_spec.rb +10 -0
  1169. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  1170. data/spec/unit/face/certificate_spec.rb +10 -2
  1171. data/spec/unit/face/config_spec.rb +47 -0
  1172. data/spec/unit/face/epp_face_spec.rb +24 -5
  1173. data/spec/unit/face/facts_spec.rb +0 -0
  1174. data/spec/unit/face/generate_spec.rb +230 -0
  1175. data/spec/unit/face/help_spec.rb +70 -0
  1176. data/spec/unit/face/key_spec.rb +10 -0
  1177. data/spec/unit/face/module/list_spec.rb +60 -0
  1178. data/spec/unit/face/module/search_spec.rb +1 -1
  1179. data/spec/unit/face/node_spec.rb +1 -1
  1180. data/spec/unit/face/parser_spec.rb +49 -2
  1181. data/spec/unit/face/plugin_spec.rb +29 -4
  1182. data/spec/unit/face/status_spec.rb +10 -0
  1183. data/spec/unit/face_spec.rb +0 -0
  1184. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  1185. data/spec/unit/file_bucket/file_spec.rb +3 -3
  1186. data/spec/unit/file_serving/base_spec.rb +0 -0
  1187. data/spec/unit/file_serving/configuration/parser_spec.rb +25 -30
  1188. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  1189. data/spec/unit/file_serving/content_spec.rb +0 -0
  1190. data/spec/unit/file_serving/fileset_spec.rb +0 -0
  1191. data/spec/unit/file_serving/http_metadata_spec.rb +85 -0
  1192. data/spec/unit/file_serving/metadata_spec.rb +85 -9
  1193. data/spec/unit/file_serving/mount/file_spec.rb +0 -0
  1194. data/spec/unit/file_serving/mount/modules_spec.rb +0 -0
  1195. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +0 -0
  1196. data/spec/unit/file_serving/mount/plugins_spec.rb +0 -0
  1197. data/spec/unit/file_serving/mount_spec.rb +0 -0
  1198. data/spec/unit/file_serving/terminus_helper_spec.rb +2 -3
  1199. data/spec/unit/file_serving/terminus_selector_spec.rb +12 -2
  1200. data/spec/unit/file_system/uniquefile_spec.rb +20 -0
  1201. data/spec/unit/file_system_spec.rb +373 -6
  1202. data/spec/unit/forge/forge_spec.rb +112 -0
  1203. data/spec/unit/forge/repository_spec.rb +31 -4
  1204. data/spec/unit/functions/annotate_spec.rb +175 -0
  1205. data/spec/unit/functions/assert_type_spec.rb +48 -8
  1206. data/spec/unit/functions/binary_file_spec.rb +46 -0
  1207. data/spec/unit/functions/break_spec.rb +117 -0
  1208. data/spec/unit/functions/call_spec.rb +77 -0
  1209. data/spec/unit/{parser/functions → functions}/contain_spec.rb +69 -4
  1210. data/spec/unit/functions/defined_spec.rb +289 -0
  1211. data/spec/unit/functions/dig_spec.rb +58 -0
  1212. data/spec/unit/functions/epp_spec.rb +17 -9
  1213. data/spec/unit/functions/filter_spec.rb +18 -0
  1214. data/spec/unit/functions/find_file_spec.rb +69 -0
  1215. data/spec/unit/functions/hiera_spec.rb +451 -49
  1216. data/spec/unit/functions/include_spec.rb +175 -0
  1217. data/spec/unit/functions/inline_epp_spec.rb +4 -4
  1218. data/spec/unit/functions/lest_spec.rb +34 -0
  1219. data/spec/unit/functions/logging_spec.rb +54 -0
  1220. data/spec/unit/functions/lookup_fixture_spec.rb +688 -0
  1221. data/spec/unit/functions/lookup_spec.rb +3108 -264
  1222. data/spec/unit/functions/match_spec.rb +2 -2
  1223. data/spec/unit/functions/new_spec.rb +694 -0
  1224. data/spec/unit/functions/next_spec.rb +93 -0
  1225. data/spec/unit/functions/regsubst_spec.rb +30 -9
  1226. data/spec/unit/functions/require_spec.rb +83 -0
  1227. data/spec/unit/functions/return_spec.rb +105 -0
  1228. data/spec/unit/functions/reverse_each_spec.rb +108 -0
  1229. data/spec/unit/functions/scanf_spec.rb +1 -1
  1230. data/spec/unit/{parser/functions → functions}/shared.rb +15 -12
  1231. data/spec/unit/functions/split_spec.rb +11 -3
  1232. data/spec/unit/functions/step_spec.rb +113 -0
  1233. data/spec/unit/functions/strftime_spec.rb +152 -0
  1234. data/spec/unit/functions/then_spec.rb +40 -0
  1235. data/spec/unit/functions/type_spec.rb +35 -0
  1236. data/spec/unit/functions/unique_spec.rb +111 -0
  1237. data/spec/unit/functions/unwrap_spec.rb +29 -0
  1238. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  1239. data/spec/unit/functions4_spec.rb +352 -107
  1240. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  1241. data/spec/unit/graph/relationship_graph_spec.rb +0 -0
  1242. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  1243. data/spec/unit/graph/simple_graph_spec.rb +59 -56
  1244. data/spec/unit/hiera/scope_spec.rb +6 -3
  1245. data/spec/unit/hiera_puppet_spec.rb +49 -8
  1246. data/spec/unit/indirector/catalog/compiler_spec.rb +887 -83
  1247. data/spec/unit/indirector/catalog/json_spec.rb +50 -1
  1248. data/spec/unit/indirector/catalog/msgpack_spec.rb +0 -0
  1249. data/spec/unit/indirector/catalog/rest_spec.rb +0 -0
  1250. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  1251. data/spec/unit/indirector/catalog/yaml_spec.rb +0 -0
  1252. data/spec/unit/indirector/certificate/ca_spec.rb +0 -0
  1253. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  1254. data/spec/unit/indirector/certificate/file_spec.rb +0 -0
  1255. data/spec/unit/indirector/certificate/rest_spec.rb +0 -0
  1256. data/spec/unit/indirector/certificate_request/ca_spec.rb +0 -0
  1257. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  1258. data/spec/unit/indirector/certificate_request/file_spec.rb +0 -0
  1259. data/spec/unit/indirector/certificate_request/rest_spec.rb +0 -0
  1260. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +0 -0
  1261. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  1262. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +0 -0
  1263. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +0 -0
  1264. data/spec/unit/indirector/certificate_status/file_spec.rb +0 -0
  1265. data/spec/unit/indirector/certificate_status/rest_spec.rb +0 -0
  1266. data/spec/unit/indirector/code_spec.rb +0 -0
  1267. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  1268. data/spec/unit/indirector/direct_file_server_spec.rb +0 -0
  1269. data/spec/unit/indirector/envelope_spec.rb +0 -0
  1270. data/spec/unit/indirector/exec_spec.rb +0 -0
  1271. data/spec/unit/indirector/face_spec.rb +10 -2
  1272. data/spec/unit/indirector/facts/facter_spec.rb +6 -7
  1273. data/spec/unit/indirector/facts/network_device_spec.rb +0 -0
  1274. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  1275. data/spec/unit/indirector/facts/yaml_spec.rb +0 -0
  1276. data/spec/unit/indirector/file_bucket_file/file_spec.rb +86 -4
  1277. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +0 -0
  1278. data/spec/unit/indirector/file_content/file_server_spec.rb +0 -0
  1279. data/spec/unit/indirector/file_content/file_spec.rb +0 -0
  1280. data/spec/unit/indirector/file_content/rest_spec.rb +0 -0
  1281. data/spec/unit/indirector/file_metadata/file_server_spec.rb +0 -0
  1282. data/spec/unit/indirector/file_metadata/file_spec.rb +0 -0
  1283. data/spec/unit/indirector/file_metadata/rest_spec.rb +0 -0
  1284. data/spec/unit/indirector/file_server_spec.rb +17 -2
  1285. data/spec/unit/indirector/indirection_spec.rb +14 -38
  1286. data/spec/unit/indirector/json_spec.rb +27 -6
  1287. data/spec/unit/indirector/key/ca_spec.rb +0 -0
  1288. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  1289. data/spec/unit/indirector/key/file_spec.rb +1 -1
  1290. data/spec/unit/indirector/ldap_spec.rb +0 -0
  1291. data/spec/unit/indirector/memory_spec.rb +0 -0
  1292. data/spec/unit/indirector/msgpack_spec.rb +11 -1
  1293. data/spec/unit/indirector/node/exec_spec.rb +12 -12
  1294. data/spec/unit/indirector/node/ldap_spec.rb +29 -8
  1295. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  1296. data/spec/unit/indirector/node/msgpack_spec.rb +0 -0
  1297. data/spec/unit/indirector/node/plain_spec.rb +16 -6
  1298. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  1299. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  1300. data/spec/unit/indirector/node/write_only_yaml_spec.rb +12 -0
  1301. data/spec/unit/indirector/node/yaml_spec.rb +0 -0
  1302. data/spec/unit/indirector/plain_spec.rb +0 -0
  1303. data/spec/unit/indirector/report/msgpack_spec.rb +0 -0
  1304. data/spec/unit/indirector/report/processor_spec.rb +2 -2
  1305. data/spec/unit/indirector/report/rest_spec.rb +29 -3
  1306. data/spec/unit/indirector/report/yaml_spec.rb +0 -0
  1307. data/spec/unit/indirector/request_spec.rb +32 -12
  1308. data/spec/unit/indirector/resource/ral_spec.rb +0 -0
  1309. data/spec/unit/indirector/resource/store_configs_spec.rb +0 -0
  1310. data/spec/unit/indirector/rest_spec.rb +158 -18
  1311. data/spec/unit/indirector/ssl_file_spec.rb +4 -4
  1312. data/spec/unit/indirector/status/rest_spec.rb +0 -0
  1313. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  1314. data/spec/unit/indirector/terminus_spec.rb +0 -0
  1315. data/spec/unit/indirector/yaml_spec.rb +1 -1
  1316. data/spec/unit/indirector_spec.rb +0 -0
  1317. data/spec/unit/info_service_spec.rb +298 -0
  1318. data/spec/unit/interface/action_builder_spec.rb +0 -0
  1319. data/spec/unit/interface/action_manager_spec.rb +0 -0
  1320. data/spec/unit/interface/action_spec.rb +0 -0
  1321. data/spec/unit/interface/documentation_spec.rb +0 -0
  1322. data/spec/unit/interface/face_collection_spec.rb +7 -7
  1323. data/spec/unit/interface/option_builder_spec.rb +0 -0
  1324. data/spec/unit/interface/option_spec.rb +0 -0
  1325. data/spec/unit/interface_spec.rb +27 -0
  1326. data/spec/unit/man_spec.rb +1 -1
  1327. data/spec/unit/module_spec.rb +126 -74
  1328. data/spec/unit/module_tool/application_spec.rb +1 -1
  1329. data/spec/unit/module_tool/applications/builder_spec.rb +44 -9
  1330. data/spec/unit/module_tool/applications/installer_spec.rb +11 -3
  1331. data/spec/unit/module_tool/applications/unpacker_spec.rb +2 -1
  1332. data/spec/unit/module_tool/applications/upgrader_spec.rb +9 -2
  1333. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  1334. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  1335. data/spec/unit/module_tool/tar/mini_spec.rb +3 -3
  1336. data/spec/unit/module_tool/tar_spec.rb +16 -10
  1337. data/spec/unit/module_tool_spec.rb +3 -3
  1338. data/spec/unit/network/auth_config_parser_spec.rb +16 -0
  1339. data/spec/unit/network/authconfig_spec.rb +62 -32
  1340. data/spec/unit/network/authorization_spec.rb +30 -2
  1341. data/spec/unit/network/authstore_spec.rb +2 -2
  1342. data/spec/unit/network/format_handler_spec.rb +11 -11
  1343. data/spec/unit/network/format_spec.rb +9 -0
  1344. data/spec/unit/network/formats_spec.rb +322 -138
  1345. data/spec/unit/network/http/api/indirected_routes_spec.rb +125 -116
  1346. data/spec/unit/network/http/api/master/v3/environment_spec.rb +186 -0
  1347. data/spec/unit/network/http/api/master/v3_spec.rb +23 -5
  1348. data/spec/unit/network/http/api_spec.rb +1 -1
  1349. data/spec/unit/network/http/compression_spec.rb +132 -84
  1350. data/spec/unit/network/http/connection_spec.rb +25 -19
  1351. data/spec/unit/network/http/error_spec.rb +1 -1
  1352. data/spec/unit/network/http/factory_spec.rb +18 -0
  1353. data/spec/unit/network/http/handler_spec.rb +17 -18
  1354. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  1355. data/spec/unit/network/http/pool_spec.rb +30 -0
  1356. data/spec/unit/network/http/rack/rest_spec.rb +9 -2
  1357. data/spec/unit/network/http/rack_spec.rb +0 -0
  1358. data/spec/unit/network/http/request_spec.rb +110 -0
  1359. data/spec/unit/network/http/response_spec.rb +108 -0
  1360. data/spec/unit/network/http/session_spec.rb +0 -0
  1361. data/spec/unit/network/http/site_spec.rb +0 -0
  1362. data/spec/unit/network/http/webrick/rest_spec.rb +0 -0
  1363. data/spec/unit/network/http/webrick_spec.rb +1 -1
  1364. data/spec/unit/network/http_pool_spec.rb +0 -0
  1365. data/spec/unit/network/http_spec.rb +0 -0
  1366. data/spec/unit/network/resolver_spec.rb +0 -0
  1367. data/spec/unit/network/rights_spec.rb +4 -4
  1368. data/spec/unit/network/server_spec.rb +0 -0
  1369. data/spec/unit/node/environment_spec.rb +10 -0
  1370. data/spec/unit/node/facts_spec.rb +13 -13
  1371. data/spec/unit/node_spec.rb +74 -10
  1372. data/spec/unit/other/selinux_spec.rb +0 -0
  1373. data/spec/unit/parameter/path_spec.rb +0 -0
  1374. data/spec/unit/parameter/value_collection_spec.rb +0 -0
  1375. data/spec/unit/parameter/value_spec.rb +0 -0
  1376. data/spec/unit/parameter_spec.rb +84 -5
  1377. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  1378. data/spec/unit/parser/compiler_spec.rb +135 -34
  1379. data/spec/unit/parser/environment_compiler_spec.rb +686 -0
  1380. data/spec/unit/parser/files_spec.rb +0 -0
  1381. data/spec/unit/parser/functions/create_resources_spec.rb +132 -10
  1382. data/spec/unit/parser/functions/digest_spec.rb +0 -0
  1383. data/spec/unit/parser/functions/fail_spec.rb +0 -0
  1384. data/spec/unit/parser/functions/file_spec.rb +7 -1
  1385. data/spec/unit/parser/functions/fqdn_rand_spec.rb +6 -2
  1386. data/spec/unit/parser/functions/generate_spec.rb +3 -12
  1387. data/spec/unit/parser/functions/hiera_array_spec.rb +1 -1
  1388. data/spec/unit/parser/functions/hiera_hash_spec.rb +1 -1
  1389. data/spec/unit/parser/functions/hiera_include_spec.rb +1 -1
  1390. data/spec/unit/parser/functions/hiera_spec.rb +1 -1
  1391. data/spec/unit/parser/functions/inline_template_spec.rb +0 -0
  1392. data/spec/unit/parser/functions/lookup_spec.rb +1 -1
  1393. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  1394. data/spec/unit/parser/functions/regsubst_spec.rb +1 -1
  1395. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  1396. data/spec/unit/parser/functions/shellquote_spec.rb +0 -0
  1397. data/spec/unit/parser/functions/split_spec.rb +1 -1
  1398. data/spec/unit/parser/functions/sprintf_spec.rb +0 -0
  1399. data/spec/unit/parser/functions/tag_spec.rb +0 -0
  1400. data/spec/unit/parser/functions/template_spec.rb +1 -1
  1401. data/spec/unit/parser/functions/versioncmp_spec.rb +0 -0
  1402. data/spec/unit/parser/functions_spec.rb +0 -0
  1403. data/spec/unit/parser/relationship_spec.rb +0 -0
  1404. data/spec/unit/parser/resource/param_spec.rb +0 -0
  1405. data/spec/unit/parser/resource_spec.rb +115 -54
  1406. data/spec/unit/parser/scope_spec.rb +84 -86
  1407. data/spec/unit/parser/templatewrapper_spec.rb +1 -1
  1408. data/spec/unit/parser/type_loader_spec.rb +0 -0
  1409. data/spec/unit/pops/benchmark_spec.rb +8 -26
  1410. data/spec/unit/pops/containment_spec.rb +0 -26
  1411. data/spec/unit/pops/evaluator/access_ops_spec.rb +214 -99
  1412. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +223 -0
  1413. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +5 -6
  1414. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +29 -26
  1415. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +218 -47
  1416. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +29 -25
  1417. data/spec/unit/pops/evaluator/json_strict_literal_evaluator_spec.rb +63 -0
  1418. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  1419. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +168 -0
  1420. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +10 -10
  1421. data/spec/unit/pops/evaluator/variables_spec.rb +2 -2
  1422. data/spec/unit/pops/factory_rspec_helper.rb +0 -4
  1423. data/spec/unit/pops/factory_spec.rb +83 -83
  1424. data/spec/unit/pops/issues_spec.rb +16 -16
  1425. data/spec/unit/pops/label_provider_spec.rb +5 -1
  1426. data/spec/unit/pops/loaders/dependency_loader_spec.rb +66 -1
  1427. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  1428. data/spec/unit/pops/loaders/loader_paths_spec.rb +1 -1
  1429. data/spec/unit/pops/loaders/loaders_spec.rb +541 -57
  1430. data/spec/unit/pops/loaders/module_loaders_spec.rb +63 -2
  1431. data/spec/unit/pops/loaders/static_loader_spec.rb +80 -19
  1432. data/spec/unit/pops/lookup/context_spec.rb +334 -0
  1433. data/spec/unit/pops/lookup/interpolation_spec.rb +373 -0
  1434. data/spec/unit/pops/lookup/lookup_spec.rb +294 -0
  1435. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  1436. data/spec/unit/pops/migration_spec.rb +53 -0
  1437. data/spec/unit/pops/model/model_spec.rb +10 -10
  1438. data/spec/unit/pops/parser/epp_parser_spec.rb +1 -1
  1439. data/spec/unit/pops/parser/lexer2_spec.rb +380 -10
  1440. data/spec/unit/pops/parser/locator_spec.rb +24 -0
  1441. data/spec/unit/pops/parser/parse_application_spec.rb +32 -0
  1442. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +35 -4
  1443. data/spec/unit/pops/parser/parse_calls_spec.rb +25 -0
  1444. data/spec/unit/pops/parser/parse_capabilities_spec.rb +37 -0
  1445. data/spec/unit/pops/parser/parse_containers_spec.rb +17 -19
  1446. data/spec/unit/pops/parser/parse_functions_spec.rb +19 -0
  1447. data/spec/unit/pops/parser/parse_heredoc_spec.rb +26 -0
  1448. data/spec/unit/pops/parser/parse_lambda_spec.rb +19 -0
  1449. data/spec/unit/pops/parser/parse_site_spec.rb +48 -0
  1450. data/spec/unit/pops/parser/parser_rspec_helper.rb +6 -0
  1451. data/spec/unit/pops/parser/parser_spec.rb +32 -6
  1452. data/spec/unit/pops/puppet_stack_spec.rb +79 -0
  1453. data/spec/unit/pops/resource/resource_type_impl_spec.rb +109 -0
  1454. data/spec/unit/pops/serialization/packer_spec.rb +154 -0
  1455. data/spec/unit/pops/serialization/serialization_spec.rb +426 -0
  1456. data/spec/unit/pops/serialization/to_from_hr_spec.rb +494 -0
  1457. data/spec/unit/pops/time/timespan_spec.rb +121 -0
  1458. data/spec/unit/pops/time/timestamp_spec.rb +13 -0
  1459. data/spec/unit/pops/types/enumeration_spec.rb +13 -12
  1460. data/spec/unit/pops/types/iterable_spec.rb +262 -0
  1461. data/spec/unit/pops/types/p_binary_type_spec.rb +243 -0
  1462. data/spec/unit/pops/types/p_object_type_spec.rb +1253 -0
  1463. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +322 -0
  1464. data/spec/unit/pops/types/p_sensitive_type_spec.rb +169 -0
  1465. data/spec/unit/pops/types/p_timespan_type_spec.rb +273 -0
  1466. data/spec/unit/pops/types/p_timestamp_type_spec.rb +311 -0
  1467. data/spec/unit/pops/types/p_type_set_type_spec.rb +445 -0
  1468. data/spec/unit/pops/types/recursion_guard_spec.rb +93 -0
  1469. data/spec/unit/pops/types/ruby_generator_spec.rb +662 -0
  1470. data/spec/unit/pops/types/string_converter_spec.rb +1132 -0
  1471. data/spec/unit/pops/types/type_acceptor_spec.rb +106 -0
  1472. data/spec/unit/pops/types/type_asserter_spec.rb +43 -0
  1473. data/spec/unit/pops/types/type_calculator_spec.rb +1249 -901
  1474. data/spec/unit/pops/types/type_factory_spec.rb +137 -96
  1475. data/spec/unit/pops/types/type_formatter_spec.rb +409 -0
  1476. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +228 -0
  1477. data/spec/unit/pops/types/type_parser_spec.rb +207 -40
  1478. data/spec/unit/pops/types/types_spec.rb +650 -0
  1479. data/spec/unit/pops/validation_spec.rb +66 -0
  1480. data/spec/unit/pops/validator/validator_spec.rb +395 -21
  1481. data/spec/unit/pops/visitor_spec.rb +1 -1
  1482. data/spec/unit/property/ensure_spec.rb +0 -0
  1483. data/spec/unit/property/keyvalue_spec.rb +0 -0
  1484. data/spec/unit/property/list_spec.rb +2 -2
  1485. data/spec/unit/property/ordered_list_spec.rb +0 -0
  1486. data/spec/unit/property_spec.rb +49 -12
  1487. data/spec/unit/provider/augeas/augeas_spec.rb +60 -1
  1488. data/spec/unit/provider/cisco_spec.rb +0 -0
  1489. data/spec/unit/provider/command_spec.rb +0 -0
  1490. data/spec/unit/provider/cron/crontab_spec.rb +0 -0
  1491. data/spec/unit/provider/cron/parsed_spec.rb +1 -0
  1492. data/spec/unit/provider/exec/posix_spec.rb +0 -0
  1493. data/spec/unit/provider/exec/shell_spec.rb +0 -0
  1494. data/spec/unit/provider/exec/windows_spec.rb +0 -0
  1495. data/spec/unit/provider/exec_spec.rb +0 -0
  1496. data/spec/unit/provider/file/posix_spec.rb +0 -0
  1497. data/spec/unit/provider/file/windows_spec.rb +0 -0
  1498. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  1499. data/spec/unit/provider/group/groupadd_spec.rb +0 -0
  1500. data/spec/unit/provider/group/ldap_spec.rb +0 -0
  1501. data/spec/unit/provider/group/pw_spec.rb +0 -0
  1502. data/spec/unit/provider/group/windows_adsi_spec.rb +88 -18
  1503. data/spec/unit/provider/host/parsed_spec.rb +0 -0
  1504. data/spec/unit/provider/interface/cisco_spec.rb +0 -0
  1505. data/spec/unit/provider/ldap_spec.rb +0 -0
  1506. data/spec/unit/provider/macauthorization_spec.rb +5 -2
  1507. data/spec/unit/provider/mcx/mcxcontent_spec.rb +0 -0
  1508. data/spec/unit/provider/mount/parsed_spec.rb +31 -5
  1509. data/spec/unit/provider/mount_spec.rb +0 -0
  1510. data/spec/unit/provider/naginator_spec.rb +0 -0
  1511. data/spec/unit/provider/nameservice/directoryservice_spec.rb +16 -19
  1512. data/spec/unit/provider/nameservice_spec.rb +167 -15
  1513. data/spec/unit/provider/network_device_spec.rb +0 -0
  1514. data/spec/unit/provider/package/aix_spec.rb +0 -0
  1515. data/spec/unit/provider/package/appdmg_spec.rb +3 -3
  1516. data/spec/unit/provider/package/apt_spec.rb +5 -0
  1517. data/spec/unit/provider/package/aptitude_spec.rb +0 -0
  1518. data/spec/unit/provider/package/aptrpm_spec.rb +3 -3
  1519. data/spec/unit/provider/package/base_spec.rb +18 -0
  1520. data/spec/unit/provider/package/dnf_spec.rb +30 -0
  1521. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  1522. data/spec/unit/provider/package/freebsd_spec.rb +0 -0
  1523. data/spec/unit/provider/package/gem_spec.rb +77 -0
  1524. data/spec/unit/provider/package/hpux_spec.rb +0 -0
  1525. data/spec/unit/provider/package/macports_spec.rb +0 -0
  1526. data/spec/unit/provider/package/nim_spec.rb +6 -6
  1527. data/spec/unit/provider/package/openbsd_spec.rb +0 -0
  1528. data/spec/unit/provider/package/opkg_spec.rb +0 -0
  1529. data/spec/unit/provider/package/pacman_spec.rb +55 -0
  1530. data/spec/unit/provider/package/pip3_spec.rb +22 -0
  1531. data/spec/unit/provider/package/pip_spec.rb +173 -46
  1532. data/spec/unit/provider/package/pkg_spec.rb +139 -99
  1533. data/spec/unit/provider/package/pkgdmg_spec.rb +32 -8
  1534. data/spec/unit/provider/package/pkgin_spec.rb +23 -13
  1535. data/spec/unit/provider/package/pkgng_spec.rb +186 -0
  1536. data/spec/unit/provider/package/pkgutil_spec.rb +0 -0
  1537. data/spec/unit/provider/package/portage_spec.rb +150 -8
  1538. data/spec/unit/provider/package/puppet_gem_spec.rb +0 -0
  1539. data/spec/unit/provider/package/rpm_spec.rb +183 -12
  1540. data/spec/unit/provider/package/sun_spec.rb +0 -0
  1541. data/spec/unit/provider/package/tdnf_spec.rb +18 -0
  1542. data/spec/unit/provider/package/windows/exe_package_spec.rb +0 -1
  1543. data/spec/unit/provider/package/windows/msi_package_spec.rb +0 -1
  1544. data/spec/unit/provider/package/windows/package_spec.rb +45 -1
  1545. data/spec/unit/provider/package/windows_spec.rb +8 -2
  1546. data/spec/unit/provider/package/yum_spec.rb +29 -466
  1547. data/spec/unit/provider/package/zypper_spec.rb +64 -19
  1548. data/spec/unit/provider/parsedfile_spec.rb +0 -0
  1549. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +523 -70
  1550. data/spec/unit/provider/selboolean_spec.rb +0 -0
  1551. data/spec/unit/provider/selmodule_spec.rb +0 -0
  1552. data/spec/unit/provider/service/base_spec.rb +44 -27
  1553. data/spec/unit/provider/service/bsd_spec.rb +130 -0
  1554. data/spec/unit/provider/service/daemontools_spec.rb +0 -0
  1555. data/spec/unit/provider/service/debian_spec.rb +38 -0
  1556. data/spec/unit/provider/service/freebsd_spec.rb +17 -0
  1557. data/spec/unit/provider/service/gentoo_spec.rb +8 -0
  1558. data/spec/unit/provider/service/init_spec.rb +42 -1
  1559. data/spec/unit/provider/service/launchd_spec.rb +124 -25
  1560. data/spec/unit/provider/service/openbsd_spec.rb +1 -0
  1561. data/spec/unit/provider/service/openrc_spec.rb +7 -0
  1562. data/spec/unit/provider/service/openwrt_spec.rb +0 -0
  1563. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  1564. data/spec/unit/provider/service/redhat_spec.rb +9 -1
  1565. data/spec/unit/provider/service/runit_spec.rb +0 -0
  1566. data/spec/unit/provider/service/smf_spec.rb +77 -13
  1567. data/spec/unit/provider/service/src_spec.rb +31 -4
  1568. data/spec/unit/provider/service/systemd_spec.rb +228 -39
  1569. data/spec/unit/provider/service/upstart_spec.rb +64 -0
  1570. data/spec/unit/provider/service/windows_spec.rb +0 -0
  1571. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -1
  1572. data/spec/unit/provider/sshkey/parsed_spec.rb +42 -18
  1573. data/spec/unit/provider/user/aix_spec.rb +7 -0
  1574. data/spec/unit/provider/user/directoryservice_spec.rb +171 -90
  1575. data/spec/unit/provider/user/hpux_spec.rb +0 -0
  1576. data/spec/unit/provider/user/ldap_spec.rb +0 -0
  1577. data/spec/unit/provider/user/openbsd_spec.rb +0 -0
  1578. data/spec/unit/provider/user/pw_spec.rb +0 -0
  1579. data/spec/unit/provider/user/user_role_add_spec.rb +0 -0
  1580. data/spec/unit/provider/user/useradd_spec.rb +14 -0
  1581. data/spec/unit/provider/user/windows_adsi_spec.rb +160 -7
  1582. data/spec/unit/provider/vlan/cisco_spec.rb +0 -0
  1583. data/spec/unit/provider/yumrepo/inifile_spec.rb +16 -0
  1584. data/spec/unit/provider/zfs/zfs_spec.rb +0 -0
  1585. data/spec/unit/provider/zone/solaris_spec.rb +64 -12
  1586. data/spec/unit/provider/zpool/zpool_spec.rb +0 -0
  1587. data/spec/unit/provider_spec.rb +0 -0
  1588. data/spec/unit/puppet_spec.rb +16 -3
  1589. data/spec/unit/relationship_spec.rb +15 -36
  1590. data/spec/unit/reports/http_spec.rb +11 -8
  1591. data/spec/unit/reports/store_spec.rb +0 -0
  1592. data/spec/unit/reports_spec.rb +10 -0
  1593. data/spec/unit/resource/capability_finder_spec.rb +147 -0
  1594. data/spec/unit/resource/catalog_spec.rb +294 -41
  1595. data/spec/unit/resource/status_spec.rb +114 -103
  1596. data/spec/unit/resource/type_collection_spec.rb +28 -7
  1597. data/spec/unit/resource/type_spec.rb +172 -82
  1598. data/spec/unit/resource_spec.rb +161 -76
  1599. data/spec/unit/settings/directory_setting_spec.rb +0 -0
  1600. data/spec/unit/settings/duration_setting_spec.rb +0 -0
  1601. data/spec/unit/settings/environment_conf_spec.rb +18 -1
  1602. data/spec/unit/settings/file_setting_spec.rb +37 -0
  1603. data/spec/unit/settings/ini_file_spec.rb +58 -1
  1604. data/spec/unit/settings/path_setting_spec.rb +0 -0
  1605. data/spec/unit/settings/priority_setting_spec.rb +0 -0
  1606. data/spec/unit/settings_spec.rb +120 -5
  1607. data/spec/unit/ssl/base_spec.rb +9 -0
  1608. data/spec/unit/ssl/certificate_authority/interface_spec.rb +180 -13
  1609. data/spec/unit/ssl/certificate_authority_spec.rb +82 -28
  1610. data/spec/unit/ssl/certificate_factory_spec.rb +2 -2
  1611. data/spec/unit/ssl/certificate_request_attributes_spec.rb +6 -0
  1612. data/spec/unit/ssl/certificate_request_spec.rb +4 -5
  1613. data/spec/unit/ssl/certificate_revocation_list_spec.rb +3 -3
  1614. data/spec/unit/ssl/certificate_spec.rb +1 -1
  1615. data/spec/unit/ssl/configuration_spec.rb +11 -2
  1616. data/spec/unit/ssl/host_spec.rb +37 -37
  1617. data/spec/unit/ssl/inventory_spec.rb +27 -3
  1618. data/spec/unit/ssl/key_spec.rb +7 -7
  1619. data/spec/unit/ssl/oids_spec.rb +24 -13
  1620. data/spec/unit/status_spec.rb +7 -7
  1621. data/spec/unit/transaction/additional_resource_generator_spec.rb +160 -31
  1622. data/spec/unit/transaction/event_manager_spec.rb +0 -0
  1623. data/spec/unit/transaction/event_spec.rb +18 -13
  1624. data/spec/unit/transaction/persistence_spec.rb +178 -0
  1625. data/spec/unit/transaction/report_spec.rb +214 -40
  1626. data/spec/unit/transaction/resource_harness_spec.rb +84 -40
  1627. data/spec/unit/transaction_spec.rb +102 -7
  1628. data/spec/unit/type/augeas_spec.rb +0 -0
  1629. data/spec/unit/type/component_spec.rb +0 -0
  1630. data/spec/unit/type/computer_spec.rb +0 -0
  1631. data/spec/unit/type/cron_spec.rb +0 -0
  1632. data/spec/unit/type/exec_spec.rb +57 -12
  1633. data/spec/unit/type/file/checksum_spec.rb +6 -0
  1634. data/spec/unit/type/file/checksum_value_spec.rb +286 -0
  1635. data/spec/unit/type/file/content_spec.rb +59 -208
  1636. data/spec/unit/type/file/ctime_spec.rb +0 -0
  1637. data/spec/unit/type/file/ensure_spec.rb +0 -0
  1638. data/spec/unit/type/file/group_spec.rb +2 -2
  1639. data/spec/unit/type/file/mode_spec.rb +9 -9
  1640. data/spec/unit/type/file/mtime_spec.rb +0 -0
  1641. data/spec/unit/type/file/owner_spec.rb +2 -2
  1642. data/spec/unit/type/file/selinux_spec.rb +2 -0
  1643. data/spec/unit/type/file/source_spec.rb +224 -119
  1644. data/spec/unit/type/file/type_spec.rb +0 -0
  1645. data/spec/unit/type/file_spec.rb +211 -35
  1646. data/spec/unit/type/filebucket_spec.rb +0 -0
  1647. data/spec/unit/type/group_spec.rb +0 -0
  1648. data/spec/unit/type/host_spec.rb +4 -4
  1649. data/spec/unit/type/interface_spec.rb +32 -0
  1650. data/spec/unit/type/k5login_spec.rb +0 -0
  1651. data/spec/unit/type/macauthorization_spec.rb +4 -1
  1652. data/spec/unit/type/mailalias_spec.rb +0 -0
  1653. data/spec/unit/type/maillist_spec.rb +0 -0
  1654. data/spec/unit/type/mcx_spec.rb +0 -0
  1655. data/spec/unit/type/mount_spec.rb +50 -8
  1656. data/spec/unit/type/nagios_spec.rb +0 -0
  1657. data/spec/unit/type/noop_metaparam_spec.rb +0 -0
  1658. data/spec/unit/type/package/package_settings_spec.rb +0 -0
  1659. data/spec/unit/type/package_spec.rb +1 -0
  1660. data/spec/unit/type/resources_spec.rb +0 -0
  1661. data/spec/unit/type/schedule_spec.rb +0 -0
  1662. data/spec/unit/type/selboolean_spec.rb +0 -0
  1663. data/spec/unit/type/selmodule_spec.rb +0 -0
  1664. data/spec/unit/type/service_spec.rb +21 -0
  1665. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  1666. data/spec/unit/type/sshkey_spec.rb +0 -0
  1667. data/spec/unit/type/stage_spec.rb +0 -0
  1668. data/spec/unit/type/tidy_spec.rb +4 -4
  1669. data/spec/unit/type/user_spec.rb +38 -7
  1670. data/spec/unit/type/vlan_spec.rb +1 -1
  1671. data/spec/unit/type/whit_spec.rb +0 -0
  1672. data/spec/unit/type/yumrepo_spec.rb +3 -7
  1673. data/spec/unit/type/zfs_spec.rb +0 -0
  1674. data/spec/unit/type/zone_spec.rb +0 -0
  1675. data/spec/unit/type/zpool_spec.rb +0 -0
  1676. data/spec/unit/type_spec.rb +119 -1
  1677. data/spec/unit/util/at_fork_spec.rb +150 -0
  1678. data/spec/unit/util/autoload_spec.rb +0 -0
  1679. data/spec/unit/util/backups_spec.rb +0 -0
  1680. data/spec/unit/util/character_encoding_spec.rb +229 -0
  1681. data/spec/unit/util/checksums_spec.rb +0 -0
  1682. data/spec/unit/util/colors_spec.rb +0 -0
  1683. data/spec/unit/util/command_line_spec.rb +11 -0
  1684. data/spec/unit/util/constant_inflector_spec.rb +0 -0
  1685. data/spec/unit/util/diff_spec.rb +0 -0
  1686. data/spec/unit/util/errors_spec.rb +0 -0
  1687. data/spec/unit/util/execution_spec.rb +44 -3
  1688. data/spec/unit/util/execution_stub_spec.rb +0 -0
  1689. data/spec/unit/util/feature_spec.rb +1 -1
  1690. data/spec/unit/util/filetype_spec.rb +4 -4
  1691. data/spec/unit/util/http_proxy_spec.rb +91 -0
  1692. data/spec/unit/util/ldap/connection_spec.rb +0 -0
  1693. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  1694. data/spec/unit/util/ldap/manager_spec.rb +0 -0
  1695. data/spec/unit/util/log/destinations_spec.rb +5 -8
  1696. data/spec/unit/util/log_spec.rb +187 -18
  1697. data/spec/unit/util/logging_spec.rb +69 -0
  1698. data/spec/unit/util/metric_spec.rb +9 -2
  1699. data/spec/unit/util/monkey_patches_spec.rb +37 -127
  1700. data/spec/unit/util/multi_match_spec.rb +39 -0
  1701. data/spec/unit/util/nagios_maker_spec.rb +0 -0
  1702. data/spec/unit/util/network_device/cisco/device_spec.rb +253 -216
  1703. data/spec/unit/util/network_device/cisco/facts_spec.rb +0 -0
  1704. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  1705. data/spec/unit/util/network_device/config_spec.rb +0 -0
  1706. data/spec/unit/util/network_device/ipcalc_spec.rb +0 -0
  1707. data/spec/unit/util/network_device/transport/base_spec.rb +0 -0
  1708. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  1709. data/spec/unit/util/network_device/transport/telnet_spec.rb +60 -58
  1710. data/spec/unit/util/network_device_spec.rb +1 -1
  1711. data/spec/unit/util/package_spec.rb +0 -0
  1712. data/spec/unit/util/plist_spec.rb +135 -0
  1713. data/spec/unit/util/posix_spec.rb +0 -0
  1714. data/spec/unit/util/rdoc_spec.rb +0 -0
  1715. data/spec/unit/util/resource_template_spec.rb +2 -2
  1716. data/spec/unit/util/retry_action_spec.rb +0 -0
  1717. data/spec/unit/util/run_mode_spec.rb +44 -13
  1718. data/spec/unit/util/selinux_spec.rb +0 -0
  1719. data/spec/unit/util/splayer_spec.rb +45 -0
  1720. data/spec/unit/util/storage_spec.rb +8 -1
  1721. data/spec/unit/util/suidmanager_spec.rb +0 -0
  1722. data/spec/unit/util/symbolic_file_mode_spec.rb +0 -0
  1723. data/spec/unit/util/tag_set_spec.rb +2 -2
  1724. data/spec/unit/util/tagging_spec.rb +59 -0
  1725. data/spec/unit/util/user_attr_spec.rb +0 -0
  1726. data/spec/unit/util/warnings_spec.rb +0 -0
  1727. data/spec/unit/util/windows/adsi_spec.rb +196 -60
  1728. data/spec/unit/util/windows/api_types_spec.rb +42 -0
  1729. data/spec/unit/util/windows/eventlog_spec.rb +123 -0
  1730. data/spec/unit/util/windows/file_spec.rb +89 -0
  1731. data/spec/unit/util/windows/root_certs_spec.rb +0 -0
  1732. data/spec/unit/util/windows/security_descriptor_spec.rb +3 -3
  1733. data/spec/unit/util/windows/sid_spec.rb +76 -24
  1734. data/spec/unit/util/yaml_spec.rb +13 -1
  1735. data/spec/unit/util_spec.rb +456 -17
  1736. data/spec/unit/version_spec.rb +19 -0
  1737. data/spec/watchr.rb +0 -0
  1738. data/tasks/benchmark.rake +3 -3
  1739. data/tasks/cfpropertylist.rake +15 -0
  1740. data/tasks/generate_ast_model.rake +78 -0
  1741. metadata +3474 -3068
  1742. checksums.yaml +0 -7
  1743. data/bin/extlookup2hiera +0 -56
  1744. data/ext/emacs/puppet-mode-init.el +0 -6
  1745. data/ext/emacs/puppet-mode.el +0 -433
  1746. data/ext/puppet-nm-dispatcher +0 -13
  1747. data/ext/puppetlisten/puppetlisten.rb +0 -77
  1748. data/ext/puppetlisten/puppetrun.rb +0 -38
  1749. data/ext/systemd/puppetmaster.service +0 -11
  1750. data/ext/vim/README +0 -3
  1751. data/ext/vim/ftdetect/puppet.vim +0 -2
  1752. data/ext/vim/ftplugin/puppet.vim +0 -94
  1753. data/ext/vim/indent/puppet.vim +0 -76
  1754. data/ext/vim/syntax/puppet.vim +0 -115
  1755. data/lib/puppet/application/file.rb +0 -4
  1756. data/lib/puppet/application/inspect.rb +0 -179
  1757. data/lib/puppet/application/resource_type.rb +0 -7
  1758. data/lib/puppet/data_providers/data_adapter.rb +0 -91
  1759. data/lib/puppet/data_providers/data_function_support.rb +0 -45
  1760. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -28
  1761. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -39
  1762. data/lib/puppet/data_providers.rb +0 -31
  1763. data/lib/puppet/face/file/download.rb +0 -56
  1764. data/lib/puppet/face/file/store.rb +0 -21
  1765. data/lib/puppet/face/file.rb +0 -47
  1766. data/lib/puppet/face/resource_type.rb +0 -84
  1767. data/lib/puppet/feature/cfacter.rb +0 -14
  1768. data/lib/puppet/feature/external_facts.rb +0 -5
  1769. data/lib/puppet/indirector/catalog/static_compiler.rb +0 -213
  1770. data/lib/puppet/indirector/resource_type/parser.rb +0 -101
  1771. data/lib/puppet/indirector/resource_type/rest.rb +0 -7
  1772. data/lib/puppet/indirector/resource_type.rb +0 -5
  1773. data/lib/puppet/parser/yaml_trimmer.rb +0 -7
  1774. data/lib/puppet/plugins/binding_schemes.rb +0 -140
  1775. data/lib/puppet/plugins/data_providers.rb +0 -90
  1776. data/lib/puppet/pops/binder/binder.rb +0 -394
  1777. data/lib/puppet/pops/binder/binder_issues.rb +0 -122
  1778. data/lib/puppet/pops/binder/bindings_checker.rb +0 -197
  1779. data/lib/puppet/pops/binder/bindings_composer.rb +0 -177
  1780. data/lib/puppet/pops/binder/bindings_factory.rb +0 -809
  1781. data/lib/puppet/pops/binder/bindings_label_provider.rb +0 -43
  1782. data/lib/puppet/pops/binder/bindings_loader.rb +0 -83
  1783. data/lib/puppet/pops/binder/bindings_model.rb +0 -68
  1784. data/lib/puppet/pops/binder/bindings_model_dumper.rb +0 -215
  1785. data/lib/puppet/pops/binder/bindings_model_meta.rb +0 -215
  1786. data/lib/puppet/pops/binder/bindings_validator_factory.rb +0 -28
  1787. data/lib/puppet/pops/binder/config/binder_config.rb +0 -107
  1788. data/lib/puppet/pops/binder/config/binder_config_checker.rb +0 -142
  1789. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +0 -32
  1790. data/lib/puppet/pops/binder/config/issues.rb +0 -90
  1791. data/lib/puppet/pops/binder/injector.rb +0 -766
  1792. data/lib/puppet/pops/binder/injector_entry.rb +0 -57
  1793. data/lib/puppet/pops/binder/key_factory.rb +0 -67
  1794. data/lib/puppet/pops/binder/producers.rb +0 -826
  1795. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +0 -34
  1796. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +0 -84
  1797. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +0 -53
  1798. data/lib/puppet/pops/binder/system_bindings.rb +0 -60
  1799. data/lib/puppet/pops/containment.rb +0 -104
  1800. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  1801. data/lib/puppet/pops/model/model.rb +0 -114
  1802. data/lib/puppet/pops/model/model_meta.rb +0 -582
  1803. data/lib/puppet/pops/types/types_meta.rb +0 -223
  1804. data/lib/puppet/resource/type_collection_helper.rb +0 -7
  1805. data/lib/puppet/vendor/load_plist.rb +0 -1
  1806. data/lib/puppet/vendor/load_rgen.rb +0 -2
  1807. data/lib/puppet/vendor/plist/CHANGELOG +0 -82
  1808. data/lib/puppet/vendor/plist/MIT-LICENSE +0 -21
  1809. data/lib/puppet/vendor/plist/PUPPET_README.md +0 -6
  1810. data/lib/puppet/vendor/plist/README +0 -36
  1811. data/lib/puppet/vendor/plist/Rakefile +0 -144
  1812. data/lib/puppet/vendor/plist/docs/USAGE +0 -104
  1813. data/lib/puppet/vendor/plist/docs/jamis-template.rb +0 -591
  1814. data/lib/puppet/vendor/plist/lib/plist/generator.rb +0 -224
  1815. data/lib/puppet/vendor/plist/lib/plist/parser.rb +0 -225
  1816. data/lib/puppet/vendor/plist/lib/plist.rb +0 -22
  1817. data/lib/puppet/vendor/plist/test/assets/AlbumData.xml +0 -203
  1818. data/lib/puppet/vendor/plist/test/assets/Cookies.plist +0 -104
  1819. data/lib/puppet/vendor/plist/test/assets/commented.plist +0 -9
  1820. data/lib/puppet/vendor/plist/test/assets/example_data.bin +0 -0
  1821. data/lib/puppet/vendor/plist/test/assets/example_data.jpg +0 -0
  1822. data/lib/puppet/vendor/plist/test/assets/example_data.plist +0 -259
  1823. data/lib/puppet/vendor/plist/test/assets/test_data_elements.plist +0 -24
  1824. data/lib/puppet/vendor/plist/test/assets/test_empty_key.plist +0 -13
  1825. data/lib/puppet/vendor/plist/test/test_data_elements.rb +0 -115
  1826. data/lib/puppet/vendor/plist/test/test_generator.rb +0 -59
  1827. data/lib/puppet/vendor/plist/test/test_generator_basic_types.rb +0 -58
  1828. data/lib/puppet/vendor/plist/test/test_generator_collections.rb +0 -82
  1829. data/lib/puppet/vendor/plist/test/test_parser.rb +0 -90
  1830. data/lib/puppet/vendor/rgen/CHANGELOG +0 -197
  1831. data/lib/puppet/vendor/rgen/MIT-LICENSE +0 -20
  1832. data/lib/puppet/vendor/rgen/PUPPET_README.md +0 -6
  1833. data/lib/puppet/vendor/rgen/README.rdoc +0 -78
  1834. data/lib/puppet/vendor/rgen/Rakefile +0 -41
  1835. data/lib/puppet/vendor/rgen/TODO +0 -41
  1836. data/lib/puppet/vendor/rgen/anounce.txt +0 -61
  1837. data/lib/puppet/vendor/rgen/design_rationale.txt +0 -71
  1838. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +0 -54
  1839. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +0 -32
  1840. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +0 -562
  1841. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +0 -45
  1842. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +0 -43
  1843. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +0 -103
  1844. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +0 -89
  1845. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +0 -559
  1846. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +0 -26
  1847. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +0 -20
  1848. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +0 -91
  1849. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +0 -28
  1850. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +0 -37
  1851. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +0 -172
  1852. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +0 -45
  1853. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +0 -218
  1854. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +0 -81
  1855. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +0 -69
  1856. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +0 -47
  1857. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +0 -167
  1858. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +0 -91
  1859. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +0 -129
  1860. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +0 -63
  1861. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +0 -140
  1862. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +0 -289
  1863. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +0 -66
  1864. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +0 -66
  1865. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +0 -117
  1866. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +0 -169
  1867. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +0 -126
  1868. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +0 -331
  1869. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +0 -94
  1870. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +0 -137
  1871. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +0 -97
  1872. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +0 -128
  1873. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +0 -47
  1874. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +0 -168
  1875. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +0 -556
  1876. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +0 -174
  1877. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +0 -89
  1878. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +0 -77
  1879. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +0 -30
  1880. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +0 -168
  1881. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +0 -23
  1882. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +0 -42
  1883. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +0 -224
  1884. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +0 -334
  1885. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +0 -225
  1886. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +0 -156
  1887. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +0 -32
  1888. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +0 -121
  1889. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +0 -18
  1890. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +0 -47
  1891. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +0 -116
  1892. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +0 -71
  1893. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +0 -98
  1894. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +0 -83
  1895. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +0 -87
  1896. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +0 -234
  1897. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +0 -26
  1898. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +0 -297
  1899. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +0 -475
  1900. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +0 -61
  1901. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +0 -67
  1902. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +0 -124
  1903. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +0 -84
  1904. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +0 -114
  1905. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +0 -68
  1906. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +0 -142
  1907. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +0 -29
  1908. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +0 -42
  1909. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +0 -329
  1910. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +0 -79
  1911. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +0 -127
  1912. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +0 -64
  1913. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +0 -35
  1914. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +0 -23
  1915. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +0 -54
  1916. data/lib/puppet/vendor/rgen/test/environment_test.rb +0 -90
  1917. data/lib/puppet/vendor/rgen/test/json_test.rb +0 -171
  1918. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +0 -1482
  1919. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +0 -57
  1920. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +0 -131
  1921. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +0 -70
  1922. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +0 -42
  1923. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +0 -44
  1924. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +0 -9
  1925. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +0 -98
  1926. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +0 -178
  1927. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +0 -59
  1928. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +0 -242
  1929. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +0 -163
  1930. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +0 -163
  1931. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +0 -156
  1932. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +0 -94
  1933. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +0 -42
  1934. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +0 -23
  1935. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +0 -6
  1936. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +0 -30
  1937. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +0 -58
  1938. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +0 -48
  1939. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +0 -102
  1940. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +0 -117
  1941. data/lib/puppet/vendor/rgen/test/rgen_test.rb +0 -26
  1942. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +0 -29
  1943. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +0 -9
  1944. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +0 -4
  1945. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +0 -1
  1946. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +0 -1
  1947. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +0 -12
  1948. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +0 -5
  1949. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +0 -11
  1950. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +0 -7
  1951. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +0 -5
  1952. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +0 -8
  1953. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +0 -8
  1954. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +0 -7
  1955. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +0 -12
  1956. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +0 -1
  1957. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +0 -3
  1958. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +0 -5
  1959. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +0 -3
  1960. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +0 -3
  1961. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +0 -24
  1962. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +0 -13
  1963. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +0 -10
  1964. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +0 -17
  1965. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +0 -31
  1966. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +0 -3
  1967. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +0 -9
  1968. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +0 -4
  1969. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +0 -29
  1970. data/lib/puppet/vendor/rgen/test/template_language_test.rb +0 -163
  1971. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +0 -119
  1972. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  1973. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +0 -1029
  1974. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +0 -317
  1975. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +0 -101
  1976. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +0 -22
  1977. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +0 -67
  1978. data/lib/puppet/vendor/rgen/test/transformer_test.rb +0 -254
  1979. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +0 -99
  1980. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +0 -97
  1981. data/lib/puppet/vendor/rgen/test/util_test.rb +0 -5
  1982. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +0 -94
  1983. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +0 -53
  1984. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +0 -49
  1985. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +0 -75
  1986. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +0 -160
  1987. data/lib/puppet/vendor/rgen_patch.rb +0 -132
  1988. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  1989. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  1990. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  1991. data/lib/puppet/vendor/semantic/lib/semantic/version.rb +0 -168
  1992. data/lib/puppet/vendor/semantic/lib/semantic/version_range.rb +0 -424
  1993. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  1994. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  1995. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  1996. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  1997. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  1998. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  1999. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  2000. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  2001. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  2002. data/lib/semver.rb +0 -123
  2003. data/man/man8/extlookup2hiera.8 +0 -10
  2004. data/man/man8/puppet-file.8 +0 -189
  2005. data/man/man8/puppet-resource_type.8 +0 -188
  2006. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  2007. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
  2008. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +0 -54
  2009. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +0 -31
  2010. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +0 -32
  2011. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +0 -5
  2012. data/spec/fixtures/unit/functions/lookup/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -9
  2013. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -9
  2014. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bad_data/manifests/init.pp +0 -3
  2015. data/spec/fixtures/unit/functions/lookup/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -9
  2016. data/spec/integration/data_binding.rb +0 -104
  2017. data/spec/integration/parser/functions/require_spec.rb +0 -43
  2018. data/spec/integration/provider/package_spec.rb +0 -33
  2019. data/spec/unit/application/inspect_spec.rb +0 -287
  2020. data/spec/unit/data_providers/sample_data_provider_spec.rb +0 -52
  2021. data/spec/unit/face/file_spec.rb +0 -10
  2022. data/spec/unit/indirector/catalog/static_compiler_spec.rb +0 -237
  2023. data/spec/unit/indirector/resource_type/parser_spec.rb +0 -254
  2024. data/spec/unit/indirector/resource_type/rest_spec.rb +0 -14
  2025. data/spec/unit/parser/functions/defined_spec.rb +0 -120
  2026. data/spec/unit/parser/functions/include_spec.rb +0 -55
  2027. data/spec/unit/parser/functions/require_spec.rb +0 -68
  2028. data/spec/unit/pops/binder/binder_spec.rb +0 -43
  2029. data/spec/unit/pops/binder/bindings_checker_spec.rb +0 -155
  2030. data/spec/unit/pops/binder/bindings_composer_spec.rb +0 -64
  2031. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +0 -18
  2032. data/spec/unit/pops/binder/config/binder_config_spec.rb +0 -42
  2033. data/spec/unit/pops/binder/injector_spec.rb +0 -768
  2034. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +0 -23
  2035. data/spec/unit/resource/type_collection_helper_spec.rb +0 -24
  2036. data/spec/unit/semver_spec.rb +0 -305
  2037. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  2038. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  2039. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  2040. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  2041. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  2042. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  2043. /data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  2044. /data/spec/fixtures/unit/pops/loaders/loaders/dependent_modules_with_metadata/{usee → modules/usee}/lib/puppet/functions/usee/callee.rb +0 -0
  2045. /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
 
@@ -11,7 +12,7 @@ class CompilerTestResource
11
12
  end
12
13
 
13
14
  def [](attr)
14
- return nil if attr == :stage
15
+ return nil if (attr == :stage || attr == :alias)
15
16
  :main
16
17
  end
17
18
 
@@ -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,1097 @@ 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
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
86
108
 
87
- it "should use the node's environment as its environment" do
88
- expect(@compiler.environment).to equal(@node.environment)
89
- end
109
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
90
110
 
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/)
111
+ expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
112
+ expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
113
+ end
96
114
  end
97
115
 
98
- it "should include the resource type collection helper" do
99
- expect(Puppet::Parser::Compiler.ancestors).to be_include(Puppet::Resource::TypeCollectionHelper)
100
- end
116
+ describe "when evaluating node classes" do
117
+ include PuppetSpec::Compiler
101
118
 
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"
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: } }
129
+
130
+ include a
131
+ notify {hi_test: message => Notify[hi][message] }
132
+ notify {bye_test: message => Notify[bye][message] }
133
+ CODE
106
134
 
107
- expect(@compiler.classlist.sort).to eq(%w{one two}.sort)
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
138
+ end
108
139
  end
109
140
 
110
- describe "when initializing" do
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
111
147
 
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
148
+ Puppet::Parser::Resource::Catalog.any_instance.expects(:to_resource).with do |catalog|
149
+ Puppet.lookup(:current_environment).name == :production
150
+ end
118
151
 
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
152
+ Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
122
153
  end
154
+ end
123
155
 
124
- it "should copy the known_resource_types version to the catalog" do
125
- expect(@compiler.catalog.version).to eq(@known_resource_types.version)
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)
126
164
  end
127
165
 
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'])
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)
134
172
  end
135
173
 
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)
140
-
141
- expect(compiler.classlist).to match_array(['foo', 'bar'])
174
+ it 'makes all server settings available as $settings::all_local hash' do
175
+ node = Puppet::Node.new("testing")
176
+ catalog = compile_to_catalog(<<-MANIFEST, node)
177
+ notify { 'test': message => $settings::all_local['strict'] == 'warning' }
178
+ MANIFEST
179
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, true)
142
180
  end
143
181
 
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)
146
- end
147
182
  end
148
183
 
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
184
+ context 'when working with $server_facts' do
185
+ include PuppetSpec::Compiler
154
186
 
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
187
+ it '$trusted is available' do
188
+ node = Puppet::Node.new("testing")
189
+ node.add_server_facts({ "server_fact" => "foo" })
158
190
 
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)
191
+ catalog = compile_to_catalog(<<-MANIFEST, node)
192
+ notify { 'test': message => $server_facts[server_fact] }
193
+ MANIFEST
162
194
 
163
- expect(newscope.parent).to equal(scope)
195
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, "foo")
164
196
  end
165
197
 
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)
198
+ it 'does not allow assignment to $server_facts' do
199
+ node = Puppet::Node.new("testing")
200
+ node.add_server_facts({ "server_fact" => "foo" })
169
201
 
170
- expect(newscope.parent).to equal(@compiler.topscope)
202
+ expect do
203
+ compile_to_catalog(<<-MANIFEST, node)
204
+ $server_facts = 'changed'
205
+ notify { 'test': message => $server_facts == 'changed' }
206
+ MANIFEST
207
+ end.to raise_error(Puppet::PreformattedError, /Attempt to assign to a reserved variable name: '\$server_facts'.*/)
171
208
  end
172
209
  end
173
210
 
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
211
+ describe "the compiler when using 4.x language constructs" do
212
+ include PuppetSpec::Compiler
203
213
 
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)
214
+ if Puppet.features.microsoft_windows?
215
+ it "should be able to determine the configuration version from a local version control repository" do
216
+ pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows")
217
+ # This should always work, because we should always be
218
+ # in the puppet repo when we run this.
219
+ version = %x{git rev-parse HEAD}.chomp
209
220
 
210
- @compiler.compile
211
- end
221
+ Puppet.settings[:config_version] = 'git rev-parse HEAD'
212
222
 
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)
223
+ compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("testnode"))
224
+ compiler.catalog.version.should == version
225
+ end
217
226
  end
218
227
 
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)
228
+ it 'assigns multiple variables from a class' do
229
+ node = Puppet::Node.new("testnodex")
230
+ catalog = compile_to_catalog(<<-PP, node)
231
+ class foo::bar::example($x = 100) {
232
+ $a = 10
233
+ $c = undef
234
+ }
235
+ include foo::bar::example
236
+
237
+ [$a, $x, $c] = Class['foo::bar::example']
238
+ notify{'check_me': message => "$a, $x, -${c}-" }
239
+ PP
240
+ expect(catalog).to have_resource("Notify[check_me]").with_parameter(:message, "10, 100, --")
241
+ end
242
+
243
+ it 'errors on attempt to assigns multiple variables from a class when variable does not exist' do
244
+ node = Puppet::Node.new("testnodex")
245
+ expect do
246
+ compile_to_catalog(<<-PP, node)
247
+ class foo::bar::example($x = 100) {
248
+ $ah = 10
249
+ $c = undef
250
+ }
251
+ include foo::bar::example
252
+
253
+ [$a, $x, $c] = Class['foo::bar::example']
254
+ notify{'check_me': message => "$a, $x, -${c}-" }
255
+ PP
256
+ end.to raise_error(/No value for required variable '\$foo::bar::example::a'/)
257
+ end
258
+
259
+ it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
260
+ node = Puppet::Node.new("testnodex")
261
+ node.classes = ['foo', 'bar']
262
+ catalog = compile_to_catalog(<<-PP, node)
263
+ class foo
264
+ {
265
+ notify { foo_notify: }
266
+ include bar
267
+ }
268
+ class bar
269
+ {
270
+ notify { bar_notify: }
271
+ }
272
+ PP
273
+
274
+ catalog = Puppet::Parser::Compiler.compile(node)
275
+
276
+ expect(catalog).to have_resource("Notify[foo_notify]")
277
+ expect(catalog).to have_resource("Notify[bar_notify]")
278
+ end
279
+
280
+ it 'applies defaults for defines with qualified names (PUP-2302)' do
281
+ catalog = compile_to_catalog(<<-CODE)
282
+ define my::thing($msg = 'foo') { notify {'check_me': message => $msg } }
283
+ My::Thing { msg => 'evoe' }
284
+ my::thing { 'name': }
285
+ CODE
286
+
287
+ expect(catalog).to have_resource("Notify[check_me]").with_parameter(:message, "evoe")
288
+ end
289
+
290
+ it 'Applies defaults from dynamic scopes (3x and future with reverted PUP-867)' do
291
+ catalog = compile_to_catalog(<<-CODE)
292
+ class a {
293
+ Notify { message => "defaulted" }
294
+ include b
295
+ notify { bye: }
296
+ }
297
+ class b { notify { hi: } }
223
298
 
224
- expect(@compiler.catalog.edge?(stage, klass)).to be_truthy
299
+ include a
300
+ CODE
301
+ expect(catalog).to have_resource("Notify[hi]").with_parameter(:message, "defaulted")
302
+ expect(catalog).to have_resource("Notify[bye]").with_parameter(:message, "defaulted")
225
303
  end
226
304
 
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) }
305
+ it 'gets default from inherited class (PUP-867)' do
306
+ catalog = compile_to_catalog(<<-CODE)
307
+ class a {
308
+ Notify { message => "defaulted" }
309
+ include c
310
+ notify { bye: }
311
+ }
312
+ class b { Notify { message => "inherited" } }
313
+ class c inherits b { notify { hi: } }
233
314
 
234
- @compiler.add_collection(colls[0])
235
- @compiler.add_collection(colls[1])
315
+ include a
316
+ CODE
236
317
 
237
- compile_stub(:evaluate_generators)
238
- @compiler.compile
318
+ expect(catalog).to have_resource("Notify[hi]").with_parameter(:message, "inherited")
319
+ expect(catalog).to have_resource("Notify[bye]").with_parameter(:message, "defaulted")
239
320
  end
240
321
 
241
- it "should ignore builtin resources" do
242
- resource = resource(:file, "testing")
243
-
244
- @compiler.add_resource(@scope, resource)
245
- resource.expects(:evaluate).never
322
+ it 'looks up default parameter values from inherited class (PUP-2532)' do
323
+ catalog = compile_to_catalog(<<-CODE)
324
+ class a {
325
+ Notify { message => "defaulted" }
326
+ include c
327
+ notify { bye: }
328
+ }
329
+ class b { Notify { message => "inherited" } }
330
+ class c inherits b { notify { hi: } }
331
+
332
+ include a
333
+ notify {hi_test: message => Notify[hi][message] }
334
+ notify {bye_test: message => Notify[bye][message] }
335
+ CODE
336
+
337
+ expect(catalog).to have_resource("Notify[hi_test]").with_parameter(:message, "inherited")
338
+ expect(catalog).to have_resource("Notify[bye_test]").with_parameter(:message, "defaulted")
339
+ end
340
+
341
+ it 'does not allow override of class parameters using a resource override expression' do
342
+ expect do
343
+ compile_to_catalog(<<-CODE)
344
+ Class[a] { x => 2}
345
+ CODE
346
+ end.to raise_error(/Resource Override can only.*got: Class\[a\].*/)
347
+ end
348
+
349
+ describe 'when resolving class references' do
350
+ include Matchers::Resource
351
+
352
+ { 'string' => 'myWay',
353
+ 'class reference' => 'Class["myWay"]',
354
+ 'resource reference' => 'Resource["class", "myWay"]'
355
+ }.each do |label, code|
356
+ it "allows camel cased class name reference in 'include' using a #{label}" do
357
+ catalog = compile_to_catalog(<<-"PP")
358
+ class myWay {
359
+ notify { 'I did it': message => 'my way'}
360
+ }
361
+ include #{code}
362
+ PP
363
+ expect(catalog).to have_resource("Notify[I did it]")
364
+ end
365
+ end
246
366
 
247
- @compiler.compile
248
- end
367
+ describe 'and classname is a Resource Reference' do
368
+ # tested with strict == off since this was once conditional on strict
369
+ # can be removed in a later version.
370
+ before(:each) do
371
+ Puppet[:strict] = :off
372
+ end
249
373
 
250
- it "should evaluate unevaluated resources" do
251
- resource = CompilerTestResource.new(:file, "testing")
374
+ it 'is reported as an error' do
375
+ expect {
376
+ compile_to_catalog(<<-PP)
377
+ notice Class[ToothFairy]
378
+ PP
379
+ }.to raise_error(/Illegal Class name in class reference. A TypeReference\['ToothFairy'\]-Type cannot be used where a String is expected/)
380
+ end
381
+ end
252
382
 
253
- @compiler.add_resource(@scope, resource)
383
+ it "should not favor local scope (with class included in topscope)" do
384
+ catalog = compile_to_catalog(<<-PP)
385
+ class experiment {
386
+ class baz {
387
+ }
388
+ notify {"x" : require => Class['baz'] }
389
+ notify {"y" : require => Class['experiment::baz'] }
390
+ }
391
+ class baz {
392
+ }
393
+ include baz
394
+ include experiment
395
+ include experiment::baz
396
+ PP
254
397
 
255
- # We have to now mark the resource as evaluated
256
- resource.expects(:evaluate).with { |*whatever| resource.evaluated = true }
398
+ expect(catalog).to have_resource("Notify[x]").with_parameter(:require, be_resource("Class[Baz]"))
399
+ expect(catalog).to have_resource("Notify[y]").with_parameter(:require, be_resource("Class[Experiment::Baz]"))
400
+ end
257
401
 
258
- @compiler.compile
402
+ it "should not favor local name scope" do
403
+ expect {
404
+ catalog = compile_to_catalog(<<-PP)
405
+ class experiment {
406
+ class baz {
407
+ }
408
+ notify {"x" : require => Class['baz'] }
409
+ notify {"y" : require => Class['experiment::baz'] }
410
+ }
411
+ class baz {
412
+ }
413
+ include experiment
414
+ include experiment::baz
415
+ PP
416
+ }.to raise_error(/Could not find resource 'Class\[Baz\]' in parameter 'require'/)
417
+ end
259
418
  end
260
419
 
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
420
+ describe "(ticket #13349) when explicitly specifying top scope" do
421
+ ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
422
+ describe "with #{include}" do
423
+ it "should find the top level class" do
424
+ catalog = compile_to_catalog(<<-MANIFEST)
425
+ class { 'foo::test': }
426
+ class foo::test {
427
+ #{include}
428
+ }
429
+ class bar::baz {
430
+ notify { 'good!': }
431
+ }
432
+ class foo::bar::baz {
433
+ notify { 'bad!': }
434
+ }
435
+ MANIFEST
267
436
 
268
- @compiler.compile
437
+ expect(catalog).to have_resource("Class[Bar::Baz]")
438
+ expect(catalog).to have_resource("Notify[good!]")
439
+ expect(catalog).not_to have_resource("Class[Foo::Bar::Baz]")
440
+ expect(catalog).not_to have_resource("Notify[bad!]")
441
+ end
442
+ end
443
+ end
269
444
  end
270
445
 
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
-
446
+ it 'should recompute the version after input files are re-parsed' do
447
+ Puppet[:code] = 'class foo { }'
448
+ first_time = Time.at(1)
449
+ second_time = Time.at(200)
450
+ Time.stubs(:now).returns(first_time)
451
+ node = Puppet::Node.new('mynode')
452
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i)
453
+ Time.stubs(:now).returns(second_time)
454
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i) # no change because files didn't change
455
+ Puppet[:code] = nil
456
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(second_time.to_i)
457
+ end
458
+
459
+ ['define', 'class', 'node'].each do |thing|
460
+ it "'#{thing}' is not allowed inside evaluated conditional constructs" do
461
+ expect do
462
+ compile_to_catalog(<<-PP)
463
+ if true {
464
+ #{thing} foo {
465
+ }
466
+ notify { decoy: }
467
+ }
468
+ PP
469
+ end.to raise_error(Puppet::Error, /Classes, definitions, and nodes may only appear at toplevel/)
470
+ end
281
471
 
282
- @compiler.compile
472
+ it "'#{thing}' is not allowed inside un-evaluated conditional constructs" do
473
+ expect do
474
+ compile_to_catalog(<<-PP)
475
+ if false {
476
+ #{thing} foo {
477
+ }
478
+ notify { decoy: }
479
+ }
480
+ PP
481
+ end.to raise_error(Puppet::Error, /Classes, definitions, and nodes may only appear at toplevel/)
482
+ end
283
483
  end
284
484
 
285
- describe "when finishing" do
286
- before do
287
- @compiler.send(:evaluate_main)
288
- @catalog = @compiler.catalog
485
+ describe "relationships to non existing resources (even with strict==off)" do
486
+ # At some point in the future, this test can be modified to simply ignore the strict flag,
487
+ # but since the current version is a change from being under control of strict, this is now
488
+ # explicit - the standard setting is strict == warning, here setting it to off
489
+ #
490
+ before(:each) do
491
+ Puppet[:strict] = :off
289
492
  end
290
493
 
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
494
+ [ 'before',
495
+ 'subscribe',
496
+ 'notify',
497
+ 'require'].each do |meta_param|
498
+ it "are reported as an error when formed via meta parameter #{meta_param}" do
499
+ expect {
500
+ compile_to_catalog(<<-PP)
501
+ notify{ x : #{meta_param} => Notify[tooth_fairy] }
502
+ PP
503
+ }.to raise_error(/Could not find resource 'Notify\[tooth_fairy\]' in parameter '#{meta_param}'/)
504
+ end
296
505
  end
297
506
 
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"
507
+ it 'is not reported for virtual resources' do
508
+ expect {
509
+ compile_to_catalog(<<-PP)
510
+ @notify{ x : require => Notify[tooth_fairy] }
511
+ PP
512
+ }.to_not raise_error
513
+ end
307
514
 
308
- @compiler.add_resource(@scope, dnf_resource)
515
+ it 'is reported for a realized virtual resources' do
516
+ expect {
517
+ compile_to_catalog(<<-PP)
518
+ @notify{ x : require => Notify[tooth_fairy] }
519
+ realize(Notify['x'])
520
+ PP
521
+ }.to raise_error(/Could not find resource 'Notify\[tooth_fairy\]' in parameter 'require'/)
522
+ end
523
+ end
309
524
 
310
- @compiler.send(:finish)
525
+ describe "relationships can be formed" do
526
+ def extract_name(ref)
527
+ ref.sub(/File\[(\w+)\]/, '\1')
311
528
  end
312
529
 
313
- it "should call finish() in add_resource order" do
314
- resources = sequence('resources')
530
+ def assert_creates_relationships(relationship_code, expectations)
531
+ base_manifest = <<-MANIFEST
532
+ file { [a,b,c]:
533
+ mode => '0644',
534
+ }
535
+ file { [d,e]:
536
+ mode => '0755',
537
+ }
538
+ MANIFEST
315
539
 
316
- resource1 = add_resource("finish1")
317
- resource1.expects(:finish).in_sequence(resources)
540
+ catalog = compile_to_catalog(base_manifest + relationship_code)
541
+ resources = catalog.resources.select { |res| res.type == 'File' }
318
542
 
319
- resource2 = add_resource("finish2")
320
- resource2.expects(:finish).in_sequence(resources)
543
+ actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
544
+ resources.map do |res|
545
+ dependents = Array(res[relation])
546
+ dependents.map { |ref| [res.title, extract_name(ref)] }
547
+ end.inject(&:concat)
548
+ end
321
549
 
322
- @compiler.send(:finish)
550
+ expect(actual_relationships).to match_array(expectations[:relationships] || [])
551
+ expect(actual_subscriptions).to match_array(expectations[:subscriptions] || [])
323
552
  end
324
553
 
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)
330
-
331
- @compiler.send(:finish)
332
- expect(resource1[:noop]).to be_truthy
554
+ it "of regular type" do
555
+ assert_creates_relationships("File[a] -> File[b]",
556
+ :relationships => [['a','b']])
333
557
  end
334
558
 
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
559
+ it "of subscription type" do
560
+ assert_creates_relationships("File[a] ~> File[b]",
561
+ :subscriptions => [['a', 'b']])
344
562
  end
345
563
 
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)
352
-
353
- resource1[:noop] = false
354
-
355
- @compiler.send(:finish)
356
- expect(resource2[:noop]).to be_falsey
564
+ it "between multiple resources expressed as resource with multiple titles" do
565
+ assert_creates_relationships("File[a,b] -> File[c,d]",
566
+ :relationships => [['a', 'c'],
567
+ ['b', 'c'],
568
+ ['a', 'd'],
569
+ ['b', 'd']])
357
570
  end
358
571
 
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)
366
-
367
- @compiler.send(:finish)
368
- expect(resource2.tags).to be_include("one")
369
- expect(resource2.tags).to be_include("two")
572
+ it "between collection expressions" do
573
+ assert_creates_relationships("File <| mode == '0644' |> -> File <| mode == '0755' |>",
574
+ :relationships => [['a', 'd'],
575
+ ['b', 'd'],
576
+ ['c', 'd'],
577
+ ['a', 'e'],
578
+ ['b', 'e'],
579
+ ['c', 'e']])
370
580
  end
371
581
 
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
582
+ it "between resources expressed as Strings" do
583
+ assert_creates_relationships("'File[a]' -> 'File[b]'",
584
+ :relationships => [['a', 'b']])
381
585
  end
382
- end
383
-
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
586
 
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
587
+ it "between resources expressed as variables" do
588
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['a', 'b']])
589
+ $var = File[a]
590
+ $var -> File[b]
591
+ MANIFEST
399
592
 
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)
593
+ end
404
594
 
405
- @compiler.add_resource(@scope, file1)
406
- expect { @compiler.add_resource(@scope, file2) }.to raise_error(Puppet::Resource::Catalog::DuplicateResourceError)
407
- end
595
+ it "between resources expressed as case statements" do
596
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['s1', 't2']])
597
+ $var = 10
598
+ case $var {
599
+ 10: {
600
+ file { s1: }
601
+ }
602
+ 12: {
603
+ file { s2: }
604
+ }
605
+ }
606
+ ->
607
+ case $var + 2 {
608
+ 10: {
609
+ file { t1: }
610
+ }
611
+ 12: {
612
+ file { t2: }
613
+ }
614
+ }
615
+ MANIFEST
616
+ end
408
617
 
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)
618
+ it "using deep access in array" do
619
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['a', 'b']])
620
+ $var = [ [ [ File[a], File[b] ] ] ]
621
+ $var[0][0][0] -> $var[0][0][1]
622
+ MANIFEST
412
623
 
413
- expect(@compiler.catalog).to be_edge(@scope.resource, resource)
414
- end
624
+ end
415
625
 
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)
626
+ it "using deep access in hash" do
627
+ assert_creates_relationships(<<-MANIFEST, :relationships => [['a', 'b']])
628
+ $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
629
+ $var[foo][bar][source] -> $var[foo][bar][target]
630
+ MANIFEST
420
631
 
421
- expect(@compiler.catalog).not_to be_edge(main, resource)
422
- end
632
+ end
423
633
 
424
- it "should not add any parent-edges to stages" do
425
- stage = resource(:stage, "other")
426
- @compiler.add_resource(@scope, stage)
634
+ it "using resource declarations" do
635
+ assert_creates_relationships("file { l: } -> file { r: }", :relationships => [['l', 'r']])
636
+ end
427
637
 
428
- @scope.resource = resource(:class, "foo")
638
+ it "between entries in a chain of relationships" do
639
+ assert_creates_relationships("File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]",
640
+ :relationships => [['a', 'b'], ['d', 'c']],
641
+ :subscriptions => [['b', 'c'], ['e', 'd']])
642
+ end
429
643
 
430
- expect(@compiler.catalog.edge?(@scope.resource, stage)).to be_falsey
431
- end
644
+ it 'should close the gap created by an intermediate empty set produced by collection' do
645
+ source = "file { [aa, bb]: } [File[a], File[aa]] -> Notify<| tag == 'na' |> ~> [File[b], File[bb]]"
646
+ assert_creates_relationships(source,
647
+ :relationships => [ ],
648
+ :subscriptions => [['a', 'b'],['aa', 'b'],['a', 'bb'], ['aa', 'bb']])
649
+ end
432
650
 
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)
651
+ it 'should close the gap created by empty set followed by empty collection' do
652
+ source = "file { [aa, bb]: } [File[a], File[aa]] -> [] -> Notify<| tag == 'na' |> ~> [File[b], File[bb]]"
653
+ assert_creates_relationships(source,
654
+ :relationships => [ ],
655
+ :subscriptions => [['a', 'b'],['aa', 'b'],['a', 'bb'], ['aa', 'bb']])
656
+ end
438
657
 
439
- second_stage[:stage] = "other"
658
+ it 'should close the gap created by empty collection surrounded by empty sets' do
659
+ source = "file { [aa, bb]: } [File[a], File[aa]] -> [] -> Notify<| tag == 'na' |> -> [] ~> [File[b], File[bb]]"
660
+ assert_creates_relationships(source,
661
+ :relationships => [ ],
662
+ :subscriptions => [['a', 'b'],['aa', 'b'],['a', 'bb'], ['aa', 'bb']])
663
+ end
440
664
 
441
- expect(@compiler.catalog.edge?(other_stage, second_stage)).to be_falsey
665
+ it 'should close the gap created by several intermediate empty sets produced by collection' do
666
+ source = "file { [aa, bb]: } [File[a], File[aa]] -> Notify<| tag == 'na' |> -> Notify<| tag == 'na' |> ~> [File[b], File[bb]]"
667
+ assert_creates_relationships(source,
668
+ :relationships => [ ],
669
+ :subscriptions => [['a', 'b'],['aa', 'b'],['a', 'bb'], ['aa', 'bb']])
670
+ end
442
671
  end
443
672
 
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
673
+ context "when dealing with variable references" do
674
+ it 'an initial underscore in a variable name is ok' do
675
+ catalog = compile_to_catalog(<<-MANIFEST)
676
+ class a { $_a = 10}
677
+ include a
678
+ notify { 'test': message => $a::_a }
679
+ MANIFEST
449
680
 
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
681
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, 10)
682
+ end
455
683
 
456
- it "should not evaluate virtual defined resources" do
457
- resource = resource(:file, "testing")
458
- resource.virtual = true
459
- @compiler.add_resource(@scope, resource)
684
+ it 'an initial underscore in not ok if elsewhere than last segment' do
685
+ expect do
686
+ catalog = compile_to_catalog(<<-MANIFEST)
687
+ class a { $_a = 10}
688
+ include a
689
+ notify { 'test': message => $_a::_a }
690
+ MANIFEST
691
+ end.to raise_error(/Illegal variable name/)
692
+ end
460
693
 
461
- resource.expects(:evaluate).never
694
+ it 'a missing variable as default value becomes undef' do
695
+ # strict variables not on
696
+ catalog = compile_to_catalog(<<-MANIFEST)
697
+ class a ($b=$x) { notify {test: message=>"yes ${undef == $b}" } }
698
+ include a
699
+ MANIFEST
462
700
 
463
- @compiler.compile
701
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, "yes true")
702
+ end
464
703
  end
465
- end
466
-
467
- describe "when evaluating collections" do
468
704
 
469
- it "should evaluate each collection" do
470
- 2.times { |i|
471
- coll = mock 'coll%s' % i
472
- @compiler.add_collection(coll)
473
-
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)
705
+ context "when dealing with resources (e.g. File) that modifies its name from title" do
706
+ [['', ''],
707
+ ['', '/'],
708
+ ['/', ''],
709
+ ['/', '/']].each do |t, r|
710
+ it "a circular reference can be compiled with endings: title='#{t}' and ref='#{r}'" do
711
+ expect {
712
+ node = Puppet::Node.new("testing")
713
+ compile_to_catalog(<<-"MANIFEST", node)
714
+ file { '/tmp/bazinga.txt#{t}':
715
+ content => 'henrik testing',
716
+ require => File['/tmp/bazinga.txt#{r}']
717
+ }
718
+ MANIFEST
719
+ }.not_to raise_error
478
720
  end
479
- }
480
-
481
- @compiler.compile
482
- end
483
-
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)
487
-
488
- @compiler.add_collection(coll)
489
-
490
- expect { @compiler.compile }.not_to raise_error
491
- end
492
-
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)
498
-
499
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, 'Failed to realize virtual resources something')
500
- end
501
-
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
511
-
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
518
- end
519
- end
520
-
521
- describe "when told to evaluate missing classes" do
522
-
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)
721
+ end
526
722
  end
527
723
 
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
724
+ context 'when working with the trusted data hash' do
725
+ context 'and have opted in to hashed_node_data' do
726
+ it 'should make $trusted available' do
727
+ node = Puppet::Node.new("testing")
728
+ node.trusted_data = { "data" => "value" }
532
729
 
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/)
538
- end
539
- end
730
+ catalog = compile_to_catalog(<<-MANIFEST, node)
731
+ notify { 'test': message => $trusted[data] }
732
+ MANIFEST
540
733
 
541
- describe "when evaluating found classes" do
734
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, "value")
735
+ end
542
736
 
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)
737
+ it 'should not allow assignment to $trusted' do
738
+ node = Puppet::Node.new("testing")
739
+ node.trusted_data = { "data" => "value" }
547
740
 
548
- @resource = stub 'resource', :ref => "Class[myclass]", :type => "file"
549
- end
550
-
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
741
+ expect do
742
+ compile_to_catalog(<<-MANIFEST, node)
743
+ $trusted = 'changed'
744
+ notify { 'test': message => $trusted == 'changed' }
745
+ MANIFEST
746
+ end.to raise_error(Puppet::PreformattedError, /Attempt to assign to a reserved variable name: '\$trusted'/)
747
+ end
557
748
  end
558
749
  end
559
750
 
560
- it "should evaluate each class" do
561
- @compiler.catalog.stubs(:tag)
562
-
563
- @class.expects(:ensure_in_catalog).with(@scope)
564
- @scope.stubs(:class_scope).with(@class)
565
-
566
- @compiler.evaluate_classes(%w{myclass}, @scope)
567
- end
568
-
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')
751
+ context 'when using typed parameters in definition' do
752
+ it 'accepts type compliant arguments' do
753
+ catalog = compile_to_catalog(<<-MANIFEST)
754
+ define foo(String $x) { }
755
+ foo { 'test': x =>'say friend' }
756
+ MANIFEST
757
+ expect(catalog).to have_resource("Foo[test]").with_parameter(:x, 'say friend')
573
758
  end
574
759
 
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
760
+ it 'accepts undef as the default for an Optional argument' do
761
+ catalog = compile_to_catalog(<<-MANIFEST)
762
+ define foo(Optional[String] $x = undef) {
763
+ notify { "expected": message => $x == undef }
764
+ }
765
+ foo { 'test': }
766
+ MANIFEST
767
+ expect(catalog).to have_resource("Notify[expected]").with_parameter(:message, true)
580
768
  end
581
769
 
582
- def compile
583
- @catalog = @compiler.compile
770
+ it 'accepts anything when parameters are untyped' do
771
+ expect do
772
+ catalog = compile_to_catalog(<<-MANIFEST)
773
+ define foo($a, $b, $c) { }
774
+ foo { 'test': a => String, b=>10, c=>undef }
775
+ MANIFEST
776
+ end.to_not raise_error()
584
777
  end
585
778
 
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) }
779
+ it 'denies non type compliant arguments' do
780
+ expect do
781
+ catalog = compile_to_catalog(<<-MANIFEST)
782
+ define foo(Integer $x) { }
783
+ foo { 'test': x =>'say friend' }
784
+ MANIFEST
785
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got String/)
591
786
  end
592
787
 
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")
788
+ it 'denies undef for a non-optional type' do
789
+ expect do
790
+ catalog = compile_to_catalog(<<-MANIFEST)
791
+ define foo(Integer $x) { }
792
+ foo { 'test': x => undef }
793
+ MANIFEST
794
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got Undef/)
597
795
  end
598
796
 
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")
797
+ it 'denies non type compliant default argument' do
798
+ expect do
799
+ catalog = compile_to_catalog(<<-MANIFEST)
800
+ define foo(Integer $x = 'pow') { }
801
+ foo { 'test': }
802
+ MANIFEST
803
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got String/)
603
804
  end
604
805
 
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")
806
+ it 'denies undef as the default for a non-optional type' do
807
+ expect do
808
+ catalog = compile_to_catalog(<<-MANIFEST)
809
+ define foo(Integer $x = undef) { }
810
+ foo { 'test': }
811
+ MANIFEST
812
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got Undef/)
610
813
  end
611
814
 
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
621
-
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']))
815
+ it 'accepts a Resource as a Type' do
816
+ catalog = compile_to_catalog(<<-MANIFEST)
817
+ define bar($text) { }
818
+ define foo(Type[Bar] $x) {
819
+ notify { 'test': message => $x[text] }
820
+ }
821
+ bar { 'joke': text => 'knock knock' }
822
+ foo { 'test': x => Bar[joke] }
823
+ MANIFEST
824
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, 'knock knock')
624
825
  end
625
- end
626
-
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)
653
-
654
- @resource.expects(:evaluate).never
655
-
656
- @class.expects(:ensure_in_catalog).returns(@resource)
657
- @scope.stubs(:class_scope).with(@class)
658
-
659
- @compiler.evaluate_classes(%w{myclass}, @scope)
660
- end
661
-
662
- it "should immediately evaluate the resources created for found classes when asked" do
663
- @compiler.catalog.stubs(:tag)
664
-
665
- @resource.expects(:evaluate)
666
- @class.expects(:ensure_in_catalog).returns(@resource)
667
- @scope.stubs(:class_scope).with(@class)
668
-
669
- @compiler.evaluate_classes(%w{myclass}, @scope, false)
670
- end
671
-
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
684
-
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
695
-
696
- describe "when evaluating AST nodes with no AST nodes present" do
697
826
 
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
702
-
703
- @compiler.send(:evaluate_ast_node)
827
+ it 'uses infer_set when reporting type mismatch' do
828
+ expect do
829
+ catalog = compile_to_catalog(<<-MANIFEST)
830
+ define foo(Struct[{b => Integer, d=>String}] $a) { }
831
+ foo{ bar: a => {b => 5, c => 'stuff'}}
832
+ MANIFEST
833
+ end.to raise_error(/Foo\[bar\]:\s+parameter 'a' expects a value for key 'd'\s+parameter 'a' unrecognized key 'c'/m)
834
+ end
704
835
  end
705
- end
706
-
707
- describe "when evaluating AST nodes with AST nodes present" do
708
836
 
709
- before do
710
- @compiler.known_resource_types.stubs(:nodes?).returns true
711
-
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)
717
-
718
- # It should check this last, of course.
719
- @compiler.known_resource_types.stubs(:node).with("default").returns(nil)
720
- end
837
+ context 'when using typed parameters in class' do
838
+ it 'accepts type compliant arguments' do
839
+ catalog = compile_to_catalog(<<-MANIFEST)
840
+ class foo(String $x) { }
841
+ class { 'foo': x =>'say friend' }
842
+ MANIFEST
843
+ expect(catalog).to have_resource("Class[Foo]").with_parameter(:x, 'say friend')
844
+ end
721
845
 
722
- it "should fail if the named node cannot be found" do
723
- expect { @compiler.send(:evaluate_ast_node) }.to raise_error(Puppet::ParseError)
724
- end
846
+ it 'accepts undef as the default for an Optional argument' do
847
+ catalog = compile_to_catalog(<<-MANIFEST)
848
+ class foo(Optional[String] $x = undef) {
849
+ notify { "expected": message => $x == undef }
850
+ }
851
+ class { 'foo': }
852
+ MANIFEST
853
+ expect(catalog).to have_resource("Notify[expected]").with_parameter(:message, true)
854
+ end
725
855
 
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)
856
+ it 'accepts anything when parameters are untyped' do
857
+ expect do
858
+ catalog = compile_to_catalog(<<-MANIFEST)
859
+ class foo($a, $b, $c) { }
860
+ class { 'foo': a => String, b=>10, c=>undef }
861
+ MANIFEST
862
+ end.to_not raise_error()
863
+ end
729
864
 
730
- node_resource = stub 'node resource', :ref => "Node[c]", :evaluate => nil, :type => "node"
731
- node_class.expects(:ensure_in_catalog).returns(node_resource)
865
+ it 'denies non type compliant arguments' do
866
+ expect do
867
+ catalog = compile_to_catalog(<<-MANIFEST)
868
+ class foo(Integer $x) { }
869
+ class { 'foo': x =>'say friend' }
870
+ MANIFEST
871
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got String/)
872
+ end
732
873
 
733
- @compiler.compile
734
- end
874
+ it 'denies undef for a non-optional type' do
875
+ expect do
876
+ catalog = compile_to_catalog(<<-MANIFEST)
877
+ class foo(Integer $x) { }
878
+ class { 'foo': x => undef }
879
+ MANIFEST
880
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got Undef/)
881
+ end
735
882
 
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)
883
+ it 'denies non type compliant default argument' do
884
+ expect do
885
+ catalog = compile_to_catalog(<<-MANIFEST)
886
+ class foo(Integer $x = 'pow') { }
887
+ class { 'foo': }
888
+ MANIFEST
889
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got String/)
890
+ end
739
891
 
740
- node_resource = stub 'node resource', :ref => "Node[default]", :evaluate => nil, :type => "node"
741
- node_class.expects(:ensure_in_catalog).returns(node_resource)
892
+ it 'denies undef as the default for a non-optional type' do
893
+ expect do
894
+ catalog = compile_to_catalog(<<-MANIFEST)
895
+ class foo(Integer $x = undef) { }
896
+ class { 'foo': }
897
+ MANIFEST
898
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got Undef/)
899
+ end
742
900
 
743
- @compiler.compile
901
+ it 'accepts a Resource as a Type' do
902
+ catalog = compile_to_catalog(<<-MANIFEST)
903
+ define bar($text) { }
904
+ class foo(Type[Bar] $x) {
905
+ notify { 'test': message => $x[text] }
906
+ }
907
+ bar { 'joke': text => 'knock knock' }
908
+ class { 'foo': x => Bar[joke] }
909
+ MANIFEST
910
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, 'knock knock')
911
+ end
744
912
  end
745
913
 
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)
914
+ context 'when using typed parameters in lambdas' do
915
+ it 'accepts type compliant arguments' do
916
+ catalog = compile_to_catalog(<<-MANIFEST)
917
+ with('value') |String $x| { notify { "$x": } }
918
+ MANIFEST
919
+ expect(catalog).to have_resource("Notify[value]")
920
+ end
749
921
 
750
- node_resource = stub 'node resource', :ref => "Node[c]", :type => "node"
751
- node_class.expects(:ensure_in_catalog).returns(node_resource)
922
+ it 'handles an array as a single argument' do
923
+ catalog = compile_to_catalog(<<-MANIFEST)
924
+ with(['value', 'second']) |$x| { notify { "${x[0]} ${x[1]}": } }
925
+ MANIFEST
926
+ expect(catalog).to have_resource("Notify[value second]")
927
+ end
752
928
 
753
- node_resource.expects(:evaluate)
929
+ it 'denies when missing required arguments' do
930
+ expect do
931
+ compile_to_catalog(<<-MANIFEST)
932
+ with(1) |$x, $y| { }
933
+ MANIFEST
934
+ end.to raise_error(/Parameter \$y is required but no value was given/m)
935
+ end
754
936
 
755
- @compiler.send(:evaluate_ast_node)
756
- end
757
- end
937
+ it 'accepts anything when parameters are untyped' do
938
+ catalog = compile_to_catalog(<<-MANIFEST)
939
+ ['value', 1, true, undef].each |$x| { notify { "value: $x": } }
940
+ MANIFEST
758
941
 
759
- describe "when evaluating node classes" do
760
- include PuppetSpec::Compiler
942
+ expect(catalog).to have_resource("Notify[value: value]")
943
+ expect(catalog).to have_resource("Notify[value: 1]")
944
+ expect(catalog).to have_resource("Notify[value: true]")
945
+ expect(catalog).to have_resource("Notify[value: ]")
946
+ end
761
947
 
762
- describe "when provided classes in array format" do
763
- let(:node) { Puppet::Node.new('someone', :classes => ['something']) }
948
+ it 'accepts type-compliant, slurped arguments' do
949
+ catalog = compile_to_catalog(<<-MANIFEST)
950
+ with(1, 2) |Integer *$x| { notify { "${$x[0] + $x[1]}": } }
951
+ MANIFEST
952
+ expect(catalog).to have_resource("Notify[3]")
953
+ end
764
954
 
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
955
+ it 'denies non-type-compliant arguments' do
956
+ expect do
957
+ compile_to_catalog(<<-MANIFEST)
958
+ with(1) |String $x| { }
770
959
  MANIFEST
960
+ end.to raise_error(/block parameter 'x' expects a String value, got Integer/m)
961
+ end
771
962
 
772
- catalog = compile_to_catalog(manifest, node)
773
-
774
- expect(catalog.resource('Class', 'Something')).not_to be_nil
775
- end
776
-
777
- it "should evaluate the class without parameters if it's not already included" do
778
- manifest = "class something {}"
963
+ it 'denies non-type-compliant, slurped arguments' do
964
+ expect do
965
+ compile_to_catalog(<<-MANIFEST)
966
+ with(1, "hello") |Integer *$x| { }
967
+ MANIFEST
968
+ end.to raise_error(/block parameter 'x' expects an Integer value, got String/m)
969
+ end
779
970
 
780
- catalog = compile_to_catalog(manifest, node)
971
+ it 'denies non-type-compliant default argument' do
972
+ expect do
973
+ compile_to_catalog(<<-MANIFEST)
974
+ with(1) |$x, String $defaulted = 1| { notify { "${$x + $defaulted}": }}
975
+ MANIFEST
976
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
977
+ end
781
978
 
782
- expect(catalog.resource('Class', 'Something')).not_to be_nil
783
- end
979
+ it 'raises an error when a default argument value is an incorrect type and there are no arguments passed' do
980
+ expect do
981
+ compile_to_catalog(<<-MANIFEST)
982
+ with() |String $defaulted = 1| {}
983
+ MANIFEST
984
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
784
985
  end
785
986
 
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/)
987
+ it 'raises an error when the default argument for a slurped parameter is an incorrect type' do
988
+ expect do
989
+ compile_to_catalog(<<-MANIFEST)
990
+ with() |String *$defaulted = 1| {}
991
+ MANIFEST
992
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
788
993
  end
789
- end
790
994
 
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
995
+ it 'allows using an array as the default slurped value' do
996
+ catalog = compile_to_catalog(<<-MANIFEST)
997
+ with() |String *$defaulted = [hi]| { notify { $defaulted[0]: } }
998
+ MANIFEST
801
999
 
802
- catalog = compile_to_catalog(manifest, node)
1000
+ expect(catalog).to have_resource('Notify[hi]')
1001
+ end
803
1002
 
804
- expect(catalog.resource('Class', 'Something')).not_to be_nil
805
- end
1003
+ it 'allows using a value of the type as the default slurped value' do
1004
+ catalog = compile_to_catalog(<<-MANIFEST)
1005
+ with() |String *$defaulted = hi| { notify { $defaulted[0]: } }
1006
+ MANIFEST
806
1007
 
807
- it "should evaluate the class if it's not already included" do
808
- manifest = <<-MANIFEST
809
- class something {}
810
- MANIFEST
1008
+ expect(catalog).to have_resource('Notify[hi]')
1009
+ end
811
1010
 
812
- catalog = compile_to_catalog(manifest, node)
1011
+ it 'allows specifying the type of a slurped parameter as an array' do
1012
+ catalog = compile_to_catalog(<<-MANIFEST)
1013
+ with() |Array[String] *$defaulted = hi| { notify { $defaulted[0]: } }
1014
+ MANIFEST
813
1015
 
814
- expect(catalog.resource('Class', 'Something')).not_to be_nil
815
- end
816
- end
1016
+ expect(catalog).to have_resource('Notify[hi]')
1017
+ end
817
1018
 
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
1019
+ it 'raises an error when the number of default values does not match the parameter\'s size specification' do
1020
+ expect do
1021
+ compile_to_catalog(<<-MANIFEST)
1022
+ with() |Array[String, 2] *$defaulted = hi| { }
1023
+ MANIFEST
1024
+ end.to raise_error(/block expects at least 2 arguments, got 1/m)
821
1025
  end
822
1026
 
823
- describe "for classes with parameters" do
824
- let(:node) { Puppet::Node.new('someone', :classes => {'something' => {'configuron' => 'defrabulated'}}) }
1027
+ it 'raises an error when the number of passed values does not match the parameter\'s size specification' do
1028
+ expect do
1029
+ compile_to_catalog(<<-MANIFEST)
1030
+ with(hi) |Array[String, 2] *$passed| { }
1031
+ MANIFEST
1032
+ end.to raise_error(/block expects at least 2 arguments, got 1/m)
1033
+ end
825
1034
 
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
1035
+ it 'matches when the number of arguments passed for a slurp parameter match the size specification' do
1036
+ catalog = compile_to_catalog(<<-MANIFEST)
1037
+ with(hi, bye) |Array[String, 2] *$passed| {
1038
+ $passed.each |$n| { notify { $n: } }
1039
+ }
1040
+ MANIFEST
832
1041
 
833
- expect { compile_to_catalog(manifest, node) }.to raise_error(Puppet::Error, /Class\[Something\] is already declared/)
834
- end
1042
+ expect(catalog).to have_resource('Notify[hi]')
1043
+ expect(catalog).to have_resource('Notify[bye]')
1044
+ end
835
1045
 
836
- it "should evaluate the class if it's not already included" do
837
- manifest = <<-MANIFEST
838
- class something($configuron=frabulated) {}
839
- MANIFEST
1046
+ it 'raises an error when the number of allowed slurp parameters exceeds the size constraint' do
1047
+ expect do
1048
+ compile_to_catalog(<<-MANIFEST)
1049
+ with(hi, bye) |Array[String, 1, 1] *$passed| { }
1050
+ MANIFEST
1051
+ end.to raise_error(/block expects 1 argument, got 2/m)
1052
+ end
840
1053
 
841
- catalog = compile_to_catalog(manifest, node)
1054
+ it 'allows passing slurped arrays by specifying an array of arrays' do
1055
+ catalog = compile_to_catalog(<<-MANIFEST)
1056
+ with([hi], [bye]) |Array[Array[String, 1, 1]] *$passed| {
1057
+ notify { $passed[0][0]: }
1058
+ notify { $passed[1][0]: }
1059
+ }
1060
+ MANIFEST
842
1061
 
843
- resource = catalog.resource('Class', 'Something')
844
- expect(resource['configuron']).to eq('defrabulated')
845
- end
846
- end
1062
+ expect(catalog).to have_resource('Notify[hi]')
1063
+ expect(catalog).to have_resource('Notify[bye]')
1064
+ end
847
1065
 
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
1066
+ it 'raises an error when a required argument follows an optional one' do
1067
+ expect do
1068
+ compile_to_catalog(<<-MANIFEST)
1069
+ with() |$y = first, $x, Array[String, 1] *$passed = bye| {}
1070
+ MANIFEST
1071
+ end.to raise_error(/Parameter \$x is required/)
1072
+ end
851
1073
 
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) { }
1074
+ it 'raises an error when the minimum size of a slurped argument makes it required and it follows an optional argument' do
1075
+ expect do
1076
+ compile_to_catalog(<<-MANIFEST)
1077
+ with() |$x = first, Array[String, 1] *$passed| {}
1078
+ MANIFEST
1079
+ end.to raise_error(/Parameter \$passed is required/)
1080
+ end
856
1081
 
857
- class app::web($port = $app::port) inherits app {
858
- notify { expected: message => "$port" }
1082
+ it 'allows slurped arguments with a minimum size of 0 after an optional argument' do
1083
+ catalog = compile_to_catalog(<<-MANIFEST)
1084
+ with() |$x = first, Array[String, 0] *$passed| {
1085
+ notify { $x: }
859
1086
  }
860
- MANIFEST
1087
+ MANIFEST
861
1088
 
862
- catalog = compile_to_catalog(manifest, node)
1089
+ expect(catalog).to have_resource('Notify[first]')
1090
+ end
863
1091
 
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
1092
+ it 'accepts a Resource as a Type' do
1093
+ catalog = compile_to_catalog(<<-MANIFEST)
1094
+ define bar($text) { }
1095
+ bar { 'joke': text => 'knock knock' }
1096
+
1097
+ with(Bar[joke]) |Type[Bar] $joke| { notify { "${joke[text]}": } }
1098
+ MANIFEST
1099
+ expect(catalog).to have_resource("Notify[knock knock]")
868
1100
  end
869
1101
  end
870
1102
  end
871
1103
 
872
- describe "when managing resource overrides" do
873
-
874
- before do
875
- @override = stub 'override', :ref => "File[/foo]", :type => "my"
876
- @resource = resource(:file, "/foo")
877
- end
1104
+ describe "the compiler when handling aliases" do
1105
+ include PuppetSpec::Compiler
878
1106
 
879
- it "should be able to store overrides" do
880
- expect { @compiler.add_override(@override) }.not_to raise_error
1107
+ def extract_name(ref)
1108
+ ref.sub(/.*\[(\w+)\]/, '\1')
881
1109
  end
882
1110
 
883
- it "should apply overrides to the appropriate resources" do
884
- @compiler.add_resource(@scope, @resource)
885
- @resource.expects(:merge).with(@override)
1111
+ def assert_created_relationships(catalog, type_name, expectations)
1112
+ resources = catalog.resources.select { |res| res.type == type_name }
886
1113
 
887
- @compiler.add_override(@override)
1114
+ actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
1115
+ resources.map do |res|
1116
+ dependents = Array(res[relation])
1117
+ dependents.map { |ref| [res.title, extract_name(ref)] }
1118
+ end.inject(&:concat)
1119
+ end
888
1120
 
889
- @compiler.compile
1121
+ expect(actual_relationships).to match_array(expectations[:relationships] || [])
1122
+ expect(actual_subscriptions).to match_array(expectations[:subscriptions] || [])
890
1123
  end
891
1124
 
892
- it "should accept overrides before the related resource has been created" do
893
- @resource.expects(:merge).with(@override)
894
-
895
- # First store the override
896
- @compiler.add_override(@override)
897
-
898
- # Then the resource
899
- @compiler.add_resource(@scope, @resource)
900
-
901
- # And compile, so they get resolved
902
- @compiler.compile
1125
+ it 'allows a relationship to be formed using metaparam relationship' do
1126
+ node = Puppet::Node.new("testnodex")
1127
+ catalog = compile_to_catalog(<<-PP, node)
1128
+ notify { 'actual_2': before => 'Notify[alias_1]' }
1129
+ notify { 'actual_1': alias => 'alias_1' }
1130
+ PP
1131
+ assert_created_relationships(catalog, 'Notify', { :relationships => [['actual_2', 'alias_1']] })
903
1132
  end
904
1133
 
905
- it "should fail if the compile is finished and resource overrides have not been applied" do
906
- @compiler.add_override(@override)
1134
+ it 'allows a relationship to be formed using -> operator and alias' do
1135
+ node = Puppet::Node.new("testnodex")
1136
+ catalog = compile_to_catalog(<<-PP, node)
1137
+ notify { 'actual_2': }
1138
+ notify { 'actual_1': alias => 'alias_1' }
1139
+ Notify[actual_2] -> Notify[alias_1]
1140
+ PP
1141
+ assert_created_relationships(catalog, 'Notify', { :relationships => [['actual_2', 'alias_1']] })
1142
+ end
907
1143
 
908
- expect { @compiler.compile }.to raise_error Puppet::ParseError, 'Could not find resource(s) File[/foo] for overriding'
1144
+ it 'errors when an alias cannot be found when relationship is formed with -> operator' do
1145
+ node = Puppet::Node.new("testnodex")
1146
+ expect {
1147
+ catalog = compile_to_catalog(<<-PP, node)
1148
+ notify { 'actual_2': }
1149
+ notify { 'actual_1': alias => 'alias_1' }
1150
+ Notify[actual_2] -> Notify[alias_2]
1151
+ PP
1152
+ }.to raise_error(/Could not find resource 'Notify\[alias_2\]'/)
909
1153
  end
910
1154
  end
911
1155
 
1156
+ describe 'the compiler when using collection and override' do
1157
+ include PuppetSpec::Compiler
912
1158
 
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':
1159
+ it 'allows an override when there is a default present' do
1160
+ catalog = compile_to_catalog(<<-MANIFEST)
1161
+ Package { require => Class['bar'] }
1162
+ class bar { }
1163
+ class foo {
1164
+ package { 'python': }
1165
+ package { 'pip': require => Package['python'] }
1166
+
1167
+ Package <| title == 'pip' |> {
1168
+ name => "python-pip",
1169
+ category => undef,
917
1170
  }
918
- MANIFEST
919
-
920
- Puppet::Parser::Resource::Catalog.any_instance.expects(:to_resource).with do |catalog|
921
- Puppet.lookup(:current_environment).name == :production
922
- end
923
-
924
- Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
1171
+ }
1172
+ include foo
1173
+ include bar
1174
+ MANIFEST
1175
+ package = catalog.resource('Package', 'pip')
1176
+ expect(catalog.resource('Package', 'pip')[:require].to_s).to eql('Package[python]')
925
1177
  end
1178
+
926
1179
  end
927
1180
  end