puppet 0.18.4 → 0.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -1,17 +1,11 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
- require 'puppet'
8
- require 'puppet/server'
9
- require 'puppet/sslcertificates'
10
- require 'test/unit'
11
- require 'puppettest.rb'
5
+ require 'puppettest'
12
6
 
13
7
  class TestPuppetBin < Test::Unit::TestCase
14
- include ExeTest
8
+ include PuppetTest::ExeTest
15
9
  def test_version
16
10
  output = nil
17
11
  assert_nothing_raised {
@@ -67,6 +61,28 @@ class TestPuppetBin < Test::Unit::TestCase
67
61
 
68
62
  assert(FileTest.exists?(path), "Failed to create config'ed file")
69
63
  end
64
+
65
+ def test_stdin_execution
66
+ path = tempfile()
67
+ manifest = tempfile()
68
+ env = %x{which env}.chomp
69
+ if env == ""
70
+ Puppet.info "cannot find env; cannot test stdin_execution"
71
+ return
72
+ end
73
+ File.open(manifest, "w") do |f|
74
+ f.puts "#!#{env} puppet
75
+ file { '#{path}': ensure => file }"
76
+ end
77
+ File.chmod(0755, manifest)
78
+
79
+ assert_nothing_raised {
80
+ out = %x{#{manifest} 2>&1}
81
+ }
82
+ assert($? == 0, "manifest exited with code %s" % $?.to_i)
83
+
84
+ assert(FileTest.exists?(path), "Failed to create config'ed file")
85
+ end
70
86
  end
71
87
 
72
- # $Id: puppetbin.rb 1256 2006-06-13 15:57:06Z luke $
88
+ # $Id: puppetbin.rb 2259 2007-03-06 19:03:05Z luke $
@@ -1,17 +1,21 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
- require 'puppet'
8
- require 'puppet/server'
9
- require 'puppet/sslcertificates'
10
- require 'test/unit'
11
- require 'puppettest.rb'
5
+ require 'puppettest'
12
6
 
13
7
  class TestPuppetCA < Test::Unit::TestCase
14
- include ExeTest
8
+ include PuppetTest::ExeTest
9
+
10
+ def gen_cert(ca, host)
11
+ runca("-g #{host}")
12
+ ca.getclientcert(host)[0]
13
+ end
14
+
15
+ def mkca
16
+ Puppet::Network::Handler.ca.new()
17
+ end
18
+
15
19
  def mkcert(hostname)
16
20
  cert = nil
17
21
  assert_nothing_raised {
@@ -30,60 +34,77 @@ class TestPuppetCA < Test::Unit::TestCase
30
34
  debug = "-d "
31
35
  end
32
36
  return %x{puppetca --user=#{Puppet[:user]} #{debug} --group=#{Puppet[:group]} --confdir=#{Puppet[:confdir]} --vardir=#{Puppet[:vardir]} #{args} 2>&1}
33
-
34
37
  end
35
38
 
36
39
  def test_signing
37
- ca = nil
40
+ ca = mkca
38
41
  Puppet[:autosign] = false
39
- assert_nothing_raised {
40
- ca = Puppet::Server::CA.new()
41
- }
42
- #Puppet.warning "SSLDir is %s" % Puppet[:confdir]
43
- #system("find %s" % Puppet[:confdir])
44
-
45
- cert = mkcert("host.test.com")
46
- resp = nil
47
- assert_nothing_raised {
48
- # We need to use a fake name so it doesn't think the cert is from
49
- # itself.
50
- resp = ca.getcert(cert.csr.to_pem, "fakename", "127.0.0.1")
51
- }
52
- assert_equal(["",""], resp)
53
- #Puppet.warning "SSLDir is %s" % Puppet[:confdir]
54
- #system("find %s" % Puppet[:confdir])
42
+
43
+ %w{host.test.com Other.Testing.Com}.each do |host|
44
+ cert = mkcert(host)
45
+ resp = nil
46
+ assert_nothing_raised {
47
+ # We need to use a fake name so it doesn't think the cert is from
48
+ # itself. Strangely, getcert stores the csr, because it's a server-side
49
+ # method, not client.
50
+ resp = ca.getcert(cert.csr.to_pem, host, "127.0.0.1")
51
+ }
52
+ assert_equal(["",""], resp)
55
53
 
56
- output = nil
57
- assert_nothing_raised {
58
- output = runca("--list").chomp.split("\n").reject { |line| line =~ /warning:/ } # stupid ssl.rb
59
- }
60
- #Puppet.warning "SSLDir is %s" % Puppet[:confdir]
61
- #system("find %s" % Puppet[:confdir])
62
- assert_equal($?,0)
63
- assert_equal(%w{host.test.com}, output)
64
- assert_nothing_raised {
65
- output = runca("--sign -a").chomp.split("\n")
66
- }
54
+ output = nil
55
+ assert_nothing_raised {
56
+ output = runca("--list").chomp.split("\n").reject { |line| line =~ /warning:/ } # stupid ssl.rb
57
+ }
58
+ assert_equal($?,0)
59
+ assert_equal([host.downcase], output)
60
+ assert_nothing_raised {
61
+ output = runca("--sign -a").chomp.split("\n")
62
+ }
67
63
 
68
64
 
69
- assert_equal($?,0)
70
- assert_equal(["Signed host.test.com"], output)
65
+ assert_equal($?,0)
66
+ assert_equal(["Signed #{host.downcase}"], output)
71
67
 
72
- signedfile = File.join(Puppet[:signeddir], "host.test.com.pem")
73
- assert(FileTest.exists?(signedfile), "cert does not exist")
74
- assert(! FileTest.executable?(signedfile), "cert is executable")
68
+
69
+ signedfile = ca.ca.host2certfile(host)
70
+ assert(FileTest.exists?(signedfile), "cert does not exist")
71
+ assert(! FileTest.executable?(signedfile), "cert is executable")
75
72
 
76
- uid = Puppet::Util.uid(Puppet[:user])
73
+ uid = Puppet::Util.uid(Puppet[:user])
77
74
 
78
- if Process.uid == 0
79
- assert(! FileTest.owned?(signedfile), "cert is owned by root")
75
+ if Puppet::Util::SUIDManager.uid == 0
76
+ assert(! FileTest.owned?(signedfile), "cert is owned by root")
77
+ end
78
+ assert_nothing_raised {
79
+ output = runca("--list").chomp.split("\n")
80
+ }
81
+ assert_equal($?,0)
82
+ assert_equal(["No certificates to sign"], output)
80
83
  end
81
- assert_nothing_raised {
82
- output = runca("--list").chomp.split("\n")
83
- }
84
- assert_equal($?,0)
85
- assert_equal(["No certificates to sign"], output)
84
+ end
85
+
86
+ # This method takes a long time to run because of all of the external
87
+ # executable calls.
88
+ def test_revocation
89
+ ca = Puppet::SSLCertificates::CA.new()
90
+ host1 = gen_cert(ca, "host1.example.com")
91
+ host2 = gen_cert(ca, "host2.example.com")
92
+ host3 = gen_cert(ca, "host3.example.com")
93
+ runca("-r host1.example.com")
94
+ runca("-r #{host2.serial}")
95
+ runca("-r 0x#{host3.serial.to_s(16)}")
96
+ runca("-r 0xff")
97
+
98
+ # Recreate CA to force reading of CRL
99
+ ca = Puppet::SSLCertificates::CA.new()
100
+ crl = ca.crl
101
+ revoked = crl.revoked.collect { |r| r.serial }
102
+ exp = [host1.serial, host2.serial, host3.serial, 255]
103
+ assert_equal(exp, revoked)
104
+ end
105
+
106
+ def test_case_insensitive_sign
86
107
  end
87
108
  end
88
109
 
89
- # $Id: puppetca.rb 1256 2006-06-13 15:57:06Z luke $
110
+ # $Id: puppetca.rb 2259 2007-03-06 19:03:05Z luke $
@@ -1,34 +1,31 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
- require 'puppet/server'
9
- require 'test/unit'
10
- require 'puppettest.rb'
6
+ require 'puppet/network/client'
7
+ require 'puppettest'
11
8
  require 'socket'
12
9
  require 'facter'
13
10
 
14
11
  class TestPuppetDExe < Test::Unit::TestCase
15
- include ExeTest
12
+ include PuppetTest::ExeTest
16
13
  def test_normalstart
17
14
  # start the master
18
15
  file = startmasterd
19
16
 
20
17
  # create the client
21
- client = Puppet::Client::MasterClient.new(:Server => "localhost", :Port => @@port)
18
+ client = Puppet::Network::Client.master.new(:Server => "localhost", :Port => @@port)
22
19
 
23
20
  # make a new fqdn
24
- fqdn = client.fqdn.sub(/^\w+\./, "testing.")
21
+ fqdn = Puppet[:certname].sub(/^\w+\./, "testing.")
25
22
 
26
23
  cmd = "puppetd"
27
24
  cmd += " --verbose"
28
25
  cmd += " --onetime"
29
- #cmd += " --fqdn %s" % fqdn
30
26
  cmd += " --masterport %s" % @@port
31
27
  cmd += " --confdir %s" % Puppet[:confdir]
28
+ cmd += " --rundir %s" % File.join(Puppet[:vardir], "run")
32
29
  cmd += " --vardir %s" % Puppet[:vardir]
33
30
  cmd += " --server localhost"
34
31
 
@@ -59,4 +56,4 @@ class TestPuppetDExe < Test::Unit::TestCase
59
56
  end
60
57
  end
61
58
 
62
- # $Id: puppetd.rb 1256 2006-06-13 15:57:06Z luke $
59
+ # $Id: puppetd.rb 2259 2007-03-06 19:03:05Z luke $
@@ -1,19 +1,14 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
- require 'puppet/server'
9
- require 'puppet/daemon'
10
- require 'test/unit'
11
- require 'puppettest.rb'
6
+ require 'puppet/network/client'
7
+ require 'puppettest'
12
8
  require 'socket'
13
- require 'facter'
14
9
 
15
10
  class TestPuppetMasterD < Test::Unit::TestCase
16
- include ExeTest
11
+ include PuppetTest::ExeTest
17
12
  def getcerts
18
13
  include Puppet::Daemon
19
14
  if self.readcerts
@@ -38,7 +33,7 @@ class TestPuppetMasterD < Test::Unit::TestCase
38
33
 
39
34
  client = nil
40
35
  assert_nothing_raised() {
41
- client = Puppet::Client::StatusClient.new(
36
+ client = Puppet::Network::Client.status.new(
42
37
  :Server => "localhost",
43
38
  :Port => @@port
44
39
  )
@@ -50,14 +45,14 @@ class TestPuppetMasterD < Test::Unit::TestCase
50
45
 
51
46
  FileUtils.mkdir_p(File.dirname(Puppet[:autosign]))
52
47
  File.open(Puppet[:autosign], "w") { |f|
53
- f.puts client.fqdn
48
+ f.puts Puppet[:certname]
54
49
  }
55
50
 
56
51
  retval = nil
57
52
 
58
53
  # init the client certs
59
54
  assert_nothing_raised() {
60
- client.initcerts
55
+ client.cert
61
56
  }
62
57
 
63
58
  # call status
@@ -68,7 +63,7 @@ class TestPuppetMasterD < Test::Unit::TestCase
68
63
 
69
64
  # this client shoulduse the same certs
70
65
  assert_nothing_raised() {
71
- client = Puppet::Client::MasterClient.new(
66
+ client = Puppet::Network::Client.master.new(
72
67
  :Server => "localhost",
73
68
  :Port => @@port
74
69
  )
@@ -101,7 +96,7 @@ class TestPuppetMasterD < Test::Unit::TestCase
101
96
  end
102
97
 
103
98
  def disabled_test_sslconnection
104
- #file = File.join($puppetbase, "examples", "code", "head")
99
+ #file = File.join(exampledir, "code", "head")
105
100
  #startmasterd("--manifest #{file}")
106
101
 
107
102
  #assert_nothing_raised {
@@ -145,4 +140,4 @@ class TestPuppetMasterD < Test::Unit::TestCase
145
140
  end
146
141
  end
147
142
 
148
- # $Id: puppetmasterd.rb 1304 2006-06-20 18:10:06Z luke $
143
+ # $Id: puppetmasterd.rb 2259 2007-03-06 19:03:05Z luke $
@@ -1,22 +1,20 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
6
2
 
7
- require 'puppet'
8
- require 'puppet/server'
9
- require 'puppet/sslcertificates'
10
- require 'test/unit'
11
- require 'puppettest.rb'
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
12
4
 
13
- $module = File.join($puppetbase, "ext", "module_puppet")
5
+ require 'puppettest'
14
6
 
15
7
  class TestPuppetModule < Test::Unit::TestCase
16
- include ExeTest
8
+ include PuppetTest::ExeTest
9
+
10
+
11
+ def setup
12
+ super
13
+ @module = File.join(basedir, "ext", "module_puppet")
14
+ end
17
15
 
18
16
  def test_existence
19
- assert(FileTest.exists?($module), "Module does not exist")
17
+ assert(FileTest.exists?(@module), "Module does not exist")
20
18
  end
21
19
 
22
20
  def test_execution
@@ -29,7 +27,7 @@ class TestPuppetModule < Test::Unit::TestCase
29
27
  }
30
28
 
31
29
  output = nil
32
- cmd = $module
30
+ cmd = @module
33
31
  cmd += " --verbose"
34
32
  #cmd += " --fqdn %s" % fqdn
35
33
  cmd += " --confdir %s" % Puppet[:confdir]
@@ -37,19 +35,22 @@ class TestPuppetModule < Test::Unit::TestCase
37
35
  if Puppet[:debug]
38
36
  cmd += " --logdest %s" % "console"
39
37
  cmd += " --debug"
38
+ cmd += " --trace"
40
39
  else
41
40
  cmd += " --logdest %s" % "/dev/null"
42
41
  end
43
42
 
44
43
  ENV["CFALLCLASSES"] = "yaytest:all"
44
+ libsetup
45
45
 
46
+ out = nil
46
47
  assert_nothing_raised {
47
- %x{#{cmd + " " + file} 2>&1}
48
+ out = %x{#{cmd + " " + file} 2>&1}
48
49
  }
49
- assert($? == 0, "Puppet module exited with code %s" % $?.to_i)
50
+ assert($? == 0, "Puppet module exited with code %s: %s" % [$?.to_i, out])
50
51
 
51
52
  assert(FileTest.exists?(createdfile), "Failed to create config'ed file")
52
53
  end
53
54
  end
54
55
 
55
- # $Id: puppetmodule.rb 1256 2006-06-13 15:57:06Z luke $
56
+ # $Id: puppetmodule.rb 2259 2007-03-06 19:03:05Z luke $
@@ -1,893 +1,337 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
2
 
3
- if __FILE__ == $0
4
- $:.unshift '../../lib'
5
- $:.unshift '..'
6
- $puppetbase = "../.."
7
- end
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
8
4
 
9
5
  require 'puppet'
6
+ require 'puppet/rails'
10
7
  require 'puppet/parser/interpreter'
11
8
  require 'puppet/parser/parser'
12
- require 'puppet/client'
13
- require 'test/unit'
9
+ require 'puppet/network/client'
14
10
  require 'puppettest'
11
+ require 'puppettest/resourcetesting'
12
+ require 'puppettest/parsertesting'
13
+ require 'puppettest/railstesting'
15
14
 
16
15
  class TestAST < Test::Unit::TestCase
17
- include ParserTesting
18
-
19
- # Test that classes behave like singletons
20
- def test_classsingleton
21
- parent = child1 = child2 = nil
22
- children = []
23
-
24
- # create the parent class
25
- children << classobj("parent")
26
-
27
- # Create child class one
28
- children << classobj("child1", :parentclass => nameobj("parent"))
29
-
30
- # Create child class two
31
- children << classobj("child2", :parentclass => nameobj("parent"))
32
- classes = %w{parent child1 child2}
33
-
34
- # Now call the two classes
35
- assert_nothing_raised("Could not add AST nodes for calling") {
36
- children << AST::ObjectDef.new(
37
- :type => nameobj("child1"),
38
- :name => nameobj("yayness"),
39
- :params => astarray()
40
- )
41
- children << AST::ObjectDef.new(
42
- :type => nameobj("child2"),
43
- :name => nameobj("booness"),
44
- :params => astarray()
45
- )
46
- }
47
-
48
- top = nil
49
- assert_nothing_raised("Could not create top object") {
50
- top = AST::ASTArray.new(
51
- :children => children
52
- )
53
- }
54
-
55
- scope = nil
56
- objects = nil
57
- assert_nothing_raised("Could not evaluate") {
58
- scope = Puppet::Parser::Scope.new()
59
- objects = scope.evaluate(:ast => top)
60
- }
61
-
62
- assert_instance_of(Puppet::TransBucket, objects)
63
-
64
- assert_equal(1, scope.find_all { |child|
65
- if child.is_a? Puppet::Parser::Scope
66
- child.lookupobject(:name => "/parent", :type => "file")
16
+ include PuppetTest::RailsTesting
17
+ include PuppetTest::ParserTesting
18
+ include PuppetTest::ResourceTesting
19
+
20
+ if defined? ActiveRecord
21
+ # Verify that our collection stuff works.
22
+ def test_collection
23
+ collectable = []
24
+ non = []
25
+ # First put some objects into the database.
26
+ bucket = mk_transtree do |object, depth, width|
27
+ # and mark some of them collectable
28
+ if width % 2 == 1
29
+ object.collectable = true
30
+ collectable << object
67
31
  else
68
- nil
69
- end
70
- }.length, "Found incorrect number of '/parent' objects")
71
-
72
- assert_equal(classes.sort, scope.classlist.sort)
73
- end
74
-
75
- # Test that 'tagobject' collects all of an object's parameters and stores
76
- # them in one TransObject, rather than many. This is probably a bad idea.
77
- def test_tagobject
78
- top = nil
79
- children = [
80
- fileobj("/etc", "owner" => "root"),
81
- fileobj("/etc", "group" => "root")
82
- ]
83
- assert_nothing_raised("Could not create top object") {
84
- top = AST::ASTArray.new(
85
- :children => children
86
- )
87
- }
88
-
89
- scope = Puppet::Parser::Scope.new()
90
- assert_nothing_raised("Could not evaluate") {
91
- top.evaluate(:scope => scope)
92
- }
93
-
94
- obj = nil
95
- assert_nothing_raised("Could not retrieve file object") {
96
- obj = scope.lookupobject(:name => "/etc", :type => "file")
97
- }
98
-
99
- assert(obj, "could not retrieve file object")
100
-
101
- %w{owner group}.each { |param|
102
- assert(obj.include?(param), "Object did not include %s" % param)
103
- }
104
-
105
- end
106
-
107
- # Verify that objects can only have parents of the same type.
108
- def test_validparent
109
- parent = child1 = nil
110
- children = []
111
-
112
- # create the parent class
113
- children << compobj("parent", :args => AST::ASTArray.new(:children => []))
114
-
115
- # Create child class one
116
- children << classobj("child1", :parentclass => nameobj("parent"))
117
-
118
- # Now call the two classes
119
- assert_nothing_raised("Could not add AST nodes for calling") {
120
- children << AST::ObjectDef.new(
121
- :type => nameobj("child1"),
122
- :name => nameobj("yayness"),
123
- :params => astarray()
124
- )
125
- }
126
-
127
- top = nil
128
- assert_nothing_raised("Could not create top object") {
129
- top = AST::ASTArray.new(
130
- :children => children
131
- )
132
- }
133
-
134
- scope = nil
135
- assert_raise(Puppet::ParseError, "Invalid parent type was allowed") {
136
- scope = Puppet::Parser::Scope.new()
137
- objects = scope.evaluate(:ast => top)
138
- }
139
- end
140
-
141
- # Verify that nodes don't evaluate code in other node scopes but that their
142
- # facts work outside their scopes.
143
- def test_nodescopes
144
- parent = child1 = nil
145
- topchildren = []
146
-
147
- # create the parent class
148
- topchildren << classobj("everyone")
149
-
150
- topchildren << classobj("parent")
151
-
152
-
153
- classes = %w{everyone parent}
154
-
155
- # And a variable, so we verify the facts get set at the top
156
- assert_nothing_raised {
157
- children = []
158
- children << varobj("yaytest", "$hostname")
159
- }
160
-
161
- nodes = []
162
-
163
- 3.times do |i|
164
- children = []
165
-
166
- # Create a child class
167
- topchildren << classobj("perchild#{i}", :parentclass => nameobj("parent"))
168
- classes << "perchild%s"
169
-
170
- # Create a child class
171
- children << classobj("child", :parentclass => nameobj("parent"))
172
-
173
- classes << "child"
174
-
175
- ["child", "everyone", "perchild#{i}"].each do |name|
176
- # Now call our child class
177
- assert_nothing_raised {
178
- children << AST::ObjectDef.new(
179
- :type => nameobj(name),
180
- :params => astarray()
181
- )
182
- }
183
- end
184
-
185
- # and another variable
186
- assert_nothing_raised {
187
- children << varobj("rahtest", "$hostname")
188
- }
189
-
190
- # create the node
191
- nodename = "node#{i}"
192
- nodes << nodename
193
- assert_nothing_raised("Could not create parent object") {
194
- topchildren << AST::NodeDef.new(
195
- :names => nameobj(nodename),
196
- :code => AST::ASTArray.new(
197
- :children => children
198
- )
199
- )
200
- }
201
- end
202
-
203
- # Create the wrapper object
204
- top = nil
205
- assert_nothing_raised("Could not create top object") {
206
- top = AST::ASTArray.new(
207
- :children => topchildren
208
- )
209
- }
210
-
211
- nodes.each_with_index do |node, i|
212
- # Evaluate the parse tree
213
- scope = Puppet::Parser::Scope.new()
214
- args = {:names => [node], :facts => {"hostname" => node}, :ast => top}
215
-
216
- # verify that we can evaluate it okay
217
- trans = nil
218
- assert_nothing_raised("Could not retrieve node definition") {
219
- trans = scope.evaluate(args)
220
- }
221
-
222
- assert_equal(node, scope.lookupvar("hostname"))
223
-
224
- assert(trans, "Could not retrieve trans objects")
225
-
226
- # and that we can convert them to type objects
227
- objects = nil
228
- assert_nothing_raised("Could not retrieve node definition") {
229
- objects = trans.to_type
230
- }
231
-
232
- assert(objects, "Could not retrieve trans objects")
233
-
234
- count = 0
235
- # Make sure the node name gets into the path correctly.
236
- Puppet.type(:file).each { |obj|
237
- count += 1
238
- assert(obj.path !~ /#{node}\[#{node}\]/,
239
- "Node name appears twice")
240
- }
241
-
242
- assert(count > 0, "Did not create any files")
243
-
244
- classes.each do |name|
245
- if name =~ /%s/
246
- name = name % i
247
- end
248
- assert(Puppet::Type.type(:file)["/#{name}"], "Could not find '#{name}'")
32
+ non << object
249
33
  end
250
- Puppet::Type.allclear
251
34
  end
252
- end
253
-
254
- # Verify that classes are correctly defined in node scopes.
255
- def disabled_test_nodeclasslookup
256
- parent = child1 = nil
257
- children = []
258
-
259
- # create the parent class
260
- children << classobj("parent")
261
-
262
- # Create child class one
263
- children << classobj("child1", :parentclass => nameobj("parent"))
264
-
265
- # Now call the two classes
266
- assert_nothing_raised("Could not add AST nodes for calling") {
267
- children << AST::ObjectDef.new(
268
- :type => nameobj("child1"),
269
- :name => nameobj("yayness"),
270
- :params => astarray()
271
- )
272
- }
273
-
274
- # create the node
275
- nodename = "mynodename"
276
- node = nil
277
- assert_nothing_raised("Could not create parent object") {
278
- node = AST::NodeDef.new(
279
- :names => nameobj(nodename),
280
- :code => AST::ASTArray.new(
281
- :children => children
282
- )
283
- )
284
- }
285
35
 
286
- # Create the wrapper object
287
- top = nil
288
- assert_nothing_raised("Could not create top object") {
289
- top = AST::ASTArray.new(
290
- :children => [node]
291
- )
292
- }
293
-
294
- # Evaluate the parse tree
295
- scope = nil
296
- assert_nothing_raised("Could not evaluate node") {
297
- scope = Puppet::Parser::Scope.new()
298
- top.evaluate(:scope => scope)
299
- }
300
-
301
- # Verify that, well, nothing really happened, and especially verify
302
- # that the top scope is not a node scope
303
- assert(scope.topscope?, "Scope is not top scope")
304
- assert(! scope.nodescope?, "Scope is mistakenly node scope")
305
- assert(! scope.lookupclass("parent"), "Found parent class in top scope")
306
-
307
- # verify we can find our node
308
- assert(scope.node(nodename), "Could not find node")
309
-
310
- # And verify that we can evaluate it okay
311
- objects = nil
312
- assert_nothing_raised("Could not retrieve node definition") {
313
- objects = scope.evalnode(:name => [nodename], :facts => {})
314
- }
315
-
316
- assert(objects, "Could not retrieve node definition")
36
+ # Now collect our facts
37
+ facts = {}
38
+ Facter.each do |fact, value| facts[fact] = value end
317
39
 
318
- # Because node scopes are temporary (i.e., they get destroyed after the node's
319
- # config is returned) we should not be able to find the node scope.
320
- nodescope = nil
321
40
  assert_nothing_raised {
322
- nodescope = scope.find { |child|
323
- child.nodescope?
324
- }
325
- }
326
-
327
- assert_nil(nodescope, "Found nodescope")
328
-
329
- # And now verify again that the top scope cannot find the node's definition
330
- # of the parent class
331
- assert(! scope.lookupclass("parent"), "Found parent class in top scope")
332
-
333
- trans = nil
334
- # Verify that we can evaluate the node twice
335
- assert_nothing_raised("Could not retrieve node definition") {
336
- trans = scope.evalnode(:name => [nodename], :facts => {})
337
- }
338
-
339
- objects = nil
340
- assert_nothing_raised("Could not convert to objects") {
341
- objects = trans.to_type
342
- }
343
-
344
- Puppet.type(:file).each { |obj|
345
- assert(obj.path !~ /#{nodename}\[#{nodename}\]/,
346
- "Node name appears twice")
347
- }
348
-
349
- assert(Puppet::Type.type(:file)["/child1"], "Could not find child")
350
- assert(Puppet::Type.type(:file)["/parent"], "Could not find parent")
351
- end
352
-
353
- # Test that you can look a host up using multiple names, e.g., an FQDN and
354
- # a short name
355
- def test_multiplenodenames
356
- children = []
357
-
358
- # create a short-name node
359
- shortname = "mynodename"
360
- children << nodedef(shortname)
361
-
362
- # And a long-name node
363
- longname = "node.domain.com"
364
- children << nodedef(longname)
365
-
366
- # Create the wrapper object
367
- top = nil
368
- assert_nothing_raised("Could not create top object") {
369
- top = AST::ASTArray.new(
370
- :children => children
371
- )
41
+ Puppet::Rails.init
372
42
  }
373
43
 
374
- # Evaluate the parse tree
375
- scope = Puppet::Parser::Scope.new()
376
-
377
- # Verify we can find the node via a search list
378
- objects = nil
379
- assert_nothing_raised("Could not retrieve short node definition") {
380
- objects = scope.evaluate(
381
- :names => ["%s.domain.com" % shortname, shortname], :facts => {},
382
- :ast => top
44
+ # Now try storing our crap
45
+ assert_nothing_raised {
46
+ host = Puppet::Rails::Host.store(
47
+ :objects => bucket,
48
+ :facts => facts,
49
+ :host => facts["hostname"]
383
50
  )
384
51
  }
385
- assert(objects, "Could not retrieve short node definition")
386
-
387
- scope = Puppet::Parser::Scope.new()
388
52
 
389
- # and then look for the long name
390
- assert_nothing_raised("Could not retrieve long node definition") {
391
- objects = scope.evaluate(
392
- :names => [longname.sub(/\..+/, ''), longname], :facts => {},
393
- :ast => top
53
+ # Now create an ast tree that collects that. They should all be files.
54
+ coll = nil
55
+ assert_nothing_raised {
56
+ coll = AST::Collection.new(
57
+ :type => nameobj("file")
394
58
  )
395
59
  }
396
- assert(objects, "Could not retrieve long node definition")
397
- end
398
-
399
- # Test that a node gets the entire configuration except for work meant for
400
- # another node
401
- def test_fullconfigwithnodes
402
- children = []
403
-
404
- children << fileobj("/testing")
405
-
406
- # create a short-name node
407
- name = "mynodename"
408
- children << nodedef(name)
409
60
 
410
- # Create the wrapper object
411
61
  top = nil
412
62
  assert_nothing_raised("Could not create top object") {
413
63
  top = AST::ASTArray.new(
414
- :children => children
64
+ :children => [coll]
415
65
  )
416
66
  }
417
67
 
418
- scope = Puppet::Parser::Scope.new()
419
-
420
- # Verify we can find the node via a search list
421
68
  objects = nil
422
- assert_nothing_raised("Could not retrieve short node definition") {
423
- objects = scope.evaluate(:names => [name], :facts => {}, :ast => top)
424
- }
425
- assert(objects, "Could not retrieve short node definition")
426
- assert_instance_of(Puppet::TransBucket, objects)
427
-
428
- # And now verify that we got both the top and node objects
429
- assert_nothing_raised("Could not find top-declared object") {
430
- assert_equal("/testing", objects[0].name)
69
+ assert_nothing_raised("Could not evaluate") {
70
+ scope = mkscope
71
+ objects = scope.evaluate(:ast => top).flatten
431
72
  }
432
73
 
433
- assert_nothing_raised("Could not find node-declared object %s" %
434
- "/%s" % name
435
- ) {
436
- assert_equal("/%s" % name, objects[1][0].name)
437
- }
74
+ assert(objects.length > 0, "Did not receive any collected objects")
438
75
  end
439
-
440
- # Test that we can 'include' variables, not just normal strings.
441
- def test_includevars
442
- children = []
443
- classes = []
444
-
445
- # Create our class for testin
446
- klassname = "include"
447
- children << classobj(klassname)
448
- classes << klassname
449
-
450
- # Then add our variable assignment
451
- children << varobj("klassvar", klassname)
452
-
453
- # And finally add our calling of the variable
454
- children << AST::ObjectDef.new(
455
- :type => AST::Variable.new(:value => "klassvar"),
456
- :params => astarray
457
- )
458
-
459
- # And then create our top object
460
- top = AST::ASTArray.new(
461
- :children => children
462
- )
463
-
464
- # Evaluate the parse tree
465
- scope = nil
466
- objects = nil
467
- assert_nothing_raised("Could not evaluate node") {
468
- scope = Puppet::Parser::Scope.new()
469
- objects = scope.evaluate(:ast => top)
470
- }
471
-
472
- # Verify we get the right classlist back
473
- assert_equal(classes.sort, scope.classlist.sort)
474
-
475
- # Verify we can find the node via a search list
476
- #assert_nothing_raised("Could not retrieve objects") {
477
- # objects = scope.to_trans
478
- #}
479
- assert(objects, "Could not retrieve objects")
480
-
481
- assert_nothing_raised("Could not find top-declared object") {
482
- assert_equal("/%s" % klassname, objects[0][0].name)
483
- }
76
+ else
77
+ $stderr.puts "No ActiveRecord -- skipping collection tests"
484
78
  end
485
79
 
486
- # Test that node inheritance works correctly
487
- def test_nodeinheritance
488
- children = []
489
-
490
- # create the base node
491
- name = "basenode"
492
- children << nodedef(name)
493
-
494
- # and the sub node
495
- name = "subnode"
496
- children << AST::NodeDef.new(
497
- :names => nameobj(name),
498
- :parentclass => nameobj("basenode"),
499
- :code => AST::ASTArray.new(
500
- :children => [
501
- varobj("%svar" % name, "%svalue" % name),
502
- fileobj("/%s" % name)
503
- ]
504
- )
505
- )
506
- #subnode = nodedef(name)
507
- #subnode.parentclass = "basenode"
508
-
509
- #children << subnode
80
+ def test_if
81
+ astif = nil
82
+ astelse = nil
83
+ fakeelse = FakeAST.new(:else)
84
+ faketest = FakeAST.new(true)
85
+ fakeif = FakeAST.new(:if)
510
86
 
511
- # and the top object
512
- top = nil
513
- assert_nothing_raised("Could not create top object") {
514
- top = AST::ASTArray.new(
515
- :children => children
87
+ assert_nothing_raised {
88
+ astelse = AST::Else.new(:statements => fakeelse)
89
+ }
90
+ assert_nothing_raised {
91
+ astif = AST::IfStatement.new(
92
+ :test => faketest,
93
+ :statements => fakeif,
94
+ :else => astelse
516
95
  )
517
96
  }
518
97
 
519
- # Evaluate the parse tree
520
- scope = Puppet::Parser::Scope.new()
521
-
522
- # Verify we can find the node via a search list
523
- objects = nil
524
- assert_nothing_raised("Could not evaluate node") {
525
- objects = scope.evaluate(:names => [name], :facts => {}, :ast => top)
98
+ # We initialized it to true, so we should get that first
99
+ ret = nil
100
+ assert_nothing_raised {
101
+ ret = astif.evaluate(:scope => "yay")
526
102
  }
527
- assert(objects, "Could not retrieve node definition")
103
+ assert_equal(:if, ret)
528
104
 
105
+ # Now set it to false and check that
106
+ faketest.evaluate = false
529
107
  assert_nothing_raised {
530
- inner = objects[0]
531
-
532
- # And now verify that we got the subnode file
533
- assert_nothing_raised("Could not find basenode file") {
534
- base = inner[0]
535
- assert_equal("/basenode", base.name)
536
- }
537
-
538
- # and the parent node file
539
- assert_nothing_raised("Could not find subnode file") {
540
- sub = inner[1]
541
- assert_equal("/subnode", sub.name)
542
- }
543
-
544
- inner.each { |obj|
545
- %w{basenode subnode}.each { |tag|
546
- assert(obj.tags.include?(tag),
547
- "%s did not include %s tag" % [obj.name, tag]
548
- )
549
- }
550
- }
108
+ ret = astif.evaluate(:scope => "yay")
551
109
  }
110
+ assert_equal(:else, ret)
552
111
  end
553
112
 
554
- def test_typechecking
555
- object = nil
556
- children = []
557
- type = "deftype"
558
- assert_nothing_raised("Could not add AST nodes for calling") {
559
- object = AST::ObjectDef.new(
560
- :type => nameobj(type),
561
- :name => nameobj("yayness"),
562
- :params => astarray()
563
- )
564
- }
565
-
566
- assert_nothing_raised("Typecheck failed") {
567
- object.typecheck(type)
568
- }
113
+ # Make sure our override object behaves "correctly"
114
+ def test_override
115
+ interp, scope, source = mkclassframing
569
116
 
570
- # Add a scope, which makes it think it's evaluating
571
- assert_nothing_raised {
572
- scope = Puppet::Parser::Scope.new()
573
- object.scope = scope
574
- }
117
+ ref = nil
118
+ assert_nothing_raised do
119
+ ref = resourceoverride("resource", "yaytest", "one" => "yay", "two" => "boo")
120
+ end
575
121
 
576
- # Verify an error is thrown when it can't find the type
577
- assert_raise(Puppet::ParseError) {
578
- object.typecheck(type)
579
- }
122
+ ret = nil
123
+ assert_nothing_raised do
124
+ ret = ref.evaluate :scope => scope
125
+ end
580
126
 
581
- # Create child class one
582
- children << classobj(type)
583
- children << object
127
+ assert_instance_of(Puppet::Parser::Resource, ret)
584
128
 
585
- top = nil
586
- assert_nothing_raised("Could not create top object") {
587
- top = AST::ASTArray.new(
588
- :children => children
589
- )
590
- }
129
+ assert(ret.override?, "Resource was not an override resource")
591
130
 
592
- scope = nil
593
- assert_nothing_raised("Could not evaluate") {
594
- scope = Puppet::Parser::Scope.new()
595
- objects = top.evaluate(:scope => scope)
596
- }
131
+ assert(scope.overridetable[ret.ref].include?(ret),
132
+ "Was not stored in the override table")
597
133
  end
598
134
 
599
- def disabled_test_paramcheck
600
- object = nil
601
- children = []
602
- type = "deftype"
603
- params = %w{param1 param2}
604
-
605
- comp = compobj(type, {
606
- :args => astarray(
607
- argobj("param1", "yay"),
608
- argobj("param2", "rah")
609
- ),
610
- :code => AST::ASTArray.new(
611
- :children => [
612
- varobj("%svar" % name, "%svalue" % name),
613
- fileobj("/%s" % name)
614
- ]
615
- )
616
- })
617
- assert_nothing_raised("Could not add AST nodes for calling") {
618
- object = AST::ObjectDef.new(
619
- :type => nameobj(type),
620
- :name => nameobj("yayness"),
621
- :params => astarray(
622
- astarray(stringobj("param1"), stringobj("value1")),
623
- astarray(stringobj("param2"), stringobj("value2"))
624
- )
625
- )
626
- }
135
+ # make sure our resourcedefaults ast object works correctly.
136
+ def test_resourcedefaults
137
+ interp, scope, source = mkclassframing
627
138
 
628
- # Add a scope, which makes it think it's evaluating
629
- assert_nothing_raised {
630
- scope = Puppet::Parser::Scope.new()
631
- object.scope = scope
632
- }
633
-
634
- # Verify an error is thrown when it can't find the type
635
- assert_raise(Puppet::ParseError) {
636
- object.paramcheck(false, comp)
637
- }
139
+ # Now make some defaults for files
140
+ args = {:source => "/yay/ness", :group => "yayness"}
141
+ assert_nothing_raised do
142
+ obj = defaultobj "file", args
143
+ obj.evaluate :scope => scope
144
+ end
638
145
 
639
- # Create child class one
640
- children << classobj(type)
641
- children << object
146
+ hash = nil
147
+ assert_nothing_raised do
148
+ hash = scope.lookupdefaults("file")
149
+ end
642
150
 
643
- top = nil
644
- assert_nothing_raised("Could not create top object") {
645
- top = AST::ASTArray.new(
646
- :children => children
647
- )
648
- }
151
+ hash.each do |name, value|
152
+ assert_instance_of(Symbol, name) # params always convert
153
+ assert_instance_of(Puppet::Parser::Resource::Param, value)
154
+ end
649
155
 
650
- scope = nil
651
- assert_nothing_raised("Could not evaluate") {
652
- scope = Puppet::Parser::Scope.new()
653
- objects = top.evaluate(:scope => scope)
654
- }
156
+ args.each do |name, value|
157
+ assert(hash[name], "Did not get default %s" % name)
158
+ assert_equal(value, hash[name].value)
159
+ end
655
160
  end
656
161
 
657
- def test_setclass
658
- type = "yay"
659
- classes = [type]
660
- children = []
661
- # Create child class one
662
- children << varobj("variable", "aclass")
663
- children << tagobj(type, varref("variable"))
664
- children << tagobj(type)
162
+ def test_node
163
+ interp = mkinterp
164
+ scope = mkscope(:interp => interp)
665
165
 
666
- classes << "aclass"
166
+ # Define a base node
167
+ basenode = interp.newnode "basenode", :code => AST::ASTArray.new(:children => [
168
+ resourcedef("file", "/tmp/base", "owner" => "root")
169
+ ])
667
170
 
668
- top = nil
669
- assert_nothing_raised("Could not create top object") {
670
- top = AST::ASTArray.new(
671
- :children => children
672
- )
673
- }
171
+ # Now define a subnode
172
+ nodes = interp.newnode ["mynode", "othernode"],
173
+ :code => AST::ASTArray.new(:children => [
174
+ resourcedef("file", "/tmp/mynode", "owner" => "root"),
175
+ resourcedef("file", "/tmp/basenode", "owner" => "daemon")
176
+ ])
674
177
 
675
- scope = nil
676
- assert_nothing_raised("Could not evaluate") {
677
- scope = Puppet::Parser::Scope.new()
678
- objects = top.evaluate(:scope => scope)
679
- }
178
+ assert_instance_of(Array, nodes)
680
179
 
681
-
682
- classes.each do |tag|
683
- assert(scope.classlist.include?(tag), "Did not set class %s" % tag)
180
+ # Make sure we can find them all.
181
+ %w{mynode othernode}.each do |node|
182
+ assert(interp.nodesearch_code(node), "Could not find %s" % node)
684
183
  end
184
+ mynode = interp.nodesearch_code("mynode")
685
185
 
686
- end
186
+ # Now try evaluating the node
187
+ assert_nothing_raised do
188
+ mynode.evaluate :scope => scope
189
+ end
687
190
 
688
- # Test that we strip the domain off of host names before they are set as classes
689
- def test_nodenamestrip
690
- children = []
191
+ # Make sure that we can find each of the files
192
+ myfile = scope.findresource "File[/tmp/mynode]"
193
+ assert(myfile, "Could not find file from node")
194
+ assert_equal("root", myfile[:owner])
691
195
 
692
- longname = "node.domain.com"
693
- children << nodedef(longname)
196
+ basefile = scope.findresource "File[/tmp/basenode]"
197
+ assert(basefile, "Could not find file from base node")
198
+ assert_equal("daemon", basefile[:owner])
694
199
 
695
- # Create the wrapper object
696
- top = nil
697
- assert_nothing_raised("Could not create top object") {
698
- top = AST::ASTArray.new(
699
- :children => children
700
- )
701
- }
200
+ # Now make sure we can evaluate nodes with parents
201
+ child = interp.newnode(%w{child}, :parent => "basenode").shift
702
202
 
703
- scope = Puppet::Parser::Scope.new()
704
-
705
- assert_nothing_raised("Could not evaluate node") {
706
- objects = scope.evaluate(:names => [longname], :facts => {}, :ast => top)
707
- }
203
+ newscope = mkscope :interp => interp
204
+ assert_nothing_raised do
205
+ child.evaluate :scope => newscope
206
+ end
708
207
 
709
- assert(!scope.classlist.include?("node.domain.com"),
710
- "Node's long name got set")
711
- assert(scope.classlist.include?("node"), "Node's name did not get set")
208
+ assert(newscope.findresource("File[/tmp/base]"),
209
+ "Could not find base resource")
712
210
  end
713
211
 
714
- # Make sure that deep class parentage works
715
- def test_classparentage
716
- children = []
717
- files = []
718
- base = classobj("base")
719
- files << "/base"
212
+ def test_collection
213
+ interp = mkinterp
214
+ scope = mkscope(:interp => interp)
720
215
 
721
- children << base
216
+ coll = nil
217
+ assert_nothing_raised do
218
+ coll = AST::Collection.new(:type => "file", :form => :virtual)
219
+ end
722
220
 
723
- parent = "base"
724
- 5.times { |i|
725
- name = "child%s" % i
726
- files << "/%s" % name
727
- children << classobj(name, :parentclass => nameobj(parent))
221
+ assert_instance_of(AST::Collection, coll)
728
222
 
729
- parent = name
730
- }
223
+ ret = nil
224
+ assert_nothing_raised do
225
+ ret = coll.evaluate :scope => scope
226
+ end
731
227
 
732
- children << functionobj("include", parent)
228
+ assert_instance_of(Puppet::Parser::Collector, ret)
733
229
 
734
- top = nil
735
- assert_nothing_raised("Could not create top object") {
736
- top = AST::ASTArray.new(
737
- :children => children
738
- )
739
- }
230
+ # Now make sure we get it back from the scope
231
+ assert_equal([ret], scope.collections)
232
+ end
740
233
 
741
- objects = nil
742
- assert_nothing_raised("Could not evaluate") {
743
- scope = Puppet::Parser::Scope.new()
744
- objects = scope.evaluate(:ast => top)
745
- }
234
+ def test_virtual_collexp
235
+ @interp, @scope, @source = mkclassframing
236
+
237
+ # make a resource
238
+ resource = mkresource(:type => "file", :title => "/tmp/testing",
239
+ :params => {:owner => "root", :group => "bin", :mode => "644"})
746
240
 
747
- objects = objects.flatten
241
+ run_collection_queries(:virtual) do |string, result, query|
242
+ code = nil
243
+ assert_nothing_raised do
244
+ str, code = query.evaluate :scope => @scope
245
+ end
748
246
 
749
- files.each do |file|
750
- assert(objects.find { |o| o.name == file },
751
- "Could not find file %s" % file)
247
+ assert_instance_of(Proc, code)
248
+ assert_nothing_raised do
249
+ assert_equal(result, code.call(resource),
250
+ "'#{string}' failed")
251
+ end
752
252
  end
753
253
  end
754
254
 
755
- # Make sure we catch names that are specified like parameters.
756
- def test_name_or_param
757
- obj = nil
758
- assert_nothing_raised {
759
- obj = AST::ObjectDef.new(
760
- :type => nameobj("file"),
761
- :params => astarray(AST::ObjectParam.new(
762
- :param => stringobj("name"),
763
- :value => stringobj("yayness")
764
- ))
765
- )
766
- }
767
-
768
- scope = Puppet::Parser::Scope.new
255
+ if defined? ActiveRecord::Base
256
+ def test_exported_collexp
257
+ railsinit
258
+ Puppet[:storeconfigs] = true
259
+ @interp, @scope, @source = mkclassframing
260
+
261
+ # make a rails resource
262
+ railsresource "file", "/tmp/testing", :owner => "root", :group => "bin",
263
+ :mode => "644"
264
+
265
+ run_collection_queries(:exported) do |string, result, query|
266
+ code = nil
267
+ str = nil
268
+
269
+ # We don't support anything but the title in rails right now
270
+ retval = nil
271
+ bad = false
272
+ # Figure out if the search is for anything rails will ignore
273
+ string.scan(/(\w+) [!=]= \w+/) do |s|
274
+ unless s[0] == "title"
275
+ bad = true
276
+ break
277
+ end
278
+ end
769
279
 
770
- trans = nil
771
- assert_nothing_raised {
772
- trans = scope.evaluate(:ast => obj, :facts => {})
773
- }
280
+ # And if it is, make sure we throw an error.
281
+ if bad
282
+ assert_raise(Puppet::ParseError, "Evaluated '#{string}'") do
283
+ str, code = query.evaluate :scope => @scope
284
+ end
285
+ next
286
+ else
287
+ assert_nothing_raised("Could not evaluate '#{string}'") do
288
+ str, code = query.evaluate :scope => @scope
289
+ end
290
+ end
291
+ assert_nothing_raised("Could not find resource") do
292
+ retval = Puppet::Rails::Resource.find(:all,
293
+ :include => :param_values,
294
+ :conditions => str)
295
+ end
774
296
 
775
- transobj = trans.shift
776
- assert(transobj.name, "Name did not convert from param to name")
777
- end
297
+ if result
298
+ assert_equal(1, retval.length, "Did not find resource with '#{string}'")
299
+ res = retval.shift
778
300
 
779
- if defined? ActiveRecord
780
- # Verify that our collection stuff works.
781
- def test_collection
782
- collectable = []
783
- non = []
784
- # First put some objects into the database.
785
- bucket = mk_transtree do |object, depth, width|
786
- # and mark some of them collectable
787
- if width % 2 == 1
788
- object.collectable = true
789
- collectable << object
301
+ assert_equal("file", res.restype)
302
+ assert_equal("/tmp/testing", res.title)
790
303
  else
791
- non << object
304
+ assert_equal(0, retval.length, "found a resource with '#{string}'")
792
305
  end
793
306
  end
794
-
795
- # Now collect our facts
796
- facts = {}
797
- Facter.each do |fact, value| facts[fact] = value end
798
-
799
- assert_nothing_raised {
800
- Puppet::Rails.init
801
- }
802
-
803
- # Now try storing our crap
804
- assert_nothing_raised {
805
- host = Puppet::Rails::Host.store(
806
- :objects => bucket,
807
- :facts => facts,
808
- :host => facts["hostname"]
809
- )
810
- }
811
-
812
- # Now create an ast tree that collects that. They should all be files.
813
- coll = nil
814
- assert_nothing_raised {
815
- coll = AST::Collection.new(
816
- :type => nameobj("file")
817
- )
818
- }
819
-
820
- top = nil
821
- assert_nothing_raised("Could not create top object") {
822
- top = AST::ASTArray.new(
823
- :children => [coll]
824
- )
825
- }
826
-
827
- objects = nil
828
- assert_nothing_raised("Could not evaluate") {
829
- scope = Puppet::Parser::Scope.new()
830
- objects = scope.evaluate(:ast => top).flatten
831
- }
832
-
833
- assert(objects.length > 0, "Did not receive any collected objects")
834
307
  end
835
- else
836
- $stderr.puts "No ActiveRecord -- skipping collection tests"
837
308
  end
838
309
 
839
- # To fix #140. Currently non-functional.
840
- def disabled_test_classreuse
841
- children = []
842
-
843
- # Create the parent class, with a definition in it.
844
- children << classobj("parent", :code => AST::ASTArray.new(
845
- :file => __FILE__,
846
- :line => __LINE__,
847
- :children => [
848
- compobj("foo", :args => AST::ASTArray.new(
849
- :children => [nameobj("arg")]
850
- ),
851
- :code => AST::ASTArray.new(
852
- :file => __FILE__,
853
- :line => __LINE__,
854
- :children => [fileobj("/$arg")]
855
- )
856
- ),
857
- objectdef("foo", "ptest", {"arg" => "parentfoo"})
858
- ]
859
- ))
860
-
861
- # Create child class, also trying to use that definition
862
- children << classobj("child1", :parentclass => nameobj("parent"),
863
- :code => AST::ASTArray.new(
864
- :file => __FILE__,
865
- :line => __LINE__,
866
- :children => [
867
- objectdef("foo", "ctest", {"arg" => "childfoo"})
868
- ]
869
- )
870
- )
871
-
872
- # Call the parent first
873
- children << functionobj("include", "parent")
874
-
875
- # Then call the child, and make sure it can look up the definition
876
- children << functionobj("include", "child1")
310
+ def run_collection_queries(form)
311
+ {true => [%{title == "/tmp/testing"}, %{(title == "/tmp/testing")},
312
+ %{title == "/tmp/testing" and group == bin}, %{title == bin or group == bin},
313
+ %{title == "/tmp/testing" or title == bin}, %{title == "/tmp/testing"},
314
+ %{(title == "/tmp/testing" or title == bin) and group == bin}],
315
+ false => [%{title == bin}, %{title == bin or (title == bin and group == bin)},
316
+ %{title != "/tmp/testing"}, %{title != "/tmp/testing" and group != bin}]
317
+ }.each do |res, ary|
318
+ ary.each do |str|
319
+ if form == :virtual
320
+ code = "File <| #{str} |>"
321
+ else
322
+ code = "File <<| #{str} |>>"
323
+ end
324
+ parser = mkparser
325
+ query = nil
877
326
 
878
- top = nil
879
- assert_nothing_raised("Could not create top object") {
880
- top = AST::ASTArray.new(
881
- :children => children
882
- )
883
- }
327
+ assert_nothing_raised("Could not parse '#{str}'") do
328
+ query = parser.parse(code)[0].query
329
+ end
884
330
 
885
- objects = nil
886
- assert_nothing_raised("Could not evaluate") {
887
- scope = Puppet::Parser::Scope.new()
888
- objects = scope.evaluate(:ast => top)
889
- }
331
+ yield str, res, query
332
+ end
333
+ end
890
334
  end
891
335
  end
892
336
 
893
- # $Id: ast.rb 1256 2006-06-13 15:57:06Z luke $
337
+ # $Id: ast.rb 2296 2007-03-18 22:48:57Z luke $