puppet 0.18.4 → 0.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -1,1314 +0,0 @@
1
- if __FILE__ == $0
2
- $:.unshift '..'
3
- $:.unshift '../../lib'
4
- $puppetbase = "../.."
5
- end
6
-
7
- require 'puppet'
8
- require 'test/unit'
9
- require 'fileutils'
10
- require 'puppettest'
11
-
12
- class TestFile < Test::Unit::TestCase
13
- include FileTesting
14
- # hmmm
15
- # this is complicated, because we store references to the created
16
- # objects in a central store
17
- def mkfile(hash)
18
- file = nil
19
- assert_nothing_raised {
20
- file = Puppet.type(:file).create(hash)
21
- }
22
- return file
23
- end
24
-
25
- def mktestfile
26
- # because luke's home directory is on nfs, it can't be used for testing
27
- # as root
28
- tmpfile = tempfile()
29
- File.open(tmpfile, "w") { |f| f.puts rand(100) }
30
- @@tmpfiles.push tmpfile
31
- mkfile(:name => tmpfile)
32
- end
33
-
34
- def setup
35
- super
36
- begin
37
- initstorage
38
- rescue
39
- system("rm -rf %s" % Puppet[:statefile])
40
- end
41
- end
42
-
43
- def teardown
44
- Puppet::Storage.clear
45
- system("rm -rf %s" % Puppet[:statefile])
46
- super
47
- end
48
-
49
- def initstorage
50
- Puppet::Storage.init
51
- Puppet::Storage.load
52
- end
53
-
54
- def clearstorage
55
- Puppet::Storage.store
56
- Puppet::Storage.clear
57
- end
58
-
59
- def test_owner
60
- file = mktestfile()
61
-
62
- users = {}
63
- count = 0
64
-
65
- # collect five users
66
- Etc.passwd { |passwd|
67
- if count > 5
68
- break
69
- else
70
- count += 1
71
- end
72
- users[passwd.uid] = passwd.name
73
- }
74
-
75
- fake = {}
76
- # find a fake user
77
- while true
78
- a = rand(1000)
79
- begin
80
- Etc.getpwuid(a)
81
- rescue
82
- fake[a] = "fakeuser"
83
- break
84
- end
85
- end
86
-
87
- uid, name = users.shift
88
- us = {}
89
- us[uid] = name
90
- users.each { |uid, name|
91
- assert_apply(file)
92
- assert_nothing_raised() {
93
- file[:owner] = name
94
- }
95
- assert_nothing_raised() {
96
- file.retrieve
97
- }
98
- assert_apply(file)
99
- }
100
- end
101
-
102
- def test_group
103
- file = mktestfile()
104
- [%x{groups}.chomp.split(/ /), Process.groups].flatten.each { |group|
105
- assert_nothing_raised() {
106
- file[:group] = group
107
- }
108
- assert(file.state(:group))
109
- assert(file.state(:group).should)
110
- }
111
- end
112
-
113
- if Process.uid == 0
114
- def test_createasuser
115
- dir = tmpdir()
116
-
117
- user = nonrootuser()
118
- path = File.join(tmpdir, "createusertesting")
119
- @@tmpfiles << path
120
-
121
- file = nil
122
- assert_nothing_raised {
123
- file = Puppet.type(:file).create(
124
- :path => path,
125
- :owner => user.name,
126
- :ensure => "file",
127
- :mode => "755"
128
- )
129
- }
130
-
131
- comp = newcomp("createusertest", file)
132
-
133
- assert_events([:file_created], comp)
134
- end
135
-
136
- def test_nofollowlinks
137
- basedir = tempfile()
138
- Dir.mkdir(basedir)
139
- file = File.join(basedir, "file")
140
- link = File.join(basedir, "link")
141
-
142
- File.open(file, "w", 0644) { |f| f.puts "yayness"; f.flush }
143
- File.symlink(file, link)
144
-
145
- # First test 'user'
146
- user = nonrootuser()
147
-
148
- inituser = File.lstat(link).uid
149
- File.lchown(inituser, nil, link)
150
-
151
- obj = nil
152
- assert_nothing_raised {
153
- obj = Puppet.type(:file).create(
154
- :name => link,
155
- :owner => user.name
156
- )
157
- }
158
- obj.retrieve
159
-
160
- # Make sure it defaults to managing the link
161
- assert_events([:file_changed], obj)
162
- assert_equal(user.uid, File.lstat(link).uid)
163
- assert_equal(inituser, File.stat(file).uid)
164
- File.chown(inituser, nil, file)
165
- File.lchown(inituser, nil, link)
166
-
167
- # Try following
168
- obj[:links] = :follow
169
- assert_events([:file_changed], obj)
170
- assert_equal(user.uid, File.stat(file).uid)
171
- assert_equal(inituser, File.lstat(link).uid)
172
-
173
- # And then explicitly managing
174
- File.chown(inituser, nil, file)
175
- File.lchown(inituser, nil, link)
176
- obj[:links] = :manage
177
- assert_events([:file_changed], obj)
178
- assert_equal(user.uid, File.lstat(link).uid)
179
- assert_equal(inituser, File.stat(file).uid)
180
-
181
- obj.delete(:owner)
182
- obj[:links] = :ignore
183
-
184
- # And then test 'group'
185
- group = nonrootgroup
186
-
187
- initgroup = File.stat(file).gid
188
- obj[:group] = group.name
189
-
190
- assert_events([:file_changed], obj)
191
- assert_equal(initgroup, File.stat(file).gid)
192
- assert_equal(group.gid, File.lstat(link).gid)
193
- File.chown(nil, initgroup, file)
194
- File.lchown(nil, initgroup, link)
195
-
196
- obj[:links] = :follow
197
- assert_events([:file_changed], obj)
198
- assert_equal(group.gid, File.stat(file).gid)
199
- File.chown(nil, initgroup, file)
200
- File.lchown(nil, initgroup, link)
201
-
202
- obj[:links] = :manage
203
- assert_events([:file_changed], obj)
204
- assert_equal(group.gid, File.lstat(link).gid)
205
- assert_equal(initgroup, File.stat(file).gid)
206
- end
207
-
208
- def test_ownerasroot
209
- file = mktestfile()
210
-
211
- users = {}
212
- count = 0
213
-
214
- # collect five users
215
- Etc.passwd { |passwd|
216
- if count > 5
217
- break
218
- else
219
- count += 1
220
- end
221
- next if passwd.uid < 0
222
- users[passwd.uid] = passwd.name
223
- }
224
-
225
- fake = {}
226
- # find a fake user
227
- while true
228
- a = rand(1000)
229
- begin
230
- Etc.getpwuid(a)
231
- rescue
232
- fake[a] = "fakeuser"
233
- break
234
- end
235
- end
236
-
237
- users.each { |uid, name|
238
- assert_nothing_raised() {
239
- file[:owner] = name
240
- }
241
- changes = []
242
- assert_nothing_raised() {
243
- changes << file.evaluate
244
- }
245
- assert(changes.length > 0)
246
- assert_apply(file)
247
- file.retrieve
248
- assert(file.insync?())
249
- assert_nothing_raised() {
250
- file[:owner] = uid
251
- }
252
- assert_apply(file)
253
- file.retrieve
254
- # make sure changing to number doesn't cause a sync
255
- assert(file.insync?())
256
- }
257
-
258
- # We no longer raise an error here, because we check at run time
259
- #fake.each { |uid, name|
260
- # assert_raise(Puppet::Error) {
261
- # file[:owner] = name
262
- # }
263
- # assert_raise(Puppet::Error) {
264
- # file[:owner] = uid
265
- # }
266
- #}
267
- end
268
-
269
- def test_groupasroot
270
- file = mktestfile()
271
- [%x{groups}.chomp.split(/ /), Process.groups].flatten.each { |group|
272
- assert_nothing_raised() {
273
- file[:group] = group
274
- }
275
- assert(file.state(:group))
276
- assert(file.state(:group).should)
277
- assert_apply(file)
278
- file.retrieve
279
- assert(file.insync?())
280
- assert_nothing_raised() {
281
- file.delete(:group)
282
- }
283
- }
284
- end
285
- else
286
- $stderr.puts "Run as root for complete owner and group testing"
287
- end
288
-
289
- def test_create
290
- %w{a b c d}.collect { |name| tempfile() + name.to_s }.each { |path|
291
- file =nil
292
- assert_nothing_raised() {
293
- file = Puppet.type(:file).create(
294
- :name => path,
295
- :ensure => "file"
296
- )
297
- }
298
- assert_events([:file_created], file)
299
- assert_events([], file)
300
- assert(FileTest.file?(path), "File does not exist")
301
- assert(file.insync?())
302
- @@tmpfiles.push path
303
- }
304
- end
305
-
306
- def test_create_dir
307
- basedir = tempfile()
308
- Dir.mkdir(basedir)
309
- %w{a b c d}.collect { |name| "#{basedir}/%s" % name }.each { |path|
310
- file = nil
311
- assert_nothing_raised() {
312
- file = Puppet.type(:file).create(
313
- :name => path,
314
- :ensure => "directory"
315
- )
316
- }
317
- assert(! FileTest.directory?(path), "Directory %s already exists" %
318
- [path])
319
- assert_events([:directory_created], file)
320
- assert_events([], file)
321
- assert(file.insync?())
322
- assert(FileTest.directory?(path))
323
- @@tmpfiles.push path
324
- }
325
- end
326
-
327
- def test_modes
328
- file = mktestfile
329
- # Set it to something else initially
330
- File.chmod(0775, file.name)
331
- [0644,0755,0777,0641].each { |mode|
332
- assert_nothing_raised() {
333
- file[:mode] = mode
334
- }
335
- assert_events([:file_changed], file)
336
- assert_events([], file)
337
-
338
- assert(file.insync?())
339
-
340
- assert_nothing_raised() {
341
- file.delete(:mode)
342
- }
343
- }
344
- end
345
-
346
- def test_checksums
347
- types = %w{md5 md5lite timestamp time}
348
- exists = "/tmp/sumtest-exists"
349
- nonexists = "/tmp/sumtest-nonexists"
350
-
351
- @@tmpfiles << exists
352
- @@tmpfiles << nonexists
353
-
354
- # try it both with files that exist and ones that don't
355
- files = [exists, nonexists]
356
- initstorage
357
- File.open(exists,File::CREAT|File::TRUNC|File::WRONLY) { |of|
358
- of.puts "initial text"
359
- }
360
- types.each { |type|
361
- files.each { |path|
362
- if Puppet[:debug]
363
- Puppet.warning "Testing %s on %s" % [type,path]
364
- end
365
- file = nil
366
- events = nil
367
- # okay, we now know that we have a file...
368
- assert_nothing_raised() {
369
- file = Puppet.type(:file).create(
370
- :name => path,
371
- :ensure => "file",
372
- :checksum => type
373
- )
374
- }
375
- comp = Puppet.type(:component).create(
376
- :name => "checksum %s" % type
377
- )
378
- comp.push file
379
- trans = nil
380
-
381
- file.retrieve
382
-
383
- if file.name !~ /nonexists/
384
- sum = file.state(:checksum)
385
- assert_equal(sum.is, sum.should)
386
- assert(sum.insync?)
387
- end
388
-
389
- events = assert_apply(comp)
390
-
391
- assert(! events.include?(:file_changed),
392
- "File incorrectly changed")
393
- assert_events([], comp)
394
-
395
- # We have to sleep because the time resolution of the time-based
396
- # mechanisms is greater than one second
397
- sleep 1
398
-
399
- assert_nothing_raised() {
400
- File.open(path,File::CREAT|File::TRUNC|File::WRONLY) { |of|
401
- of.puts "some more text, yo"
402
- }
403
- }
404
- Puppet.type(:file).clear
405
- Puppet.type(:component).clear
406
-
407
- # now recreate the file
408
- assert_nothing_raised() {
409
- file = Puppet.type(:file).create(
410
- :name => path,
411
- :checksum => type
412
- )
413
- }
414
- comp = Puppet.type(:component).create(
415
- :name => "checksum, take 2, %s" % type
416
- )
417
- comp.push file
418
- trans = nil
419
-
420
- # If the file was missing, it should not generate an event
421
- # when it gets created.
422
- #if path =~ /nonexists/
423
- # assert_events([], comp)
424
- #else
425
- assert_events([:file_changed], comp)
426
- #end
427
- assert_nothing_raised() {
428
- File.unlink(path)
429
- File.open(path,File::CREAT|File::TRUNC|File::WRONLY) { |of|
430
- # We have to put a certain amount of text in here or
431
- # the md5-lite test fails
432
- 2.times {
433
- of.puts rand(100)
434
- }
435
- of.flush
436
- }
437
- }
438
- #assert_apply(comp)
439
- assert_events([:file_changed], comp)
440
-
441
- # verify that we're actually getting notified when a file changes
442
- assert_nothing_raised() {
443
- Puppet.type(:file).clear
444
- Puppet.type(:component).clear
445
- }
446
-
447
- if path =~ /nonexists/
448
- File.unlink(path)
449
- end
450
- }
451
- }
452
- end
453
-
454
- def cyclefile(path)
455
- # i had problems with using :name instead of :path
456
- [:name,:path].each { |param|
457
- file = nil
458
- changes = nil
459
- comp = nil
460
- trans = nil
461
-
462
- initstorage
463
- assert_nothing_raised {
464
- file = Puppet.type(:file).create(
465
- param => path,
466
- :recurse => true,
467
- :checksum => "md5"
468
- )
469
- }
470
- comp = Puppet.type(:component).create(
471
- :name => "component"
472
- )
473
- comp.push file
474
- assert_nothing_raised {
475
- trans = comp.evaluate
476
- }
477
- assert_nothing_raised {
478
- trans.evaluate
479
- }
480
- clearstorage
481
- Puppet::Type.allclear
482
- }
483
- end
484
-
485
- def test_recursion
486
- basedir = tempfile()
487
- subdir = File.join(basedir, "this", "is", "sub", "dir")
488
- tmpfile = File.join(subdir,"testing")
489
- FileUtils.mkdir_p(subdir)
490
-
491
- dir = nil
492
- [true, "true", "inf", 50].each do |value|
493
- assert_nothing_raised {
494
- dir = Puppet.type(:file).create(
495
- :path => basedir,
496
- :recurse => value,
497
- :check => %w{owner mode group}
498
- )
499
- }
500
-
501
- assert_nothing_raised {
502
- dir.evaluate
503
- }
504
-
505
- subobj = nil
506
- assert_nothing_raised {
507
- subobj = Puppet.type(:file)[subdir]
508
- }
509
-
510
- assert(subobj, "Could not retrieve %s object" % subdir)
511
-
512
- File.open(tmpfile, "w") { |f| f.puts "yayness" }
513
-
514
- dir.evaluate
515
-
516
- file = nil
517
- assert_nothing_raised {
518
- file = Puppet.type(:file)[tmpfile]
519
- }
520
-
521
- assert(file, "Could not retrieve %s object" % tmpfile)
522
- #system("rm -rf %s" % basedir)
523
- Puppet.type(:file).clear
524
- end
525
- end
526
-
527
- =begin
528
- def test_ignore
529
-
530
- end
531
- =end
532
-
533
- # XXX disabled until i change how dependencies work
534
- def disabled_test_recursionwithcreation
535
- path = "/tmp/this/directory/structure/does/not/exist"
536
- @@tmpfiles.push "/tmp/this"
537
-
538
- file = nil
539
- assert_nothing_raised {
540
- file = mkfile(
541
- :name => path,
542
- :recurse => true,
543
- :ensure => "file"
544
- )
545
- }
546
-
547
- trans = nil
548
- comp = newcomp("recursewithfiles", file)
549
- assert_nothing_raised {
550
- trans = comp.evaluate
551
- }
552
-
553
- events = nil
554
- assert_nothing_raised {
555
- events = trans.evaluate.collect { |e| e.event.to_s }
556
- }
557
-
558
- puts "events are %s" % events.join(", ")
559
- end
560
-
561
- def test_filetype_retrieval
562
- file = nil
563
-
564
- # Verify it retrieves files of type directory
565
- assert_nothing_raised {
566
- file = Puppet.type(:file).create(
567
- :name => tmpdir(),
568
- :check => :type
569
- )
570
- }
571
-
572
- assert_nothing_raised {
573
- file.evaluate
574
- }
575
-
576
- assert_equal("directory", file.state(:type).is)
577
-
578
- # And then check files
579
- assert_nothing_raised {
580
- file = Puppet.type(:file).create(
581
- :name => tempfile(),
582
- :ensure => "file"
583
- )
584
- }
585
-
586
- assert_apply(file)
587
- file[:check] = "type"
588
- assert_apply(file)
589
-
590
- assert_equal("file", file.state(:type).is)
591
-
592
- file[:type] = "directory"
593
-
594
- assert_nothing_raised { file.retrieve }
595
-
596
- # The 'retrieve' method sets @should to @is, so they're never
597
- # out of sync. It's a read-only class.
598
- assert(file.insync?)
599
- end
600
-
601
- def test_remove
602
- basedir = tempfile()
603
- subdir = File.join(basedir, "this")
604
- FileUtils.mkdir_p(subdir)
605
-
606
- dir = nil
607
- assert_nothing_raised {
608
- dir = Puppet.type(:file).create(
609
- :path => basedir,
610
- :recurse => true,
611
- :check => %w{owner mode group}
612
- )
613
- }
614
-
615
- assert_nothing_raised {
616
- dir.retrieve
617
- }
618
-
619
- obj = nil
620
- assert_nothing_raised {
621
- obj = Puppet.type(:file)[subdir]
622
- }
623
-
624
- assert(obj, "Could not retrieve subdir object")
625
-
626
- assert_nothing_raised {
627
- obj.remove(true)
628
- }
629
-
630
- assert_nothing_raised {
631
- obj = Puppet.type(:file)[subdir]
632
- }
633
-
634
- assert_nil(obj, "Retrieved removed object")
635
- end
636
-
637
- def test_path
638
- dir = tempfile()
639
-
640
- path = File.join(dir, "and", "a", "sub", "dir")
641
-
642
- assert_nothing_raised("Could not make file") {
643
- FileUtils.mkdir_p(File.dirname(path))
644
- File.open(path, "w") { |f| f.puts "yayness" }
645
- }
646
-
647
- file = nil
648
- dirobj = nil
649
- assert_nothing_raised("Could not make file object") {
650
- dirobj = Puppet.type(:file).create(
651
- :path => dir,
652
- :recurse => true,
653
- :check => %w{mode owner group}
654
- )
655
- }
656
-
657
- assert_nothing_raised {
658
- dirobj.evaluate
659
- }
660
-
661
- assert_nothing_raised {
662
- file = dirobj.class[path]
663
- }
664
-
665
- assert(file, "Could not retrieve file object")
666
-
667
- assert_equal("file=%s" % file.name, file.path)
668
- end
669
-
670
- def test_autorequire
671
- basedir = tempfile()
672
- subfile = File.join(basedir, "subfile")
673
-
674
- baseobj = Puppet.type(:file).create(
675
- :name => basedir,
676
- :ensure => "directory"
677
- )
678
-
679
- subobj = Puppet.type(:file).create(
680
- :name => subfile,
681
- :ensure => "file"
682
- )
683
- comp = newcomp(baseobj, subobj)
684
- comp.finalize
685
-
686
- assert(subobj.requires?(baseobj), "File did not require basedir")
687
- assert(!subobj.requires?(subobj), "File required itself")
688
- assert_events([:directory_created, :file_created], comp)
689
- end
690
-
691
- def test_content
692
- file = tempfile()
693
- str = "This is some content"
694
-
695
- obj = nil
696
- assert_nothing_raised {
697
- obj = Puppet.type(:file).create(
698
- :name => file,
699
- :content => str
700
- )
701
- }
702
-
703
- assert(!obj.insync?, "Object is incorrectly in sync")
704
-
705
- assert_events([:file_created], obj)
706
-
707
- obj.retrieve
708
-
709
- assert(obj.insync?, "Object is not in sync")
710
-
711
- text = File.read(file)
712
-
713
- assert_equal(str, text, "Content did not copy correctly")
714
-
715
- newstr = "Another string, yo"
716
-
717
- obj[:content] = newstr
718
-
719
- assert(!obj.insync?, "Object is incorrectly in sync")
720
-
721
- assert_events([:file_changed], obj)
722
-
723
- text = File.read(file)
724
-
725
- assert_equal(newstr, text, "Content did not copy correctly")
726
-
727
- obj.retrieve
728
- assert(obj.insync?, "Object is not in sync")
729
- end
730
-
731
- # Unfortunately, I know this fails
732
- def disabled_test_recursivemkdir
733
- path = tempfile()
734
- subpath = File.join(path, "this", "is", "a", "dir")
735
- file = nil
736
- assert_nothing_raised {
737
- file = Puppet.type(:file).create(
738
- :name => subpath,
739
- :ensure => "directory",
740
- :recurse => true
741
- )
742
- }
743
-
744
- comp = newcomp("yay", file)
745
- comp.finalize
746
- assert_apply(comp)
747
- #assert_events([:directory_created], comp)
748
-
749
- assert(FileTest.directory?(subpath), "Did not create directory")
750
- end
751
-
752
- # Make sure that content updates the checksum on the same run
753
- def test_checksumchange_for_content
754
- dest = tempfile()
755
- File.open(dest, "w") { |f| f.puts "yayness" }
756
-
757
- file = nil
758
- assert_nothing_raised {
759
- file = Puppet.type(:file).create(
760
- :name => dest,
761
- :checksum => "md5",
762
- :content => "This is some content"
763
- )
764
- }
765
-
766
- file.retrieve
767
-
768
- assert_events([:file_changed], file)
769
- file.retrieve
770
- assert_events([], file)
771
- end
772
-
773
- # Make sure that content updates the checksum on the same run
774
- def test_checksumchange_for_ensure
775
- dest = tempfile()
776
-
777
- file = nil
778
- assert_nothing_raised {
779
- file = Puppet.type(:file).create(
780
- :name => dest,
781
- :checksum => "md5",
782
- :ensure => "file"
783
- )
784
- }
785
-
786
- file.retrieve
787
-
788
- assert_events([:file_created], file)
789
- file.retrieve
790
- assert_events([], file)
791
- end
792
-
793
- # Make sure that content gets used before ensure
794
- def test_contentbeatsensure
795
- dest = tempfile()
796
-
797
- file = nil
798
- assert_nothing_raised {
799
- file = Puppet.type(:file).create(
800
- :name => dest,
801
- :ensure => "file",
802
- :content => "this is some content, yo"
803
- )
804
- }
805
-
806
- file.retrieve
807
-
808
- assert_events([:file_created], file)
809
- file.retrieve
810
- assert_events([], file)
811
- assert_events([], file)
812
- end
813
-
814
- def test_nameandpath
815
- path = tempfile()
816
-
817
- file = nil
818
- assert_nothing_raised {
819
- file = Puppet.type(:file).create(
820
- :name => "fileness",
821
- :path => path,
822
- :content => "this is some content"
823
- )
824
- }
825
-
826
- assert_apply(file)
827
-
828
- assert(FileTest.exists?(path))
829
- end
830
-
831
- # Make sure that a missing group isn't fatal at object instantiation time.
832
- def test_missinggroup
833
- file = nil
834
- assert_nothing_raised {
835
- file = Puppet.type(:file).create(
836
- :path => tempfile(),
837
- :group => "fakegroup"
838
- )
839
- }
840
-
841
- assert(file.state(:group), "Group state failed")
842
- end
843
-
844
- def test_modecreation
845
- path = tempfile()
846
- file = Puppet.type(:file).create(
847
- :path => path,
848
- :ensure => "file",
849
- :mode => "0777"
850
- )
851
- assert_apply(file)
852
- assert_equal(0777, File.stat(path).mode & 007777)
853
- File.unlink(path)
854
- file[:ensure] = "directory"
855
- assert_apply(file)
856
- assert_equal(0777, File.stat(path).mode & 007777)
857
- end
858
-
859
- def test_followlinks
860
- basedir = tempfile()
861
- Dir.mkdir(basedir)
862
- file = File.join(basedir, "file")
863
- link = File.join(basedir, "link")
864
-
865
- File.open(file, "w", 0644) { |f| f.puts "yayness"; f.flush }
866
- File.symlink(file, link)
867
-
868
- obj = nil
869
- assert_nothing_raised {
870
- obj = Puppet.type(:file).create(
871
- :name => link,
872
- :mode => "755"
873
- )
874
- }
875
- obj.retrieve
876
-
877
- assert_events([], obj)
878
-
879
- # Assert that we default to not following links
880
- assert_equal("%o" % 0644, "%o" % (File.stat(file).mode & 007777))
881
-
882
- # Assert that we can manage the link directly, but modes still don't change
883
- obj[:links] = :manage
884
- assert_events([], obj)
885
-
886
- assert_equal("%o" % 0644, "%o" % (File.stat(file).mode & 007777))
887
-
888
- obj[:links] = :follow
889
- assert_events([:file_changed], obj)
890
-
891
- assert_equal("%o" % 0755, "%o" % (File.stat(file).mode & 007777))
892
-
893
- # Now verify that content and checksum don't update, either
894
- obj.delete(:mode)
895
- obj[:checksum] = "md5"
896
- obj[:links] = :ignore
897
-
898
- assert_events([], obj)
899
- File.open(file, "w") { |f| f.puts "more text" }
900
- assert_events([], obj)
901
- obj[:links] = :follow
902
- assert_events([], obj)
903
- File.open(file, "w") { |f| f.puts "even more text" }
904
- assert_events([:file_changed], obj)
905
-
906
- obj.delete(:checksum)
907
- obj[:content] = "this is some content"
908
- obj[:links] = :ignore
909
-
910
- assert_events([], obj)
911
- File.open(file, "w") { |f| f.puts "more text" }
912
- assert_events([], obj)
913
- obj[:links] = :follow
914
- assert_events([:file_changed], obj)
915
- end
916
-
917
- # If both 'ensure' and 'content' are used, make sure that all of the other
918
- # states are handled correctly.
919
- def test_contentwithmode
920
- path = tempfile()
921
-
922
- file = nil
923
- assert_nothing_raised {
924
- file = Puppet.type(:file).create(
925
- :path => path,
926
- :ensure => "file",
927
- :content => "some text\n",
928
- :mode => 0755
929
- )
930
- }
931
-
932
- assert_apply(file)
933
- assert_equal("%o" % 0755, "%o" % (File.stat(path).mode & 007777))
934
- end
935
-
936
- # Make sure we can create symlinks
937
- def test_symlinks
938
- path = tempfile()
939
- link = tempfile()
940
-
941
- File.open(path, "w") { |f| f.puts "yay" }
942
-
943
- file = nil
944
- assert_nothing_raised {
945
- file = Puppet.type(:file).create(
946
- :ensure => path,
947
- :path => link
948
- )
949
- }
950
-
951
- assert_events([:link_created], file)
952
-
953
- assert(FileTest.symlink?(link), "Link was not created")
954
-
955
- assert_equal(path, File.readlink(link), "Link was created incorrectly")
956
-
957
- # Make sure running it again works
958
- assert_events([], file)
959
- end
960
-
961
- def test_simplerecursivelinking
962
- source = tempfile()
963
- dest = tempfile()
964
- subdir = File.join(source, "subdir")
965
- file = File.join(subdir, "file")
966
-
967
- system("mkdir -p %s" % subdir)
968
- system("touch %s" % file)
969
-
970
- link = nil
971
- assert_nothing_raised {
972
- link = Puppet.type(:file).create(
973
- :ensure => source,
974
- :path => dest,
975
- :recurse => true
976
- )
977
- }
978
-
979
- assert_apply(link)
980
-
981
- subdest = File.join(dest, "subdir")
982
- linkpath = File.join(subdest, "file")
983
- assert(File.directory?(dest), "dest is not a dir")
984
- assert(File.directory?(subdest), "subdest is not a dir")
985
- assert(File.symlink?(linkpath), "path is not a link")
986
- assert_equal(file, File.readlink(linkpath))
987
-
988
- assert_events([], link)
989
- end
990
-
991
- def test_recursivelinking
992
- source = tempfile()
993
- dest = tempfile()
994
-
995
- files = []
996
- dirs = []
997
-
998
- # Make a bunch of files and dirs
999
- Dir.mkdir(source)
1000
- Dir.chdir(source) do
1001
- system("mkdir -p %s" % "some/path/of/dirs")
1002
- system("mkdir -p %s" % "other/path/of/dirs")
1003
- system("touch %s" % "file")
1004
- system("touch %s" % "other/file")
1005
- system("touch %s" % "some/path/of/file")
1006
- system("touch %s" % "some/path/of/dirs/file")
1007
- system("touch %s" % "other/path/of/file")
1008
-
1009
- files = %x{find . -type f}.chomp.split(/\n/)
1010
- dirs = %x{find . -type d}.chomp.split(/\n/).reject{|d| d =~ /^\.+$/ }
1011
- end
1012
-
1013
- link = nil
1014
- assert_nothing_raised {
1015
- link = Puppet.type(:file).create(
1016
- :ensure => source,
1017
- :path => dest,
1018
- :recurse => true
1019
- )
1020
- }
1021
-
1022
- assert_apply(link)
1023
-
1024
- files.each do |f|
1025
- f.sub!(/^\.#{File::SEPARATOR}/, '')
1026
- path = File.join(dest, f)
1027
- assert(FileTest.exists?(path), "Link %s was not created" % path)
1028
- assert(FileTest.symlink?(path), "%s is not a link" % f)
1029
- target = File.readlink(path)
1030
- assert_equal(File.join(source, f), target)
1031
- end
1032
-
1033
- dirs.each do |d|
1034
- d.sub!(/^\.#{File::SEPARATOR}/, '')
1035
- path = File.join(dest, d)
1036
- assert(FileTest.exists?(path), "Dir %s was not created" % path)
1037
- assert(FileTest.directory?(path), "%s is not a directory" % d)
1038
- end
1039
- end
1040
-
1041
- def test_localrelativelinks
1042
- dir = tempfile()
1043
- Dir.mkdir(dir)
1044
- source = File.join(dir, "source")
1045
- File.open(source, "w") { |f| f.puts "yay" }
1046
- dest = File.join(dir, "link")
1047
-
1048
- link = nil
1049
- assert_nothing_raised {
1050
- link = Puppet.type(:file).create(
1051
- :path => dest,
1052
- :ensure => "source"
1053
- )
1054
- }
1055
-
1056
- assert_events([:link_created], link)
1057
- assert(FileTest.symlink?(dest), "Did not create link")
1058
- assert_equal("source", File.readlink(dest))
1059
- assert_equal("yay\n", File.read(dest))
1060
- end
1061
-
1062
- def test_recursivelinkingmissingtarget
1063
- source = tempfile()
1064
- dest = tempfile()
1065
-
1066
- objects = []
1067
- objects << Puppet.type(:exec).create(
1068
- :command => "mkdir %s; touch %s/file" % [source, source],
1069
- :path => ENV["PATH"]
1070
- )
1071
- objects << Puppet.type(:file).create(
1072
- :ensure => source,
1073
- :path => dest,
1074
- :recurse => true
1075
- )
1076
-
1077
- assert_apply(*objects)
1078
-
1079
- link = File.join(dest, "file")
1080
- assert(FileTest.symlink?(link), "Did not make link")
1081
- assert_equal(File.join(source, "file"), File.readlink(link))
1082
- end
1083
-
1084
- def test_backupmodes
1085
- file = tempfile()
1086
- newfile = tempfile()
1087
-
1088
- File.open(file, "w", 0411) { |f| f.puts "yayness" }
1089
-
1090
- obj = nil
1091
- assert_nothing_raised {
1092
- obj = Puppet::Type.type(:file).create(
1093
- :path => file, :content => "rahness\n"
1094
- )
1095
- }
1096
-
1097
- # user = group = nil
1098
- # if Process.uid == 0
1099
- # user = nonrootuser
1100
- # group = nonrootgroup
1101
- # obj[:owner] = user.name
1102
- # obj[:group] = group.name
1103
- # File.chown(user.uid, group.gid, file)
1104
- # end
1105
-
1106
- assert_apply(obj)
1107
-
1108
- backupfile = file + obj[:backup]
1109
- @@tmpfiles << backupfile
1110
- assert(FileTest.exists?(backupfile),
1111
- "Backup file %s does not exist" % backupfile)
1112
-
1113
- assert_equal(0411, filemode(backupfile),
1114
- "File mode is wrong for backupfile")
1115
-
1116
- # if Process.uid == 0
1117
- # assert_equal(user.uid, File.stat(backupfile).uid)
1118
- # assert_equal(group.gid, File.stat(backupfile).gid)
1119
- # end
1120
-
1121
- bucket = "bucket"
1122
- bpath = tempfile()
1123
- Dir.mkdir(bpath)
1124
- Puppet::Type.type(:filebucket).create(
1125
- :name => bucket, :path => bpath
1126
- )
1127
-
1128
- obj[:backup] = bucket
1129
- obj[:content] = "New content"
1130
- assert_apply(obj)
1131
-
1132
- bucketedpath = File.join(bpath, "18cc17fa3047fcc691fdf49c0a7f539a", "contents")
1133
-
1134
- assert_equal(0440, filemode(bucketedpath))
1135
- end
1136
-
1137
- def test_largefilechanges
1138
- source = tempfile()
1139
- dest = tempfile()
1140
-
1141
- # Now make a large file
1142
- File.open(source, "w") { |f|
1143
- 500.times { |i| f.puts "line %s" % i }
1144
- }
1145
-
1146
- obj = Puppet::Type.type(:file).create(
1147
- :name => dest, :source => source
1148
- )
1149
-
1150
- assert_events([:file_created], obj)
1151
-
1152
- File.open(source, File::APPEND|File::WRONLY) { |f| f.puts "another line" }
1153
-
1154
- assert_events([:file_changed], obj)
1155
-
1156
- # Now modify the dest file
1157
- File.open(dest, File::APPEND|File::WRONLY) { |f| f.puts "one more line" }
1158
-
1159
- assert_events([:file_changed, :file_changed], obj)
1160
-
1161
- end
1162
-
1163
- def test_replacefilewithlink
1164
- path = tempfile()
1165
- link = tempfile()
1166
-
1167
- File.open(path, "w") { |f| f.puts "yay" }
1168
- File.open(link, "w") { |f| f.puts "a file" }
1169
-
1170
- file = nil
1171
- assert_nothing_raised {
1172
- file = Puppet.type(:file).create(
1173
- :ensure => path,
1174
- :path => link
1175
- )
1176
- }
1177
-
1178
- assert_events([:link_created], file)
1179
-
1180
- assert(FileTest.symlink?(link), "Link was not created")
1181
-
1182
- assert_equal(path, File.readlink(link), "Link was created incorrectly")
1183
- end
1184
-
1185
- def test_replacedirwithlink
1186
- path = tempfile()
1187
- link = tempfile()
1188
-
1189
- File.open(path, "w") { |f| f.puts "yay" }
1190
- Dir.mkdir(link)
1191
- File.open(File.join(link, "yay"), "w") do |f| f.puts "boo" end
1192
-
1193
- file = nil
1194
- assert_nothing_raised {
1195
- file = Puppet.type(:file).create(
1196
- :ensure => path,
1197
- :path => link
1198
- )
1199
- }
1200
-
1201
- assert_events([:link_created], file)
1202
-
1203
- assert(FileTest.symlink?(link), "Link was not created")
1204
-
1205
- assert_equal(path, File.readlink(link), "Link was created incorrectly")
1206
- end
1207
-
1208
- def test_replace_links_with_files
1209
- base = tempfile()
1210
-
1211
- Dir.mkdir(base)
1212
-
1213
- file = File.join(base, "file")
1214
- link = File.join(base, "link")
1215
- File.open(file, "w") { |f| f.puts "yayness" }
1216
- File.symlink(file, link)
1217
-
1218
- obj = Puppet::Type.type(:file).create(
1219
- :path => link,
1220
- :ensure => "file"
1221
- )
1222
-
1223
- assert_apply(obj)
1224
-
1225
- assert_equal("yayness\n", File.read(file),
1226
- "Original file got changed")
1227
- assert_equal("file", File.lstat(link).ftype, "File is still a link")
1228
- end
1229
-
1230
- def test_no_erase_linkedto_files
1231
- base = tempfile()
1232
-
1233
- Dir.mkdir(base)
1234
-
1235
- dirs = {}
1236
- %w{other source target}.each do |d|
1237
- dirs[d] = File.join(base, d)
1238
- Dir.mkdir(dirs[d])
1239
- end
1240
-
1241
- file = File.join(dirs["other"], "file")
1242
- sourcefile = File.join(dirs["source"], "sourcefile")
1243
- link = File.join(dirs["target"], "link")
1244
-
1245
- File.open(file, "w") { |f| f.puts "other" }
1246
- File.open(sourcefile, "w") { |f| f.puts "source" }
1247
- File.symlink(file, link)
1248
-
1249
- obj = Puppet::Type.type(:file).create(
1250
- :path => dirs["target"],
1251
- :ensure => "file",
1252
- :source => dirs["source"],
1253
- :recurse => true
1254
- )
1255
-
1256
-
1257
- trans = assert_events([:file_created, :file_created], obj)
1258
-
1259
- newfile = File.join(dirs["target"], "sourcefile")
1260
-
1261
- assert(File.exists?(newfile), "File did not get copied")
1262
-
1263
- assert_equal(File.read(sourcefile), File.read(newfile),
1264
- "File did not get copied correctly.")
1265
-
1266
- assert_equal("other\n", File.read(file),
1267
- "Original file got changed")
1268
- assert_equal("file", File.lstat(link).ftype, "File is still a link")
1269
- end
1270
-
1271
- def test_replace_links
1272
- dest = tempfile()
1273
- otherdest = tempfile()
1274
- link = tempfile()
1275
-
1276
- File.open(dest, "w") { |f| f.puts "boo" }
1277
- File.open(otherdest, "w") { |f| f.puts "yay" }
1278
-
1279
- obj = Puppet::Type.type(:file).create(
1280
- :path => link,
1281
- :ensure => otherdest
1282
- )
1283
-
1284
-
1285
- assert_apply(obj)
1286
-
1287
- assert_equal(otherdest, File.readlink(link), "Link did not get created")
1288
-
1289
- obj[:ensure] = dest
1290
-
1291
- assert_apply(obj)
1292
-
1293
- assert_equal(dest, File.readlink(link), "Link did not get changed")
1294
- end
1295
-
1296
- def test_file_with_spaces
1297
- dir = tempfile()
1298
- Dir.mkdir(dir)
1299
- source = File.join(dir, "file spaces")
1300
- dest = File.join(dir, "another space")
1301
-
1302
- File.open(source, "w") { |f| f.puts :yay }
1303
- obj = Puppet::Type.type(:file).create(
1304
- :path => dest,
1305
- :source => source
1306
- )
1307
-
1308
- assert_apply(obj)
1309
-
1310
- assert(FileTest.exists?(dest), "File did not get created")
1311
- end
1312
- end
1313
-
1314
- # $Id: file.rb 1307 2006-06-20 18:46:58Z luke $