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
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppet'
6
+ require 'puppettest'
7
+
8
+ class TestPuppetUtilExecution < Test::Unit::TestCase
9
+ include PuppetTest
10
+
11
+ def test_withenv
12
+ ENV["testing"] = "yay"
13
+
14
+ assert_nothing_raised do
15
+ Puppet::Util::Execution.withenv :testing => "foo" do
16
+ $ran = ENV["testing"]
17
+ end
18
+ end
19
+
20
+ assert_equal("yay", ENV["testing"])
21
+ assert_equal("foo", $ran)
22
+
23
+ ENV["rah"] = "yay"
24
+ assert_raise(ArgumentError) do
25
+ Puppet::Util::Execution.withenv :testing => "foo" do
26
+ raise ArgumentError, "yay"
27
+ end
28
+ end
29
+
30
+ assert_equal("yay", ENV["rah"])
31
+ end
32
+ end
33
+
34
+ # $Id: execution.rb 1793 2006-10-16 22:01:40Z luke $
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Luke Kanies on 2006-11-07.
4
+ # Copyright (c) 2006. All rights reserved.
5
+
6
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
7
+
8
+ require 'puppettest'
9
+ require 'puppet/util/feature'
10
+
11
+ class TestFeatures < Test::Unit::TestCase
12
+ include PuppetTest
13
+
14
+ def setup
15
+ super
16
+ libdir = tempfile()
17
+ @features = Puppet::Util::Feature.new(libdir)
18
+ end
19
+
20
+ def test_new
21
+ assert_nothing_raised do
22
+ @features.add(:failer) do
23
+ raise ArgumentError, "nopes"
24
+ end
25
+ end
26
+
27
+ assert(@features.respond_to?(:failer?), "Feature method did not get added")
28
+ assert_nothing_raised("failure propagated outside of feature") do
29
+ assert(! @features.failer?, "failure was considered true")
30
+ end
31
+
32
+ # Now make one that succeeds
33
+ $succeeds = nil
34
+ assert_nothing_raised("Failed to add normal feature") do
35
+ @features.add(:succeeds) do
36
+ $succeeds = true
37
+ end
38
+ end
39
+ assert($succeeds, "Block was not called on initialization")
40
+
41
+ assert(@features.respond_to?(:succeeds?), "Did not add succeeding feature")
42
+ assert_nothing_raised("Failed to call succeeds") { assert(@features.succeeds?, "Feature was not true") }
43
+ end
44
+
45
+ def test_libs
46
+ assert_nothing_raised do
47
+ @features.add(:puppet, :libs => %w{puppet})
48
+ end
49
+
50
+ assert(@features.puppet?)
51
+
52
+ assert_nothing_raised do
53
+ @features.add(:missing, :libs => %w{puppet no/such/library/okay})
54
+ end
55
+
56
+ assert(! @features.missing?, "Missing lib was considered true")
57
+ end
58
+
59
+ def test_dynamic_loading
60
+ # Make sure it defaults to false
61
+ assert_nothing_raised("Undefined features throw an exception") do
62
+ assert(! @features.nosuchfeature?, "missing feature returned true")
63
+ end
64
+
65
+ $features = @features
66
+ cleanup { $features = nil }
67
+ # Now create a feature and make sure it loads.
68
+ Dir.mkdir(@features.path)
69
+ nope = File.join(@features.path, "nope.rb")
70
+ File.open(nope, "w") { |f|
71
+ f.puts "$features.add(:nope, :libs => %w{nosuchlib})"
72
+ }
73
+ assert_nothing_raised("Failed to autoload features") do
74
+ assert(! @features.nope?, "'nope' returned true")
75
+ end
76
+
77
+ # First make sure "yep?" returns false
78
+ assert_nothing_raised("Missing feature threw an exception") do
79
+ assert(! @features.yep?, "'yep' returned true before definition")
80
+ end
81
+
82
+ yep = File.join(@features.path, "yep.rb")
83
+ File.open(yep, "w") { |f|
84
+ f.puts "$features.add(:yep, :libs => %w{puppet})"
85
+ }
86
+
87
+ # Now make sure the value is not cached or anything.
88
+ assert_nothing_raised("Failed to autoload features") do
89
+ assert(@features.yep?, "'yep' returned false")
90
+ end
91
+ end
92
+ end
93
+
94
+ # $Id: features.rb 2181 2007-02-08 05:11:49Z luke $
@@ -0,0 +1,677 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'puppettest/fileparsing'
7
+ require 'puppet'
8
+ require 'puppet/util/fileparsing'
9
+
10
+ class TestUtilFileParsing < Test::Unit::TestCase
11
+ include PuppetTest
12
+ include PuppetTest::FileParsing
13
+
14
+ class FParser
15
+ include Puppet::Util::FileParsing
16
+ end
17
+
18
+ def setup
19
+ super
20
+ @parser = FParser.new
21
+ end
22
+
23
+ def test_lines
24
+ assert_equal("\n", @parser.line_separator,
25
+ "Default separator was incorrect")
26
+
27
+ {"\n" => ["one two\nthree four", "one two\nthree four\n"],
28
+ "\t" => ["one two\tthree four", "one two\tthree four\t"],
29
+ }.each do |sep, tests|
30
+ assert_nothing_raised do
31
+ @parser.line_separator = sep
32
+ end
33
+ assert_equal(sep, @parser.line_separator,
34
+ "Did not set separator")
35
+
36
+ tests.each do |test|
37
+ assert_equal(["one two", "three four"], @parser.lines(test),
38
+ "Incorrectly parsed %s" % test.inspect)
39
+ end
40
+ end
41
+ end
42
+
43
+ # Make sure parse calls the appropriate methods or errors out
44
+ def test_parse
45
+ @parser.meta_def(:parse_line) do |line|
46
+ line.split(/\s+/)
47
+ end
48
+
49
+ text = "one line\ntwo line"
50
+ should = [%w{one line}, %w{two line}]
51
+ ret = nil
52
+ assert_nothing_raised do
53
+ ret = @parser.parse(text)
54
+ end
55
+
56
+ assert_equal(should, ret)
57
+ end
58
+
59
+ # Make sure we correctly handle different kinds of text lines.
60
+ def test_text_line
61
+ comment = "# this is a comment"
62
+
63
+ # Make sure it fails if no regex is passed
64
+ assert_raise(ArgumentError) do
65
+ @parser.text_line :comment
66
+ end
67
+
68
+ # define a text matching comment record
69
+ assert_nothing_raised do
70
+ @parser.text_line :comment, :match => /^#/
71
+ end
72
+
73
+ # Make sure it matches
74
+ assert_nothing_raised do
75
+ assert_equal({:record_type => :comment, :line => comment},
76
+ @parser.parse_line(comment))
77
+ end
78
+
79
+ # But not something else
80
+ assert_nothing_raised do
81
+ assert_nil(@parser.parse_line("some other text"))
82
+ end
83
+
84
+ # Now define another type and make sure we get the right one back
85
+ assert_nothing_raised do
86
+ @parser.text_line :blank, :match => /^\s*$/
87
+ end
88
+
89
+ # The comment should still match
90
+ assert_nothing_raised do
91
+ assert_equal({:record_type => :comment, :line => comment},
92
+ @parser.parse_line(comment))
93
+ end
94
+
95
+ # As should our new line type
96
+ assert_nothing_raised do
97
+ assert_equal({:record_type => :blank, :line => ""},
98
+ @parser.parse_line(""))
99
+ end
100
+
101
+ end
102
+
103
+ def test_parse_line
104
+ Puppet[:trace] = false
105
+
106
+ comment = "# this is a comment"
107
+
108
+ # Make sure it fails if we don't have any record types defined
109
+ assert_raise(Puppet::DevError) do
110
+ @parser.parse_line(comment)
111
+ end
112
+
113
+ # Now define a text matching comment record
114
+ assert_nothing_raised do
115
+ @parser.text_line :comment, :match => /^#/
116
+ end
117
+
118
+ # And make sure we can't define another one with the same name
119
+ assert_raise(ArgumentError) do
120
+ @parser.text_line :comment, :match => /^"/
121
+ end
122
+
123
+ result = nil
124
+ assert_nothing_raised("Did not parse text line") do
125
+ result = @parser.parse_line comment
126
+ end
127
+
128
+ assert_equal({:record_type => :comment, :line => comment}, result)
129
+
130
+ # Make sure we just return nil on unmatched lines.
131
+ assert_nothing_raised("Did not parse text line") do
132
+ result = @parser.parse_line "No match for this"
133
+ end
134
+
135
+ assert_nil(result, "Somehow matched an empty line")
136
+
137
+ # Now define another type of comment, and make sure both types get
138
+ # correctly returned as comments
139
+ assert_nothing_raised do
140
+ @parser.text_line :comment2, :match => /^"/
141
+ end
142
+
143
+ assert_nothing_raised("Did not parse old comment") do
144
+ assert_equal({:record_type => :comment, :line => comment},
145
+ @parser.parse_line(comment))
146
+ end
147
+ comment = '" another type of comment'
148
+ assert_nothing_raised("Did not parse new comment") do
149
+ assert_equal({:record_type => :comment2, :line => comment},
150
+ @parser.parse_line(comment))
151
+ end
152
+
153
+ # Now define two overlapping record types and make sure we keep the
154
+ # correct order. We do first match, not longest match.
155
+ assert_nothing_raised do
156
+ @parser.text_line :one, :match => /^y/
157
+ @parser.text_line :two, :match => /^yay/
158
+ end
159
+
160
+ assert_nothing_raised do
161
+ assert_equal({:record_type => :one, :line => "yayness"},
162
+ @parser.parse_line("yayness"))
163
+ end
164
+
165
+ end
166
+
167
+ def test_record_line
168
+ tabrecord = "tab separated content"
169
+ spacerecord = "space separated content"
170
+
171
+ # Make sure we always require an appropriate set of options
172
+ [{:separator => "\t"}, {}, {:fields => %w{record_type}}].each do |opts|
173
+ assert_raise(ArgumentError, "Accepted %s" % opts.inspect) do
174
+ @parser.record_line :record, opts
175
+ end
176
+ end
177
+
178
+ # Verify that our default separator is tabs
179
+ tabs = nil
180
+ assert_nothing_raised do
181
+ tabs = @parser.record_line :tabs, :fields => [:name, :first, :second]
182
+ end
183
+
184
+ # Make sure out tab line gets matched
185
+ tabshould = {:record_type => :tabs, :name => "tab", :first => "separated",
186
+ :second => "content"}
187
+ assert_nothing_raised do
188
+ assert_equal(tabshould, @parser.handle_record_line(tabrecord, tabs))
189
+ end
190
+
191
+ # Now add our space-separated record type
192
+ spaces = nil
193
+ assert_nothing_raised do
194
+ spaces = @parser.record_line :spaces, :fields => [:name, :first, :second]
195
+ end
196
+
197
+ # Now make sure both lines parse correctly
198
+ spaceshould = {:record_type => :spaces, :name => "space",
199
+ :first => "separated", :second => "content"}
200
+
201
+ assert_nothing_raised do
202
+ assert_equal(tabshould, @parser.handle_record_line(tabrecord, tabs))
203
+ assert_equal(spaceshould, @parser.handle_record_line(spacerecord, spaces))
204
+ end
205
+ end
206
+
207
+ def test_to_line
208
+ @parser.text_line :comment, :match => /^#/
209
+ @parser.text_line :blank, :match => /^\s*$/
210
+ @parser.record_line :record, :fields => %w{name one two}, :joiner => "\t"
211
+
212
+ johnny = {:record_type => :record, :name => "johnny", :one => "home",
213
+ :two => "yay"}
214
+ bill = {:record_type => :record, :name => "bill", :one => "work",
215
+ :two => "boo"}
216
+
217
+ records = {
218
+ :comment => {:record_type => :comment, :line => "# This is a file"},
219
+ :blank => {:record_type => :blank, :line => ""},
220
+ :johnny => johnny,
221
+ :bill => bill
222
+ }
223
+
224
+ lines = {
225
+ :comment => "# This is a file",
226
+ :blank => "",
227
+ :johnny => "johnny home yay",
228
+ :bill => "bill work boo"
229
+ }
230
+
231
+ records.each do |name, details|
232
+ result = nil
233
+ assert_nothing_raised do
234
+ result = @parser.to_line(details)
235
+ end
236
+
237
+ assert_equal(lines[name], result)
238
+ end
239
+ order = [:comment, :blank, :johnny, :bill]
240
+
241
+ file = order.collect { |name| lines[name] }.join("\n")
242
+
243
+ ordered_records = order.collect { |name| records[name] }
244
+
245
+ # Make sure we default to a trailing separator
246
+ assert_equal(true, @parser.trailing_separator,
247
+ "Did not default to a trailing separtor")
248
+
249
+ # Start without a trailing separator
250
+ @parser.trailing_separator = false
251
+ assert_nothing_raised do
252
+ assert_equal(file, @parser.to_file(ordered_records))
253
+ end
254
+
255
+ # Now with a trailing separator
256
+ file += "\n"
257
+ @parser.trailing_separator = true
258
+ assert_nothing_raised do
259
+ assert_equal(file, @parser.to_file(ordered_records))
260
+ end
261
+
262
+ # Now try it with a different separator, so we're not just catching
263
+ # defaults
264
+ file.gsub!("\n", "\t")
265
+ @parser.line_separator = "\t"
266
+ assert_nothing_raised do
267
+ assert_equal(file, @parser.to_file(ordered_records))
268
+ end
269
+ end
270
+
271
+ # Make sure fields that are marked absent get replaced with the appropriate
272
+ # string.
273
+ def test_absent_fields
274
+ record = nil
275
+ assert_nothing_raised do
276
+ record = @parser.record_line :record, :fields => %w{one two three},
277
+ :optional => %w{two three}
278
+ end
279
+ assert_equal("", record.absent, "Did not set a default absent string")
280
+
281
+ result = nil
282
+ assert_nothing_raised do
283
+ result = @parser.to_line(:record_type => :record,
284
+ :one => "a", :two => :absent, :three => "b")
285
+ end
286
+
287
+ assert_equal("a b", result, "Absent was not correctly replaced")
288
+
289
+ # Now try using a different replacement character
290
+ record.absent = "*" # Because cron is a pain in my ass
291
+ assert_nothing_raised do
292
+ result = @parser.to_line(:record_type => :record,
293
+ :one => "a", :two => :absent, :three => "b")
294
+ end
295
+
296
+ assert_equal("a * b", result, "Absent was not correctly replaced")
297
+
298
+ # Make sure we deal correctly with the string 'absent'
299
+ assert_nothing_raised do
300
+ result = @parser.to_line(:record_type => :record,
301
+ :one => "a", :two => "b", :three => 'absent')
302
+ end
303
+
304
+ assert_equal("a b absent", result, "Replaced string 'absent'")
305
+
306
+ # And, of course, make sure we can swap things around.
307
+ assert_nothing_raised do
308
+ result = @parser.to_line(:record_type => :record,
309
+ :one => "a", :two => "b", :three => :absent)
310
+ end
311
+
312
+ assert_equal("a b *", result, "Absent was not correctly replaced")
313
+ end
314
+
315
+ # Make sure we can specify a different join character than split character
316
+ def test_split_join_record_line
317
+ check = proc do |start, record, final|
318
+ # Check parsing first
319
+ result = @parser.parse_line(start)
320
+ [:one, :two].each do |param|
321
+ assert_equal(record[param], result[param],
322
+ "Did not correctly parse %s" % start.inspect)
323
+ end
324
+
325
+ # And generating
326
+ assert_equal(final, @parser.to_line(result),
327
+ "Did not correctly generate %s from %s" %
328
+ [final.inspect, record.inspect])
329
+ end
330
+
331
+ # First try it with symmetric characters
332
+ @parser.record_line :symmetric, :fields => %w{one two},
333
+ :separator => " "
334
+
335
+ check.call "a b", {:one => "a", :two => "b"}, "a b"
336
+ @parser.clear_records
337
+
338
+ # Now assymetric but both strings
339
+ @parser.record_line :asymmetric, :fields => %w{one two},
340
+ :separator => "\t", :joiner => " "
341
+
342
+ check.call "a\tb", {:one => "a", :two => "b"}, "a b"
343
+ @parser.clear_records
344
+
345
+ # And assymmetric with a regex
346
+ @parser.record_line :asymmetric2, :fields => %w{one two},
347
+ :separator => /\s+/, :joiner => " "
348
+
349
+ check.call "a\tb", {:one => "a", :two => "b"}, "a b"
350
+ check.call "a b", {:one => "a", :two => "b"}, "a b"
351
+ end
352
+
353
+ # Make sure we correctly regenerate files.
354
+ def test_to_file
355
+ @parser.text_line :comment, :match => /^#/
356
+ @parser.text_line :blank, :match => /^\s*$/
357
+ @parser.record_line :record, :fields => %w{name one two}
358
+
359
+ text = "# This is a comment
360
+
361
+ johnny one two
362
+ billy three four\n"
363
+
364
+ # Just parse and generate, to make sure it's isomorphic.
365
+ assert_nothing_raised do
366
+ assert_equal(text, @parser.to_file(@parser.parse(text)),
367
+ "parsing was not isomorphic")
368
+ end
369
+ end
370
+
371
+ def test_valid_attrs
372
+ @parser.record_line :record, :fields => %w{one two three}
373
+
374
+ assert(@parser.valid_attr?(:record, :one),
375
+ "one was considered invalid")
376
+
377
+ assert(@parser.valid_attr?(:record, :ensure),
378
+ "ensure was considered invalid")
379
+
380
+ assert(! @parser.valid_attr?(:record, :four),
381
+ "four was considered valid")
382
+ end
383
+
384
+ def test_record_blocks
385
+ options = nil
386
+ assert_nothing_raised do
387
+ # Just do a simple test
388
+ options = @parser.record_line :record,
389
+ :fields => %w{name alias info} do |line|
390
+ line = line.dup
391
+ ret = {}
392
+ if line.sub!(/(\w+)\s*/, '')
393
+ ret[:name] = $1
394
+ else
395
+ return nil
396
+ end
397
+
398
+ if line.sub!(/(#.+)/, '')
399
+ desc = $1.sub(/^#\s*/, '')
400
+ ret[:description] = desc unless desc == ""
401
+ end
402
+
403
+ if line != ""
404
+ ret[:alias] = line.split(/\s+/)
405
+ end
406
+
407
+ return ret
408
+ end
409
+ end
410
+
411
+ values = {
412
+ :name => "tcpmux",
413
+ :description => "TCP port service multiplexer",
414
+ :alias => ["sink"]
415
+ }
416
+
417
+ {
418
+
419
+ "tcpmux " => [:name],
420
+ "tcpmux" => [:name],
421
+ "tcpmux sink" => [:name, :port, :protocols, :alias],
422
+ "tcpmux # TCP port service multiplexer" =>
423
+ [:name, :description, :port, :protocols],
424
+ "tcpmux sink # TCP port service multiplexer" =>
425
+ [:name, :description, :port, :alias, :protocols],
426
+ "tcpmux sink null # TCP port service multiplexer" =>
427
+ [:name, :description, :port, :alias, :protocols],
428
+ }.each do |line, should|
429
+ result = nil
430
+ assert_nothing_raised do
431
+ result = @parser.handle_record_line(line, options)
432
+ end
433
+ assert(result, "Did not get a result back for '%s'" % line)
434
+ should.each do |field|
435
+ if field == :alias and line =~ /null/
436
+ assert_equal(%w{sink null}, result[field],
437
+ "Field %s was not right in '%s'" % [field, line])
438
+ else
439
+ assert_equal(values[field], result[field],
440
+ "Field %s was not right in '%s'" % [field, line])
441
+ end
442
+ end
443
+ end
444
+
445
+
446
+ end
447
+
448
+ # Make sure we correctly handle optional fields. We'll skip this
449
+ # functionality until we really know we need it.
450
+ def test_optional_fields
451
+ assert_nothing_raised do
452
+ @parser.record_line :record,
453
+ :fields => %w{one two three four},
454
+ :optional => %w{three four},
455
+ :absent => "*",
456
+ :separator => " " # A single space
457
+ end
458
+
459
+ ["a b c d", "a b * d", "a b * *", "a b c *"].each do |line|
460
+ record = nil
461
+ assert_nothing_raised do
462
+ record = @parser.parse_line(line)
463
+ end
464
+
465
+ # Now regenerate the line
466
+ newline = nil
467
+ assert_nothing_raised do
468
+ newline = @parser.to_line(record)
469
+ end
470
+
471
+ # And make sure they're equal
472
+ assert_equal(line, newline)
473
+ end
474
+
475
+ # Now make sure it pukes if we don't provide the required fields
476
+ assert_raise(ArgumentError) do
477
+ @parser.to_line(:record_type => :record, :one => "yay")
478
+ end
479
+ end
480
+
481
+ def test_record_rts
482
+ # Start with the default
483
+ assert_nothing_raised do
484
+ @parser.record_line :record,
485
+ :fields => %w{one two three four},
486
+ :optional => %w{three four}
487
+ end
488
+
489
+ assert_equal("a b ",
490
+ @parser.to_line(:record_type => :record, :one => "a", :two => "b")
491
+ )
492
+
493
+ # Now say yes to removing
494
+ @parser.clear_records
495
+ assert_nothing_raised do
496
+ @parser.record_line :record,
497
+ :fields => %w{one two three four},
498
+ :optional => %w{three four},
499
+ :rts => true
500
+ end
501
+
502
+ assert_equal("a b",
503
+ @parser.to_line(:record_type => :record, :one => "a", :two => "b")
504
+ )
505
+
506
+ # Lastly, try a regex
507
+ @parser.clear_records
508
+ assert_nothing_raised do
509
+ @parser.record_line :record,
510
+ :fields => %w{one two three four},
511
+ :optional => %w{three four},
512
+ :absent => "*",
513
+ :rts => /[ *]+$/
514
+ end
515
+
516
+ assert_equal("a b",
517
+ @parser.to_line(:record_type => :record, :one => "a", :two => "b")
518
+ )
519
+ end
520
+
521
+ # Make sure the last field can contain the separator, as crontabs do, and
522
+ # that we roll them all up by default.
523
+ def test_field_rollups
524
+ @parser.record_line :yes, :fields => %w{name one two}
525
+
526
+ result = nil
527
+ assert_nothing_raised do
528
+ result = @parser.send(:parse_line, "Name One Two Three")
529
+ end
530
+ assert_equal("Two Three", result[:two],
531
+ "Did not roll up last fields by default")
532
+
533
+ @parser = FParser.new
534
+ assert_nothing_raised("Could not create record that rolls up fields") do
535
+ @parser.record_line :no, :fields => %w{name one two}, :rollup => false
536
+ end
537
+
538
+ result = nil
539
+ assert_nothing_raised do
540
+ result = @parser.send(:parse_line, "Name One Two Three")
541
+ end
542
+ assert_equal("Two", result[:two],
543
+ "Rolled up last fields when rollup => false")
544
+ end
545
+
546
+ def test_text_blocks
547
+ record = nil
548
+ assert_nothing_raised do
549
+ record = @parser.text_line :name, :match => %r{^#} do |line|
550
+ {:line => line.upcase}
551
+ end
552
+ end
553
+
554
+ assert(record.respond_to?(:process),
555
+ "Block was not used with text line")
556
+
557
+ assert_equal("YAYNESS", record.process("yayness")[:line],
558
+ "Did not call process method")
559
+ end
560
+
561
+ def test_hooks
562
+ record = nil
563
+ # First try it with a normal record
564
+ assert_nothing_raised("Could not set hooks") do
565
+ record = @parser.record_line :yay, :fields => %w{one two},
566
+ :post_parse => proc { |hash| hash[:posted] = true },
567
+ :pre_gen => proc { |hash| hash[:one] = hash[:one].upcase },
568
+ :to_line => proc { |hash| "# Line\n" + join(hash) }
569
+ end
570
+
571
+ assert(record.respond_to?(:post_parse), "did not create method for post-hook")
572
+ assert(record.respond_to?(:pre_gen), "did not create method for pre-hook")
573
+
574
+ result = nil
575
+ assert_nothing_raised("Could not process line with hooks") do
576
+ result = @parser.parse_line("one two")
577
+ end
578
+
579
+ assert(result[:posted], "Did not run post-hook")
580
+ old_result = result
581
+
582
+ # Now make sure our pre-gen hook is called
583
+ assert_nothing_raised("Could not generate line with hooks") do
584
+ result = @parser.to_line(result)
585
+ end
586
+ assert_equal("# Line\nONE two", result, "did not call pre-gen hook")
587
+ assert_equal("one", old_result[:one], "passed original hash to pre hook")
588
+ end
589
+ end
590
+
591
+ class TestUtilFileRecord < Test::Unit::TestCase
592
+ include PuppetTest
593
+ include PuppetTest::FileParsing
594
+
595
+ Record = Puppet::Util::FileParsing::FileRecord
596
+ def test_new_filerecord
597
+ [ [:fake, {}],
598
+ [nil, ]
599
+ ].each do |args|
600
+ assert_raise(ArgumentError, "Did not fail on %s" % args.inspect) do
601
+ Record.new(*args)
602
+ end
603
+ end
604
+
605
+ # Make sure the fields get turned into symbols
606
+ record = nil
607
+ assert_nothing_raised do
608
+ record = Record.new(:record, :fields => %w{one two})
609
+ end
610
+ assert_equal([:one, :two], record.fields,
611
+ "Did not symbolize fields")
612
+
613
+ # Make sure we fail on invalid fields
614
+ [:record_type, :target, :on_disk].each do |field|
615
+ assert_raise(ArgumentError, "Did not fail on invalid field %s" % field) {
616
+ Record.new(:record, :fields => [field])
617
+ }
618
+ end
619
+ end
620
+
621
+ def test_defaults
622
+ record = Record.new(:text, :match => %r{^#})
623
+ [:absent, :separator, :joiner, :optional].each do |field|
624
+ assert_nil(record.send(field), "%s was not nil" % field)
625
+ end
626
+
627
+ record = Record.new(:record, :fields => %w{fields})
628
+ {:absent => "", :separator => /\s+/, :joiner => " ",
629
+ :optional => []}.each do |field, default|
630
+ assert_equal(default, record.send(field), "%s was not default" % field)
631
+ end
632
+ end
633
+
634
+ def test_block
635
+ record = nil
636
+ assert_nothing_raised("Could not pass a block when creating record") do
637
+ record = Record.new(:record, :fields => %w{one}) do |line|
638
+ return line.upcase
639
+ end
640
+ end
641
+
642
+ line = "This is a line"
643
+
644
+ assert(record.respond_to?(:process),
645
+ "Record did not define :process method")
646
+
647
+ assert_equal(line.upcase, record.process(line),
648
+ "Record did not process line correctly")
649
+ end
650
+
651
+ # Make sure we can declare that we want the block to be instance-eval'ed instead of
652
+ # defining the 'process' method.
653
+ def test_instance_block
654
+ record = nil
655
+ assert_nothing_raised("Could not pass a block when creating record") do
656
+ record = Record.new(:record, :block_eval => :instance, :fields => %w{one}) do
657
+ def process(line)
658
+ line.upcase
659
+ end
660
+
661
+ def to_line(details)
662
+ details.upcase
663
+ end
664
+ end
665
+ end
666
+
667
+ assert(record.respond_to?(:process), "Block was not instance-eval'ed and process was not defined")
668
+ assert(record.respond_to?(:to_line), "Block was not instance-eval'ed and to_line was not defined")
669
+
670
+ line = "some text"
671
+ assert_equal(line.upcase, record.process(line), "Instance-eval'ed record did not call :process correctly")
672
+ assert_equal(line.upcase, record.to_line(line), "Instance-eval'ed record did not call :to_line correctly")
673
+ end
674
+ end
675
+
676
+ # $Id: fileparsing.rb 2407 2007-04-23 18:01:36Z luke $
677
+