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
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Luke A. Kanies on 2007-07-8.
4
+ # Copyright (c) 2007. All rights reserved.
5
+
6
+ require File.dirname(__FILE__) + '/../../lib/puppettest'
7
+
8
+ require 'puppettest'
9
+ require 'puppettest/parsertesting'
10
+
11
+ class TestASTResource< Test::Unit::TestCase
12
+ include PuppetTest
13
+ include PuppetTest::ParserTesting
14
+ AST = Puppet::Parser::AST
15
+
16
+ def setup
17
+ super
18
+ @scope = mkscope
19
+ @parser = @scope.compile.parser
20
+ @scope.compile.send(:evaluate_main)
21
+ end
22
+
23
+ def newdef(type, title, params = nil)
24
+ params ||= AST::ASTArray.new(:children => [])
25
+ AST::Resource.new(:type => type, :title => AST::String.new(:value => title), :params => params)
26
+ end
27
+
28
+ # Related to #806, make sure resources always look up the full path to the resource.
29
+ def test_scoped_types
30
+ @parser.newdefine "one"
31
+ @parser.newdefine "one::two"
32
+ @parser.newdefine "three"
33
+ twoscope = @scope.newscope(:namespace => "one")
34
+ twoscope.resource = @scope.resource
35
+ assert(twoscope.finddefine("two"), "Could not find 'two' definition")
36
+ title = "title"
37
+
38
+ # First try a qualified type
39
+ assert_equal("One::Two", newdef("two", title).evaluate(:scope => twoscope)[0].type,
40
+ "Defined type was not made fully qualified")
41
+
42
+ # Then try a type that does not need to be qualified
43
+ assert_equal("One", newdef("one", title).evaluate(:scope => twoscope)[0].type,
44
+ "Unqualified defined type was not handled correctly")
45
+
46
+ # Then an unqualified type from within the one namespace
47
+ assert_equal("Three", newdef("three", title).evaluate(:scope => twoscope)[0].type,
48
+ "Defined type was not made fully qualified")
49
+
50
+ # Then a builtin type
51
+ assert_equal("File", newdef("file", title).evaluate(:scope => twoscope)[0].type,
52
+ "Builtin type was not handled correctly")
53
+
54
+ # Now try a type that does not exist, which should throw an error.
55
+ assert_raise(Puppet::ParseError, "Did not fail on a missing type in a resource reference") do
56
+ newdef("nosuchtype", title).evaluate(:scope => twoscope)
57
+ end
58
+ end
59
+ end
@@ -3,30 +3,30 @@
3
3
  # Created by Luke A. Kanies on 2007-07-8.
4
4
  # Copyright (c) 2007. All rights reserved.
5
5
 
6
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
+ require File.dirname(__FILE__) + '/../../lib/puppettest'
7
7
 
8
8
  require 'puppettest'
9
9
  require 'puppettest/parsertesting'
10
10
 
11
- class TestASTResourceRef < Test::Unit::TestCase
11
+ class TestASTResourceReference < Test::Unit::TestCase
12
12
  include PuppetTest
13
13
  include PuppetTest::ParserTesting
14
14
  AST = Puppet::Parser::AST
15
15
 
16
16
  def newref(type, title)
17
- AST::ResourceRef.new(:type => type, :title => AST::String.new(:value => title))
17
+ AST::ResourceReference.new(:type => type, :title => AST::String.new(:value => title))
18
18
  end
19
19
 
20
20
  def setup
21
21
  super
22
- @interp = mkinterp
23
- @scope = mkscope :interp => @interp
22
+ @scope = mkscope
23
+ @parser = @scope.compile.parser
24
24
  end
25
25
 
26
26
  def test_evaluate
27
- @interp.newdefine "one::two"
28
- @interp.newdefine "one-two"
29
- [%w{file /tmp/yay}, %w{one::two three}, %w{one-two three}].each do |type, title|
27
+ @parser.newdefine "one::two"
28
+ @parser.newdefine "one-two"
29
+ [%w{File /tmp/yay}, %w{One::Two three}, %w{One-two three}].each do |type, title|
30
30
  ref = newref(type, title)
31
31
 
32
32
  evaled = nil
@@ -39,29 +39,41 @@ class TestASTResourceRef < Test::Unit::TestCase
39
39
  end
40
40
  end
41
41
 
42
+ def test_finding_classes_for_reference
43
+ @parser.newclass "one"
44
+ ref = newref("Class", "one")
45
+ evaled = nil
46
+ assert_nothing_raised("Could not evaluate resource ref") do
47
+ evaled = ref.evaluate(:scope => @scope)
48
+ end
49
+
50
+ assert_equal("Class", evaled.type, "Did not set type to 'class'")
51
+ assert_equal("one", evaled.title, "Did not look up class corectly")
52
+ end
53
+
42
54
  # Related to #706, make sure resource references correctly translate to qualified types.
43
55
  def test_scoped_references
44
- @interp.newdefine "one"
45
- @interp.newdefine "one::two"
46
- @interp.newdefine "three"
47
- twoscope = @scope.newscope(:type => "one", :namespace => "one")
56
+ @parser.newdefine "one"
57
+ @parser.newdefine "one::two"
58
+ @parser.newdefine "three"
59
+ twoscope = @scope.newscope(:namespace => "one")
48
60
  assert(twoscope.finddefine("two"), "Could not find 'two' definition")
49
61
  title = "title"
50
62
 
51
63
  # First try a qualified type
52
- assert_equal("one::two", newref("two", title).evaluate(:scope => twoscope).type,
64
+ assert_equal("One::Two", newref("two", title).evaluate(:scope => twoscope).type,
53
65
  "Defined type was not made fully qualified")
54
66
 
55
67
  # Then try a type that does not need to be qualified
56
- assert_equal("one", newref("one", title).evaluate(:scope => twoscope).type,
68
+ assert_equal("One", newref("one", title).evaluate(:scope => twoscope).type,
57
69
  "Unqualified defined type was not handled correctly")
58
70
 
59
71
  # Then an unqualified type from within the one namespace
60
- assert_equal("three", newref("three", title).evaluate(:scope => twoscope).type,
72
+ assert_equal("Three", newref("three", title).evaluate(:scope => twoscope).type,
61
73
  "Defined type was not made fully qualified")
62
74
 
63
75
  # Then a builtin type
64
- assert_equal("file", newref("file", title).evaluate(:scope => twoscope).type,
76
+ assert_equal("File", newref("file", title).evaluate(:scope => twoscope).type,
65
77
  "Builtin type was not handled correctly")
66
78
 
67
79
  # Now try a type that does not exist, which should throw an error.
@@ -70,8 +82,8 @@ class TestASTResourceRef < Test::Unit::TestCase
70
82
  end
71
83
 
72
84
  # Now run the same tests, but with the classes
73
- @interp.newclass "four"
74
- @interp.newclass "one::five"
85
+ @parser.newclass "four"
86
+ @parser.newclass "one::five"
75
87
 
76
88
  # First try an unqualified type
77
89
  assert_equal("four", newref("class", "four").evaluate(:scope => twoscope).title,
@@ -91,5 +103,3 @@ class TestASTResourceRef < Test::Unit::TestCase
91
103
  end
92
104
  end
93
105
  end
94
-
95
- # $Id: resourceref.rb 2715 2007-07-19 19:23:56Z luke $
@@ -3,7 +3,7 @@
3
3
  # Created by Luke A. Kanies on 2006-12-22.
4
4
  # Copyright (c) 2006. All rights reserved.
5
5
 
6
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
+ require File.dirname(__FILE__) + '/../../lib/puppettest'
7
7
 
8
8
  require 'puppettest'
9
9
  require 'puppettest/parsertesting'
@@ -59,4 +59,3 @@ class TestSelector < Test::Unit::TestCase
59
59
  end
60
60
  end
61
61
 
62
- # $Id: selector.rb 2142 2007-02-01 00:58:11Z luke $
@@ -3,7 +3,7 @@
3
3
  # Created by Luke A. Kanies on 2007-0419.
4
4
  # Copyright (c) 2006. All rights reserved.
5
5
 
6
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
+ require File.dirname(__FILE__) + '/../../lib/puppettest'
7
7
 
8
8
  require 'puppettest'
9
9
  require 'puppettest/parsertesting'
@@ -28,4 +28,3 @@ class TestVariable < Test::Unit::TestCase
28
28
  end
29
29
  end
30
30
 
31
- # $Id: variable.rb 2393 2007-04-19 18:34:03Z luke $
@@ -0,0 +1,569 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../lib/puppettest'
4
+
5
+ require 'mocha'
6
+ require 'puppettest'
7
+ require 'puppettest/parsertesting'
8
+ require 'puppet/parser/compile'
9
+
10
+ # Test our compile object.
11
+ class TestCompile < Test::Unit::TestCase
12
+ include PuppetTest
13
+ include PuppetTest::ParserTesting
14
+
15
+ Compile = Puppet::Parser::Compile
16
+ Scope = Puppet::Parser::Scope
17
+ Node = Puppet::Network::Handler.handler(:node)
18
+ SimpleNode = Puppet::Node
19
+
20
+ def mknode(name = "foo")
21
+ @node = SimpleNode.new(name)
22
+ end
23
+
24
+ def mkparser
25
+ # This should mock an interpreter
26
+ @parser = stub 'parser', :version => "1.0", :nodes => {}
27
+ end
28
+
29
+ def mkcompile(options = {})
30
+ if node = options[:node]
31
+ options.delete(:node)
32
+ else
33
+ node = mknode
34
+ end
35
+ @compile = Compile.new(node, mkparser, options)
36
+ end
37
+
38
+ def test_initialize
39
+ compile = nil
40
+ node = stub 'node', :name => "foo"
41
+ parser = stub 'parser', :version => "1.0", :nodes => {}
42
+ assert_nothing_raised("Could not init compile with all required options") do
43
+ compile = Compile.new(node, parser)
44
+ end
45
+
46
+ assert_equal(node, compile.node, "Did not set node correctly")
47
+ assert_equal(parser, compile.parser, "Did not set parser correctly")
48
+
49
+ # We're not testing here whether we call initvars, because it's too difficult to
50
+ # mock.
51
+
52
+ # Now try it with some options
53
+ assert_nothing_raised("Could not init compile with extra options") do
54
+ compile = Compile.new(node, parser)
55
+ end
56
+
57
+ assert_equal(false, compile.ast_nodes?, "Did not set ast_nodes? correctly")
58
+ end
59
+
60
+ def test_initvars
61
+ compile = mkcompile
62
+ [:class_scopes, :resource_table, :exported_resources, :resource_overrides].each do |table|
63
+ assert_instance_of(Hash, compile.send(:instance_variable_get, "@#{table}"), "Did not set %s table correctly" % table)
64
+ end
65
+ assert_instance_of(Scope, compile.topscope, "Did not create a topscope")
66
+ graph = compile.instance_variable_get("@scope_graph")
67
+ assert_instance_of(GRATR::Digraph, graph, "Did not create scope graph")
68
+ assert(graph.vertex?(compile.topscope), "Did not add top scope as a vertex in the graph")
69
+ end
70
+
71
+ # Make sure we store and can retrieve references to classes and their scopes.
72
+ def test_class_set_and_class_scope
73
+ klass = mock 'ast_class'
74
+ klass.expects(:classname).returns("myname")
75
+
76
+ compile = mkcompile
77
+ compile.catalog.expects(:tag).with("myname")
78
+
79
+ assert_nothing_raised("Could not set class") do
80
+ compile.class_set "myname", "myscope"
81
+ end
82
+ # First try to retrieve it by name.
83
+ assert_equal("myscope", compile.class_scope("myname"), "Could not retrieve class scope by name")
84
+
85
+ # Then by object
86
+ assert_equal("myscope", compile.class_scope(klass), "Could not retrieve class scope by object")
87
+ end
88
+
89
+ def test_classlist
90
+ compile = mkcompile
91
+
92
+ compile.class_set "", "empty"
93
+ compile.class_set "one", "yep"
94
+ compile.class_set "two", "nope"
95
+
96
+ # Make sure our class list is correct
97
+ assert_equal(%w{one two}.sort, compile.classlist.sort, "Did not get correct class list")
98
+ end
99
+
100
+ # Make sure collections get added to our internal array
101
+ def test_add_collection
102
+ compile = mkcompile
103
+ assert_nothing_raised("Could not add collection") do
104
+ compile.add_collection "nope"
105
+ end
106
+ assert_equal(%w{nope}, compile.instance_variable_get("@collections"), "Did not add collection")
107
+ end
108
+
109
+ # Make sure we create a graph of scopes.
110
+ def test_newscope
111
+ compile = mkcompile
112
+ graph = compile.instance_variable_get("@scope_graph")
113
+ assert_instance_of(Scope, compile.topscope, "Did not create top scope")
114
+ assert_instance_of(GRATR::Digraph, graph, "Did not create graph")
115
+
116
+ assert(graph.vertex?(compile.topscope), "The top scope is not a vertex in the graph")
117
+
118
+ # Now that we've got the top scope, create a new, subscope
119
+ subscope = nil
120
+ assert_nothing_raised("Could not create subscope") do
121
+ subscope = compile.newscope(compile.topscope)
122
+ end
123
+ assert_instance_of(Scope, subscope, "Did not create subscope")
124
+ assert(graph.edge?(compile.topscope, subscope), "An edge between top scope and subscope was not added")
125
+
126
+ # Make sure a scope can find its parent.
127
+ assert(compile.parent(subscope), "Could not look up parent scope on compile")
128
+ assert_equal(compile.topscope.object_id, compile.parent(subscope).object_id, "Did not get correct parent scope from compile")
129
+ assert_equal(compile.topscope.object_id, subscope.parent.object_id, "Scope did not correctly retrieve its parent scope")
130
+
131
+ # Now create another, this time specifying options
132
+ another = nil
133
+ assert_nothing_raised("Could not create subscope") do
134
+ another = compile.newscope(subscope, :level => 5)
135
+ end
136
+ assert_equal(5, another.level, "did not set scope option correctly")
137
+ assert_instance_of(Scope, another, "Did not create second subscope")
138
+ assert(graph.edge?(subscope, another), "An edge between parent scope and second subscope was not added")
139
+
140
+ # Make sure it can find its parent.
141
+ assert(compile.parent(another), "Could not look up parent scope of second subscope on compile")
142
+ assert_equal(subscope.object_id, compile.parent(another).object_id, "Did not get correct parent scope of second subscope from compile")
143
+ assert_equal(subscope.object_id, another.parent.object_id, "Second subscope did not correctly retrieve its parent scope")
144
+
145
+ # And make sure both scopes show up in the right order in the search path
146
+ assert_equal([another.object_id, subscope.object_id, compile.topscope.object_id], another.scope_path.collect { |p| p.object_id },
147
+ "Did not get correct scope path")
148
+ end
149
+
150
+ # The heart of the action.
151
+ def test_compile
152
+ compile = mkcompile
153
+ [:set_node_parameters, :evaluate_main, :evaluate_ast_node, :evaluate_node_classes, :evaluate_generators, :fail_on_unevaluated, :finish].each do |method|
154
+ compile.expects(method)
155
+ end
156
+ assert_instance_of(Puppet::Node::Catalog, compile.compile, "Did not return the catalog")
157
+ end
158
+
159
+ # Test setting the node's parameters into the top scope.
160
+ def test_set_node_parameters
161
+ compile = mkcompile
162
+ @node.parameters = {"a" => "b", "c" => "d"}
163
+ scope = compile.topscope
164
+ @node.parameters.each do |param, value|
165
+ scope.expects(:setvar).with(param, value)
166
+ end
167
+
168
+ assert_nothing_raised("Could not call 'set_node_parameters'") do
169
+ compile.send(:set_node_parameters)
170
+ end
171
+ end
172
+
173
+ # Test that we can evaluate the main class, which is the one named "" in namespace
174
+ # "".
175
+ def test_evaluate_main
176
+ compile = mkcompile
177
+ main_class = mock 'main_class'
178
+ compile.topscope.expects(:source=).with(main_class)
179
+ @parser.expects(:findclass).with("", "").returns(main_class)
180
+
181
+ main_resource = mock 'main resource'
182
+ Puppet::Parser::Resource.expects(:new).with { |args| args[:title] == :main }.returns(main_resource)
183
+
184
+ main_resource.expects(:evaluate)
185
+
186
+ assert_nothing_raised("Could not call evaluate_main") do
187
+ compile.send(:evaluate_main)
188
+ end
189
+ end
190
+
191
+ def test_evaluate_node_classes
192
+ compile = mkcompile
193
+ @node.classes = %w{one two three four}
194
+ compile.expects(:evaluate_classes).with(%w{one two three four}, compile.topscope)
195
+ assert_nothing_raised("could not call evaluate_node_classes") do
196
+ compile.send(:evaluate_node_classes)
197
+ end
198
+ end
199
+
200
+ def test_evaluate_collections
201
+ compile = mkcompile
202
+
203
+ colls = []
204
+
205
+ # Make sure we return false when there's nothing there.
206
+ assert(! compile.send(:evaluate_collections), "Returned true when there were no collections")
207
+
208
+ # And when the collections fail to evaluate.
209
+ colls << mock("coll1-false")
210
+ colls << mock("coll2-false")
211
+ colls.each { |c| c.expects(:evaluate).returns(false) }
212
+
213
+ compile.instance_variable_set("@collections", colls)
214
+ assert(! compile.send(:evaluate_collections), "Returned true when collections both evaluated nothing")
215
+
216
+ # Now have one of the colls evaluate
217
+ colls.clear
218
+ colls << mock("coll1-one-true")
219
+ colls << mock("coll2-one-true")
220
+ colls[0].expects(:evaluate).returns(true)
221
+ colls[1].expects(:evaluate).returns(false)
222
+ assert(compile.send(:evaluate_collections), "Did not return true when one collection evaluated true")
223
+
224
+ # And have them both eval true
225
+ colls.clear
226
+ colls << mock("coll1-both-true")
227
+ colls << mock("coll2-both-true")
228
+ colls[0].expects(:evaluate).returns(true)
229
+ colls[1].expects(:evaluate).returns(true)
230
+ assert(compile.send(:evaluate_collections), "Did not return true when both collections evaluated true")
231
+ end
232
+
233
+ def test_unevaluated_resources
234
+ compile = mkcompile
235
+ resources = {}
236
+ compile.instance_variable_set("@resource_table", resources)
237
+
238
+ # First test it when the table is empty
239
+ assert_nil(compile.send(:unevaluated_resources), "Somehow found unevaluated resources in an empty table")
240
+
241
+ # Then add a builtin resources
242
+ resources["one"] = mock("builtin only")
243
+ resources["one"].expects(:builtin?).returns(true)
244
+ assert_nil(compile.send(:unevaluated_resources), "Considered a builtin resource unevaluated")
245
+
246
+ # And do both builtin and non-builtin but already evaluated
247
+ resources.clear
248
+ resources["one"] = mock("builtin (with eval)")
249
+ resources["one"].expects(:builtin?).returns(true)
250
+ resources["two"] = mock("evaled (with builtin)")
251
+ resources["two"].expects(:builtin?).returns(false)
252
+ resources["two"].expects(:evaluated?).returns(true)
253
+ assert_nil(compile.send(:unevaluated_resources), "Considered either a builtin or evaluated resource unevaluated")
254
+
255
+ # Now a single unevaluated resource.
256
+ resources.clear
257
+ resources["one"] = mock("unevaluated")
258
+ resources["one"].expects(:builtin?).returns(false)
259
+ resources["one"].expects(:evaluated?).returns(false)
260
+ assert_equal([resources["one"]], compile.send(:unevaluated_resources), "Did not find unevaluated resource")
261
+
262
+ # With two uneval'ed resources, and an eval'ed one thrown in
263
+ resources.clear
264
+ resources["one"] = mock("unevaluated one")
265
+ resources["one"].expects(:builtin?).returns(false)
266
+ resources["one"].expects(:evaluated?).returns(false)
267
+ resources["two"] = mock("unevaluated two")
268
+ resources["two"].expects(:builtin?).returns(false)
269
+ resources["two"].expects(:evaluated?).returns(false)
270
+ resources["three"] = mock("evaluated")
271
+ resources["three"].expects(:builtin?).returns(false)
272
+ resources["three"].expects(:evaluated?).returns(true)
273
+
274
+ result = compile.send(:unevaluated_resources)
275
+ %w{one two}.each do |name|
276
+ assert(result.include?(resources[name]), "Did not find %s in the unevaluated list" % name)
277
+ end
278
+ end
279
+
280
+ def test_evaluate_definitions
281
+ # First try the case where there's nothing to return
282
+ compile = mkcompile
283
+ compile.expects(:unevaluated_resources).returns(nil)
284
+
285
+ assert_nothing_raised("Could not test for unevaluated resources") do
286
+ assert(! compile.send(:evaluate_definitions), "evaluate_definitions returned true when no resources were evaluated")
287
+ end
288
+
289
+ # Now try it with resources left to evaluate
290
+ resources = []
291
+ res1 = mock("resource1")
292
+ res1.expects(:evaluate)
293
+ res2 = mock("resource2")
294
+ res2.expects(:evaluate)
295
+ resources << res1 << res2
296
+ compile = mkcompile
297
+ compile.expects(:unevaluated_resources).returns(resources)
298
+
299
+ assert_nothing_raised("Could not test for unevaluated resources") do
300
+ assert(compile.send(:evaluate_definitions), "evaluate_definitions returned false when resources were evaluated")
301
+ end
302
+ end
303
+
304
+ def test_evaluate_generators
305
+ # First try the case where we have nothing to do
306
+ compile = mkcompile
307
+ compile.expects(:evaluate_definitions).returns(false)
308
+ compile.expects(:evaluate_collections).returns(false)
309
+
310
+ assert_nothing_raised("Could not call :eval_iterate") do
311
+ compile.send(:evaluate_generators)
312
+ end
313
+
314
+ # FIXME I could not get this test to work, but the code is short
315
+ # enough that I'm ok with it.
316
+ # It's important that collections are evaluated before definitions,
317
+ # so make sure that's the case by verifying that collections get tested
318
+ # twice but definitions only once.
319
+ #compile = mkcompile
320
+ #compile.expects(:evaluate_collections).returns(true).returns(false)
321
+ #compile.expects(:evaluate_definitions).returns(false)
322
+ #compile.send(:eval_iterate)
323
+ end
324
+
325
+ def test_store
326
+ compile = mkcompile
327
+ Puppet.features.expects(:rails?).returns(true)
328
+ Puppet::Rails.expects(:connect)
329
+
330
+ node = mock 'node'
331
+ resource_table = mock 'resources'
332
+ resource_table.expects(:values).returns(:resources)
333
+ compile.instance_variable_set("@node", node)
334
+ compile.instance_variable_set("@resource_table", resource_table)
335
+ compile.expects(:store_to_active_record).with(node, :resources)
336
+ compile.send(:store)
337
+ end
338
+
339
+ def test_store_to_active_record
340
+ compile = mkcompile
341
+ node = mock 'node'
342
+ node.expects(:name).returns("myname")
343
+ Puppet::Rails::Host.stubs(:transaction).yields
344
+ Puppet::Rails::Host.expects(:store).with(node, :resources)
345
+ compile.send(:store_to_active_record, node, :resources)
346
+ end
347
+
348
+ # Make sure that 'finish' gets called on all of our resources.
349
+ def test_finish
350
+ compile = mkcompile
351
+ table = compile.instance_variable_get("@resource_table")
352
+
353
+ # Add a resource that does respond to :finish
354
+ yep = mock("finisher")
355
+ yep.expects(:respond_to?).with(:finish).returns(true)
356
+ yep.expects(:finish)
357
+ table["yep"] = yep
358
+
359
+ # And one that does not
360
+ dnf = mock("dnf")
361
+ dnf.expects(:respond_to?).with(:finish).returns(false)
362
+ table["dnf"] = dnf
363
+
364
+ compile.send(:finish)
365
+ end
366
+
367
+ def test_verify_uniqueness
368
+ compile = mkcompile
369
+
370
+ resources = compile.instance_variable_get("@resource_table")
371
+ resource = mock("noconflict")
372
+ resource.expects(:ref).returns("File[yay]")
373
+ assert_nothing_raised("Raised an exception when there should have been no conflict") do
374
+ compile.send(:verify_uniqueness, resource)
375
+ end
376
+
377
+ # Now try the case where our type is isomorphic
378
+ resources["thing"] = true
379
+
380
+ isoconflict = mock("isoconflict")
381
+ isoconflict.expects(:ref).returns("thing")
382
+ isoconflict.expects(:type).returns("testtype")
383
+ faketype = mock("faketype")
384
+ faketype.expects(:isomorphic?).returns(false)
385
+ faketype.expects(:name).returns("whatever")
386
+ Puppet::Type.expects(:type).with("testtype").returns(faketype)
387
+ assert_nothing_raised("Raised an exception when was a conflict in non-isomorphic types") do
388
+ compile.send(:verify_uniqueness, isoconflict)
389
+ end
390
+
391
+ # Now test for when we actually have an exception
392
+ initial = mock("initial")
393
+ resources["thing"] = initial
394
+ initial.expects(:file).returns(false)
395
+
396
+ conflict = mock("conflict")
397
+ conflict.expects(:ref).returns("thing").times(2)
398
+ conflict.expects(:type).returns("conflict")
399
+ conflict.expects(:file).returns(false)
400
+ conflict.expects(:line).returns(false)
401
+
402
+ faketype = mock("faketype")
403
+ faketype.expects(:isomorphic?).returns(true)
404
+ Puppet::Type.expects(:type).with("conflict").returns(faketype)
405
+ assert_raise(Puppet::ParseError, "Did not fail when two isomorphic resources conflicted") do
406
+ compile.send(:verify_uniqueness, conflict)
407
+ end
408
+ end
409
+
410
+ def test_store_resource
411
+ # Run once when there's no conflict
412
+ compile = mkcompile
413
+ table = compile.instance_variable_get("@resource_table")
414
+ resource = mock("resource")
415
+ resource.expects(:ref).returns("yay")
416
+ compile.expects(:verify_uniqueness).with(resource)
417
+ scope = stub("scope", :resource => mock('resource'))
418
+
419
+ compile.catalog.expects(:add_edge!).with(scope.resource, resource)
420
+
421
+ assert_nothing_raised("Could not store resource") do
422
+ compile.store_resource(scope, resource)
423
+ end
424
+ assert_equal(resource, table["yay"], "Did not store resource in table")
425
+
426
+ # Now for conflicts
427
+ compile = mkcompile
428
+ table = compile.instance_variable_get("@resource_table")
429
+ resource = mock("resource")
430
+ compile.expects(:verify_uniqueness).with(resource).raises(ArgumentError)
431
+
432
+ assert_raise(ArgumentError, "Did not raise uniqueness exception") do
433
+ compile.store_resource(scope, resource)
434
+ end
435
+ assert(table.empty?, "Conflicting resource was stored in table")
436
+ end
437
+
438
+ def test_fail_on_unevaluated
439
+ compile = mkcompile
440
+ compile.expects(:fail_on_unevaluated_overrides)
441
+ compile.expects(:fail_on_unevaluated_resource_collections)
442
+ compile.send :fail_on_unevaluated
443
+ end
444
+
445
+ def test_store_override
446
+ # First test the case when the resource is not present.
447
+ compile = mkcompile
448
+ overrides = compile.instance_variable_get("@resource_overrides")
449
+ override = Object.new
450
+ override.expects(:ref).returns(:myref).times(2)
451
+ override.expects(:override=).with(true)
452
+
453
+ assert_nothing_raised("Could not call store_override") do
454
+ compile.store_override(override)
455
+ end
456
+ assert_instance_of(Array, overrides[:myref], "Overrides table is not a hash of arrays")
457
+ assert_equal(override, overrides[:myref][0], "Did not store override in appropriately named array")
458
+
459
+ # And when the resource already exists.
460
+ resource = mock 'resource'
461
+ resources = compile.instance_variable_get("@resource_table")
462
+ resources[:resref] = resource
463
+
464
+ override = mock 'override'
465
+ resource.expects(:merge).with(override)
466
+ override.expects(:override=).with(true)
467
+ override.expects(:ref).returns(:resref)
468
+ assert_nothing_raised("Could not call store_override when the resource already exists.") do
469
+ compile.store_override(override)
470
+ end
471
+ end
472
+
473
+ def test_resource_overrides
474
+ compile = mkcompile
475
+ overrides = compile.instance_variable_get("@resource_overrides")
476
+ overrides[:test] = :yay
477
+ resource = mock 'resource'
478
+ resource.expects(:ref).returns(:test)
479
+
480
+ assert_equal(:yay, compile.resource_overrides(resource), "Did not return overrides from table")
481
+ end
482
+
483
+ def test_fail_on_unevaluated_resource_collections
484
+ compile = mkcompile
485
+ collections = compile.instance_variable_get("@collections")
486
+
487
+ # Make sure we're fine when the list is empty
488
+ assert_nothing_raised("Failed when no collections were present") do
489
+ compile.send :fail_on_unevaluated_resource_collections
490
+ end
491
+
492
+ # And that we're fine when we've got collections but with no resources
493
+ collections << mock('coll')
494
+ collections[0].expects(:resources).returns(nil)
495
+ assert_nothing_raised("Failed when no resource collections were present") do
496
+ compile.send :fail_on_unevaluated_resource_collections
497
+ end
498
+
499
+ # But that we do fail when we've got resource collections left.
500
+ collections.clear
501
+
502
+ # return both an array and a string, because that's tested internally
503
+ collections << mock('coll returns one')
504
+ collections[0].expects(:resources).returns(:something)
505
+
506
+ collections << mock('coll returns many')
507
+ collections[1].expects(:resources).returns([:one, :two])
508
+
509
+ assert_raise(Puppet::ParseError, "Did not fail on unevaluated resource collections") do
510
+ compile.send :fail_on_unevaluated_resource_collections
511
+ end
512
+ end
513
+
514
+ def test_fail_on_unevaluated_overrides
515
+ compile = mkcompile
516
+ overrides = compile.instance_variable_get("@resource_overrides")
517
+
518
+ # Make sure we're fine when the list is empty
519
+ assert_nothing_raised("Failed when no collections were present") do
520
+ compile.send :fail_on_unevaluated_overrides
521
+ end
522
+
523
+ # But that we fail if there are any overrides left in the table.
524
+ overrides[:yay] = []
525
+ overrides[:foo] = []
526
+ overrides[:bar] = [mock("override")]
527
+ overrides[:bar][0].expects(:ref).returns("yay")
528
+ assert_raise(Puppet::ParseError, "Failed to fail when overrides remain") do
529
+ compile.send :fail_on_unevaluated_overrides
530
+ end
531
+ end
532
+
533
+ def test_find_resource
534
+ compile = mkcompile
535
+ resources = compile.instance_variable_get("@resource_table")
536
+
537
+ assert_nothing_raised("Could not call findresource when the resource table was empty") do
538
+ assert_nil(compile.findresource("yay", "foo"), "Returned a non-existent resource")
539
+ assert_nil(compile.findresource("yay[foo]"), "Returned a non-existent resource")
540
+ end
541
+
542
+ resources["Foo[bar]"] = :yay
543
+ assert_nothing_raised("Could not call findresource when the resource table was not empty") do
544
+ assert_equal(:yay, compile.findresource("foo", "bar"), "Returned a non-existent resource")
545
+ assert_equal(:yay, compile.findresource("Foo[bar]"), "Returned a non-existent resource")
546
+ end
547
+ end
548
+
549
+ # #620 - Nodes and classes should conflict, else classes don't get evaluated
550
+ def test_nodes_and_classes_name_conflict
551
+ # Test node then class
552
+ compile = mkcompile
553
+ node = stub :nodescope? => true
554
+ klass = stub :nodescope? => false
555
+ compile.class_set("one", node)
556
+ assert_raise(Puppet::ParseError, "Did not fail when replacing node with class") do
557
+ compile.class_set("one", klass)
558
+ end
559
+
560
+ # and class then node
561
+ compile = mkcompile
562
+ node = stub :nodescope? => true
563
+ klass = stub :nodescope? => false
564
+ compile.class_set("two", klass)
565
+ assert_raise(Puppet::ParseError, "Did not fail when replacing node with class") do
566
+ compile.class_set("two", node)
567
+ end
568
+ end
569
+ end