puppet 3.1.1 → 3.2.0.rc1

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 (477) hide show
  1. data/CONTRIBUTING.md +2 -2
  2. data/Gemfile +32 -19
  3. data/README_DEVELOPER.md +332 -14
  4. data/Rakefile +9 -5
  5. data/ext/build_defaults.yaml +2 -3
  6. data/ext/debian/changelog.erb +6 -0
  7. data/ext/debian/control +6 -6
  8. data/ext/envpuppet +4 -4
  9. data/ext/project_data.yaml +1 -0
  10. data/ext/puppet-nm-dispatcher +13 -0
  11. data/ext/redhat/puppet.spec.erb +17 -0
  12. data/ext/suse/client.init +1 -1
  13. data/ext/systemd/puppetagent.service +2 -2
  14. data/ext/systemd/puppetmaster.service +2 -2
  15. data/lib/hiera/scope.rb +29 -11
  16. data/lib/hiera_puppet.rb +1 -3
  17. data/lib/puppet/agent.rb +3 -3
  18. data/lib/puppet/application.rb +2 -2
  19. data/lib/puppet/application/agent.rb +27 -12
  20. data/lib/puppet/application/apply.rb +11 -1
  21. data/lib/puppet/application/describe.rb +1 -1
  22. data/lib/puppet/application/doc.rb +13 -9
  23. data/lib/puppet/application/filebucket.rb +0 -1
  24. data/lib/puppet/application/kick.rb +1 -0
  25. data/lib/puppet/application/master.rb +16 -8
  26. data/lib/puppet/daemon.rb +19 -64
  27. data/lib/puppet/defaults.rb +61 -5
  28. data/lib/puppet/error.rb +15 -4
  29. data/lib/puppet/external/nagios/grammar.ry +1 -1
  30. data/lib/puppet/external/nagios/makefile +1 -1
  31. data/lib/puppet/external/nagios/parser.rb +185 -618
  32. data/lib/puppet/external/pson/pure/parser.rb +47 -1
  33. data/lib/puppet/face/certificate.rb +3 -3
  34. data/lib/puppet/face/module.rb +1 -1
  35. data/lib/puppet/face/module/changes.rb +3 -1
  36. data/lib/puppet/face/module/uninstall.rb +1 -1
  37. data/lib/puppet/face/node/clean.rb +5 -5
  38. data/lib/puppet/feature/base.rb +3 -1
  39. data/lib/puppet/feature/libuser.rb +8 -0
  40. data/lib/puppet/file_serving/fileset.rb +9 -1
  41. data/lib/puppet/forge.rb +28 -5
  42. data/lib/puppet/forge/errors.rb +34 -0
  43. data/lib/puppet/forge/repository.rb +1 -1
  44. data/lib/puppet/indirector.rb +4 -1
  45. data/lib/puppet/indirector/catalog/compiler.rb +37 -30
  46. data/lib/puppet/indirector/facts/inventory_active_record.rb +1 -0
  47. data/lib/puppet/indirector/indirection.rb +28 -15
  48. data/lib/puppet/indirector/rest.rb +18 -10
  49. data/lib/puppet/interface.rb +11 -4
  50. data/lib/puppet/interface/action.rb +1 -3
  51. data/lib/puppet/interface/action_builder.rb +0 -3
  52. data/lib/puppet/interface/action_manager.rb +0 -3
  53. data/lib/puppet/interface/face_collection.rb +0 -2
  54. data/lib/puppet/interface/option.rb +0 -2
  55. data/lib/puppet/interface/option_builder.rb +0 -2
  56. data/lib/puppet/interface/option_manager.rb +0 -2
  57. data/lib/puppet/metatype/manager.rb +1 -1
  58. data/lib/puppet/module_tool.rb +1 -0
  59. data/lib/puppet/module_tool/applications/application.rb +0 -3
  60. data/lib/puppet/module_tool/applications/builder.rb +8 -20
  61. data/lib/puppet/module_tool/applications/checksummer.rb +1 -1
  62. data/lib/puppet/module_tool/applications/installer.rb +1 -0
  63. data/lib/puppet/module_tool/applications/unpacker.rb +3 -11
  64. data/lib/puppet/module_tool/checksums.rb +1 -1
  65. data/lib/puppet/module_tool/errors/installer.rb +18 -1
  66. data/lib/puppet/module_tool/modulefile.rb +2 -2
  67. data/lib/puppet/module_tool/skeleton/templates/generator/Modulefile.erb +1 -1
  68. data/lib/puppet/module_tool/tar.rb +17 -0
  69. data/lib/puppet/module_tool/tar/gnu.rb +9 -0
  70. data/lib/puppet/module_tool/tar/mini.rb +39 -0
  71. data/lib/puppet/module_tool/tar/solaris.rb +5 -0
  72. data/lib/puppet/network/http.rb +1 -0
  73. data/lib/puppet/network/http/connection.rb +9 -23
  74. data/lib/puppet/network/http/handler.rb +38 -7
  75. data/lib/puppet/network/http/rack/rest.rb +14 -3
  76. data/lib/puppet/network/http/webrick.rb +3 -1
  77. data/lib/puppet/network/http/webrick/rest.rb +11 -2
  78. data/lib/puppet/node/environment.rb +3 -1
  79. data/lib/puppet/parameter.rb +32 -29
  80. data/lib/puppet/parameter/package_options.rb +1 -1
  81. data/lib/puppet/parameter/path.rb +1 -1
  82. data/lib/puppet/parameter/value.rb +1 -1
  83. data/lib/puppet/parameter/value_collection.rb +7 -3
  84. data/lib/puppet/parser/ast.rb +3 -1
  85. data/lib/puppet/parser/ast/arithmetic_operator.rb +56 -12
  86. data/lib/puppet/parser/ast/astarray.rb +1 -1
  87. data/lib/puppet/parser/ast/block_expression.rb +41 -0
  88. data/lib/puppet/parser/ast/function.rb +13 -2
  89. data/lib/puppet/parser/ast/lambda.rb +107 -0
  90. data/lib/puppet/parser/ast/leaf.rb +1 -2
  91. data/lib/puppet/parser/ast/method_call.rb +77 -0
  92. data/lib/puppet/parser/ast/vardef.rb +7 -0
  93. data/lib/puppet/parser/compiler.rb +27 -16
  94. data/lib/puppet/parser/e_parser_adapter.rb +120 -0
  95. data/lib/puppet/parser/files.rb +7 -6
  96. data/lib/puppet/parser/functions.rb +10 -8
  97. data/lib/puppet/parser/functions/collect.rb +43 -0
  98. data/lib/puppet/parser/functions/each.rb +96 -0
  99. data/lib/puppet/parser/functions/foreach.rb +96 -0
  100. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  101. data/lib/puppet/parser/functions/hiera.rb +20 -2
  102. data/lib/puppet/parser/functions/hiera_array.rb +21 -2
  103. data/lib/puppet/parser/functions/hiera_hash.rb +23 -2
  104. data/lib/puppet/parser/functions/hiera_include.rb +33 -2
  105. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  106. data/lib/puppet/parser/functions/reduce.rb +74 -0
  107. data/lib/puppet/parser/functions/reject.rb +46 -0
  108. data/lib/puppet/parser/functions/select.rb +46 -0
  109. data/lib/puppet/parser/functions/slice.rb +96 -0
  110. data/lib/puppet/parser/functions/template.rb +2 -2
  111. data/lib/puppet/parser/grammar.ra +7 -4
  112. data/lib/puppet/parser/lexer.rb +10 -0
  113. data/lib/puppet/parser/methods.rb +69 -0
  114. data/lib/puppet/parser/parser.rb +855 -808
  115. data/lib/puppet/parser/parser_factory.rb +62 -0
  116. data/lib/puppet/parser/parser_support.rb +8 -2
  117. data/lib/puppet/parser/scope.rb +153 -47
  118. data/lib/puppet/parser/templatewrapper.rb +28 -21
  119. data/lib/puppet/parser/type_loader.rb +3 -1
  120. data/lib/puppet/pops.rb +40 -0
  121. data/lib/puppet/pops/adaptable.rb +190 -0
  122. data/lib/puppet/pops/adapters.rb +65 -0
  123. data/lib/puppet/pops/containment.rb +37 -0
  124. data/lib/puppet/pops/issues.rb +258 -0
  125. data/lib/puppet/pops/label_provider.rb +71 -0
  126. data/lib/puppet/pops/model/ast_transformer.rb +636 -0
  127. data/lib/puppet/pops/model/ast_tree_dumper.rb +378 -0
  128. data/lib/puppet/pops/model/factory.rb +804 -0
  129. data/lib/puppet/pops/model/model.rb +567 -0
  130. data/lib/puppet/pops/model/model_label_provider.rb +75 -0
  131. data/lib/puppet/pops/model/model_tree_dumper.rb +352 -0
  132. data/lib/puppet/pops/model/tree_dumper.rb +59 -0
  133. data/lib/puppet/pops/parser/egrammar.ra +723 -0
  134. data/lib/puppet/pops/parser/eparser.rb +2300 -0
  135. data/lib/puppet/pops/parser/grammar.ra +746 -0
  136. data/lib/puppet/pops/parser/lexer.rb +842 -0
  137. data/lib/puppet/pops/parser/makefile +13 -0
  138. data/lib/puppet/pops/parser/parser_support.rb +203 -0
  139. data/lib/puppet/pops/patterns.rb +35 -0
  140. data/lib/puppet/pops/utils.rb +104 -0
  141. data/lib/puppet/pops/validation.rb +297 -0
  142. data/lib/puppet/pops/validation/checker3_1.rb +551 -0
  143. data/lib/puppet/pops/validation/validator_factory_3_1.rb +41 -0
  144. data/lib/puppet/pops/visitable.rb +6 -0
  145. data/lib/puppet/pops/visitor.rb +50 -0
  146. data/lib/puppet/property.rb +37 -28
  147. data/lib/puppet/property/ensure.rb +2 -2
  148. data/lib/puppet/property/ordered_list.rb +1 -1
  149. data/lib/puppet/provider.rb +26 -30
  150. data/lib/puppet/provider/aixobject.rb +45 -44
  151. data/lib/puppet/provider/augeas/augeas.rb +0 -1
  152. data/lib/puppet/provider/confiner.rb +1 -1
  153. data/lib/puppet/provider/cron/crontab.rb +107 -67
  154. data/lib/puppet/provider/group/groupadd.rb +59 -3
  155. data/lib/puppet/provider/interface/cisco.rb +4 -4
  156. data/lib/puppet/provider/mount/parsed.rb +1 -1
  157. data/lib/puppet/provider/nameservice.rb +22 -6
  158. data/lib/puppet/provider/nameservice/pw.rb +1 -1
  159. data/lib/puppet/provider/package/aix.rb +28 -4
  160. data/lib/puppet/provider/package/gem.rb +0 -2
  161. data/lib/puppet/provider/package/macports.rb +1 -1
  162. data/lib/puppet/provider/package/nim.rb +249 -4
  163. data/lib/puppet/provider/package/opkg.rb +77 -0
  164. data/lib/puppet/provider/package/pacman.rb +2 -2
  165. data/lib/puppet/provider/package/rpm.rb +30 -16
  166. data/lib/puppet/provider/package/yum.rb +3 -3
  167. data/lib/puppet/provider/parsedfile.rb +80 -3
  168. data/lib/puppet/provider/selmodule/semodule.rb +2 -2
  169. data/lib/puppet/provider/service/debian.rb +0 -4
  170. data/lib/puppet/provider/service/freebsd.rb +2 -2
  171. data/lib/puppet/provider/service/gentoo.rb +0 -9
  172. data/lib/puppet/provider/service/init.rb +27 -2
  173. data/lib/puppet/provider/service/launchd.rb +1 -1
  174. data/lib/puppet/provider/service/openwrt.rb +36 -0
  175. data/lib/puppet/provider/service/redhat.rb +0 -9
  176. data/lib/puppet/provider/service/src.rb +38 -4
  177. data/lib/puppet/provider/service/systemd.rb +2 -2
  178. data/lib/puppet/provider/service/upstart.rb +1 -8
  179. data/lib/puppet/provider/user/aix.rb +4 -10
  180. data/lib/puppet/provider/user/pw.rb +6 -10
  181. data/lib/puppet/provider/user/useradd.rb +129 -31
  182. data/lib/puppet/provider/vlan/cisco.rb +4 -4
  183. data/lib/puppet/reference/function.rb +2 -2
  184. data/lib/puppet/reference/indirection.rb +46 -5
  185. data/lib/puppet/reference/metaparameter.rb +2 -2
  186. data/lib/puppet/reports.rb +5 -5
  187. data/lib/puppet/reports/rrdgraph.rb +4 -4
  188. data/lib/puppet/reports/tagmail.rb +1 -1
  189. data/lib/puppet/resource.rb +1 -1
  190. data/lib/puppet/resource/type.rb +13 -11
  191. data/lib/puppet/scheduler.rb +16 -0
  192. data/lib/puppet/scheduler/job.rb +53 -0
  193. data/lib/puppet/scheduler/scheduler.rb +45 -0
  194. data/lib/puppet/scheduler/splay_job.rb +32 -0
  195. data/lib/puppet/scheduler/timer.rb +13 -0
  196. data/lib/puppet/settings/base_setting.rb +1 -1
  197. data/lib/puppet/simple_graph.rb +4 -4
  198. data/lib/puppet/ssl/base.rb +12 -2
  199. data/lib/puppet/ssl/certificate.rb +4 -1
  200. data/lib/puppet/ssl/certificate_request.rb +4 -1
  201. data/lib/puppet/ssl/certificate_revocation_list.rb +4 -1
  202. data/lib/puppet/ssl/configuration.rb +32 -0
  203. data/lib/puppet/ssl/host.rb +18 -21
  204. data/lib/puppet/ssl/key.rb +4 -1
  205. data/lib/puppet/ssl/validator.rb +116 -0
  206. data/lib/puppet/transaction.rb +1 -1
  207. data/lib/puppet/transaction/event.rb +3 -10
  208. data/lib/puppet/transaction/event_manager.rb +8 -1
  209. data/lib/puppet/transaction/report.rb +17 -16
  210. data/lib/puppet/type.rb +77 -69
  211. data/lib/puppet/type/cron.rb +20 -8
  212. data/lib/puppet/type/exec.rb +9 -3
  213. data/lib/puppet/type/file.rb +95 -21
  214. data/lib/puppet/type/file/content.rb +1 -1
  215. data/lib/puppet/type/file/mode.rb +7 -1
  216. data/lib/puppet/type/file/source.rb +2 -2
  217. data/lib/puppet/type/group.rb +11 -0
  218. data/lib/puppet/type/scheduled_task.rb +5 -1
  219. data/lib/puppet/type/service.rb +1 -1
  220. data/lib/puppet/type/ssh_authorized_key.rb +2 -2
  221. data/lib/puppet/type/user.rb +24 -6
  222. data/lib/puppet/util.rb +12 -2
  223. data/lib/puppet/util/classgen.rb +4 -4
  224. data/lib/puppet/util/colors.rb +55 -0
  225. data/lib/puppet/util/command_line/trollop.rb +4 -4
  226. data/lib/puppet/util/errors.rb +39 -3
  227. data/lib/puppet/util/fileparsing.rb +5 -0
  228. data/lib/puppet/util/filetype.rb +11 -9
  229. data/lib/puppet/util/instrumentation/instrumentable.rb +2 -2
  230. data/lib/puppet/util/libuser.conf +15 -0
  231. data/lib/puppet/util/libuser.rb +12 -0
  232. data/lib/puppet/util/monkey_patches.rb +48 -0
  233. data/lib/puppet/util/network_device.rb +1 -1
  234. data/lib/puppet/util/network_device/base.rb +2 -2
  235. data/lib/puppet/util/network_device/cisco/device.rb +29 -19
  236. data/lib/puppet/util/network_device/config.rb +5 -2
  237. data/lib/puppet/util/network_device/ipcalc.rb +1 -1
  238. data/lib/puppet/util/network_device/transport/ssh.rb +4 -3
  239. data/lib/puppet/util/network_device/transport/telnet.rb +4 -2
  240. data/lib/puppet/util/plugins.rb +4 -4
  241. data/lib/puppet/util/posix.rb +1 -1
  242. data/lib/puppet/util/profiler.rb +28 -0
  243. data/lib/puppet/util/profiler/logging.rb +47 -0
  244. data/lib/puppet/util/profiler/none.rb +8 -0
  245. data/lib/puppet/util/profiler/object_counts.rb +17 -0
  246. data/lib/puppet/util/profiler/wall_clock.rb +34 -0
  247. data/lib/puppet/util/provider_features.rb +1 -1
  248. data/lib/puppet/util/rdoc/parser.rb +5 -5
  249. data/lib/puppet/util/ssl.rb +38 -0
  250. data/lib/puppet/util/subclass_loader.rb +1 -5
  251. data/lib/puppet/util/windows.rb +1 -0
  252. data/lib/puppet/util/windows/process.rb +3 -0
  253. data/lib/puppet/util/windows/root_certs.rb +86 -0
  254. data/lib/puppet/util/windows/security.rb +1 -0
  255. data/lib/puppet/version.rb +1 -1
  256. data/spec/fixtures/integration/provider/cron/crontab/create_normal_entry +19 -0
  257. data/spec/fixtures/integration/provider/cron/crontab/create_special_entry +18 -0
  258. data/spec/fixtures/integration/provider/cron/crontab/crontab_user1 +15 -0
  259. data/spec/fixtures/integration/provider/cron/crontab/crontab_user2 +4 -0
  260. data/spec/fixtures/integration/provider/cron/crontab/modify_entry +13 -0
  261. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input1 +15 -0
  262. data/spec/fixtures/integration/provider/cron/crontab/moved_cronjob_input2 +6 -0
  263. data/spec/fixtures/integration/provider/cron/crontab/remove_named_resource +12 -0
  264. data/spec/fixtures/integration/provider/cron/crontab/remove_unnamed_resource +14 -0
  265. data/spec/fixtures/unit/pops/parser/lexer/aliastest.pp +16 -0
  266. data/spec/fixtures/unit/pops/parser/lexer/append.pp +11 -0
  267. data/spec/fixtures/unit/pops/parser/lexer/argumentdefaults.pp +14 -0
  268. data/spec/fixtures/unit/pops/parser/lexer/arithmetic_expression.pp +8 -0
  269. data/spec/fixtures/unit/pops/parser/lexer/arraytrailingcomma.pp +3 -0
  270. data/spec/fixtures/unit/pops/parser/lexer/casestatement.pp +65 -0
  271. data/spec/fixtures/unit/pops/parser/lexer/classheirarchy.pp +15 -0
  272. data/spec/fixtures/unit/pops/parser/lexer/classincludes.pp +17 -0
  273. data/spec/fixtures/unit/pops/parser/lexer/classpathtest.pp +11 -0
  274. data/spec/fixtures/unit/pops/parser/lexer/collection.pp +10 -0
  275. data/spec/fixtures/unit/pops/parser/lexer/collection_override.pp +8 -0
  276. data/spec/fixtures/unit/pops/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  277. data/spec/fixtures/unit/pops/parser/lexer/componentmetaparams.pp +11 -0
  278. data/spec/fixtures/unit/pops/parser/lexer/componentrequire.pp +8 -0
  279. data/spec/fixtures/unit/pops/parser/lexer/deepclassheirarchy.pp +23 -0
  280. data/spec/fixtures/unit/pops/parser/lexer/defineoverrides.pp +17 -0
  281. data/spec/fixtures/unit/pops/parser/lexer/emptyclass.pp +9 -0
  282. data/spec/fixtures/unit/pops/parser/lexer/emptyexec.pp +3 -0
  283. data/spec/fixtures/unit/pops/parser/lexer/emptyifelse.pp +9 -0
  284. data/spec/fixtures/unit/pops/parser/lexer/falsevalues.pp +3 -0
  285. data/spec/fixtures/unit/pops/parser/lexer/filecreate.pp +11 -0
  286. data/spec/fixtures/unit/pops/parser/lexer/fqdefinition.pp +5 -0
  287. data/spec/fixtures/unit/pops/parser/lexer/fqparents.pp +11 -0
  288. data/spec/fixtures/unit/pops/parser/lexer/funccomma.pp +5 -0
  289. data/spec/fixtures/unit/pops/parser/lexer/hash.pp +33 -0
  290. data/spec/fixtures/unit/pops/parser/lexer/ifexpression.pp +12 -0
  291. data/spec/fixtures/unit/pops/parser/lexer/implicititeration.pp +15 -0
  292. data/spec/fixtures/unit/pops/parser/lexer/multilinecomments.pp +10 -0
  293. data/spec/fixtures/unit/pops/parser/lexer/multipleclass.pp +9 -0
  294. data/spec/fixtures/unit/pops/parser/lexer/multipleinstances.pp +7 -0
  295. data/spec/fixtures/unit/pops/parser/lexer/multisubs.pp +13 -0
  296. data/spec/fixtures/unit/pops/parser/lexer/namevartest.pp +9 -0
  297. data/spec/fixtures/unit/pops/parser/lexer/scopetest.pp +13 -0
  298. data/spec/fixtures/unit/pops/parser/lexer/selectorvalues.pp +49 -0
  299. data/spec/fixtures/unit/pops/parser/lexer/simpledefaults.pp +5 -0
  300. data/spec/fixtures/unit/pops/parser/lexer/simpleselector.pp +38 -0
  301. data/spec/fixtures/unit/pops/parser/lexer/singleary.pp +19 -0
  302. data/spec/fixtures/unit/pops/parser/lexer/singlequote.pp +11 -0
  303. data/spec/fixtures/unit/pops/parser/lexer/singleselector.pp +22 -0
  304. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +11 -0
  305. data/spec/fixtures/unit/pops/parser/lexer/tag.pp +9 -0
  306. data/spec/fixtures/unit/pops/parser/lexer/tagged.pp +35 -0
  307. data/spec/fixtures/unit/pops/parser/lexer/virtualresources.pp +14 -0
  308. data/spec/fixtures/unit/provider/cron/crontab/single_line.yaml +4 -4
  309. data/spec/fixtures/unit/provider/cron/crontab/vixie_header.txt +3 -0
  310. data/spec/fixtures/unit/provider/cron/parsed/managed +6 -0
  311. data/spec/fixtures/unit/provider/cron/parsed/simple +9 -0
  312. data/spec/fixtures/unit/provider/parsedfile/simple.txt +4 -0
  313. data/spec/fixtures/unit/provider/service/systemd/list_units +18 -0
  314. data/spec/integration/parser/collector_spec.rb +1 -1
  315. data/spec/integration/parser/compiler_spec.rb +252 -227
  316. data/spec/integration/parser/parser_spec.rb +171 -53
  317. data/spec/integration/parser/scope_spec.rb +1 -1
  318. data/spec/integration/provider/cron/crontab_spec.rb +187 -0
  319. data/spec/integration/provider/service/systemd_spec.rb +20 -0
  320. data/spec/integration/type/file_spec.rb +21 -21
  321. data/spec/integration/type/package_spec.rb +1 -1
  322. data/spec/lib/puppet_spec/database.rb +2 -5
  323. data/spec/spec_helper.rb +6 -1
  324. data/spec/unit/application/apply_spec.rb +16 -1
  325. data/spec/unit/application/describe_spec.rb +1 -1
  326. data/spec/unit/application/doc_spec.rb +55 -32
  327. data/spec/unit/application/kick_spec.rb +8 -6
  328. data/spec/unit/application/master_spec.rb +4 -4
  329. data/spec/unit/daemon_spec.rb +1 -1
  330. data/spec/unit/forge/errors_spec.rb +40 -0
  331. data/spec/unit/forge/repository_spec.rb +11 -1
  332. data/spec/unit/forge_spec.rb +13 -3
  333. data/spec/unit/hiera/backend/puppet_backend_spec.rb +1 -0
  334. data/spec/unit/hiera/scope_spec.rb +48 -25
  335. data/spec/unit/indirector/catalog/active_record_spec.rb +6 -3
  336. data/spec/unit/indirector/catalog/compiler_spec.rb +3 -28
  337. data/spec/unit/indirector/catalog/static_compiler_spec.rb +1 -1
  338. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +154 -150
  339. data/spec/unit/indirector/indirection_spec.rb +5 -0
  340. data/spec/unit/indirector/resource/active_record_spec.rb +5 -22
  341. data/spec/unit/indirector_spec.rb +7 -1
  342. data/spec/unit/interface/action_builder_spec.rb +1 -1
  343. data/spec/unit/interface/action_manager_spec.rb +0 -2
  344. data/spec/unit/interface/action_spec.rb +1 -1
  345. data/spec/unit/interface/documentation_spec.rb +0 -2
  346. data/spec/unit/interface/face_collection_spec.rb +1 -1
  347. data/spec/unit/interface/option_builder_spec.rb +1 -1
  348. data/spec/unit/interface/option_spec.rb +0 -1
  349. data/spec/unit/module_spec.rb +17 -19
  350. data/spec/unit/module_tool/application_spec.rb +1 -3
  351. data/spec/unit/module_tool/applications/builder_spec.rb +38 -0
  352. data/spec/unit/module_tool/applications/checksummer_spec.rb +134 -0
  353. data/spec/unit/module_tool/applications/installer_spec.rb +71 -91
  354. data/spec/unit/module_tool/applications/searcher_spec.rb +1 -3
  355. data/spec/unit/module_tool/applications/uninstaller_spec.rb +18 -26
  356. data/spec/unit/module_tool/applications/unpacker_spec.rb +19 -52
  357. data/spec/unit/module_tool/tar/gnu_spec.rb +19 -0
  358. data/spec/unit/module_tool/tar/mini_spec.rb +59 -0
  359. data/spec/unit/module_tool/tar/solaris_spec.rb +19 -0
  360. data/spec/unit/network/http/connection_spec.rb +17 -2
  361. data/spec/unit/network/http/handler_spec.rb +195 -167
  362. data/spec/unit/network/http/rack/rest_spec.rb +26 -4
  363. data/spec/unit/network/http/webrick/rest_spec.rb +28 -1
  364. data/spec/unit/network/http/webrick_spec.rb +12 -3
  365. data/spec/unit/node/environment_spec.rb +421 -404
  366. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +98 -2
  367. data/spec/unit/parser/collector_spec.rb +4 -4
  368. data/spec/unit/parser/compiler_spec.rb +13 -13
  369. data/spec/unit/parser/eparser_adapter_spec.rb +407 -0
  370. data/spec/unit/parser/functions/extlookup_spec.rb +20 -17
  371. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -0
  372. data/spec/unit/parser/functions/hiera_include_spec.rb +0 -2
  373. data/spec/unit/parser/functions/hiera_spec.rb +0 -2
  374. data/spec/unit/parser/functions_spec.rb +27 -15
  375. data/spec/unit/parser/methods/collect_spec.rb +110 -0
  376. data/spec/unit/parser/methods/each_spec.rb +91 -0
  377. data/spec/unit/parser/methods/foreach_spec.rb +91 -0
  378. data/spec/unit/parser/methods/reduce_spec.rb +67 -0
  379. data/spec/unit/parser/methods/reject_spec.rb +73 -0
  380. data/spec/unit/parser/methods/select_spec.rb +79 -0
  381. data/spec/unit/parser/methods/shared.rb +61 -0
  382. data/spec/unit/parser/methods/slice_spec.rb +97 -0
  383. data/spec/unit/parser/parser_spec.rb +2 -2
  384. data/spec/unit/parser/scope_spec.rb +39 -16
  385. data/spec/unit/parser/templatewrapper_spec.rb +6 -5
  386. data/spec/unit/parser/type_loader_spec.rb +191 -165
  387. data/spec/unit/pops/adaptable_spec.rb +143 -0
  388. data/spec/unit/pops/containment_spec.rb +25 -0
  389. data/spec/unit/pops/factory_rspec_helper.rb +77 -0
  390. data/spec/unit/pops/factory_spec.rb +329 -0
  391. data/spec/unit/pops/issues_spec.rb +26 -0
  392. data/spec/unit/pops/label_provider_spec.rb +42 -0
  393. data/spec/unit/pops/model/ast_transformer_spec.rb +65 -0
  394. data/spec/unit/pops/model/model_spec.rb +37 -0
  395. data/spec/unit/pops/parser/lexer_spec.rb +884 -0
  396. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +248 -0
  397. data/spec/unit/pops/parser/parse_calls_spec.rb +93 -0
  398. data/spec/unit/pops/parser/parse_conditionals_spec.rb +159 -0
  399. data/spec/unit/pops/parser/parse_containers_spec.rb +175 -0
  400. data/spec/unit/pops/parser/parse_resource_spec.rb +228 -0
  401. data/spec/unit/pops/parser/parser_rspec_helper.rb +11 -0
  402. data/spec/unit/pops/parser/parser_spec.rb +15 -0
  403. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +16 -0
  404. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +243 -0
  405. data/spec/unit/pops/transformer/transform_calls_spec.rb +80 -0
  406. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +132 -0
  407. data/spec/unit/pops/transformer/transform_containers_spec.rb +182 -0
  408. data/spec/unit/pops/transformer/transform_resource_spec.rb +185 -0
  409. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +27 -0
  410. data/spec/unit/pops/visitor_spec.rb +94 -0
  411. data/spec/unit/property_spec.rb +11 -0
  412. data/spec/unit/provider/augeas/augeas_spec.rb +3 -0
  413. data/spec/unit/provider/cron/crontab_spec.rb +97 -7
  414. data/spec/unit/provider/cron/parsed_spec.rb +325 -0
  415. data/spec/unit/provider/exec/posix_spec.rb +1 -1
  416. data/spec/unit/provider/group/groupadd_spec.rb +33 -3
  417. data/spec/unit/provider/group/pw_spec.rb +5 -5
  418. data/spec/unit/provider/nameservice_spec.rb +304 -0
  419. data/spec/unit/provider/package/aix_spec.rb +53 -11
  420. data/spec/unit/provider/package/aptrpm_spec.rb +6 -0
  421. data/spec/unit/provider/package/gem_spec.rb +6 -11
  422. data/spec/unit/provider/package/nim_spec.rb +216 -7
  423. data/spec/unit/provider/package/opkg_spec.rb +180 -0
  424. data/spec/unit/provider/package/rpm_spec.rb +149 -3
  425. data/spec/unit/provider/package/yum_spec.rb +6 -5
  426. data/spec/unit/provider/parsedfile_spec.rb +122 -28
  427. data/spec/unit/provider/service/freebsd_spec.rb +18 -0
  428. data/spec/unit/provider/service/init_spec.rb +108 -87
  429. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  430. data/spec/unit/provider/service/openwrt_spec.rb +109 -0
  431. data/spec/unit/provider/service/src_spec.rb +117 -41
  432. data/spec/unit/provider/service/systemd_spec.rb +125 -17
  433. data/spec/unit/provider/service/upstart_spec.rb +1 -1
  434. data/spec/unit/provider/user/aix_spec.rb +42 -0
  435. data/spec/unit/provider/user/directoryservice_spec.rb +1 -0
  436. data/spec/unit/provider/user/pw_spec.rb +24 -12
  437. data/spec/unit/provider/user/user_role_add_spec.rb +1 -1
  438. data/spec/unit/provider/user/useradd_spec.rb +179 -15
  439. data/spec/unit/resource/type_spec.rb +3 -3
  440. data/spec/unit/scheduler/job_spec.rb +79 -0
  441. data/spec/unit/scheduler/scheduler_spec.rb +129 -0
  442. data/spec/unit/scheduler/splay_job_spec.rb +35 -0
  443. data/spec/unit/ssl/base_spec.rb +3 -9
  444. data/spec/unit/ssl/certificate_authority_spec.rb +1 -0
  445. data/spec/unit/ssl/certificate_request_spec.rb +3 -1
  446. data/spec/unit/ssl/certificate_spec.rb +3 -1
  447. data/spec/unit/ssl/configuration_spec.rb +74 -0
  448. data/spec/unit/ssl/host_spec.rb +28 -7
  449. data/spec/unit/ssl/validator_spec.rb +311 -0
  450. data/spec/unit/transaction/event_manager_spec.rb +49 -0
  451. data/spec/unit/transaction/event_spec.rb +20 -5
  452. data/spec/unit/transaction/report_spec.rb +8 -0
  453. data/spec/unit/type/cron_spec.rb +9 -0
  454. data/spec/unit/type/exec_spec.rb +11 -0
  455. data/spec/unit/type/file/content_spec.rb +20 -20
  456. data/spec/unit/type/file/mode_spec.rb +6 -0
  457. data/spec/unit/type/file/source_spec.rb +9 -7
  458. data/spec/unit/type/file_spec.rb +22 -3
  459. data/spec/unit/type/service_spec.rb +34 -21
  460. data/spec/unit/type_spec.rb +46 -1
  461. data/spec/unit/util/backups_spec.rb +2 -2
  462. data/spec/unit/util/execution_spec.rb +4 -1
  463. data/spec/unit/util/filetype_spec.rb +6 -0
  464. data/spec/unit/util/monkey_patches_spec.rb +18 -0
  465. data/spec/unit/util/network_device/cisco/device_spec.rb +37 -0
  466. data/spec/unit/util/network_device/config_spec.rb +14 -0
  467. data/spec/unit/util/network_device_spec.rb +3 -3
  468. data/spec/unit/util/profiler/logging_spec.rb +81 -0
  469. data/spec/unit/util/profiler/none_spec.rb +12 -0
  470. data/spec/unit/util/profiler/object_counts_spec.rb +14 -0
  471. data/spec/unit/util/profiler/wall_clock_spec.rb +13 -0
  472. data/spec/unit/util/pson_spec.rb +5 -0
  473. data/spec/unit/util/ssl_spec.rb +51 -0
  474. data/spec/unit/util/windows/root_certs_spec.rb +15 -0
  475. data/spec/unit/util_spec.rb +28 -0
  476. metadata +2593 -2307
  477. data/spec/unit/module_tool/applications/application_spec.rb +0 -19
@@ -0,0 +1,3 @@
1
+ # DO NOT EDIT THIS FILE - edit the master and reinstall.
2
+ # (- installed on Thu Apr 12 12:16:01 2007)
3
+ # (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
@@ -0,0 +1,6 @@
1
+ # Puppet Name: real_job
2
+ * * * * * /bin/true
3
+ # Puppet Name: complex_job
4
+ MAILTO=foo@example.com
5
+ SHELL=/bin/sh
6
+ @reboot /bin/true >> /dev/null 2>&1
@@ -0,0 +1,9 @@
1
+ # use /bin/sh to run commands, no matter what /etc/passwd says
2
+ SHELL=/bin/sh
3
+ # mail any output to `paul', no matter whose crontab this is
4
+ MAILTO=paul
5
+ #
6
+ # run five minutes after midnight, every day
7
+ 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
8
+ # run at 2:15pm on the first of every month -- output mailed to paul
9
+ 15 14 1 * * $HOME/bin/monthly
@@ -0,0 +1,4 @@
1
+ # This is a sample fixture for the parsedfile provider.
2
+ # HEADER As added by software from a third party.
3
+ # Another inconspicuous comment.
4
+ A generic content line with: a value.
@@ -0,0 +1,18 @@
1
+ UNIT LOAD ACTIVE SUB DESCRIPTION
2
+ auditd.service loaded active running Security Auditing Service
3
+ crond.service loaded active running Command Scheduler
4
+ dbus.service loaded active running D-Bus System Message Bus
5
+ display-manager.service error inactive dead display-manager.service
6
+ ebtables.service loaded inactive dead SYSV: Ethernet Bridge filtering tables
7
+ fedora-readonly.service loaded active exited Configure read-only root support
8
+ initrd-switch-root.service loaded inactive dead Switch Root
9
+ ip6tables.service error inactive dead ip6tables.service
10
+ puppet.service loaded inactive dead SYSV: Enables periodic system configuration checks through puppet.
11
+ sshd.service loaded failed failed OpenSSH server daemon
12
+
13
+ LOAD = Reflects whether the unit definition was properly loaded.
14
+ ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
15
+ SUB = The low-level unit activation state, values depend on unit type.
16
+
17
+ 155 loaded units listed.
18
+ To show all installed unit files use 'systemctl list-unit-files'.
@@ -64,7 +64,7 @@ describe Puppet::Parser::Collector do
64
64
  expect_the_message_to_be(["the message", "different message"], <<-MANIFEST)
65
65
  @notify { "testing": message => "different message", withpath => true }
66
66
  @notify { "other": message => "the message" }
67
- @notify { "yet another": message => "the message", withpath => true }
67
+ @notify { "yet another": message => "the message", withpath => true }
68
68
 
69
69
  Notify <| (title == "testing" or message == "the message") and withpath == true |>
70
70
  MANIFEST
@@ -1,7 +1,8 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
+ require 'puppet/parser/parser_factory'
3
4
 
4
- describe Puppet::Parser::Compiler do
5
+ describe "Puppet::Parser::Compiler" do
5
6
  before :each do
6
7
  @node = Puppet::Node.new "testnode"
7
8
 
@@ -13,297 +14,321 @@ describe Puppet::Parser::Compiler do
13
14
  Puppet.settings.clear
14
15
  end
15
16
 
16
- it "should be able to determine the configuration version from a local version control repository" do
17
- pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows", :if => Puppet.features.microsoft_windows?) do
18
- # This should always work, because we should always be
19
- # in the puppet repo when we run this.
20
- version = %x{git rev-parse HEAD}.chomp
17
+ # shared because tests are invoked both for classic and future parser
18
+ #
19
+ shared_examples_for "the compiler" do
20
+ it "should be able to determine the configuration version from a local version control repository" do
21
+ pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows", :if => Puppet.features.microsoft_windows?) do
22
+ # This should always work, because we should always be
23
+ # in the puppet repo when we run this.
24
+ version = %x{git rev-parse HEAD}.chomp
21
25
 
22
- Puppet.settings[:config_version] = 'git rev-parse HEAD'
26
+ Puppet.settings[:config_version] = 'git rev-parse HEAD'
23
27
 
24
- @parser = Puppet::Parser::Parser.new "development"
25
- @compiler = Puppet::Parser::Compiler.new(@node)
28
+ @parser = Puppet::Parser::ParserFactory.parser "development"
29
+ @compiler = Puppet::Parser::Compiler.new(@node)
26
30
 
27
- @compiler.catalog.version.should == version
31
+ @compiler.catalog.version.should == version
32
+ end
28
33
  end
29
- end
30
-
31
- it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
32
- Puppet[:code] = <<-PP
33
- class foo
34
- {
35
- notify { foo_notify: }
36
- include bar
37
- }
38
- class bar
39
- {
40
- notify { bar_notify: }
41
- }
42
- PP
43
-
44
- @node.stubs(:classes).returns(['foo', 'bar'])
45
-
46
- catalog = Puppet::Parser::Compiler.compile(@node)
47
-
48
- catalog.resource("Notify[foo_notify]").should_not be_nil
49
- catalog.resource("Notify[bar_notify]").should_not be_nil
50
- end
51
34
 
52
- describe "when resolving class references" do
53
- it "should favor local scope, even if there's an included class in topscope" do
35
+ it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
54
36
  Puppet[:code] = <<-PP
55
- class experiment {
56
- class baz {
57
- }
58
- notify {"x" : require => Class[Baz] }
37
+ class foo
38
+ {
39
+ notify { foo_notify: }
40
+ include bar
59
41
  }
60
- class baz {
42
+ class bar
43
+ {
44
+ notify { bar_notify: }
61
45
  }
62
- include baz
63
- include experiment
64
- include experiment::baz
65
46
  PP
66
47
 
67
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
48
+ @node.stubs(:classes).returns(['foo', 'bar'])
68
49
 
69
- notify_resource = catalog.resource( "Notify[x]" )
50
+ catalog = Puppet::Parser::Compiler.compile(@node)
70
51
 
71
- notify_resource[:require].title.should == "Experiment::Baz"
52
+ catalog.resource("Notify[foo_notify]").should_not be_nil
53
+ catalog.resource("Notify[bar_notify]").should_not be_nil
72
54
  end
73
55
 
74
- it "should favor local scope, even if there's an unincluded class in topscope" do
75
- Puppet[:code] = <<-PP
76
- class experiment {
56
+ describe "when resolving class references" do
57
+ it "should favor local scope, even if there's an included class in topscope" do
58
+ Puppet[:code] = <<-PP
59
+ class experiment {
60
+ class baz {
61
+ }
62
+ notify {"x" : require => Class[Baz] }
63
+ }
77
64
  class baz {
78
65
  }
79
- notify {"x" : require => Class[Baz] }
80
- }
81
- class baz {
82
- }
83
- include experiment
84
- include experiment::baz
85
- PP
66
+ include baz
67
+ include experiment
68
+ include experiment::baz
69
+ PP
86
70
 
87
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
71
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
88
72
 
89
- notify_resource = catalog.resource( "Notify[x]" )
73
+ notify_resource = catalog.resource( "Notify[x]" )
90
74
 
91
- notify_resource[:require].title.should == "Experiment::Baz"
92
- end
93
- end
94
- describe "(ticket #13349) when explicitly specifying top scope" do
95
- ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
96
- describe "with #{include}" do
97
- it "should find the top level class" do
98
- Puppet[:code] = <<-MANIFEST
99
- class { 'foo::test': }
100
- class foo::test {
101
- #{include}
102
- }
103
- class bar::baz {
104
- notify { 'good!': }
105
- }
106
- class foo::bar::baz {
107
- notify { 'bad!': }
75
+ notify_resource[:require].title.should == "Experiment::Baz"
76
+ end
77
+
78
+ it "should favor local scope, even if there's an unincluded class in topscope" do
79
+ Puppet[:code] = <<-PP
80
+ class experiment {
81
+ class baz {
108
82
  }
109
- MANIFEST
83
+ notify {"x" : require => Class[Baz] }
84
+ }
85
+ class baz {
86
+ }
87
+ include experiment
88
+ include experiment::baz
89
+ PP
110
90
 
111
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
91
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
112
92
 
113
- catalog.resource("Class[Bar::Baz]").should_not be_nil
114
- catalog.resource("Notify[good!]").should_not be_nil
115
- catalog.resource("Class[Foo::Bar::Baz]").should be_nil
116
- catalog.resource("Notify[bad!]").should be_nil
93
+ notify_resource = catalog.resource( "Notify[x]" )
94
+
95
+ notify_resource[:require].title.should == "Experiment::Baz"
96
+ end
97
+ end
98
+ describe "(ticket #13349) when explicitly specifying top scope" do
99
+ ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
100
+ describe "with #{include}" do
101
+ it "should find the top level class" do
102
+ Puppet[:code] = <<-MANIFEST
103
+ class { 'foo::test': }
104
+ class foo::test {
105
+ #{include}
106
+ }
107
+ class bar::baz {
108
+ notify { 'good!': }
109
+ }
110
+ class foo::bar::baz {
111
+ notify { 'bad!': }
112
+ }
113
+ MANIFEST
114
+
115
+ catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
116
+
117
+ catalog.resource("Class[Bar::Baz]").should_not be_nil
118
+ catalog.resource("Notify[good!]").should_not be_nil
119
+ catalog.resource("Class[Foo::Bar::Baz]").should be_nil
120
+ catalog.resource("Notify[bad!]").should be_nil
121
+ end
117
122
  end
118
123
  end
119
124
  end
120
- end
121
125
 
122
- it "should recompute the version after input files are re-parsed" do
123
- Puppet[:code] = 'class foo { }'
124
- Time.stubs(:now).returns(1)
125
- node = Puppet::Node.new('mynode')
126
- Puppet::Parser::Compiler.compile(node).version.should == 1
127
- Time.stubs(:now).returns(2)
128
- Puppet::Parser::Compiler.compile(node).version.should == 1 # no change because files didn't change
129
- Puppet::Resource::TypeCollection.any_instance.stubs(:stale?).returns(true).then.returns(false) # pretend change
130
- Puppet::Parser::Compiler.compile(node).version.should == 2
131
- end
126
+ it "should recompute the version after input files are re-parsed" do
127
+ Puppet[:code] = 'class foo { }'
128
+ Time.stubs(:now).returns(1)
129
+ node = Puppet::Node.new('mynode')
130
+ Puppet::Parser::Compiler.compile(node).version.should == 1
131
+ Time.stubs(:now).returns(2)
132
+ Puppet::Parser::Compiler.compile(node).version.should == 1 # no change because files didn't change
133
+ Puppet::Resource::TypeCollection.any_instance.stubs(:stale?).returns(true).then.returns(false) # pretend change
134
+ Puppet::Parser::Compiler.compile(node).version.should == 2
135
+ end
132
136
 
133
- ['class', 'define', 'node'].each do |thing|
134
- it "should not allow #{thing} inside evaluated conditional constructs" do
135
- Puppet[:code] = <<-PP
136
- if true {
137
- #{thing} foo {
137
+ ['class', 'define', 'node'].each do |thing|
138
+ it "should not allow #{thing} inside evaluated conditional constructs" do
139
+ Puppet[:code] = <<-PP
140
+ if true {
141
+ #{thing} foo {
142
+ }
143
+ notify { decoy: }
138
144
  }
139
- notify { decoy: }
140
- }
141
- PP
145
+ PP
142
146
 
143
- begin
144
- Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
145
- raise "compilation should have raised Puppet::Error"
146
- rescue Puppet::Error => e
147
- e.message.should =~ /at line 2/
147
+ begin
148
+ Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
149
+ raise "compilation should have raised Puppet::Error"
150
+ rescue Puppet::Error => e
151
+ e.message.should =~ /at line 2/
152
+ end
148
153
  end
149
154
  end
150
- end
151
155
 
152
- it "should not allow classes inside unevaluated conditional constructs" do
153
- Puppet[:code] = <<-PP
154
- if false {
155
- class foo {
156
+ it "should not allow classes inside unevaluated conditional constructs" do
157
+ Puppet[:code] = <<-PP
158
+ if false {
159
+ class foo {
160
+ }
156
161
  }
157
- }
158
- PP
159
-
160
- lambda { Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode")) }.should raise_error(Puppet::Error)
161
- end
162
+ PP
162
163
 
163
- describe "when defining relationships" do
164
- def extract_name(ref)
165
- ref.sub(/File\[(\w+)\]/, '\1')
164
+ lambda { Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode")) }.should raise_error(Puppet::Error)
166
165
  end
167
166
 
168
- let(:node) { Puppet::Node.new('mynode') }
169
- let(:code) do
170
- <<-MANIFEST
171
- file { [a,b,c]:
172
- mode => 0644,
173
- }
174
- file { [d,e]:
175
- mode => 0755,
176
- }
177
- MANIFEST
178
- end
179
- let(:expected_relationships) { [] }
180
- let(:expected_subscriptions) { [] }
167
+ describe "when defining relationships" do
168
+ def extract_name(ref)
169
+ ref.sub(/File\[(\w+)\]/, '\1')
170
+ end
181
171
 
182
- before :each do
183
- Puppet[:code] = code
184
- end
172
+ let(:node) { Puppet::Node.new('mynode') }
173
+ let(:code) do
174
+ <<-MANIFEST
175
+ file { [a,b,c]:
176
+ mode => 0644,
177
+ }
178
+ file { [d,e]:
179
+ mode => 0755,
180
+ }
181
+ MANIFEST
182
+ end
183
+ let(:expected_relationships) { [] }
184
+ let(:expected_subscriptions) { [] }
185
185
 
186
- after :each do
187
- catalog = described_class.compile(node)
186
+ before :each do
187
+ Puppet[:code] = code
188
+ end
188
189
 
189
- resources = catalog.resources.select { |res| res.type == 'File' }
190
+ after :each do
191
+ catalog = Puppet::Parser::Compiler.compile(node)
190
192
 
191
- actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
192
- resources.map do |res|
193
- dependents = Array(res[relation])
194
- dependents.map { |ref| [res.title, extract_name(ref)] }
195
- end.inject(&:concat)
196
- end
193
+ resources = catalog.resources.select { |res| res.type == 'File' }
197
194
 
198
- actual_relationships.should =~ expected_relationships
199
- actual_subscriptions.should =~ expected_subscriptions
200
- end
195
+ actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
196
+ resources.map do |res|
197
+ dependents = Array(res[relation])
198
+ dependents.map { |ref| [res.title, extract_name(ref)] }
199
+ end.inject(&:concat)
200
+ end
201
201
 
202
- it "should create a relationship" do
203
- code << "File[a] -> File[b]"
202
+ actual_relationships.should =~ expected_relationships
203
+ actual_subscriptions.should =~ expected_subscriptions
204
+ end
204
205
 
205
- expected_relationships << ['a','b']
206
- end
206
+ it "should create a relationship" do
207
+ code << "File[a] -> File[b]"
207
208
 
208
- it "should create a subscription" do
209
- code << "File[a] ~> File[b]"
209
+ expected_relationships << ['a','b']
210
+ end
210
211
 
211
- expected_subscriptions << ['a', 'b']
212
- end
212
+ it "should create a subscription" do
213
+ code << "File[a] ~> File[b]"
213
214
 
214
- it "should create relationships using title arrays" do
215
- code << "File[a,b] -> File[c,d]"
215
+ expected_subscriptions << ['a', 'b']
216
+ end
216
217
 
217
- expected_relationships.concat [
218
- ['a', 'c'],
219
- ['b', 'c'],
220
- ['a', 'd'],
221
- ['b', 'd'],
222
- ]
223
- end
218
+ it "should create relationships using title arrays" do
219
+ code << "File[a,b] -> File[c,d]"
224
220
 
225
- it "should create relationships using collection expressions" do
226
- code << "File <| mode == 0644 |> -> File <| mode == 0755 |>"
227
-
228
- expected_relationships.concat [
229
- ['a', 'd'],
230
- ['b', 'd'],
231
- ['c', 'd'],
232
- ['a', 'e'],
233
- ['b', 'e'],
234
- ['c', 'e'],
235
- ]
236
- end
221
+ expected_relationships.concat [
222
+ ['a', 'c'],
223
+ ['b', 'c'],
224
+ ['a', 'd'],
225
+ ['b', 'd'],
226
+ ]
227
+ end
237
228
 
238
- it "should create relationships using resource names" do
239
- code << "'File[a]' -> 'File[b]'"
229
+ it "should create relationships using collection expressions" do
230
+ code << "File <| mode == 0644 |> -> File <| mode == 0755 |>"
231
+
232
+ expected_relationships.concat [
233
+ ['a', 'd'],
234
+ ['b', 'd'],
235
+ ['c', 'd'],
236
+ ['a', 'e'],
237
+ ['b', 'e'],
238
+ ['c', 'e'],
239
+ ]
240
+ end
240
241
 
241
- expected_relationships << ['a', 'b']
242
- end
242
+ it "should create relationships using resource names" do
243
+ code << "'File[a]' -> 'File[b]'"
243
244
 
244
- it "should create relationships using variables" do
245
- code << <<-MANIFEST
246
- $var = File[a]
247
- $var -> File[b]
248
- MANIFEST
245
+ expected_relationships << ['a', 'b']
246
+ end
249
247
 
250
- expected_relationships << ['a', 'b']
251
- end
248
+ it "should create relationships using variables" do
249
+ code << <<-MANIFEST
250
+ $var = File[a]
251
+ $var -> File[b]
252
+ MANIFEST
252
253
 
253
- it "should create relationships using case statements" do
254
- code << <<-MANIFEST
255
- $var = 10
256
- case $var {
257
- 10: {
258
- file { s1: }
259
- }
260
- 12: {
261
- file { s2: }
262
- }
263
- }
264
- ->
265
- case $var + 2 {
266
- 10: {
267
- file { t1: }
254
+ expected_relationships << ['a', 'b']
255
+ end
256
+
257
+ it "should create relationships using case statements" do
258
+ code << <<-MANIFEST
259
+ $var = 10
260
+ case $var {
261
+ 10: {
262
+ file { s1: }
263
+ }
264
+ 12: {
265
+ file { s2: }
266
+ }
268
267
  }
269
- 12: {
270
- file { t2: }
268
+ ->
269
+ case $var + 2 {
270
+ 10: {
271
+ file { t1: }
272
+ }
273
+ 12: {
274
+ file { t2: }
275
+ }
271
276
  }
272
- }
273
- MANIFEST
277
+ MANIFEST
274
278
 
275
- expected_relationships << ['s1', 't2']
276
- end
279
+ expected_relationships << ['s1', 't2']
280
+ end
277
281
 
278
- it "should create relationships using array members" do
279
- code << <<-MANIFEST
280
- $var = [ [ [ File[a], File[b] ] ] ]
281
- $var[0][0][0] -> $var[0][0][1]
282
- MANIFEST
282
+ it "should create relationships using array members" do
283
+ code << <<-MANIFEST
284
+ $var = [ [ [ File[a], File[b] ] ] ]
285
+ $var[0][0][0] -> $var[0][0][1]
286
+ MANIFEST
283
287
 
284
- expected_relationships << ['a', 'b']
285
- end
288
+ expected_relationships << ['a', 'b']
289
+ end
286
290
 
287
- it "should create relationships using hash members" do
288
- code << <<-MANIFEST
289
- $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
290
- $var[foo][bar][source] -> $var[foo][bar][target]
291
- MANIFEST
291
+ it "should create relationships using hash members" do
292
+ code << <<-MANIFEST
293
+ $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
294
+ $var[foo][bar][source] -> $var[foo][bar][target]
295
+ MANIFEST
292
296
 
293
- expected_relationships << ['a', 'b']
294
- end
297
+ expected_relationships << ['a', 'b']
298
+ end
295
299
 
296
- it "should create relationships using resource declarations" do
297
- code << "file { l: } -> file { r: }"
300
+ it "should create relationships using resource declarations" do
301
+ code << "file { l: } -> file { r: }"
298
302
 
299
- expected_relationships << ['l', 'r']
303
+ expected_relationships << ['l', 'r']
304
+ end
305
+
306
+ it "should chain relationships" do
307
+ code << "File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]"
308
+
309
+ expected_relationships << ['a', 'b'] << ['d', 'c']
310
+ expected_subscriptions << ['b', 'c'] << ['e', 'd']
311
+ end
300
312
  end
313
+ end
301
314
 
302
- it "should chain relationships" do
303
- code << "File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]"
315
+ describe 'using classic parser' do
316
+ before :each do
317
+ Puppet[:parser] = 'current'
318
+ end
319
+ it_behaves_like 'the compiler' do
320
+ end
321
+ end
304
322
 
305
- expected_relationships << ['a', 'b'] << ['d', 'c']
306
- expected_subscriptions << ['b', 'c'] << ['e', 'd']
323
+ describe 'using future parser' do
324
+ # have absolutely no clue to why this is needed - if not required here (even if required by used classes)
325
+ # the tests will fail with error that rgen/ecore/ruby_to_ecore cannot be found...
326
+ # TODO: Solve this mystery !
327
+ require 'rgen/metamodel_builder'
328
+
329
+ before :each do
330
+ Puppet[:parser] = 'future'
307
331
  end
332
+ it_behaves_like 'the compiler'
308
333
  end
309
334
  end