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,138 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'puppet/network/authorization'
7
+ require 'mocha'
8
+
9
+ class TestAuthConfig < Test::Unit::TestCase
10
+ include PuppetTest
11
+
12
+ # A mock class for authconfig
13
+ class FakeAuth
14
+ class << self
15
+ attr_accessor :allow, :exists
16
+ end
17
+ def allowed?(req)
18
+ self.class.allow
19
+ end
20
+ def exists?
21
+ self.class.exists
22
+ end
23
+ end
24
+
25
+ class AuthTest
26
+ include Puppet::Network::Authorization
27
+
28
+ def clear
29
+ @loaded.clear
30
+ end
31
+
32
+ def load(name)
33
+ @loaded ||= []
34
+ @loaded << name
35
+ end
36
+
37
+ def handler_loaded?(name)
38
+ @loaded ||= []
39
+ @loaded.include?(name)
40
+ end
41
+ end
42
+
43
+ def setup
44
+ super
45
+ @obj = AuthTest.new
46
+
47
+ # Override the authconfig to make life easier
48
+ class << @obj
49
+ def authconfig
50
+ @authconfig ||= FakeAuth.new
51
+ @authconfig
52
+ end
53
+ end
54
+ @request = Puppet::Network::ClientRequest.new("host", "ip", false)
55
+ @request.handler = "foo"
56
+ @request.method = "bar"
57
+ end
58
+
59
+ def test_authconfig
60
+ obj = AuthTest.new
61
+ auth = nil
62
+ assert_nothing_raised { auth = obj.send(:authconfig) }
63
+ assert(auth, "did not get auth")
64
+ assert_equal(Puppet::Network::AuthConfig.main.object_id, auth.object_id,
65
+ "did not get main authconfig")
66
+ end
67
+
68
+ def test_authorize
69
+ # Make sure that unauthenticated clients can do puppetca stuff, but
70
+ # nothing else.
71
+ @request.handler = "puppetca"
72
+ @request.method = "yay"
73
+ assert(@obj.authorized?(@request), "Did not allow unauthenticated ca call")
74
+ assert_logged(:notice, /Allowing/, "did not log call")
75
+ @request.handler = "other"
76
+ assert(! @obj.authorized?(@request), "Allowed unauthencated other call")
77
+ assert_logged(:notice, /Denying/, "did not log call")
78
+
79
+ @request.authenticated = true
80
+ # We start without the namespace auth file, so everything should
81
+ # start out denied
82
+ assert(! @obj.authorized?(@request), "Allowed call with no config file")
83
+ assert_logged(:notice, /Denying/, "did not log call")
84
+
85
+ # Now set our name to the master, so calls are allowed
86
+ Puppet[:name] = "puppetmasterd"
87
+ assert(@obj.authorized?(@request),
88
+ "Denied call with no config file and master")
89
+ assert_logged(:debug, /Allowing/, "did not log call")
90
+
91
+ # Now "create" the file, so we do real tests
92
+ FakeAuth.exists = true
93
+
94
+ # We start out denying
95
+ assert(! @obj.authorized?(@request), "Allowed call when denying")
96
+ assert_logged(:notice, /Denying/, "did not log call")
97
+
98
+ FakeAuth.allow = true
99
+ assert(@obj.authorized?(@request), "Denied call when allowing")
100
+ assert_logged(:debug, /Allowing/, "did not log call")
101
+ end
102
+
103
+ def test_available?
104
+ # Start out false
105
+ assert(! @obj.available?(@request), "Defaulted to true")
106
+ assert_logged(:warning, /requested unavailable/, "did not log call")
107
+
108
+ @obj.load(@request.handler)
109
+ assert(@obj.available?(@request), "did not see it loaded")
110
+ end
111
+
112
+ # Make sure we raise things appropriately
113
+ def test_verify
114
+ # Start out unavailabl
115
+ assert_raise(Puppet::Network::InvalidClientRequest) do
116
+ @obj.verify(@request)
117
+ end
118
+ class << @obj
119
+ def available?(req)
120
+ true
121
+ end
122
+ end
123
+ assert_raise(Puppet::Network::InvalidClientRequest) do
124
+ @obj.verify(@request)
125
+ end
126
+ class << @obj
127
+ def authorized?(req)
128
+ true
129
+ end
130
+ end
131
+ assert_nothing_raised do
132
+ @obj.verify(@request)
133
+ end
134
+ end
135
+ end
136
+
137
+ # $Id: authorization.rb 2259 2007-03-06 19:03:05Z luke $
138
+
@@ -0,0 +1,450 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'mocha'
7
+ require 'puppet/network/authstore'
8
+
9
+ class TestAuthStore < Test::Unit::TestCase
10
+ include PuppetTest
11
+ Declaration = Puppet::Network::AuthStore::Declaration
12
+ def mkstore
13
+ store = nil
14
+ assert_nothing_raised {
15
+ store = Puppet::Network::AuthStore.new
16
+ }
17
+
18
+ return store
19
+ end
20
+
21
+ def setup
22
+ super
23
+ @store = mkstore
24
+ end
25
+
26
+ def test_localallow
27
+ Puppet[:trace] = false
28
+ assert_nothing_raised {
29
+ assert(@store.allowed?(nil, nil), "Store disallowed local access")
30
+ }
31
+
32
+ assert_raise(Puppet::DevError) {
33
+ @store.allowed?("kirby.madstop.com", nil)
34
+ }
35
+
36
+ assert_raise(Puppet::DevError) {
37
+ @store.allowed?(nil, "192.168.0.1")
38
+ }
39
+ end
40
+
41
+ def test_simpleips
42
+ %w{
43
+ 192.168.0.5
44
+ 7.0.48.7
45
+ }.each { |ip|
46
+ assert_nothing_raised("Failed to @store IP address %s" % ip) {
47
+ @store.allow(ip)
48
+ }
49
+
50
+ assert(@store.allowed?("hosttest.com", ip), "IP %s not allowed" % ip)
51
+ }
52
+
53
+ #assert_raise(Puppet::AuthStoreError) {
54
+ # @store.allow("192.168.674.0")
55
+ #}
56
+
57
+ assert_raise(Puppet::AuthStoreError) {
58
+ @store.allow("192.168.0")
59
+ }
60
+ end
61
+
62
+ def test_ipranges
63
+ %w{
64
+ 192.168.0.*
65
+ 192.168.1.0/24
66
+ 192.178.*
67
+ 193.179.0.0/8
68
+ }.each { |range|
69
+ assert_nothing_raised("Failed to @store IP range %s" % range) {
70
+ @store.allow(range)
71
+ }
72
+ }
73
+
74
+ %w{
75
+ 192.168.0.1
76
+ 192.168.1.5
77
+ 192.178.0.5
78
+ 193.0.0.1
79
+ }.each { |ip|
80
+ assert(@store.allowed?("fakename.com", ip), "IP %s is not allowed" % ip)
81
+ }
82
+ end
83
+
84
+ def test_iprangedenials
85
+ assert_nothing_raised("Failed to @store overlapping IP ranges") {
86
+ @store.allow("192.168.0.0/16")
87
+ @store.deny("192.168.0.0/24")
88
+ }
89
+
90
+ assert(@store.allowed?("fake.name", "192.168.1.50"), "/16 ip not allowed")
91
+ assert(! @store.allowed?("fake.name", "192.168.0.50"), "/24 ip allowed")
92
+ end
93
+
94
+ def test_subdomaindenails
95
+ assert_nothing_raised("Failed to @store overlapping IP ranges") {
96
+ @store.allow("*.madstop.com")
97
+ @store.deny("*.sub.madstop.com")
98
+ }
99
+
100
+ assert(@store.allowed?("hostname.madstop.com", "192.168.1.50"),
101
+ "hostname not allowed")
102
+ assert(! @store.allowed?("name.sub.madstop.com", "192.168.0.50"),
103
+ "subname name allowed")
104
+ end
105
+
106
+ def test_orderingstuff
107
+ assert_nothing_raised("Failed to @store overlapping IP ranges") {
108
+ @store.allow("*.madstop.com")
109
+ @store.deny("192.168.0.0/24")
110
+ }
111
+
112
+ assert(@store.allowed?("hostname.madstop.com", "192.168.1.50"),
113
+ "hostname not allowed")
114
+ assert(! @store.allowed?("hostname.madstop.com", "192.168.0.50"),
115
+ "Host allowed over IP")
116
+ end
117
+
118
+ def test_globalallow
119
+ assert_nothing_raised("Failed to add global allow") {
120
+ @store.allow("*")
121
+ }
122
+
123
+ [
124
+ %w{hostname.com 192.168.0.4},
125
+ %w{localhost 192.168.0.1},
126
+ %w{localhost 127.0.0.1}
127
+
128
+ ].each { |ary|
129
+ assert(@store.allowed?(*ary), "Failed to allow %s" % [ary.join(",")])
130
+ }
131
+ end
132
+
133
+ def test_store
134
+ assert_nothing_raised do
135
+ assert_nil(@store.send(:store, :allow, "*.host.com"),
136
+ "store did not return nil")
137
+ end
138
+ assert_equal([Declaration.new(:allow, "*.host.com")],
139
+ @store.send(:instance_variable_get, "@declarations"),
140
+ "Did not store declaration")
141
+
142
+ # Now add another one and make sure it gets sorted appropriately
143
+ assert_nothing_raised do
144
+ assert_nil(@store.send(:store, :allow, "me.host.com"),
145
+ "store did not return nil")
146
+ end
147
+
148
+ assert_equal([
149
+ Declaration.new(:allow, "me.host.com"),
150
+ Declaration.new(:allow, "*.host.com")
151
+ ],
152
+ @store.send(:instance_variable_get, "@declarations"),
153
+ "Did not sort declarations")
154
+ end
155
+
156
+ def test_allow_and_deny
157
+ store = Puppet::Network::AuthStore.new
158
+ store.expects(:store).with(:allow, "host.com")
159
+ store.allow("host.com")
160
+
161
+ store = Puppet::Network::AuthStore.new
162
+ store.expects(:store).with(:deny, "host.com")
163
+ store.deny("host.com")
164
+
165
+ store = Puppet::Network::AuthStore.new
166
+ assert_nothing_raised do
167
+ assert_nil(store.allow("*"),
168
+ "allow did not return nil")
169
+ end
170
+
171
+ assert(store.globalallow?,
172
+ "did not enable global allow")
173
+ end
174
+
175
+ def test_hostnames
176
+ Puppet[:trace] = false
177
+ %w{
178
+ kirby.madstop.com
179
+ luke.madstop.net
180
+ name-other.madstop.net
181
+ }.each { |name|
182
+ assert_nothing_raised("Failed to @store simple name %s" % name) {
183
+ @store.allow(name)
184
+ }
185
+ assert(@store.allowed?(name, "192.168.0.1"), "Name %s not allowed" % name)
186
+ }
187
+
188
+ %w{
189
+ invalid
190
+ ^invalid!
191
+ inval$id
192
+
193
+ }.each { |pat|
194
+ assert_raise(Puppet::AuthStoreError,
195
+ "name '%s' was allowed" % pat) {
196
+ @store.allow(pat)
197
+ }
198
+ }
199
+ end
200
+
201
+ def test_domains
202
+ assert_nothing_raised("Failed to @store domains") {
203
+ @store.allow("*.a.very.long.domain.name.com")
204
+ @store.allow("*.madstop.com")
205
+ @store.allow("*.some-other.net")
206
+ @store.allow("*.much.longer.more-other.net")
207
+ }
208
+
209
+ %w{
210
+ madstop.com
211
+ culain.madstop.com
212
+ kirby.madstop.com
213
+ funtest.some-other.net
214
+ ya-test.madstop.com
215
+ some.much.much.longer.more-other.net
216
+ }.each { |name|
217
+ assert(@store.allowed?(name, "192.168.0.1"), "Host %s not allowed" % name)
218
+ }
219
+
220
+ assert_raise(Puppet::AuthStoreError) {
221
+ @store.allow("domain.*.com")
222
+ }
223
+
224
+ assert(!@store.allowed?("very.long.domain.name.com", "1.2.3.4"),
225
+ "Long hostname allowed")
226
+
227
+ assert_raise(Puppet::AuthStoreError) {
228
+ @store.allow("domain.*.other.com")
229
+ }
230
+ end
231
+
232
+ # #531
233
+ def test_case_insensitivity
234
+ @store.allow("hostname.com")
235
+
236
+ %w{hostname.com Hostname.COM hostname.Com HOSTNAME.COM}.each do |name|
237
+ assert(@store.allowed?(name, "127.0.0.1"),
238
+ "did not allow %s" % name)
239
+ end
240
+ end
241
+
242
+ def test_allowed?
243
+ Puppet[:trace] = false
244
+ assert(@store.allowed?(nil, nil),
245
+ "Did not default to true for local checks")
246
+ assert_raise(Puppet::DevError, "did not fail on one input") do
247
+ @store.allowed?("host.com", nil)
248
+ end
249
+ assert_raise(Puppet::DevError, "did not fail on one input") do
250
+ @store.allowed?(nil, "192.168.0.1")
251
+ end
252
+
253
+ end
254
+
255
+ # Make sure more specific allows and denies win over generalities
256
+ def test_specific_overrides
257
+ @store.allow("host.madstop.com")
258
+ @store.deny("*.madstop.com")
259
+
260
+ assert(@store.allowed?("host.madstop.com", "192.168.0.1"),
261
+ "More specific allowal by name failed")
262
+
263
+ @store.allow("192.168.0.1")
264
+ @store.deny("192.168.0.0/24")
265
+
266
+ assert(@store.allowed?("host.madstop.com", "192.168.0.1"),
267
+ "More specific allowal by ip failed")
268
+ end
269
+ end
270
+
271
+ class TestAuthStoreDeclaration < PuppetTest::TestCase
272
+ include PuppetTest
273
+ Declaration = Puppet::Network::AuthStore::Declaration
274
+
275
+ def setup
276
+ super
277
+ @decl = Declaration.new(:allow, "hostname.com")
278
+ end
279
+
280
+ def test_parse
281
+ {
282
+ "192.168.0.1" => [:ip, IPAddr.new("192.168.0.1"), nil],
283
+ "2001:700:300:1800::" => [:ip, IPAddr.new("2001:700:300:1800::"), nil],
284
+ "2001:700:300:1800::/64" => [:ip, IPAddr.new("2001:700:300:1800::/64"), 64],
285
+ "192.168.0.1/32" => [:ip, IPAddr.new("192.168.0.1/32"), 32],
286
+ "192.168.0.1/24" => [:ip, IPAddr.new("192.168.0.1/24"), 24],
287
+ "192.*" => [:ip, IPAddr.new("192.0.0.0/8"), 8],
288
+ "192.168.*" => [:ip, IPAddr.new("192.168.0.0/16"), 16],
289
+ "192.168.0.*" => [:ip, IPAddr.new("192.168.0.0/24"), 24],
290
+ "hostname.com" => [:domain, %w{com hostname}, nil],
291
+ "Hostname.COM" => [:domain, %w{com hostname}, nil],
292
+ "billy.Hostname.COM" => [:domain, %w{com hostname billy}, nil],
293
+ "billy-jean.Hostname.COM" => [:domain, %w{com hostname billy-jean}, nil],
294
+ "*.hostname.COM" => [:domain, %w{com hostname}, 2],
295
+ "*.hostname.COM" => [:domain, %w{com hostname}, 2]
296
+ }.each do |input, output|
297
+
298
+ # Create a new decl each time, so values aren't cached.
299
+ assert_nothing_raised do
300
+ @decl = Declaration.new(:allow, input)
301
+ end
302
+
303
+ [:name, :pattern, :length].zip(output).each do |method, value|
304
+ assert_equal(value, @decl.send(method),
305
+ "Got incorrect value for %s from %s" % [method, input])
306
+ end
307
+ end
308
+
309
+ %w{192.168 hostname -hostname.com hostname.*}.each do |input|
310
+ assert_raise(Puppet::AuthStoreError, "Did not fail on %s" % input) do
311
+ @decl.pattern = input
312
+ end
313
+ end
314
+
315
+ ["hostname .com", "192.168 .0.1"].each do |input|
316
+ assert_raise(Puppet::AuthStoreError, "Did not fail on %s" % input) do
317
+ @decl.pattern = input
318
+ end
319
+ end
320
+ end
321
+
322
+ def test_result
323
+ ["allow", :allow].each do |val|
324
+ assert_nothing_raised { @decl.type = val }
325
+ assert_equal(true, @decl.result, "did not result to true with %s" %
326
+ val.inspect)
327
+ end
328
+
329
+ [:deny, "deny"].each do |val|
330
+ assert_nothing_raised { @decl.type = val }
331
+ assert_equal(false, @decl.result,
332
+ "did not result to false with %s" % val.inspect)
333
+ end
334
+
335
+ ["yay", 1, nil, false, true].each do |val|
336
+ assert_raise(ArgumentError, "Did not fail on %s" % val.inspect) do
337
+ @decl.type = val
338
+ end
339
+ end
340
+ end
341
+
342
+ def test_munge_name
343
+ {
344
+ "hostname.com" => %w{com hostname},
345
+ "alley.hostname.com" => %w{com hostname alley},
346
+ "*.hostname.com" => %w{com hostname *},
347
+ "*.HOSTNAME.Com" => %w{com hostname *},
348
+ "*.HOSTNAME.Com" => %w{com hostname *},
349
+
350
+ }.each do |input, output|
351
+ assert_equal(output, @decl.send(:munge_name, input),
352
+ "munged %s incorrectly" % input)
353
+ end
354
+ end
355
+
356
+ # Make sure people can specify TLDs
357
+ def test_match_tlds
358
+ assert_nothing_raised {
359
+ @decl.pattern = "*.tld"
360
+ }
361
+
362
+ assert_equal(%w{tld}, @decl.pattern, "Failed to allow custom tld")
363
+ end
364
+
365
+ # Make sure we sort correctly.
366
+ def test_sorting
367
+ # Make sure declarations with no length sort first.
368
+ host_exact = Declaration.new(:allow, "host.com")
369
+ host_range = Declaration.new(:allow, "*.host.com")
370
+
371
+ ip_exact = Declaration.new(:allow, "192.168.0.1")
372
+ ip_range = Declaration.new(:allow, "192.168.0.*")
373
+
374
+ assert_equal(-1, host_exact <=> host_range,
375
+ "exact name match did not sort first")
376
+
377
+ assert_equal(-1, ip_exact <=> ip_range,
378
+ "exact ip match did not sort first")
379
+
380
+ # Next make sure we sort by length
381
+ ip_long = Declaration.new(:allow, "192.168.*")
382
+ assert_equal(-1, ip_range <=> ip_long, "/16 sorted before /24 in ip")
383
+
384
+ # Now try it using masks
385
+ ip24 = Declaration.new(:allow, "192.168.0.0/24")
386
+ ip16 = Declaration.new(:allow, "192.168.0.0/16")
387
+
388
+ assert_equal(-1, ip24 <=> ip16, "/16 sorted before /24 in ip with masks")
389
+
390
+ # Make sure ip checks sort before host checks
391
+ assert_equal(-1, ip_exact <=> host_exact,
392
+ "IP exact did not sort before host exact")
393
+
394
+ assert_equal(-1, ip_range <=> host_range,
395
+ "IP range did not sort before host range")
396
+
397
+ host_long = Declaration.new(:allow, "*.domain.host.com")
398
+
399
+ assert_equal(-1, host_long <=> host_range, "did not sort by domain length")
400
+
401
+ # Now make sure denies sort before allows, for equivalent
402
+ # declarations.
403
+ host_deny = Declaration.new(:deny, "host.com")
404
+ assert_equal(-1, host_deny <=> host_exact, "deny did not sort before allow when exact")
405
+
406
+ host_range_deny = Declaration.new(:deny, "*.host.com")
407
+ assert_equal(-1, host_range_deny <=> host_range,
408
+ "deny did not sort before allow when ranged")
409
+
410
+ ip_allow = Declaration.new(:allow, "192.168.0.0/16")
411
+ ip_deny = Declaration.new(:deny, "192.168.0.0/16")
412
+
413
+ assert_equal(-1, ip_deny <=> ip_allow,
414
+ "deny did not sort before allow in ip range")
415
+
416
+ %w{host.com *.domain.com 192.168.0.1 192.168.0.1/24}.each do |decl|
417
+ assert_equal(0, Declaration.new(:allow, decl) <=>
418
+ Declaration.new(:allow, decl),
419
+ "Equivalent declarations for %s were considered different" %
420
+ decl
421
+ )
422
+ end
423
+ end
424
+
425
+ def test_match?
426
+ host = Declaration.new(:allow, "host.com")
427
+ host.expects(:matchname?).with("host.com")
428
+ host.match?("host.com", "192.168.0.1")
429
+
430
+ ip = Declaration.new(:allow, "192.168.0.1")
431
+ ip.pattern.expects(:include?)
432
+ ip.match?("host.com", "192.168.0.1")
433
+ end
434
+
435
+ def test_matchname?
436
+ host = Declaration.new(:allow, "host.com")
437
+ assert(host.send(:matchname?, "host.com"), "exact did not match")
438
+ assert(! host.send(:matchname?, "yay.com"), "incorrect match")
439
+
440
+ domain = Declaration.new(:allow, "*.domain.com")
441
+ %w{host.domain.com domain.com very.long.domain.com very-long.domain.com
442
+ }.each do |name|
443
+ assert(domain.send(:matchname?, name),
444
+ "Did not match %s" % name)
445
+ end
446
+ end
447
+ end
448
+
449
+ # $Id: authstore.rb 2262 2007-03-08 00:16:53Z luke $
450
+