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 'puppettest'
6
6
  require 'puppettest/resourcetesting'
@@ -11,159 +11,217 @@ class TestResource < PuppetTest::TestCase
11
11
  include PuppetTest::ResourceTesting
12
12
  Parser = Puppet::Parser
13
13
  AST = Parser::AST
14
+ Resource = Puppet::Parser::Resource
14
15
  Reference = Puppet::Parser::Resource::Reference
15
16
 
16
17
  def setup
17
18
  super
18
19
  Puppet[:trace] = false
19
- @interp, @scope, @source = mkclassframing
20
+ end
21
+
22
+ def teardown
23
+ mocha_verify
20
24
  end
21
25
 
22
26
  def test_initialize
23
27
  args = {:type => "resource", :title => "testing",
24
- :source => @source, :scope => @scope}
28
+ :scope => mkscope}
25
29
  # Check our arg requirements
26
30
  args.each do |name, value|
27
31
  try = args.dup
28
32
  try.delete(name)
29
- assert_raise(Puppet::DevError) do
33
+ assert_raise(ArgumentError, "Did not fail when %s was missing" % name) do
30
34
  Parser::Resource.new(try)
31
35
  end
32
36
  end
33
37
 
34
- args[:params] = paramify @source, :one => "yay", :three => "rah"
35
-
36
38
  res = nil
37
39
  assert_nothing_raised do
38
40
  res = Parser::Resource.new(args)
39
41
  end
40
42
 
41
- # Make sure it got the parameters correctly.
42
- assert_equal("yay", res[:one])
43
- assert_equal("rah", res[:three])
44
-
45
- assert_equal({:one => "yay", :three => "rah"}, res.to_hash)
43
+ ref = res.instance_variable_get("@ref")
44
+ assert_equal("Resource", ref.type, "did not set resource type")
45
+ assert_equal("testing", ref.title, "did not set resource title")
46
46
  end
47
47
 
48
- def test_override
48
+ def test_merge
49
49
  res = mkresource
50
+ other = mkresource
50
51
 
51
- # Now verify we can't override with any random class
52
- assert_raise(Puppet::ParseError) do
53
- res.set paramify(@scope.findclass("other"), "one" => "boo").shift
52
+ # First try the case where the resource is not allowed to override
53
+ res.source = "source1"
54
+ other.source = "source2"
55
+ other.source.expects(:child_of?).with("source1").returns(false)
56
+ assert_raise(Puppet::ParseError, "Allowed unrelated resources to override") do
57
+ res.merge(other)
54
58
  end
55
59
 
56
- # And that we can with a subclass
57
- assert_nothing_raised do
58
- res.set paramify(@scope.findclass("sub1"), "one" => "boo").shift
59
- end
60
+ # Next try it when the sources are equal.
61
+ res.source = "source3"
62
+ other.source = res.source
63
+ other.source.expects(:child_of?).with("source3").never
64
+ params = {:a => :b, :c => :d}
65
+ other.expects(:params).returns(params)
66
+ res.expects(:override_parameter).with(:b)
67
+ res.expects(:override_parameter).with(:d)
68
+ res.merge(other)
69
+
70
+ # And then parentage is involved
71
+ other = mkresource
72
+ res.source = "source3"
73
+ other.source = "source4"
74
+ other.source.expects(:child_of?).with("source3").returns(true)
75
+ params = {:a => :b, :c => :d}
76
+ other.expects(:params).returns(params)
77
+ res.expects(:override_parameter).with(:b)
78
+ res.expects(:override_parameter).with(:d)
79
+ res.merge(other)
80
+ end
60
81
 
61
- # And that a different subclass can override a different parameter
62
- assert_nothing_raised do
63
- res.set paramify(@scope.findclass("sub2"), "three" => "boo").shift
64
- end
82
+ # the [] method
83
+ def test_array_accessors
84
+ res = mkresource
85
+ params = res.instance_variable_get("@params")
86
+ assert_nil(res[:missing], "Found a missing parameter somehow")
87
+ params[:something] = stub(:value => "yay")
88
+ assert_equal("yay", res[:something], "Did not correctly call value on the parameter")
65
89
 
66
- # But not the same one
67
- assert_raise(Puppet::ParseError) do
68
- res.set paramify(@scope.findclass("sub2"), "one" => "something").shift
69
- end
90
+ res.expects(:title).returns(:mytitle)
91
+ assert_equal(:mytitle, res[:title], "Did not call title when asked for it as a param")
70
92
  end
71
93
 
72
- def check_paramadd(val1, val2, merged_val)
73
- res = mkresource :params => {"one" => val1}
74
- assert_nothing_raised do
75
- res.set Parser::Resource::Param.new(
76
- :name => "one", :value => val2,
77
- :add => true, :source => @scope.findclass("sub1"))
78
- end
79
- assert_equal(merged_val, res[:one])
94
+ # Make sure any defaults stored in the scope get added to our resource.
95
+ def test_add_defaults
96
+ res = mkresource
97
+ params = res.instance_variable_get("@params")
98
+ params[:a] = :b
99
+ res.scope.expects(:lookupdefaults).with(res.type).returns(:a => :replaced, :c => :d)
100
+ res.expects(:debug)
101
+
102
+ res.send(:add_defaults)
103
+ assert_equal(:d, params[:c], "Did not set default")
104
+ assert_equal(:b, params[:a], "Replaced parameter with default")
80
105
  end
81
106
 
82
- def test_paramadd
83
- check_paramadd([], [], [])
84
- check_paramadd([], "rah", ["rah"])
85
- check_paramadd([], ["rah", "bah"], ["rah", "bah"])
86
-
87
- check_paramadd("yay", [], ["yay"])
88
- check_paramadd("yay", "rah", ["yay", "rah"])
89
- check_paramadd("yay", ["rah", "bah"], ["yay", "rah", "bah"])
90
-
91
- check_paramadd(["yay", "boo"], [], ["yay", "boo"])
92
- check_paramadd(["yay", "boo"], "rah", ["yay", "boo", "rah"])
93
- check_paramadd(["yay", "boo"], ["rah", "bah"],
94
- ["yay", "boo", "rah", "bah"])
107
+ def test_finish
108
+ res = mkresource
109
+ res.expects(:add_overrides)
110
+ res.expects(:add_defaults)
111
+ res.expects(:add_metaparams)
112
+ res.expects(:validate)
113
+ res.finish
95
114
  end
96
115
 
97
- def test_merge
98
- # Start with the normal one
116
+ # Make sure we paramcheck our params
117
+ def test_validate
99
118
  res = mkresource
119
+ params = res.instance_variable_get("@params")
120
+ params[:one] = :two
121
+ params[:three] = :four
122
+ res.expects(:paramcheck).with(:one)
123
+ res.expects(:paramcheck).with(:three)
124
+ res.send(:validate)
125
+ end
100
126
 
101
- # Now create a resource from a different scope
102
- other = mkresource :source => other, :params => {"one" => "boo"}
103
-
104
- # Make sure we can't merge it
105
- assert_raise(Puppet::ParseError) do
106
- res.merge(other)
107
- end
108
-
109
- # Make one from a subscope
110
- other = mkresource :source => "sub1", :params => {"one" => "boo"}
111
-
112
- # Make sure it merges
113
- assert_nothing_raised do
114
- res.merge(other)
115
- end
127
+ def test_override_parameter
128
+ res = mkresource
129
+ params = res.instance_variable_get("@params")
130
+
131
+ # There are three cases, with the second having two options:
132
+
133
+ # No existing parameter.
134
+ param = stub(:name => "myparam")
135
+ res.send(:override_parameter, param)
136
+ assert_equal(param, params["myparam"], "Override was not added to param list")
137
+
138
+ # An existing parameter that we can override.
139
+ source = stub(:child_of? => true)
140
+ # Start out without addition
141
+ params["param2"] = stub(:source => :whatever)
142
+ param = stub(:name => "param2", :source => source, :add => false)
143
+ res.send(:override_parameter, param)
144
+ assert_equal(param, params["param2"], "Override was not added to param list")
145
+
146
+ # Try with addition.
147
+ params["param2"] = stub(:value => :a, :source => :whatever)
148
+ param = stub(:name => "param2", :source => source, :add => true, :value => :b)
149
+ param.expects(:value=).with([:a, :b])
150
+ res.send(:override_parameter, param)
151
+ assert_equal(param, params["param2"], "Override was not added to param list")
152
+
153
+ # And finally, make sure we throw an exception when the sources aren't related
154
+ source = stub(:child_of? => false)
155
+ params["param2"] = stub(:source => :whatever, :file => :f, :line => :l)
156
+ old = params["param2"]
157
+ param = stub(:name => "param2", :source => source, :file => :f, :line => :l)
158
+ assert_raise(Puppet::ParseError, "Did not fail when params conflicted") do
159
+ res.send(:override_parameter, param)
160
+ end
161
+ assert_equal(old, params["param2"], "Param was replaced irrespective of conflict")
162
+ end
116
163
 
117
- assert_equal("boo", res["one"])
164
+ def test_set_parameter
165
+ res = mkresource
166
+ params = res.instance_variable_get("@params")
167
+
168
+ # First test the simple case: It's already a parameter
169
+ param = mock('param')
170
+ param.expects(:is_a?).with(Resource::Param).returns(true)
171
+ param.expects(:name).returns("pname")
172
+ res.send(:set_parameter, param)
173
+ assert_equal(param, params["pname"], "Parameter was not added to hash")
174
+
175
+ # Now the case where there's no value but it's not a param
176
+ param = mock('param')
177
+ param.expects(:is_a?).with(Resource::Param).returns(false)
178
+ assert_raise(ArgumentError, "Did not fail when a non-param was passed") do
179
+ res.send(:set_parameter, param)
180
+ end
181
+
182
+ # and the case where a value is passed in
183
+ param = stub :name => "pname", :value => "whatever"
184
+ Resource::Param.expects(:new).with(:name => "pname", :value => "myvalue", :source => res.source).returns(param)
185
+ res.send(:set_parameter, "pname", "myvalue")
186
+ assert_equal(param, params["pname"], "Did not put param in hash")
118
187
  end
119
188
 
120
189
  def test_paramcheck
121
- # First make a builtin resource
122
- res = nil
123
- assert_nothing_raised do
124
- res = Parser::Resource.new :type => "file", :title => tempfile(),
125
- :source => @source, :scope => @scope
126
- end
127
-
128
- %w{path group source schedule subscribe}.each do |param|
129
- assert_nothing_raised("Param %s was considered invalid" % param) do
130
- res.paramcheck(param)
131
- end
132
- end
190
+ # There are three cases here:
133
191
 
134
- %w{this bad noness}.each do |param|
135
- assert_raise(Puppet::ParseError, "%s was considered valid" % param) do
136
- res.paramcheck(param)
137
- end
138
- end
139
-
140
- # Now create a defined resource
141
- assert_nothing_raised do
142
- res = Parser::Resource.new :type => "resource", :title => "yay",
143
- :source => @source, :scope => @scope
144
- end
145
-
146
- %w{one two three schedule subscribe}.each do |param|
147
- assert_nothing_raised("Param %s was considered invalid" % param) do
148
- res.paramcheck(param)
149
- end
150
- end
151
-
152
- %w{this bad noness}.each do |param|
153
- assert_raise(Puppet::ParseError, "%s was considered valid" % param) do
154
- res.paramcheck(param)
155
- end
156
- end
192
+ # It's a valid parameter
193
+ res = mkresource
194
+ ref = mock('ref')
195
+ res.instance_variable_set("@ref", ref)
196
+ klass = mock("class")
197
+ ref.expects(:typeclass).returns(klass).times(4)
198
+ klass.expects(:validattr?).with("good").returns(true)
199
+ assert(res.send(:paramcheck, :good), "Did not allow valid param")
200
+
201
+ # It's name or title
202
+ klass.expects(:validattr?).with("name").returns(false)
203
+ assert(res.send(:paramcheck, :name), "Did not allow name")
204
+ klass.expects(:validattr?).with("title").returns(false)
205
+ assert(res.send(:paramcheck, :title), "Did not allow title")
206
+
207
+ # It's not actually allowed
208
+ klass.expects(:validattr?).with("other").returns(false)
209
+ res.expects(:fail)
210
+ ref.expects(:type)
211
+ res.send(:paramcheck, :other)
157
212
  end
158
213
 
159
- def test_to_trans
214
+ def test_to_transobject
160
215
  # First try translating a builtin resource. Make sure we use some references
161
216
  # and arrays, to make sure they translate correctly.
217
+ source = mock("source")
218
+ scope = mkscope
219
+ scope.stubs(:tags).returns([])
162
220
  refs = []
163
221
  4.times { |i| refs << Puppet::Parser::Resource::Reference.new(:title => "file%s" % i, :type => "file") }
164
222
  res = Parser::Resource.new :type => "file", :title => "/tmp",
165
- :source => @source, :scope => @scope,
166
- :params => paramify(@source, :owner => "nobody", :group => %w{you me},
223
+ :source => source, :scope => scope,
224
+ :params => paramify(source, :owner => "nobody", :group => %w{you me},
167
225
  :require => refs[0], :ignore => %w{svn},
168
226
  :subscribe => [refs[1], refs[2]], :notify => [refs[3]])
169
227
 
@@ -174,182 +232,91 @@ class TestResource < PuppetTest::TestCase
174
232
 
175
233
  assert_instance_of(Puppet::TransObject, obj)
176
234
 
177
- assert_equal(obj.type, res.type)
235
+ assert_equal(obj.type, res.type.downcase)
178
236
  assert_equal(obj.name, res.title)
179
237
 
180
238
  # TransObjects use strings, resources use symbols
181
239
  assert_equal("nobody", obj["owner"], "Single-value string was not passed correctly")
182
240
  assert_equal(%w{you me}, obj["group"], "Array of strings was not passed correctly")
183
241
  assert_equal("svn", obj["ignore"], "Array with single string was not turned into single value")
184
- assert_equal(["file", refs[0].title], obj["require"], "Resource reference was not passed correctly")
185
- assert_equal([["file", refs[1].title], ["file", refs[2].title]], obj["subscribe"], "Array of resource references was not passed correctly")
186
- assert_equal(["file", refs[3].title], obj["notify"], "Array with single resource reference was not turned into single value")
242
+ assert_equal(["File", refs[0].title], obj["require"], "Resource reference was not passed correctly")
243
+ assert_equal([["File", refs[1].title], ["File", refs[2].title]], obj["subscribe"], "Array of resource references was not passed correctly")
244
+ assert_equal(["File", refs[3].title], obj["notify"], "Array with single resource reference was not turned into single value")
187
245
  end
188
246
 
189
- def test_adddefaults
190
- # Set some defaults at the top level
191
- top = {:one => "fun", :two => "shoe"}
192
-
193
- @scope.setdefaults("resource", paramify(@source, top))
194
-
195
- # Make a resource at that level
196
- res = Parser::Resource.new :type => "resource", :title => "yay",
197
- :source => @source, :scope => @scope
198
-
199
- # Add the defaults
200
- assert_nothing_raised do
201
- res.adddefaults
202
- end
203
-
204
- # And make sure we got them
205
- top.each do |p, v|
206
- assert_equal(v, res[p])
207
- end
208
-
209
- # Now got a bit lower
210
- other = @scope.newscope
211
-
212
- # And create a resource
213
- lowerres = Parser::Resource.new :type => "resource", :title => "funtest",
214
- :source => @source, :scope => other
215
-
216
- assert_nothing_raised do
217
- lowerres.adddefaults
218
- end
219
-
220
- # And check
221
- top.each do |p, v|
222
- assert_equal(v, lowerres[p])
223
- end
224
-
225
- # Now add some of our own defaults
226
- lower = {:one => "shun", :three => "free"}
227
- other.setdefaults("resource", paramify(@source, lower))
228
- otherres = Parser::Resource.new :type => "resource", :title => "yaytest",
229
- :source => @source, :scope => other
230
-
231
- should = top.dup
232
- # Make sure the lower defaults beat the higher ones.
233
- lower.each do |p, v| should[p] = v end
247
+ # FIXME This isn't a great test, but I need to move on.
248
+ def test_to_transbucket
249
+ bucket = mock("transbucket")
250
+ source = mock("source")
251
+ scope = mkscope
252
+ res = Parser::Resource.new :type => "mydefine", :title => "yay",
253
+ :source => source, :scope => scope
234
254
 
235
- otherres.adddefaults
236
255
 
237
- should.each do |p,v|
238
- assert_equal(v, otherres[p])
239
- end
256
+ result = res.to_trans
257
+ assert_equal("yay", result.name, "did not set bucket name correctly")
258
+ assert_equal("Mydefine", result.type, "did not set bucket type correctly")
240
259
  end
241
260
 
242
261
  def test_evaluate
243
- # Make a definition that we know will, um, do something
244
- @interp.newdefine "evaltest",
245
- :arguments => [%w{one}, ["two", stringobj("755")]],
246
- :code => resourcedef("file", "/tmp",
247
- "owner" => varref("one"), "mode" => varref("two"))
248
-
249
- res = Parser::Resource.new :type => "evaltest", :title => "yay",
250
- :source => @source, :scope => @scope,
251
- :params => paramify(@source, :one => "nobody")
252
-
253
- # Now try evaluating
254
- ret = nil
255
- assert_nothing_raised do
256
- ret = res.evaluate
257
- end
258
-
259
- # Make sure we can find our object now
260
- result = @scope.findresource("File[/tmp]")
261
-
262
- # Now make sure we got the code we expected.
263
- assert_instance_of(Puppet::Parser::Resource, result)
264
-
265
- assert_equal("file", result.type)
266
- assert_equal("/tmp", result.title)
267
- assert_equal("nobody", result["owner"])
268
- assert_equal("755", result["mode"])
269
-
270
- # And that we cannot find the old resource
271
- assert_nil(@scope.findresource("Evaltest[yay]"),
272
- "Evaluated resource was not deleted")
262
+ # First try the most common case, we're not a builtin type.
263
+ res = mkresource
264
+ ref = res.instance_variable_get("@ref")
265
+ type = mock("type")
266
+ ref.expects(:definedtype).returns(type)
267
+ res.expects(:finish)
268
+ res.scope = mock("scope")
269
+ config = mock("config")
270
+ res.scope.expects(:compile).returns(config)
271
+ config.expects(:delete_resource).with(res)
272
+
273
+ args = {:scope => res.scope, :resource => res}
274
+ type.expects(:evaluate).with(args)
275
+
276
+ res.evaluate
273
277
  end
274
278
 
275
- def test_addoverrides
276
- # First create an override for an object that doesn't yet exist
277
- over1 = mkresource :source => "sub1", :params => {:one => "yay"}
278
-
279
- assert_nothing_raised do
280
- @scope.setoverride(over1)
281
- end
282
-
283
- assert(over1.override, "Override was not marked so")
284
-
285
- # Now make the resource
286
- res = mkresource :source => "base", :params => {:one => "rah",
287
- :three => "foo"}
288
-
289
- # And add it to our scope
290
- @scope.setresource(res)
291
-
292
- # And make sure over1 has not yet taken affect
293
- assert_equal("foo", res[:three], "Lost value")
294
-
295
- # Now add an immediately binding override
296
- over2 = mkresource :source => "sub1", :params => {:three => "yay"}
297
-
298
- assert_nothing_raised do
299
- @scope.setoverride(over2)
300
- end
301
-
302
- # And make sure it worked
303
- assert_equal("yay", res[:three], "Override 2 was ignored")
304
-
305
- # Now add our late-binding override
306
- assert_nothing_raised do
307
- res.addoverrides
308
- end
309
-
310
- # And make sure they're still around
311
- assert_equal("yay", res[:one], "Override 1 lost")
312
- assert_equal("yay", res[:three], "Override 2 lost")
313
-
314
- # And finally, make sure that there are no remaining overrides
315
- assert_nothing_raised do
316
- res.addoverrides
317
- end
279
+ def test_add_overrides
280
+ # Try it with nil
281
+ res = mkresource
282
+ res.scope = mock('scope')
283
+ config = mock("config")
284
+ res.scope.expects(:compile).returns(config)
285
+ config.expects(:resource_overrides).with(res).returns(nil)
286
+ res.expects(:merge).never
287
+ res.send(:add_overrides)
288
+
289
+ # And an empty array
290
+ res = mkresource
291
+ res.scope = mock('scope')
292
+ config = mock("config")
293
+ res.scope.expects(:compile).returns(config)
294
+ config.expects(:resource_overrides).with(res).returns([])
295
+ res.expects(:merge).never
296
+ res.send(:add_overrides)
297
+
298
+ # And with some overrides
299
+ res = mkresource
300
+ res.scope = mock('scope')
301
+ config = mock("config")
302
+ res.scope.expects(:compile).returns(config)
303
+ returns = %w{a b}
304
+ config.expects(:resource_overrides).with(res).returns(returns)
305
+ res.expects(:merge).with("a")
306
+ res.expects(:merge).with("b")
307
+ res.send(:add_overrides)
308
+ assert(returns.empty?, "Did not clear overrides")
318
309
  end
319
310
 
320
311
  def test_proxymethods
321
312
  res = Parser::Resource.new :type => "evaltest", :title => "yay",
322
- :source => @source, :scope => @scope
313
+ :source => mock("source"), :scope => mkscope
323
314
 
324
- assert_equal("evaltest", res.type)
315
+ assert_equal("Evaltest", res.type)
325
316
  assert_equal("yay", res.title)
326
317
  assert_equal(false, res.builtin?)
327
318
  end
328
319
 
329
- def test_addmetaparams
330
- mkevaltest @interp
331
- res = Parser::Resource.new :type => "evaltest", :title => "yay",
332
- :source => @source, :scope => @scope,
333
- :params => paramify(@source, :tag => "yay")
334
-
335
- assert_nil(res[:schedule], "Got schedule already")
336
- assert_nothing_raised do
337
- res.addmetaparams
338
- end
339
- @scope.setvar("schedule", "daily")
340
-
341
- # This is so we can test that it won't override already-set metaparams
342
- @scope.setvar("tag", "funtest")
343
-
344
- assert_nothing_raised do
345
- res.addmetaparams
346
- end
347
-
348
- assert_equal("daily", res[:schedule], "Did not get metaparam")
349
- assert_equal("yay", res[:tag], "Overrode explicitly-set metaparam")
350
- assert_nil(res[:noop], "Got invalid metaparam")
351
- end
352
-
353
320
  def test_reference_conversion
354
321
  # First try it as a normal string
355
322
  ref = Parser::Resource::Reference.new(:type => "file", :title => "/tmp/ref1")
@@ -357,6 +324,7 @@ class TestResource < PuppetTest::TestCase
357
324
  # Now create an obj that uses it
358
325
  res = mkresource :type => "file", :title => "/tmp/resource",
359
326
  :params => {:require => ref}
327
+ res.scope = mkscope
360
328
 
361
329
  trans = nil
362
330
  assert_nothing_raised do
@@ -364,12 +332,13 @@ class TestResource < PuppetTest::TestCase
364
332
  end
365
333
 
366
334
  assert_instance_of(Array, trans["require"])
367
- assert_equal(["file", "/tmp/ref1"], trans["require"])
335
+ assert_equal(["File", "/tmp/ref1"], trans["require"])
368
336
 
369
337
  # Now try it when using an array of references.
370
338
  two = Parser::Resource::Reference.new(:type => "file", :title => "/tmp/ref2")
371
339
  res = mkresource :type => "file", :title => "/tmp/resource2",
372
340
  :params => {:require => [ref, two]}
341
+ res.scope = mkscope
373
342
 
374
343
  trans = nil
375
344
  assert_nothing_raised do
@@ -379,7 +348,7 @@ class TestResource < PuppetTest::TestCase
379
348
  assert_instance_of(Array, trans["require"][0])
380
349
  trans["require"].each do |val|
381
350
  assert_instance_of(Array, val)
382
- assert_equal("file", val[0])
351
+ assert_equal("File", val[0])
383
352
  assert(val[1] =~ /\/tmp\/ref[0-9]/,
384
353
  "Was %s instead of the file name" % val[1])
385
354
  end
@@ -391,63 +360,27 @@ class TestResource < PuppetTest::TestCase
391
360
  def test_components_are_not_builtin
392
361
  ref = Parser::Resource::Reference.new(:type => "component", :title => "yay")
393
362
 
394
- assert_nil(ref.builtintype, "Component was considered builtin")
395
- end
396
-
397
- # #472. Really, this still isn't the best behaviour, but at least
398
- # it's consistent with what we have elsewhere.
399
- def test_defaults_from_parent_classes
400
- # Make a parent class with some defaults in it
401
- @interp.newclass("base",
402
- :code => defaultobj("file", :owner => "root", :group => "root")
403
- )
404
-
405
- # Now a mid-level class with some different values
406
- @interp.newclass("middle", :parent => "base",
407
- :code => defaultobj("file", :owner => "bin", :mode => "755")
408
- )
409
-
410
- # Now a lower class with its own defaults plus a resource
411
- @interp.newclass("bottom", :parent => "middle",
412
- :code => AST::ASTArray.new(:children => [
413
- defaultobj("file", :owner => "adm", :recurse => "true"),
414
- resourcedef("file", "/tmp/yayness", {})
415
- ])
416
- )
417
-
418
- # Now evaluate the class.
419
- assert_nothing_raised("Failed to evaluate class tree") do
420
- @scope.evalclasses("bottom")
421
- end
422
-
423
- # Make sure our resource got created.
424
- res = @scope.findresource("File[/tmp/yayness]")
425
- assert_nothing_raised("Could not add defaults") do
426
- res.adddefaults
427
- end
428
- assert(res, "could not find resource")
429
- {:owner => "adm", :recurse => "true", :group => "root", :mode => "755"}.each do |param, value|
430
- assert_equal(value, res[param], "%s => %s did not inherit correctly" %
431
- [param, value])
432
- end
363
+ assert_nil(ref.builtintype, "Definition was considered builtin")
433
364
  end
434
365
 
435
366
  # The second part of #539 - make sure resources pass the arguments
436
367
  # correctly.
437
368
  def test_title_with_definitions
438
- define = @interp.newdefine "yayness",
369
+ parser = mkparser
370
+ define = parser.newdefine "yayness",
439
371
  :code => resourcedef("file", "/tmp",
440
372
  "owner" => varref("name"), "mode" => varref("title"))
441
373
 
442
- klass = @interp.findclass("", "")
374
+
375
+ klass = parser.findclass("", "")
443
376
  should = {:name => :owner, :title => :mode}
444
377
  [
445
378
  {:name => "one", :title => "two"},
446
379
  {:title => "three"},
447
380
  ].each do |hash|
448
- scope = mkscope :interp => @interp
381
+ config = mkcompile parser
449
382
  args = {:type => "yayness", :title => hash[:title],
450
- :source => klass, :scope => scope}
383
+ :source => klass, :scope => config.topscope}
451
384
  if hash[:name]
452
385
  args[:params] = {:name => hash[:name]}
453
386
  else
@@ -462,7 +395,7 @@ class TestResource < PuppetTest::TestCase
462
395
  res.evaluate
463
396
  end
464
397
 
465
- made = scope.findresource("File[/tmp]")
398
+ made = config.topscope.findresource("File[/tmp]")
466
399
  assert(made, "Did not create resource with %s" % hash.inspect)
467
400
  should.each do |orig, param|
468
401
  assert_equal(hash[orig] || hash[:title], made[param],
@@ -474,7 +407,7 @@ class TestResource < PuppetTest::TestCase
474
407
  # part of #629 -- the undef keyword. Make sure 'undef' params get skipped.
475
408
  def test_undef_and_to_hash
476
409
  res = mkresource :type => "file", :title => "/tmp/testing",
477
- :source => @source, :scope => @scope,
410
+ :source => mock("source"), :scope => mkscope,
478
411
  :params => {:owner => :undef, :mode => "755"}
479
412
 
480
413
  hash = nil
@@ -487,11 +420,14 @@ class TestResource < PuppetTest::TestCase
487
420
 
488
421
  # #643 - Make sure virtual defines result in virtual resources
489
422
  def test_virtual_defines
490
- define = @interp.newdefine("yayness",
423
+ parser = mkparser
424
+ define = parser.newdefine("yayness",
491
425
  :code => resourcedef("file", varref("name"),
492
426
  "mode" => "644"))
493
427
 
494
- res = mkresource :type => "yayness", :title => "foo", :params => {}
428
+ config = mkcompile(parser)
429
+
430
+ res = mkresource :type => "yayness", :title => "foo", :params => {}, :scope => config.topscope
495
431
  res.virtual = true
496
432
 
497
433
  result = nil
@@ -506,7 +442,7 @@ class TestResource < PuppetTest::TestCase
506
442
  assert(newres.virtual?, "Virtual defined resource generated non-virtual resources")
507
443
 
508
444
  # Now try it with exported resources
509
- res = mkresource :type => "yayness", :title => "bar", :params => {}
445
+ res = mkresource :type => "yayness", :title => "bar", :params => {}, :scope => config.topscope
510
446
  res.exported = true
511
447
 
512
448
  result = nil
@@ -521,6 +457,37 @@ class TestResource < PuppetTest::TestCase
521
457
  assert(newres.exported?, "Exported defined resource generated non-exported resources")
522
458
  assert(newres.virtual?, "Exported defined resource generated non-virtual resources")
523
459
  end
524
- end
525
460
 
526
- # $Id: resource.rb 2670 2007-07-10 15:31:19Z luke $
461
+ # Make sure tags behave appropriately.
462
+ def test_tags
463
+ scope_resource = stub 'scope_resource', :tags => %w{srone srtwo}
464
+ scope = stub 'scope', :resource => scope_resource
465
+ resource = Puppet::Parser::Resource.new(:type => "file", :title => "yay", :scope => scope, :source => mock('source'))
466
+
467
+ # Make sure we get the scope resource's tags, plus the type and title
468
+ %w{srone srtwo yay file}.each do |tag|
469
+ assert(resource.tags.include?(tag), "Did not tag resource with %s" % tag)
470
+ end
471
+
472
+ # make sure we can only set legal tags
473
+ ["an invalid tag", "-anotherinvalid", "bad*tag"].each do |tag|
474
+ assert_raise(Puppet::ParseError, "Tag #{tag} was considered valid") do
475
+ resource.tag tag
476
+ end
477
+ end
478
+
479
+ # make sure good tags make it through.
480
+ tags = %w{good-tag yaytag GoodTag another_tag a ab A}
481
+ tags.each do |tag|
482
+ assert_nothing_raised("Tag #{tag} was considered invalid") do
483
+ resource.tag tag
484
+ end
485
+ end
486
+
487
+ # make sure we get each of them.
488
+ ptags = resource.tags
489
+ tags.each do |tag|
490
+ assert(ptags.include?(tag.downcase), "missing #{tag}")
491
+ end
492
+ end
493
+ end