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,67 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+
5
+ describe 'the reduce method' do
6
+ include PuppetSpec::Compiler
7
+
8
+ before :all do
9
+ # enable switching back
10
+ @saved_parser = Puppet[:parser]
11
+ # These tests only work with future parser
12
+ end
13
+ after :all do
14
+ # switch back to original
15
+ Puppet[:parser] = @saved_parser
16
+ end
17
+
18
+ before :each do
19
+ node = Puppet::Node.new("floppy", :environment => 'production')
20
+ @compiler = Puppet::Parser::Compiler.new(node)
21
+ @scope = Puppet::Parser::Scope.new(@compiler)
22
+ @topscope = @scope.compiler.topscope
23
+ @scope.parent = @topscope
24
+ Puppet[:parser] = 'future'
25
+ end
26
+
27
+ context "should be callable as" do
28
+ it 'reduce on an array' do
29
+ catalog = compile_to_catalog(<<-MANIFEST)
30
+ $a = [1,2,3]
31
+ $b = $a.reduce {|$memo, $x| $memo + $x }
32
+ file { "/file_$b": ensure => present }
33
+ MANIFEST
34
+
35
+ catalog.resource(:file, "/file_6")['ensure'].should == 'present'
36
+ end
37
+ it 'reduce on an array with start value' do
38
+ catalog = compile_to_catalog(<<-MANIFEST)
39
+ $a = [1,2,3]
40
+ $b = $a.reduce(4) {|$memo, $x| $memo + $x }
41
+ file { "/file_$b": ensure => present }
42
+ MANIFEST
43
+
44
+ catalog.resource(:file, "/file_10")['ensure'].should == 'present'
45
+ end
46
+ it 'reduce on a hash' do
47
+ catalog = compile_to_catalog(<<-MANIFEST)
48
+ $a = {a=>1, b=>2, c=>3}
49
+ $start = [ignored, 4]
50
+ $b = $a.reduce {|$memo, $x| ['sum', $memo[1] + $x[1]] }
51
+ file { "/file_${$b[0]}_${$b[1]}": ensure => present }
52
+ MANIFEST
53
+
54
+ catalog.resource(:file, "/file_sum_6")['ensure'].should == 'present'
55
+ end
56
+ it 'reduce on a hash with start value' do
57
+ catalog = compile_to_catalog(<<-MANIFEST)
58
+ $a = {a=>1, b=>2, c=>3}
59
+ $start = ['ignored', 4]
60
+ $b = $a.reduce($start) {|$memo, $x| ['sum', $memo[1] + $x[1]] }
61
+ file { "/file_${$b[0]}_${$b[1]}": ensure => present }
62
+ MANIFEST
63
+
64
+ catalog.resource(:file, "/file_sum_10")['ensure'].should == 'present'
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,73 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+
5
+ require 'unit/parser/methods/shared'
6
+
7
+ describe 'the reject method' do
8
+ include PuppetSpec::Compiler
9
+
10
+ before :each do
11
+ Puppet[:parser] = 'future'
12
+ end
13
+
14
+ it 'rejects on an array (no berries)' do
15
+ catalog = compile_to_catalog(<<-MANIFEST)
16
+ $a = ['strawberry','blueberry','orange']
17
+ $a.reject {|$x| $x =~ /berry$/}.foreach {|$v|
18
+ file { "/file_$v": ensure => present }
19
+ }
20
+ MANIFEST
21
+
22
+ catalog.resource(:file, "/file_orange")['ensure'].should == 'present'
23
+ catalog.resource(:file, "/file_strawberry").should == nil
24
+ end
25
+
26
+ it 'produces an array when acting on an array' do
27
+ catalog = compile_to_catalog(<<-MANIFEST)
28
+ $a = ['strawberry','blueberry','orange']
29
+ $b = $a.reject {|$x| $x =~ /berry$/}
30
+ file { "/file_${b[0]}": ensure => present }
31
+
32
+ MANIFEST
33
+
34
+ catalog.resource(:file, "/file_orange")['ensure'].should == 'present'
35
+ catalog.resource(:file, "/file_strawberry").should == nil
36
+ end
37
+
38
+ it 'rejects on a hash (all berries) by key' do
39
+ catalog = compile_to_catalog(<<-MANIFEST)
40
+ $a = {'strawberry'=>'red','blueberry'=>'blue','orange'=>'orange'}
41
+ $a.reject {|$x| $x[0] =~ /berry$/}.foreach {|$v|
42
+ file { "/file_${v[0]}": ensure => present }
43
+ }
44
+ MANIFEST
45
+
46
+ catalog.resource(:file, "/file_orange")['ensure'].should == 'present'
47
+ end
48
+
49
+ it 'produces a hash when acting on a hash' do
50
+ catalog = compile_to_catalog(<<-MANIFEST)
51
+ $a = {'strawberry'=>'red','blueberry'=>'blue','grape'=>'purple'}
52
+ $b = $a.reject {|$x| $x[0] =~ /berry$/}
53
+ file { "/file_${b[grape]}": ensure => present }
54
+
55
+ MANIFEST
56
+
57
+ catalog.resource(:file, "/file_purple")['ensure'].should == 'present'
58
+ end
59
+
60
+ it 'rejects on a hash (all berries) by value' do
61
+ catalog = compile_to_catalog(<<-MANIFEST)
62
+ $a = {'strawb'=>'red berry','blueb'=>'blue berry','orange'=>'orange fruit'}
63
+ $a.reject {|$x| $x[1] =~ /berry$/}.foreach {|$v|
64
+ file { "/file_${v[0]}": ensure => present }
65
+ }
66
+ MANIFEST
67
+
68
+ catalog.resource(:file, "/file_orange")['ensure'].should == 'present'
69
+ end
70
+
71
+ it_should_behave_like 'all iterative functions argument checks', 'reject'
72
+ it_should_behave_like 'all iterative functions hash handling', 'reject'
73
+ end
@@ -0,0 +1,79 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+
5
+ require 'unit/parser/methods/shared'
6
+
7
+ describe 'the select method' do
8
+ include PuppetSpec::Compiler
9
+
10
+ before :each do
11
+ Puppet[:parser] = 'future'
12
+ end
13
+
14
+ it 'should select on an array (all berries)' do
15
+ catalog = compile_to_catalog(<<-MANIFEST)
16
+ $a = ['strawberry','blueberry','orange']
17
+ $a.select {|$x| $x =~ /berry$/}.foreach {|$v|
18
+ file { "/file_$v": ensure => present }
19
+ }
20
+ MANIFEST
21
+
22
+ catalog.resource(:file, "/file_strawberry")['ensure'].should == 'present'
23
+ catalog.resource(:file, "/file_blueberry")['ensure'].should == 'present'
24
+ end
25
+
26
+ it 'should produce an array when acting on an array' do
27
+ catalog = compile_to_catalog(<<-MANIFEST)
28
+ $a = ['strawberry','blueberry','orange']
29
+ $b = $a.select {|$x| $x =~ /berry$/}
30
+ file { "/file_${b[0]}": ensure => present }
31
+ file { "/file_${b[1]}": ensure => present }
32
+ MANIFEST
33
+
34
+ catalog.resource(:file, "/file_strawberry")['ensure'].should == 'present'
35
+ catalog.resource(:file, "/file_blueberry")['ensure'].should == 'present'
36
+ end
37
+
38
+ it 'selects on a hash (all berries) by key' do
39
+ catalog = compile_to_catalog(<<-MANIFEST)
40
+ $a = {'strawberry'=>'red','blueberry'=>'blue','orange'=>'orange'}
41
+ $a.select {|$x| $x[0] =~ /berry$/}.foreach {|$v|
42
+ file { "/file_${v[0]}": ensure => present }
43
+ }
44
+ MANIFEST
45
+
46
+ catalog.resource(:file, "/file_strawberry")['ensure'].should == 'present'
47
+ catalog.resource(:file, "/file_blueberry")['ensure'].should == 'present'
48
+ end
49
+
50
+ it 'should produce a hash when acting on a hash' do
51
+ catalog = compile_to_catalog(<<-MANIFEST)
52
+ $a = {'strawberry'=>'red','blueberry'=>'blue','orange'=>'orange'}
53
+ $b = $a.select {|$x| $x[0] =~ /berry$/}
54
+ file { "/file_${b['strawberry']}": ensure => present }
55
+ file { "/file_${b['blueberry']}": ensure => present }
56
+ file { "/file_${b['orange']}": ensure => present }
57
+
58
+ MANIFEST
59
+
60
+ catalog.resource(:file, "/file_red")['ensure'].should == 'present'
61
+ catalog.resource(:file, "/file_blue")['ensure'].should == 'present'
62
+ catalog.resource(:file, "/file_")['ensure'].should == 'present'
63
+ end
64
+
65
+ it 'selects on a hash (all berries) by value' do
66
+ catalog = compile_to_catalog(<<-MANIFEST)
67
+ $a = {'strawb'=>'red berry','blueb'=>'blue berry','orange'=>'orange fruit'}
68
+ $a.select {|$x| $x[1] =~ /berry$/}.foreach {|$v|
69
+ file { "/file_${v[0]}": ensure => present }
70
+ }
71
+ MANIFEST
72
+
73
+ catalog.resource(:file, "/file_strawb")['ensure'].should == 'present'
74
+ catalog.resource(:file, "/file_blueb")['ensure'].should == 'present'
75
+ end
76
+
77
+ it_should_behave_like 'all iterative functions argument checks', 'select'
78
+ it_should_behave_like 'all iterative functions hash handling', 'select'
79
+ end
@@ -0,0 +1,61 @@
1
+
2
+ shared_examples_for 'all iterative functions hash handling' do |func|
3
+ it 'passes a hash entry as an array of the key and value' do
4
+ catalog = compile_to_catalog(<<-MANIFEST)
5
+ {a=>1}.#{func} { |$v| notify { "${v[0]} ${v[1]}": } }
6
+ MANIFEST
7
+
8
+ catalog.resource(:notify, "a 1").should_not be_nil
9
+ end
10
+ end
11
+
12
+ shared_examples_for 'all iterative functions argument checks' do |func|
13
+
14
+ it 'raises an error when defined with more than 1 argument' do
15
+ expect do
16
+ compile_to_catalog(<<-MANIFEST)
17
+ [1].#{func} { |$x, $yikes| }
18
+ MANIFEST
19
+ end.to raise_error(Puppet::Error, /Too few arguments/)
20
+ end
21
+
22
+ it 'raises an error when defined with fewer than 1 argument' do
23
+ expect do
24
+ compile_to_catalog(<<-MANIFEST)
25
+ [1].#{func} { || }
26
+ MANIFEST
27
+ end.to raise_error(Puppet::Error, /Too many arguments/)
28
+ end
29
+
30
+ it 'raises an error when used against an unsupported type' do
31
+ expect do
32
+ compile_to_catalog(<<-MANIFEST)
33
+ "not correct".#{func} { |$v| }
34
+ MANIFEST
35
+ end.to raise_error(Puppet::Error, /must be an Array or a Hash/)
36
+ end
37
+
38
+ it 'raises an error when called with any parameters besides a block' do
39
+ expect do
40
+ compile_to_catalog(<<-MANIFEST)
41
+ [1].#{func}(1) { |$v| }
42
+ MANIFEST
43
+ end.to raise_error(Puppet::Error, /Wrong number of arguments/)
44
+ end
45
+
46
+ it 'raises an error when called without a block' do
47
+ expect do
48
+ compile_to_catalog(<<-MANIFEST)
49
+ [1].#{func}()
50
+ MANIFEST
51
+ end.to raise_error(Puppet::Error, /Wrong number of arguments/)
52
+ end
53
+
54
+ it 'raises an error when called without a block' do
55
+ expect do
56
+ compile_to_catalog(<<-MANIFEST)
57
+ [1].#{func}(1)
58
+ MANIFEST
59
+ end.to raise_error(Puppet::Error, /must be a parameterized block/)
60
+ end
61
+ end
@@ -0,0 +1,97 @@
1
+ require 'puppet'
2
+ require 'spec_helper'
3
+ require 'puppet_spec/compiler'
4
+ require 'rubygems'
5
+
6
+ describe 'methods' do
7
+ include PuppetSpec::Compiler
8
+
9
+ before :all do
10
+ # enable switching back
11
+ @saved_parser = Puppet[:parser]
12
+ # These tests only work with future parser
13
+ Puppet[:parser] = 'future'
14
+ end
15
+ after :all do
16
+ # switch back to original
17
+ Puppet[:parser] = @saved_parser
18
+ end
19
+
20
+ before :each do
21
+ node = Puppet::Node.new("floppy", :environment => 'production')
22
+ @compiler = Puppet::Parser::Compiler.new(node)
23
+ @scope = Puppet::Parser::Scope.new(@compiler)
24
+ @topscope = @scope.compiler.topscope
25
+ @scope.parent = @topscope
26
+ Puppet[:parser] = 'future'
27
+ end
28
+
29
+ context "should be callable on array as" do
30
+
31
+ it 'slice with explicit parameters' do
32
+ catalog = compile_to_catalog(<<-MANIFEST)
33
+ $a = [1, present, 2, absent, 3, present]
34
+ $a.slice(2) |$k,$v| {
35
+ file { "/file_${$k}": ensure => $v }
36
+ }
37
+ MANIFEST
38
+
39
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
40
+ catalog.resource(:file, "/file_2")['ensure'].should == 'absent'
41
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
42
+ end
43
+ it 'slice with one parameter' do
44
+ catalog = compile_to_catalog(<<-MANIFEST)
45
+ $a = [1, present, 2, absent, 3, present]
46
+ $a.slice(2) |$k| {
47
+ file { "/file_${$k[0]}": ensure => $k[1] }
48
+ }
49
+ MANIFEST
50
+
51
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
52
+ catalog.resource(:file, "/file_2")['ensure'].should == 'absent'
53
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
54
+ end
55
+ it 'slice with shorter last slice' do
56
+ catalog = compile_to_catalog(<<-MANIFEST)
57
+ $a = [1, present, 2, present, 3, absent]
58
+ $a.slice(4) |$a, $b, $c, $d| {
59
+ file { "/file_$a.$c": ensure => $b }
60
+ }
61
+ MANIFEST
62
+
63
+ catalog.resource(:file, "/file_1.2")['ensure'].should == 'present'
64
+ catalog.resource(:file, "/file_3.")['ensure'].should == 'absent'
65
+ end
66
+ end
67
+ context "should be callable on hash as" do
68
+
69
+ it 'slice with explicit parameters, missing are empty' do
70
+ catalog = compile_to_catalog(<<-MANIFEST)
71
+ $a = {1=>present, 2=>present, 3=>absent}
72
+ $a.slice(2) |$a,$b| {
73
+ file { "/file_${a[0]}.${b[0]}": ensure => $a[1] }
74
+ }
75
+ MANIFEST
76
+
77
+ catalog.resource(:file, "/file_1.2")['ensure'].should == 'present'
78
+ catalog.resource(:file, "/file_3.")['ensure'].should == 'absent'
79
+ end
80
+
81
+ end
82
+ context "when called without a block" do
83
+ it "should produce an array with the result" do
84
+ catalog = compile_to_catalog(<<-MANIFEST)
85
+ $a = [1, present, 2, absent, 3, present]
86
+ $a.slice(2).each |$k| {
87
+ file { "/file_${$k[0]}": ensure => $k[1] }
88
+ }
89
+ MANIFEST
90
+
91
+ catalog.resource(:file, "/file_1")['ensure'].should == 'present'
92
+ catalog.resource(:file, "/file_2")['ensure'].should == 'absent'
93
+ catalog.resource(:file, "/file_3")['ensure'].should == 'present'
94
+
95
+ end
96
+ end
97
+ end
@@ -100,11 +100,11 @@ describe Puppet::Parser do
100
100
  Puppet::Parser::AST::Not.expects(:new).with { |h| h[:value].is_a?(Puppet::Parser::AST::Boolean) }
101
101
  @parser.parse("unless false { $var = 1 }")
102
102
  end
103
-
103
+
104
104
  it "should not raise an error with empty statements" do
105
105
  expect { @parser.parse("unless false { }") }.to_not raise_error
106
106
  end
107
-
107
+
108
108
  #test for bug #13296
109
109
  it "should not override 'unless' as a parameter inside resources" do
110
110
  lambda { @parser.parse("exec {'/bin/echo foo': unless => '/usr/bin/false',}") }.should_not raise_error
@@ -84,32 +84,34 @@ describe Puppet::Parser::Scope do
84
84
  end
85
85
 
86
86
  describe "when custom functions are called" do
87
- before :each do
88
- @env = Puppet::Node::Environment.new('testing')
89
- @compiler = Puppet::Parser::Compiler.new(Puppet::Node.new('foo', :environment => @env))
90
- @scope = Puppet::Parser::Scope.new(@compiler)
91
- end
87
+ let(:env) { Puppet::Node::Environment.new('testing') }
88
+ let(:compiler) { Puppet::Parser::Compiler.new(Puppet::Node.new('foo', :environment => env)) }
89
+ let(:scope) { Puppet::Parser::Scope.new(compiler) }
92
90
 
93
- it "should load and call the method if it looks like a function and it exists" do
94
- @scope.function_sprintf(["%b", 123]).should == "1111011"
91
+ it "calls methods prefixed with function_ as custom functions" do
92
+ scope.function_sprintf(["%b", 123]).should == "1111011"
95
93
  end
96
94
 
97
- it "should raise and error when called without an Array" do
98
- expect { @scope.function_sprintf("%b", 123) }.to raise_error ArgumentError, /custom functions must be called with a single array that contains the arguments/
95
+ it "raises an error when arguments are not passed in an Array" do
96
+ expect do
97
+ scope.function_sprintf("%b", 123)
98
+ end.to raise_error ArgumentError, /custom functions must be called with a single array that contains the arguments/
99
99
  end
100
100
 
101
- it "should raise and error when subsequent calls are without an Array" do
102
- @scope.function_sprintf(["first call"])
101
+ it "raises an error on subsequent calls when arguments are not passed in an Array" do
102
+ scope.function_sprintf(["first call"])
103
103
 
104
- expect { @scope.function_sprintf("%b", 123) }.to raise_error ArgumentError, /custom functions must be called with a single array that contains the arguments/
104
+ expect do
105
+ scope.function_sprintf("%b", 123)
106
+ end.to raise_error ArgumentError, /custom functions must be called with a single array that contains the arguments/
105
107
  end
106
108
 
107
- it "should raise NoMethodError if the method doesn't look like a function" do
108
- expect { @scope.sprintf(["%b", 123]) }.to raise_error(NoMethodError)
109
+ it "raises NoMethodError when the not prefixed" do
110
+ expect { scope.sprintf(["%b", 123]) }.to raise_error(NoMethodError)
109
111
  end
110
112
 
111
- it "should raise NoMethodError if the method looks like a function but doesn't exist" do
112
- expect { @scope.function_fake_bs(['cows']) }.to raise_error(NoMethodError)
113
+ it "raises NoMethodError when prefixed with function_ but it doesn't exist" do
114
+ expect { scope.function_fake_bs(['cows']) }.to raise_error(NoMethodError)
113
115
  end
114
116
  end
115
117
 
@@ -493,6 +495,27 @@ describe Puppet::Parser::Scope do
493
495
  end
494
496
  end
495
497
 
498
+ context "when using ephemeral as local scope" do
499
+ it "should store all variables in local scope" do
500
+ @scope.new_ephemeral true
501
+ @scope.setvar("apple", :fruit)
502
+ @scope["apple"].should == :fruit
503
+ end
504
+
505
+ it "should remove all local scope variables on unset" do
506
+ @scope.new_ephemeral true
507
+ @scope.setvar("apple", :fruit)
508
+ @scope["apple"].should == :fruit
509
+ @scope.unset_ephemeral_var
510
+ @scope["apple"].should == nil
511
+ end
512
+ it "should be created from a hash" do
513
+ @scope.ephemeral_from({ "apple" => :fruit, "strawberry" => :berry})
514
+ @scope["apple"].should == :fruit
515
+ @scope["strawberry"].should == :berry
516
+ end
517
+ end
518
+
496
519
  describe "when setting ephemeral vars from matches" do
497
520
  before :each do
498
521
  @match = stub 'match', :is_a? => true