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,25 @@
1
+ require 'puppet/pops'
2
+ require File.join(File.dirname(__FILE__), 'factory_rspec_helper')
3
+
4
+ describe Puppet::Pops::Containment do
5
+ include FactoryRspecHelper
6
+
7
+ it "Should return an Enumerable if eAllContents is called without arguments" do
8
+ (literal(1) + literal(2)).current.eAllContents.is_a?(Enumerable).should == true
9
+ end
10
+
11
+ it "Should return all content" do
12
+ # Note the top object is not included (an ArithmeticOperation with + operator)
13
+ (literal(1) + literal(2) + literal(3)).current.eAllContents.collect {|x| x}.size.should == 4
14
+ end
15
+
16
+ it "Should return containing feature" do
17
+ left = literal(1)
18
+ right = literal(2)
19
+ op = left + right
20
+
21
+ #pending "eContainingFeature does not work on _uni containments in RGen < 0.6.1"
22
+ left.current.eContainingFeature.should == :left_expr
23
+ right.current.eContainingFeature.should == :right_expr
24
+ end
25
+ end
@@ -0,0 +1,77 @@
1
+ require 'puppet/pops'
2
+
3
+ module FactoryRspecHelper
4
+ def literal(x)
5
+ Puppet::Pops::Model::Factory.literal(x)
6
+ end
7
+
8
+ def block(*args)
9
+ Puppet::Pops::Model::Factory.block(*args)
10
+ end
11
+
12
+ def var(x)
13
+ Puppet::Pops::Model::Factory.var(x)
14
+ end
15
+
16
+ def fqn(x)
17
+ Puppet::Pops::Model::Factory.fqn(x)
18
+ end
19
+
20
+ def string(*args)
21
+ Puppet::Pops::Model::Factory.string(*args)
22
+ end
23
+
24
+ def text(x)
25
+ Puppet::Pops::Model::Factory.text(x)
26
+ end
27
+
28
+ def minus(x)
29
+ Puppet::Pops::Model::Factory.minus(x)
30
+ end
31
+
32
+ def IF(test, then_expr, else_expr=nil)
33
+ Puppet::Pops::Model::Factory.IF(test, then_expr, else_expr)
34
+ end
35
+
36
+ def UNLESS(test, then_expr, else_expr=nil)
37
+ Puppet::Pops::Model::Factory.UNLESS(test, then_expr, else_expr)
38
+ end
39
+
40
+ def CASE(test, *options)
41
+ Puppet::Pops::Model::Factory.CASE(test, *options)
42
+ end
43
+
44
+ def WHEN(values, block)
45
+ Puppet::Pops::Model::Factory.WHEN(values, block)
46
+ end
47
+
48
+ def respond_to? method
49
+ if Puppet::Pops::Model::Factory.respond_to? method
50
+ true
51
+ else
52
+ super
53
+ end
54
+ end
55
+
56
+ def method_missing(method, *args, &block)
57
+ if Puppet::Pops::Model::Factory.respond_to? method
58
+ Puppet::Pops::Model::Factory.send(method, *args, &block)
59
+ else
60
+ super
61
+ end
62
+ end
63
+
64
+ # i.e. Selector Entry 1 => 'hello'
65
+ def MAP(match, value)
66
+ Puppet::Pops::Model::Factory.MAP(match, value)
67
+ end
68
+
69
+ def dump(x)
70
+ Puppet::Pops::Model::ModelTreeDumper.new.dump(x)
71
+ end
72
+
73
+ def unindent x
74
+ (x.gsub /^#{x[/\A\s*/]}/, '').chomp
75
+ end
76
+ factory ||= Puppet::Pops::Model::Factory
77
+ end
@@ -0,0 +1,329 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+ require File.join(File.dirname(__FILE__), '/factory_rspec_helper')
5
+
6
+ # This file contains testing of the pops model factory
7
+ #
8
+
9
+ describe Puppet::Pops::Model::Factory do
10
+ include FactoryRspecHelper
11
+
12
+ context "When factory methods are invoked they should produce expected results" do
13
+ it "tests #var should create a VariableExpression" do
14
+ var('a').current.class.should == Puppet::Pops::Model::VariableExpression
15
+ end
16
+
17
+ it "tests #fqn should create a QualifiedName" do
18
+ fqn('a').current.class.should == Puppet::Pops::Model::QualifiedName
19
+ end
20
+
21
+ it "tests #QNAME should create a QualifiedName" do
22
+ QNAME('a').current.class.should == Puppet::Pops::Model::QualifiedName
23
+ end
24
+
25
+ it "tests #QREF should create a QualifiedReference" do
26
+ QREF('a').current.class.should == Puppet::Pops::Model::QualifiedReference
27
+ end
28
+
29
+ it "tests #block should create a BlockExpression" do
30
+ block().current.is_a?(Puppet::Pops::Model::BlockExpression).should == true
31
+ end
32
+
33
+ it "should create a literal undef on :undef" do
34
+ literal(:undef).current.class.should == Puppet::Pops::Model::LiteralUndef
35
+ end
36
+
37
+ it "should create a literal default on :default" do
38
+ literal(:default).current.class.should == Puppet::Pops::Model::LiteralDefault
39
+ end
40
+ end
41
+
42
+ context "When calling block_or_expression" do
43
+ it "A single expression should produce identical output" do
44
+ block_or_expression(literal(1) + literal(2)).current.is_a?(Puppet::Pops::Model::ArithmeticExpression).should == true
45
+ end
46
+
47
+ it "Multiple expressions should produce a block expression" do
48
+ built = block_or_expression(literal(1) + literal(2), literal(2) + literal(3)).current
49
+ built.is_a?(Puppet::Pops::Model::BlockExpression).should == true
50
+ built.statements.size.should == 2
51
+ end
52
+ end
53
+
54
+ context "When processing calls with CALL_NAMED" do
55
+ it "Should be possible to state that r-value is required" do
56
+ built = CALL_NAMED("foo", true, []).current
57
+ built.is_a?(Puppet::Pops::Model::CallNamedFunctionExpression).should == true
58
+ built.rval_required.should == true
59
+ end
60
+
61
+ it "Should produce a call expression without arguments" do
62
+ built = CALL_NAMED("foo", false, []).current
63
+ built.is_a?(Puppet::Pops::Model::CallNamedFunctionExpression).should == true
64
+ built.functor_expr.is_a?(Puppet::Pops::Model::QualifiedName).should == true
65
+ built.functor_expr.value.should == "foo"
66
+ built.rval_required.should == false
67
+ built.arguments.size.should == 0
68
+ end
69
+
70
+ it "Should produce a call expression with one argument" do
71
+ built = CALL_NAMED("foo", false, [literal(1) + literal(2)]).current
72
+ built.is_a?(Puppet::Pops::Model::CallNamedFunctionExpression).should == true
73
+ built.functor_expr.is_a?(Puppet::Pops::Model::QualifiedName).should == true
74
+ built.functor_expr.value.should == "foo"
75
+ built.rval_required.should == false
76
+ built.arguments.size.should == 1
77
+ built.arguments[0].is_a?(Puppet::Pops::Model::ArithmeticExpression).should == true
78
+ end
79
+
80
+ it "Should produce a call expression with two arguments" do
81
+ built = CALL_NAMED("foo", false, [literal(1) + literal(2), literal(1) + literal(2)]).current
82
+ built.is_a?(Puppet::Pops::Model::CallNamedFunctionExpression).should == true
83
+ built.functor_expr.is_a?(Puppet::Pops::Model::QualifiedName).should == true
84
+ built.functor_expr.value.should == "foo"
85
+ built.rval_required.should == false
86
+ built.arguments.size.should == 2
87
+ built.arguments[0].is_a?(Puppet::Pops::Model::ArithmeticExpression).should == true
88
+ built.arguments[1].is_a?(Puppet::Pops::Model::ArithmeticExpression).should == true
89
+ end
90
+ end
91
+
92
+ context "When creating attribute operations" do
93
+ it "Should produce an attribute operation for =>" do
94
+ built = ATTRIBUTE_OP("aname", :'=>', 'x').current
95
+ built.is_a?(Puppet::Pops::Model::AttributeOperation)
96
+ built.operator.should == :'=>'
97
+ built.attribute_name.should == "aname"
98
+ built.value_expr.is_a?(Puppet::Pops::Model::LiteralString).should == true
99
+ end
100
+
101
+ it "Should produce an attribute operation for +>" do
102
+ built = ATTRIBUTE_OP("aname", :'+>', 'x').current
103
+ built.is_a?(Puppet::Pops::Model::AttributeOperation)
104
+ built.operator.should == :'+>'
105
+ built.attribute_name.should == "aname"
106
+ built.value_expr.is_a?(Puppet::Pops::Model::LiteralString).should == true
107
+ end
108
+ end
109
+
110
+ context "When processing RESOURCE" do
111
+ it "Should create a Resource body" do
112
+ built = RESOURCE_BODY("title", [ATTRIBUTE_OP('aname', :'=>', 'x')]).current
113
+ built.is_a?(Puppet::Pops::Model::ResourceBody).should == true
114
+ built.title.is_a?(Puppet::Pops::Model::LiteralString).should == true
115
+ built.operations.size.should == 1
116
+ built.operations[0].class.should == Puppet::Pops::Model::AttributeOperation
117
+ built.operations[0].attribute_name.should == 'aname'
118
+ end
119
+
120
+ it "Should create a RESOURCE without a resource body" do
121
+ bodies = []
122
+ built = RESOURCE("rtype", bodies).current
123
+ built.class.should == Puppet::Pops::Model::ResourceExpression
124
+ built.bodies.size.should == 0
125
+ end
126
+
127
+ it "Should create a RESOURCE with 1 resource body" do
128
+ bodies = [] << RESOURCE_BODY('title', [])
129
+ built = RESOURCE("rtype", bodies).current
130
+ built.class.should == Puppet::Pops::Model::ResourceExpression
131
+ built.bodies.size.should == 1
132
+ built.bodies[0].title.value.should == 'title'
133
+ end
134
+
135
+ it "Should create a RESOURCE with 2 resource bodies" do
136
+ bodies = [] << RESOURCE_BODY('title', []) << RESOURCE_BODY('title2', [])
137
+ built = RESOURCE("rtype", bodies).current
138
+ built.class.should == Puppet::Pops::Model::ResourceExpression
139
+ built.bodies.size.should == 2
140
+ built.bodies[0].title.value.should == 'title'
141
+ built.bodies[1].title.value.should == 'title2'
142
+ end
143
+ end
144
+
145
+ context "When processing simple literals" do
146
+ it "Should produce a literal boolean from a boolean" do
147
+ built = literal(true).current
148
+ built.class.should == Puppet::Pops::Model::LiteralBoolean
149
+ built.value.should == true
150
+ built = literal(false).current
151
+ built.class.should == Puppet::Pops::Model::LiteralBoolean
152
+ built.value.should == false
153
+ end
154
+ end
155
+
156
+ context "When processing COLLECT" do
157
+ it "should produce a virtual query" do
158
+ built = VIRTUAL_QUERY(fqn('a') == literal(1)).current
159
+ built.class.should == Puppet::Pops::Model::VirtualQuery
160
+ built.expr.class.should == Puppet::Pops::Model::ComparisonExpression
161
+ built.expr.operator.should == :'=='
162
+ end
163
+
164
+ it "should produce an export query" do
165
+ built = EXPORTED_QUERY(fqn('a') == literal(1)).current
166
+ built.class.should == Puppet::Pops::Model::ExportedQuery
167
+ built.expr.class.should == Puppet::Pops::Model::ComparisonExpression
168
+ built.expr.operator.should == :'=='
169
+ end
170
+
171
+ it "should produce a collect expression" do
172
+ q = VIRTUAL_QUERY(fqn('a') == literal(1))
173
+ built = COLLECT(literal('t'), q, [ATTRIBUTE_OP('name', :'=>', 3)]).current
174
+ built.class.should == Puppet::Pops::Model::CollectExpression
175
+ built.operations.size.should == 1
176
+ end
177
+
178
+ it "should produce a collect expression without attribute operations" do
179
+ q = VIRTUAL_QUERY(fqn('a') == literal(1))
180
+ built = COLLECT(literal('t'), q, []).current
181
+ built.class.should == Puppet::Pops::Model::CollectExpression
182
+ built.operations.size.should == 0
183
+ end
184
+ end
185
+
186
+ context "When processing concatenated string(iterpolation)" do
187
+ it "should handle 'just a string'" do
188
+ built = string('blah blah').current
189
+ built.class.should == Puppet::Pops::Model::ConcatenatedString
190
+ built.segments.size == 1
191
+ built.segments[0].class.should == Puppet::Pops::Model::LiteralString
192
+ built.segments[0].value.should == "blah blah"
193
+ end
194
+
195
+ it "should handle one expression in the middle" do
196
+ built = string('blah blah', TEXT(literal(1)+literal(2)), 'blah blah').current
197
+ built.class.should == Puppet::Pops::Model::ConcatenatedString
198
+ built.segments.size == 3
199
+ built.segments[0].class.should == Puppet::Pops::Model::LiteralString
200
+ built.segments[0].value.should == "blah blah"
201
+ built.segments[1].class.should == Puppet::Pops::Model::TextExpression
202
+ built.segments[1].expr.class.should == Puppet::Pops::Model::ArithmeticExpression
203
+ built.segments[2].class.should == Puppet::Pops::Model::LiteralString
204
+ built.segments[2].value.should == "blah blah"
205
+ end
206
+
207
+ it "should handle one expression at the end" do
208
+ built = string('blah blah', TEXT(literal(1)+literal(2))).current
209
+ built.class.should == Puppet::Pops::Model::ConcatenatedString
210
+ built.segments.size == 2
211
+ built.segments[0].class.should == Puppet::Pops::Model::LiteralString
212
+ built.segments[0].value.should == "blah blah"
213
+ built.segments[1].class.should == Puppet::Pops::Model::TextExpression
214
+ built.segments[1].expr.class.should == Puppet::Pops::Model::ArithmeticExpression
215
+ end
216
+
217
+ it "should handle only one expression" do
218
+ built = string(TEXT(literal(1)+literal(2))).current
219
+ built.class.should == Puppet::Pops::Model::ConcatenatedString
220
+ built.segments.size == 1
221
+ built.segments[0].class.should == Puppet::Pops::Model::TextExpression
222
+ built.segments[0].expr.class.should == Puppet::Pops::Model::ArithmeticExpression
223
+ end
224
+
225
+ it "should handle several expressions" do
226
+ built = string(TEXT(literal(1)+literal(2)), TEXT(literal(1)+literal(2))).current
227
+ built.class.should == Puppet::Pops::Model::ConcatenatedString
228
+ built.segments.size == 2
229
+ built.segments[0].class.should == Puppet::Pops::Model::TextExpression
230
+ built.segments[0].expr.class.should == Puppet::Pops::Model::ArithmeticExpression
231
+ built.segments[1].class.should == Puppet::Pops::Model::TextExpression
232
+ built.segments[1].expr.class.should == Puppet::Pops::Model::ArithmeticExpression
233
+ end
234
+
235
+ it "should handle no expression" do
236
+ built = string().current
237
+ built.class.should == Puppet::Pops::Model::ConcatenatedString
238
+ built.segments.size == 0
239
+ end
240
+ end
241
+
242
+ context "When processing instance / resource references" do
243
+ it "should produce an InstanceReference without a reference" do
244
+ built = INSTANCE(QREF('a'), []).current
245
+ built.class.should == Puppet::Pops::Model::InstanceReferences
246
+ built.names.size.should == 0
247
+ end
248
+
249
+ it "should produce an InstanceReference with one reference" do
250
+ built = INSTANCE(QREF('a'), [QNAME('b')]).current
251
+ built.class.should == Puppet::Pops::Model::InstanceReferences
252
+ built.names.size.should == 1
253
+ built.names[0].value.should == 'b'
254
+ end
255
+
256
+ it "should produce an InstanceReference with two references" do
257
+ built = INSTANCE(QREF('a'), [QNAME('b'), QNAME('c')]).current
258
+ built.class.should == Puppet::Pops::Model::InstanceReferences
259
+ built.names.size.should == 2
260
+ built.names[0].value.should == 'b'
261
+ built.names[1].value.should == 'c'
262
+ end
263
+ end
264
+
265
+ context "When processing UNLESS" do
266
+ it "should create an UNLESS expression with then part" do
267
+ built = UNLESS(true, literal(1), nil).current
268
+ built.class.should == Puppet::Pops::Model::UnlessExpression
269
+ built.test.class.should == Puppet::Pops::Model::LiteralBoolean
270
+ built.then_expr.class.should == Puppet::Pops::Model::LiteralNumber
271
+ built.else_expr.class.should == Puppet::Pops::Model::Nop
272
+ end
273
+
274
+ it "should create an UNLESS expression with then and else parts" do
275
+ built = UNLESS(true, literal(1), literal(2)).current
276
+ built.class.should == Puppet::Pops::Model::UnlessExpression
277
+ built.test.class.should == Puppet::Pops::Model::LiteralBoolean
278
+ built.then_expr.class.should == Puppet::Pops::Model::LiteralNumber
279
+ built.else_expr.class.should == Puppet::Pops::Model::LiteralNumber
280
+ end
281
+ end
282
+
283
+ context "When processing IF" do
284
+ it "should create an IF expression with then part" do
285
+ built = IF(true, literal(1), nil).current
286
+ built.class.should == Puppet::Pops::Model::IfExpression
287
+ built.test.class.should == Puppet::Pops::Model::LiteralBoolean
288
+ built.then_expr.class.should == Puppet::Pops::Model::LiteralNumber
289
+ built.else_expr.class.should == Puppet::Pops::Model::Nop
290
+ end
291
+
292
+ it "should create an IF expression with then and else parts" do
293
+ built = IF(true, literal(1), literal(2)).current
294
+ built.class.should == Puppet::Pops::Model::IfExpression
295
+ built.test.class.should == Puppet::Pops::Model::LiteralBoolean
296
+ built.then_expr.class.should == Puppet::Pops::Model::LiteralNumber
297
+ built.else_expr.class.should == Puppet::Pops::Model::LiteralNumber
298
+ end
299
+ end
300
+
301
+ context "When processing a Parameter" do
302
+ it "should create a Parameter" do
303
+ # PARAM(name, expr)
304
+ # PARAM(name)
305
+ #
306
+ end
307
+ end
308
+
309
+ # LIST, HASH, KEY_ENTRY
310
+ context "When processing Definition" do
311
+ # DEFINITION(classname, arguments, statements)
312
+ # should accept empty arguments, and no statements
313
+ end
314
+
315
+ context "When processing Hostclass" do
316
+ # HOSTCLASS(classname, arguments, parent, statements)
317
+ # parent may be passed as a nop /nil - check this works, should accept empty statements (nil)
318
+ # should accept empty arguments
319
+
320
+ end
321
+
322
+ context "When processing Node" do
323
+ end
324
+
325
+ # Tested in the evaluator test already, but should be here to test factory assumptions
326
+ #
327
+ # TODO: CASE / WHEN
328
+ # TODO: MAP
329
+ end
@@ -0,0 +1,26 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+
5
+ describe "Puppet::Pops::Issues" do
6
+ include Puppet::Pops::Issues
7
+
8
+ it "should have an issue called NAME_WITH_HYPHEN" do
9
+ x = Puppet::Pops::Issues::NAME_WITH_HYPHEN
10
+ x.class.should == Puppet::Pops::Issues::Issue
11
+ x.issue_code.should == :NAME_WITH_HYPHEN
12
+ end
13
+
14
+ it "should should format a message that requires an argument" do
15
+ x = Puppet::Pops::Issues::NAME_WITH_HYPHEN
16
+ x.format(:name => 'Boo-Hoo',
17
+ :label => Puppet::Pops::Model::ModelLabelProvider.new,
18
+ :semantic => "dummy"
19
+ ).should == "A Ruby String may not have a name contain a hyphen. The name 'Boo-Hoo' is not legal"
20
+ end
21
+
22
+ it "should should format a message that does not require an argument" do
23
+ x = Puppet::Pops::Issues::NOT_TOP_LEVEL
24
+ x.format().should == "Classes, definitions, and nodes may only appear at toplevel or inside other classes"
25
+ end
26
+ end