puppet 3.1.1 → 3.2.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -318,6 +318,17 @@ describe Puppet::Type.type(:exec) do
318
318
  end
319
319
  end
320
320
 
321
+ describe "when setting command" do
322
+ subject { described_class.new(:name => @command) }
323
+ it "fails when passed an Array" do
324
+ expect { subject[:command] = [] }.to raise_error Puppet::Error, /Command must be a String/
325
+ end
326
+
327
+ it "fails when passed a Hash" do
328
+ expect { subject[:command] = {} }.to raise_error Puppet::Error, /Command must be a String/
329
+ end
330
+ end
331
+
321
332
  describe "when setting refresh" do
322
333
  it_should_behave_like "all exec command parameters", :refresh
323
334
  end
@@ -162,36 +162,36 @@ describe content do
162
162
  describe "and the file exists" do
163
163
  before do
164
164
  @resource.stubs(:stat).returns mock("stat")
165
+ @content.should = "some content"
165
166
  end
166
167
 
167
168
  it "should return false if the current contents are different from the desired content" do
168
- @content.should = "some content"
169
169
  @content.should_not be_safe_insync("other content")
170
170
  end
171
171
 
172
172
  it "should return true if the sum for the current contents is the same as the sum for the desired content" do
173
- @content.should = "some content"
174
173
  @content.must be_safe_insync("{md5}" + Digest::MD5.hexdigest("some content"))
175
174
  end
176
175
 
177
- describe "and Puppet[:show_diff] is set" do
178
- before do
179
- Puppet[:show_diff] = true
180
- end
181
-
182
- it "should display a diff if the current contents are different from the desired content" do
183
- @content.should = "some content"
184
- @content.expects(:diff).returns("my diff").once
185
- @content.expects(:notice).with("\nmy diff").once
186
-
187
- @content.safe_insync?("other content")
188
- end
189
-
190
- it "should not display a diff if the sum for the current contents is the same as the sum for the desired content" do
191
- @content.should = "some content"
192
- @content.expects(:diff).never
193
-
194
- @content.safe_insync?("{md5}" + Digest::MD5.hexdigest("some content"))
176
+ [true, false].product([true, false]).each do |cfg, param|
177
+ describe "and Puppet[:show_diff] is #{cfg} and show_diff => #{param}" do
178
+ before do
179
+ Puppet[:show_diff] = cfg
180
+ @resource.stubs(:show_diff?).returns param
181
+ end
182
+
183
+ if cfg and param
184
+ it "should display a diff" do
185
+ @content.expects(:diff).returns("my diff").once
186
+ @content.expects(:notice).with("\nmy diff").once
187
+ @content.should_not be_safe_insync("other content")
188
+ end
189
+ else
190
+ it "should not display a diff" do
191
+ @content.expects(:diff).never
192
+ @content.should_not be_safe_insync("other content")
193
+ end
194
+ end
195
195
  end
196
196
  end
197
197
  end
@@ -138,5 +138,11 @@ describe Puppet::Type.type(:file).attrclass(:mode) do
138
138
  mode.is_to_s('1755').should == '1755'
139
139
  end
140
140
  end
141
+
142
+ describe 'when passed :absent' do
143
+ it 'returns :absent' do
144
+ mode.is_to_s(:absent).should == :absent
145
+ end
146
+ end
141
147
  end
142
148
  end
@@ -93,6 +93,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
93
93
  describe "when returning the metadata" do
94
94
  before do
95
95
  @metadata = stub 'metadata', :source= => nil
96
+ @resource.stubs(:[]).with(:links).returns :manage
96
97
  end
97
98
 
98
99
  it "should return already-available metadata" do
@@ -108,22 +109,22 @@ describe Puppet::Type.type(:file).attrclass(:source) do
108
109
 
109
110
  it "should collect its metadata using the Metadata class if it is not already set" do
110
111
  @source = source.new(:resource => @resource, :value => @foobar)
111
- Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment).returns @metadata
112
+ Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment, :links => :manage).returns @metadata
112
113
  @source.metadata
113
114
  end
114
115
 
115
116
  it "should use the metadata from the first found source" do
116
117
  metadata = stub 'metadata', :source= => nil
117
118
  @source = source.new(:resource => @resource, :value => [@foobar, @feebooz])
118
- Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment).returns nil
119
- Puppet::FileServing::Metadata.indirection.expects(:find).with(@feebooz_uri, :environment => @environment).returns metadata
119
+ Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment, :links => :manage).returns nil
120
+ Puppet::FileServing::Metadata.indirection.expects(:find).with(@feebooz_uri, :environment => @environment, :links => :manage).returns metadata
120
121
  @source.metadata.should equal(metadata)
121
122
  end
122
123
 
123
124
  it "should store the found source as the metadata's source" do
124
125
  metadata = mock 'metadata'
125
126
  @source = source.new(:resource => @resource, :value => @foobar)
126
- Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment).returns metadata
127
+ Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment, :links => :manage).returns metadata
127
128
 
128
129
  metadata.expects(:source=).with(@foobar_uri)
129
130
  @source.metadata
@@ -131,7 +132,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
131
132
 
132
133
  it "should fail intelligently if an exception is encountered while querying for metadata" do
133
134
  @source = source.new(:resource => @resource, :value => @foobar)
134
- Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment).raises RuntimeError
135
+ Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment, :links => :manage).raises RuntimeError
135
136
 
136
137
  @source.expects(:fail).raises ArgumentError
137
138
  lambda { @source.metadata }.should raise_error(ArgumentError)
@@ -139,7 +140,7 @@ describe Puppet::Type.type(:file).attrclass(:source) do
139
140
 
140
141
  it "should fail if no specified sources can be found" do
141
142
  @source = source.new(:resource => @resource, :value => @foobar)
142
- Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment).returns nil
143
+ Puppet::FileServing::Metadata.indirection.expects(:find).with(@foobar_uri, :environment => @environment, :links => :manage).returns nil
143
144
 
144
145
  @source.expects(:fail).raises RuntimeError
145
146
 
@@ -321,7 +322,8 @@ describe Puppet::Type.type(:file).attrclass(:source) do
321
322
  before(:each) do
322
323
  metadata = Puppet::FileServing::Metadata.new(path, :source => uri, 'type' => 'file')
323
324
  #metadata = stub('remote', :ftype => "file", :source => uri)
324
- Puppet::FileServing::Metadata.indirection.stubs(:find).with(uri, has_key(:environment)).returns metadata
325
+ Puppet::FileServing::Metadata.indirection.stubs(:find).
326
+ with(uri,all_of(has_key(:environment), has_key(:links))).returns metadata
325
327
  resource[:source] = uri
326
328
  end
327
329
 
@@ -856,20 +856,39 @@ describe Puppet::Type.type(:file) do
856
856
 
857
857
  describe "#remove_existing" do
858
858
  it "should do nothing if the file doesn't exist" do
859
- file.remove_existing(:file).should == nil
859
+ file.remove_existing(:file).should == false
860
860
  end
861
861
 
862
862
  it "should fail if it can't backup the file" do
863
- file.stubs(:stat).returns stub('stat')
863
+ file.stubs(:stat).returns stub('stat', :ftype => 'file')
864
864
  file.stubs(:perform_backup).returns false
865
865
 
866
866
  expect { file.remove_existing(:file) }.to raise_error(Puppet::Error, /Could not back up; will not replace/)
867
867
  end
868
868
 
869
+ describe "backing up directories" do
870
+ it "should not backup directories if force is false" do
871
+ file[:force] = false
872
+ file.stubs(:stat).returns stub('stat', :ftype => 'directory')
873
+ file.expects(:perform_backup).never
874
+ file.remove_existing(:file).should == false
875
+ end
876
+
877
+ it "should backup directories if force is true" do
878
+ file[:force] = true
879
+ FileUtils.expects(:rmtree).with(file[:path])
880
+
881
+ file.stubs(:stat).returns stub('stat', :ftype => 'directory')
882
+ file.expects(:perform_backup).once.returns(true)
883
+
884
+ file.remove_existing(:file).should == true
885
+ end
886
+ end
887
+
869
888
  it "should not do anything if the file is already the right type and not a link" do
870
889
  file.stubs(:stat).returns stub('stat', :ftype => 'file')
871
890
 
872
- file.remove_existing(:file).should == nil
891
+ file.remove_existing(:file).should == false
873
892
  end
874
893
 
875
894
  it "should not remove directories and should not invalidate the stat unless force is set" do
@@ -49,47 +49,60 @@ describe Puppet::Type.type(:service), "when validating attribute values" do
49
49
  svc.should(:ensure).should == :stopped
50
50
  end
51
51
 
52
- it "should support :true as a value to :enable" do
53
- Puppet::Type.type(:service).new(:name => "yay", :enable => :true)
54
- end
52
+ describe "the enable property" do
53
+ before :each do
54
+ @provider.class.stubs(:supports_parameter?).returns true
55
+ end
56
+ it "should support :true as a value" do
57
+ srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :true)
58
+ srv.should(:enable).should == :true
59
+ end
55
60
 
56
- it "should support :false as a value to :enable" do
57
- Puppet::Type.type(:service).new(:name => "yay", :enable => :false)
58
- end
61
+ it "should support :false as a value" do
62
+ srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :false)
63
+ srv.should(:enable).should == :false
64
+ end
59
65
 
60
- it "should support :manual as a value to :enable on Windows" do
61
- Puppet.features.stubs(:microsoft_windows?).returns true
66
+ it "should support :manual as a value on Windows" do
67
+ Puppet.features.stubs(:microsoft_windows?).returns true
62
68
 
63
- Puppet::Type.type(:service).new(:name => "yay", :enable => :manual)
64
- end
69
+ srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :manual)
70
+ srv.should(:enable).should == :manual
71
+ end
65
72
 
66
- it "should not support :manual as a value to :enable when not on Windows" do
67
- Puppet.features.stubs(:microsoft_windows?).returns false
73
+ it "should not support :manual as a value when not on Windows" do
74
+ Puppet.features.stubs(:microsoft_windows?).returns false
68
75
 
69
- expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :manual) }.to raise_error(
70
- Puppet::Error,
71
- /Setting enable to manual is only supported on Microsoft Windows\./
72
- )
76
+ expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :manual) }.to raise_error(
77
+ Puppet::Error,
78
+ /Setting enable to manual is only supported on Microsoft Windows\./
79
+ )
80
+ end
73
81
  end
74
82
 
75
83
  it "should support :true as a value to :hasstatus" do
76
- Puppet::Type.type(:service).new(:name => "yay", :hasstatus => :true)
84
+ srv = Puppet::Type.type(:service).new(:name => "yay", :hasstatus => :true)
85
+ srv[:hasstatus].should == :true
77
86
  end
78
87
 
79
88
  it "should support :false as a value to :hasstatus" do
80
- Puppet::Type.type(:service).new(:name => "yay", :hasstatus => :false)
89
+ srv = Puppet::Type.type(:service).new(:name => "yay", :hasstatus => :false)
90
+ srv[:hasstatus].should == :false
81
91
  end
82
92
 
83
93
  it "should specify :true as the default value of hasstatus" do
84
- Puppet::Type.type(:service).new(:name => "yay")[:hasstatus].should == :true
94
+ srv = Puppet::Type.type(:service).new(:name => "yay")
95
+ srv[:hasstatus].should == :true
85
96
  end
86
97
 
87
98
  it "should support :true as a value to :hasrestart" do
88
- Puppet::Type.type(:service).new(:name => "yay", :hasrestart => :true)
99
+ srv = Puppet::Type.type(:service).new(:name => "yay", :hasrestart => :true)
100
+ srv[:hasrestart].should == :true
89
101
  end
90
102
 
91
103
  it "should support :false as a value to :hasrestart" do
92
- Puppet::Type.type(:service).new(:name => "yay", :hasrestart => :false)
104
+ srv = Puppet::Type.type(:service).new(:name => "yay", :hasrestart => :false)
105
+ srv[:hasrestart].should == :false
93
106
  end
94
107
 
95
108
  it "should allow setting the :enable parameter if the provider has the :enableable feature" do
@@ -356,7 +356,23 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
356
356
  end
357
357
 
358
358
  it "should fail if any invalid attributes have been provided" do
359
- expect { Puppet::Type.type(:mount).new(:title => "/foo", :nosuchattr => "whatever") }.to raise_error(Puppet::Error)
359
+ expect { Puppet::Type.type(:mount).new(:title => "/foo", :nosuchattr => "whatever") }.to raise_error(Puppet::Error, /Invalid parameter/)
360
+ end
361
+
362
+ context "when an attribute fails validation" do
363
+ it "should fail with Puppet::ResourceError when PuppetError raised" do
364
+ expect { Puppet::Type.type(:file).new(:title => "/foo", :source => "unknown:///") }.to raise_error(Puppet::ResourceError, /Parameter source failed on File\[.*foo\]/)
365
+ end
366
+
367
+ it "should fail with Puppet::ResourceError when ArgumentError raised" do
368
+ expect { Puppet::Type.type(:file).new(:title => "/foo", :mode => "abcdef") }.to raise_error(Puppet::ResourceError, /Parameter mode failed on File\[.*foo\]/)
369
+ end
370
+
371
+ it "should include the file/line in the error" do
372
+ Puppet::Type.type(:file).any_instance.stubs(:file).returns("example.pp")
373
+ Puppet::Type.type(:file).any_instance.stubs(:line).returns(42)
374
+ expect { Puppet::Type.type(:file).new(:title => "/foo", :source => "unknown:///") }.to raise_error(Puppet::ResourceError, /example.pp:42/)
375
+ end
360
376
  end
361
377
 
362
378
  it "should set its name to the resource's title if the resource does not have a :name or namevar parameter set" do
@@ -419,6 +435,35 @@ describe Puppet::Type, :unless => Puppet.features.microsoft_windows? do
419
435
  it "should delete the name via the namevar from the originally provided parameters" do
420
436
  Puppet::Type.type(:file).new(:name => make_absolute('/foo')).original_parameters[:path].should be_nil
421
437
  end
438
+
439
+ context "when validating the resource" do
440
+ it "should call the type's validate method if present" do
441
+ Puppet::Type.type(:file).any_instance.expects(:validate)
442
+ Puppet::Type.type(:file).new(:name => make_absolute('/foo'))
443
+ end
444
+
445
+ it "should raise Puppet::ResourceError with resource name when Puppet::Error raised" do
446
+ expect do
447
+ Puppet::Type.type(:file).new(
448
+ :name => make_absolute('/foo'),
449
+ :source => "puppet:///",
450
+ :content => "foo"
451
+ )
452
+ end.to raise_error(Puppet::ResourceError, /Validation of File\[.*foo.*\]/)
453
+ end
454
+
455
+ it "should raise Puppet::ResourceError with manifest file and line on failure" do
456
+ Puppet::Type.type(:file).any_instance.stubs(:file).returns("example.pp")
457
+ Puppet::Type.type(:file).any_instance.stubs(:line).returns(42)
458
+ expect do
459
+ Puppet::Type.type(:file).new(
460
+ :name => make_absolute('/foo'),
461
+ :source => "puppet:///",
462
+ :content => "foo"
463
+ )
464
+ end.to raise_error(Puppet::ResourceError, /Validation.*example.pp:42/)
465
+ end
466
+ end
422
467
  end
423
468
 
424
469
  it "should have a class method for converting a hash into a Puppet::Resource instance" do
@@ -66,7 +66,7 @@ describe Puppet::Util::Backups do
66
66
 
67
67
  it "should fail when the old backup can't be removed" do
68
68
  File.expects(:lstat).with(backup).returns stub("stat", :ftype => "file")
69
- File.expects(:unlink).raises ArgumentError
69
+ File.expects(:unlink).with(backup).raises ArgumentError
70
70
  FileUtils.expects(:cp_r).never
71
71
  FileTest.expects(:exists?).with(path).returns(true)
72
72
 
@@ -75,7 +75,7 @@ describe Puppet::Util::Backups do
75
75
 
76
76
  it "should not try to remove backups that don't exist" do
77
77
  File.expects(:lstat).with(backup).raises(Errno::ENOENT)
78
- File.expects(:unlink).never
78
+ File.expects(:unlink).with(backup).never
79
79
  FileUtils.stubs(:cp_r)
80
80
  FileTest.expects(:exists?).with(path).returns(true)
81
81
 
@@ -44,6 +44,9 @@ describe Puppet::Util::Execution do
44
44
  Puppet::Util::SUIDManager.stubs(:change_user)
45
45
  Puppet::Util::SUIDManager.stubs(:change_group)
46
46
 
47
+ # ensure that we don't really close anything!
48
+ (0..256).each {|n| IO.stubs(:new) }
49
+
47
50
  $stdin.stubs(:reopen)
48
51
  $stdout.stubs(:reopen)
49
52
  $stderr.stubs(:reopen)
@@ -576,7 +579,7 @@ describe Puppet::Util::Execution do
576
579
  it "should raise an error if a nil option is specified" do
577
580
  expect {
578
581
  Puppet::Util::Execution.execute('fail command', nil)
579
- }.to raise_error(TypeError, /can\'t convert nil into Hash/)
582
+ }.to raise_error(TypeError, /(can\'t convert|no implicit conversion of) nil into Hash/)
580
583
  end
581
584
  end
582
585
  end
@@ -100,6 +100,12 @@ describe Puppet::Util::FileType do
100
100
  type.should_not be_nil
101
101
  end
102
102
 
103
+ # make Puppet::Util::SUIDManager return something deterministic, not the
104
+ # uid of the user running the tests, except where overridden below.
105
+ before :each do
106
+ Puppet::Util::SUIDManager.stubs(:uid).returns 1234
107
+ end
108
+
103
109
  describe "#read" do
104
110
  it "should run crontab -l as the target user" do
105
111
  Puppet::Util::Execution.expects(:execute).with(['crontab', '-l'], user_options).returns crontab
@@ -94,6 +94,24 @@ describe Array do
94
94
  [1,2,3].drop(3).should == []
95
95
  end
96
96
  end
97
+
98
+ describe "#respond_to?" do
99
+ it "should return true for a standard method (each)" do
100
+ [].respond_to?(:each).should be_true
101
+ end
102
+
103
+ it "should return false for to_hash" do
104
+ [].respond_to?(:to_hash).should be_false
105
+ end
106
+
107
+ it "should accept one argument" do
108
+ lambda { [].respond_to?(:each) }.should_not raise_error
109
+ end
110
+
111
+ it "should accept two arguments" do
112
+ lambda { [].respond_to?(:each, false) }.should_not raise_error
113
+ end
114
+ end
97
115
  end
98
116
 
99
117
  describe IO do
@@ -2,6 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  require 'puppet/util/network_device/cisco/device'
5
+ require 'puppet/util/network_device/transport/telnet'
5
6
 
6
7
  describe Puppet::Util::NetworkDevice::Cisco::Device do
7
8
  before(:each) do
@@ -16,10 +17,46 @@ describe Puppet::Util::NetworkDevice::Cisco::Device do
16
17
  cisco.enable_password.should == "enable_password"
17
18
  end
18
19
 
20
+ describe "decoding the enable password" do
21
+ it "should not parse a password if no query is given" do
22
+ cisco = described_class.new("telnet://user:password@localhost:23")
23
+ cisco.enable_password.should be_nil
24
+ end
25
+
26
+ it "should not parse a password if no enable param is given" do
27
+ cisco = described_class.new("telnet://user:password@localhost:23/?notenable=notapassword")
28
+ cisco.enable_password.should be_nil
29
+ end
30
+ it "should decode sharps" do
31
+ cisco = described_class.new("telnet://user:password@localhost:23/?enable=enable_password%23with_a_sharp")
32
+ cisco.enable_password.should == "enable_password#with_a_sharp"
33
+ end
34
+
35
+ it "should decode spaces" do
36
+ cisco = described_class.new("telnet://user:password@localhost:23/?enable=enable_password%20with_a_space")
37
+ cisco.enable_password.should == "enable_password with_a_space"
38
+ end
39
+
40
+ it "should only use the query parameter" do
41
+ cisco = described_class.new("telnet://enable=:password@localhost:23/?enable=enable_password&notenable=notapassword")
42
+ cisco.enable_password.should == "enable_password"
43
+ end
44
+ end
45
+
19
46
  it "should find the enable password from the options" do
20
47
  cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23/?enable=enable_password", :enable_password => "mypass")
21
48
  cisco.enable_password.should == "mypass"
22
49
  end
50
+
51
+ it "should find the debug mode from the options" do
52
+ Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(true).returns(@transport)
53
+ cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23", :debug => true)
54
+ end
55
+
56
+ it "should set the debug mode to nil by default" do
57
+ Puppet::Util::NetworkDevice::Transport::Telnet.expects(:new).with(nil).returns(@transport)
58
+ cisco = Puppet::Util::NetworkDevice::Cisco::Device.new("telnet://user:password@localhost:23")
59
+ end
23
60
  end
24
61
 
25
62
  describe "when connecting to the physical device" do