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
@@ -70,6 +70,12 @@ describe Puppet::Parser::TemplateWrapper do
70
70
  tw.tags.should == ["tag1","tag2"]
71
71
  end
72
72
 
73
+ it "warns about deprecated access to in-scope variables via method calls" do
74
+ Puppet.expects(:deprecation_warning).with("Variable access via 'in_scope_variable' is deprecated. Use '@in_scope_variable' instead. template[inline]:1")
75
+ scope["in_scope_variable"] = "is good"
76
+ tw.result("<%= in_scope_variable %>")
77
+ end
78
+
73
79
  it "provides access to in-scope variables via method calls" do
74
80
  scope["in_scope_variable"] = "is good"
75
81
  tw.result("<%= in_scope_variable %>").should == "is good"
@@ -93,11 +99,6 @@ describe Puppet::Parser::TemplateWrapper do
93
99
  tw.result("<%= @one %>").should == "foo"
94
100
  end
95
101
 
96
- it "should not error out if one of the variables is a symbol" do
97
- scope.expects(:to_hash).returns(:_timestamp => "1234")
98
- tw.result("<%= @_timestamp %>").should == "1234"
99
- end
100
-
101
102
  %w{! . ; :}.each do |badchar|
102
103
  it "translates #{badchar} to _ in instance variables" do
103
104
  scope["one#{badchar}"] = "foo"
@@ -2,6 +2,8 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  require 'puppet/parser/type_loader'
5
+ require 'puppet/parser/parser_factory'
6
+ require 'puppet/parser/e_parser_adapter'
5
7
  require 'puppet_spec/modules'
6
8
  require 'puppet_spec/files'
7
9
 
@@ -9,222 +11,246 @@ describe Puppet::Parser::TypeLoader do
9
11
  include PuppetSpec::Modules
10
12
  include PuppetSpec::Files
11
13
 
12
- before do
13
- @loader = Puppet::Parser::TypeLoader.new(:myenv)
14
- Puppet.expects(:deprecation_warning).never
15
- end
16
-
17
- it "should support an environment" do
18
- loader = Puppet::Parser::TypeLoader.new(:myenv)
19
- loader.environment.name.should == :myenv
20
- end
21
-
22
- it "should include the Environment Helper" do
23
- @loader.class.ancestors.should be_include(Puppet::Node::Environment::Helper)
24
- end
25
-
26
- it "should delegate its known resource types to its environment" do
27
- @loader.known_resource_types.should be_instance_of(Puppet::Resource::TypeCollection)
28
- end
29
-
30
- describe "when loading names from namespaces" do
31
- it "should do nothing if the name to import is an empty string" do
32
- @loader.expects(:name2files).never
33
- @loader.try_load_fqname(:hostclass, "") { |filename, modname| raise :should_not_occur }.should be_nil
14
+ shared_examples_for 'the typeloader' do
15
+ before do
16
+ @loader = Puppet::Parser::TypeLoader.new(:myenv)
17
+ Puppet.expects(:deprecation_warning).never
34
18
  end
35
19
 
36
- it "should attempt to import each generated name" do
37
- @loader.expects(:import).with("foo/bar",nil).returns([])
38
- @loader.expects(:import).with("foo",nil).returns([])
39
- @loader.try_load_fqname(:hostclass, "foo::bar") { |f| false }
20
+ it "should support an environment" do
21
+ loader = Puppet::Parser::TypeLoader.new(:myenv)
22
+ loader.environment.name.should == :myenv
40
23
  end
41
- end
42
24
 
43
- describe "when importing" do
44
- before do
45
- Puppet::Parser::Files.stubs(:find_manifests).returns ["modname", %w{file}]
46
- Puppet::Parser::Parser.any_instance.stubs(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
47
- Puppet::Parser::Parser.any_instance.stubs(:file=)
25
+ it "should include the Environment Helper" do
26
+ @loader.class.ancestors.should be_include(Puppet::Node::Environment::Helper)
48
27
  end
49
28
 
50
- it "should return immediately when imports are being ignored" do
51
- Puppet::Parser::Files.expects(:find_manifests).never
52
- Puppet[:ignoreimport] = true
53
- @loader.import("foo").should be_nil
29
+ it "should delegate its known resource types to its environment" do
30
+ @loader.known_resource_types.should be_instance_of(Puppet::Resource::TypeCollection)
54
31
  end
55
32
 
56
- it "should find all manifests matching the file or pattern" do
57
- Puppet::Parser::Files.expects(:find_manifests).with { |pat, opts| pat == "myfile" }.returns ["modname", %w{one}]
58
- @loader.import("myfile")
59
- end
33
+ describe "when loading names from namespaces" do
34
+ it "should do nothing if the name to import is an empty string" do
35
+ @loader.expects(:name2files).never
36
+ @loader.try_load_fqname(:hostclass, "") { |filename, modname| raise :should_not_occur }.should be_nil
37
+ end
60
38
 
61
- it "should use the directory of the current file if one is set" do
62
- Puppet::Parser::Files.expects(:find_manifests).with { |pat, opts| opts[:cwd] == make_absolute("/current") }.returns ["modname", %w{one}]
63
- @loader.import("myfile", make_absolute("/current/file"))
39
+ it "should attempt to import each generated name" do
40
+ @loader.expects(:import).with("foo/bar",nil).returns([])
41
+ @loader.expects(:import).with("foo",nil).returns([])
42
+ @loader.try_load_fqname(:hostclass, "foo::bar") { |f| false }
43
+ end
64
44
  end
65
45
 
66
- it "should pass the environment when looking for files" do
67
- Puppet::Parser::Files.expects(:find_manifests).with { |pat, opts| opts[:environment] == @loader.environment }.returns ["modname", %w{one}]
68
- @loader.import("myfile")
69
- end
46
+ describe "when importing" do
47
+ before do
48
+ Puppet::Parser::Files.stubs(:find_manifests).returns ["modname", %w{file}]
49
+ parser_class.any_instance.stubs(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
50
+ parser_class.any_instance.stubs(:file=)
51
+ end
70
52
 
71
- it "should fail if no files are found" do
72
- Puppet::Parser::Files.expects(:find_manifests).returns [nil, []]
73
- lambda { @loader.import("myfile") }.should raise_error(Puppet::ImportError)
74
- end
53
+ it "should return immediately when imports are being ignored" do
54
+ Puppet::Parser::Files.expects(:find_manifests).never
55
+ Puppet[:ignoreimport] = true
56
+ @loader.import("foo").should be_nil
57
+ end
75
58
 
76
- it "should parse each found file" do
77
- Puppet::Parser::Files.expects(:find_manifests).returns ["modname", [make_absolute("/one")]]
78
- @loader.expects(:parse_file).with(make_absolute("/one")).returns(Puppet::Parser::AST::Hostclass.new(''))
79
- @loader.import("myfile")
80
- end
59
+ it "should find all manifests matching the file or pattern" do
60
+ Puppet::Parser::Files.expects(:find_manifests).with { |pat, opts| pat == "myfile" }.returns ["modname", %w{one}]
61
+ @loader.import("myfile")
62
+ end
81
63
 
82
- it "should make each file qualified before attempting to parse it" do
83
- Puppet::Parser::Files.expects(:find_manifests).returns ["modname", %w{one}]
84
- @loader.expects(:parse_file).with(make_absolute("/current/one")).returns(Puppet::Parser::AST::Hostclass.new(''))
85
- @loader.import("myfile", make_absolute("/current/file"))
86
- end
64
+ it "should use the directory of the current file if one is set" do
65
+ Puppet::Parser::Files.expects(:find_manifests).with { |pat, opts| opts[:cwd] == make_absolute("/current") }.returns ["modname", %w{one}]
66
+ @loader.import("myfile", make_absolute("/current/file"))
67
+ end
87
68
 
88
- it "should not attempt to import files that have already been imported" do
89
- Puppet::Parser::Files.expects(:find_manifests).returns ["modname", %w{/one}]
90
- Puppet::Parser::Parser.any_instance.expects(:parse).once.returns(Puppet::Parser::AST::Hostclass.new(''))
91
- @loader.import("myfile")
69
+ it "should pass the environment when looking for files" do
70
+ Puppet::Parser::Files.expects(:find_manifests).with { |pat, opts| opts[:environment] == @loader.environment }.returns ["modname", %w{one}]
71
+ @loader.import("myfile")
72
+ end
92
73
 
93
- # This will fail if it tries to reimport the file.
94
- @loader.import("myfile")
95
- end
96
- end
74
+ it "should fail if no files are found" do
75
+ Puppet::Parser::Files.expects(:find_manifests).returns [nil, []]
76
+ lambda { @loader.import("myfile") }.should raise_error(Puppet::ImportError)
77
+ end
97
78
 
98
- describe "when importing all" do
99
- before do
100
- @base = tmpdir("base")
79
+ it "should parse each found file" do
80
+ Puppet::Parser::Files.expects(:find_manifests).returns ["modname", [make_absolute("/one")]]
81
+ @loader.expects(:parse_file).with(make_absolute("/one")).returns(Puppet::Parser::AST::Hostclass.new(''))
82
+ @loader.import("myfile")
83
+ end
101
84
 
102
- # Create two module path directories
103
- @modulebase1 = File.join(@base, "first")
104
- FileUtils.mkdir_p(@modulebase1)
105
- @modulebase2 = File.join(@base, "second")
106
- FileUtils.mkdir_p(@modulebase2)
85
+ it "should make each file qualified before attempting to parse it" do
86
+ Puppet::Parser::Files.expects(:find_manifests).returns ["modname", %w{one}]
87
+ @loader.expects(:parse_file).with(make_absolute("/current/one")).returns(Puppet::Parser::AST::Hostclass.new(''))
88
+ @loader.import("myfile", make_absolute("/current/file"))
89
+ end
107
90
 
108
- Puppet[:modulepath] = "#{@modulebase1}#{File::PATH_SEPARATOR}#{@modulebase2}"
109
- end
91
+ it "should not attempt to import files that have already been imported" do
92
+ @loader = Puppet::Parser::TypeLoader.new(:myenv)
110
93
 
111
- def mk_module(basedir, name)
112
- PuppetSpec::Modules.create(name, basedir)
94
+ Puppet::Parser::Files.expects(:find_manifests).returns ["modname", %w{/one}]
95
+ parser_class.any_instance.expects(:parse).once.returns(Puppet::Parser::AST::Hostclass.new(''))
96
+ other_parser_class.any_instance.expects(:parse).never.returns(Puppet::Parser::AST::Hostclass.new(''))
97
+ @loader.import("myfile")
98
+
99
+ # This will fail if it tries to reimport the file.
100
+ @loader.import("myfile")
101
+ end
113
102
  end
114
103
 
115
- # We have to pass the base path so that we can
116
- # write to modules that are in the second search path
117
- def mk_manifests(base, mod, type, files)
118
- exts = {"ruby" => ".rb", "puppet" => ".pp"}
119
- files.collect do |file|
120
- name = mod.name + "::" + file.gsub("/", "::")
121
- path = File.join(base, mod.name, "manifests", file + exts[type])
122
- FileUtils.mkdir_p(File.split(path)[0])
123
-
124
- # write out the class
125
- if type == "ruby"
126
- File.open(path, "w") { |f| f.print "hostclass '#{name}' do\nend" }
127
- else
128
- File.open(path, "w") { |f| f.print "class #{name} {}" }
104
+ describe "when importing all" do
105
+ before do
106
+ @base = tmpdir("base")
107
+
108
+ # Create two module path directories
109
+ @modulebase1 = File.join(@base, "first")
110
+ FileUtils.mkdir_p(@modulebase1)
111
+ @modulebase2 = File.join(@base, "second")
112
+ FileUtils.mkdir_p(@modulebase2)
113
+
114
+ Puppet[:modulepath] = "#{@modulebase1}#{File::PATH_SEPARATOR}#{@modulebase2}"
115
+ end
116
+
117
+ def mk_module(basedir, name)
118
+ PuppetSpec::Modules.create(name, basedir)
119
+ end
120
+
121
+ # We have to pass the base path so that we can
122
+ # write to modules that are in the second search path
123
+ def mk_manifests(base, mod, type, files)
124
+ exts = {"ruby" => ".rb", "puppet" => ".pp"}
125
+ files.collect do |file|
126
+ name = mod.name + "::" + file.gsub("/", "::")
127
+ path = File.join(base, mod.name, "manifests", file + exts[type])
128
+ FileUtils.mkdir_p(File.split(path)[0])
129
+
130
+ # write out the class
131
+ if type == "ruby"
132
+ File.open(path, "w") { |f| f.print "hostclass '#{name}' do\nend" }
133
+ else
134
+ File.open(path, "w") { |f| f.print "class #{name} {}" }
135
+ end
136
+ name
129
137
  end
130
- name
131
138
  end
132
- end
133
139
 
134
- it "should load all puppet manifests from all modules in the specified environment" do
135
- @module1 = mk_module(@modulebase1, "one")
136
- @module2 = mk_module(@modulebase2, "two")
140
+ it "should load all puppet manifests from all modules in the specified environment" do
141
+ @module1 = mk_module(@modulebase1, "one")
142
+ @module2 = mk_module(@modulebase2, "two")
137
143
 
138
- mk_manifests(@modulebase1, @module1, "puppet", %w{a b})
139
- mk_manifests(@modulebase2, @module2, "puppet", %w{c d})
144
+ mk_manifests(@modulebase1, @module1, "puppet", %w{a b})
145
+ mk_manifests(@modulebase2, @module2, "puppet", %w{c d})
140
146
 
141
- @loader.import_all
147
+ @loader.import_all
142
148
 
143
- @loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
144
- @loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
145
- @loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
146
- @loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
147
- end
149
+ @loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
150
+ @loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
151
+ @loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
152
+ @loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
153
+ end
148
154
 
149
- it "should load all ruby manifests from all modules in the specified environment" do
150
- Puppet.expects(:deprecation_warning).at_least(1)
155
+ it "should load all ruby manifests from all modules in the specified environment" do
156
+ Puppet.expects(:deprecation_warning).at_least(1)
151
157
 
152
- @module1 = mk_module(@modulebase1, "one")
153
- @module2 = mk_module(@modulebase2, "two")
158
+ @module1 = mk_module(@modulebase1, "one")
159
+ @module2 = mk_module(@modulebase2, "two")
154
160
 
155
- mk_manifests(@modulebase1, @module1, "ruby", %w{a b})
156
- mk_manifests(@modulebase2, @module2, "ruby", %w{c d})
161
+ mk_manifests(@modulebase1, @module1, "ruby", %w{a b})
162
+ mk_manifests(@modulebase2, @module2, "ruby", %w{c d})
157
163
 
158
- @loader.import_all
164
+ @loader.import_all
159
165
 
160
- @loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
161
- @loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
162
- @loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
163
- @loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
164
- end
166
+ @loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
167
+ @loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
168
+ @loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
169
+ @loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
170
+ end
165
171
 
166
- it "should not load manifests from duplicate modules later in the module path" do
167
- @module1 = mk_module(@modulebase1, "one")
172
+ it "should not load manifests from duplicate modules later in the module path" do
173
+ @module1 = mk_module(@modulebase1, "one")
168
174
 
169
- # duplicate
170
- @module2 = mk_module(@modulebase2, "one")
175
+ # duplicate
176
+ @module2 = mk_module(@modulebase2, "one")
171
177
 
172
- mk_manifests(@modulebase1, @module1, "puppet", %w{a})
173
- mk_manifests(@modulebase2, @module2, "puppet", %w{c})
178
+ mk_manifests(@modulebase1, @module1, "puppet", %w{a})
179
+ mk_manifests(@modulebase2, @module2, "puppet", %w{c})
174
180
 
175
- @loader.import_all
181
+ @loader.import_all
176
182
 
177
- @loader.environment.known_resource_types.hostclass("one::c").should be_nil
178
- end
183
+ @loader.environment.known_resource_types.hostclass("one::c").should be_nil
184
+ end
179
185
 
180
- it "should load manifests from subdirectories" do
181
- @module1 = mk_module(@modulebase1, "one")
186
+ it "should load manifests from subdirectories" do
187
+ @module1 = mk_module(@modulebase1, "one")
182
188
 
183
- mk_manifests(@modulebase1, @module1, "puppet", %w{a a/b a/b/c})
189
+ mk_manifests(@modulebase1, @module1, "puppet", %w{a a/b a/b/c})
184
190
 
185
- @loader.import_all
191
+ @loader.import_all
186
192
 
187
- @loader.environment.known_resource_types.hostclass("one::a::b").should be_instance_of(Puppet::Resource::Type)
188
- @loader.environment.known_resource_types.hostclass("one::a::b::c").should be_instance_of(Puppet::Resource::Type)
193
+ @loader.environment.known_resource_types.hostclass("one::a::b").should be_instance_of(Puppet::Resource::Type)
194
+ @loader.environment.known_resource_types.hostclass("one::a::b::c").should be_instance_of(Puppet::Resource::Type)
195
+ end
189
196
  end
190
- end
191
197
 
192
- describe "when parsing a file" do
193
- before do
194
- @parser = Puppet::Parser::Parser.new(@loader.environment)
195
- @parser.stubs(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
196
- @parser.stubs(:file=)
197
- Puppet::Parser::Parser.stubs(:new).with(@loader.environment).returns @parser
198
- end
198
+ describe "when parsing a file" do
199
+ before do
200
+ @parser = Puppet::Parser::ParserFactory.parser(@loader.environment)
201
+ @parser.class.should == parser_class
202
+ @parser.stubs(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
203
+ @parser.stubs(:file=)
204
+ Puppet::Parser::ParserFactory.stubs(:parser).with(@loader.environment).returns @parser
205
+ end
199
206
 
200
- it "should create a new parser instance for each file using the current environment" do
201
- Puppet::Parser::Parser.expects(:new).with(@loader.environment).returns @parser
202
- @loader.parse_file("/my/file")
203
- end
207
+ it "should create a new parser instance for each file using the current environment" do
208
+ Puppet::Parser::ParserFactory.expects(:parser).with(@loader.environment).returns @parser
209
+ @loader.parse_file("/my/file")
210
+ end
204
211
 
205
- it "should assign the parser its file and parse" do
206
- @parser.expects(:file=).with("/my/file")
207
- @parser.expects(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
208
- @loader.parse_file("/my/file")
212
+ it "should assign the parser its file and parse" do
213
+ @parser.expects(:file=).with("/my/file")
214
+ @parser.expects(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
215
+ @loader.parse_file("/my/file")
216
+ end
209
217
  end
210
- end
211
218
 
212
- it "should be able to add classes to the current resource type collection" do
213
- file = tmpfile("simple_file.pp")
214
- File.open(file, "w") { |f| f.puts "class foo {}" }
215
- @loader.import(file)
219
+ it "should be able to add classes to the current resource type collection" do
220
+ file = tmpfile("simple_file.pp")
221
+ File.open(file, "w") { |f| f.puts "class foo {}" }
222
+ @loader.import(file)
216
223
 
217
- @loader.known_resource_types.hostclass("foo").should be_instance_of(Puppet::Resource::Type)
218
- end
224
+ @loader.known_resource_types.hostclass("foo").should be_instance_of(Puppet::Resource::Type)
225
+ end
219
226
 
220
- describe "when deciding where to look for files" do
221
- { 'foo' => ['foo'],
222
- 'foo::bar' => ['foo/bar', 'foo'],
223
- 'foo::bar::baz' => ['foo/bar/baz', 'foo/bar', 'foo']
224
- }.each do |fqname, expected_paths|
225
- it "should look for #{fqname.inspect} in #{expected_paths.inspect}" do
226
- @loader.instance_eval { name2files(fqname) }.should == expected_paths
227
+ describe "when deciding where to look for files" do
228
+ { 'foo' => ['foo'],
229
+ 'foo::bar' => ['foo/bar', 'foo'],
230
+ 'foo::bar::baz' => ['foo/bar/baz', 'foo/bar', 'foo']
231
+ }.each do |fqname, expected_paths|
232
+ it "should look for #{fqname.inspect} in #{expected_paths.inspect}" do
233
+ @loader.instance_eval { name2files(fqname) }.should == expected_paths
234
+ end
227
235
  end
228
236
  end
229
237
  end
238
+ describe 'when using the classic parser' do
239
+ before :each do
240
+ Puppet[:parser] = 'current'
241
+ end
242
+ it_should_behave_like 'the typeloader' do
243
+ let(:parser_class) { Puppet::Parser::Parser}
244
+ let(:other_parser_class) { Puppet::Parser::EParserAdapter}
245
+ end
246
+ end
247
+ describe 'when using the future parser' do
248
+ before :each do
249
+ Puppet[:parser] = 'future'
250
+ end
251
+ it_should_behave_like 'the typeloader' do
252
+ let(:parser_class) { Puppet::Parser::EParserAdapter}
253
+ let(:other_parser_class) { Puppet::Parser::Parser}
254
+ end
255
+ end
230
256
  end
@@ -0,0 +1,143 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/pops'
4
+
5
+ describe Puppet::Pops::Adaptable::Adapter do
6
+ class ValueAdapter < Puppet::Pops::Adaptable::Adapter
7
+ attr_accessor :value
8
+ end
9
+
10
+ class OtherAdapter < Puppet::Pops::Adaptable::Adapter
11
+ attr_accessor :value
12
+ def OtherAdapter.create_adapter(o)
13
+ x = new
14
+ x.value="I am calling you Daffy."
15
+ x
16
+ end
17
+ end
18
+
19
+ module Farm
20
+ class FarmAdapter < Puppet::Pops::Adaptable::Adapter
21
+ attr_accessor :value
22
+ end
23
+ end
24
+
25
+ class Duck
26
+ include Puppet::Pops::Adaptable
27
+ end
28
+
29
+ it "should create specialized adapter instance on call to adapt" do
30
+ d = Duck.new
31
+ a = ValueAdapter.adapt(d)
32
+ a.class.should == ValueAdapter
33
+ end
34
+
35
+ it "should produce the same instance on multiple adaptations" do
36
+ d = Duck.new
37
+ a = ValueAdapter.adapt(d)
38
+ a.value = 10
39
+ b = ValueAdapter.adapt(d)
40
+ b.value.should == 10
41
+ end
42
+
43
+ it "should return the correct adapter if there are several" do
44
+ d = Duck.new
45
+ other = OtherAdapter.adapt(d)
46
+ a = ValueAdapter.adapt(d)
47
+ a.value = 10
48
+ b = ValueAdapter.adapt(d)
49
+ b.value.should == 10
50
+ end
51
+
52
+ it "should allow specialization to override creating" do
53
+ d = Duck.new
54
+ a = OtherAdapter.adapt(d)
55
+ a.value.should == "I am calling you Daffy."
56
+ end
57
+
58
+ it "should create a new adapter overriding existing" do
59
+ d = Duck.new
60
+ a = OtherAdapter.adapt(d)
61
+ a.value.should == "I am calling you Daffy."
62
+ a.value = "Something different"
63
+ a.value.should == "Something different"
64
+ b = OtherAdapter.adapt(d)
65
+ b.value.should == "Something different"
66
+ b = OtherAdapter.adapt_new(d)
67
+ b.value.should == "I am calling you Daffy."
68
+ end
69
+
70
+ it "should not create adapter on get" do
71
+ d = Duck.new
72
+ a = OtherAdapter.get(d)
73
+ a.should == nil
74
+ end
75
+
76
+ it "should return same adapter from get after adapt" do
77
+ d = Duck.new
78
+ a = OtherAdapter.get(d)
79
+ a.should == nil
80
+ a = OtherAdapter.adapt(d)
81
+ a.value.should == "I am calling you Daffy."
82
+ b = OtherAdapter.get(d)
83
+ b.value.should == "I am calling you Daffy."
84
+ a.should == b
85
+ end
86
+
87
+ it "should handle adapters in nested namespaces" do
88
+ d = Duck.new
89
+ a = Farm::FarmAdapter.get(d)
90
+ a.should == nil
91
+ a = Farm::FarmAdapter.adapt(d)
92
+ a.value = 10
93
+ b = Farm::FarmAdapter.get(d)
94
+ b.value.should == 10
95
+ # Test implementation detail
96
+ d.instance_variables.include?(:@Farm_FarmAdapter).should == true
97
+ end
98
+
99
+ it "should be able to clear the adapter" do
100
+ d = Duck.new
101
+ a = OtherAdapter.adapt(d)
102
+ a.value.should == "I am calling you Daffy."
103
+ # The adapter cleared should be returned
104
+ OtherAdapter.clear(d).value.should == "I am calling you Daffy."
105
+ OtherAdapter.get(d).should == nil
106
+ end
107
+
108
+ context "When adapting with #adapt it" do
109
+ it "should be possible to pass a block to configure the adapter" do
110
+ d = Duck.new
111
+ a = OtherAdapter.adapt(d) do |x|
112
+ x.value = "Donald"
113
+ end
114
+ a.value.should == "Donald"
115
+ end
116
+
117
+ it "should be possible to pass a block to configure the adapter and get the adapted" do
118
+ d = Duck.new
119
+ a = OtherAdapter.adapt(d) do |x, o|
120
+ x.value = "Donald, the #{o.class.name}"
121
+ end
122
+ a.value.should == "Donald, the Duck"
123
+ end
124
+ end
125
+
126
+ context "When adapting with #adapt_new it" do
127
+ it "should be possible to pass a block to configure the adapter" do
128
+ d = Duck.new
129
+ a = OtherAdapter.adapt_new(d) do |x|
130
+ x.value = "Donald"
131
+ end
132
+ a.value.should == "Donald"
133
+ end
134
+
135
+ it "should be possible to pass a block to configure the adapter and get the adapted" do
136
+ d = Duck.new
137
+ a = OtherAdapter.adapt_new(d) do |x, o|
138
+ x.value = "Donald, the #{o.class.name}"
139
+ end
140
+ a.value.should == "Donald, the Duck"
141
+ end
142
+ end
143
+ end