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
@@ -1,6 +1,5 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
- require 'tempfile'
4
3
 
5
4
  describe "the extlookup function" do
6
5
  include PuppetSpec::Files
@@ -33,36 +32,40 @@ describe "the extlookup function" do
33
32
  end
34
33
 
35
34
  it "should lookup the key in a supplied datafile" do
36
- t = Tempfile.new('extlookup.csv') do
35
+ dir = tmpdir("extlookup_spec")
36
+ File.open("#{dir}/extlookup.csv", "w") do |t|
37
37
  t.puts 'key,value'
38
38
  t.puts 'nonkey,nonvalue'
39
- t.close
40
-
41
- result = @scope.function_extlookup([ "key", "default", t.path])
42
- result.should == "value"
43
39
  end
40
+
41
+ @scope.stubs(:[]).with('::extlookup_datadir').returns(dir)
42
+ @scope.stubs(:[]).with('::extlookup_precedence').returns(nil)
43
+ result = @scope.function_extlookup([ "key", "default", "extlookup"])
44
+ result.should == "value"
44
45
  end
45
46
 
46
47
  it "should return an array if the datafile contains more than two columns" do
47
- t = Tempfile.new('extlookup.csv') do
48
+ dir = tmpdir("extlookup_spec")
49
+ File.open("#{dir}/extlookup.csv", "w") do |t|
48
50
  t.puts 'key,value1,value2'
49
51
  t.puts 'nonkey,nonvalue,nonvalue'
50
- t.close
51
-
52
- result = @scope.function_extlookup([ "key", "default", t.path])
53
- result.should == ["value1", "value2"]
54
52
  end
53
+
54
+ @scope.stubs(:[]).with('::extlookup_datadir').returns(dir)
55
+ @scope.stubs(:[]).with('::extlookup_precedence').returns(nil)
56
+ result = @scope.function_extlookup([ "key", "default", "extlookup"])
57
+ result.should == ["value1", "value2"]
55
58
  end
56
59
 
57
60
  it "should raise an error if there's no matching key and no default" do
58
- t = Tempfile.new('extlookup.csv') do
59
- t.puts 'key,value'
61
+ dir = tmpdir("extlookup_spec")
62
+ File.open("#{dir}/extlookup.csv", "w") do |t|
60
63
  t.puts 'nonkey,nonvalue'
61
- t.close
62
-
63
- result = @scope.function_extlookup([ "key", nil, t.path])
64
- result.should == "value"
65
64
  end
65
+
66
+ @scope.stubs(:[]).with('::extlookup_datadir').returns(dir)
67
+ @scope.stubs(:[]).with('::extlookup_precedence').returns(nil)
68
+ lambda { @scope.function_extlookup([ "key", nil, "extlookup"]) }.should raise_error(Puppet::ParseError, /No match found.*key/)
66
69
  end
67
70
 
68
71
  describe "should look in $extlookup_datadir for data files listed by $extlookup_precedence" do
@@ -55,4 +55,9 @@ describe "the fqdn_rand function" do
55
55
  val2 = @scope.function_fqdn_rand([10000000,42])
56
56
  val1.should_not eql(val2)
57
57
  end
58
+
59
+ it "should use the Puppet::Util function" do
60
+ Puppet::Util.expects(:deterministic_rand).with(177093203648075535190027737376590689559,4)
61
+ @scope.function_fqdn_rand([4])
62
+ end
58
63
  end
@@ -1,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'hiera_puppet'
3
- require 'puppet/parser/functions/hiera_include'
4
2
 
5
3
  describe 'Puppet::Parser::Functions#hiera_include' do
6
4
  let :scope do Puppet::Parser::Scope.new_for_test_harness('foo') end
@@ -1,5 +1,3 @@
1
- #! /usr/bin/env ruby
2
-
3
1
  require 'spec_helper'
4
2
 
5
3
  describe 'Puppet::Parser::Functions#hiera' do
@@ -2,6 +2,9 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  describe Puppet::Parser::Functions do
5
+ def callable_functions_from(mod)
6
+ Class.new { include mod }.new
7
+ end
5
8
 
6
9
  it "should have a method for returning an environment-specific module" do
7
10
  Puppet::Parser::Functions.environment_module(Puppet::Node::Environment.new("myenv")).should be_instance_of(Module)
@@ -16,15 +19,15 @@ describe Puppet::Parser::Functions do
16
19
  end
17
20
 
18
21
  describe "when calling newfunction" do
22
+ let(:function_module) { Module.new }
19
23
  before do
20
- @module = Module.new
21
- Puppet::Parser::Functions.stubs(:environment_module).returns @module
24
+ Puppet::Parser::Functions.stubs(:environment_module).returns(function_module)
22
25
  end
23
26
 
24
27
  it "should create the function in the environment module" do
25
28
  Puppet::Parser::Functions.newfunction("name", :type => :rvalue) { |args| }
26
29
 
27
- @module.should be_method_defined :function_name
30
+ function_module.should be_method_defined :function_name
28
31
  end
29
32
 
30
33
  it "should warn if the function already exists" do
@@ -37,12 +40,22 @@ describe Puppet::Parser::Functions do
37
40
  it "should raise an error if the function type is not correct" do
38
41
  lambda { Puppet::Parser::Functions.newfunction("name", :type => :unknown) { |args| } }.should raise_error Puppet::DevError, "Invalid statement type :unknown"
39
42
  end
43
+
44
+ it "instruments the function to profiles the execution" do
45
+ messages = []
46
+ Puppet::Util::Profiler.current = Puppet::Util::Profiler::WallClock.new(proc { |msg| messages << msg }, "id")
47
+
48
+ Puppet::Parser::Functions.newfunction("name", :type => :rvalue) { |args| }
49
+ callable_functions_from(function_module).function_name([])
50
+
51
+ messages.first.should =~ /Called name/
52
+ end
40
53
  end
41
54
 
42
55
  describe "when calling function to test function existence" do
56
+ let(:function_module) { Module.new }
43
57
  before do
44
- @module = Module.new
45
- Puppet::Parser::Functions.stubs(:environment_module).returns @module
58
+ Puppet::Parser::Functions.stubs(:environment_module).returns(function_module)
46
59
  end
47
60
 
48
61
  it "should return false if the function doesn't exist" do
@@ -65,40 +78,39 @@ describe Puppet::Parser::Functions do
65
78
  end
66
79
 
67
80
  describe "when calling function to test arity" do
68
- before :each do
69
- Puppet::Node::Environment.stubs(:current).returns(nil)
70
- @compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("foo"))
71
- @scope = Puppet::Parser::Scope.new(@compiler)
81
+ let(:function_module) { Module.new }
82
+ before do
83
+ Puppet::Parser::Functions.stubs(:environment_module).returns(function_module)
72
84
  end
73
85
 
74
86
  it "should raise an error if the function is called with too many arguments" do
75
87
  Puppet::Parser::Functions.newfunction("name", :arity => 2) { |args| }
76
- lambda { @scope.function_name([1,2,3]) }.should raise_error ArgumentError
88
+ lambda { callable_functions_from(function_module).function_name([1,2,3]) }.should raise_error ArgumentError
77
89
  end
78
90
 
79
91
  it "should raise an error if the function is called with too few arguments" do
80
92
  Puppet::Parser::Functions.newfunction("name", :arity => 2) { |args| }
81
- lambda { @scope.function_name([1]) }.should raise_error ArgumentError
93
+ lambda { callable_functions_from(function_module).function_name([1]) }.should raise_error ArgumentError
82
94
  end
83
95
 
84
96
  it "should not raise an error if the function is called with correct number of arguments" do
85
97
  Puppet::Parser::Functions.newfunction("name", :arity => 2) { |args| }
86
- lambda { @scope.function_name([1,2]) }.should_not raise_error ArgumentError
98
+ lambda { callable_functions_from(function_module).function_name([1,2]) }.should_not raise_error ArgumentError
87
99
  end
88
100
 
89
101
  it "should raise an error if the variable arg function is called with too few arguments" do
90
102
  Puppet::Parser::Functions.newfunction("name", :arity => -3) { |args| }
91
- lambda { @scope.function_name([1]) }.should raise_error ArgumentError
103
+ lambda { callable_functions_from(function_module).function_name([1]) }.should raise_error ArgumentError
92
104
  end
93
105
 
94
106
  it "should not raise an error if the variable arg function is called with correct number of arguments" do
95
107
  Puppet::Parser::Functions.newfunction("name", :arity => -3) { |args| }
96
- lambda { @scope.function_name([1,2]) }.should_not raise_error ArgumentError
108
+ lambda { callable_functions_from(function_module).function_name([1,2]) }.should_not raise_error ArgumentError
97
109
  end
98
110
 
99
111
  it "should not raise an error if the variable arg function is called with more number of arguments" do
100
112
  Puppet::Parser::Functions.newfunction("name", :arity => -3) { |args| }
101
- lambda { @scope.function_name([1,2,3]) }.should_not raise_error ArgumentError
113
+ lambda { callable_functions_from(function_module).function_name([1,2,3]) }.should_not raise_error ArgumentError
102
114
  end
103
115
  end
104
116
 
@@ -0,0 +1,110 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+
5
+ require 'unit/parser/methods/shared'
6
+
7
+ describe 'the collect method' do
8
+ include PuppetSpec::Compiler
9
+
10
+ before :each do
11
+ Puppet[:parser] = "future"
12
+ end
13
+
14
+ context "using future parser" do
15
+ context "in Ruby style should be callable as" do
16
+ it 'collect on an array (multiplying each value by 2)' do
17
+ catalog = compile_to_catalog(<<-MANIFEST)
18
+ $a = [1,2,3]
19
+ $a.collect {|$x| $x*2}.foreach {|$v|
20
+ file { "/file_$v": ensure => present }
21
+ }
22
+ MANIFEST
23
+
24
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
25
+ catalog.resource(:file, "/file_4")['ensure'].should == 'present'
26
+ catalog.resource(:file, "/file_6")['ensure'].should == 'present'
27
+ end
28
+
29
+ it 'collect on a hash selecting keys' do
30
+ catalog = compile_to_catalog(<<-MANIFEST)
31
+ $a = {'a'=>1,'b'=>2,'c'=>3}
32
+ $a.collect {|$x| $x[0]}.foreach {|$k|
33
+ file { "/file_$k": ensure => present }
34
+ }
35
+ MANIFEST
36
+
37
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
38
+ catalog.resource(:file, "/file_b")['ensure'].should == 'present'
39
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
40
+ end
41
+ it 'foreach on a hash selecting value' do
42
+ catalog = compile_to_catalog(<<-MANIFEST)
43
+ $a = {'a'=>1,'b'=>2,'c'=>3}
44
+ $a.collect {|$x| $x[1]}.foreach {|$k|
45
+ file { "/file_$k": ensure => present }
46
+ }
47
+ MANIFEST
48
+
49
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
50
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
51
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
52
+ end
53
+ end
54
+ context "in Java style should be callable as" do
55
+ shared_examples_for 'java style' do
56
+ it 'collect on an array (multiplying each value by 2)' do
57
+ catalog = compile_to_catalog(<<-MANIFEST)
58
+ $a = [1,2,3]
59
+ $a.collect |$x| #{farr}{ $x*2}.foreach |$v| #{farr}{
60
+ file { "/file_$v": ensure => present }
61
+ }
62
+ MANIFEST
63
+
64
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
65
+ catalog.resource(:file, "/file_4")['ensure'].should == 'present'
66
+ catalog.resource(:file, "/file_6")['ensure'].should == 'present'
67
+ end
68
+
69
+ it 'collect on a hash selecting keys' do
70
+ catalog = compile_to_catalog(<<-MANIFEST)
71
+ $a = {'a'=>1,'b'=>2,'c'=>3}
72
+ $a.collect |$x| #{farr}{ $x[0]}.foreach |$k| #{farr}{
73
+ file { "/file_$k": ensure => present }
74
+ }
75
+ MANIFEST
76
+
77
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
78
+ catalog.resource(:file, "/file_b")['ensure'].should == 'present'
79
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
80
+ end
81
+
82
+ it 'foreach on a hash selecting value' do
83
+ catalog = compile_to_catalog(<<-MANIFEST)
84
+ $a = {'a'=>1,'b'=>2,'c'=>3}
85
+ $a.collect |$x| #{farr} {$x[1]}.foreach |$k|#{farr}{
86
+ file { "/file_$k": ensure => present }
87
+ }
88
+ MANIFEST
89
+
90
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
91
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
92
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
93
+ end
94
+ end
95
+ describe 'without fat arrow' do
96
+ it_should_behave_like 'java style' do
97
+ let(:farr) { '' }
98
+ end
99
+ end
100
+ describe 'with fat arrow' do
101
+ it_should_behave_like 'java style' do
102
+ let(:farr) { '=>' }
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ it_should_behave_like 'all iterative functions argument checks', 'collect'
109
+ it_should_behave_like 'all iterative functions hash handling', 'collect'
110
+ end
@@ -0,0 +1,91 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+ require 'rubygems'
5
+
6
+ describe 'the each method' do
7
+ include PuppetSpec::Compiler
8
+
9
+ before :each do
10
+ Puppet[:parser] = 'future'
11
+ end
12
+
13
+ context "should be callable as" do
14
+ it 'each on an array selecting each value' do
15
+ catalog = compile_to_catalog(<<-MANIFEST)
16
+ $a = [1,2,3]
17
+ $a.each |$v| {
18
+ file { "/file_$v": ensure => present }
19
+ }
20
+ MANIFEST
21
+
22
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
23
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
24
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
25
+ end
26
+ it 'each on an array selecting each value - function call style' do
27
+ catalog = compile_to_catalog(<<-MANIFEST)
28
+ $a = [1,2,3]
29
+ each ($a) |$index, $v| => {
30
+ file { "/file_$v": ensure => present }
31
+ }
32
+ MANIFEST
33
+
34
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
35
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
36
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
37
+ end
38
+
39
+ it 'each on an array with index' do
40
+ catalog = compile_to_catalog(<<-MANIFEST)
41
+ $a = [present, absent, present]
42
+ $a.each |$k,$v| {
43
+ file { "/file_${$k+1}": ensure => $v }
44
+ }
45
+ MANIFEST
46
+
47
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
48
+ catalog.resource(:file, "/file_2")['ensure'].should == 'absent'
49
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
50
+ end
51
+
52
+ it 'each on a hash selecting entries' do
53
+ catalog = compile_to_catalog(<<-MANIFEST)
54
+ $a = {'a'=>'present','b'=>'absent','c'=>'present'}
55
+ $a.each |$e| {
56
+ file { "/file_${e[0]}": ensure => $e[1] }
57
+ }
58
+ MANIFEST
59
+
60
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
61
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
62
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
63
+ end
64
+ it 'each on a hash selecting key and value' do
65
+ catalog = compile_to_catalog(<<-MANIFEST)
66
+ $a = {'a'=>present,'b'=>absent,'c'=>present}
67
+ $a.each |$k, $v| {
68
+ file { "/file_$k": ensure => $v }
69
+ }
70
+ MANIFEST
71
+
72
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
73
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
74
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
75
+ end
76
+ end
77
+ context "should produce receiver" do
78
+ it 'each checking produced value using single expression' do
79
+ catalog = compile_to_catalog(<<-MANIFEST)
80
+ $a = [1, 3, 2]
81
+ $b = $a.each |$x| { "unwanted" }
82
+ file { "/file_${b[1]}":
83
+ ensure => present
84
+ }
85
+ MANIFEST
86
+
87
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
88
+ end
89
+
90
+ end
91
+ end
@@ -0,0 +1,91 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+ require 'rubygems'
5
+
6
+ describe 'the foreach method' do
7
+ include PuppetSpec::Compiler
8
+
9
+ before :each do
10
+ Puppet[:parser] = 'future'
11
+ end
12
+
13
+ context "should be callable as" do
14
+ it 'foreach on an array selecting each value' do
15
+ catalog = compile_to_catalog(<<-MANIFEST)
16
+ $a = [1,2,3]
17
+ $a.foreach {|$v|
18
+ file { "/file_$v": ensure => present }
19
+ }
20
+ MANIFEST
21
+
22
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
23
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
24
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
25
+ end
26
+ it 'foreach on an array selecting each value - function call style' do
27
+ catalog = compile_to_catalog(<<-MANIFEST)
28
+ $a = [1,2,3]
29
+ foreach ($a) {|$v|
30
+ file { "/file_$v": ensure => present }
31
+ }
32
+ MANIFEST
33
+
34
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
35
+ catalog.resource(:file, "/file_2")['ensure'].should == 'present'
36
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
37
+ end
38
+
39
+ it 'foreach on an array with index' do
40
+ catalog = compile_to_catalog(<<-MANIFEST)
41
+ $a = [present, absent, present]
42
+ $a.foreach {|$k,$v|
43
+ file { "/file_${$k+1}": ensure => $v }
44
+ }
45
+ MANIFEST
46
+
47
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
48
+ catalog.resource(:file, "/file_2")['ensure'].should == 'absent'
49
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
50
+ end
51
+
52
+ it 'foreach on a hash selecting entries' do
53
+ catalog = compile_to_catalog(<<-MANIFEST)
54
+ $a = {'a'=>'present','b'=>'absent','c'=>'present'}
55
+ $a.foreach {|$e|
56
+ file { "/file_${e[0]}": ensure => $e[1] }
57
+ }
58
+ MANIFEST
59
+
60
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
61
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
62
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
63
+ end
64
+ it 'foreach on a hash selecting key and value' do
65
+ catalog = compile_to_catalog(<<-MANIFEST)
66
+ $a = {'a'=>present,'b'=>absent,'c'=>present}
67
+ $a.foreach {|$k, $v|
68
+ file { "/file_$k": ensure => $v }
69
+ }
70
+ MANIFEST
71
+
72
+ catalog.resource(:file, "/file_a")['ensure'].should == 'present'
73
+ catalog.resource(:file, "/file_b")['ensure'].should == 'absent'
74
+ catalog.resource(:file, "/file_c")['ensure'].should == 'present'
75
+ end
76
+ end
77
+ context "should produce receiver" do
78
+ it 'each checking produced value using single expression' do
79
+ catalog = compile_to_catalog(<<-MANIFEST)
80
+ $a = [1, 3, 2]
81
+ $b = $a.each |$x| { $x }
82
+ file { "/file_${b[1]}":
83
+ ensure => present
84
+ }
85
+ MANIFEST
86
+
87
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
88
+ end
89
+
90
+ end
91
+ end