puppet 0.18.4 → 0.22.4

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -1,21 +1,14 @@
1
- if __FILE__ == $0
2
- $:.unshift '..'
3
- $:.unshift '../../lib'
4
- $puppetbase = "../../../../language/trunk"
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
6
  require 'puppettest'
9
- require 'test/unit'
10
7
 
11
- # $Id: events.rb 1179 2006-05-05 19:47:15Z luke $
8
+ # $Id: events.rb 1918 2006-12-13 17:59:21Z luke $
12
9
 
13
10
  class TestEvents < Test::Unit::TestCase
14
- include TestPuppet
15
- def teardown
16
- super
17
- Puppet::Event::Subscription.clear
18
- end
11
+ include PuppetTest
19
12
 
20
13
  def test_simplesubscribe
21
14
  name = tempfile()
@@ -32,7 +25,7 @@ class TestEvents < Test::Unit::TestCase
32
25
 
33
26
  comp = newcomp("eventtesting", file, exec)
34
27
 
35
- trans = assert_events([:file_created], comp)
28
+ trans = assert_events([:file_created, :triggered], comp)
36
29
 
37
30
  assert_equal(1, trans.triggered?(exec, :refresh))
38
31
  end
@@ -128,27 +121,41 @@ class TestEvents < Test::Unit::TestCase
128
121
  assert(FileTest.exists?(fname), "Exec file did not get created")
129
122
  end
130
123
 
124
+ # Make sure refreshing happens mid-transaction, rather than at the end.
131
125
  def test_refreshordering
132
126
  file = tempfile()
133
127
 
134
128
  exec1 = Puppet.type(:exec).create(
129
+ :title => "one",
135
130
  :name => "echo one >> %s" % file,
136
131
  :path => "/usr/bin:/bin"
137
132
  )
138
133
 
139
134
  exec2 = Puppet.type(:exec).create(
135
+ :title => "two",
140
136
  :name => "echo two >> %s" % file,
141
137
  :path => "/usr/bin:/bin",
142
138
  :refreshonly => true,
143
- :subscribe => ["exec", exec1.name]
139
+ :subscribe => exec1
144
140
  )
145
141
 
146
142
  exec3 = Puppet.type(:exec).create(
143
+ :title => "three",
147
144
  :name => "echo three >> %s" % file,
148
- :path => "/usr/bin:/bin"
145
+ :path => "/usr/bin:/bin",
146
+ :require => exec2
149
147
  )
148
+ execs = [exec1, exec2, exec3]
150
149
 
151
150
  comp = newcomp(exec1,exec2,exec3)
151
+
152
+ trans = comp.evaluate
153
+ execs.each do |e| assert(trans.resources.vertex?(e), "%s is not in graph" % e.title) end
154
+ trans.prepare
155
+ execs.each do |e| assert(trans.relgraph.vertex?(e), "%s is not in relgraph" % e.title) end
156
+ reverse = trans.relgraph.reversal
157
+ execs.each do |e| assert(reverse.vertex?(e), "%s is not in reversed graph" % e.title) end
158
+
152
159
 
153
160
  assert_apply(comp)
154
161
 
@@ -1,15 +1,12 @@
1
- if __FILE__ == $0
2
- $:.unshift '..'
3
- $:.unshift '../../lib'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
6
  require 'puppettest'
9
- require 'test/unit'
10
7
 
11
8
  class TestOverrides < Test::Unit::TestCase
12
- include TestPuppet
9
+ include PuppetTest
13
10
  def mksubdirs(basedir, level)
14
11
  @@tmpfiles << basedir
15
12
  dir = basedir.dup
@@ -30,6 +27,7 @@ class TestOverrides < Test::Unit::TestCase
30
27
  basefile = File.join(basedir, "file")
31
28
  assert_nothing_raised("Could not create base obj") {
32
29
  baseobj = Puppet.type(:file).create(
30
+ :title => "base",
33
31
  :path => basedir,
34
32
  :recurse => true,
35
33
  :mode => "755"
@@ -41,23 +39,20 @@ class TestOverrides < Test::Unit::TestCase
41
39
  subfile = File.join(subdir, "file")
42
40
  assert_nothing_raised("Could not create sub obj") {
43
41
  subobj = Puppet.type(:file).create(
42
+ :title => "sub",
44
43
  :path => subdir,
45
44
  :recurse => true,
46
45
  :mode => "644"
47
46
  )
48
47
  }
49
48
 
50
- comp = newcomp("overrides", baseobj, subobj)
51
- assert_nothing_raised("Could not eval component") {
52
- trans = comp.evaluate
53
- trans.evaluate
54
- }
49
+ assert_apply(baseobj, subobj)
55
50
 
56
51
  assert(File.stat(basefile).mode & 007777 == 0755)
57
52
  assert(File.stat(subfile).mode & 007777 == 0644)
58
53
  end
59
54
 
60
- def test_zdeepoverride
55
+ def test_deepoverride
61
56
  basedir = File.join(tmpdir(), "deepoverridetesting")
62
57
  mksubdirs(basedir, 10)
63
58
 
@@ -112,4 +107,4 @@ class TestOverrides < Test::Unit::TestCase
112
107
  end
113
108
  end
114
109
 
115
- # $Id: overrides.rb 787 2006-01-08 00:02:23Z luke $
110
+ # $Id: overrides.rb 1896 2006-12-01 04:11:11Z luke $
@@ -0,0 +1,289 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Luke Kanies on 2006-11-16.
4
+ # Copyright (c) 2006. All rights reserved.
5
+
6
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
7
+
8
+ require 'puppettest'
9
+ require 'puppettest/graph'
10
+
11
+ class TestPGraph < Test::Unit::TestCase
12
+ include PuppetTest
13
+ include PuppetTest::Graph
14
+
15
+ Edge = Puppet::Relationship
16
+
17
+ def test_clear
18
+ graph = Puppet::PGraph.new
19
+ graph.add_edge!("a", "b")
20
+ graph.add_vertex! "c"
21
+ assert_nothing_raised do
22
+ graph.clear
23
+ end
24
+ assert(graph.vertices.empty?, "Still have vertices after clear")
25
+ assert(graph.edges.empty?, "still have edges after clear")
26
+ end
27
+
28
+
29
+ def test_matching_edges
30
+ graph = Puppet::PGraph.new
31
+
32
+ event = Puppet::Event.new(:source => "a", :event => :yay)
33
+ none = Puppet::Event.new(:source => "a", :event => :NONE)
34
+
35
+ edges = {}
36
+
37
+ edges["a/b"] = Edge["a", "b", {:event => :yay, :callback => :refresh}]
38
+ edges["a/c"] = Edge["a", "c", {:event => :yay, :callback => :refresh}]
39
+
40
+ graph.add_edge!(edges["a/b"])
41
+
42
+ # Try it for the trivial case of one target and a matching event
43
+ assert_equal([edges["a/b"]], graph.matching_edges([event]))
44
+
45
+ # Make sure we get nothing with a different event
46
+ assert_equal([], graph.matching_edges([none]))
47
+
48
+ # Set up multiple targets and make sure we get them all back
49
+ graph.add_edge!(edges["a/c"])
50
+ assert_equal([edges["a/b"], edges["a/c"]].sort, graph.matching_edges([event]).sort)
51
+ assert_equal([], graph.matching_edges([none]))
52
+ end
53
+
54
+ def test_dependencies
55
+ graph = Puppet::PGraph.new
56
+
57
+ graph.add_edge!("a", "b")
58
+ graph.add_edge!("a", "c")
59
+ graph.add_edge!("b", "d")
60
+
61
+ assert_equal(%w{b c d}.sort, graph.dependents("a").sort)
62
+ assert_equal(%w{d}.sort, graph.dependents("b").sort)
63
+ assert_equal([].sort, graph.dependents("c").sort)
64
+
65
+ assert_equal(%w{a b}, graph.dependencies("d").sort)
66
+ assert_equal(%w{a}, graph.dependencies("b").sort)
67
+ assert_equal(%w{a}, graph.dependencies("c").sort)
68
+ assert_equal([], graph.dependencies("a").sort)
69
+
70
+ end
71
+
72
+ # Test that we can take a containment graph and rearrange it by dependencies
73
+ def test_splice
74
+ one, two, three, middle, top = build_tree
75
+ empty = Container.new("empty", [])
76
+ # Also, add an empty container to top
77
+ top.push empty
78
+
79
+ contgraph = top.to_graph
80
+
81
+ # Now add a couple of child files, so that we can test whether all
82
+ # containers get spliced, rather than just components.
83
+
84
+ # Now make a dependency graph
85
+ deps = Puppet::PGraph.new
86
+
87
+ contgraph.vertices.each do |v|
88
+ deps.add_vertex(v)
89
+ end
90
+
91
+ # We have to specify a relationship to our empty container, else it
92
+ # never makes it into the dep graph in the first place.
93
+ {one => two, "f" => "c", "h" => middle, "c" => empty}.each do |source, target|
94
+ deps.add_edge!(source, target, :callback => :refresh)
95
+ end
96
+
97
+ #contgraph.to_jpg(File.expand_path("~/Desktop/pics"), "main")
98
+ #deps.to_jpg(File.expand_path("~/Desktop/pics"), "before")
99
+ assert_nothing_raised { deps.splice!(contgraph, Container) }
100
+
101
+ assert(! deps.cyclic?, "Created a cyclic graph")
102
+
103
+ # Make sure there are no container objects remaining
104
+ #deps.to_jpg(File.expand_path("~/Desktop/pics"), "after")
105
+ c = deps.vertices.find_all { |v| v.is_a?(Container) }
106
+ assert(c.empty?, "Still have containers %s" % c.inspect)
107
+
108
+ # Now make sure the containers got spliced correctly.
109
+ contgraph.leaves(middle).each do |leaf|
110
+ assert(deps.edge?("h", leaf), "no edge for h => %s" % leaf)
111
+ end
112
+ one.each do |oobj|
113
+ two.each do |tobj|
114
+ assert(deps.edge?(oobj, tobj), "no %s => %s edge" % [oobj, tobj])
115
+ end
116
+ end
117
+
118
+ nons = deps.vertices.find_all { |v| ! v.is_a?(String) }
119
+ assert(nons.empty?,
120
+ "still contain non-strings %s" % nons.inspect)
121
+
122
+ deps.edges.each do |edge|
123
+ assert_equal({:callback => :refresh}, edge.label,
124
+ "Label was not copied for %s => %s" % [edge.source, edge.target])
125
+ end
126
+
127
+ # Now add some relationships to three, but only add labels to one of
128
+ # the relationships.
129
+
130
+ # Add a simple, label-less relationship
131
+ deps.add_edge!(two, three)
132
+ assert_nothing_raised { deps.splice!(contgraph, Container) }
133
+
134
+ # And make sure it stuck, with no labels.
135
+ assert_equal({}, deps.edge_label("c", "i"),
136
+ "label was created for c => i")
137
+
138
+ # Now add some edges with labels, in a way that should overwrite
139
+ deps.add_edge!("c", three, {:callback => :refresh})
140
+ assert_nothing_raised { deps.splice!(contgraph, Container) }
141
+
142
+ # And make sure the label got copied.
143
+ assert_equal({:callback => :refresh}, deps.edge_label("c", "i"),
144
+ "label was not copied for c => i")
145
+
146
+ # Lastly, add some new label-less edges and make sure the label stays.
147
+ deps.add_edge!(middle, three)
148
+ assert_nothing_raised { deps.splice!(contgraph, Container) }
149
+ assert_equal({:callback => :refresh}, deps.edge_label("c", "i"),
150
+ "label was lost for c => i")
151
+
152
+ # Now make sure the 'three' edges all have the label we've used.
153
+ # Note that this will not work when we support more than one type of
154
+ # subscription.
155
+ three.each do |child|
156
+ edge = deps.edge_class.new("c", child)
157
+ assert(deps.edge?(edge), "no c => %s edge" % child)
158
+ assert_equal({:callback => :refresh}, deps[edge],
159
+ "label was not retained for c => %s" % child)
160
+ end
161
+ end
162
+
163
+ def test_copy_label
164
+ graph = Puppet::PGraph.new
165
+
166
+ # First make an edge with no label
167
+ graph.add_edge!(:a, :b)
168
+ assert_nil(graph.edge_label(:a, :b), "Created a label")
169
+
170
+ # Now try to copy an empty label in.
171
+ graph.copy_label(:a, :b, {})
172
+
173
+ # It should just do nothing, since we copied an empty label.
174
+ assert_nil(graph.edge_label(:a, :b), "Created a label")
175
+
176
+ # Now copy in a real label.
177
+ graph.copy_label(:a, :b, {:callback => :yay})
178
+ assert_equal({:callback => :yay},
179
+ graph.edge_label(:a, :b), "Did not copy label")
180
+
181
+ # Now copy in a nil label
182
+ graph.copy_label(:a, :b, nil)
183
+ assert_equal({:callback => :yay},
184
+ graph.edge_label(:a, :b), "lost label")
185
+
186
+ # And an empty one.
187
+ graph.copy_label(:a, :b, {})
188
+ assert_equal({:callback => :yay},
189
+ graph.edge_label(:a, :b), "lost label")
190
+ end
191
+
192
+ def test_check_cycle
193
+ {
194
+ {:a => :b, :b => :a} => true,
195
+ {:a => :b, :b => :c, :c => :a} => true,
196
+ {:a => :b, :b => :c} => false,
197
+ }.each do |hash, result|
198
+ graph = Puppet::PGraph.new
199
+ hash.each do |a,b|
200
+ graph.add_edge!(a, b)
201
+ end
202
+
203
+ if result
204
+ assert_raise(Puppet::Error, "%s did not fail" % hash.inspect) do
205
+ graph.check_cycle(graph.topsort)
206
+ end
207
+ else
208
+ assert_nothing_raised("%s failed" % hash.inspect) do
209
+ graph.check_cycle(graph.topsort)
210
+ end
211
+ end
212
+ end
213
+ end
214
+
215
+ # This isn't really a unit test, it's just a way to do some graphing with
216
+ # tons of relationships so we can see how it performs.
217
+ def disabled_test_lots_of_relationships
218
+ containers = Puppet::PGraph.new
219
+ relationships = Puppet::PGraph.new
220
+ labels = %w{a b c d e}
221
+ conts = {}
222
+ vertices = {}
223
+ labels.each do |label|
224
+ vertices[label] = []
225
+ end
226
+ num = 100
227
+ num.times do |i|
228
+ labels.each do |label|
229
+ vertices[label] << ("%s%s" % [label, i])
230
+ end
231
+ end
232
+ labels.each do |label|
233
+ conts[label] = Container.new(label, vertices[label])
234
+ end
235
+
236
+ conts.each do |label, cont|
237
+ cont.each do |child|
238
+ containers.add_edge!(cont, child)
239
+ end
240
+ end
241
+ prev = nil
242
+ labels.inject(nil) do |prev, label|
243
+ if prev
244
+ containers.add_edge!(conts[prev], conts[label])
245
+ end
246
+ label
247
+ end
248
+
249
+ containers.to_jpg(File.expand_path("~/Desktop/pics/lots"), "start")
250
+
251
+ # Now create the relationship graph
252
+
253
+ # Make everything in both b and c require d1
254
+ %w{b c}.each do |label|
255
+ conts[label].each do |v|
256
+ relationships.add_edge!(v, "d1")
257
+ #relationships.add_edge!(v, conts["d"])
258
+ end
259
+ end
260
+
261
+ # Make most in b also require the appropriate thing in c
262
+ conts["b"].each do |v|
263
+ i = v.split('')[1]
264
+
265
+ relationships.add_edge!(v, "c%s" % i)
266
+ end
267
+
268
+ # And make d1 require most of e
269
+ num.times do |i|
270
+ relationships.add_edge!("d1", "e%s" % i)
271
+ end
272
+
273
+ containers.vertices.each do |v|
274
+ relationships.add_vertex!(v)
275
+ end
276
+ relationships.to_jpg(File.expand_path("~/Desktop/pics/lots"), "relationships")
277
+
278
+ time = Benchmark.realtime do
279
+ relationships.splice!(containers, Container)
280
+ end
281
+ relationships.to_jpg(File.expand_path("~/Desktop/pics/lots"), "final")
282
+ puts time
283
+ time = Benchmark.realtime do
284
+ relationships.topsort
285
+ end
286
+ end
287
+ end
288
+
289
+ # $Id: pgraph.rb 2230 2007-02-27 20:34:32Z luke $
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Luke A. Kanies on 2006-12-21.
4
+ # Copyright (c) 2006. All rights reserved.
5
+
6
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
7
+
8
+ require 'puppettest'
9
+
10
+ class TestPropertyChange < Test::Unit::TestCase
11
+ include PuppetTest
12
+ class FakeProperty < Puppet::Type::Property
13
+ attr_accessor :is, :should, :parent
14
+ attr_reader :noop
15
+ def change_to_s
16
+ "fake change"
17
+ end
18
+ def insync?
19
+ @is == @should
20
+ end
21
+ def log(msg)
22
+ Puppet::Util::Log.create(
23
+ :level => :info,
24
+ :source => self,
25
+ :message => msg
26
+ )
27
+ end
28
+ def noop
29
+ if defined? @noop
30
+ @noop
31
+ else
32
+ false
33
+ end
34
+ end
35
+ def path
36
+ "fakechange"
37
+ end
38
+ def should_to_s
39
+ @should.to_s
40
+ end
41
+ def sync
42
+ if insync?
43
+ return nil
44
+ else
45
+ @is = @should
46
+ return :fake_change
47
+ end
48
+ end
49
+ def to_s
50
+ path
51
+ end
52
+ end
53
+
54
+ def mkchange
55
+ property = FakeProperty.new :parent => "fakeparent"
56
+ property.is = :start
57
+ property.should = :finish
58
+ property.parent = :parent
59
+ change = nil
60
+ assert_nothing_raised do
61
+ change = Puppet::PropertyChange.new(property)
62
+ end
63
+ change.transaction = :trans
64
+
65
+ assert_equal(:start, change.is, "@is did not get copied")
66
+ assert_equal(:finish, change.should, "@should did not get copied")
67
+ assert_equal(%w{fakechange change}, change.path, "path did not get set correctly")
68
+
69
+ assert(! change.changed?, "change defaulted to already changed")
70
+
71
+ return change
72
+ end
73
+
74
+ def test_go
75
+ change = mkchange
76
+
77
+ coll = logcollector()
78
+
79
+ events = nil
80
+ # First make sure we get an immediate return
81
+ assert_nothing_raised do
82
+ events = change.go
83
+ end
84
+ assert_instance_of(Array, events, "events were not returned in an array")
85
+ assert_instance_of(Puppet::Event, events[0], "event array did not contain events")
86
+
87
+ event = events.shift
88
+ {:event => :fake_change, :transaction => :trans, :source => :parent}.each do |method, val|
89
+ assert_equal(val, event.send(method), "Event did not set %s correctly" % method)
90
+ end
91
+
92
+ # Disabled, because it fails when running the whole suite at once.
93
+ #assert(coll.detect { |l| l.message == "fake change" }, "Did not log change")
94
+ assert_equal(change.property.is, change.property.should, "did not call sync method")
95
+
96
+ # Now make sure that proxy sources can be set.
97
+ assert_nothing_raised do
98
+ change.proxy = :other
99
+ end
100
+ # Reset, so we change again
101
+ change.property.is = :start
102
+ change.is = :start
103
+ assert_nothing_raised do
104
+ events = change.go
105
+ end
106
+
107
+ assert_instance_of(Array, events, "events were not returned in an array")
108
+ assert_instance_of(Puppet::Event, events[0], "event array did not contain events")
109
+
110
+ event = events.shift
111
+ {:event => :fake_change, :transaction => :trans, :source => :other}.each do |method, val|
112
+ assert_equal(val, event.send(method), "Event did not set %s correctly" % method)
113
+ end
114
+
115
+ #assert(coll.detect { |l| l.message == "fake change" }, "Did not log change")
116
+ assert_equal(change.property.is, change.property.should, "did not call sync method")
117
+ end
118
+
119
+ # Related to #542. Make sure changes in noop mode produce the :noop event.
120
+ def test_noop_event
121
+ change = mkchange
122
+
123
+ assert(! change.skip?, "Change is already being skipped")
124
+
125
+ Puppet[:noop] = true
126
+
127
+ change.property.noop = true
128
+ p change.property.noop
129
+ assert(change.noop, "did not set noop")
130
+ assert(change.skip?, "setting noop did not mark change for skipping")
131
+
132
+ event = nil
133
+ assert_nothing_raised("Could not generate noop event") do
134
+ event = change.forward
135
+ end
136
+
137
+ assert_equal(1, event.length, "got wrong number of events")
138
+ assert_equal(:noop, event[0].event, "did not generate noop mode when in noop")
139
+ end
140
+ end
141
+
142
+ # $Id: propertychange.rb 2286 2007-03-17 23:16:37Z luke $