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,233 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ #require 'puppettest/fileparsing'
7
+ #require 'puppet/type/port'
8
+ #require 'test/unit'
9
+ #require 'facter'
10
+ #
11
+ #class TestParsedPort < Test::Unit::TestCase
12
+ # include PuppetTest
13
+ # include PuppetTest::FileParsing
14
+ #
15
+ # def setup
16
+ # super
17
+ # @provider = Puppet.type(:port).provider(:parsed)
18
+ # @oldfiletype = @provider.filetype
19
+ # end
20
+ #
21
+ # def teardown
22
+ # Puppet::Util::FileType.filetype(:ram).clear
23
+ # @provider.filetype = @oldfiletype
24
+ # @provider.clear
25
+ # super
26
+ # end
27
+ #
28
+ # # Generate a line from a hash. The line might include '\n'.
29
+ # def genline(hash)
30
+ # line = [hash[:name], "#{hash[:number]}/%s"].join("\t\t")
31
+ # if hash[:alias]
32
+ # line += "\t\t" + hash[:alias].join(" ")
33
+ # end
34
+ # if hash[:description]
35
+ # line += "\t# " + hash[:description]
36
+ # end
37
+ #
38
+ # return hash[:protocols].collect { |p| line % p }.join("\n")
39
+ # end
40
+ #
41
+ # # Parse our sample data and make sure we regenerate it correctly.
42
+ # def test_portsparse
43
+ # files = fakedata("data/types/port")
44
+ # files.each do |file|
45
+ # oldtarget = @provider.default_target
46
+ # cleanup do
47
+ # @provider.default_target = oldtarget
48
+ # end
49
+ # @provider.default_target = file
50
+ #
51
+ # assert_nothing_raised("failed to fetch %s" % file) {
52
+ # @provider.prefetch
53
+ # }
54
+ #
55
+ # hashes = @provider.target_records(file).find_all { |i| i.is_a? Hash }
56
+ # assert(hashes.length > 0, "Did not create any hashes")
57
+ # dns = hashes.find { |i| i[:name] == "domain" }
58
+ #
59
+ # assert(dns, "Did not retrieve dns record")
60
+ # assert_equal("53", dns[:number], "dns number is wrong")
61
+ #
62
+ # text = nil
63
+ # assert_nothing_raised("failed to generate %s" % file) do
64
+ # text = @provider.to_file(@provider.target_records(file))
65
+ # end
66
+ #
67
+ # oldlines = File.readlines(file)
68
+ # newlines = text.chomp.split "\n"
69
+ # regex = /^(\S+)\s+(\d+)\/(\w+)/
70
+ # oldlines.zip(newlines).each do |old, new|
71
+ # if omatch = regex.match(old)
72
+ # assert(newmatch = regex.match(new),
73
+ # "Lines were not equivalent: %s vs %s" %
74
+ # [old.inspect, new.inspect]
75
+ # )
76
+ # oldfields = omatch.captures and
77
+ # newfields = newmatch.captures
78
+ #
79
+ # assert_equal(oldfields, newfields,
80
+ # "Lines were not equivalent: %s vs %s" %
81
+ # [old.inspect, new.inspect]
82
+ # )
83
+ # end
84
+ # # assert_equal(old.chomp.gsub(/\s+/, ''),
85
+ # # new.gsub(/\s+/, ''),
86
+ # # "Lines are not equal in %s" % file)
87
+ # end
88
+ # end
89
+ # end
90
+ #
91
+ # # Try parsing the different forms of lines
92
+ # def test_parsing
93
+ # # Each of the different possible values for each field.
94
+ # options = {
95
+ # :name => "service",
96
+ # :number => "1",
97
+ # :alias => [nil, ["null"], %w{null sink}, %w{null sink other}],
98
+ # :description => [nil, "my description"],
99
+ # :protocols => [%w{tcp}, %w{udp}, %w{tcp udp}]
100
+ # }
101
+ #
102
+ # # Now go through all of the different iterations and make sure we
103
+ # # parse them correctly.
104
+ # keys = options.keys
105
+ #
106
+ # name = options[:name]
107
+ # number = options[:number]
108
+ # options[:alias].each do |al|
109
+ # options[:description].each do |desc|
110
+ # options[:protocols].each do |proto|
111
+ # hash = {:name => name, :number => number, :alias => al,
112
+ # :description => desc, :protocols => proto}
113
+ # line = genline(hash)
114
+ #
115
+ # # Try parsing it
116
+ # record = nil
117
+ # assert_nothing_raised do
118
+ # record = @provider.parse_line(line)
119
+ # end
120
+ # assert(record, "Did not get record returned")
121
+ # hash.each do |param, value|
122
+ # if value
123
+ # assert_equal(value, record[param],
124
+ # "did not get %s out of '%s'" % [param, line])
125
+ # end
126
+ # end
127
+ #
128
+ # # Now make sure it generates correctly
129
+ # assert_equal(line, @provider.to_line(record),
130
+ # "Did not generate %s correctly" % line)
131
+ # end
132
+ # end
133
+ # end
134
+ # end
135
+ #
136
+ # # Make sure we correctly join lines by name, so that they're considered
137
+ # # a single record.
138
+ # def test_lines
139
+ # result = nil
140
+ # assert_nothing_raised do
141
+ # result = @provider.lines(
142
+ #"smtp 25/tcp mail
143
+ #time 37/tcp timserver
144
+ #time 37/udp timserver
145
+ #rlp 39/udp resource # resource location
146
+ #tacacs 49/tcp # Login Host Protocol (TACACS)
147
+ #nameserver 42/tcp name # IEN 116
148
+ #whois 43/tcp nicname
149
+ #tacacs 49/udp
150
+ #re-mail-ck 50/tcp # Remote Mail Checking Protocol
151
+ #domain 53/tcp nameserver # name-domain server
152
+ #re-mail-ck 50/udp
153
+ #domain 53/udp nameserver"
154
+ # )
155
+ # end
156
+ #
157
+ # assert_equal([
158
+ #"smtp 25/tcp mail",
159
+ #"time 37/tcp timserver
160
+ #time 37/udp timserver",
161
+ #"rlp 39/udp resource # resource location",
162
+ #"tacacs 49/tcp # Login Host Protocol (TACACS)
163
+ #tacacs 49/udp",
164
+ #"nameserver 42/tcp name # IEN 116",
165
+ #"whois 43/tcp nicname",
166
+ #"re-mail-ck 50/tcp # Remote Mail Checking Protocol
167
+ #re-mail-ck 50/udp",
168
+ #"domain 53/tcp nameserver # name-domain server
169
+ #domain 53/udp nameserver"
170
+ #], result)
171
+ #
172
+ # end
173
+ #
174
+ # # Make sure we correctly handle port merging.
175
+ # def test_port_merge
176
+ # fields = [:name, :number, :protocols, :alias, :description]
177
+ # base = %w{a 1}
178
+ #
179
+ # z = proc { |ary| h = {}; fields.zip(ary) { |p,v| h[p] = v if v }; h }
180
+ #
181
+ # # Make sure our zipper is working
182
+ # assert_equal({:name => "a", :number => "1", :protocols => %w{tcp udp}},
183
+ # z.call(["a", "1", %w{tcp udp}])
184
+ # )
185
+ #
186
+ # # Here we go through the different options, just testing each key
187
+ # # separately.
188
+ # {
189
+ # # The degenerate case - just two protocols
190
+ # [%w{tcp udp}] => [[%w{tcp}], [%w{udp}]],
191
+ #
192
+ # # one alias
193
+ # [%w{tcp udp}, %w{A}] => [[%w{tcp}, %w{A}], [%w{udp}]],
194
+ #
195
+ # # Other side
196
+ # [%w{tcp udp}, %w{A}] => [[%w{tcp}], [%w{udp}], %w{A}],
197
+ #
198
+ # # Both
199
+ # [%w{tcp udp}, %w{A}] => [[%w{tcp}, %w{A}], [%w{udp}], %w{A}],
200
+ #
201
+ # # Adding aliases
202
+ # [%w{tcp udp}, %w{A B}] => [[%w{tcp}, %w{A}], [%w{udp}], %w{B}],
203
+ #
204
+ # # Merging aliases
205
+ # [%w{tcp udp}, %w{A B}] => [[%w{tcp}, %w{A B}], [%w{udp}], %w{B}],
206
+ #
207
+ # # One description
208
+ # [%w{tcp udp}, nil, "desc"] => [[%w{tcp}, nil, "desc"], [%w{udp}] ],
209
+ #
210
+ # # other side
211
+ # [%w{tcp udp}, nil, "desc"] => [[%w{tcp}], [%w{udp}, nil, "desc"] ],
212
+ #
213
+ # # Conflicting -- first hash wins
214
+ # [%w{tcp udp}, nil, "first"] =>
215
+ # [[%w{tcp}, nil, "first"], [%w{udp}, nil, "desc"] ],
216
+ # }.each do |result, hashes|
217
+ # assert_equal(
218
+ # z.call(base + result),
219
+ # @provider.port_merge(
220
+ # z.call(base + hashes[0]),
221
+ # z.call(base + hashes[1])
222
+ # ),
223
+ # "Did not get %s out of %s + %s" % [
224
+ # result.inspect,
225
+ # hashes[0].inspect,
226
+ # hashes[1].inspect
227
+ # ]
228
+ # )
229
+ # end
230
+ # end
231
+ #end
232
+
233
+ # $Id: parsedport.rb 2178 2007-02-07 23:56:59Z luke $
@@ -0,0 +1,423 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'facter'
7
+
8
+ class TestProvider < Test::Unit::TestCase
9
+ include PuppetTest
10
+
11
+ def echo
12
+ echo = Puppet::Util.binary("echo")
13
+
14
+ unless echo
15
+ raise "Could not find 'echo' binary; cannot complete test"
16
+ end
17
+
18
+ return echo
19
+ end
20
+
21
+ def newprovider
22
+ # Create our provider
23
+ provider = Class.new(Puppet::Provider) do
24
+ @name = :fakeprovider
25
+ end
26
+ provider.initvars
27
+
28
+ return provider
29
+ end
30
+
31
+ def test_confine
32
+ provider = newprovider
33
+
34
+ assert(provider.suitable?,
35
+ "Marked unsuitable with no confines")
36
+
37
+ {
38
+ {:true => true} => true,
39
+ {:true => false} => false,
40
+ {:false => false} => true,
41
+ {:false => true} => false,
42
+ {:operatingsystem => Facter.value(:operatingsystem)} => true,
43
+ {:operatingsystem => :yayness} => false,
44
+ {:nothing => :yayness} => false,
45
+ {:exists => echo} => true,
46
+ {:exists => "/this/file/does/not/exist"} => false,
47
+ }.each do |hash, result|
48
+ # First test :true
49
+ hash.each do |test, val|
50
+ assert_nothing_raised do
51
+ provider.confine test => val
52
+ end
53
+ end
54
+
55
+ assert_equal(result, provider.suitable?,
56
+ "Failed for %s" % [hash.inspect])
57
+
58
+ provider.initvars
59
+ end
60
+
61
+ # Make sure multiple confines don't overwrite each other
62
+ provider.confine :true => false
63
+ assert(! provider.suitable?)
64
+ provider.confine :true => true
65
+ assert(! provider.suitable?)
66
+
67
+ provider.initvars
68
+
69
+ # Make sure we test multiple of them, and that a single false wins
70
+ provider.confine :true => true, :false => false
71
+ assert(provider.suitable?)
72
+ provider.confine :true => false
73
+ assert(! provider.suitable?)
74
+ end
75
+
76
+ def test_command
77
+ {:echo => "echo", :echo_with_path => echo, :missing => "nosuchcommand", :missing_qualified => "/path/to/nosuchcommand"}.each do |name, command|
78
+ provider = newprovider
79
+ assert_nothing_raised("Could not define command %s with argument %s for provider" % [name, command]) do
80
+ provider.commands(name => command)
81
+ end
82
+
83
+ if name.to_s =~ /missing/
84
+ assert_nil(provider.command(name), "Somehow got a response for missing commands")
85
+ assert(! provider.suitable?, "Provider was considered suitable with missing command")
86
+ next # skip, since we don't do any validity checking here.
87
+ end
88
+
89
+ assert_equal(echo, provider.command(name), "Did not get correct path for echo")
90
+ assert(provider.suitable?, "Provider was not considered suitable with 'echo'")
91
+
92
+ # Now make sure they both work
93
+ inst = provider.new(nil)
94
+ [provider, inst].each do |thing|
95
+ assert_nothing_raised("Could not call %s on %s" % [command, thing]) do
96
+ out = thing.send(name, "some", "text")
97
+ assert_equal("some text\n", out)
98
+ end
99
+ end
100
+
101
+ assert(provider.suitable?, "Provider considered unsuitable")
102
+
103
+ # Now add an invalid command
104
+ assert_nothing_raised do
105
+ provider.commands :fake => "nosuchcommanddefinitely"
106
+ end
107
+ assert(! provider.suitable?, "Provider considered suitable")
108
+
109
+ assert_nil(provider.command(:fake), "Got a value for missing command")
110
+ assert_raise(Puppet::Error) do
111
+ provider.fake
112
+ end
113
+
114
+ Puppet[:trace] = false
115
+ assert_raise(Puppet::DevError) do
116
+ provider.command(:nosuchcmd)
117
+ end
118
+
119
+ # Lastly, verify that we can find our superclass commands
120
+ newprov = Class.new(provider)
121
+ newprov.initvars
122
+
123
+ assert_equal(echo, newprov.command(name))
124
+ end
125
+ end
126
+
127
+ def test_default?
128
+ provider = newprovider
129
+
130
+ assert(! provider.default?, "Was considered default with no settings")
131
+
132
+ assert_nothing_raised do
133
+ provider.defaultfor :operatingsystem => Facter.value(:operatingsystem)
134
+ end
135
+
136
+ assert(provider.default?, "Was not considered default")
137
+
138
+ # Make sure any true value is sufficient.
139
+ assert_nothing_raised do
140
+ provider.defaultfor :operatingsystem => [
141
+ :yayness, :rahness,
142
+ Facter.value(:operatingsystem)
143
+ ]
144
+ end
145
+
146
+ assert(provider.default?, "Was not considered default")
147
+
148
+ # Now make sure that a random setting returns false.
149
+ assert_nothing_raised do
150
+ provider.defaultfor :operatingsystem => :yayness
151
+ end
152
+
153
+ assert(! provider.default?, "Was considered default")
154
+ end
155
+
156
+ # Make sure that failed commands get their output in the error.
157
+ def test_outputonfailure
158
+ provider = newprovider
159
+
160
+ dir = tstdir()
161
+ file = File.join(dir, "mycmd")
162
+ sh = Puppet::Util.binary("sh")
163
+ File.open(file, "w") { |f|
164
+ f.puts %{#!#{sh}
165
+ echo A Failure >&2
166
+ exit 2
167
+ }
168
+ }
169
+ File.chmod(0755, file)
170
+
171
+ provider.commands :cmd => file
172
+
173
+ inst = provider.new(nil)
174
+
175
+ assert_raise(Puppet::ExecutionFailure) do
176
+ inst.cmd "some", "arguments"
177
+ end
178
+
179
+ out = nil
180
+ begin
181
+ inst.cmd "some", "arguments"
182
+ rescue Puppet::ExecutionFailure => detail
183
+ out = detail.to_s
184
+ end
185
+
186
+ assert(out =~ /A Failure/,
187
+ "Did not receive command output on failure")
188
+
189
+ assert(out =~ /Execution of/,
190
+ "Did not receive info wrapper on failure")
191
+ end
192
+
193
+ def test_mkmodelmethods
194
+ prov = newprovider
195
+ modeltype = Struct.new(:validproperties, :parameters)
196
+ m = modeltype.new([:prop1, :prop2], [:param1, :param2])
197
+ prov.model = m
198
+
199
+ assert_nothing_raised("could not call mkmodelmethods") do
200
+ prov.mkmodelmethods
201
+ end
202
+
203
+ obj = prov.new(nil)
204
+
205
+ %w{prop1 prop2 param1 param2}.each do |param|
206
+ assert(prov.public_method_defined?(param), "no getter for %s" % param)
207
+ assert(prov.public_method_defined?(param + "="), "no setter for %s" % param)
208
+
209
+ assert_equal(:absent, obj.send(param),
210
+ "%s did not default to :absent")
211
+ val = "testing %s" % param
212
+ assert_nothing_raised("Could not call setter for %s" % param) do
213
+ obj.send(param + "=", val)
214
+ end
215
+ assert_equal(val, obj.send(param),
216
+ "did not get correct value for %s" % param)
217
+ end
218
+ end
219
+
220
+ # Make sure optional commands get looked up but don't affect suitability.
221
+ def test_optional_commands
222
+ type = Puppet::Type.newtype(:optional_commands) {}
223
+
224
+ cleanup { Puppet::Type.rmtype(:optional_commands) }
225
+
226
+ # Define a provider with mandatory commands
227
+ required = type.provide(:required) {
228
+ commands :missing => "/no/such/binary/definitely"
229
+ }
230
+
231
+ # And another with optional commands
232
+ optional = type.provide(:optional) {
233
+ optional_commands :missing => "/no/such/binary/definitely"
234
+ }
235
+
236
+ assert(! required.suitable?, "Provider with missing commands considered suitable")
237
+ assert_nil(required.command(:missing), "Provider returned non-nil from missing command")
238
+
239
+ assert(optional.suitable?, "Provider with optional commands considered unsuitable")
240
+ assert_nil(optional.command(:missing), "Provider returned non-nil from missing command")
241
+
242
+ assert_raise(Puppet::Error, "Provider did not fail when missing command was called") do
243
+ optional.missing
244
+ end
245
+ end
246
+ end
247
+
248
+ class TestProviderFeatures < Test::Unit::TestCase
249
+ include PuppetTest
250
+
251
+ def setup
252
+ super
253
+ @type = Puppet::Type.newtype(:feature_test) do
254
+ newparam(:name) {}
255
+ ensurable
256
+ end
257
+ cleanup { Puppet::Type.rmtype(:feature_test) }
258
+
259
+ @features = {:numeric => [:one, :two], :alpha => [:a, :b]}
260
+
261
+ @features.each do |name, methods|
262
+ assert_nothing_raised("Could not define features") do
263
+ @type.feature(name, "boo", :methods => methods)
264
+ end
265
+ end
266
+ end
267
+
268
+ # Give them the basic run-through.
269
+ def test_method_features
270
+ @providers = {:numbers => @features[:numeric], :letters => @features[:alpha]}
271
+ @providers[:both] = @features[:numeric] + @features[:alpha]
272
+ @providers[:mixed] = [:one, :b]
273
+ @providers[:neither] = [:something, :else]
274
+
275
+ @providers.each do |name, methods|
276
+ assert_nothing_raised("Could not create provider %s" % name) do
277
+ @type.provide(name) do
278
+ methods.each do |name|
279
+ define_method(name) {}
280
+ end
281
+ end
282
+ end
283
+ end
284
+
285
+ model = @type.create(:name => "foo")
286
+ {:numbers => [:numeric], :letters => [:alpha], :both => [:numeric, :alpha],
287
+ :mixed => [], :neither => []}.each do |name, should|
288
+ should.sort! { |a,b| a.to_s <=> b.to_s }
289
+ provider = @type.provider(name)
290
+ assert(provider, "Could not find provider %s" % name)
291
+ assert_equal(should, provider.features,
292
+ "Provider %s has incorrect features" % name)
293
+
294
+ inst = provider.new(model)
295
+ # Make sure the boolean methods work on both the provider and
296
+ # instance.
297
+ @features.keys.each do |feature|
298
+ method = feature.to_s + "?"
299
+ assert(inst.respond_to?(method),
300
+ "No boolean instance method for %s on %s" %
301
+ [name, feature])
302
+ assert(provider.respond_to?(method),
303
+ "No boolean class method for %s on %s" % [name, feature])
304
+
305
+ if should.include?(feature)
306
+ assert(provider.feature?(feature),
307
+ "class missing feature? %s" % feature)
308
+ assert(inst.feature?(feature),
309
+ "instance missing feature? %s" % feature)
310
+ assert(provider.send(method),
311
+ "class missing feature %s" % feature)
312
+ assert(inst.send(method),
313
+ "instance missing feature %s" % feature)
314
+ assert(inst.satisfies?(feature),
315
+ "instance.satisfy %s returned false" % feature)
316
+ else
317
+ assert(! provider.feature?(feature),
318
+ "class has feature? %s" % feature)
319
+ assert(! inst.feature?(feature),
320
+ "instance has feature? %s" % feature)
321
+ assert(! provider.send(method),
322
+ "class has feature %s" % feature)
323
+ assert(! inst.send(method),
324
+ "instance has feature %s" % feature)
325
+ assert(! inst.satisfies?(feature),
326
+ "instance.satisfy %s returned true" % feature)
327
+ end
328
+ end
329
+
330
+ end
331
+
332
+ Puppet[:trace] = true
333
+ Puppet::Type.loadall
334
+ Puppet::Type.eachtype do |type|
335
+ assert(type.respond_to?(:feature),
336
+ "No features method defined for %s" % type.name)
337
+ end
338
+ end
339
+
340
+ def test_has_feature
341
+ # Define a new feature that has no methods
342
+ @type.feature(:nomeths, "desc")
343
+
344
+ # Define a provider with nothing
345
+ provider = @type.provide(:nothing) {}
346
+
347
+ assert(provider.respond_to?(:has_features),
348
+ "Provider did not get 'has_features' method added")
349
+
350
+ # One with the numeric methods and nothing else
351
+ @type.provide(:numbers) do
352
+ define_method(:one) {}
353
+ define_method(:two) {}
354
+ end
355
+
356
+ # Another with the numbers and a declaration
357
+ @type.provide(:both) do
358
+ define_method(:one) {}
359
+ define_method(:two) {}
360
+
361
+ has_features :alpha
362
+ end
363
+
364
+ # And just the declaration
365
+ @type.provide(:letters) do
366
+ has_features :alpha
367
+ end
368
+
369
+ # And a provider that declares it has our methodless feature.
370
+ @type.provide(:none) do
371
+ has_features :nomeths
372
+ end
373
+
374
+ should = {:nothing => [], :both => [:numeric, :alpha],
375
+ :letters => [:alpha], :numbers => [:numeric],
376
+ :none => [:nomeths]}
377
+
378
+ should.each do |name, features|
379
+ provider = @type.provider(name)
380
+ assert(provider, "did not get provider named %s" % name)
381
+ features.sort! { |a,b| a.to_s <=> b.to_s }
382
+ assert_equal(features, provider.features,
383
+ "Got incorrect feature list for %s" % name)
384
+ end
385
+ end
386
+
387
+ def test_supports_parameter?
388
+ # Make some parameters for each setting
389
+ @type.newparam(:neither) {}
390
+ @type.newparam(:some, :required_features => :alpha)
391
+ @type.newparam(:both, :required_features => [:alpha, :numeric])
392
+
393
+ # and appropriate providers
394
+ nope = @type.provide(:nope) {}
395
+ maybe = @type.provide(:maybe) { has_features(:alpha) }
396
+ yep = @type.provide(:yep) { has_features(:alpha, :numeric) }
397
+
398
+ # Now make sure our providers answer correctly.
399
+ [nope, maybe, yep].each do |prov|
400
+ assert(prov.respond_to?(:supports_parameter?), "%s does not respond to :supports_parameter?" % prov.name)
401
+ case prov.name
402
+ when :nope:
403
+ supported = [:neither]
404
+ un = [:some, :both]
405
+ when :maybe:
406
+ supported = [:neither, :some]
407
+ un = [:both]
408
+ when :yep:
409
+ supported = [:neither, :some, :both]
410
+ un = []
411
+ end
412
+
413
+ supported.each do |param|
414
+ assert(prov.supports_parameter?(param), "%s was not supported by %s" % [param, prov.name])
415
+ end
416
+ un.each do |param|
417
+ assert(! prov.supports_parameter?(param), "%s was incorrectly supported by %s" % [param, prov.name])
418
+ end
419
+ end
420
+ end
421
+ end
422
+
423
+ # $Id: provider.rb 2444 2007-05-01 03:14:09Z luke $