puppet 0.23.2 → 0.24.0

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 (629) hide show
  1. data/CHANGELOG +112 -1
  2. data/README +1 -1
  3. data/Rakefile +1 -2
  4. data/bin/filebucket +2 -3
  5. data/bin/puppet +55 -39
  6. data/bin/puppetca +20 -11
  7. data/bin/puppetd +30 -31
  8. data/bin/puppetdoc +27 -28
  9. data/bin/puppetmasterd +24 -42
  10. data/bin/puppetrun +3 -4
  11. data/bin/ralsh +5 -7
  12. data/conf/redhat/puppet.spec +4 -1
  13. data/conf/solaris/smf/svc-puppetd +1 -1
  14. data/conf/solaris/smf/svc-puppetmasterd +1 -1
  15. data/examples/code/allatonce +1 -1
  16. data/examples/code/assignments +1 -1
  17. data/examples/code/components +1 -1
  18. data/examples/code/file.bl +1 -1
  19. data/examples/code/filedefaults +1 -1
  20. data/examples/code/fileparsing +1 -1
  21. data/examples/code/filerecursion +1 -1
  22. data/examples/code/functions +1 -1
  23. data/examples/code/groups +1 -1
  24. data/examples/code/head +1 -1
  25. data/examples/code/importing +1 -1
  26. data/examples/code/modules/sample-module.pp +10 -0
  27. data/examples/code/modules/sample-module/README.txt +17 -0
  28. data/examples/code/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +36 -0
  29. data/examples/code/modules/sample-module/manifests/init.pp +12 -0
  30. data/examples/code/modules/sample-module/templates/sample.erb +5 -0
  31. data/examples/code/nodes +1 -1
  32. data/examples/code/one +1 -1
  33. data/examples/code/relationships +1 -1
  34. data/examples/code/selectors +1 -1
  35. data/examples/code/simpletests +1 -1
  36. data/examples/root/etc/init.d/sleeper +1 -1
  37. data/examples/root/etc/puppet/fileserver.conf +1 -1
  38. data/ext/ldap/puppet.schema +1 -1
  39. data/ext/module_puppet +30 -21
  40. data/ext/puppet-test +3 -3
  41. data/ext/vim/filetype.vim +1 -1
  42. data/install.rb +1 -2
  43. data/lib/puppet.rb +20 -19
  44. data/lib/puppet/checksum.rb +57 -0
  45. data/lib/puppet/config_stores/rest.rb +1 -1
  46. data/lib/puppet/daemon.rb +0 -1
  47. data/lib/puppet/{configuration.rb → defaults.rb} +56 -23
  48. data/lib/puppet/dsl.rb +22 -116
  49. data/lib/puppet/error.rb +0 -9
  50. data/lib/puppet/event.rb +0 -1
  51. data/lib/puppet/external/gratr/rdot.rb +0 -1
  52. data/lib/puppet/external/lock.rb +0 -1
  53. data/lib/puppet/feature/base.rb +3 -2
  54. data/lib/puppet/feature/rails.rb +0 -1
  55. data/lib/puppet/file_serving.rb +7 -0
  56. data/lib/puppet/file_serving/configuration.rb +129 -0
  57. data/lib/puppet/file_serving/configuration/parser.rb +124 -0
  58. data/lib/puppet/file_serving/content.rb +34 -0
  59. data/lib/puppet/file_serving/file_base.rb +63 -0
  60. data/lib/puppet/file_serving/fileset.rb +138 -0
  61. data/lib/puppet/file_serving/indirection_hooks.rb +44 -0
  62. data/lib/puppet/file_serving/metadata.rb +69 -0
  63. data/lib/puppet/file_serving/mount.rb +186 -0
  64. data/lib/puppet/file_serving/terminus_helper.rb +19 -0
  65. data/lib/puppet/indirector.rb +68 -0
  66. data/lib/puppet/indirector/catalog/compiler.rb +173 -0
  67. data/lib/puppet/indirector/catalog/yaml.rb +24 -0
  68. data/lib/puppet/indirector/checksum/file.rb +33 -0
  69. data/lib/puppet/indirector/code.rb +6 -0
  70. data/lib/puppet/indirector/direct_file_server.rb +27 -0
  71. data/lib/puppet/indirector/exec.rb +57 -0
  72. data/lib/puppet/indirector/facts/facter.rb +65 -0
  73. data/lib/puppet/indirector/facts/memory.rb +9 -0
  74. data/lib/puppet/indirector/facts/yaml.rb +7 -0
  75. data/lib/puppet/indirector/file.rb +54 -0
  76. data/lib/puppet/indirector/file_content.rb +5 -0
  77. data/lib/puppet/indirector/file_content/file.rb +11 -0
  78. data/lib/puppet/indirector/file_content/file_server.rb +11 -0
  79. data/lib/puppet/indirector/file_content/modules.rb +11 -0
  80. data/lib/puppet/indirector/file_content/rest.rb +12 -0
  81. data/lib/puppet/indirector/file_metadata.rb +5 -0
  82. data/lib/puppet/indirector/file_metadata/file.rb +26 -0
  83. data/lib/puppet/indirector/file_metadata/file_server.rb +11 -0
  84. data/lib/puppet/indirector/file_metadata/modules.rb +17 -0
  85. data/lib/puppet/indirector/file_metadata/rest.rb +12 -0
  86. data/lib/puppet/indirector/file_server.rb +56 -0
  87. data/lib/puppet/indirector/indirection.rb +237 -0
  88. data/lib/puppet/indirector/ldap.rb +90 -0
  89. data/lib/puppet/indirector/memory.rb +21 -0
  90. data/lib/puppet/indirector/module_files.rb +82 -0
  91. data/lib/puppet/indirector/node/exec.rb +52 -0
  92. data/lib/puppet/indirector/node/ldap.rb +120 -0
  93. data/lib/puppet/indirector/node/memory.rb +10 -0
  94. data/lib/puppet/indirector/node/plain.rb +19 -0
  95. data/lib/puppet/indirector/node/rest.rb +7 -0
  96. data/lib/puppet/indirector/node/yaml.rb +7 -0
  97. data/lib/puppet/indirector/plain.rb +9 -0
  98. data/lib/puppet/indirector/report/processor.rb +50 -0
  99. data/lib/puppet/indirector/rest.rb +8 -0
  100. data/lib/puppet/indirector/ssl_rsa.rb +5 -0
  101. data/lib/puppet/indirector/ssl_rsa/file.rb +33 -0
  102. data/lib/puppet/indirector/terminus.rb +178 -0
  103. data/lib/puppet/indirector/yaml.rb +57 -0
  104. data/lib/puppet/metatype/attributes.rb +3 -3
  105. data/lib/puppet/metatype/closure.rb +0 -66
  106. data/lib/puppet/metatype/container.rb +0 -9
  107. data/lib/puppet/metatype/evaluation.rb +10 -2
  108. data/lib/puppet/metatype/instances.rb +16 -30
  109. data/lib/puppet/metatype/manager.rb +1 -2
  110. data/lib/puppet/metatype/metaparams.rb +27 -21
  111. data/lib/puppet/metatype/providers.rb +3 -2
  112. data/lib/puppet/metatype/relationships.rb +1 -2
  113. data/lib/puppet/metatype/schedules.rb +0 -1
  114. data/lib/puppet/metatype/tags.rb +0 -1
  115. data/lib/puppet/module.rb +60 -32
  116. data/lib/puppet/network/authconfig.rb +0 -1
  117. data/lib/puppet/network/authorization.rb +0 -1
  118. data/lib/puppet/network/authstore.rb +0 -1
  119. data/lib/puppet/network/client.rb +13 -4
  120. data/lib/puppet/network/client/ca.rb +4 -5
  121. data/lib/puppet/network/client/dipper.rb +0 -1
  122. data/lib/puppet/network/client/file.rb +0 -1
  123. data/lib/puppet/network/client/master.rb +127 -235
  124. data/lib/puppet/network/client/proxy.rb +0 -1
  125. data/lib/puppet/network/client/report.rb +0 -1
  126. data/lib/puppet/network/client/resource.rb +0 -1
  127. data/lib/puppet/network/client/runner.rb +0 -1
  128. data/lib/puppet/network/client/status.rb +0 -1
  129. data/lib/puppet/network/client_request.rb +0 -1
  130. data/lib/puppet/network/handler.rb +5 -2
  131. data/lib/puppet/network/handler/ca.rb +1 -2
  132. data/lib/puppet/network/handler/configuration.rb +184 -0
  133. data/lib/puppet/network/handler/filebucket.rb +1 -2
  134. data/lib/puppet/network/handler/fileserver.rb +279 -107
  135. data/lib/puppet/network/handler/master.rb +57 -152
  136. data/lib/puppet/network/handler/report.rb +6 -65
  137. data/lib/puppet/network/handler/resource.rb +5 -13
  138. data/lib/puppet/network/handler/runner.rb +3 -4
  139. data/lib/puppet/network/handler/status.rb +0 -1
  140. data/lib/puppet/network/http.rb +13 -0
  141. data/lib/puppet/network/http/handler.rb +109 -0
  142. data/lib/puppet/network/http/mongrel.rb +54 -0
  143. data/lib/puppet/network/http/mongrel/rest.rb +37 -0
  144. data/lib/puppet/network/http/mongrel/xmlrpc.rb +4 -0
  145. data/lib/puppet/network/http/webrick.rb +51 -0
  146. data/lib/puppet/network/http/webrick/rest.rb +41 -0
  147. data/lib/puppet/network/http/webrick/xmlrpc.rb +4 -0
  148. data/lib/puppet/network/http_server.rb +3 -0
  149. data/lib/puppet/network/{server → http_server}/mongrel.rb +11 -5
  150. data/lib/puppet/network/{server → http_server}/webrick.rb +9 -5
  151. data/lib/puppet/network/rest_controller.rb +2 -0
  152. data/lib/puppet/network/rights.rb +0 -1
  153. data/lib/puppet/network/server.rb +63 -3
  154. data/lib/puppet/network/xmlrpc/client.rb +90 -23
  155. data/lib/puppet/network/xmlrpc/processor.rb +0 -1
  156. data/lib/puppet/network/xmlrpc/server.rb +0 -1
  157. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +0 -1
  158. data/lib/puppet/node.rb +165 -0
  159. data/lib/puppet/node/catalog.rb +480 -0
  160. data/lib/puppet/node/environment.rb +46 -0
  161. data/lib/puppet/node/facts.rb +36 -0
  162. data/lib/puppet/parameter.rb +34 -28
  163. data/lib/puppet/parser/ast.rb +0 -1
  164. data/lib/puppet/parser/ast/astarray.rb +30 -53
  165. data/lib/puppet/parser/ast/branch.rb +0 -10
  166. data/lib/puppet/parser/ast/caseopt.rb +0 -11
  167. data/lib/puppet/parser/ast/casestatement.rb +0 -12
  168. data/lib/puppet/parser/ast/collection.rb +1 -3
  169. data/lib/puppet/parser/ast/collexpr.rb +0 -2
  170. data/lib/puppet/parser/ast/{component.rb → definition.rb} +58 -72
  171. data/lib/puppet/parser/ast/else.rb +0 -10
  172. data/lib/puppet/parser/ast/function.rb +0 -2
  173. data/lib/puppet/parser/ast/hostclass.rb +21 -19
  174. data/lib/puppet/parser/ast/ifstatement.rb +0 -13
  175. data/lib/puppet/parser/ast/leaf.rb +0 -8
  176. data/lib/puppet/parser/ast/node.rb +13 -10
  177. data/lib/puppet/parser/ast/resource.rb +75 -0
  178. data/lib/puppet/parser/ast/{resourcedefaults.rb → resource_defaults.rb} +4 -20
  179. data/lib/puppet/parser/ast/{resourceoverride.rb → resource_override.rb} +3 -5
  180. data/lib/puppet/parser/ast/resource_reference.rb +66 -0
  181. data/lib/puppet/parser/ast/resourceparam.rb +0 -14
  182. data/lib/puppet/parser/ast/selector.rb +0 -10
  183. data/lib/puppet/parser/ast/tag.rb +0 -2
  184. data/lib/puppet/parser/ast/vardef.rb +0 -14
  185. data/lib/puppet/parser/collector.rb +83 -101
  186. data/lib/puppet/parser/compile.rb +509 -0
  187. data/lib/puppet/parser/functions.rb +10 -10
  188. data/lib/puppet/parser/interpreter.rb +44 -662
  189. data/lib/puppet/parser/lexer.rb +1 -3
  190. data/lib/puppet/parser/parser.rb +674 -701
  191. data/lib/puppet/parser/parser_support.rb +33 -24
  192. data/lib/puppet/parser/resource.rb +219 -162
  193. data/lib/puppet/parser/resource/param.rb +1 -2
  194. data/lib/puppet/parser/resource/reference.rb +24 -16
  195. data/lib/puppet/parser/scope.rb +48 -459
  196. data/lib/puppet/parser/templatewrapper.rb +4 -5
  197. data/lib/puppet/pgraph.rb +10 -13
  198. data/lib/puppet/property.rb +25 -41
  199. data/lib/puppet/propertychange.rb +0 -2
  200. data/lib/puppet/provider.rb +15 -11
  201. data/lib/puppet/provider/cron/crontab.rb +6 -7
  202. data/lib/puppet/provider/group/groupadd.rb +0 -1
  203. data/lib/puppet/provider/group/netinfo.rb +0 -1
  204. data/lib/puppet/provider/group/pw.rb +0 -1
  205. data/lib/puppet/provider/host/netinfo.rb +0 -1
  206. data/lib/puppet/provider/host/parsed.rb +0 -1
  207. data/lib/puppet/provider/interface/redhat.rb +90 -91
  208. data/lib/puppet/provider/interface/sunos.rb +98 -81
  209. data/lib/puppet/provider/mailalias/aliases.rb +0 -1
  210. data/lib/puppet/provider/maillist/mailman.rb +2 -3
  211. data/lib/puppet/provider/mount.rb +10 -9
  212. data/lib/puppet/provider/mount/netinfo.rb +0 -1
  213. data/lib/puppet/provider/mount/parsed.rb +0 -1
  214. data/lib/puppet/provider/nameservice.rb +0 -1
  215. data/lib/puppet/provider/nameservice/netinfo.rb +0 -1
  216. data/lib/puppet/provider/nameservice/objectadd.rb +0 -1
  217. data/lib/puppet/provider/nameservice/pw.rb +0 -1
  218. data/lib/puppet/provider/package.rb +0 -2
  219. data/lib/puppet/provider/package/appdmg.rb +0 -1
  220. data/lib/puppet/provider/package/apple.rb +0 -1
  221. data/lib/puppet/provider/package/apt.rb +0 -1
  222. data/lib/puppet/provider/package/aptitude.rb +0 -1
  223. data/lib/puppet/provider/package/aptrpm.rb +0 -1
  224. data/lib/puppet/provider/package/blastwave.rb +0 -1
  225. data/lib/puppet/provider/package/darwinport.rb +0 -1
  226. data/lib/puppet/provider/package/dpkg.rb +9 -1
  227. data/lib/puppet/provider/package/fink.rb +0 -1
  228. data/lib/puppet/provider/package/freebsd.rb +0 -1
  229. data/lib/puppet/provider/package/gem.rb +0 -1
  230. data/lib/puppet/provider/package/openbsd.rb +1 -2
  231. data/lib/puppet/provider/package/pkgdmg.rb +14 -15
  232. data/lib/puppet/provider/package/portage.rb +6 -7
  233. data/lib/puppet/provider/package/ports.rb +1 -4
  234. data/lib/puppet/provider/package/rpm.rb +31 -45
  235. data/lib/puppet/provider/package/sun.rb +0 -3
  236. data/lib/puppet/provider/package/sunfreeware.rb +0 -1
  237. data/lib/puppet/provider/package/up2date.rb +0 -1
  238. data/lib/puppet/provider/package/urpmi.rb +0 -1
  239. data/lib/puppet/provider/package/yum.rb +45 -14
  240. data/lib/puppet/provider/package/yumhelper.py +37 -0
  241. data/lib/puppet/provider/parsedfile.rb +2 -3
  242. data/lib/puppet/provider/port/parsed.rb +0 -1
  243. data/lib/puppet/provider/service/base.rb +4 -1
  244. data/lib/puppet/provider/service/debian.rb +5 -2
  245. data/lib/puppet/provider/service/freebsd.rb +51 -0
  246. data/lib/puppet/provider/service/init.rb +16 -40
  247. data/lib/puppet/provider/service/redhat.rb +1 -6
  248. data/lib/puppet/provider/service/smf.rb +0 -1
  249. data/lib/puppet/provider/sshkey/parsed.rb +0 -1
  250. data/lib/puppet/provider/user/netinfo.rb +0 -1
  251. data/lib/puppet/provider/user/pw.rb +0 -1
  252. data/lib/puppet/provider/user/useradd.rb +0 -1
  253. data/lib/puppet/provider/zone/solaris.rb +0 -1
  254. data/lib/puppet/rails.rb +35 -30
  255. data/lib/puppet/rails/database/schema.rb +0 -1
  256. data/lib/puppet/rails/host.rb +6 -15
  257. data/lib/puppet/rails/param_name.rb +1 -2
  258. data/lib/puppet/rails/param_value.rb +0 -1
  259. data/lib/puppet/rails/puppet_class.rb +0 -1
  260. data/lib/puppet/rails/resource.rb +3 -5
  261. data/lib/puppet/reference/configuration.rb +12 -6
  262. data/lib/puppet/reference/indirection.rb +34 -0
  263. data/lib/puppet/reference/node_source.rb +9 -0
  264. data/lib/puppet/relationship.rb +10 -8
  265. data/lib/puppet/reports.rb +51 -0
  266. data/lib/puppet/reports/log.rb +2 -3
  267. data/lib/puppet/reports/rrdgraph.rb +2 -5
  268. data/lib/puppet/reports/store.rb +6 -7
  269. data/lib/puppet/reports/tagmail.rb +2 -3
  270. data/lib/puppet/resource_reference.rb +79 -0
  271. data/lib/puppet/simple_graph.rb +251 -0
  272. data/lib/puppet/sslcertificates.rb +19 -15
  273. data/lib/puppet/sslcertificates/ca.rb +56 -15
  274. data/lib/puppet/sslcertificates/certificate.rb +0 -1
  275. data/lib/puppet/sslcertificates/inventory.rb +2 -6
  276. data/lib/puppet/sslcertificates/monkey_patch.rb +6 -0
  277. data/lib/puppet/sslcertificates/support.rb +4 -5
  278. data/lib/puppet/transaction.rb +93 -96
  279. data/lib/puppet/transaction/report.rb +5 -1
  280. data/lib/puppet/transportable.rb +79 -125
  281. data/lib/puppet/type.rb +44 -10
  282. data/lib/puppet/type/component.rb +25 -110
  283. data/lib/puppet/type/cron.rb +1 -2
  284. data/lib/puppet/type/exec.rb +19 -13
  285. data/lib/puppet/type/group.rb +0 -1
  286. data/lib/puppet/type/host.rb +0 -1
  287. data/lib/puppet/type/interface.rb +6 -3
  288. data/lib/puppet/type/k5login.rb +87 -0
  289. data/lib/puppet/type/mailalias.rb +0 -1
  290. data/lib/puppet/type/maillist.rb +0 -1
  291. data/lib/puppet/type/mount.rb +7 -13
  292. data/lib/puppet/type/notify.rb +0 -1
  293. data/lib/puppet/type/package.rb +7 -63
  294. data/lib/puppet/type/pfile.rb +25 -32
  295. data/lib/puppet/type/pfile/checksum.rb +0 -1
  296. data/lib/puppet/type/pfile/content.rb +18 -3
  297. data/lib/puppet/type/pfile/ensure.rb +5 -6
  298. data/lib/puppet/type/pfile/group.rb +4 -1
  299. data/lib/puppet/type/pfile/mode.rb +0 -1
  300. data/lib/puppet/type/pfile/owner.rb +6 -9
  301. data/lib/puppet/type/pfile/source.rb +28 -11
  302. data/lib/puppet/type/pfile/target.rb +2 -1
  303. data/lib/puppet/type/pfile/type.rb +0 -1
  304. data/lib/puppet/type/pfilebucket.rb +0 -1
  305. data/lib/puppet/type/port.rb +0 -1
  306. data/lib/puppet/type/resources.rb +0 -1
  307. data/lib/puppet/type/schedule.rb +17 -15
  308. data/lib/puppet/type/service.rb +23 -159
  309. data/lib/puppet/type/sshkey.rb +0 -1
  310. data/lib/puppet/type/tidy.rb +15 -7
  311. data/lib/puppet/type/user.rb +0 -1
  312. data/lib/puppet/type/zone.rb +0 -1
  313. data/lib/puppet/util.rb +1 -2
  314. data/lib/puppet/util/autoload.rb +21 -23
  315. data/lib/puppet/util/checksums.rb +37 -0
  316. data/lib/puppet/util/classgen.rb +0 -1
  317. data/lib/puppet/util/diff.rb +71 -0
  318. data/lib/puppet/util/docs.rb +8 -2
  319. data/lib/puppet/util/errors.rb +0 -1
  320. data/lib/puppet/util/execution.rb +0 -1
  321. data/lib/puppet/util/fact_store.rb +0 -1
  322. data/lib/puppet/util/feature.rb +31 -22
  323. data/lib/puppet/util/fileparsing.rb +3 -2
  324. data/lib/puppet/util/filetype.rb +30 -12
  325. data/lib/puppet/util/graph.rb +0 -1
  326. data/lib/puppet/util/inifile.rb +0 -1
  327. data/lib/puppet/util/instance_loader.rb +11 -4
  328. data/lib/puppet/util/loadedfile.rb +0 -1
  329. data/lib/puppet/util/log.rb +0 -1
  330. data/lib/puppet/util/log_paths.rb +0 -1
  331. data/lib/puppet/util/logging.rb +0 -1
  332. data/lib/puppet/util/metaid.rb +0 -1
  333. data/lib/puppet/util/methodhelper.rb +0 -2
  334. data/lib/puppet/util/metric.rb +1 -2
  335. data/lib/puppet/util/plist.rb +0 -1
  336. data/lib/puppet/util/plist/generator.rb +0 -1
  337. data/lib/puppet/util/plist/parser.rb +0 -1
  338. data/lib/puppet/util/posix.rb +7 -1
  339. data/lib/puppet/util/provider_features.rb +11 -12
  340. data/lib/puppet/util/rails/collection_merger.rb +0 -1
  341. data/lib/puppet/util/reference.rb +2 -3
  342. data/lib/puppet/util/{config.rb → settings.rb} +424 -300
  343. data/lib/puppet/util/storage.rb +1 -3
  344. data/lib/puppet/util/subclass_loader.rb +0 -1
  345. data/lib/puppet/util/suidmanager.rb +25 -42
  346. data/lib/puppet/util/uri_helper.rb +22 -0
  347. data/lib/puppet/util/variables.rb +0 -1
  348. data/lib/puppet/util/warnings.rb +0 -1
  349. data/test/Rakefile +1 -1
  350. data/test/certmgr/ca.rb +8 -2
  351. data/test/certmgr/certmgr.rb +14 -6
  352. data/test/certmgr/inventory.rb +18 -30
  353. data/test/certmgr/support.rb +3 -2
  354. data/test/executables/filebucket.rb +1 -2
  355. data/test/executables/puppetbin.rb +1 -2
  356. data/test/executables/puppetca.rb +7 -2
  357. data/test/executables/puppetd.rb +23 -29
  358. data/test/executables/puppetmasterd.rb +1 -2
  359. data/test/executables/puppetmodule.rb +1 -2
  360. data/test/language/ast.rb +24 -29
  361. data/test/language/ast/casestatement.rb +1 -2
  362. data/test/language/ast/definition.rb +166 -0
  363. data/test/language/ast/hostclass.rb +50 -29
  364. data/test/language/ast/resource.rb +59 -0
  365. data/test/language/ast/{resourceref.rb → resource_reference.rb} +30 -20
  366. data/test/language/ast/selector.rb +1 -2
  367. data/test/language/ast/variable.rb +1 -2
  368. data/test/language/compile.rb +569 -0
  369. data/test/language/functions.rb +57 -76
  370. data/test/language/lexer.rb +20 -3
  371. data/test/language/parser.rb +45 -33
  372. data/test/language/resource.rb +275 -308
  373. data/test/language/scope.rb +135 -410
  374. data/test/language/snippets.rb +19 -41
  375. data/test/language/transportable.rb +8 -29
  376. data/test/lib/mocha/auto_verify.rb +6 -6
  377. data/test/lib/mocha/deprecation.rb +22 -0
  378. data/test/lib/mocha/exception_raiser.rb +17 -0
  379. data/test/lib/mocha/expectation.rb +167 -84
  380. data/test/lib/mocha/infinite_range.rb +4 -6
  381. data/test/lib/mocha/inspect.rb +3 -1
  382. data/test/lib/mocha/is_a.rb +9 -0
  383. data/test/lib/mocha/missing_expectation.rb +27 -0
  384. data/test/lib/mocha/mock.rb +192 -5
  385. data/test/lib/mocha/multiple_yields.rb +20 -0
  386. data/test/lib/mocha/no_yields.rb +11 -0
  387. data/test/lib/mocha/object.rb +11 -1
  388. data/test/lib/mocha/parameter_matchers.rb +9 -0
  389. data/test/lib/mocha/parameter_matchers/all_of.rb +39 -0
  390. data/test/lib/mocha/parameter_matchers/any_of.rb +44 -0
  391. data/test/lib/mocha/parameter_matchers/anything.rb +30 -0
  392. data/test/lib/mocha/parameter_matchers/has_entry.rb +39 -0
  393. data/test/lib/mocha/parameter_matchers/has_key.rb +39 -0
  394. data/test/lib/mocha/parameter_matchers/has_value.rb +39 -0
  395. data/test/lib/mocha/parameter_matchers/includes.rb +37 -0
  396. data/test/lib/mocha/return_values.rb +31 -0
  397. data/test/lib/mocha/single_return_value.rb +24 -0
  398. data/test/lib/mocha/single_yield.rb +18 -0
  399. data/test/lib/mocha/standalone.rb +2 -0
  400. data/test/lib/mocha/stub.rb +18 -0
  401. data/test/lib/mocha/test_case_adapter.rb +3 -3
  402. data/test/lib/mocha/yield_parameters.rb +31 -0
  403. data/test/lib/puppettest.rb +38 -20
  404. data/test/lib/puppettest/certificates.rb +0 -1
  405. data/test/lib/puppettest/exetest.rb +0 -1
  406. data/test/lib/puppettest/fakes.rb +0 -1
  407. data/test/lib/puppettest/fileparsing.rb +8 -15
  408. data/test/lib/puppettest/filetesting.rb +0 -1
  409. data/test/lib/puppettest/parsertesting.rb +37 -23
  410. data/test/lib/puppettest/railstesting.rb +3 -6
  411. data/test/lib/puppettest/reporttesting.rb +0 -1
  412. data/test/lib/puppettest/resourcetesting.rb +6 -34
  413. data/test/lib/puppettest/runnable_test.rb +30 -0
  414. data/test/lib/puppettest/servertest.rb +2 -3
  415. data/test/lib/puppettest/support/assertions.rb +13 -41
  416. data/test/lib/puppettest/support/collection.rb +0 -1
  417. data/test/lib/puppettest/support/helpers.rb +0 -1
  418. data/test/lib/puppettest/support/resources.rb +17 -17
  419. data/test/lib/puppettest/support/utils.rb +45 -27
  420. data/test/lib/puppettest/testcase.rb +2 -21
  421. data/test/lib/rake/puppet_test_loader.rb +0 -1
  422. data/test/lib/rake/puppet_testtask.rb +0 -1
  423. data/test/network/authconfig.rb +1 -2
  424. data/test/network/authorization.rb +1 -2
  425. data/test/network/authstore.rb +1 -2
  426. data/test/network/client/ca.rb +12 -7
  427. data/test/network/client/client.rb +17 -22
  428. data/test/network/client/dipper.rb +1 -2
  429. data/test/network/client/master.rb +70 -184
  430. data/test/network/client/resource.rb +9 -2
  431. data/test/network/client_request.rb +1 -2
  432. data/test/network/daemon.rb +1 -2
  433. data/test/network/handler/bucket.rb +2 -31
  434. data/test/network/handler/ca.rb +9 -3
  435. data/test/network/handler/configuration.rb +160 -0
  436. data/test/network/handler/fileserver.rb +24 -5
  437. data/test/network/handler/handler.rb +1 -2
  438. data/test/network/handler/master.rb +38 -243
  439. data/test/network/handler/report.rb +2 -104
  440. data/test/network/handler/resource.rb +5 -3
  441. data/test/network/handler/runner.rb +22 -60
  442. data/test/network/rights.rb +1 -2
  443. data/test/network/server/mongrel_test.rb +2 -3
  444. data/test/network/server/webrick.rb +17 -11
  445. data/test/network/xmlrpc/client.rb +27 -12
  446. data/test/network/xmlrpc/processor.rb +3 -4
  447. data/test/network/xmlrpc/server.rb +1 -2
  448. data/test/network/xmlrpc/webrick_servlet.rb +8 -2
  449. data/test/other/dsl.rb +2 -4
  450. data/test/other/events.rb +14 -56
  451. data/test/other/overrides.rb +3 -6
  452. data/test/other/propertychange.rb +1 -2
  453. data/test/other/provider.rb +1 -2
  454. data/test/other/puppet.rb +1 -2
  455. data/test/other/relationships.rb +15 -17
  456. data/test/other/report.rb +14 -20
  457. data/test/other/transactions.rb +109 -192
  458. data/test/puppet/conffiles.rb +3 -5
  459. data/test/puppet/defaults.rb +1 -28
  460. data/test/puppet/errortest.rb +1 -2
  461. data/test/puppet/tc_suidmanager.rb +77 -63
  462. data/test/rails/ast.rb +4 -4
  463. data/test/rails/configuration.rb +71 -0
  464. data/test/rails/host.rb +19 -30
  465. data/test/rails/rails.rb +1 -2
  466. data/test/rails/railsparameter.rb +3 -4
  467. data/test/rails/railsresource.rb +6 -5
  468. data/test/ral/manager/attributes.rb +1 -2
  469. data/test/ral/manager/instances.rb +3 -3
  470. data/test/ral/manager/manager.rb +1 -2
  471. data/test/ral/manager/provider.rb +1 -2
  472. data/test/ral/manager/type.rb +89 -93
  473. data/test/ral/providers/cron/crontab.rb +9 -11
  474. data/test/ral/providers/group.rb +1 -2
  475. data/test/ral/providers/host/netinfo.rb +1 -2
  476. data/test/ral/providers/host/parsed.rb +1 -2
  477. data/test/ral/providers/mailalias/aliases.rb +1 -2
  478. data/test/ral/providers/mount/netinfo.rb +1 -2
  479. data/test/ral/providers/nameservice.rb +1 -2
  480. data/test/ral/providers/package.rb +5 -4
  481. data/test/ral/providers/package/apt.rb +0 -1
  482. data/test/ral/providers/package/aptrpm.rb +0 -1
  483. data/test/ral/providers/parsedfile.rb +1 -2
  484. data/test/ral/providers/port/parsed.rb +1 -2
  485. data/test/ral/providers/provider.rb +10 -5
  486. data/test/ral/providers/service/base.rb +1 -2
  487. data/test/ral/providers/service/debian.rb +58 -0
  488. data/test/ral/providers/sshkey/parsed.rb +1 -2
  489. data/test/ral/providers/user.rb +3 -2
  490. data/test/ral/providers/user/useradd.rb +0 -1
  491. data/test/ral/types/basic.rb +4 -9
  492. data/test/ral/types/cron.rb +6 -12
  493. data/test/ral/types/exec.rb +6 -7
  494. data/test/ral/types/file.rb +35 -14
  495. data/test/ral/types/file/target.rb +6 -5
  496. data/test/ral/types/filebucket.rb +3 -2
  497. data/test/ral/types/fileignoresource.rb +10 -42
  498. data/test/ral/types/filesources.rb +21 -60
  499. data/test/ral/types/group.rb +3 -3
  500. data/test/ral/types/host.rb +6 -3
  501. data/test/ral/types/mailalias.rb +1 -2
  502. data/test/ral/types/parameter.rb +5 -3
  503. data/test/ral/types/port.rb +1 -2
  504. data/test/ral/types/property.rb +3 -3
  505. data/test/ral/types/resources.rb +1 -2
  506. data/test/ral/types/service.rb +5 -3
  507. data/test/ral/types/sshkey.rb +5 -3
  508. data/test/ral/types/tidy.rb +63 -3
  509. data/test/ral/types/user.rb +10 -11
  510. data/test/ral/types/yumrepo.rb +1 -1
  511. data/test/ral/types/zone.rb +1 -2
  512. data/test/util/autoload.rb +23 -27
  513. data/test/util/classgen.rb +1 -2
  514. data/test/util/execution.rb +1 -2
  515. data/test/util/features.rb +1 -3
  516. data/test/util/fileparsing.rb +11 -3
  517. data/test/util/filetype.rb +1 -2
  518. data/test/util/inifile.rb +1 -1
  519. data/test/util/instance_loader.rb +5 -6
  520. data/test/util/loadedfile.rb +1 -2
  521. data/test/util/log.rb +1 -2
  522. data/test/util/metrics.rb +1 -2
  523. data/test/util/package.rb +1 -2
  524. data/test/util/posixtest.rb +1 -2
  525. data/test/util/{config.rb → settings.rb} +123 -265
  526. data/test/util/storage.rb +1 -2
  527. data/test/util/subclass_loader.rb +1 -2
  528. data/test/util/utiltest.rb +1 -111
  529. metadata +130 -112
  530. data/ext/tools/passwd2puppet +0 -45
  531. data/lib/puppet/fact_stores/yaml.rb +0 -42
  532. data/lib/puppet/network/handler/facts.rb +0 -70
  533. data/lib/puppet/parser/ast/resourcedef.rb +0 -222
  534. data/lib/puppet/parser/ast/resourceref.rb +0 -58
  535. data/test/language/ast/component.rb +0 -142
  536. data/test/language/collector.rb +0 -179
  537. data/test/language/interpreter.rb +0 -804
  538. data/test/language/node.rb +0 -126
  539. data/test/lib/mocha/mock_methods.rb +0 -122
  540. data/test/lib/puppettest/graph.rb +0 -41
  541. data/test/lib/spec.rb +0 -8
  542. data/test/lib/spec/callback.rb +0 -11
  543. data/test/lib/spec/callback/callback_container.rb +0 -60
  544. data/test/lib/spec/callback/extensions/module.rb +0 -24
  545. data/test/lib/spec/callback/extensions/object.rb +0 -37
  546. data/test/lib/spec/deprecated.rb +0 -3
  547. data/test/lib/spec/expectations.rb +0 -59
  548. data/test/lib/spec/expectations/differs/default.rb +0 -62
  549. data/test/lib/spec/expectations/errors.rb +0 -6
  550. data/test/lib/spec/expectations/extensions.rb +0 -3
  551. data/test/lib/spec/expectations/extensions/object.rb +0 -109
  552. data/test/lib/spec/expectations/extensions/proc.rb +0 -57
  553. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
  554. data/test/lib/spec/expectations/handler.rb +0 -47
  555. data/test/lib/spec/expectations/should.rb +0 -5
  556. data/test/lib/spec/expectations/should/base.rb +0 -64
  557. data/test/lib/spec/expectations/should/change.rb +0 -69
  558. data/test/lib/spec/expectations/should/have.rb +0 -128
  559. data/test/lib/spec/expectations/should/not.rb +0 -74
  560. data/test/lib/spec/expectations/should/should.rb +0 -81
  561. data/test/lib/spec/expectations/sugar.rb +0 -47
  562. data/test/lib/spec/matchers.rb +0 -160
  563. data/test/lib/spec/matchers/be.rb +0 -161
  564. data/test/lib/spec/matchers/be_close.rb +0 -37
  565. data/test/lib/spec/matchers/change.rb +0 -120
  566. data/test/lib/spec/matchers/eql.rb +0 -43
  567. data/test/lib/spec/matchers/equal.rb +0 -43
  568. data/test/lib/spec/matchers/has.rb +0 -44
  569. data/test/lib/spec/matchers/have.rb +0 -140
  570. data/test/lib/spec/matchers/include.rb +0 -50
  571. data/test/lib/spec/matchers/match.rb +0 -41
  572. data/test/lib/spec/matchers/raise_error.rb +0 -100
  573. data/test/lib/spec/matchers/respond_to.rb +0 -35
  574. data/test/lib/spec/matchers/satisfy.rb +0 -47
  575. data/test/lib/spec/matchers/throw_symbol.rb +0 -75
  576. data/test/lib/spec/mocks.rb +0 -232
  577. data/test/lib/spec/mocks/argument_expectation.rb +0 -132
  578. data/test/lib/spec/mocks/error_generator.rb +0 -85
  579. data/test/lib/spec/mocks/errors.rb +0 -10
  580. data/test/lib/spec/mocks/extensions/object.rb +0 -3
  581. data/test/lib/spec/mocks/message_expectation.rb +0 -231
  582. data/test/lib/spec/mocks/methods.rb +0 -40
  583. data/test/lib/spec/mocks/mock.rb +0 -26
  584. data/test/lib/spec/mocks/mock_handler.rb +0 -166
  585. data/test/lib/spec/mocks/order_group.rb +0 -29
  586. data/test/lib/spec/rake/spectask.rb +0 -173
  587. data/test/lib/spec/rake/verify_rcov.rb +0 -47
  588. data/test/lib/spec/runner.rb +0 -132
  589. data/test/lib/spec/runner/backtrace_tweaker.rb +0 -55
  590. data/test/lib/spec/runner/command_line.rb +0 -34
  591. data/test/lib/spec/runner/context.rb +0 -154
  592. data/test/lib/spec/runner/context_eval.rb +0 -142
  593. data/test/lib/spec/runner/context_runner.rb +0 -55
  594. data/test/lib/spec/runner/drb_command_line.rb +0 -21
  595. data/test/lib/spec/runner/execution_context.rb +0 -17
  596. data/test/lib/spec/runner/extensions/kernel.rb +0 -17
  597. data/test/lib/spec/runner/extensions/object.rb +0 -32
  598. data/test/lib/spec/runner/formatter.rb +0 -5
  599. data/test/lib/spec/runner/formatter/base_text_formatter.rb +0 -118
  600. data/test/lib/spec/runner/formatter/html_formatter.rb +0 -219
  601. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +0 -27
  602. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +0 -22
  603. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +0 -23
  604. data/test/lib/spec/runner/heckle_runner.rb +0 -71
  605. data/test/lib/spec/runner/heckle_runner_win.rb +0 -10
  606. data/test/lib/spec/runner/option_parser.rb +0 -224
  607. data/test/lib/spec/runner/reporter.rb +0 -105
  608. data/test/lib/spec/runner/spec_matcher.rb +0 -25
  609. data/test/lib/spec/runner/spec_parser.rb +0 -41
  610. data/test/lib/spec/runner/spec_should_raise_handler.rb +0 -74
  611. data/test/lib/spec/runner/specification.rb +0 -114
  612. data/test/lib/spec/translator.rb +0 -87
  613. data/test/lib/spec/version.rb +0 -30
  614. data/test/network/handler/facts.rb +0 -112
  615. data/test/other/pgraph.rb +0 -290
  616. data/test/other/relationship.rb +0 -74
  617. data/test/puppet/modules.rb +0 -59
  618. data/test/rails/collection.rb +0 -247
  619. data/test/rails/interpreter.rb +0 -91
  620. data/test/ral/providers/mount/parsed.rb +0 -251
  621. data/test/ral/providers/service.rb +0 -235
  622. data/test/ral/types/component.rb +0 -113
  623. data/test/ral/types/interface.rb +0 -40
  624. data/test/ral/types/mount.rb +0 -362
  625. data/test/ral/types/package.rb +0 -154
  626. data/test/ral/types/schedule.rb +0 -357
  627. data/test/tagging/tagging.rb +0 -170
  628. data/test/util/fact_store.rb +0 -67
  629. data/test/util/graph.rb +0 -108
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
3
+ require File.dirname(__FILE__) + '/../lib/puppettest'
4
4
 
5
5
  require 'puppet'
6
6
  require 'puppet/parser/interpreter'
@@ -11,7 +11,6 @@ require 'puppettest'
11
11
 
12
12
  class TestSnippets < Test::Unit::TestCase
13
13
  include PuppetTest
14
- include ObjectSpace
15
14
 
16
15
  def setup
17
16
  super
@@ -198,12 +197,12 @@ class TestSnippets < Test::Unit::TestCase
198
197
  def snippet_classpathtest
199
198
  path = "/tmp/classtest"
200
199
 
201
- file = @file[path]
200
+ file = @catalog.resource(:file, path)
202
201
  assert(file, "did not create file %s" % path)
203
202
 
204
203
  assert_nothing_raised {
205
204
  assert_equal(
206
- "//testing/component[componentname]/File[/tmp/classtest]",
205
+ "//testing/Mytype[componentname]/File[/tmp/classtest]",
207
206
  file.path)
208
207
  }
209
208
  end
@@ -272,14 +271,6 @@ class TestSnippets < Test::Unit::TestCase
272
271
  assert_mode_equal(0755, file)
273
272
  end
274
273
 
275
- def snippet_failmissingexecpath
276
- file = "/tmp/exectesting1"
277
- execfile = "/tmp/execdisttesting"
278
- assert_file(file)
279
-
280
- assert_nil(Puppet::Type.type(:exec)["exectest"], "invalid exec was created")
281
- end
282
-
283
274
  def snippet_selectorvalues
284
275
  nums = %w{1 2 3 4 5}
285
276
  files = nums.collect { |n|
@@ -458,35 +449,25 @@ class TestSnippets < Test::Unit::TestCase
458
449
  #eval("alias %s %s" % [testname, mname])
459
450
  testname = ("test_" + mname).intern
460
451
  self.send(:define_method, testname) {
461
- # first parse the file
462
- server = Puppet::Network::Handler.master.new(
463
- :Manifest => snippet(file),
464
- :Local => true
465
- )
466
- client = Puppet::Network::Client.master.new(
467
- :Master => server,
468
- :Cache => false
469
- )
470
-
471
- assert(client.local)
472
- assert_nothing_raised {
473
- client.getconfig()
452
+ Puppet[:manifest] = snippet(file)
453
+ facts = {
454
+ "hostname" => "testhost",
455
+ "domain" => "domain.com",
456
+ "ipaddress" => "127.0.0.1",
457
+ "fqdn" => "testhost.domain.com"
474
458
  }
475
459
 
476
- client = Puppet::Network::Client.master.new(
477
- :Master => server,
478
- :Cache => false
479
- )
460
+ node = Puppet::Node.new("testhost")
461
+ node.merge(facts)
480
462
 
481
- assert(client.local)
482
- # Now do it again
483
- Puppet::Type.allclear
484
- assert_nothing_raised {
485
- client.getconfig()
463
+ catalog = nil
464
+ assert_nothing_raised("Could not compile catalog") {
465
+ catalog = Puppet::Node::Catalog.find(node)
466
+ }
467
+
468
+ assert_nothing_raised("Could not convert catalog") {
469
+ catalog = catalog.to_ral
486
470
  }
487
- #assert_nothing_raised {
488
- # trans = client.apply()
489
- #}
490
471
 
491
472
  Puppet::Type.eachtype { |type|
492
473
  type.each { |obj|
@@ -498,15 +479,12 @@ class TestSnippets < Test::Unit::TestCase
498
479
  assert(obj.name)
499
480
  }
500
481
  }
482
+ @catalog = catalog
501
483
  assert_nothing_raised {
502
484
  self.send(mname)
503
485
  }
504
-
505
- client.clear
506
486
  }
507
487
  mname = mname.intern
508
488
  end
509
489
  }
510
490
  end
511
-
512
- # $Id: snippets.rb 2463 2007-05-04 23:09:34Z luke $
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
3
+ require File.dirname(__FILE__) + '/../lib/puppettest'
4
4
 
5
5
  require 'puppet'
6
6
  require 'puppet/transportable'
@@ -47,37 +47,17 @@ class TestTransportable < Test::Unit::TestCase
47
47
  assert(newobj.type, "Bucket has no type")
48
48
  end
49
49
 
50
- # Verify that we correctly strip out collectable objects, since they should
51
- # not be sent to the client.
52
- def test_collectstrip
53
- top = mk_transtree do |object, depth, width|
54
- if width % 2 == 1
55
- object.collectable = true
56
- end
57
- end
58
-
59
- assert(top.flatten.find_all { |o| o.collectable }.length > 0,
60
- "Could not find any collectable objects")
61
-
62
- # Now strip out the collectable objects
63
- top.collectstrip!
64
-
65
- # And make sure they're actually gone
66
- assert_equal(0, top.flatten.find_all { |o| o.collectable }.length,
67
- "Still found collectable objects")
68
- end
69
-
70
50
  # Make sure our 'delve' command is working
71
51
  def test_delve
72
52
  top = mk_transtree do |object, depth, width|
73
53
  if width % 2 == 1
74
- object.collectable = true
54
+ object.file = :funtest
75
55
  end
76
56
  end
77
57
 
78
58
  objects = []
79
59
  buckets = []
80
- collectable = []
60
+ found = []
81
61
 
82
62
  count = 0
83
63
  assert_nothing_raised {
@@ -87,8 +67,8 @@ class TestTransportable < Test::Unit::TestCase
87
67
  buckets << object
88
68
  else
89
69
  objects << object
90
- if object.collectable
91
- collectable << object
70
+ if object.file == :funtest
71
+ found << object
92
72
  end
93
73
  end
94
74
  end
@@ -98,10 +78,9 @@ class TestTransportable < Test::Unit::TestCase
98
78
  assert(objects.include?(obj), "Missing obj %s[%s]" % [obj.type, obj.name])
99
79
  end
100
80
 
101
- assert_equal(collectable.length,
102
- top.flatten.find_all { |o| o.collectable }.length,
103
- "Found incorrect number of collectable objects")
81
+ assert_equal(found.length,
82
+ top.flatten.find_all { |o| o.file == :funtest }.length,
83
+ "Found incorrect number of objects")
104
84
  end
105
85
  end
106
86
 
107
- # $Id: transportable.rb 1793 2006-10-16 22:01:40Z luke $
@@ -1,12 +1,12 @@
1
1
  require 'mocha/mock'
2
2
 
3
- # Methods added to TestCase allowing creation of mock objects.
4
- #
5
- # Mocks created this way will have their expectations automatically verified at the end of the test.
6
- #
7
- # See Mocha::MockMethods for methods on mock objects.
8
- module Mocha
3
+ module Mocha # :nodoc:
9
4
 
5
+ # Methods added to TestCase allowing creation of traditional mock objects.
6
+ #
7
+ # Mocks created this way will have their expectations automatically verified at the end of the test.
8
+ #
9
+ # See Mock for methods on mock objects.
10
10
  module AutoVerify
11
11
 
12
12
  def mocks # :nodoc:
@@ -0,0 +1,22 @@
1
+ module Mocha
2
+
3
+ class Deprecation
4
+
5
+ class << self
6
+
7
+ attr_accessor :mode, :messages
8
+
9
+ def warning(message)
10
+ @messages << message
11
+ $stderr.puts "Mocha deprecation warning: #{message}" unless mode == :disabled
12
+ $stderr.puts caller.join("\n ") if mode == :debug
13
+ end
14
+
15
+ end
16
+
17
+ self.mode = :enabled
18
+ self.messages = []
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,17 @@
1
+ module Mocha # :nodoc:
2
+
3
+ class ExceptionRaiser # :nodoc:
4
+
5
+ def initialize(exception, message)
6
+ @exception, @message = exception, message
7
+ end
8
+
9
+ def evaluate
10
+ raise @exception, @exception.to_s if @exception == Interrupt
11
+ raise @exception, @message if @message
12
+ raise @exception
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -1,21 +1,18 @@
1
1
  require 'mocha/infinite_range'
2
2
  require 'mocha/pretty_parameters'
3
3
  require 'mocha/expectation_error'
4
+ require 'mocha/return_values'
5
+ require 'mocha/exception_raiser'
6
+ require 'mocha/yield_parameters'
7
+ require 'mocha/is_a'
4
8
 
5
- class Object
6
-
7
- alias_method :__is_a__, :is_a?
8
-
9
- end
10
-
11
- module Mocha
12
- # Methods on expectations returned from Mocha::MockMethods#expects and Mocha::MockMethods#stubs
9
+ module Mocha # :nodoc:
10
+
11
+ # Methods on expectations returned from Mock#expects, Mock#stubs, Object#expects and Object#stubs.
13
12
  class Expectation
14
13
 
15
14
  # :stopdoc:
16
15
 
17
- class InvalidExpectation < Exception; end
18
-
19
16
  class AlwaysEqual
20
17
  def ==(other)
21
18
  true
@@ -26,23 +23,26 @@ module Mocha
26
23
 
27
24
  def initialize(mock, method_name, backtrace = nil)
28
25
  @mock, @method_name = mock, method_name
29
- @count = 1
26
+ @expected_count = 1
30
27
  @parameters, @parameter_block = AlwaysEqual.new, nil
31
- @invoked, @return_value = 0, nil
28
+ @invoked_count, @return_values = 0, ReturnValues.new
32
29
  @backtrace = backtrace || caller
33
- @yield = nil
30
+ @yield_parameters = YieldParameters.new
34
31
  end
35
32
 
36
- def yield?
37
- @yield
38
- end
39
-
40
33
  def match?(method_name, *arguments)
34
+ return false unless @method_name == method_name
41
35
  if @parameter_block then
42
- @parameter_block.call(*arguments)
36
+ return false unless @parameter_block.call(*arguments)
37
+ else
38
+ return false unless (@parameters == arguments)
39
+ end
40
+ if @expected_count.is_a?(Range) then
41
+ return false unless @invoked_count < @expected_count.last
43
42
  else
44
- (@method_name == method_name) and (@parameters == arguments)
43
+ return false unless @invoked_count < @expected_count
45
44
  end
45
+ return true
46
46
  end
47
47
 
48
48
  # :startdoc:
@@ -54,34 +54,63 @@ module Mocha
54
54
  # +range+ can be specified as an exact integer or as a range of integers
55
55
  # object = mock()
56
56
  # object.expects(:expected_method).times(3)
57
- # 3.times { object.expected_method } # => verify succeeds
57
+ # 3.times { object.expected_method }
58
+ # # => verify succeeds
58
59
  #
59
60
  # object = mock()
60
61
  # object.expects(:expected_method).times(3)
61
- # 2.times { object.expected_method } # => verify fails
62
+ # 2.times { object.expected_method }
63
+ # # => verify fails
62
64
  #
63
65
  # object = mock()
64
66
  # object.expects(:expected_method).times(2..4)
65
- # 3.times { object.expected_method } # => verify succeeds
67
+ # 3.times { object.expected_method }
68
+ # # => verify succeeds
66
69
  #
67
70
  # object = mock()
68
71
  # object.expects(:expected_method).times(2..4)
69
- # object.expected_method # => verify fails
72
+ # object.expected_method
73
+ # # => verify fails
70
74
  def times(range)
71
- @count = range
75
+ @expected_count = range
76
+ self
77
+ end
78
+
79
+ # :call-seq: once() -> expectation
80
+ #
81
+ # Modifies expectation so that the expected method must be called exactly once.
82
+ # Note that this is the default behaviour for an expectation, but you may wish to use it for clarity/emphasis.
83
+ # object = mock()
84
+ # object.expects(:expected_method).once
85
+ # object.expected_method
86
+ # # => verify succeeds
87
+ #
88
+ # object = mock()
89
+ # object.expects(:expected_method).once
90
+ # object.expected_method
91
+ # object.expected_method
92
+ # # => verify fails
93
+ #
94
+ # object = mock()
95
+ # object.expects(:expected_method).once
96
+ # # => verify fails
97
+ def once()
98
+ times(1)
72
99
  self
73
100
  end
74
101
 
75
- # :call-seq: never -> expectation
102
+ # :call-seq: never() -> expectation
76
103
  #
77
104
  # Modifies expectation so that the expected method must never be called.
78
105
  # object = mock()
79
106
  # object.expects(:expected_method).never
80
- # object.expected_method # => verify fails
107
+ # object.expected_method
108
+ # # => verify fails
81
109
  #
82
110
  # object = mock()
83
111
  # object.expects(:expected_method).never
84
- # object.expected_method # => verify succeeds
112
+ # object.expected_method
113
+ # # => verify succeeds
85
114
  def never
86
115
  times(0)
87
116
  self
@@ -92,11 +121,13 @@ module Mocha
92
121
  # Modifies expectation so that the expected method must be called at least a +minimum_number_of_times+.
93
122
  # object = mock()
94
123
  # object.expects(:expected_method).at_least(2)
95
- # 3.times { object.expected_method } # => verify succeeds
124
+ # 3.times { object.expected_method }
125
+ # # => verify succeeds
96
126
  #
97
127
  # object = mock()
98
128
  # object.expects(:expected_method).at_least(2)
99
- # object.expected_method # => verify fails
129
+ # object.expected_method
130
+ # # => verify fails
100
131
  def at_least(minimum_number_of_times)
101
132
  times(Range.at_least(minimum_number_of_times))
102
133
  self
@@ -107,7 +138,8 @@ module Mocha
107
138
  # Modifies expectation so that the expected method must be called at least once.
108
139
  # object = mock()
109
140
  # object.expects(:expected_method).at_least_once
110
- # object.expected_method # => verify succeeds
141
+ # object.expected_method
142
+ # # => verify succeeds
111
143
  #
112
144
  # object = mock()
113
145
  # object.expects(:expected_method).at_least_once
@@ -122,11 +154,13 @@ module Mocha
122
154
  # Modifies expectation so that the expected method must be called at most a +maximum_number_of_times+.
123
155
  # object = mock()
124
156
  # object.expects(:expected_method).at_most(2)
125
- # 2.times { object.expected_method } # => verify succeeds
157
+ # 2.times { object.expected_method }
158
+ # # => verify succeeds
126
159
  #
127
160
  # object = mock()
128
161
  # object.expects(:expected_method).at_most(2)
129
- # 3.times { object.expected_method } # => verify fails
162
+ # 3.times { object.expected_method }
163
+ # # => verify fails
130
164
  def at_most(maximum_number_of_times)
131
165
  times(Range.at_most(maximum_number_of_times))
132
166
  self
@@ -137,11 +171,13 @@ module Mocha
137
171
  # Modifies expectation so that the expected method must be called at most once.
138
172
  # object = mock()
139
173
  # object.expects(:expected_method).at_most_once
140
- # object.expected_method # => verify succeeds
174
+ # object.expected_method
175
+ # # => verify succeeds
141
176
  #
142
177
  # object = mock()
143
178
  # object.expects(:expected_method).at_most_once
144
- # 2.times { object.expected_method } # => verify fails
179
+ # 2.times { object.expected_method }
180
+ # # => verify fails
145
181
  def at_most_once()
146
182
  at_most(1)
147
183
  self
@@ -152,20 +188,26 @@ module Mocha
152
188
  # Modifies expectation so that the expected method must be called with specified +arguments+.
153
189
  # object = mock()
154
190
  # object.expects(:expected_method).with(:param1, :param2)
155
- # object.expected_method(:param1, :param2) # => verify succeeds
191
+ # object.expected_method(:param1, :param2)
192
+ # # => verify succeeds
156
193
  #
157
194
  # object = mock()
158
195
  # object.expects(:expected_method).with(:param1, :param2)
159
- # object.expected_method(:param3) # => verify fails
196
+ # object.expected_method(:param3)
197
+ # # => verify fails
198
+ # May be used with parameter matchers in Mocha::ParameterMatchers.
199
+ #
160
200
  # If a +parameter_block+ is given, the block is called with the parameters passed to the expected method.
161
201
  # The expectation is matched if the block evaluates to +true+.
162
202
  # object = mock()
163
203
  # object.expects(:expected_method).with() { |value| value % 4 == 0 }
164
- # object.expected_method(16) # => verify succeeds
204
+ # object.expected_method(16)
205
+ # # => verify succeeds
165
206
  #
166
207
  # object = mock()
167
208
  # object.expects(:expected_method).with() { |value| value % 4 == 0 }
168
- # object.expected_method(17) # => verify fails
209
+ # object.expected_method(17)
210
+ # # => verify fails
169
211
  def with(*arguments, &parameter_block)
170
212
  @parameters, @parameter_block = arguments, parameter_block
171
213
  class << @parameters; def to_s; join(', '); end; end
@@ -180,12 +222,42 @@ module Mocha
180
222
  # yielded_value = nil
181
223
  # object.expected_method { |value| yielded_value = value }
182
224
  # yielded_value # => 'result'
225
+ # May be called multiple times on the same expectation for consecutive invocations. Also see Expectation#then.
226
+ # object = mock()
227
+ # object.stubs(:expected_method).yields(1).then.yields(2)
228
+ # yielded_values_from_first_invocation = []
229
+ # yielded_values_from_second_invocation = []
230
+ # object.expected_method { |value| yielded_values_from_first_invocation << value } # first invocation
231
+ # object.expected_method { |value| yielded_values_from_second_invocation << value } # second invocation
232
+ # yielded_values_from_first_invocation # => [1]
233
+ # yielded_values_from_second_invocation # => [2]
183
234
  def yields(*parameters)
184
- @yield = true
185
- @parameters_to_yield = parameters
235
+ @yield_parameters.add(*parameters)
186
236
  self
187
237
  end
188
-
238
+
239
+ # :call-seq: multiple_yields(*parameter_groups) -> expectation
240
+ #
241
+ # Modifies expectation so that when the expected method is called, it yields multiple times per invocation with the specified +parameter_groups+.
242
+ # object = mock()
243
+ # object.expects(:expected_method).multiple_yields(['result_1', 'result_2'], ['result_3'])
244
+ # yielded_values = []
245
+ # object.expected_method { |*values| yielded_values << values }
246
+ # yielded_values # => [['result_1', 'result_2'], ['result_3]]
247
+ # May be called multiple times on the same expectation for consecutive invocations. Also see Expectation#then.
248
+ # object = mock()
249
+ # object.stubs(:expected_method).multiple_yields([1, 2], [3]).then.multiple_yields([4], [5, 6])
250
+ # yielded_values_from_first_invocation = []
251
+ # yielded_values_from_second_invocation = []
252
+ # object.expected_method { |*values| yielded_values_from_first_invocation << values } # first invocation
253
+ # object.expected_method { |*values| yielded_values_from_second_invocation << values } # second invocation
254
+ # yielded_values_from_first_invocation # => [[1, 2], [3]]
255
+ # yielded_values_from_second_invocation # => [[4], [5, 6]]
256
+ def multiple_yields(*parameter_groups)
257
+ @yield_parameters.multiple_add(*parameter_groups)
258
+ self
259
+ end
260
+
189
261
  # :call-seq: returns(value) -> expectation
190
262
  # :call-seq: returns(*values) -> expectation
191
263
  #
@@ -199,13 +271,30 @@ module Mocha
199
271
  # object.stubs(:stubbed_method).returns(1, 2)
200
272
  # object.stubbed_method # => 1
201
273
  # object.stubbed_method # => 2
202
- # If +value+ is a Proc, then expected method will return result of calling Proc.
274
+ # May be called multiple times on the same expectation. Also see Expectation#then.
275
+ # object = mock()
276
+ # object.stubs(:expected_method).returns(1, 2).then.returns(3)
277
+ # object.expected_method # => 1
278
+ # object.expected_method # => 2
279
+ # object.expected_method # => 3
280
+ # May be called in conjunction with Expectation#raises on the same expectation.
281
+ # object = mock()
282
+ # object.stubs(:expected_method).returns(1, 2).then.raises(Exception)
283
+ # object.expected_method # => 1
284
+ # object.expected_method # => 2
285
+ # object.expected_method # => raises exception of class Exception1
286
+ # If +value+ is a +Proc+, then the expected method will return the result of calling <tt>Proc#call</tt>.
287
+ #
288
+ # This usage is _deprecated_.
289
+ # Use explicit multiple return values and/or multiple expectations instead.
290
+ #
291
+ # A +Proc+ instance will be treated the same as any other value in a future release.
203
292
  # object = mock()
204
293
  # object.stubs(:stubbed_method).returns(lambda { rand(100) })
205
294
  # object.stubbed_method # => 41
206
295
  # object.stubbed_method # => 77
207
296
  def returns(*values)
208
- @return_value = (values.size > 1) ? lambda { values.shift } : @return_value = values.first
297
+ @return_values += ReturnValues.build(*values)
209
298
  self
210
299
  end
211
300
 
@@ -215,23 +304,51 @@ module Mocha
215
304
  # object = mock()
216
305
  # object.expects(:expected_method).raises(Exception, 'message')
217
306
  # object.expected_method # => raises exception of class Exception and with message 'message'
307
+ # May be called multiple times on the same expectation. Also see Expectation#then.
308
+ # object = mock()
309
+ # object.stubs(:expected_method).raises(Exception1).then.raises(Exception2)
310
+ # object.expected_method # => raises exception of class Exception1
311
+ # object.expected_method # => raises exception of class Exception2
312
+ # May be called in conjunction with Expectation#returns on the same expectation.
313
+ # object = mock()
314
+ # object.stubs(:expected_method).raises(Exception).then.returns(2, 3)
315
+ # object.expected_method # => raises exception of class Exception1
316
+ # object.expected_method # => 2
317
+ # object.expected_method # => 3
218
318
  def raises(exception = RuntimeError, message = nil)
219
- @return_value = message ? lambda { raise exception, message } : lambda { raise exception }
319
+ @return_values += ReturnValues.new(ExceptionRaiser.new(exception, message))
220
320
  self
221
321
  end
222
322
 
323
+ # :call-seq: then() -> expectation
324
+ #
325
+ # Syntactic sugar to improve readability. Has no effect on state of the expectation.
326
+ # object = mock()
327
+ # object.stubs(:expected_method).returns(1, 2).then.raises(Exception).then.returns(4)
328
+ # object.expected_method # => 1
329
+ # object.expected_method # => 2
330
+ # object.expected_method # => raises exception of class Exception
331
+ # object.expected_method # => 4
332
+ def then
333
+ self
334
+ end
335
+
223
336
  # :stopdoc:
224
337
 
225
338
  def invoke
226
- @invoked += 1
227
- yield(*@parameters_to_yield) if yield? and block_given?
228
- @return_value.__is_a__(Proc) ? @return_value.call : @return_value
339
+ @invoked_count += 1
340
+ if block_given? then
341
+ @yield_parameters.next_invocation.each do |yield_parameters|
342
+ yield(*yield_parameters)
343
+ end
344
+ end
345
+ @return_values.next
229
346
  end
230
347
 
231
348
  def verify
232
349
  yield(self) if block_given?
233
- unless (@count === @invoked) then
234
- error = ExpectationError.new(error_message(@count, @invoked))
350
+ unless (@expected_count === @invoked_count) then
351
+ error = ExpectationError.new(error_message(@expected_count, @invoked_count))
235
352
  error.set_backtrace(filtered_backtrace)
236
353
  raise error
237
354
  end
@@ -251,45 +368,11 @@ module Mocha
251
368
  end
252
369
 
253
370
  def error_message(expected_count, actual_count)
254
- "#{@mock.mocha_inspect}.#{method_signature} - expected calls: #{expected_count}, actual calls: #{actual_count}"
371
+ "#{@mock.mocha_inspect}.#{method_signature} - expected calls: #{expected_count.mocha_inspect}, actual calls: #{actual_count}"
255
372
  end
256
373
 
257
374
  # :startdoc:
258
375
 
259
376
  end
260
377
 
261
- # :stopdoc:
262
-
263
- class Stub < Expectation
264
-
265
- def verify
266
- true
267
- end
268
-
269
- end
270
-
271
- class MissingExpectation < Expectation
272
-
273
- def initialize(mock, method_name)
274
- super
275
- @invoked = true
276
- end
277
-
278
- def verify
279
- msg = error_message(0, 1)
280
- similar_expectations_list = similar_expectations.collect { |expectation| expectation.method_signature }.join("\n")
281
- msg << "\nSimilar expectations:\n#{similar_expectations_list}" unless similar_expectations.empty?
282
- error = ExpectationError.new(msg)
283
- error.set_backtrace(filtered_backtrace)
284
- raise error if @invoked
285
- end
286
-
287
- def similar_expectations
288
- @mock.expectations.select { |expectation| expectation.method_name == self.method_name }
289
- end
290
-
291
- end
292
-
293
- # :startdoc:
294
-
295
378
  end