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,175 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+
5
+ # relative to this spec file (./) does not work as this file is loaded by rspec
6
+ require File.join(File.dirname(__FILE__), '/parser_rspec_helper')
7
+
8
+ describe "egrammar parsing containers" do
9
+ include ParserRspecHelper
10
+
11
+ context "When parsing file scope" do
12
+ it "$a = 10 $b = 20" do
13
+ dump(parse("$a = 10 $b = 20")).should == "(block (= $a 10) (= $b 20))"
14
+ end
15
+
16
+ it "$a = 10" do
17
+ dump(parse("$a = 10")).should == "(= $a 10)"
18
+ end
19
+ end
20
+
21
+ context "When parsing class" do
22
+ it "class foo {}" do
23
+ dump(parse("class foo {}")).should == "(class foo ())"
24
+ end
25
+
26
+ it "class foo::bar {}" do
27
+ dump(parse("class foo::bar {}")).should == "(class foo::bar ())"
28
+ end
29
+
30
+ it "class foo inherits bar {}" do
31
+ dump(parse("class foo inherits bar {}")).should == "(class foo (inherits bar) ())"
32
+ end
33
+
34
+ it "class foo($a) {}" do
35
+ dump(parse("class foo($a) {}")).should == "(class foo (parameters a) ())"
36
+ end
37
+
38
+ it "class foo($a, $b) {}" do
39
+ dump(parse("class foo($a, $b) {}")).should == "(class foo (parameters a b) ())"
40
+ end
41
+
42
+ it "class foo($a, $b=10) {}" do
43
+ dump(parse("class foo($a, $b=10) {}")).should == "(class foo (parameters a (= b 10)) ())"
44
+ end
45
+
46
+ it "class foo($a, $b) inherits belgo::bar {}" do
47
+ dump(parse("class foo($a, $b) inherits belgo::bar{}")).should == "(class foo (inherits belgo::bar) (parameters a b) ())"
48
+ end
49
+
50
+ it "class foo {$a = 10 $b = 20}" do
51
+ dump(parse("class foo {$a = 10 $b = 20}")).should == "(class foo (block (= $a 10) (= $b 20)))"
52
+ end
53
+
54
+ context "it should handle '3x weirdness'" do
55
+ it "class class {} # a class named 'class'" do
56
+ # Not as much weird as confusing that it is possible to name a class 'class'. Can have
57
+ # a very confusing effect when resolving relative names, getting the global hardwired "Class"
58
+ # instead of some foo::class etc.
59
+ # This is allowed in 3.x.
60
+ dump(parse("class class {}")).should == "(class class ())"
61
+ end
62
+
63
+ it "class default {} # a class named 'default'" do
64
+ # The weirdness here is that a class can inherit 'default' but not declare a class called default.
65
+ # (It will work with relative names i.e. foo::default though). The whole idea with keywords as
66
+ # names is flawed to begin with - it generally just a very bad idea.
67
+ expect { dump(parse("class default {}")).should == "(class default ())" }.to raise_error(Puppet::ParseError)
68
+ end
69
+
70
+ it "class foo::default {} # a nested name 'default'" do
71
+ dump(parse("class foo::default {}")).should == "(class foo::default ())"
72
+ end
73
+
74
+ it "class class inherits default {} # inherits default", :broken => true do
75
+ dump(parse("class class inherits default {}")).should == "(class class (inherits default) ())"
76
+ end
77
+
78
+ it "class class inherits default {} # inherits default" do
79
+ # TODO: See previous test marked as :broken=>true, it is actually this test (result) that is wacky,
80
+ # this because a class is named at parse time (since class evaluation is lazy, the model must have the
81
+ # full class name for nested classes - only, it gets this wrong when a class is named "class" - or at least
82
+ # I think it is wrong.)
83
+ #
84
+ dump(parse("class class inherits default {}")).should == "(class class::class (inherits default) ())"
85
+ end
86
+
87
+ it "class foo inherits class" do
88
+ dump(parse("class foo inherits class {}")).should == "(class foo (inherits class) ())"
89
+ end
90
+ end
91
+ end
92
+
93
+ context "When the parser parses define" do
94
+ it "define foo {}" do
95
+ dump(parse("define foo {}")).should == "(define foo ())"
96
+ end
97
+
98
+ it "define foo::bar {}" do
99
+ dump(parse("define foo::bar {}")).should == "(define foo::bar ())"
100
+ end
101
+
102
+ it "define foo($a) {}" do
103
+ dump(parse("define foo($a) {}")).should == "(define foo (parameters a) ())"
104
+ end
105
+
106
+ it "define foo($a, $b) {}" do
107
+ dump(parse("define foo($a, $b) {}")).should == "(define foo (parameters a b) ())"
108
+ end
109
+
110
+ it "define foo($a, $b=10) {}" do
111
+ dump(parse("define foo($a, $b=10) {}")).should == "(define foo (parameters a (= b 10)) ())"
112
+ end
113
+
114
+ it "define foo {$a = 10 $b = 20}" do
115
+ dump(parse("define foo {$a = 10 $b = 20}")).should == "(define foo (block (= $a 10) (= $b 20)))"
116
+ end
117
+
118
+ context "it should handle '3x weirdness'" do
119
+ it "define class {} # a define named 'class'" do
120
+ # This is weird because Class already exists, and instantiating this define will probably not
121
+ # work
122
+ dump(parse("define class {}")).should == "(define class ())"
123
+ end
124
+
125
+ it "define default {} # a define named 'default'" do
126
+ # Check unwanted ability to define 'default'.
127
+ # The expression below is not allowed (which is good).
128
+ #
129
+ expect { dump(parse("define default {}")).should == "(define default ())"}.to raise_error(Puppet::ParseError)
130
+ end
131
+ end
132
+ end
133
+
134
+ context "When parsing node" do
135
+ it "node foo {}" do
136
+ dump(parse("node foo {}")).should == "(node (matches foo) ())"
137
+ end
138
+
139
+ it "node foo, x::bar, default {}" do
140
+ dump(parse("node foo, x::bar, default {}")).should == "(node (matches foo x::bar :default) ())"
141
+ end
142
+
143
+ it "node 'foo' {}" do
144
+ dump(parse("node 'foo' {}")).should == "(node (matches 'foo') ())"
145
+ end
146
+
147
+ it "node foo inherits x::bar {}" do
148
+ dump(parse("node foo inherits x::bar {}")).should == "(node (matches foo) (parent x::bar) ())"
149
+ end
150
+
151
+ it "node foo inherits 'bar' {}" do
152
+ dump(parse("node foo inherits 'bar' {}")).should == "(node (matches foo) (parent 'bar') ())"
153
+ end
154
+
155
+ it "node foo inherits default {}" do
156
+ dump(parse("node foo inherits default {}")).should == "(node (matches foo) (parent :default) ())"
157
+ end
158
+
159
+ it "node /web.*/ {}" do
160
+ dump(parse("node /web.*/ {}")).should == "(node (matches /web.*/) ())"
161
+ end
162
+
163
+ it "node /web.*/, /do\.wop.*/, and.so.on {}" do
164
+ dump(parse("node /web.*/, /do\.wop.*/, 'and.so.on' {}")).should == "(node (matches /web.*/ /do\.wop.*/ 'and.so.on') ())"
165
+ end
166
+
167
+ it "node wat inherits /apache.*/ {}" do
168
+ expect { parse("node wat inherits /apache.*/ {}")}.to raise_error(Puppet::ParseError)
169
+ end
170
+
171
+ it "node foo inherits bar {$a = 10 $b = 20}" do
172
+ dump(parse("node foo inherits bar {$a = 10 $b = 20}")).should == "(node (matches foo) (parent bar) (block (= $a 10) (= $b 20)))"
173
+ end
174
+ end
175
+ end
@@ -0,0 +1,228 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+
5
+ # relative to this spec file (./) does not work as this file is loaded by rspec
6
+ require File.join(File.dirname(__FILE__), '/parser_rspec_helper')
7
+
8
+ describe "egrammar parsing resource declarations" do
9
+ include ParserRspecHelper
10
+
11
+ context "When parsing regular resource" do
12
+ it "file { 'title': }" do
13
+ dump(parse("file { 'title': }")).should == [
14
+ "(resource file",
15
+ " ('title'))"
16
+ ].join("\n")
17
+ end
18
+
19
+ it "file { 'title': path => '/somewhere', mode => 0777}" do
20
+ dump(parse("file { 'title': path => '/somewhere', mode => 0777}")).should == [
21
+ "(resource file",
22
+ " ('title'",
23
+ " (path => '/somewhere')",
24
+ " (mode => 0777)))"
25
+ ].join("\n")
26
+ end
27
+
28
+ it "file { 'title': path => '/somewhere', }" do
29
+ dump(parse("file { 'title': path => '/somewhere', }")).should == [
30
+ "(resource file",
31
+ " ('title'",
32
+ " (path => '/somewhere')))"
33
+ ].join("\n")
34
+ end
35
+
36
+ it "file { 'title': , }" do
37
+ dump(parse("file { 'title': , }")).should == [
38
+ "(resource file",
39
+ " ('title'))"
40
+ ].join("\n")
41
+ end
42
+
43
+ it "file { 'title': ; }" do
44
+ dump(parse("file { 'title': ; }")).should == [
45
+ "(resource file",
46
+ " ('title'))"
47
+ ].join("\n")
48
+ end
49
+
50
+ it "file { 'title': ; 'other_title': }" do
51
+ dump(parse("file { 'title': ; 'other_title': }")).should == [
52
+ "(resource file",
53
+ " ('title')",
54
+ " ('other_title'))"
55
+ ].join("\n")
56
+ end
57
+
58
+ it "file { 'title1': path => 'x'; 'title2': path => 'y'}" do
59
+ dump(parse("file { 'title1': path => 'x'; 'title2': path => 'y'}")).should == [
60
+ "(resource file",
61
+ " ('title1'",
62
+ " (path => 'x'))",
63
+ " ('title2'",
64
+ " (path => 'y')))",
65
+ ].join("\n")
66
+ end
67
+ end
68
+
69
+ context "When parsing resource defaults" do
70
+ it "File { }" do
71
+ dump(parse("File { }")).should == "(resource-defaults file)"
72
+ end
73
+
74
+ it "File { mode => 0777 }" do
75
+ dump(parse("File { mode => 0777}")).should == [
76
+ "(resource-defaults file",
77
+ " (mode => 0777))"
78
+ ].join("\n")
79
+ end
80
+ end
81
+
82
+ context "When parsing resource override" do
83
+ it "File['x'] { }" do
84
+ dump(parse("File['x'] { }")).should == "(override (slice file 'x'))"
85
+ end
86
+
87
+ it "File['x'] { x => 1 }" do
88
+ dump(parse("File['x'] { x => 1}")).should == "(override (slice file 'x')\n (x => 1))"
89
+ end
90
+
91
+ it "File['x', 'y'] { x => 1 }" do
92
+ dump(parse("File['x', 'y'] { x => 1}")).should == "(override (slice file ('x' 'y'))\n (x => 1))"
93
+ end
94
+
95
+ it "File['x'] { x => 1, y => 2 }" do
96
+ dump(parse("File['x'] { x => 1, y=> 2}")).should == "(override (slice file 'x')\n (x => 1)\n (y => 2))"
97
+ end
98
+
99
+ it "File['x'] { x +> 1 }" do
100
+ dump(parse("File['x'] { x +> 1}")).should == "(override (slice file 'x')\n (x +> 1))"
101
+ end
102
+ end
103
+
104
+ context "When parsing virtual and exported resources" do
105
+ it "@@file { 'title': }" do
106
+ dump(parse("@@file { 'title': }")).should == "(exported-resource file\n ('title'))"
107
+ end
108
+
109
+ it "@file { 'title': }" do
110
+ dump(parse("@file { 'title': }")).should == "(virtual-resource file\n ('title'))"
111
+ end
112
+
113
+ it "@file { mode => 0777 }" do
114
+ # Defaults are not virtualizeable
115
+ expect {
116
+ dump(parse("@file { mode => 0777 }")).should == ""
117
+ }.to raise_error(Puppet::ParseError, /Defaults are not virtualizable/)
118
+ end
119
+ end
120
+
121
+ context "When parsing class resource" do
122
+ it "class { 'cname': }" do
123
+ dump(parse("class { 'cname': }")).should == [
124
+ "(resource class",
125
+ " ('cname'))"
126
+ ].join("\n")
127
+ end
128
+
129
+ it "class { 'cname': x => 1, y => 2}" do
130
+ dump(parse("class { 'cname': x => 1, y => 2}")).should == [
131
+ "(resource class",
132
+ " ('cname'",
133
+ " (x => 1)",
134
+ " (y => 2)))"
135
+ ].join("\n")
136
+ end
137
+
138
+ it "class { 'cname1': x => 1; 'cname2': y => 2}" do
139
+ dump(parse("class { 'cname1': x => 1; 'cname2': y => 2}")).should == [
140
+ "(resource class",
141
+ " ('cname1'",
142
+ " (x => 1))",
143
+ " ('cname2'",
144
+ " (y => 2)))",
145
+ ].join("\n")
146
+ end
147
+ end
148
+
149
+ context "reported issues in 3.x" do
150
+ it "should not screw up on brackets in title of resource #19632" do
151
+ dump(parse('notify { "thisisa[bug]": }')).should == [
152
+ "(resource notify",
153
+ " ('thisisa[bug]'))",
154
+ ].join("\n")
155
+ end
156
+ end
157
+
158
+ context "When parsing Relationships" do
159
+ it "File[a] -> File[b]" do
160
+ dump(parse("File[a] -> File[b]")).should == "(-> (slice file a) (slice file b))"
161
+ end
162
+
163
+ it "File[a] <- File[b]" do
164
+ dump(parse("File[a] <- File[b]")).should == "(<- (slice file a) (slice file b))"
165
+ end
166
+
167
+ it "File[a] ~> File[b]" do
168
+ dump(parse("File[a] ~> File[b]")).should == "(~> (slice file a) (slice file b))"
169
+ end
170
+
171
+ it "File[a] <~ File[b]" do
172
+ dump(parse("File[a] <~ File[b]")).should == "(<~ (slice file a) (slice file b))"
173
+ end
174
+
175
+ it "Should chain relationships" do
176
+ dump(parse("a -> b -> c")).should ==
177
+ "(-> (-> a b) c)"
178
+ end
179
+
180
+ it "Should chain relationships" do
181
+ dump(parse("File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]")).should ==
182
+ "(<~ (<- (~> (-> (slice file a) (slice file b)) (slice file c)) (slice file d)) (slice file e))"
183
+ end
184
+
185
+ it "should create relationships between collects" do
186
+ dump(parse("File <| mode == 0644 |> -> File <| mode == 0755 |>")).should ==
187
+ "(-> (collect file\n (<| |> (== mode 0644))) (collect file\n (<| |> (== mode 0755))))"
188
+ end
189
+ end
190
+
191
+ context "When parsing collection" do
192
+ context "of virtual resources" do
193
+ it "File <| |>" do
194
+ dump(parse("File <| |>")).should == "(collect file\n (<| |>))"
195
+ end
196
+ end
197
+
198
+ context "of exported resources" do
199
+ it "File <<| |>>" do
200
+ dump(parse("File <<| |>>")).should == "(collect file\n (<<| |>>))"
201
+ end
202
+ end
203
+
204
+ context "queries are parsed with correct precedence" do
205
+ it "File <| tag == 'foo' |>" do
206
+ dump(parse("File <| tag == 'foo' |>")).should == "(collect file\n (<| |> (== tag 'foo')))"
207
+ end
208
+
209
+ it "File <| tag == 'foo' and mode != 0777 |>" do
210
+ dump(parse("File <| tag == 'foo' and mode != 0777 |>")).should == "(collect file\n (<| |> (&& (== tag 'foo') (!= mode 0777))))"
211
+ end
212
+
213
+ it "File <| tag == 'foo' or mode != 0777 |>" do
214
+ dump(parse("File <| tag == 'foo' or mode != 0777 |>")).should == "(collect file\n (<| |> (|| (== tag 'foo') (!= mode 0777))))"
215
+ end
216
+
217
+ it "File <| tag == 'foo' or tag == 'bar' and mode != 0777 |>" do
218
+ dump(parse("File <| tag == 'foo' or tag == 'bar' and mode != 0777 |>")).should ==
219
+ "(collect file\n (<| |> (|| (== tag 'foo') (&& (== tag 'bar') (!= mode 0777)))))"
220
+ end
221
+
222
+ it "File <| (tag == 'foo' or tag == 'bar') and mode != 0777 |>" do
223
+ dump(parse("File <| (tag == 'foo' or tag == 'bar') and mode != 0777 |>")).should ==
224
+ "(collect file\n (<| |> (&& (|| (== tag 'foo') (== tag 'bar')) (!= mode 0777))))"
225
+ end
226
+ end
227
+ end
228
+ end
@@ -0,0 +1,11 @@
1
+ require 'puppet/pops'
2
+
3
+ require File.join(File.dirname(__FILE__), '/../factory_rspec_helper')
4
+
5
+ module ParserRspecHelper
6
+ include FactoryRspecHelper
7
+ def parse(code)
8
+ parser = Puppet::Pops::Parser::Parser.new()
9
+ parser.parse_string(code)
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+
4
+ describe Puppet::Pops::Parser::Parser do
5
+ it "should instantiate a parser" do
6
+ parser = Puppet::Pops::Parser::Parser.new()
7
+ parser.class.should == Puppet::Pops::Parser::Parser
8
+ end
9
+
10
+ it "should parse a code string and return a model" do
11
+ parser = Puppet::Pops::Parser::Parser.new()
12
+ model = parser.parse_string("$a = 10").current
13
+ model.class.should == Model::AssignmentExpression
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+
5
+ # relative to this spec file (./) does not work as this file is loaded by rspec
6
+ require File.join(File.dirname(__FILE__), '/parser_rspec_helper')
7
+
8
+ describe "RGen working with hashes" do
9
+ it "should be possible to create an empty hash after having required the files above" do
10
+ # If this fails, it means the rgen addition to Array is not monkey patched as it
11
+ # should (it will return an array instead of fail in a method_missing), and thus
12
+ # screw up Hash's check if it can do "to_hash' or not.
13
+ #
14
+ Hash[[]]
15
+ end
16
+ end