puppet 3.6.2 → 3.7.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (751) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +2 -3
  3. data/Gemfile +14 -10
  4. data/README.md +1 -1
  5. data/ext/build_defaults.yaml +16 -1
  6. data/ext/debian/control +3 -2
  7. data/ext/debian/puppet-common.dirs +1 -0
  8. data/ext/debian/puppet-common.postinst +8 -8
  9. data/ext/debian/puppet-common.postrm +2 -1
  10. data/ext/project_data.yaml +16 -12
  11. data/ext/rack/example-passenger-vhost.conf +2 -2
  12. data/ext/redhat/puppet.spec.erb +6 -3
  13. data/ext/windows/service/daemon.rb +47 -41
  14. data/install.rb +1 -1
  15. data/lib/puppet.rb +34 -24
  16. data/lib/puppet/application.rb +34 -1
  17. data/lib/puppet/application/agent.rb +9 -8
  18. data/lib/puppet/application/apply.rb +14 -5
  19. data/lib/puppet/application/doc.rb +4 -11
  20. data/lib/puppet/application/master.rb +19 -17
  21. data/lib/puppet/application/queue.rb +1 -1
  22. data/lib/puppet/application/resource.rb +0 -1
  23. data/lib/puppet/configurer.rb +39 -2
  24. data/lib/puppet/configurer/downloader.rb +5 -10
  25. data/lib/puppet/configurer/downloader_factory.rb +34 -0
  26. data/lib/puppet/configurer/plugin_handler.rb +11 -17
  27. data/lib/puppet/defaults.rb +244 -119
  28. data/lib/puppet/environments.rb +8 -0
  29. data/lib/puppet/external/nagios/base.rb +1 -1
  30. data/lib/puppet/external/pson/pure/generator.rb +1 -8
  31. data/lib/puppet/face/ca.rb +7 -0
  32. data/lib/puppet/face/file/download.rb +5 -2
  33. data/lib/puppet/face/file/store.rb +1 -1
  34. data/lib/puppet/face/instrumentation_data.rb +2 -1
  35. data/lib/puppet/face/instrumentation_listener.rb +2 -1
  36. data/lib/puppet/face/instrumentation_probe.rb +2 -1
  37. data/lib/puppet/face/module/build.rb +2 -2
  38. data/lib/puppet/face/module/generate.rb +20 -12
  39. data/lib/puppet/face/module/install.rb +4 -3
  40. data/lib/puppet/face/module/uninstall.rb +7 -0
  41. data/lib/puppet/face/module/upgrade.rb +11 -3
  42. data/lib/puppet/face/node/clean.rb +1 -1
  43. data/lib/puppet/face/parser.rb +99 -7
  44. data/lib/puppet/feature/base.rb +18 -12
  45. data/lib/puppet/feature/cfacter.rb +14 -0
  46. data/lib/puppet/feature/pe_license.rb +4 -0
  47. data/lib/puppet/file_bucket/dipper.rb +19 -12
  48. data/lib/puppet/file_bucket/file.rb +73 -10
  49. data/lib/puppet/file_serving/configuration/parser.rb +3 -3
  50. data/lib/puppet/file_system.rb +1 -1
  51. data/lib/puppet/file_system/file19.rb +41 -0
  52. data/lib/puppet/file_system/file19windows.rb +0 -1
  53. data/lib/puppet/file_system/uniquefile.rb +190 -0
  54. data/lib/puppet/forge.rb +34 -7
  55. data/lib/puppet/forge/errors.rb +5 -6
  56. data/lib/puppet/forge/repository.rb +14 -2
  57. data/lib/puppet/functions.rb +19 -12
  58. data/lib/puppet/functions/assert_type.rb +27 -10
  59. data/lib/puppet/functions/each.rb +111 -0
  60. data/lib/puppet/functions/epp.rb +54 -0
  61. data/lib/puppet/functions/filter.rb +113 -0
  62. data/lib/puppet/functions/inline_epp.rb +88 -0
  63. data/lib/puppet/functions/map.rb +97 -0
  64. data/lib/puppet/functions/match.rb +102 -0
  65. data/lib/puppet/functions/reduce.rb +94 -0
  66. data/lib/puppet/functions/slice.rb +126 -0
  67. data/lib/puppet/functions/with.rb +23 -0
  68. data/lib/puppet/indirector/catalog/compiler.rb +4 -4
  69. data/lib/puppet/indirector/data_binding/hiera.rb +2 -45
  70. data/lib/puppet/indirector/facts/couch.rb +3 -1
  71. data/lib/puppet/indirector/facts/facter.rb +52 -65
  72. data/lib/puppet/indirector/file_bucket_file/file.rb +6 -3
  73. data/lib/puppet/indirector/hiera.rb +48 -0
  74. data/lib/puppet/indirector/indirection.rb +1 -1
  75. data/lib/puppet/indirector/request.rb +9 -3
  76. data/lib/puppet/indirector/resource/ral.rb +1 -1
  77. data/lib/puppet/indirector/rest.rb +7 -3
  78. data/lib/puppet/loaders.rb +0 -1
  79. data/lib/puppet/module.rb +2 -1
  80. data/lib/puppet/module_tool.rb +2 -0
  81. data/lib/puppet/module_tool/applications/application.rb +4 -5
  82. data/lib/puppet/module_tool/applications/builder.rb +64 -5
  83. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -2
  84. data/lib/puppet/module_tool/applications/unpacker.rb +14 -0
  85. data/lib/puppet/module_tool/applications/upgrader.rb +23 -13
  86. data/lib/puppet/module_tool/dependency.rb +12 -0
  87. data/lib/puppet/module_tool/errors/shared.rb +1 -1
  88. data/lib/puppet/module_tool/errors/upgrader.rb +20 -0
  89. data/lib/puppet/module_tool/installed_modules.rb +6 -1
  90. data/lib/puppet/module_tool/metadata.rb +53 -3
  91. data/lib/puppet/module_tool/modulefile.rb +1 -1
  92. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +7 -0
  93. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
  94. data/lib/puppet/module_tool/skeleton/templates/generator/spec/spec_helper.rb +1 -17
  95. data/lib/puppet/module_tool/tar/mini.rb +20 -2
  96. data/lib/puppet/network/http.rb +5 -0
  97. data/lib/puppet/network/http/api/v1.rb +2 -2
  98. data/lib/puppet/network/http/api/v2/environments.rb +15 -1
  99. data/lib/puppet/network/http/connection.rb +54 -68
  100. data/lib/puppet/network/http/factory.rb +44 -0
  101. data/lib/puppet/network/http/handler.rb +12 -6
  102. data/lib/puppet/network/http/nocache_pool.rb +21 -0
  103. data/lib/puppet/network/http/pool.rb +120 -0
  104. data/lib/puppet/network/http/rack/rest.rb +3 -1
  105. data/lib/puppet/network/http/session.rb +17 -0
  106. data/lib/puppet/network/http/site.rb +39 -0
  107. data/lib/puppet/network/http/webrick/rest.rb +3 -1
  108. data/lib/puppet/network/http_pool.rb +3 -4
  109. data/lib/puppet/node.rb +19 -6
  110. data/lib/puppet/node/environment.rb +34 -8
  111. data/lib/puppet/parser/ast/collection.rb +4 -0
  112. data/lib/puppet/parser/ast/collexpr.rb +1 -1
  113. data/lib/puppet/parser/ast/node.rb +5 -0
  114. data/lib/puppet/parser/ast/pops_bridge.rb +49 -6
  115. data/lib/puppet/parser/compiler.rb +66 -38
  116. data/lib/puppet/parser/e4_parser_adapter.rb +2 -2
  117. data/lib/puppet/parser/files.rb +76 -33
  118. data/lib/puppet/parser/functions.rb +1 -7
  119. data/lib/puppet/parser/functions/assert_type.rb +31 -0
  120. data/lib/puppet/parser/functions/contain.rb +15 -5
  121. data/lib/puppet/parser/functions/create_resources.rb +5 -1
  122. data/lib/puppet/parser/functions/digest.rb +5 -0
  123. data/lib/puppet/parser/functions/each.rb +46 -107
  124. data/lib/puppet/parser/functions/epp.rb +13 -9
  125. data/lib/puppet/parser/functions/file.rb +20 -12
  126. data/lib/puppet/parser/functions/filter.rb +32 -88
  127. data/lib/puppet/parser/functions/include.rb +12 -24
  128. data/lib/puppet/parser/functions/inline_epp.rb +9 -12
  129. data/lib/puppet/parser/functions/lookup.rb +1 -1
  130. data/lib/puppet/parser/functions/map.rb +30 -83
  131. data/lib/puppet/parser/functions/match.rb +28 -0
  132. data/lib/puppet/parser/functions/reduce.rb +69 -98
  133. data/lib/puppet/parser/functions/require.rb +13 -5
  134. data/lib/puppet/parser/functions/search.rb +6 -1
  135. data/lib/puppet/parser/functions/slice.rb +35 -103
  136. data/lib/puppet/parser/functions/template.rb +12 -5
  137. data/lib/puppet/parser/functions/with.rb +21 -0
  138. data/lib/puppet/parser/lexer.rb +1 -1
  139. data/lib/puppet/parser/parser_factory.rb +21 -33
  140. data/lib/puppet/parser/resource.rb +2 -3
  141. data/lib/puppet/parser/scope.rb +85 -15
  142. data/lib/puppet/pops.rb +9 -11
  143. data/lib/puppet/pops/adapters.rb +2 -1
  144. data/lib/puppet/pops/binder/bindings_checker.rb +4 -4
  145. data/lib/puppet/pops/binder/bindings_factory.rb +6 -6
  146. data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
  147. data/lib/puppet/pops/binder/bindings_loader.rb +2 -2
  148. data/lib/puppet/pops/binder/bindings_model.rb +58 -191
  149. data/lib/puppet/pops/binder/bindings_model_dumper.rb +1 -1
  150. data/lib/puppet/pops/binder/bindings_model_meta.rb +215 -0
  151. data/lib/puppet/pops/binder/injector.rb +9 -9
  152. data/lib/puppet/pops/binder/key_factory.rb +2 -2
  153. data/lib/puppet/pops/binder/lookup.rb +14 -6
  154. data/lib/puppet/pops/binder/producers.rb +9 -12
  155. data/lib/puppet/pops/evaluator/access_operator.rb +35 -29
  156. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +175 -0
  157. data/lib/puppet/pops/evaluator/callable_signature.rb +1 -2
  158. data/lib/puppet/pops/evaluator/closure.rb +151 -35
  159. data/lib/puppet/pops/evaluator/compare_operator.rb +26 -22
  160. data/lib/puppet/pops/evaluator/epp_evaluator.rb +16 -15
  161. data/lib/puppet/pops/evaluator/evaluator_impl.rb +277 -229
  162. data/lib/puppet/pops/evaluator/relationship_operator.rb +3 -2
  163. data/lib/puppet/pops/evaluator/runtime3_support.rb +86 -53
  164. data/lib/puppet/pops/functions/dispatch.rb +9 -4
  165. data/lib/puppet/pops/functions/dispatcher.rb +2 -169
  166. data/lib/puppet/pops/issue_reporter.rb +14 -6
  167. data/lib/puppet/pops/issues.rb +96 -21
  168. data/lib/puppet/pops/loader/base_loader.rb +3 -3
  169. data/lib/puppet/pops/loader/loader.rb +1 -1
  170. data/lib/puppet/pops/loader/loader_paths.rb +2 -21
  171. data/lib/puppet/pops/loader/ruby_function_instantiator.rb +1 -1
  172. data/lib/puppet/pops/loader/static_loader.rb +12 -2
  173. data/lib/puppet/pops/model/ast_transformer.rb +4 -24
  174. data/lib/puppet/pops/model/factory.rb +72 -10
  175. data/lib/puppet/pops/model/model.rb +82 -574
  176. data/lib/puppet/pops/model/model_label_provider.rb +4 -2
  177. data/lib/puppet/pops/model/model_meta.rb +576 -0
  178. data/lib/puppet/pops/model/model_tree_dumper.rb +27 -5
  179. data/lib/puppet/pops/parser/egrammar.ra +209 -221
  180. data/lib/puppet/pops/parser/eparser.rb +1459 -1431
  181. data/lib/puppet/pops/parser/evaluating_parser.rb +15 -75
  182. data/lib/puppet/pops/parser/lexer2.rb +14 -10
  183. data/lib/puppet/pops/parser/lexer_support.rb +6 -0
  184. data/lib/puppet/pops/parser/locator.rb +1 -1
  185. data/lib/puppet/pops/parser/parser_support.rb +31 -49
  186. data/lib/puppet/pops/patterns.rb +10 -10
  187. data/lib/puppet/pops/semantic_error.rb +1 -1
  188. data/lib/puppet/pops/types/class_loader.rb +24 -13
  189. data/lib/puppet/pops/types/type_calculator.rb +188 -87
  190. data/lib/puppet/pops/types/type_factory.rb +79 -53
  191. data/lib/puppet/pops/types/type_parser.rb +22 -16
  192. data/lib/puppet/pops/types/types.rb +283 -392
  193. data/lib/puppet/pops/types/types_meta.rb +223 -0
  194. data/lib/puppet/pops/utils.rb +16 -14
  195. data/lib/puppet/pops/validation/checker4_0.rb +264 -18
  196. data/lib/puppet/pops/validation/validator_factory_4_0.rb +0 -1
  197. data/lib/puppet/pops/visitor.rb +0 -103
  198. data/lib/puppet/provider/exec.rb +10 -1
  199. data/lib/puppet/provider/file/windows.rb +3 -4
  200. data/lib/puppet/provider/group/windows_adsi.rb +10 -10
  201. data/lib/puppet/provider/nameservice/directoryservice.rb +3 -4
  202. data/lib/puppet/provider/package/apt.rb +5 -1
  203. data/lib/puppet/provider/package/gem.rb +7 -3
  204. data/lib/puppet/provider/package/openbsd.rb +84 -7
  205. data/lib/puppet/provider/package/pacman.rb +29 -4
  206. data/lib/puppet/provider/package/rpm.rb +5 -7
  207. data/lib/puppet/provider/package/sun.rb +5 -1
  208. data/lib/puppet/provider/package/windows.rb +6 -1
  209. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  210. data/lib/puppet/provider/package/windows/msi_package.rb +1 -1
  211. data/lib/puppet/provider/package/windows/package.rb +13 -1
  212. data/lib/puppet/provider/package/yum.rb +7 -3
  213. data/lib/puppet/provider/package/zypper.rb +5 -1
  214. data/lib/puppet/provider/parsedfile.rb +17 -1
  215. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +6 -12
  216. data/lib/puppet/provider/service/freebsd.rb +12 -12
  217. data/lib/puppet/provider/service/init.rb +5 -0
  218. data/lib/puppet/provider/service/launchd.rb +0 -3
  219. data/lib/puppet/provider/service/openbsd.rb +8 -7
  220. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +2 -2
  221. data/lib/puppet/provider/sshkey/parsed.rb +5 -0
  222. data/lib/puppet/provider/user/user_role_add.rb +5 -4
  223. data/lib/puppet/provider/user/windows_adsi.rb +8 -8
  224. data/lib/puppet/provider/zone/solaris.rb +1 -1
  225. data/lib/puppet/reference/metaparameter.rb +8 -6
  226. data/lib/puppet/reports/store.rb +4 -9
  227. data/lib/puppet/resource.rb +75 -11
  228. data/lib/puppet/resource/catalog.rb +9 -7
  229. data/lib/puppet/resource/type.rb +27 -0
  230. data/lib/puppet/settings.rb +61 -41
  231. data/lib/puppet/settings/base_setting.rb +9 -3
  232. data/lib/puppet/settings/environment_conf.rb +32 -4
  233. data/lib/puppet/settings/file_setting.rb +9 -1
  234. data/lib/puppet/settings/priority_setting.rb +5 -5
  235. data/lib/puppet/ssl.rb +1 -0
  236. data/lib/puppet/ssl/certificate_authority.rb +15 -6
  237. data/lib/puppet/ssl/certificate_authority/autosign_command.rb +2 -1
  238. data/lib/puppet/ssl/host.rb +3 -2
  239. data/lib/puppet/ssl/inventory.rb +11 -6
  240. data/lib/puppet/ssl/validator/default_validator.rb +1 -0
  241. data/lib/puppet/ssl/validator/no_validator.rb +3 -0
  242. data/lib/puppet/transaction.rb +29 -0
  243. data/lib/puppet/transaction/resource_harness.rb +16 -3
  244. data/lib/puppet/type.rb +71 -49
  245. data/lib/puppet/type/exec.rb +36 -8
  246. data/lib/puppet/type/file.rb +56 -16
  247. data/lib/puppet/type/file/content.rb +3 -3
  248. data/lib/puppet/type/file/mode.rb +12 -3
  249. data/lib/puppet/type/file/source.rb +4 -1
  250. data/lib/puppet/type/group.rb +1 -1
  251. data/lib/puppet/type/mount.rb +1 -3
  252. data/lib/puppet/type/resources.rb +59 -35
  253. data/lib/puppet/type/ssh_authorized_key.rb +54 -16
  254. data/lib/puppet/type/sshkey.rb +1 -1
  255. data/lib/puppet/type/user.rb +17 -11
  256. data/lib/puppet/type/yumrepo.rb +59 -8
  257. data/lib/puppet/type/zone.rb +3 -6
  258. data/lib/puppet/util.rb +64 -55
  259. data/lib/puppet/util/autoload.rb +2 -2
  260. data/lib/puppet/util/colors.rb +61 -19
  261. data/lib/puppet/util/command_line.rb +21 -4
  262. data/lib/puppet/util/execution.rb +41 -29
  263. data/lib/puppet/util/feature.rb +15 -4
  264. data/lib/puppet/util/filetype.rb +6 -2
  265. data/lib/puppet/util/http_proxy.rb +29 -2
  266. data/lib/puppet/util/lockfile.rb +1 -1
  267. data/lib/puppet/util/log/destinations.rb +7 -3
  268. data/lib/puppet/util/logging.rb +44 -14
  269. data/lib/puppet/util/pidlock.rb +11 -5
  270. data/lib/puppet/util/posix.rb +21 -31
  271. data/lib/puppet/util/profiler.rb +17 -9
  272. data/lib/puppet/util/profiler/aggregate.rb +85 -0
  273. data/lib/puppet/util/profiler/around_profiler.rb +67 -0
  274. data/lib/puppet/util/profiler/logging.rb +12 -11
  275. data/lib/puppet/util/profiler/wall_clock.rb +7 -6
  276. data/lib/puppet/util/rdoc.rb +8 -1
  277. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +1 -1
  278. data/lib/puppet/util/suidmanager.rb +1 -8
  279. data/lib/puppet/util/windows.rb +14 -3
  280. data/lib/puppet/util/windows/access_control_list.rb +4 -4
  281. data/lib/puppet/util/{adsi.rb → windows/adsi.rb} +99 -37
  282. data/lib/puppet/util/windows/api_types.rb +255 -0
  283. data/lib/puppet/util/windows/com.rb +224 -0
  284. data/lib/puppet/util/windows/error.rb +72 -5
  285. data/lib/puppet/util/windows/file.rb +254 -132
  286. data/lib/puppet/util/windows/process.rb +293 -177
  287. data/lib/puppet/util/windows/registry.rb +12 -2
  288. data/lib/puppet/util/windows/root_certs.rb +16 -9
  289. data/lib/puppet/util/windows/security.rb +501 -232
  290. data/lib/puppet/util/windows/sid.rb +80 -36
  291. data/lib/puppet/util/windows/string.rb +2 -0
  292. data/lib/puppet/util/windows/taskscheduler.rb +1241 -0
  293. data/lib/puppet/util/windows/user.rb +241 -57
  294. data/lib/puppet/vendor.rb +3 -1
  295. data/lib/puppet/vendor/load_pathspec.rb +1 -0
  296. data/lib/puppet/vendor/load_rgen.rb +1 -0
  297. data/lib/puppet/vendor/pathspec/CHANGELOG.md +2 -0
  298. data/lib/puppet/vendor/pathspec/LICENSE +201 -0
  299. data/lib/puppet/vendor/pathspec/PUPPET_README.md +6 -0
  300. data/lib/puppet/vendor/pathspec/README.md +53 -0
  301. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +121 -0
  302. data/lib/puppet/vendor/pathspec/lib/pathspec/gitignorespec.rb +275 -0
  303. data/lib/puppet/vendor/pathspec/lib/pathspec/regexspec.rb +17 -0
  304. data/lib/puppet/vendor/pathspec/lib/pathspec/spec.rb +14 -0
  305. data/lib/puppet/vendor/require_vendored.rb +2 -0
  306. data/lib/puppet/vendor/rgen/CHANGELOG +197 -0
  307. data/lib/puppet/vendor/rgen/MIT-LICENSE +20 -0
  308. data/lib/puppet/vendor/rgen/PUPPET_README.md +6 -0
  309. data/lib/puppet/vendor/rgen/README.rdoc +78 -0
  310. data/lib/puppet/vendor/rgen/Rakefile +41 -0
  311. data/lib/puppet/vendor/rgen/TODO +41 -0
  312. data/lib/puppet/vendor/rgen/anounce.txt +61 -0
  313. data/lib/puppet/vendor/rgen/design_rationale.txt +71 -0
  314. data/lib/puppet/vendor/rgen/lib/ea_support/ea_support.rb +54 -0
  315. data/lib/puppet/vendor/rgen/lib/ea_support/id_store.rb +32 -0
  316. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel.rb +562 -0
  317. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_ext.rb +45 -0
  318. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_metamodel_generator.rb +43 -0
  319. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_ea_to_uml13.rb +103 -0
  320. data/lib/puppet/vendor/rgen/lib/ea_support/uml13_to_uml13_ea.rb +89 -0
  321. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel.rb +559 -0
  322. data/lib/puppet/vendor/rgen/lib/metamodels/uml13_metamodel_ext.rb +26 -0
  323. data/lib/puppet/vendor/rgen/lib/mmgen/metamodel_generator.rb +20 -0
  324. data/lib/puppet/vendor/rgen/lib/mmgen/mm_ext/ecore_mmgen_ext.rb +91 -0
  325. data/lib/puppet/vendor/rgen/lib/mmgen/mmgen.rb +28 -0
  326. data/lib/puppet/vendor/rgen/lib/mmgen/templates/annotations.tpl +37 -0
  327. data/lib/puppet/vendor/rgen/lib/mmgen/templates/metamodel_generator.tpl +172 -0
  328. data/lib/puppet/vendor/rgen/lib/rgen/array_extensions.rb +45 -0
  329. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore.rb +218 -0
  330. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_builder_methods.rb +81 -0
  331. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_ext.rb +69 -0
  332. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_interface.rb +47 -0
  333. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ecore_to_ruby.rb +167 -0
  334. data/lib/puppet/vendor/rgen/lib/rgen/ecore/ruby_to_ecore.rb +91 -0
  335. data/lib/puppet/vendor/rgen/lib/rgen/environment.rb +129 -0
  336. data/lib/puppet/vendor/rgen/lib/rgen/fragment/dump_file_cache.rb +63 -0
  337. data/lib/puppet/vendor/rgen/lib/rgen/fragment/fragmented_model.rb +140 -0
  338. data/lib/puppet/vendor/rgen/lib/rgen/fragment/model_fragment.rb +289 -0
  339. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_instantiator.rb +66 -0
  340. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/abstract_xml_instantiator.rb +66 -0
  341. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/default_xml_instantiator.rb +117 -0
  342. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/ecore_xml_instantiator.rb +169 -0
  343. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_instantiator.rb +126 -0
  344. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.rb +331 -0
  345. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/json_parser.y +94 -0
  346. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/nodebased_xml_instantiator.rb +137 -0
  347. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/qualified_name_resolver.rb +97 -0
  348. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/reference_resolver.rb +128 -0
  349. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/resolution_helper.rb +47 -0
  350. data/lib/puppet/vendor/rgen/lib/rgen/instantiator/xmi11_instantiator.rb +168 -0
  351. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder.rb +224 -0
  352. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_extensions.rb +556 -0
  353. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/builder_runtime.rb +174 -0
  354. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/constant_order_helper.rb +89 -0
  355. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/data_types.rb +77 -0
  356. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/annotation.rb +30 -0
  357. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/intermediate/feature.rb +168 -0
  358. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/mm_multiple.rb +23 -0
  359. data/lib/puppet/vendor/rgen/lib/rgen/metamodel_builder/module_extension.rb +42 -0
  360. data/lib/puppet/vendor/rgen/lib/rgen/model_builder.rb +32 -0
  361. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/builder_context.rb +334 -0
  362. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/model_serializer.rb +225 -0
  363. data/lib/puppet/vendor/rgen/lib/rgen/model_builder/reference_resolver.rb +156 -0
  364. data/lib/puppet/vendor/rgen/lib/rgen/serializer/json_serializer.rb +121 -0
  365. data/lib/puppet/vendor/rgen/lib/rgen/serializer/opposite_reference_filter.rb +18 -0
  366. data/lib/puppet/vendor/rgen/lib/rgen/serializer/qualified_name_provider.rb +47 -0
  367. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi11_serializer.rb +116 -0
  368. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xmi20_serializer.rb +71 -0
  369. data/lib/puppet/vendor/rgen/lib/rgen/serializer/xml_serializer.rb +98 -0
  370. data/lib/puppet/vendor/rgen/lib/rgen/template_language.rb +297 -0
  371. data/lib/puppet/vendor/rgen/lib/rgen/template_language/directory_template_container.rb +83 -0
  372. data/lib/puppet/vendor/rgen/lib/rgen/template_language/output_handler.rb +87 -0
  373. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_container.rb +234 -0
  374. data/lib/puppet/vendor/rgen/lib/rgen/template_language/template_helper.rb +26 -0
  375. data/lib/puppet/vendor/rgen/lib/rgen/transformer.rb +475 -0
  376. data/lib/puppet/vendor/rgen/lib/rgen/util/auto_class_creator.rb +61 -0
  377. data/lib/puppet/vendor/rgen/lib/rgen/util/cached_glob.rb +67 -0
  378. data/lib/puppet/vendor/rgen/lib/rgen/util/file_cache_map.rb +124 -0
  379. data/lib/puppet/vendor/rgen/lib/rgen/util/file_change_detector.rb +84 -0
  380. data/lib/puppet/vendor/rgen/lib/rgen/util/method_delegation.rb +114 -0
  381. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator.rb +68 -0
  382. data/lib/puppet/vendor/rgen/lib/rgen/util/model_comparator_base.rb +142 -0
  383. data/lib/puppet/vendor/rgen/lib/rgen/util/model_dumper.rb +29 -0
  384. data/lib/puppet/vendor/rgen/lib/rgen/util/name_helper.rb +42 -0
  385. data/lib/puppet/vendor/rgen/lib/rgen/util/pattern_matcher.rb +329 -0
  386. data/lib/puppet/vendor/rgen/lib/transformers/ecore_to_uml13.rb +79 -0
  387. data/lib/puppet/vendor/rgen/lib/transformers/uml13_to_ecore.rb +127 -0
  388. data/lib/puppet/vendor/rgen/test/array_extensions_test.rb +64 -0
  389. data/lib/puppet/vendor/rgen/test/ea_instantiator_test.rb +35 -0
  390. data/lib/puppet/vendor/rgen/test/ea_serializer_test.rb +23 -0
  391. data/lib/puppet/vendor/rgen/test/ecore_self_test.rb +54 -0
  392. data/lib/puppet/vendor/rgen/test/environment_test.rb +90 -0
  393. data/lib/puppet/vendor/rgen/test/json_test.rb +171 -0
  394. data/lib/puppet/vendor/rgen/test/metamodel_builder_test.rb +1482 -0
  395. data/lib/puppet/vendor/rgen/test/metamodel_from_ecore_test.rb +57 -0
  396. data/lib/puppet/vendor/rgen/test/metamodel_order_test.rb +131 -0
  397. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test.rb +98 -0
  398. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/TestModel.rb +70 -0
  399. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel.ecore +42 -0
  400. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/houseMetamodel_from_ecore.rb +44 -0
  401. data/lib/puppet/vendor/rgen/test/metamodel_roundtrip_test/using_builtin_types.ecore +9 -0
  402. data/lib/puppet/vendor/rgen/test/method_delegation_test.rb +178 -0
  403. data/lib/puppet/vendor/rgen/test/model_builder/builder_context_test.rb +59 -0
  404. data/lib/puppet/vendor/rgen/test/model_builder/builder_test.rb +242 -0
  405. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original.rb +163 -0
  406. data/lib/puppet/vendor/rgen/test/model_builder/ecore_original_regenerated.rb +163 -0
  407. data/lib/puppet/vendor/rgen/test/model_builder/reference_resolver_test.rb +156 -0
  408. data/lib/puppet/vendor/rgen/test/model_builder/serializer_test.rb +94 -0
  409. data/lib/puppet/vendor/rgen/test/model_builder/statemachine_metamodel.rb +42 -0
  410. data/lib/puppet/vendor/rgen/test/model_builder/test_model/statemachine1.rb +23 -0
  411. data/lib/puppet/vendor/rgen/test/model_builder_test.rb +6 -0
  412. data/lib/puppet/vendor/rgen/test/model_fragment_test.rb +30 -0
  413. data/lib/puppet/vendor/rgen/test/output_handler_test.rb +58 -0
  414. data/lib/puppet/vendor/rgen/test/qualified_name_provider_test.rb +48 -0
  415. data/lib/puppet/vendor/rgen/test/qualified_name_resolver_test.rb +102 -0
  416. data/lib/puppet/vendor/rgen/test/reference_resolver_test.rb +117 -0
  417. data/lib/puppet/vendor/rgen/test/rgen_test.rb +26 -0
  418. data/lib/puppet/vendor/rgen/test/template_language_test.rb +163 -0
  419. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result1.txt +29 -0
  420. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result2.txt +9 -0
  421. data/lib/puppet/vendor/rgen/test/template_language_test/expected_result3.txt +4 -0
  422. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestDefaultIndent.out +1 -0
  423. data/lib/puppet/vendor/rgen/test/template_language_test/indentStringTestTabIndent.out +1 -0
  424. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/a.tpl +12 -0
  425. data/lib/puppet/vendor/rgen/test/template_language_test/templates/callback_indent_test/b.tpl +5 -0
  426. data/lib/puppet/vendor/rgen/test/template_language_test/templates/code/array.tpl +11 -0
  427. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/author.tpl +7 -0
  428. data/lib/puppet/vendor/rgen/test/template_language_test/templates/content/chapter.tpl +5 -0
  429. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/local.tpl +8 -0
  430. data/lib/puppet/vendor/rgen/test/template_language_test/templates/define_local_test/test.tpl +8 -0
  431. data/lib/puppet/vendor/rgen/test/template_language_test/templates/evaluate_test/test.tpl +7 -0
  432. data/lib/puppet/vendor/rgen/test/template_language_test/templates/indent_string_test.tpl +12 -0
  433. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/c/cmod.tpl +1 -0
  434. data/lib/puppet/vendor/rgen/test/template_language_test/templates/index/chapter.tpl +3 -0
  435. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_backslash_r_test.tpl +5 -0
  436. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/no_indent.tpl +3 -0
  437. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/sub1/no_indent.tpl +3 -0
  438. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test.tpl +24 -0
  439. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test2.tpl +13 -0
  440. data/lib/puppet/vendor/rgen/test/template_language_test/templates/no_indent_test/test3.tpl +10 -0
  441. data/lib/puppet/vendor/rgen/test/template_language_test/templates/null_context_test.tpl +17 -0
  442. data/lib/puppet/vendor/rgen/test/template_language_test/templates/root.tpl +31 -0
  443. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1.tpl +9 -0
  444. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/sub1/sub1.tpl +3 -0
  445. data/lib/puppet/vendor/rgen/test/template_language_test/templates/template_resolution_test/test.tpl +4 -0
  446. data/lib/puppet/vendor/rgen/test/template_language_test/testout.txt +29 -0
  447. data/lib/puppet/vendor/rgen/test/testmodel/class_model_checker.rb +119 -0
  448. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.eap +0 -0
  449. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel.xml +1029 -0
  450. data/lib/puppet/vendor/rgen/test/testmodel/ea_testmodel_partial.xml +317 -0
  451. data/lib/puppet/vendor/rgen/test/testmodel/ecore_model_checker.rb +101 -0
  452. data/lib/puppet/vendor/rgen/test/testmodel/manual_testmodel.xml +22 -0
  453. data/lib/puppet/vendor/rgen/test/testmodel/object_model_checker.rb +67 -0
  454. data/lib/puppet/vendor/rgen/test/transformer_test.rb +254 -0
  455. data/lib/puppet/vendor/rgen/test/util/file_cache_map_test.rb +99 -0
  456. data/lib/puppet/vendor/rgen/test/util/pattern_matcher_test.rb +97 -0
  457. data/lib/puppet/vendor/rgen/test/util_test.rb +5 -0
  458. data/lib/puppet/vendor/rgen/test/xml_instantiator_test.rb +160 -0
  459. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_ecore_model_checker.rb +94 -0
  460. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_ecore_instantiator.rb +53 -0
  461. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_metamodel.rb +49 -0
  462. data/lib/puppet/vendor/rgen/test/xml_instantiator_test/simple_xmi_to_ecore.rb +75 -0
  463. data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +6 -0
  464. data/lib/puppet/vendor/semantic/PUPPET_README.md +6 -0
  465. data/lib/puppet/version.rb +1 -1
  466. data/spec/fixtures/integration/node/environment/sitedir2/00_a.pp +2 -0
  467. data/spec/fixtures/integration/node/environment/sitedir2/02_folder/01_b.pp +6 -0
  468. data/spec/fixtures/integration/node/environment/sitedir2/03_c.pp +1 -0
  469. data/spec/fixtures/integration/node/environment/sitedir2/04_include.pp +2 -0
  470. data/spec/fixtures/releases/jamtur01-apache/manifests/vhost.pp +1 -1
  471. data/spec/fixtures/unit/indirector/hiera/global.yaml +10 -0
  472. data/spec/fixtures/unit/indirector/hiera/invalid.yaml +1 -0
  473. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/init.pp +3 -0
  474. data/spec/fixtures/unit/parser/functions/create_resources/foo/manifests/wrongdefine.pp +3 -0
  475. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +2 -2
  476. data/spec/fixtures/unit/parser/lexer/casestatement.pp +14 -14
  477. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +3 -3
  478. data/spec/fixtures/unit/parser/lexer/classincludes.pp +3 -3
  479. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +1 -1
  480. data/spec/fixtures/unit/parser/lexer/collection_override.pp +1 -1
  481. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +2 -2
  482. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +5 -5
  483. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +2 -2
  484. data/spec/fixtures/unit/parser/lexer/filecreate.pp +2 -2
  485. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +1 -1
  486. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +4 -4
  487. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +3 -3
  488. data/spec/fixtures/unit/parser/lexer/multisubs.pp +2 -2
  489. data/spec/fixtures/unit/parser/lexer/namevartest.pp +2 -2
  490. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +1 -1
  491. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +1 -1
  492. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +14 -14
  493. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +3 -3
  494. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +3 -3
  495. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +1 -1
  496. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +1 -1
  497. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +2 -2
  498. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +5 -5
  499. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +2 -2
  500. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +2 -2
  501. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +1 -1
  502. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +4 -4
  503. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +3 -3
  504. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +2 -2
  505. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +2 -2
  506. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +1 -1
  507. data/spec/fixtures/unit/provider/package/gem/gem-list-single-package +4 -0
  508. data/spec/fixtures/unit/type/user/authorized_keys +1 -1
  509. data/spec/integration/agent/logging_spec.rb +4 -0
  510. data/spec/integration/application/doc_spec.rb +4 -3
  511. data/spec/integration/configurer_spec.rb +0 -14
  512. data/spec/integration/defaults_spec.rb +26 -0
  513. data/spec/integration/environments/default_manifest_spec.rb +274 -0
  514. data/spec/integration/faces/documentation_spec.rb +0 -4
  515. data/spec/integration/file_bucket/file_spec.rb +21 -0
  516. data/spec/integration/indirector/catalog/compiler_spec.rb +0 -2
  517. data/spec/integration/indirector/catalog/queue_spec.rb +0 -2
  518. data/spec/integration/indirector/facts/facter_spec.rb +1 -1
  519. data/spec/integration/indirector/file_content/file_server_spec.rb +2 -2
  520. data/spec/integration/node/environment_spec.rb +24 -8
  521. data/spec/integration/parser/catalog_spec.rb +10 -10
  522. data/spec/integration/parser/class_spec.rb +37 -0
  523. data/spec/integration/parser/collector_spec.rb +234 -75
  524. data/spec/integration/parser/compiler_spec.rb +385 -401
  525. data/spec/integration/parser/conditionals_spec.rb +117 -0
  526. data/spec/integration/parser/future_compiler_spec.rb +359 -8
  527. data/spec/integration/parser/node_spec.rb +185 -0
  528. data/spec/integration/parser/resource_expressions_spec.rb +286 -0
  529. data/spec/integration/parser/ruby_manifest_spec.rb +0 -4
  530. data/spec/integration/parser/scope_spec.rb +94 -151
  531. data/spec/integration/provider/cron/crontab_spec.rb +137 -148
  532. data/spec/integration/ssl/certificate_authority_spec.rb +26 -0
  533. data/spec/integration/ssl/certificate_request_spec.rb +0 -6
  534. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -2
  535. data/spec/integration/ssl/host_spec.rb +0 -2
  536. data/spec/integration/transaction_spec.rb +16 -0
  537. data/spec/integration/type/file_spec.rb +14 -13
  538. data/spec/integration/type/nagios_spec.rb +6 -15
  539. data/spec/integration/type/sshkey_spec.rb +22 -0
  540. data/spec/integration/type/tidy_spec.rb +3 -0
  541. data/spec/integration/type/user_spec.rb +8 -3
  542. data/spec/integration/util/autoload_spec.rb +6 -6
  543. data/spec/integration/util/rdoc/parser_spec.rb +7 -0
  544. data/spec/integration/util/windows/process_spec.rb +12 -0
  545. data/spec/integration/util/windows/security_spec.rb +36 -35
  546. data/spec/integration/util/windows/user_spec.rb +75 -9
  547. data/spec/integration/util_spec.rb +2 -2
  548. data/spec/lib/matchers/resource.rb +1 -0
  549. data/spec/lib/puppet_spec/compiler.rb +15 -2
  550. data/spec/lib/puppet_spec/files.rb +10 -0
  551. data/spec/lib/puppet_spec/language.rb +74 -0
  552. data/spec/lib/puppet_spec/matchers.rb +59 -32
  553. data/spec/lib/puppet_spec/module_tool/stub_source.rb +3 -0
  554. data/spec/shared_behaviours/hiera_indirections.rb +99 -0
  555. data/spec/shared_behaviours/iterative_functions.rb +69 -0
  556. data/spec/unit/application/apply_spec.rb +4 -2
  557. data/spec/unit/application/doc_spec.rb +17 -13
  558. data/spec/unit/application/master_spec.rb +35 -27
  559. data/spec/unit/application/resource_spec.rb +0 -5
  560. data/spec/unit/configurer/downloader_factory_spec.rb +96 -0
  561. data/spec/unit/configurer/downloader_spec.rb +3 -24
  562. data/spec/unit/configurer/plugin_handler_spec.rb +22 -22
  563. data/spec/unit/configurer_spec.rb +0 -4
  564. data/spec/unit/defaults_spec.rb +30 -0
  565. data/spec/unit/face/config_spec.rb +2 -1
  566. data/spec/unit/face/module/build_spec.rb +2 -2
  567. data/spec/unit/face/module/install_spec.rb +8 -8
  568. data/spec/unit/face/parser_spec.rb +71 -33
  569. data/spec/unit/file_bucket/file_spec.rb +2 -2
  570. data/spec/unit/file_system/uniquefile_spec.rb +184 -0
  571. data/spec/unit/forge/errors_spec.rb +4 -6
  572. data/spec/unit/forge/module_release_spec.rb +178 -89
  573. data/spec/unit/forge/repository_spec.rb +110 -2
  574. data/spec/unit/forge_spec.rb +39 -3
  575. data/spec/unit/functions/assert_type_spec.rb +22 -3
  576. data/spec/unit/{parser/methods → functions}/each_spec.rb +21 -1
  577. data/spec/unit/{parser/functions → functions}/epp_spec.rb +61 -9
  578. data/spec/unit/{parser/methods → functions}/filter_spec.rb +34 -38
  579. data/spec/unit/{parser/functions → functions}/inline_epp_spec.rb +18 -3
  580. data/spec/unit/functions/map_spec.rb +169 -0
  581. data/spec/unit/functions/match_spec.rb +57 -0
  582. data/spec/unit/{parser/methods → functions}/reduce_spec.rb +23 -5
  583. data/spec/unit/{parser/methods → functions}/slice_spec.rb +34 -21
  584. data/spec/unit/functions/with_spec.rb +35 -0
  585. data/spec/unit/functions4_spec.rb +7 -8
  586. data/spec/unit/indirector/catalog/compiler_spec.rb +0 -2
  587. data/spec/unit/indirector/catalog/static_compiler_spec.rb +11 -0
  588. data/spec/unit/indirector/data_binding/hiera_spec.rb +1 -96
  589. data/spec/unit/indirector/facts/facter_spec.rb +69 -102
  590. data/spec/unit/indirector/hiera_spec.rb +17 -0
  591. data/spec/unit/indirector/request_spec.rb +2 -4
  592. data/spec/unit/indirector/resource/ral_spec.rb +5 -0
  593. data/spec/unit/indirector/resource_type/parser_spec.rb +17 -12
  594. data/spec/unit/indirector/rest_spec.rb +36 -6
  595. data/spec/unit/interface/face_collection_spec.rb +2 -2
  596. data/spec/unit/module_tool/applications/builder_spec.rb +364 -14
  597. data/spec/unit/module_tool/applications/uninstaller_spec.rb +22 -0
  598. data/spec/unit/module_tool/applications/unpacker_spec.rb +40 -0
  599. data/spec/unit/module_tool/applications/upgrader_spec.rb +22 -0
  600. data/spec/unit/module_tool/installed_modules_spec.rb +49 -0
  601. data/spec/unit/module_tool/metadata_spec.rb +72 -4
  602. data/spec/unit/module_tool/tar/mini_spec.rb +2 -1
  603. data/spec/unit/network/authentication_spec.rb +4 -0
  604. data/spec/unit/network/http/api/v2/environments_spec.rb +24 -3
  605. data/spec/unit/network/http/connection_spec.rb +127 -92
  606. data/spec/unit/network/http/factory_spec.rb +82 -0
  607. data/spec/unit/network/http/handler_spec.rb +23 -13
  608. data/spec/unit/network/http/nocache_pool_spec.rb +43 -0
  609. data/spec/unit/network/http/pool_spec.rb +269 -0
  610. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  611. data/spec/unit/network/http/session_spec.rb +43 -0
  612. data/spec/unit/network/http/site_spec.rb +90 -0
  613. data/spec/unit/network/http/webrick_spec.rb +1 -1
  614. data/spec/unit/network/http_pool_spec.rb +9 -6
  615. data/spec/unit/network/http_spec.rb +10 -0
  616. data/spec/unit/node/environment_spec.rb +54 -0
  617. data/spec/unit/node_spec.rb +3 -5
  618. data/spec/unit/parser/compiler_spec.rb +9 -2
  619. data/spec/unit/parser/files_spec.rb +19 -0
  620. data/spec/unit/parser/functions/contain_spec.rb +51 -0
  621. data/spec/unit/parser/functions/create_resources_spec.rb +8 -1
  622. data/spec/unit/parser/functions/digest_spec.rb +31 -0
  623. data/spec/unit/parser/functions/file_spec.rb +48 -5
  624. data/spec/unit/parser/functions/include_spec.rb +15 -1
  625. data/spec/unit/parser/functions/realize_spec.rb +43 -35
  626. data/spec/unit/parser/functions/require_spec.rb +19 -5
  627. data/spec/unit/parser/functions/search_spec.rb +5 -0
  628. data/spec/unit/parser/functions/shared.rb +82 -0
  629. data/spec/unit/parser/functions_spec.rb +1 -1
  630. data/spec/unit/parser/lexer_spec.rb +10 -1
  631. data/spec/unit/parser/type_loader_spec.rb +0 -1
  632. data/spec/unit/pops/benchmark_spec.rb +1 -1
  633. data/spec/unit/pops/binder/bindings_composer_spec.rb +24 -22
  634. data/spec/unit/pops/binder/injector_spec.rb +8 -6
  635. data/spec/unit/pops/evaluator/access_ops_spec.rb +3 -3
  636. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +7 -4
  637. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +250 -30
  638. data/spec/unit/pops/evaluator/logical_ops_spec.rb +2 -2
  639. data/spec/unit/pops/evaluator/variables_spec.rb +0 -105
  640. data/spec/unit/pops/issues_spec.rb +170 -0
  641. data/spec/unit/pops/loaders/dependency_loader_spec.rb +17 -0
  642. data/spec/unit/pops/loaders/loader_paths_spec.rb +4 -15
  643. data/spec/unit/pops/loaders/loaders_spec.rb +31 -11
  644. data/spec/unit/pops/loaders/module_loaders_spec.rb +0 -29
  645. data/spec/unit/pops/loaders/static_loader_spec.rb +6 -0
  646. data/spec/unit/pops/parser/epp_parser_spec.rb +38 -9
  647. data/spec/unit/pops/parser/evaluating_parser_spec.rb +0 -1
  648. data/spec/unit/pops/parser/lexer2_spec.rb +21 -4
  649. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +5 -0
  650. data/spec/unit/pops/parser/parse_calls_spec.rb +6 -3
  651. data/spec/unit/pops/parser/parse_conditionals_spec.rb +12 -5
  652. data/spec/unit/pops/parser/parse_containers_spec.rb +62 -7
  653. data/spec/unit/pops/parser/parse_resource_spec.rb +155 -73
  654. data/spec/unit/pops/parser/parser_spec.rb +16 -0
  655. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +72 -0
  656. data/spec/unit/pops/transformer/transform_calls_spec.rb +1 -1
  657. data/spec/unit/pops/types/type_calculator_spec.rb +254 -57
  658. data/spec/unit/pops/types/type_factory_spec.rb +8 -3
  659. data/spec/unit/pops/types/type_parser_spec.rb +26 -5
  660. data/spec/unit/pops/validator/validator_spec.rb +143 -27
  661. data/spec/unit/provider/exec/posix_spec.rb +22 -14
  662. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  663. data/spec/unit/provider/file/windows_spec.rb +7 -7
  664. data/spec/unit/provider/group/windows_adsi_spec.rb +17 -17
  665. data/spec/unit/provider/package/gem_spec.rb +10 -0
  666. data/spec/unit/provider/package/openbsd_spec.rb +66 -9
  667. data/spec/unit/provider/package/pacman_spec.rb +90 -71
  668. data/spec/unit/provider/package/windows/package_spec.rb +21 -6
  669. data/spec/unit/provider/package/yum_spec.rb +1 -0
  670. data/spec/unit/provider/parsedfile_spec.rb +1 -1
  671. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +9 -9
  672. data/spec/unit/provider/service/openbsd_spec.rb +26 -2
  673. data/spec/unit/provider/service/upstart_spec.rb +12 -1
  674. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +6 -0
  675. data/spec/unit/provider/user/user_role_add_spec.rb +23 -1
  676. data/spec/unit/provider/user/windows_adsi_spec.rb +17 -17
  677. data/spec/unit/reports/store_spec.rb +0 -16
  678. data/spec/unit/resource/catalog_spec.rb +0 -5
  679. data/spec/unit/resource_spec.rb +2 -2
  680. data/spec/unit/settings/autosign_setting_spec.rb +2 -2
  681. data/spec/unit/settings/environment_conf_spec.rb +77 -10
  682. data/spec/unit/settings/file_setting_spec.rb +5 -4
  683. data/spec/unit/settings/priority_setting_spec.rb +4 -4
  684. data/spec/unit/settings_spec.rb +41 -3
  685. data/spec/unit/ssl/certificate_authority_spec.rb +25 -2
  686. data/spec/unit/ssl/inventory_spec.rb +13 -0
  687. data/spec/unit/ssl/validator_spec.rb +0 -1
  688. data/spec/unit/transaction/resource_harness_spec.rb +64 -0
  689. data/spec/unit/transaction_spec.rb +98 -47
  690. data/spec/unit/type/cron_spec.rb +3 -3
  691. data/spec/unit/type/exec_spec.rb +9 -0
  692. data/spec/unit/type/file/content_spec.rb +54 -71
  693. data/spec/unit/type/file/mode_spec.rb +26 -1
  694. data/spec/unit/type/file/source_spec.rb +26 -4
  695. data/spec/unit/type/file_spec.rb +3 -3
  696. data/spec/unit/type/nagios_spec.rb +12 -3
  697. data/spec/unit/type/resources_spec.rb +64 -30
  698. data/spec/unit/type/user_spec.rb +1 -1
  699. data/spec/unit/type/yumrepo_spec.rb +136 -0
  700. data/spec/unit/type/zone_spec.rb +44 -1
  701. data/spec/unit/type_spec.rb +20 -0
  702. data/spec/unit/util/colors_spec.rb +14 -8
  703. data/spec/unit/util/command_line_spec.rb +11 -7
  704. data/spec/unit/util/execution_spec.rb +35 -42
  705. data/spec/unit/util/feature_spec.rb +12 -0
  706. data/spec/unit/util/http_proxy_spec.rb +43 -1
  707. data/spec/unit/util/log/destinations_spec.rb +45 -1
  708. data/spec/unit/util/logging_spec.rb +38 -0
  709. data/spec/unit/util/pidlock_spec.rb +37 -1
  710. data/spec/unit/util/profiler/aggregate_spec.rb +59 -0
  711. data/spec/unit/util/profiler/around_profiler_spec.rb +61 -0
  712. data/spec/unit/util/profiler/logging_spec.rb +18 -29
  713. data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
  714. data/spec/unit/util/profiler_spec.rb +55 -0
  715. data/spec/unit/util/queue_spec.rb +0 -1
  716. data/spec/unit/util/rdoc/parser_spec.rb +14 -6
  717. data/spec/unit/util/tagging_spec.rb +1 -1
  718. data/spec/unit/util/windows/access_control_entry_spec.rb +1 -1
  719. data/spec/unit/util/{adsi_spec.rb → windows/adsi_spec.rb} +111 -108
  720. data/spec/unit/util/windows/api_types_spec.rb +28 -0
  721. data/spec/unit/util/windows/registry_spec.rb +7 -6
  722. data/spec/unit/util/windows/sid_spec.rb +3 -6
  723. data/spec/unit/util/windows/string_spec.rb +4 -0
  724. data/spec/unit/util/zaml_spec.rb +5 -1
  725. data/tasks/benchmark.rake +40 -5
  726. data/tasks/parser.rake +16 -2
  727. data/tasks/yard.rake +1 -1
  728. metadata +296 -68
  729. data/lib/puppet/file_system/tempfile.rb +0 -20
  730. data/lib/puppet/parser/e_parser_adapter.rb +0 -119
  731. data/lib/puppet/parser/functions/collect.rb +0 -15
  732. data/lib/puppet/parser/functions/select.rb +0 -15
  733. data/lib/puppet/pops/loader/ruby_legacy_function_instantiator.rb +0 -109
  734. data/lib/puppet/pops/parser/lexer.rb +0 -753
  735. data/lib/puppet/pops/parser/makefile +0 -6
  736. data/lib/puppet/pops/validation/checker3_1.rb +0 -558
  737. data/lib/puppet/pops/validation/validator_factory_3_1.rb +0 -31
  738. data/lib/puppet/util/profiler/none.rb +0 -8
  739. data/spec/unit/face/certificate_request_spec.rb +0 -7
  740. data/spec/unit/face/certificate_revocation_list_spec.rb +0 -7
  741. data/spec/unit/face/key_spec.rb +0 -7
  742. data/spec/unit/face/report_spec.rb +0 -7
  743. data/spec/unit/face/resource_spec.rb +0 -7
  744. data/spec/unit/face/resource_type_spec.rb +0 -7
  745. data/spec/unit/file_system/tempfile_spec.rb +0 -48
  746. data/spec/unit/parser/eparser_adapter_spec.rb +0 -407
  747. data/spec/unit/parser/methods/map_spec.rb +0 -184
  748. data/spec/unit/parser/methods/shared.rb +0 -45
  749. data/spec/unit/pops/parser/lexer_spec.rb +0 -840
  750. data/spec/unit/pops/transformer/transform_resource_spec.rb +0 -185
  751. data/spec/unit/util/profiler/none_spec.rb +0 -12
@@ -15,527 +15,511 @@ describe "Puppet::Parser::Compiler" do
15
15
  @scope = stub 'scope', :resource => @scope_resource, :source => mock("source")
16
16
  end
17
17
 
18
- after do
19
- Puppet.settings.clear
20
- end
21
-
22
- # shared because tests are invoked both for classic and future parser
23
- #
24
- shared_examples_for "the compiler" do
25
- it "should be able to determine the configuration version from a local version control repository" do
26
- pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows", :if => Puppet.features.microsoft_windows?) do
27
- # This should always work, because we should always be
28
- # in the puppet repo when we run this.
29
- version = %x{git rev-parse HEAD}.chomp
18
+ it "should be able to determine the configuration version from a local version control repository" do
19
+ pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows", :if => Puppet.features.microsoft_windows?) do
20
+ # This should always work, because we should always be
21
+ # in the puppet repo when we run this.
22
+ version = %x{git rev-parse HEAD}.chomp
30
23
 
31
- Puppet.settings[:config_version] = 'git rev-parse HEAD'
24
+ Puppet.settings[:config_version] = 'git rev-parse HEAD'
32
25
 
33
- @parser = Puppet::Parser::ParserFactory.parser "development"
34
- @compiler = Puppet::Parser::Compiler.new(@node)
26
+ @parser = Puppet::Parser::ParserFactory.parser "development"
27
+ @compiler = Puppet::Parser::Compiler.new(@node)
35
28
 
36
- @compiler.catalog.version.should == version
37
- end
29
+ @compiler.catalog.version.should == version
38
30
  end
31
+ end
32
+
33
+ it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
34
+ Puppet[:code] = <<-PP
35
+ class foo
36
+ {
37
+ notify { foo_notify: }
38
+ include bar
39
+ }
40
+ class bar
41
+ {
42
+ notify { bar_notify: }
43
+ }
44
+ PP
45
+
46
+ @node.stubs(:classes).returns(['foo', 'bar'])
47
+
48
+ catalog = Puppet::Parser::Compiler.compile(@node)
49
+
50
+ catalog.resource("Notify[foo_notify]").should_not be_nil
51
+ catalog.resource("Notify[bar_notify]").should_not be_nil
52
+ end
39
53
 
40
- it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
54
+ describe "when resolving class references" do
55
+ it "should favor local scope, even if there's an included class in topscope" do
41
56
  Puppet[:code] = <<-PP
42
- class foo
43
- {
44
- notify { foo_notify: }
45
- include bar
57
+ class experiment {
58
+ class baz {
59
+ }
60
+ notify {"x" : require => Class[Baz] }
46
61
  }
47
- class bar
48
- {
49
- notify { bar_notify: }
62
+ class baz {
50
63
  }
64
+ include baz
65
+ include experiment
66
+ include experiment::baz
51
67
  PP
52
68
 
53
- @node.stubs(:classes).returns(['foo', 'bar'])
69
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
54
70
 
55
- catalog = Puppet::Parser::Compiler.compile(@node)
71
+ notify_resource = catalog.resource( "Notify[x]" )
56
72
 
57
- catalog.resource("Notify[foo_notify]").should_not be_nil
58
- catalog.resource("Notify[bar_notify]").should_not be_nil
73
+ notify_resource[:require].title.should == "Experiment::Baz"
59
74
  end
60
75
 
61
- describe "when resolving class references" do
62
- it "should favor local scope, even if there's an included class in topscope" do
63
- Puppet[:code] = <<-PP
64
- class experiment {
65
- class baz {
66
- }
67
- notify {"x" : require => Class[Baz] }
68
- }
76
+ it "should favor local scope, even if there's an unincluded class in topscope" do
77
+ Puppet[:code] = <<-PP
78
+ class experiment {
69
79
  class baz {
70
80
  }
71
- include baz
72
- include experiment
73
- include experiment::baz
74
- PP
75
-
76
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
81
+ notify {"x" : require => Class[Baz] }
82
+ }
83
+ class baz {
84
+ }
85
+ include experiment
86
+ include experiment::baz
87
+ PP
77
88
 
78
- notify_resource = catalog.resource( "Notify[x]" )
89
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
79
90
 
80
- notify_resource[:require].title.should == "Experiment::Baz"
81
- end
91
+ notify_resource = catalog.resource( "Notify[x]" )
82
92
 
83
- it "should favor local scope, even if there's an unincluded class in topscope" do
84
- Puppet[:code] = <<-PP
85
- class experiment {
86
- class baz {
93
+ notify_resource[:require].title.should == "Experiment::Baz"
94
+ end
95
+ end
96
+ describe "(ticket #13349) when explicitly specifying top scope" do
97
+ ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
98
+ describe "with #{include}" do
99
+ it "should find the top level class" do
100
+ Puppet[:code] = <<-MANIFEST
101
+ class { 'foo::test': }
102
+ class foo::test {
103
+ #{include}
87
104
  }
88
- notify {"x" : require => Class[Baz] }
89
- }
90
- class baz {
91
- }
92
- include experiment
93
- include experiment::baz
94
- PP
95
-
96
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
105
+ class bar::baz {
106
+ notify { 'good!': }
107
+ }
108
+ class foo::bar::baz {
109
+ notify { 'bad!': }
110
+ }
111
+ MANIFEST
97
112
 
98
- notify_resource = catalog.resource( "Notify[x]" )
113
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
99
114
 
100
- notify_resource[:require].title.should == "Experiment::Baz"
101
- end
102
- end
103
- describe "(ticket #13349) when explicitly specifying top scope" do
104
- ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
105
- describe "with #{include}" do
106
- it "should find the top level class" do
107
- Puppet[:code] = <<-MANIFEST
108
- class { 'foo::test': }
109
- class foo::test {
110
- #{include}
111
- }
112
- class bar::baz {
113
- notify { 'good!': }
114
- }
115
- class foo::bar::baz {
116
- notify { 'bad!': }
117
- }
118
- MANIFEST
119
-
120
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
121
-
122
- catalog.resource("Class[Bar::Baz]").should_not be_nil
123
- catalog.resource("Notify[good!]").should_not be_nil
124
- catalog.resource("Class[Foo::Bar::Baz]").should be_nil
125
- catalog.resource("Notify[bad!]").should be_nil
126
- end
115
+ catalog.resource("Class[Bar::Baz]").should_not be_nil
116
+ catalog.resource("Notify[good!]").should_not be_nil
117
+ catalog.resource("Class[Foo::Bar::Baz]").should be_nil
118
+ catalog.resource("Notify[bad!]").should be_nil
127
119
  end
128
120
  end
129
121
  end
122
+ end
130
123
 
131
- it "should recompute the version after input files are re-parsed" do
132
- Puppet[:code] = 'class foo { }'
133
- Time.stubs(:now).returns(1)
134
- node = Puppet::Node.new('mynode')
135
- Puppet::Parser::Compiler.compile(node).version.should == 1
136
- Time.stubs(:now).returns(2)
137
- Puppet::Parser::Compiler.compile(node).version.should == 1 # no change because files didn't change
138
- Puppet::Resource::TypeCollection.any_instance.stubs(:stale?).returns(true).then.returns(false) # pretend change
139
- Puppet::Parser::Compiler.compile(node).version.should == 2
140
- end
141
-
142
- ['class', 'define', 'node'].each do |thing|
143
- it "should not allow '#{thing}' inside evaluated conditional constructs" do
144
- Puppet[:code] = <<-PP
145
- if true {
146
- #{thing} foo {
147
- }
148
- notify { decoy: }
149
- }
150
- PP
151
-
152
- begin
153
- Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
154
- raise "compilation should have raised Puppet::Error"
155
- rescue Puppet::Error => e
156
- e.message.should =~ /at line 2/
157
- end
158
- end
159
- end
124
+ it "should recompute the version after input files are re-parsed" do
125
+ Puppet[:code] = 'class foo { }'
126
+ Time.stubs(:now).returns(1)
127
+ node = Puppet::Node.new('mynode')
128
+ Puppet::Parser::Compiler.compile(node).version.should == 1
129
+ Time.stubs(:now).returns(2)
130
+ Puppet::Parser::Compiler.compile(node).version.should == 1 # no change because files didn't change
131
+ Puppet::Resource::TypeCollection.any_instance.stubs(:stale?).returns(true).then.returns(false) # pretend change
132
+ Puppet::Parser::Compiler.compile(node).version.should == 2
133
+ end
160
134
 
161
- it "should not allow classes inside unevaluated conditional constructs" do
135
+ ['class', 'define', 'node'].each do |thing|
136
+ it "should not allow '#{thing}' inside evaluated conditional constructs" do
162
137
  Puppet[:code] = <<-PP
163
- if false {
164
- class foo {
138
+ if true {
139
+ #{thing} foo {
165
140
  }
141
+ notify { decoy: }
166
142
  }
167
143
  PP
168
144
 
169
- lambda { Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode")) }.should raise_error(Puppet::Error)
145
+ begin
146
+ Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
147
+ raise "compilation should have raised Puppet::Error"
148
+ rescue Puppet::Error => e
149
+ e.message.should =~ /at line 2/
150
+ end
170
151
  end
152
+ end
171
153
 
172
- describe "when defining relationships" do
173
- def extract_name(ref)
174
- ref.sub(/File\[(\w+)\]/, '\1')
175
- end
154
+ it "should not allow classes inside unevaluated conditional constructs" do
155
+ Puppet[:code] = <<-PP
156
+ if false {
157
+ class foo {
158
+ }
159
+ }
160
+ PP
176
161
 
177
- let(:node) { Puppet::Node.new('mynode') }
178
- let(:code) do
179
- <<-MANIFEST
180
- file { [a,b,c]:
181
- mode => 0644,
182
- }
183
- file { [d,e]:
184
- mode => 0755,
185
- }
186
- MANIFEST
187
- end
188
- let(:expected_relationships) { [] }
189
- let(:expected_subscriptions) { [] }
162
+ lambda { Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode")) }.should raise_error(Puppet::Error)
163
+ end
190
164
 
191
- before :each do
192
- Puppet[:code] = code
193
- end
165
+ describe "when defining relationships" do
166
+ def extract_name(ref)
167
+ ref.sub(/File\[(\w+)\]/, '\1')
168
+ end
194
169
 
195
- after :each do
196
- catalog = Puppet::Parser::Compiler.compile(node)
170
+ let(:node) { Puppet::Node.new('mynode') }
171
+ let(:code) do
172
+ <<-MANIFEST
173
+ file { [a,b,c]:
174
+ mode => '0644',
175
+ }
176
+ file { [d,e]:
177
+ mode => '0755',
178
+ }
179
+ MANIFEST
180
+ end
181
+ let(:expected_relationships) { [] }
182
+ let(:expected_subscriptions) { [] }
197
183
 
198
- resources = catalog.resources.select { |res| res.type == 'File' }
184
+ before :each do
185
+ Puppet[:code] = code
186
+ end
199
187
 
200
- actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
201
- resources.map do |res|
202
- dependents = Array(res[relation])
203
- dependents.map { |ref| [res.title, extract_name(ref)] }
204
- end.inject(&:concat)
205
- end
188
+ after :each do
189
+ catalog = Puppet::Parser::Compiler.compile(node)
206
190
 
207
- actual_relationships.should =~ expected_relationships
208
- actual_subscriptions.should =~ expected_subscriptions
191
+ resources = catalog.resources.select { |res| res.type == 'File' }
192
+
193
+ actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
194
+ resources.map do |res|
195
+ dependents = Array(res[relation])
196
+ dependents.map { |ref| [res.title, extract_name(ref)] }
197
+ end.inject(&:concat)
209
198
  end
210
199
 
211
- it "should create a relationship" do
212
- code << "File[a] -> File[b]"
200
+ actual_relationships.should =~ expected_relationships
201
+ actual_subscriptions.should =~ expected_subscriptions
202
+ end
213
203
 
214
- expected_relationships << ['a','b']
215
- end
204
+ it "should create a relationship" do
205
+ code << "File[a] -> File[b]"
216
206
 
217
- it "should create a subscription" do
218
- code << "File[a] ~> File[b]"
207
+ expected_relationships << ['a','b']
208
+ end
219
209
 
220
- expected_subscriptions << ['a', 'b']
221
- end
210
+ it "should create a subscription" do
211
+ code << "File[a] ~> File[b]"
222
212
 
223
- it "should create relationships using title arrays" do
224
- code << "File[a,b] -> File[c,d]"
213
+ expected_subscriptions << ['a', 'b']
214
+ end
225
215
 
226
- expected_relationships.concat [
227
- ['a', 'c'],
228
- ['b', 'c'],
229
- ['a', 'd'],
230
- ['b', 'd'],
231
- ]
232
- end
216
+ it "should create relationships using title arrays" do
217
+ code << "File[a,b] -> File[c,d]"
233
218
 
234
- it "should create relationships using collection expressions" do
235
- code << "File <| mode == 0644 |> -> File <| mode == 0755 |>"
236
-
237
- expected_relationships.concat [
238
- ['a', 'd'],
239
- ['b', 'd'],
240
- ['c', 'd'],
241
- ['a', 'e'],
242
- ['b', 'e'],
243
- ['c', 'e'],
244
- ]
245
- end
219
+ expected_relationships.concat [
220
+ ['a', 'c'],
221
+ ['b', 'c'],
222
+ ['a', 'd'],
223
+ ['b', 'd'],
224
+ ]
225
+ end
246
226
 
247
- it "should create relationships using resource names" do
248
- code << "'File[a]' -> 'File[b]'"
227
+ it "should create relationships using collection expressions" do
228
+ code << "File <| mode == 0644 |> -> File <| mode == 0755 |>"
229
+
230
+ expected_relationships.concat [
231
+ ['a', 'd'],
232
+ ['b', 'd'],
233
+ ['c', 'd'],
234
+ ['a', 'e'],
235
+ ['b', 'e'],
236
+ ['c', 'e'],
237
+ ]
238
+ end
249
239
 
250
- expected_relationships << ['a', 'b']
251
- end
240
+ it "should create relationships using resource names" do
241
+ code << "'File[a]' -> 'File[b]'"
252
242
 
253
- it "should create relationships using variables" do
254
- code << <<-MANIFEST
255
- $var = File[a]
256
- $var -> File[b]
257
- MANIFEST
243
+ expected_relationships << ['a', 'b']
244
+ end
258
245
 
259
- expected_relationships << ['a', 'b']
260
- end
246
+ it "should create relationships using variables" do
247
+ code << <<-MANIFEST
248
+ $var = File[a]
249
+ $var -> File[b]
250
+ MANIFEST
261
251
 
262
- it "should create relationships using case statements" do
263
- code << <<-MANIFEST
264
- $var = 10
265
- case $var {
266
- 10: {
267
- file { s1: }
268
- }
269
- 12: {
270
- file { s2: }
271
- }
252
+ expected_relationships << ['a', 'b']
253
+ end
254
+
255
+ it "should create relationships using case statements" do
256
+ code << <<-MANIFEST
257
+ $var = 10
258
+ case $var {
259
+ 10: {
260
+ file { s1: }
272
261
  }
273
- ->
274
- case $var + 2 {
275
- 10: {
276
- file { t1: }
277
- }
278
- 12: {
279
- file { t2: }
280
- }
262
+ 12: {
263
+ file { s2: }
281
264
  }
282
- MANIFEST
265
+ }
266
+ ->
267
+ case $var + 2 {
268
+ 10: {
269
+ file { t1: }
270
+ }
271
+ 12: {
272
+ file { t2: }
273
+ }
274
+ }
275
+ MANIFEST
283
276
 
284
- expected_relationships << ['s1', 't2']
285
- end
277
+ expected_relationships << ['s1', 't2']
278
+ end
286
279
 
287
- it "should create relationships using array members" do
288
- code << <<-MANIFEST
289
- $var = [ [ [ File[a], File[b] ] ] ]
290
- $var[0][0][0] -> $var[0][0][1]
291
- MANIFEST
280
+ it "should create relationships using array members" do
281
+ code << <<-MANIFEST
282
+ $var = [ [ [ File[a], File[b] ] ] ]
283
+ $var[0][0][0] -> $var[0][0][1]
284
+ MANIFEST
292
285
 
293
- expected_relationships << ['a', 'b']
294
- end
286
+ expected_relationships << ['a', 'b']
287
+ end
295
288
 
296
- it "should create relationships using hash members" do
297
- code << <<-MANIFEST
298
- $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
299
- $var[foo][bar][source] -> $var[foo][bar][target]
300
- MANIFEST
289
+ it "should create relationships using hash members" do
290
+ code << <<-MANIFEST
291
+ $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
292
+ $var[foo][bar][source] -> $var[foo][bar][target]
293
+ MANIFEST
301
294
 
302
- expected_relationships << ['a', 'b']
303
- end
295
+ expected_relationships << ['a', 'b']
296
+ end
304
297
 
305
- it "should create relationships using resource declarations" do
306
- code << "file { l: } -> file { r: }"
298
+ it "should create relationships using resource declarations" do
299
+ code << "file { l: } -> file { r: }"
307
300
 
308
- expected_relationships << ['l', 'r']
309
- end
301
+ expected_relationships << ['l', 'r']
302
+ end
310
303
 
311
- it "should chain relationships" do
312
- code << "File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]"
304
+ it "should chain relationships" do
305
+ code << "File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]"
313
306
 
314
- expected_relationships << ['a', 'b'] << ['d', 'c']
315
- expected_subscriptions << ['b', 'c'] << ['e', 'd']
316
- end
307
+ expected_relationships << ['a', 'b'] << ['d', 'c']
308
+ expected_subscriptions << ['b', 'c'] << ['e', 'd']
317
309
  end
310
+ end
318
311
 
319
- context 'when working with immutable node data' do
320
- context 'and have opted in to immutable_node_data' do
321
- before :each do
322
- Puppet[:immutable_node_data] = true
323
- end
312
+ context 'when working with immutable node data' do
313
+ context 'and have opted in to immutable_node_data' do
314
+ before :each do
315
+ Puppet[:immutable_node_data] = true
316
+ end
324
317
 
325
- def node_with_facts(facts)
326
- Puppet[:facts_terminus] = :memory
327
- Puppet::Node::Facts.indirection.save(Puppet::Node::Facts.new("testing", facts))
328
- node = Puppet::Node.new("testing")
329
- node.fact_merge
330
- node
331
- end
318
+ def node_with_facts(facts)
319
+ Puppet[:facts_terminus] = :memory
320
+ Puppet::Node::Facts.indirection.save(Puppet::Node::Facts.new("testing", facts))
321
+ node = Puppet::Node.new("testing")
322
+ node.fact_merge
323
+ node
324
+ end
332
325
 
333
- matcher :fail_compile_with do |node, message_regex|
334
- match do |manifest|
335
- @error = nil
336
- begin
337
- compile_to_catalog(manifest, node)
338
- false
339
- rescue Puppet::Error => e
340
- @error = e
341
- message_regex.match(e.message)
342
- end
326
+ matcher :fail_compile_with do |node, message_regex|
327
+ match do |manifest|
328
+ @error = nil
329
+ begin
330
+ PuppetSpec::Compiler.compile_to_catalog(manifest, node)
331
+ false
332
+ rescue Puppet::Error => e
333
+ @error = e
334
+ message_regex.match(e.message)
343
335
  end
336
+ end
344
337
 
345
- failure_message_for_should do
346
- if @error
347
- "failed with #{@error}\n#{@error.backtrace}"
348
- else
349
- "did not fail"
350
- end
338
+ failure_message_for_should do
339
+ if @error
340
+ "failed with #{@error}\n#{@error.backtrace}"
341
+ else
342
+ "did not fail"
351
343
  end
352
344
  end
345
+ end
353
346
 
354
- it 'should make $facts available' do
355
- node = node_with_facts('the_facts' => 'straight')
347
+ it 'should make $facts available' do
348
+ node = node_with_facts('the_facts' => 'straight')
356
349
 
357
- catalog = compile_to_catalog(<<-MANIFEST, node)
358
- notify { 'test': message => $facts[the_facts] }
359
- MANIFEST
350
+ catalog = compile_to_catalog(<<-MANIFEST, node)
351
+ notify { 'test': message => $facts[the_facts] }
352
+ MANIFEST
360
353
 
361
- catalog.resource("Notify[test]")[:message].should == "straight"
362
- end
354
+ catalog.resource("Notify[test]")[:message].should == "straight"
355
+ end
363
356
 
364
- it 'should make $facts reserved' do
365
- node = node_with_facts('the_facts' => 'straight')
357
+ it 'should make $facts reserved' do
358
+ node = node_with_facts('the_facts' => 'straight')
366
359
 
367
- expect('$facts = {}').to fail_compile_with(node, /assign to a reserved variable name: 'facts'/)
368
- expect('class a { $facts = {} } include a').to fail_compile_with(node, /assign to a reserved variable name: 'facts'/)
369
- end
360
+ expect('$facts = {}').to fail_compile_with(node, /assign to a reserved variable name: 'facts'/)
361
+ expect('class a { $facts = {} } include a').to fail_compile_with(node, /assign to a reserved variable name: 'facts'/)
362
+ end
370
363
 
371
- it 'should make $facts immutable' do
372
- node = node_with_facts('string' => 'value', 'array' => ['string'], 'hash' => { 'a' => 'string' }, 'number' => 1, 'boolean' => true)
364
+ it 'should make $facts immutable' do
365
+ node = node_with_facts('string' => 'value', 'array' => ['string'], 'hash' => { 'a' => 'string' }, 'number' => 1, 'boolean' => true)
373
366
 
374
- expect('$i=inline_template("<% @facts[%q{new}] = 2 %>")').to fail_compile_with(node, /frozen Hash/i)
375
- expect('$i=inline_template("<% @facts[%q{string}].chop! %>")').to fail_compile_with(node, /frozen String/i)
367
+ expect('$i=inline_template("<% @facts[%q{new}] = 2 %>")').to fail_compile_with(node, /frozen Hash/i)
368
+ expect('$i=inline_template("<% @facts[%q{string}].chop! %>")').to fail_compile_with(node, /frozen String/i)
376
369
 
377
- expect('$i=inline_template("<% @facts[%q{array}][0].chop! %>")').to fail_compile_with(node, /frozen String/i)
378
- expect('$i=inline_template("<% @facts[%q{array}][1] = 2 %>")').to fail_compile_with(node, /frozen Array/i)
370
+ expect('$i=inline_template("<% @facts[%q{array}][0].chop! %>")').to fail_compile_with(node, /frozen String/i)
371
+ expect('$i=inline_template("<% @facts[%q{array}][1] = 2 %>")').to fail_compile_with(node, /frozen Array/i)
379
372
 
380
- expect('$i=inline_template("<% @facts[%q{hash}][%q{a}].chop! %>")').to fail_compile_with(node, /frozen String/i)
381
- expect('$i=inline_template("<% @facts[%q{hash}][%q{b}] = 2 %>")').to fail_compile_with(node, /frozen Hash/i)
382
- end
373
+ expect('$i=inline_template("<% @facts[%q{hash}][%q{a}].chop! %>")').to fail_compile_with(node, /frozen String/i)
374
+ expect('$i=inline_template("<% @facts[%q{hash}][%q{b}] = 2 %>")').to fail_compile_with(node, /frozen Hash/i)
375
+ end
383
376
 
384
- it 'should make $facts available even if there are no facts' do
385
- Puppet[:facts_terminus] = :memory
386
- node = Puppet::Node.new("testing2")
387
- node.fact_merge
377
+ it 'should make $facts available even if there are no facts' do
378
+ Puppet[:facts_terminus] = :memory
379
+ node = Puppet::Node.new("testing2")
380
+ node.fact_merge
388
381
 
389
- catalog = compile_to_catalog(<<-MANIFEST, node)
390
- notify { 'test': message => $facts }
391
- MANIFEST
382
+ catalog = compile_to_catalog(<<-MANIFEST, node)
383
+ notify { 'test': message => $facts }
384
+ MANIFEST
392
385
 
393
- expect(catalog).to have_resource("Notify[test]").with_parameter(:message, {})
394
- end
386
+ expect(catalog).to have_resource("Notify[test]").with_parameter(:message, {})
395
387
  end
388
+ end
396
389
 
397
- context 'and have not opted in to immutable_node_data' do
398
- before :each do
399
- Puppet[:immutable_node_data] = false
400
- end
390
+ context 'and have not opted in to immutable_node_data' do
391
+ before :each do
392
+ Puppet[:immutable_node_data] = false
393
+ end
401
394
 
402
- it 'should not make $facts available' do
403
- Puppet[:facts_terminus] = :memory
404
- facts = Puppet::Node::Facts.new("testing", 'the_facts' => 'straight')
405
- Puppet::Node::Facts.indirection.save(facts)
406
- node = Puppet::Node.new("testing")
407
- node.fact_merge
395
+ it 'should not make $facts available' do
396
+ Puppet[:facts_terminus] = :memory
397
+ facts = Puppet::Node::Facts.new("testing", 'the_facts' => 'straight')
398
+ Puppet::Node::Facts.indirection.save(facts)
399
+ node = Puppet::Node.new("testing")
400
+ node.fact_merge
408
401
 
409
- catalog = compile_to_catalog(<<-MANIFEST, node)
410
- notify { 'test': message => "An $facts space" }
411
- MANIFEST
402
+ catalog = compile_to_catalog(<<-MANIFEST, node)
403
+ notify { 'test': message => "An $facts space" }
404
+ MANIFEST
412
405
 
413
- catalog.resource("Notify[test]")[:message].should == "An space"
414
- end
406
+ catalog.resource("Notify[test]")[:message].should == "An space"
415
407
  end
416
408
  end
409
+ end
417
410
 
418
- context 'when working with the trusted data hash' do
419
- context 'and have opted in to trusted_node_data' do
420
- before :each do
421
- Puppet[:trusted_node_data] = true
422
- end
411
+ context 'when working with the trusted data hash' do
412
+ context 'and have opted in to trusted_node_data' do
413
+ before :each do
414
+ Puppet[:trusted_node_data] = true
415
+ end
423
416
 
424
- it 'should make $trusted available' do
425
- node = Puppet::Node.new("testing")
426
- node.trusted_data = { "data" => "value" }
417
+ it 'should make $trusted available' do
418
+ node = Puppet::Node.new("testing")
419
+ node.trusted_data = { "data" => "value" }
427
420
 
428
- catalog = compile_to_catalog(<<-MANIFEST, node)
429
- notify { 'test': message => $trusted[data] }
430
- MANIFEST
421
+ catalog = compile_to_catalog(<<-MANIFEST, node)
422
+ notify { 'test': message => $trusted[data] }
423
+ MANIFEST
431
424
 
432
- catalog.resource("Notify[test]")[:message].should == "value"
433
- end
425
+ catalog.resource("Notify[test]")[:message].should == "value"
426
+ end
434
427
 
435
- it 'should not allow assignment to $trusted' do
436
- node = Puppet::Node.new("testing")
437
- node.trusted_data = { "data" => "value" }
438
-
439
- expect do
440
- catalog = compile_to_catalog(<<-MANIFEST, node)
441
- $trusted = 'changed'
442
- notify { 'test': message => $trusted == 'changed' }
443
- MANIFEST
444
- catalog.resource("Notify[test]")[:message].should == true
445
- end.to raise_error(Puppet::Error, /Attempt to assign to a reserved variable name: 'trusted'/)
446
- end
428
+ it 'should not allow assignment to $trusted' do
429
+ node = Puppet::Node.new("testing")
430
+ node.trusted_data = { "data" => "value" }
447
431
 
448
- it 'should not allow addition to $trusted hash' do
449
- node = Puppet::Node.new("testing")
450
- node.trusted_data = { "data" => "value" }
451
-
452
- expect do
453
- catalog = compile_to_catalog(<<-MANIFEST, node)
454
- $trusted['extra'] = 'added'
455
- notify { 'test': message => $trusted['extra'] == 'added' }
456
- MANIFEST
457
- catalog.resource("Notify[test]")[:message].should == true
458
- # different errors depending on regular or future parser
459
- end.to raise_error(Puppet::Error, /(can't modify frozen [hH]ash)|(Illegal attempt to assign)/)
460
- end
461
-
462
- it 'should not allow addition to $trusted hash via Ruby inline template' do
463
- node = Puppet::Node.new("testing")
464
- node.trusted_data = { "data" => "value" }
465
-
466
- expect do
467
- catalog = compile_to_catalog(<<-MANIFEST, node)
468
- $dummy = inline_template("<% @trusted['extra'] = 'added' %> lol")
469
- notify { 'test': message => $trusted['extra'] == 'added' }
470
- MANIFEST
471
- catalog.resource("Notify[test]")[:message].should == true
472
- end.to raise_error(Puppet::Error, /can't modify frozen [hH]ash/)
473
- end
432
+ expect do
433
+ catalog = compile_to_catalog(<<-MANIFEST, node)
434
+ $trusted = 'changed'
435
+ notify { 'test': message => $trusted == 'changed' }
436
+ MANIFEST
437
+ catalog.resource("Notify[test]")[:message].should == true
438
+ end.to raise_error(Puppet::Error, /Attempt to assign to a reserved variable name: 'trusted'/)
474
439
  end
475
440
 
476
- context 'and have not opted in to trusted_node_data' do
477
- before :each do
478
- Puppet[:trusted_node_data] = false
479
- end
480
-
481
- it 'should not make $trusted available' do
482
- node = Puppet::Node.new("testing")
483
- node.trusted_data = { "data" => "value" }
441
+ it 'should not allow addition to $trusted hash' do
442
+ node = Puppet::Node.new("testing")
443
+ node.trusted_data = { "data" => "value" }
484
444
 
445
+ expect do
485
446
  catalog = compile_to_catalog(<<-MANIFEST, node)
486
- notify { 'test': message => $trusted == undef }
447
+ $trusted['extra'] = 'added'
448
+ notify { 'test': message => $trusted['extra'] == 'added' }
487
449
  MANIFEST
488
-
489
450
  catalog.resource("Notify[test]")[:message].should == true
490
- end
451
+ # different errors depending on regular or future parser
452
+ end.to raise_error(Puppet::Error, /(can't modify frozen [hH]ash)|(Illegal attempt to assign)/)
453
+ end
491
454
 
492
- it 'should allow assignment to $trusted' do
493
- node = Puppet::Node.new("testing")
455
+ it 'should not allow addition to $trusted hash via Ruby inline template' do
456
+ node = Puppet::Node.new("testing")
457
+ node.trusted_data = { "data" => "value" }
494
458
 
459
+ expect do
495
460
  catalog = compile_to_catalog(<<-MANIFEST, node)
496
- $trusted = 'changed'
497
- notify { 'test': message => $trusted == 'changed' }
461
+ $dummy = inline_template("<% @trusted['extra'] = 'added' %> lol")
462
+ notify { 'test': message => $trusted['extra'] == 'added' }
498
463
  MANIFEST
499
-
500
464
  catalog.resource("Notify[test]")[:message].should == true
501
- end
465
+ end.to raise_error(Puppet::Error, /can't modify frozen [hH]ash/)
502
466
  end
503
467
  end
504
468
 
505
- context 'when evaluating collection' do
506
- it 'matches on container inherited tags' do
507
- Puppet[:code] = <<-MANIFEST
508
- class xport_test {
509
- tag 'foo_bar'
510
- @notify { 'nbr1':
511
- message => 'explicitly tagged',
512
- tag => 'foo_bar'
513
- }
469
+ context 'and have not opted in to trusted_node_data' do
470
+ before :each do
471
+ Puppet[:trusted_node_data] = false
472
+ end
514
473
 
515
- @notify { 'nbr2':
516
- message => 'implicitly tagged'
517
- }
474
+ it 'should not make $trusted available' do
475
+ node = Puppet::Node.new("testing")
476
+ node.trusted_data = { "data" => "value" }
518
477
 
519
- Notify <| tag == 'foo_bar' |> {
520
- message => 'overridden'
521
- }
522
- }
523
- include xport_test
478
+ catalog = compile_to_catalog(<<-MANIFEST, node)
479
+ notify { 'test': message => $trusted == undef }
524
480
  MANIFEST
525
481
 
526
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
482
+ catalog.resource("Notify[test]")[:message].should == true
483
+ end
484
+
485
+ it 'should allow assignment to $trusted' do
486
+ node = Puppet::Node.new("testing")
487
+
488
+ catalog = compile_to_catalog(<<-MANIFEST, node)
489
+ $trusted = 'changed'
490
+ notify { 'test': message => $trusted == 'changed' }
491
+ MANIFEST
527
492
 
528
- expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
529
- expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
493
+ catalog.resource("Notify[test]")[:message].should == true
530
494
  end
531
495
  end
532
496
  end
533
497
 
534
- describe 'using classic parser' do
535
- before :each do
536
- Puppet[:parser] = 'current'
537
- end
538
- it_behaves_like 'the compiler' do
498
+ context 'when evaluating collection' do
499
+ it 'matches on container inherited tags' do
500
+ Puppet[:code] = <<-MANIFEST
501
+ class xport_test {
502
+ tag 'foo_bar'
503
+ @notify { 'nbr1':
504
+ message => 'explicitly tagged',
505
+ tag => 'foo_bar'
506
+ }
507
+
508
+ @notify { 'nbr2':
509
+ message => 'implicitly tagged'
510
+ }
511
+
512
+ Notify <| tag == 'foo_bar' |> {
513
+ message => 'overridden'
514
+ }
515
+ }
516
+ include xport_test
517
+ MANIFEST
518
+
519
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
520
+
521
+ expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
522
+ expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
539
523
  end
540
524
  end
541
525
  end