puppet 0.18.4 → 0.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -0,0 +1,1046 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'cgi'
7
+ require 'fileutils'
8
+
9
+ class TestFileSources < Test::Unit::TestCase
10
+ include PuppetTest::FileTesting
11
+ def setup
12
+ super
13
+ if defined? @port
14
+ @port += 1
15
+ else
16
+ @port = 12345
17
+ end
18
+ @file = Puppet::Type.type(:file)
19
+ end
20
+
21
+ def use_storage
22
+ begin
23
+ initstorage
24
+ rescue
25
+ system("rm -rf %s" % Puppet[:statefile])
26
+ end
27
+ end
28
+
29
+ def initstorage
30
+ Puppet::Util::Storage.init
31
+ Puppet::Util::Storage.load
32
+ end
33
+
34
+ # Make a simple recursive tree.
35
+ def mk_sourcetree
36
+ source = tempfile()
37
+ sourcefile = File.join(source, "file")
38
+ Dir.mkdir source
39
+ File.open(sourcefile, "w") { |f| f.puts "yay" }
40
+
41
+ dest = tempfile()
42
+ destfile = File.join(dest, "file")
43
+ return source, dest, sourcefile, destfile
44
+ end
45
+
46
+ def test_newchild
47
+ path = tempfile()
48
+ @@tmpfiles.push path
49
+
50
+ FileUtils.mkdir_p path
51
+ File.open(File.join(path,"childtest"), "w") { |of|
52
+ of.puts "yayness"
53
+ }
54
+ file = nil
55
+ comp = nil
56
+ trans = nil
57
+ assert_nothing_raised {
58
+ file = Puppet.type(:file).create(
59
+ :name => path
60
+ )
61
+ }
62
+ child = nil
63
+ assert_nothing_raised {
64
+ child = file.newchild("childtest", true)
65
+ }
66
+ assert(child)
67
+ assert_raise(Puppet::DevError) {
68
+ file.newchild(File.join(path,"childtest"), true)
69
+ }
70
+ end
71
+
72
+ def test_describe
73
+ source = tempfile()
74
+ dest = tempfile()
75
+
76
+ file = Puppet::Type.newfile :path => dest, :source => source,
77
+ :title => "copier"
78
+
79
+ property = file.property(:source)
80
+
81
+ # First try describing with a normal source
82
+ result = nil
83
+ assert_nothing_raised do
84
+ result = property.describe(source)
85
+ end
86
+ assert_nil(result, "Got a result back when source is missing")
87
+
88
+ # Now make a remote directory
89
+ Dir.mkdir(source)
90
+ assert_nothing_raised do
91
+ result = property.describe(source)
92
+ end
93
+ assert_equal("directory", result[:type])
94
+
95
+ # And as a file
96
+ Dir.rmdir(source)
97
+ File.open(source, "w") { |f| f.puts "yay" }
98
+ assert_nothing_raised do
99
+ result = property.describe(source)
100
+ end
101
+ assert_equal("file", result[:type])
102
+ assert(result[:checksum], "did not get value for checksum")
103
+ if Puppet::Util::SUIDManager.uid == 0
104
+ assert(result.has_key?(:owner), "Lost owner in describe")
105
+ else
106
+ assert(! result.has_key?(:owner),
107
+ "Kept owner in describe even tho not root")
108
+ end
109
+
110
+ # Now let's do the various link things
111
+ File.unlink(source)
112
+ target = tempfile()
113
+ File.open(target, "w") { |f| f.puts "yay" }
114
+ File.symlink(target, source)
115
+
116
+ file[:links] = :ignore
117
+ assert_nil(property.describe(source),
118
+ "Links were not ignored")
119
+
120
+ file[:links] = :manage
121
+ # We can't manage links at this point
122
+ assert_raise(Puppet::Network::Handler::FileServerError) do
123
+ property.describe(source)
124
+ end
125
+
126
+ # And then make sure links get followed, otherwise
127
+ file[:links] = :follow
128
+ assert_equal("file", property.describe(source)[:type])
129
+ end
130
+
131
+ def test_source_retrieve
132
+ source = tempfile()
133
+ dest = tempfile()
134
+
135
+ file = Puppet::Type.newfile :path => dest, :source => source,
136
+ :title => "copier"
137
+
138
+ assert(file.property(:checksum), "source property did not create checksum property")
139
+ property = file.property(:source)
140
+ assert(property, "did not get source property")
141
+
142
+ # Make sure the munge didn't actually change the source
143
+ assert_equal([source], property.should, "munging changed the source")
144
+
145
+ # First try it with a missing source
146
+ assert_nothing_raised do
147
+ property.retrieve
148
+ end
149
+
150
+ # And make sure the property considers itself in sync, since there's nothing
151
+ # to do
152
+ assert(property.insync?, "source thinks there's work to do with no file or dest")
153
+
154
+ # Now make the dest a directory, and make sure the object sets :ensure
155
+ # up to create a directory
156
+ Dir.mkdir(source)
157
+ assert_nothing_raised do
158
+ property.retrieve
159
+ end
160
+ assert_equal(:directory, file.should(:ensure),
161
+ "Did not set to create directory")
162
+
163
+ # And make sure the source property won't try to do anything with a
164
+ # remote dir
165
+ assert(property.insync?, "Source was out of sync even tho remote is dir")
166
+
167
+ # Now remove the source, and make sure :ensure was not modified
168
+ Dir.rmdir(source)
169
+ assert_nothing_raised do
170
+ property.retrieve
171
+ end
172
+ assert_equal(:directory, file.should(:ensure),
173
+ "Did not keep :ensure setting")
174
+
175
+ # Now have a remote file and make sure things work correctly
176
+ File.open(source, "w") { |f| f.puts "yay" }
177
+ File.chmod(0755, source)
178
+
179
+ assert_nothing_raised do
180
+ property.retrieve
181
+ end
182
+ assert_equal(:file, file.should(:ensure),
183
+ "Did not make correct :ensure setting")
184
+ assert_equal(0755, file.should(:mode),
185
+ "Mode was not copied over")
186
+
187
+ # Now let's make sure that we get the first found source
188
+ fake = tempfile()
189
+ property.should = [fake, source]
190
+ assert_nothing_raised do
191
+ property.retrieve
192
+ end
193
+ assert_equal(Digest::MD5.hexdigest(File.read(source)), property.checksum.sub(/^\{\w+\}/, ''),
194
+ "Did not catch later source")
195
+ end
196
+
197
+ def test_insync
198
+ source = tempfile()
199
+ dest = tempfile()
200
+
201
+ file = Puppet::Type.newfile :path => dest, :source => source,
202
+ :title => "copier"
203
+
204
+ property = file.property(:source)
205
+ assert(property, "did not get source property")
206
+
207
+ # Try it with no source at all
208
+ file.retrieve
209
+ assert(property.insync?, "source property not in sync with missing source")
210
+
211
+ # with a directory
212
+ Dir.mkdir(source)
213
+ file.retrieve
214
+ assert(property.insync?, "source property not in sync with directory as source")
215
+ Dir.rmdir(source)
216
+
217
+ # with a file
218
+ File.open(source, "w") { |f| f.puts "yay" }
219
+ file.retrieve
220
+ assert(!property.insync?, "source property was in sync when file was missing")
221
+
222
+ # With a different file
223
+ File.open(dest, "w") { |f| f.puts "foo" }
224
+ file.retrieve
225
+ assert(!property.insync?, "source property was in sync with different file")
226
+
227
+ # with matching files
228
+ File.open(dest, "w") { |f| f.puts "yay" }
229
+ file.retrieve
230
+ assert(property.insync?, "source property was not in sync with matching file")
231
+ end
232
+
233
+ def test_source_sync
234
+ source = tempfile()
235
+ dest = tempfile()
236
+
237
+ file = Puppet::Type.newfile :path => dest, :source => source,
238
+ :title => "copier"
239
+ property = file.property(:source)
240
+
241
+ File.open(source, "w") { |f| f.puts "yay" }
242
+
243
+ file.retrieve
244
+ assert(! property.insync?, "source thinks it's in sync")
245
+
246
+ event = nil
247
+ assert_nothing_raised do
248
+ event = property.sync
249
+ end
250
+ assert_equal(:file_created, event)
251
+ assert_equal(File.read(source), File.read(dest),
252
+ "File was not copied correctly")
253
+
254
+ # Now write something different
255
+ File.open(source, "w") { |f| f.puts "rah" }
256
+ file.retrieve
257
+ assert(! property.insync?, "source should be out of sync")
258
+ assert_nothing_raised do
259
+ event = property.sync
260
+ end
261
+ assert_equal(:file_changed, event)
262
+ assert_equal(File.read(source), File.read(dest),
263
+ "File was not copied correctly")
264
+ end
265
+
266
+ # XXX This test doesn't cover everything. Specifically,
267
+ # it doesn't handle 'ignore' and 'links'.
268
+ def test_sourcerecurse
269
+ source, dest, sourcefile, destfile = mk_sourcetree
270
+
271
+ # The sourcerecurse method will only ever get called when we're
272
+ # recursing, so we go ahead and set it.
273
+ obj = Puppet::Type.newfile :source => source, :path => dest, :recurse => true
274
+
275
+ result = nil
276
+ sourced = nil
277
+ assert_nothing_raised do
278
+ result, sourced = obj.sourcerecurse(true)
279
+ end
280
+
281
+ assert_equal([destfile], sourced, "Did not get correct list of sourced objects")
282
+ dfileobj = @file[destfile]
283
+ assert(dfileobj, "Did not create destfile object")
284
+ assert_equal([dfileobj], result)
285
+
286
+ # Clean this up so it can be recreated
287
+ dfileobj.remove
288
+
289
+ # Make sure we correctly iterate over the sources
290
+ nosource = tempfile()
291
+ obj[:source] = [nosource, source]
292
+
293
+ result = nil
294
+ assert_nothing_raised do
295
+ result, sourced = obj.sourcerecurse(true)
296
+ end
297
+ assert_equal([destfile], sourced, "Did not get correct list of sourced objects")
298
+ dfileobj = @file[destfile]
299
+ assert(dfileobj, "Did not create destfile object with a missing source")
300
+ assert_equal([dfileobj], result)
301
+ dfileobj.remove
302
+
303
+ # Lastly, make sure we return an empty array when no sources are there
304
+ obj[:source] = [nosource, tempfile()]
305
+
306
+ assert_nothing_raised do
307
+ result, sourced = obj.sourcerecurse(true)
308
+ end
309
+ assert_equal([], sourced, "Did not get correct list of sourced objects")
310
+ assert_equal([], result, "Sourcerecurse failed when all sources are missing")
311
+ end
312
+
313
+ def test_simplelocalsource
314
+ path = tempfile()
315
+ FileUtils.mkdir_p path
316
+ frompath = File.join(path,"source")
317
+ topath = File.join(path,"dest")
318
+ fromfile = nil
319
+ tofile = nil
320
+ trans = nil
321
+
322
+ File.open(frompath, File::WRONLY|File::CREAT|File::APPEND) { |of|
323
+ of.puts "yayness"
324
+ }
325
+ assert_nothing_raised {
326
+ tofile = Puppet.type(:file).create(
327
+ :name => topath,
328
+ :source => frompath
329
+ )
330
+ }
331
+
332
+ assert_apply(tofile)
333
+
334
+ assert(FileTest.exists?(topath), "File #{topath} is missing")
335
+ from = File.open(frompath) { |o| o.read }
336
+ to = File.open(topath) { |o| o.read }
337
+ assert_equal(from,to)
338
+ end
339
+
340
+ # Make sure a simple recursive copy works
341
+ def test_simple_recursive_source
342
+ source, dest, sourcefile, destfile = mk_sourcetree
343
+
344
+ file = Puppet::Type.newfile :path => dest, :source => source, :recurse => true
345
+
346
+ assert_events([:directory_created, :file_created], file)
347
+
348
+ assert(FileTest.directory?(dest), "Dest dir was not created")
349
+ assert(FileTest.file?(destfile), "dest file was not created")
350
+ assert_equal("yay\n", File.read(destfile), "dest file was not copied correctly")
351
+ end
352
+
353
+ def recursive_source_test(fromdir, todir)
354
+ Puppet::Type.allclear
355
+ initstorage
356
+ tofile = nil
357
+ trans = nil
358
+
359
+ assert_nothing_raised {
360
+ tofile = Puppet.type(:file).create(
361
+ :path => todir,
362
+ :recurse => true,
363
+ :backup => false,
364
+ :source => fromdir
365
+ )
366
+ }
367
+ assert_apply(tofile)
368
+
369
+ assert(FileTest.exists?(todir), "Created dir %s does not exist" % todir)
370
+ Puppet::Type.allclear
371
+ end
372
+
373
+ def run_complex_sources(networked = false)
374
+ path = tempfile()
375
+
376
+ # first create the source directory
377
+ FileUtils.mkdir_p path
378
+
379
+ # okay, let's create a directory structure
380
+ fromdir = File.join(path,"fromdir")
381
+ Dir.mkdir(fromdir)
382
+ FileUtils.cd(fromdir) {
383
+ File.open("one", "w") { |f| f.puts "onefile"}
384
+ File.open("two", "w") { |f| f.puts "twofile"}
385
+ }
386
+
387
+ todir = File.join(path, "todir")
388
+ source = fromdir
389
+ if networked
390
+ source = "puppet://localhost/%s%s" % [networked, fromdir]
391
+ end
392
+ recursive_source_test(source, todir)
393
+
394
+ return [fromdir,todir, File.join(todir, "one"), File.join(todir, "two")]
395
+ end
396
+
397
+ def test_complex_sources_twice
398
+ fromdir, todir, one, two = run_complex_sources
399
+ assert_trees_equal(fromdir,todir)
400
+ recursive_source_test(fromdir, todir)
401
+ assert_trees_equal(fromdir,todir)
402
+ # Now remove the whole tree and try it again.
403
+ [one, two].each do |f| File.unlink(f) end
404
+ Dir.rmdir(todir)
405
+ recursive_source_test(fromdir, todir)
406
+ assert_trees_equal(fromdir,todir)
407
+ end
408
+
409
+ def test_sources_with_deleted_destfiles
410
+ fromdir, todir, one, two = run_complex_sources
411
+ assert(FileTest.exists?(todir))
412
+
413
+ # We shouldn't have a 'two' file object in memory
414
+ assert_nil(@file[two], "object for 'two' is still in memory")
415
+
416
+ # then delete a file
417
+ File.unlink(two)
418
+
419
+ # and run
420
+ recursive_source_test(fromdir, todir)
421
+
422
+ assert(FileTest.exists?(two), "Deleted file was not recopied")
423
+
424
+ # and make sure they're still equal
425
+ assert_trees_equal(fromdir,todir)
426
+ end
427
+
428
+ def test_sources_with_readonly_destfiles
429
+ fromdir, todir, one, two = run_complex_sources
430
+ assert(FileTest.exists?(todir))
431
+ File.chmod(0600, one)
432
+ recursive_source_test(fromdir, todir)
433
+
434
+ # and make sure they're still equal
435
+ assert_trees_equal(fromdir,todir)
436
+
437
+ # Now try it with the directory being read-only
438
+ File.chmod(0111, todir)
439
+ recursive_source_test(fromdir, todir)
440
+
441
+ # and make sure they're still equal
442
+ assert_trees_equal(fromdir,todir)
443
+ end
444
+
445
+ def test_sources_with_modified_dest_files
446
+ fromdir, todir, one, two = run_complex_sources
447
+
448
+ assert(FileTest.exists?(todir))
449
+
450
+ # Modify a dest file
451
+ File.open(two, "w") { |f| f.puts "something else" }
452
+
453
+ recursive_source_test(fromdir, todir)
454
+
455
+ # and make sure they're still equal
456
+ assert_trees_equal(fromdir,todir)
457
+ end
458
+
459
+ def test_sources_with_added_destfiles
460
+ fromdir, todir = run_complex_sources
461
+ assert(FileTest.exists?(todir))
462
+ # and finally, add some new files
463
+ add_random_files(todir)
464
+
465
+ recursive_source_test(fromdir, todir)
466
+
467
+ fromtree = file_list(fromdir)
468
+ totree = file_list(todir)
469
+
470
+ assert(fromtree != totree, "Trees are incorrectly equal")
471
+
472
+ # then remove our new files
473
+ FileUtils.cd(todir) {
474
+ %x{find . 2>/dev/null}.chomp.split(/\n/).each { |file|
475
+ if file =~ /file[0-9]+/
476
+ File.unlink(file)
477
+ end
478
+ }
479
+ }
480
+
481
+ # and make sure they're still equal
482
+ assert_trees_equal(fromdir,todir)
483
+ end
484
+
485
+ # Make sure added files get correctly caught during recursion
486
+ def test_RecursionWithAddedFiles
487
+ basedir = tempfile()
488
+ Dir.mkdir(basedir)
489
+ @@tmpfiles << basedir
490
+ file1 = File.join(basedir, "file1")
491
+ file2 = File.join(basedir, "file2")
492
+ subdir1 = File.join(basedir, "subdir1")
493
+ file3 = File.join(subdir1, "file")
494
+ File.open(file1, "w") { |f| f.puts "yay" }
495
+ rootobj = nil
496
+ assert_nothing_raised {
497
+ rootobj = Puppet.type(:file).create(
498
+ :name => basedir,
499
+ :recurse => true,
500
+ :check => %w{type owner},
501
+ :mode => 0755
502
+ )
503
+ }
504
+
505
+ assert_apply(rootobj)
506
+ assert_equal(0755, filemode(file1))
507
+
508
+ File.open(file2, "w") { |f| f.puts "rah" }
509
+ assert_apply(rootobj)
510
+ assert_equal(0755, filemode(file2))
511
+
512
+ Dir.mkdir(subdir1)
513
+ File.open(file3, "w") { |f| f.puts "foo" }
514
+ assert_apply(rootobj)
515
+ assert_equal(0755, filemode(file3))
516
+ end
517
+
518
+ def mkfileserverconf(mounts)
519
+ file = tempfile()
520
+ File.open(file, "w") { |f|
521
+ mounts.each { |path, name|
522
+ f.puts "[#{name}]\n\tpath #{path}\n\tallow *\n"
523
+ }
524
+ }
525
+
526
+ @@tmpfiles << file
527
+ return file
528
+ end
529
+
530
+ def test_NetworkSources
531
+ server = nil
532
+ mounts = {
533
+ "/" => "root"
534
+ }
535
+
536
+ fileserverconf = mkfileserverconf(mounts)
537
+
538
+ Puppet[:autosign] = true
539
+
540
+ Puppet[:masterport] = 8762
541
+ Puppet[:name] = "puppetmasterd"
542
+
543
+ serverpid = nil
544
+ assert_nothing_raised() {
545
+ server = Puppet::Network::Server::WEBrick.new(
546
+ :Handlers => {
547
+ :CA => {}, # so that certs autogenerate
548
+ :FileServer => {
549
+ :Config => fileserverconf
550
+ }
551
+ }
552
+ )
553
+
554
+ }
555
+ serverpid = fork {
556
+ assert_nothing_raised() {
557
+ #trap(:INT) { server.shutdown; Kernel.exit! }
558
+ trap(:INT) { server.shutdown }
559
+ server.start
560
+ }
561
+ }
562
+ @@tmppids << serverpid
563
+
564
+ sleep(1)
565
+
566
+ fromdir, todir = run_complex_sources("root")
567
+ assert_trees_equal(fromdir,todir)
568
+ recursive_source_test(fromdir, todir)
569
+ assert_trees_equal(fromdir,todir)
570
+
571
+ assert_nothing_raised {
572
+ system("kill -INT %s" % serverpid)
573
+ }
574
+ end
575
+
576
+ def test_networkSourcesWithoutService
577
+ server = nil
578
+
579
+ Puppet[:autosign] = true
580
+ Puppet[:masterport] = 8765
581
+
582
+ serverpid = nil
583
+ assert_nothing_raised() {
584
+ server = Puppet::Network::Server::WEBrick.new(
585
+ :Handlers => {
586
+ :CA => {}, # so that certs autogenerate
587
+ }
588
+ )
589
+
590
+ }
591
+ serverpid = fork {
592
+ assert_nothing_raised() {
593
+ #trap(:INT) { server.shutdown; Kernel.exit! }
594
+ trap(:INT) { server.shutdown }
595
+ server.start
596
+ }
597
+ }
598
+ @@tmppids << serverpid
599
+
600
+ sleep(1)
601
+
602
+ name = File.join(tmpdir(), "nosourcefile")
603
+ file = Puppet.type(:file).create(
604
+ :source => "puppet://localhost/dist/file",
605
+ :name => name
606
+ )
607
+
608
+ assert_nothing_raised {
609
+ file.retrieve
610
+ }
611
+
612
+ comp = newcomp("nosource", file)
613
+
614
+ assert_nothing_raised {
615
+ comp.evaluate
616
+ }
617
+
618
+ assert(!FileTest.exists?(name), "File with no source exists anyway")
619
+ end
620
+
621
+ def test_unmountedNetworkSources
622
+ server = nil
623
+ mounts = {
624
+ "/" => "root",
625
+ "/noexistokay" => "noexist"
626
+ }
627
+
628
+ fileserverconf = mkfileserverconf(mounts)
629
+
630
+ Puppet[:autosign] = true
631
+ Puppet[:masterport] = @port
632
+
633
+ serverpid = nil
634
+ assert_nothing_raised("Could not start on port %s" % @port) {
635
+ server = Puppet::Network::Server::WEBrick.new(
636
+ :Port => @port,
637
+ :Handlers => {
638
+ :CA => {}, # so that certs autogenerate
639
+ :FileServer => {
640
+ :Config => fileserverconf
641
+ }
642
+ }
643
+ )
644
+
645
+ }
646
+
647
+ serverpid = fork {
648
+ assert_nothing_raised() {
649
+ #trap(:INT) { server.shutdown; Kernel.exit! }
650
+ trap(:INT) { server.shutdown }
651
+ server.start
652
+ }
653
+ }
654
+ @@tmppids << serverpid
655
+
656
+ sleep(1)
657
+
658
+ name = File.join(tmpdir(), "nosourcefile")
659
+ file = Puppet.type(:file).create(
660
+ :source => "puppet://localhost/noexist/file",
661
+ :name => name
662
+ )
663
+
664
+ assert_nothing_raised {
665
+ file.retrieve
666
+ }
667
+
668
+ comp = newcomp("nosource", file)
669
+
670
+ assert_nothing_raised {
671
+ comp.evaluate
672
+ }
673
+
674
+ assert(!FileTest.exists?(name), "File with no source exists anyway")
675
+ end
676
+
677
+ def test_alwayschecksum
678
+ from = tempfile()
679
+ to = tempfile()
680
+
681
+ File.open(from, "w") { |f| f.puts "yayness" }
682
+ File.open(to, "w") { |f| f.puts "yayness" }
683
+
684
+ file = nil
685
+
686
+ # Now the files should be exactly the same, so we should not see attempts
687
+ # at copying
688
+ assert_nothing_raised {
689
+ file = Puppet.type(:file).create(
690
+ :path => to,
691
+ :source => from
692
+ )
693
+ }
694
+
695
+ file.retrieve
696
+
697
+ assert(file.is(:checksum), "File does not have a checksum property")
698
+
699
+ assert_equal(0, file.evaluate.length, "File produced changes")
700
+
701
+ end
702
+
703
+ def test_sourcepaths
704
+ files = []
705
+ 3.times {
706
+ files << tempfile()
707
+ }
708
+
709
+ to = tempfile()
710
+
711
+ File.open(files[-1], "w") { |f| f.puts "yee-haw" }
712
+
713
+ file = nil
714
+ assert_nothing_raised {
715
+ file = Puppet.type(:file).create(
716
+ :name => to,
717
+ :source => files
718
+ )
719
+ }
720
+
721
+ comp = newcomp(file)
722
+ assert_events([:file_created], comp)
723
+
724
+ assert(File.exists?(to), "File does not exist")
725
+
726
+ txt = nil
727
+ File.open(to) { |f| txt = f.read.chomp }
728
+
729
+ assert_equal("yee-haw", txt, "Contents do not match")
730
+ end
731
+
732
+ # Make sure that source-copying updates the checksum on the same run
733
+ def test_checksumchange
734
+ source = tempfile()
735
+ dest = tempfile()
736
+ File.open(dest, "w") { |f| f.puts "boo" }
737
+ File.open(source, "w") { |f| f.puts "yay" }
738
+
739
+ file = nil
740
+ assert_nothing_raised {
741
+ file = Puppet.type(:file).create(
742
+ :name => dest,
743
+ :source => source
744
+ )
745
+ }
746
+
747
+ file.retrieve
748
+
749
+ assert_events([:file_changed], file)
750
+ file.retrieve
751
+ assert_events([], file)
752
+ end
753
+
754
+ # Make sure that source-copying updates the checksum on the same run
755
+ def test_sourcebeatsensure
756
+ source = tempfile()
757
+ dest = tempfile()
758
+ File.open(source, "w") { |f| f.puts "yay" }
759
+
760
+ file = nil
761
+ assert_nothing_raised {
762
+ file = Puppet.type(:file).create(
763
+ :name => dest,
764
+ :ensure => "file",
765
+ :source => source
766
+ )
767
+ }
768
+
769
+ file.retrieve
770
+
771
+ assert_events([:file_created], file)
772
+ file.retrieve
773
+ assert_events([], file)
774
+ assert_events([], file)
775
+ end
776
+
777
+ def test_sourcewithlinks
778
+ source = tempfile()
779
+ link = tempfile()
780
+ dest = tempfile()
781
+
782
+ File.open(source, "w") { |f| f.puts "yay" }
783
+ File.symlink(source, link)
784
+
785
+ file = nil
786
+ assert_nothing_raised {
787
+ file = Puppet.type(:file).create(
788
+ :name => dest,
789
+ :source => link
790
+ )
791
+ }
792
+
793
+ # Default to skipping links
794
+ assert_events([], file)
795
+ assert(! FileTest.exists?(dest), "Created link")
796
+
797
+ # Now follow the links
798
+ file[:links] = :follow
799
+ assert_events([:file_created], file)
800
+ assert(FileTest.file?(dest), "Destination is not a file")
801
+
802
+ # Now copy the links
803
+ #assert_raise(Puppet::Network::Handler::FileServerError) {
804
+ trans = nil
805
+ assert_nothing_raised {
806
+ file[:links] = :manage
807
+ comp = newcomp(file)
808
+ trans = comp.evaluate
809
+ trans.evaluate
810
+ }
811
+
812
+ assert(trans.failed?(file), "Object did not fail to copy links")
813
+ end
814
+
815
+ def test_changes
816
+ source = tempfile()
817
+ dest = tempfile()
818
+
819
+ File.open(source, "w") { |f| f.puts "yay" }
820
+
821
+ obj = nil
822
+ assert_nothing_raised {
823
+ obj = Puppet.type(:file).create(
824
+ :name => dest,
825
+ :source => source
826
+ )
827
+ }
828
+
829
+ assert_events([:file_created], obj)
830
+ assert_equal(File.read(source), File.read(dest), "Files are not equal")
831
+ assert_events([], obj)
832
+
833
+ File.open(source, "w") { |f| f.puts "boo" }
834
+
835
+ assert_events([:file_changed], obj)
836
+ assert_equal(File.read(source), File.read(dest), "Files are not equal")
837
+ assert_events([], obj)
838
+
839
+ File.open(dest, "w") { |f| f.puts "kaboom" }
840
+
841
+ # There are two changes, because first the checksum is noticed, and
842
+ # then the source causes a change
843
+ assert_events([:file_changed, :file_changed], obj)
844
+ assert_equal(File.read(source), File.read(dest), "Files are not equal")
845
+ assert_events([], obj)
846
+ end
847
+
848
+ def test_file_source_with_space
849
+ dir = tempfile()
850
+ source = File.join(dir, "file with spaces")
851
+ Dir.mkdir(dir)
852
+ File.open(source, "w") { |f| f.puts "yayness" }
853
+
854
+ newdir = tempfile()
855
+ newpath = File.join(newdir, "file with spaces")
856
+
857
+ file = Puppet::Type.newfile(
858
+ :path => newdir,
859
+ :source => dir,
860
+ :recurse => true
861
+ )
862
+
863
+
864
+ assert_apply(file)
865
+
866
+ assert(FileTest.exists?(newpath), "Did not create file")
867
+ assert_equal("yayness\n", File.read(newpath))
868
+ end
869
+
870
+ # Make sure files aren't replaced when replace is false, but otherwise
871
+ # are.
872
+ def test_replace
873
+ source = tempfile()
874
+ File.open(source, "w") { |f| f.puts "yayness" }
875
+
876
+ dest = tempfile()
877
+ file = Puppet::Type.newfile(
878
+ :path => dest,
879
+ :source => source,
880
+ :recurse => true
881
+ )
882
+
883
+
884
+ assert_apply(file)
885
+
886
+ assert(FileTest.exists?(dest), "Did not create file")
887
+ assert_equal("yayness\n", File.read(dest))
888
+
889
+ # Now set :replace
890
+ assert_nothing_raised {
891
+ file[:replace] = false
892
+ }
893
+
894
+ File.open(source, "w") { |f| f.puts "funtest" }
895
+ assert_apply(file)
896
+
897
+ # Make sure it doesn't change.
898
+ assert_equal("yayness\n", File.read(dest),
899
+ "File got replaced when :replace was false")
900
+
901
+ # Now set it to true and make sure it does change.
902
+ assert_nothing_raised {
903
+ file[:replace] = true
904
+ }
905
+ assert_apply(file)
906
+
907
+ # Make sure it doesn't change.
908
+ assert_equal("funtest\n", File.read(dest),
909
+ "File was not replaced when :replace was true")
910
+ end
911
+
912
+ # Testing #285. This just makes sure that URI parsing works correctly.
913
+ def test_fileswithpoundsigns
914
+ dir = tstdir()
915
+ subdir = File.join(dir, "#dir")
916
+ Dir.mkdir(subdir)
917
+ file = File.join(subdir, "file")
918
+ File.open(file, "w") { |f| f.puts "yayness" }
919
+
920
+ dest = tempfile()
921
+ source = "file://localhost#{dir}"
922
+ obj = Puppet::Type.newfile(
923
+ :path => dest,
924
+ :source => source,
925
+ :recurse => true
926
+ )
927
+
928
+ newfile = File.join(dest, "#dir", "file")
929
+
930
+ poundsource = "file://localhost#{subdir}"
931
+
932
+ sourceobj = path = nil
933
+ assert_nothing_raised {
934
+ sourceobj, path = obj.uri2obj(poundsource)
935
+ }
936
+
937
+ assert_equal("/localhost" + URI.escape(subdir), path)
938
+
939
+ assert_apply(obj)
940
+
941
+ assert(FileTest.exists?(newfile), "File did not get created")
942
+ assert_equal("yayness\n", File.read(newfile))
943
+ end
944
+
945
+ def test_sourceselect
946
+ dest = tempfile()
947
+ sources = []
948
+ 2.times { |i|
949
+ i = i + 1
950
+ source = tempfile()
951
+ sources << source
952
+ file = File.join(source, "file%s" % i)
953
+ Dir.mkdir(source)
954
+ File.open(file, "w") { |f| f.print "yay" }
955
+ }
956
+ file1 = File.join(dest, "file1")
957
+ file2 = File.join(dest, "file2")
958
+ file3 = File.join(dest, "file3")
959
+
960
+ # Now make different files with the same name in each source dir
961
+ sources.each_with_index do |source, i|
962
+ File.open(File.join(source, "file3"), "w") { |f|
963
+ f.print i.to_s
964
+ }
965
+ end
966
+
967
+ obj = Puppet::Type.newfile(:path => dest, :recurse => true,
968
+ :source => sources)
969
+
970
+ assert_equal(:first, obj[:sourceselect], "sourceselect has the wrong default")
971
+ # First, make sure we default to just copying file1
972
+ assert_apply(obj)
973
+
974
+ assert(FileTest.exists?(file1), "File from source 1 was not copied")
975
+ assert(! FileTest.exists?(file2), "File from source 2 was copied")
976
+ assert(FileTest.exists?(file3), "File from source 1 was not copied")
977
+ assert_equal("0", File.read(file3), "file3 got wrong contents")
978
+
979
+ # Now reset sourceselect
980
+ assert_nothing_raised do
981
+ obj[:sourceselect] = :all
982
+ end
983
+ File.unlink(file1)
984
+ File.unlink(file3)
985
+ Puppet.err :yay
986
+ assert_apply(obj)
987
+
988
+ assert(FileTest.exists?(file1), "File from source 1 was not copied")
989
+ assert(FileTest.exists?(file2), "File from source 2 was copied")
990
+ assert(FileTest.exists?(file3), "File from source 1 was not copied")
991
+ assert_equal("0", File.read(file3), "file3 got wrong contents")
992
+ end
993
+
994
+ def test_recursive_sourceselect
995
+ dest = tempfile()
996
+ source1 = tempfile()
997
+ source2 = tempfile()
998
+ files = []
999
+ [source1, source2, File.join(source1, "subdir"), File.join(source2, "subdir")].each_with_index do |dir, i|
1000
+ Dir.mkdir(dir)
1001
+ file = File.join(dir, "file%s" % i)
1002
+ File.open(file, "w") { |f| f.puts "yay%s" % i}
1003
+ files << file
1004
+ end
1005
+
1006
+ obj = Puppet::Type.newfile(:path => dest, :source => [source1, source2], :sourceselect => :all, :recurse => true)
1007
+
1008
+ assert_apply(obj)
1009
+
1010
+ ["file0", "file1", "subdir/file2", "subdir/file3"].each do |file|
1011
+ path = File.join(dest, file)
1012
+ assert(FileTest.exists?(path), "did not create %s" % file)
1013
+
1014
+ assert_equal("yay%s\n" % File.basename(file).sub("file", ''), File.read(path), "file was not copied correctly")
1015
+ end
1016
+ end
1017
+
1018
+ # #594
1019
+ def test_purging_missing_remote_files
1020
+ source = tempfile()
1021
+ dest = tempfile()
1022
+ s1 = File.join(source, "file1")
1023
+ s2 = File.join(source, "file2")
1024
+ d1 = File.join(dest, "file1")
1025
+ d2 = File.join(dest, "file2")
1026
+ Dir.mkdir(source)
1027
+ [s1, s2].each { |name| File.open(name, "w") { |file| file.puts "something" } }
1028
+
1029
+ # We have to add a second parameter, because that's the only way to expose the "bug".
1030
+ file = Puppet::Type.newfile(:path => dest, :source => source, :recurse => true, :purge => true, :mode => "755")
1031
+
1032
+ assert_apply(file)
1033
+
1034
+ assert(FileTest.exists?(d1), "File1 was not copied")
1035
+ assert(FileTest.exists?(d2), "File2 was not copied")
1036
+
1037
+ File.unlink(s2)
1038
+
1039
+ assert_apply(file)
1040
+
1041
+ assert(FileTest.exists?(d1), "File1 was not kept")
1042
+ assert(! FileTest.exists?(d2), "File2 was not purged")
1043
+ end
1044
+ end
1045
+
1046
+ # $Id: filesources.rb 2436 2007-04-30 17:29:02Z luke $