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
@@ -0,0 +1,240 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+
7
+ class TestTidy < Test::Unit::TestCase
8
+ include PuppetTest::FileTesting
9
+ def mktmpfile
10
+ # because luke's home directory is on nfs, it can't be used for testing
11
+ # as root
12
+ tmpfile = tempfile()
13
+ File.open(tmpfile, "w") { |f| f.puts rand(100) }
14
+ @@tmpfiles.push tmpfile
15
+ return tmpfile
16
+ end
17
+
18
+ def mktmpdir
19
+ dir = File.join(tmpdir(), "puppetlinkdir")
20
+ unless FileTest.exists?(dir)
21
+ Dir.mkdir(dir)
22
+ end
23
+ @@tmpfiles.push dir
24
+ return dir
25
+ end
26
+
27
+ def test_tidydirs
28
+ dir = mktmpdir
29
+ file = File.join(dir, "file")
30
+ File.open(file, "w") { |f|
31
+ f.puts "some stuff"
32
+ }
33
+
34
+ tidy = Puppet.type(:tidy).create(
35
+ :name => dir,
36
+ :size => "1b",
37
+ :rmdirs => true,
38
+ :recurse => true
39
+ )
40
+
41
+ assert_events([:file_tidied, :file_tidied], tidy)
42
+
43
+ assert(!FileTest.exists?(file), "Tidied %s still exists" % file)
44
+ assert(!FileTest.exists?(dir), "Tidied %s still exists" % dir)
45
+
46
+ end
47
+
48
+ def disabled_test_recursion
49
+ source = mktmpdir()
50
+ FileUtils.cd(source) {
51
+ mkranddirsandfiles()
52
+ }
53
+
54
+ link = nil
55
+ assert_nothing_raised {
56
+ link = newlink(:target => source, :recurse => true)
57
+ }
58
+ comp = newcomp("linktest",link)
59
+ cycle(comp)
60
+
61
+ path = link.name
62
+ list = file_list(path)
63
+ FileUtils.cd(path) {
64
+ list.each { |file|
65
+ unless FileTest.directory?(file)
66
+ assert(FileTest.symlink?(file))
67
+ target = File.readlink(file)
68
+ assert_equal(target,File.join(source,file.sub(/^\.\//,'')))
69
+ end
70
+ }
71
+ }
72
+ end
73
+
74
+ # Test the different age iterations.
75
+ def test_age_conversions
76
+ tidy = Puppet::Type.newtidy :path => tempfile(), :age => "1m"
77
+
78
+ convertors = {
79
+ :second => 1,
80
+ :minute => 60
81
+ }
82
+
83
+ convertors[:hour] = convertors[:minute] * 60
84
+ convertors[:day] = convertors[:hour] * 24
85
+ convertors[:week] = convertors[:day] * 7
86
+
87
+ # First make sure we default to days
88
+ assert_nothing_raised do
89
+ tidy[:age] = "2"
90
+ end
91
+
92
+ assert_equal(2 * convertors[:day], tidy.should(:age),
93
+ "Converted 2 wrong")
94
+
95
+ convertors.each do |name, number|
96
+ init = name.to_s[0..0] # The first letter
97
+ [0, 1, 5].each do |multi|
98
+ [init, init.upcase].each do |letter|
99
+ age = multi.to_s + letter.to_s
100
+ assert_nothing_raised do
101
+ tidy[:age] = age
102
+ end
103
+
104
+ assert_equal(multi * convertors[name], tidy.should(:age),
105
+ "Converted %s wrong" % age)
106
+ end
107
+ end
108
+ end
109
+ end
110
+
111
+ def test_size_conversions
112
+ convertors = {
113
+ :b => 0,
114
+ :kb => 1,
115
+ :mb => 2,
116
+ :gb => 3
117
+ }
118
+
119
+ tidy = Puppet::Type.newtidy :path => tempfile(), :age => "1m"
120
+
121
+ # First make sure we default to kb
122
+ assert_nothing_raised do
123
+ tidy[:size] = "2"
124
+ end
125
+
126
+ assert_equal(2048, tidy.should(:size),
127
+ "Converted 2 wrong")
128
+
129
+ convertors.each do |name, number|
130
+ init = name.to_s[0..0] # The first letter
131
+ [0, 1, 5].each do |multi|
132
+ [init, init.upcase].each do |letter|
133
+ size = multi.to_s + letter.to_s
134
+ assert_nothing_raised do
135
+ tidy[:size] = size
136
+ end
137
+
138
+ total = multi
139
+ number.times do total *= 1024 end
140
+
141
+ assert_equal(total, tidy.should(:size),
142
+ "Converted %s wrong" % size)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ def test_agetest
149
+ tidy = Puppet::Type.newtidy :path => tempfile(), :age => "1m"
150
+
151
+ age = tidy.property(:age)
152
+
153
+ # Set it to something that should be fine
154
+ age.is = Time.now.to_i - 5
155
+
156
+ assert(age.insync?, "Tried to tidy a low age")
157
+
158
+ # Now to something that should fail
159
+ age.is = Time.now.to_i - 120
160
+
161
+ assert(! age.insync?, "Incorrectly skipped tidy")
162
+ end
163
+
164
+ def test_sizetest
165
+ tidy = Puppet::Type.newtidy :path => tempfile(), :size => "1k"
166
+
167
+ size = tidy.property(:size)
168
+
169
+ # Set it to something that should be fine
170
+ size.is = 50
171
+
172
+ assert(size.insync?, "Tried to tidy a low size")
173
+
174
+ # Now to something that should fail
175
+ size.is = 2048
176
+
177
+ assert(! size.insync?, "Incorrectly skipped tidy")
178
+ end
179
+
180
+ # Make sure we can remove different types of files
181
+ def test_tidytypes
182
+ path = tempfile()
183
+ tidy = Puppet::Type.newtidy :path => path, :size => "1b", :age => "1s"
184
+
185
+ # Start with a file
186
+ File.open(path, "w") { |f| f.puts "this is a test" }
187
+ assert_events([:file_tidied], tidy)
188
+ assert(! FileTest.exists?(path), "File was not removed")
189
+
190
+ # Then a link
191
+ dest = tempfile
192
+ File.open(dest, "w") { |f| f.puts "this is a test" }
193
+ File.symlink(dest, path)
194
+ assert_events([:file_tidied], tidy)
195
+ assert(! FileTest.exists?(path), "Link was not removed")
196
+ assert(FileTest.exists?(dest), "Destination was removed")
197
+
198
+ # And a directory
199
+ Dir.mkdir(path)
200
+ tidy.is = [:ensure, [Time.now - 1024, 1]]
201
+ tidy[:rmdirs] = true
202
+ assert_events([:file_tidied], tidy)
203
+ assert(! FileTest.exists?(path), "File was not removed")
204
+ end
205
+
206
+ # Make sure we can specify either attribute and get appropriate behaviour.
207
+ # I found that the original implementation of this did not work unless both
208
+ # size and age were specified.
209
+ def test_one_attribute
210
+ path = tempfile()
211
+ File.open(path, "w") { |f| 10.times { f.puts "yayness " } }
212
+ tidy = Puppet::Type.type(:tidy).create :path => path, :size => "1b"
213
+
214
+ assert_apply(tidy)
215
+ assert(! FileTest.exists?(path), "file did not get tidied")
216
+
217
+ # Now try one with just an age attribute.
218
+ File.open(path, "w") { |f| 10.times { f.puts "yayness " } }
219
+ tidy = Puppet::Type.type(:tidy).create :path => path, :age => "5s"
220
+
221
+ tidy.property(:age).is = "0s"
222
+ assert_apply(tidy)
223
+ assert(! FileTest.exists?(path), "file did not get tidied")
224
+ end
225
+
226
+ # Testing #355.
227
+ def test_remove_dead_links
228
+ dir = tempfile()
229
+ link = File.join(dir, "link")
230
+ target = tempfile()
231
+ Dir.mkdir(dir)
232
+ File.symlink(target, link)
233
+
234
+ tidy = Puppet::Type.newtidy :path => dir, :size => "1b", :recurse => true
235
+ assert_apply(tidy)
236
+ assert(! FileTest.symlink?(link), "link was not tidied")
237
+ end
238
+ end
239
+
240
+ # $Id: tidy.rb 2170 2007-02-07 17:21:52Z luke $
@@ -0,0 +1,493 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'etc'
7
+
8
+ class TestUser < Test::Unit::TestCase
9
+ include PuppetTest
10
+
11
+ p = Puppet::Type.type(:user).provide :fake, :parent => PuppetTest::FakeProvider do
12
+ @name = :fake
13
+ apimethods
14
+ def create
15
+ @ensure = :present
16
+ @model.eachproperty do |property|
17
+ next if property.name == :ensure
18
+ property.sync
19
+ end
20
+ end
21
+
22
+ def delete
23
+ @ensure = :absent
24
+ @model.eachproperty do |property|
25
+ send(property.name.to_s + "=", :absent)
26
+ end
27
+ end
28
+
29
+ def exists?
30
+ if defined? @ensure and @ensure == :present
31
+ true
32
+ else
33
+ false
34
+ end
35
+ end
36
+ end
37
+
38
+ FakeUserProvider = p
39
+
40
+ @@fakeproviders[:group] = p
41
+
42
+ def findshell(old = nil)
43
+ %w{/bin/sh /bin/bash /sbin/sh /bin/ksh /bin/zsh /bin/csh /bin/tcsh
44
+ /usr/bin/sh /usr/bin/bash /usr/bin/ksh /usr/bin/zsh /usr/bin/csh
45
+ /usr/bin/tcsh}.find { |shell|
46
+ if old
47
+ FileTest.exists?(shell) and shell != old
48
+ else
49
+ FileTest.exists?(shell)
50
+ end
51
+ }
52
+ end
53
+
54
+ def setup
55
+ super
56
+ Puppet::Type.type(:user).defaultprovider = FakeUserProvider
57
+ end
58
+
59
+ def teardown
60
+ Puppet::Type.type(:user).defaultprovider = nil
61
+ super
62
+ end
63
+
64
+ def mkuser(name)
65
+ user = nil
66
+ assert_nothing_raised {
67
+ user = Puppet.type(:user).create(
68
+ :name => name,
69
+ :comment => "Puppet Testing User",
70
+ :gid => Puppet::Util::SUIDManager.gid,
71
+ :shell => findshell(),
72
+ :home => "/home/%s" % name
73
+ )
74
+ }
75
+
76
+ assert(user, "Did not create user")
77
+
78
+ return user
79
+ end
80
+
81
+ def attrtest_ensure(user)
82
+ old = user.provider.ensure
83
+ user[:ensure] = :absent
84
+
85
+ comp = newcomp("ensuretest", user)
86
+ assert_apply(user)
87
+ assert(!user.provider.exists?, "User is still present")
88
+ user[:ensure] = :present
89
+ assert_events([:user_created], comp)
90
+ assert(user.provider.exists?, "User is absent")
91
+ user[:ensure] = :absent
92
+ trans = assert_events([:user_removed], comp)
93
+
94
+ assert_rollback_events(trans, [:user_created], "user")
95
+
96
+ user[:ensure] = old
97
+ assert_apply(user)
98
+ end
99
+
100
+ def attrtest_comment(user)
101
+ user.retrieve
102
+ old = user.provider.comment
103
+ user[:comment] = "A different comment"
104
+
105
+ comp = newcomp("commenttest", user)
106
+
107
+ trans = assert_events([:user_changed], comp, "user")
108
+
109
+ assert_equal("A different comment", user.provider.comment,
110
+ "Comment was not changed")
111
+
112
+ assert_rollback_events(trans, [:user_changed], "user")
113
+
114
+ assert_equal(old, user.provider.comment,
115
+ "Comment was not reverted")
116
+ end
117
+
118
+ def attrtest_home(user)
119
+ obj = nil
120
+ comp = newcomp("hometest", user)
121
+
122
+ old = user.provider.home
123
+ user[:home] = old
124
+
125
+ trans = assert_events([], comp, "user")
126
+
127
+ user[:home] = "/tmp"
128
+
129
+ trans = assert_events([:user_changed], comp, "user")
130
+
131
+ assert_equal("/tmp", user.provider.home, "Home was not changed")
132
+
133
+ assert_rollback_events(trans, [:user_changed], "user")
134
+
135
+ assert_equal(old, user.provider.home, "Home was not reverted")
136
+ end
137
+
138
+ def attrtest_shell(user)
139
+ old = user.provider.shell
140
+ comp = newcomp("shelltest", user)
141
+
142
+ user[:shell] = old
143
+
144
+ trans = assert_events([], comp, "user")
145
+
146
+ newshell = findshell(old)
147
+
148
+ unless newshell
149
+ $stderr.puts "Cannot find alternate shell; skipping shell test"
150
+ return
151
+ end
152
+
153
+ user[:shell] = newshell
154
+
155
+ trans = assert_events([:user_changed], comp, "user")
156
+
157
+ user.retrieve
158
+ assert_equal(newshell, user.provider.shell,
159
+ "Shell was not changed")
160
+
161
+ assert_rollback_events(trans, [:user_changed], "user")
162
+ user.retrieve
163
+
164
+ assert_equal(old, user.provider.shell, "Shell was not reverted")
165
+ end
166
+
167
+ def attrtest_gid(user)
168
+ obj = nil
169
+ old = user.provider.gid
170
+ comp = newcomp("gidtest", user)
171
+
172
+ user.retrieve
173
+
174
+ user[:gid] = old
175
+
176
+ trans = assert_events([], comp, "user")
177
+
178
+ newgid = %w{nogroup nobody staff users daemon}.find { |gid|
179
+ begin
180
+ group = Etc.getgrnam(gid)
181
+ rescue ArgumentError => detail
182
+ next
183
+ end
184
+ old != group.gid and group.gid > 0
185
+ }
186
+
187
+ unless newgid
188
+ $stderr.puts "Cannot find alternate group; skipping gid test"
189
+ return
190
+ end
191
+
192
+ # first test by name
193
+ assert_nothing_raised("Failed to specify group by name") {
194
+ user[:gid] = newgid
195
+ }
196
+
197
+ trans = assert_events([:user_changed], comp, "user")
198
+
199
+ # then by id
200
+ newgid = Etc.getgrnam(newgid).gid
201
+
202
+ assert_nothing_raised("Failed to specify group by id for %s" % newgid) {
203
+ user[:gid] = newgid
204
+ }
205
+
206
+ user.retrieve
207
+
208
+ assert_events([], comp, "user")
209
+
210
+ assert_equal(newgid, user.provider.gid, "GID was not changed")
211
+
212
+ assert_rollback_events(trans, [:user_changed], "user")
213
+
214
+ assert_equal(old, user.provider.gid, "GID was not reverted")
215
+ end
216
+
217
+ def attrtest_uid(user)
218
+ obj = nil
219
+ comp = newcomp("uidtest", user)
220
+
221
+ user.provider.uid = 1
222
+
223
+ old = 1
224
+ newuid = 1
225
+ while true
226
+ newuid += 1
227
+
228
+ if newuid - old > 1000
229
+ $stderr.puts "Could not find extra test UID"
230
+ return
231
+ end
232
+ begin
233
+ newuser = Etc.getpwuid(newuid)
234
+ rescue ArgumentError => detail
235
+ break
236
+ end
237
+ end
238
+
239
+ assert_nothing_raised("Failed to change user id") {
240
+ user[:uid] = newuid
241
+ }
242
+
243
+ trans = assert_events([:user_changed], comp, "user")
244
+
245
+ assert_equal(newuid, user.provider.uid, "UID was not changed")
246
+
247
+ assert_rollback_events(trans, [:user_changed], "user")
248
+
249
+ assert_equal(old, user.provider.uid, "UID was not reverted")
250
+ end
251
+
252
+ def attrtest_groups(user)
253
+ Etc.setgrent
254
+ max = 0
255
+ while group = Etc.getgrent
256
+ if group.gid > max and group.gid < 5000
257
+ max = group.gid
258
+ end
259
+ end
260
+
261
+ groups = []
262
+ main = []
263
+ extra = []
264
+ 5.times do |i|
265
+ i += 1
266
+ name = "pptstgr%s" % i
267
+ groups << name
268
+ if i < 3
269
+ main << name
270
+ else
271
+ extra << name
272
+ end
273
+ end
274
+
275
+ assert(user[:membership] == :minimum, "Membership did not default correctly")
276
+
277
+ assert_nothing_raised {
278
+ user.retrieve
279
+ }
280
+
281
+ # Now add some of them to our user
282
+ assert_nothing_raised {
283
+ user[:groups] = extra
284
+ }
285
+ assert_nothing_raised {
286
+ user.retrieve
287
+ }
288
+
289
+ assert_instance_of(String, user.property(:groups).should)
290
+
291
+ # Some tests to verify that groups work correctly startig from nothing
292
+ # Remove our user
293
+ user[:ensure] = :absent
294
+ assert_apply(user)
295
+
296
+ assert_nothing_raised do
297
+ user.retrieve
298
+ end
299
+
300
+ # And add it again
301
+ user[:ensure] = :present
302
+ assert_apply(user)
303
+
304
+ # Make sure that the groups are a string, not an array
305
+ assert(user.provider.groups.is_a?(String),
306
+ "Incorrectly passed an array to groups")
307
+
308
+ user.retrieve
309
+
310
+ assert(user.property(:groups).is, "Did not retrieve group list")
311
+
312
+ list = user.property(:groups).is
313
+ assert_equal(extra.sort, list.sort, "Group list is not equal")
314
+
315
+ # Now set to our main list of groups
316
+ assert_nothing_raised {
317
+ user[:groups] = main
318
+ }
319
+
320
+ assert_equal((main + extra).sort, user.property(:groups).should.split(",").sort)
321
+
322
+ assert_nothing_raised {
323
+ user.retrieve
324
+ }
325
+
326
+ assert(!user.insync?, "User is incorrectly in sync")
327
+
328
+ assert_apply(user)
329
+
330
+ assert_nothing_raised {
331
+ user.retrieve
332
+ }
333
+
334
+ # We're not managing inclusively, so it should keep the old group
335
+ # memberships and add the new ones
336
+ list = user.property(:groups).is
337
+ assert_equal((main + extra).sort, list.sort, "Group list is not equal")
338
+
339
+ assert_nothing_raised {
340
+ user[:membership] = :inclusive
341
+ }
342
+ assert_nothing_raised {
343
+ user.retrieve
344
+ }
345
+
346
+ assert(!user.insync?, "User is incorrectly in sync")
347
+
348
+ assert_events([:user_changed], user)
349
+ assert_nothing_raised {
350
+ user.retrieve
351
+ }
352
+
353
+ list = user.property(:groups).is
354
+ assert_equal(main.sort, list.sort, "Group list is not equal")
355
+
356
+ # Set the values a bit differently.
357
+ user.property(:groups).should = list.sort { |a,b| b <=> a }
358
+ user.property(:groups).is = list.sort
359
+
360
+ assert(user.property(:groups).insync?, "Groups property did not sort groups")
361
+
362
+ user.delete(:groups)
363
+ end
364
+
365
+ def test_autorequire
366
+ file = tempfile()
367
+ comp = nil
368
+ user = nil
369
+ group =nil
370
+ home = nil
371
+ ogroup = nil
372
+ assert_nothing_raised {
373
+ user = Puppet.type(:user).create(
374
+ :name => "pptestu",
375
+ :home => file,
376
+ :gid => "pptestg",
377
+ :groups => "yayness"
378
+ )
379
+ home = Puppet.type(:file).create(
380
+ :path => file,
381
+ :owner => "pptestu",
382
+ :ensure => "directory"
383
+ )
384
+ group = Puppet.type(:group).create(
385
+ :name => "pptestg"
386
+ )
387
+ ogroup = Puppet.type(:group).create(
388
+ :name => "yayness"
389
+ )
390
+ comp = newcomp(user, group, home, ogroup)
391
+ }
392
+
393
+ rels = nil
394
+ assert_nothing_raised() { rels = user.autorequire }
395
+
396
+ assert(rels.detect { |r| r.source == group }, "User did not require group")
397
+ assert(rels.detect { |r| r.source == ogroup }, "User did not require other groups")
398
+ assert_nothing_raised() { rels = home.autorequire }
399
+ assert(rels.detect { |r| r.source == user }, "Homedir did not require user")
400
+ end
401
+
402
+ def test_simpleuser
403
+ name = "pptest"
404
+
405
+ user = mkuser(name)
406
+
407
+ comp = newcomp("usercomp", user)
408
+
409
+ trans = assert_events([:user_created], comp, "user")
410
+
411
+ assert_equal(user.should(:comment), user.provider.comment,
412
+ "Comment was not set correctly")
413
+
414
+ assert_rollback_events(trans, [:user_removed], "user")
415
+
416
+ assert(! user.provider.exists?, "User did not get deleted")
417
+ end
418
+
419
+ def test_allusermodelproperties
420
+ user = nil
421
+ name = "pptest"
422
+
423
+ user = mkuser(name)
424
+
425
+ assert(! user.provider.exists?, "User %s is present" % name)
426
+
427
+ comp = newcomp("usercomp", user)
428
+
429
+ trans = assert_events([:user_created], comp, "user")
430
+
431
+ user.retrieve
432
+ assert_equal("Puppet Testing User", user.provider.comment,
433
+ "Comment was not set")
434
+
435
+ tests = Puppet.type(:user).validproperties
436
+
437
+ tests.each { |test|
438
+ if self.respond_to?("attrtest_%s" % test)
439
+ self.send("attrtest_%s" % test, user)
440
+ else
441
+ Puppet.err "Not testing attr %s of user" % test
442
+ end
443
+ }
444
+
445
+ user[:ensure] = :absent
446
+ assert_apply(user)
447
+ end
448
+
449
+ # Testing #455
450
+ def test_autorequire_with_no_group_should
451
+ user = Puppet::Type.type(:user).create(:name => "yaytest", :check => :all)
452
+
453
+ assert_nothing_raised do
454
+ user.autorequire
455
+ end
456
+
457
+ user[:ensure] = :absent
458
+
459
+ assert_nothing_raised do
460
+ user.evaluate
461
+ end
462
+
463
+ assert(user.send(:property, :groups).insync?,
464
+ "Groups state considered out of sync with no :should value")
465
+ end
466
+
467
+ # Make sure the 'managehome' param can only be set when the provider
468
+ # has that feature. Uses a patch from #432.
469
+ def test_managehome
470
+ user = Puppet::Type.type(:user).create(:name => "yaytest", :check => :all)
471
+
472
+ prov = user.provider
473
+
474
+ home = false
475
+ prov.class.meta_def(:manages_homedir?) { home }
476
+
477
+ assert_nothing_raised("failed on false managehome") do
478
+ user[:managehome] = false
479
+ end
480
+
481
+ assert_raise(ArgumentError, "did not fail when managehome? is false") do
482
+ user[:managehome] = true
483
+ end
484
+
485
+ home = true
486
+ assert(prov.class.manages_homedir?, "provider did not enable homedir")
487
+ assert_nothing_raised("failed when managehome is true") do
488
+ user[:managehome] = true
489
+ end
490
+ end
491
+ end
492
+
493
+ # $Id: user.rb 2328 2007-03-19 21:29:08Z luke $