puppet 0.18.4 → 0.22.4

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

Potentially problematic release.


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

Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../lib/puppettest'
4
+
5
+ require 'mocha'
6
+
7
+ class DpkgPackageProviderTest < PuppetTest::TestCase
8
+ confine "dpkg package provider missing" =>
9
+ Puppet::Type.type(:package).provider(:dpkg).suitable?
10
+ def setup
11
+ super
12
+ @type = Puppet::Type.type(:package)
13
+ end
14
+
15
+ def test_install
16
+ pkg = @type.create :name => 'faff',
17
+ :provider => :dpkg,
18
+ :ensure => :present,
19
+ :source => "/tmp/faff.deb"
20
+
21
+ pkg.provider.expects(
22
+ :dpkgquery
23
+ ).with(
24
+ '-W',
25
+ '--showformat',
26
+ '${Status} ${Package} ${Version}\n',
27
+ 'faff'
28
+ ).returns(
29
+ "deinstall ok config-files faff 1.2.3-1\n"
30
+ )
31
+
32
+ pkg.provider.expects(
33
+ :dpkg
34
+ ).with(
35
+ '-i',
36
+ '/tmp/faff.deb'
37
+ ).returns(0)
38
+
39
+ pkg.evaluate.each { |state| state.transaction = self; state.forward }
40
+ end
41
+
42
+ def test_purge
43
+ pkg = @type.create :name => 'faff', :provider => :dpkg, :ensure => :purged
44
+
45
+ pkg.provider.expects(
46
+ :dpkgquery
47
+ ).with(
48
+ '-W',
49
+ '--showformat',
50
+ '${Status} ${Package} ${Version}\n',
51
+ 'faff'
52
+ ).returns(
53
+ "install ok installed faff 1.2.3-1\n"
54
+ )
55
+ pkg.provider.expects(
56
+ :dpkg
57
+ ).with(
58
+ '--purge',
59
+ 'faff'
60
+ ).returns(0)
61
+
62
+ pkg.evaluate.each { |state| state.transaction = self; state.forward }
63
+ end
64
+ end
@@ -0,0 +1,668 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../../lib") if __FILE__ =~ /\.rb$/
4
+
5
+ require 'puppettest'
6
+ require 'mocha'
7
+ require 'puppettest/fileparsing'
8
+ require 'puppet/util/filetype'
9
+ require 'puppet/provider/parsedfile'
10
+ require 'facter'
11
+
12
+ class TestParsedFile < Test::Unit::TestCase
13
+ include PuppetTest
14
+ include PuppetTest::FileParsing
15
+
16
+ Puppet::Type.newtype(:testparsedfiletype) do
17
+ ensurable
18
+ newproperty(:one) do
19
+ newvalue(:a)
20
+ newvalue(:b)
21
+ end
22
+ newproperty(:two) do
23
+ newvalue(:c)
24
+ newvalue(:d)
25
+ end
26
+
27
+ newparam(:name) do
28
+ end
29
+
30
+ # The target should always be a property, not a parameter.
31
+ newproperty(:target) do
32
+ defaultto { @parent.class.defaultprovider.default_target }
33
+ end
34
+ end
35
+
36
+ # A simple block to skip the complexity of a full transaction.
37
+ def apply(model)
38
+ [:one, :two, :ensure].each do |st|
39
+ Puppet.info "Setting %s: %s => %s" %
40
+ [model[:name], st, model.should(st)]
41
+ model.provider.send(st.to_s + "=", model.should(st))
42
+ end
43
+ end
44
+
45
+ def mkmodel(name, options = {})
46
+ options[:one] ||= "a"
47
+ options[:two] ||= "c"
48
+ options[:name] ||= name
49
+
50
+ model = @type.create(options)
51
+ end
52
+
53
+ def mkprovider(name = :parsed)
54
+ @provider = @type.provide(name, :parent => Puppet::Provider::ParsedFile,
55
+ :filetype => :ram, :default_target => "yayness") do
56
+ record_line name, :fields => %w{name one two}
57
+ end
58
+ end
59
+
60
+ def setup
61
+ super
62
+ @type = Puppet::Type.type(:testparsedfiletype)
63
+ end
64
+
65
+ def teardown
66
+ if defined? @provider
67
+ @type.unprovide(@provider.name)
68
+ @provider = nil
69
+ end
70
+ super
71
+ end
72
+
73
+ def test_create_provider
74
+ assert_nothing_raised do
75
+ mkprovider
76
+ end
77
+ end
78
+
79
+ def test_model_attributes
80
+ prov = nil
81
+ assert_nothing_raised do
82
+ prov = mkprovider
83
+ end
84
+
85
+ [:one, :two, :name].each do |attr|
86
+ assert(prov.method_defined?(attr), "Did not define %s" % attr)
87
+ end
88
+
89
+ # Now make sure they stay around
90
+ fakemodel = fakemodel(:testparsedfiletype, "yay")
91
+
92
+ file = prov.new(fakemodel)
93
+
94
+ assert_nothing_raised do
95
+ file.name = :yayness
96
+ end
97
+
98
+ # The provider converts to strings
99
+ assert_equal(:yayness, file.name)
100
+ end
101
+
102
+ def test_filetype
103
+ prov = mkprovider
104
+
105
+ flat = Puppet::Util::FileType.filetype(:flat)
106
+ ram = Puppet::Util::FileType.filetype(:ram)
107
+ assert_nothing_raised do
108
+ prov.filetype = :flat
109
+ end
110
+
111
+ assert_equal(flat, prov.filetype)
112
+
113
+ assert_nothing_raised do
114
+ prov.filetype = ram
115
+ end
116
+ assert_equal(ram, prov.filetype)
117
+ end
118
+
119
+ # Make sure we correctly create a new filetype object, but only when
120
+ # necessary.
121
+ def test_fileobject
122
+ prov = mkprovider
123
+
124
+ path = tempfile()
125
+ obj = nil
126
+ assert_nothing_raised do
127
+ obj = prov.target_object(path)
128
+ end
129
+
130
+ # The default filetype is 'ram'
131
+ assert_instance_of(Puppet::Util::FileType.filetype(:ram), obj)
132
+
133
+ newobj = nil
134
+ assert_nothing_raised do
135
+ newobj = prov.target_object(path)
136
+ end
137
+
138
+ assert_equal(obj, newobj, "did not reuse file object")
139
+
140
+ # now make sure clear does the right thing
141
+ assert_nothing_raised do
142
+ prov.clear
143
+ end
144
+ assert_nothing_raised do
145
+ newobj = prov.target_object(path)
146
+ end
147
+
148
+ assert(obj != newobj, "did not reuse file object")
149
+ end
150
+
151
+ def test_retrieve
152
+ prov = mkprovider
153
+
154
+ prov.filetype = :ram
155
+
156
+ # Override the parse method with our own
157
+ prov.meta_def(:parse) do |text|
158
+ return [text]
159
+ end
160
+
161
+ path = :yayness
162
+ file = prov.target_object(path)
163
+ text = "a test"
164
+ file.write(text)
165
+
166
+ ret = nil
167
+ assert_nothing_raised do
168
+ ret = prov.retrieve(path)
169
+ end
170
+
171
+ assert_equal([text], ret)
172
+
173
+ # Now set the text to nil and make sure we get an empty array
174
+ file.write(nil)
175
+ assert_nothing_raised do
176
+ ret = prov.retrieve(path)
177
+ end
178
+
179
+ assert_equal([], ret)
180
+
181
+ # And the empty string should return an empty array
182
+ file.write("")
183
+ assert_nothing_raised do
184
+ ret = prov.retrieve(path)
185
+ end
186
+
187
+ assert_equal([], ret)
188
+ end
189
+
190
+ # Verify that prefetch will parse the file, create any necessary instances,
191
+ # and set the 'is' values appropriately.
192
+ def test_prefetch
193
+ prov = mkprovider
194
+
195
+ prov.filetype = :ram
196
+ prov.default_target = :default
197
+
198
+ # Create a couple of demo files
199
+ prov.target_object(:file1).write "bill b c"
200
+
201
+ prov.target_object(:file2).write "jill b d"
202
+
203
+ prov.target_object(:default).write "will b d"
204
+
205
+ # Create some models for some of those demo files
206
+ model = mkmodel "bill", :target => :file1
207
+ default = mkmodel "will", :target => :default
208
+
209
+ assert_nothing_raised do
210
+ prov.prefetch
211
+ end
212
+
213
+ # Make sure we prefetched our models.
214
+ assert_equal("b", model.provider.one)
215
+ assert_equal("b", default.provider.one)
216
+ assert_equal("d", default.provider.two)
217
+
218
+ # Now list all of them and make sure we get everything back
219
+ hashes = nil
220
+ assert_nothing_raised do
221
+ hashes = prov.list
222
+ end
223
+
224
+ names = nil
225
+ assert_nothing_raised do
226
+ names = prov.list_by_name
227
+ end
228
+
229
+ %w{bill jill will}.each do |name|
230
+ assert(hashes.find { |r| r[:name] == name},
231
+ "Did not return %s in list" % name)
232
+ assert(names.include?(name),
233
+ "Did not return %s in list_by_name" % name)
234
+ end
235
+ end
236
+
237
+ # Make sure we can correctly prefetch on a target.
238
+ def test_prefetch_target
239
+ prov = mkprovider
240
+
241
+ prov.filetype = :ram
242
+ target = :yayness
243
+ prov.target_object(target).write "yay b d"
244
+
245
+ model = mkmodel "yay", :target => :yayness
246
+
247
+ assert_nothing_raised do
248
+ prov.prefetch_target(:yayness)
249
+ end
250
+
251
+ # Now make sure we correctly got the hash
252
+ mprov = model.provider
253
+ assert_equal("b", mprov.one)
254
+ assert_equal("d", mprov.two)
255
+ end
256
+
257
+ def test_prefetch_match
258
+ prov = mkprovider
259
+
260
+ prov.meta_def(:match) do |record|
261
+ # Look for matches on :one
262
+ self.model.find do |m|
263
+ m.should(:one).to_s == record[:one].to_s
264
+ end
265
+ end
266
+
267
+ prov.filetype = :ram
268
+ target = :yayness
269
+ prov.target_object(target).write "foo b d"
270
+
271
+ model = mkmodel "yay", :target => :yayness, :one => "b"
272
+
273
+ assert_nothing_raised do
274
+ prov.prefetch_target(:yayness)
275
+ end
276
+
277
+ # Now make sure we correctly got the hash
278
+ mprov = model.provider
279
+ assert_equal("yay", model[:name])
280
+ assert_equal("b", mprov.one)
281
+ assert_equal("d", mprov.two)
282
+ end
283
+
284
+ # We need to test that we're retrieving files from all three locations:
285
+ # from any existing target_objects, from the default file location, and
286
+ # from any existing model instances.
287
+ def test_targets
288
+ prov = mkprovider
289
+
290
+ files = {}
291
+
292
+ # Set the default target
293
+ default = tempfile()
294
+ files[:default] = default
295
+ prov.default_target = default
296
+
297
+ # Create a file object
298
+ inmem = tempfile()
299
+ files[:inmemory] = inmem
300
+ prov.target_object(inmem).write("inmem yay ness")
301
+
302
+ # Lastly, create a model with separate is and should values
303
+ mtarget = tempfile()
304
+ istarget = tempfile()
305
+ files[:models] = mtarget
306
+ files[:ismodels] = istarget
307
+ model = mkmodel "yay", :target => mtarget
308
+ model.is = [:target, istarget]
309
+
310
+ assert(model.should(:target), "Did not get a value for target")
311
+ assert(model.is(:target), "Did not get a value for target")
312
+
313
+ list = nil
314
+ assert_nothing_raised do
315
+ list = prov.targets
316
+ end
317
+
318
+ files.each do |name, file|
319
+ assert(list.include?(file), "Provider did not find %s file" % name)
320
+ end
321
+ end
322
+
323
+ # Make sure that flushing behaves correctly. This is what actually writes
324
+ # the data out to disk.
325
+ def test_flush
326
+ prov = mkprovider
327
+
328
+ prov.filetype = :ram
329
+ prov.default_target = :yayness
330
+
331
+ # Create some models.
332
+ one = mkmodel "one", :one => "a", :two => "c", :target => :yayness
333
+ two = mkmodel "two", :one => "b", :two => "d", :target => :yayness
334
+
335
+ # Write out a file with different data.
336
+ prov.target_object(:yayness).write "one b d\ntwo a c"
337
+
338
+ prov.prefetch
339
+
340
+ # Apply and flush the first model.
341
+ assert_nothing_raised do
342
+ apply(one)
343
+ end
344
+ assert_nothing_raised { one.flush }
345
+
346
+ # Make sure it changed our file
347
+ assert_equal(:a, one.provider.one)
348
+ assert_equal(:c, one.provider.two)
349
+
350
+ # And make sure it's right on disk
351
+ assert(prov.target_object(:yayness).read.include?("one a c"),
352
+ "Did not write out correct data")
353
+
354
+ # Make sure the second model has not been modified
355
+ assert_equal("a", two.provider.one, "Two was flushed early")
356
+ assert_equal("c", two.provider.two, "Two was flushed early")
357
+
358
+ # And on disk
359
+ assert(prov.target_object(:yayness).read.include?("two a c"),
360
+ "Wrote out other model")
361
+
362
+ # Now fetch the data again and make sure we're still right
363
+ assert_nothing_raised { prov.prefetch }
364
+ assert_equal("a", one.provider.one)
365
+ assert_equal("a", two.provider.one)
366
+
367
+ # Now flush the second model and make sure it goes well
368
+ assert_nothing_raised { apply(two) }
369
+ assert_nothing_raised { two.flush }
370
+
371
+ assert_equal(:b, two.provider.one)
372
+ end
373
+
374
+ def test_creating_file
375
+ prov = mkprovider
376
+ prov.clear
377
+
378
+ prov.default_target = :basic
379
+
380
+ model = mkmodel "yay", :target => :basic, :one => "a", :two => "c"
381
+
382
+ assert_equal(:present, model.should(:ensure))
383
+
384
+ apply(model)
385
+
386
+ assert_nothing_raised do
387
+ model.flush
388
+ end
389
+
390
+ assert(prov.target_object(:basic).read.include?("yay a c"),
391
+ "Did not create file")
392
+
393
+ # Make a change
394
+ model.provider.one = "b"
395
+
396
+ # Flush it
397
+ assert_nothing_raised do
398
+ model.flush
399
+ end
400
+
401
+ # And make sure our model doesn't appear twice in the file.
402
+ assert_equal("yay b c\n",
403
+ prov.target_object(:basic).read)
404
+ end
405
+
406
+ # Make sure a record can switch targets.
407
+ def test_switching_targets
408
+ prov = mkprovider
409
+
410
+ prov.filetype = :ram
411
+ prov.default_target = :first
412
+
413
+ # Make three models, one for each target and one to switch
414
+ first = mkmodel "first", :target => :first
415
+ second = mkmodel "second", :target => :second
416
+ mover = mkmodel "mover", :target => :first
417
+
418
+ [first, second, mover].each do |m|
419
+ assert_nothing_raised("Could not apply %s" % m[:name]) do
420
+ apply(m)
421
+ end
422
+ end
423
+
424
+ # Flush.
425
+ [first, second, mover].each do |m|
426
+ assert_nothing_raised do
427
+ m.flush
428
+ end
429
+ end
430
+
431
+ check = proc do |target, name|
432
+ assert(prov.target_object(target).read.include?("%s a c" % name),
433
+ "Did not sync %s" % name)
434
+ end
435
+ # Make sure the data is there
436
+ check.call(:first, :first)
437
+ check.call(:second, :second)
438
+ check.call(:first, :mover)
439
+
440
+ # Now change the target for the mover
441
+ mover[:target] = :second
442
+
443
+ # Apply it
444
+ assert_nothing_raised do
445
+ apply(mover)
446
+ end
447
+
448
+ # Flush
449
+ assert_nothing_raised do
450
+ mover.flush
451
+ end
452
+
453
+ # Make sure the data is there
454
+ check.call(:first, :first)
455
+ check.call(:second, :second)
456
+ check.call(:second, :mover)
457
+
458
+ # And make sure the mover is no longer in the first file
459
+ assert(prov.target_object(:first) !~ /mover/,
460
+ "Mover was not removed from first file")
461
+ end
462
+
463
+ # Make sure that 'ensure' correctly calls 'sync' on all properties.
464
+ def test_ensure
465
+ prov = mkprovider
466
+
467
+ prov.filetype = :ram
468
+ prov.default_target = :first
469
+
470
+ # Make two models, one that starts on disk and one that doesn't
471
+ ondisk = mkmodel "ondisk", :target => :first
472
+ notdisk = mkmodel "notdisk", :target => :first
473
+
474
+ prov.target_object(:first).write "ondisk a c\n"
475
+ prov.prefetch
476
+
477
+ assert_equal(:present, notdisk.should(:ensure),
478
+ "Did not get default ensure value")
479
+
480
+ # Try creating the object
481
+ assert_nothing_raised { notdisk.provider.create() }
482
+
483
+ # Now make sure all of the data is copied over correctly.
484
+ notdisk.class.validproperties.each do |property|
485
+ assert_equal(notdisk.should(property), notdisk.provider.property_hash[property],
486
+ "%s was not copied over during creation" % property)
487
+ end
488
+
489
+ # Flush it to disk and make sure it got copied down
490
+ assert_nothing_raised do
491
+ notdisk.flush
492
+ end
493
+
494
+ assert(prov.target_object(:first).read =~ /^notdisk/,
495
+ "Did not write out object to disk")
496
+ assert(prov.target_object(:first).read =~ /^ondisk/,
497
+ "Lost object on disk")
498
+
499
+ # Make sure our on-disk model behaves appropriately.
500
+ assert_equal(:present, ondisk.provider.ensure)
501
+
502
+ # Now destroy the object
503
+ assert_nothing_raised { notdisk.provider.destroy() }
504
+
505
+ assert_nothing_raised { notdisk.flush }
506
+
507
+ # And make sure it's no longer present
508
+ assert(prov.target_object(:first).read !~ /^notdisk/,
509
+ "Did not remove thing from disk")
510
+ assert(prov.target_object(:first).read =~ /^ondisk/,
511
+ "Lost object on disk")
512
+ assert_equal(:present, ondisk.provider.ensure)
513
+ end
514
+
515
+ def test_absent_fields
516
+ prov = @type.provide(:record, :parent => Puppet::Provider::ParsedFile) do
517
+ record_line :record, :fields => %w{name one two},
518
+ :separator => "\s"
519
+ end
520
+ cleanup { @type.unprovide(:record) }
521
+
522
+ line = prov.parse_line("a d")
523
+
524
+ assert_equal("a", line[:name], "field name was not set")
525
+ assert_equal(:absent, line[:one], "field one was not set to absent")
526
+
527
+ # Now use a different provider with a non-blank "absent"
528
+ prov = @type.provide(:cronstyle, :parent => Puppet::Provider::ParsedFile) do
529
+ record_line :cronstyle, :fields => %w{name one two},
530
+ :separator => "\s", :absent => "*"
531
+ end
532
+ cleanup { @type.unprovide(:cronstyle) }
533
+ line = prov.parse_line("a * d")
534
+
535
+ assert_equal("a", line[:name], "field name was not set")
536
+ assert_equal(:absent, line[:one], "field one was not set to absent")
537
+ end
538
+
539
+ # This test is because in x2puppet I was having problems where multiple
540
+ # retrievals somehow destroyed the 'is' values.
541
+ def test_value_retrieval
542
+ prov = mkprovider
543
+ prov.default_target = :yayness
544
+
545
+ prov.target_object(:yayness).write "bill a c\njill b d"
546
+
547
+ list = @type.list
548
+
549
+ bill = list.find { |r| r[:name] == "bill" }
550
+ jill = list.find { |r| r[:name] == "jill" }
551
+ assert(bill, "Could not find bill")
552
+ assert(jill, "Could not find jill")
553
+
554
+ prov = bill.provider
555
+
556
+ 4.times do |i|
557
+ assert(prov.one, "Did not get a value for 'one' on try %s" % (i + 1))
558
+ end
559
+
560
+ # First make sure we can retrieve values multiple times from the
561
+ # provider
562
+ assert(bill.is(:one), "Bill does not have a value for 'one'")
563
+ assert(bill.is(:one), "Bill does not have a value for 'one' on second try")
564
+ assert_nothing_raised do
565
+ bill.retrieve
566
+ end
567
+ assert(bill.is(:one), "bill's value for 'one' disappeared")
568
+ end
569
+
570
+ # Make sure that creating a new model finds existing records in memory
571
+ def test_initialize_finds_records
572
+ prov = mkprovider
573
+ prov.default_target = :yayness
574
+
575
+ prov.target_object(:yayness).write "bill a c\njill b d"
576
+
577
+ prov.prefetch
578
+
579
+ # Now make a model
580
+ bill = nil
581
+ assert_nothing_raised do
582
+ bill = @type.create :name => "bill"
583
+ end
584
+
585
+ assert_equal("a", bill.provider.one,
586
+ "Record was not found in memory")
587
+ end
588
+
589
+ # Make sure invalid fields always show up as insync
590
+ def test_invalid_fields
591
+ prov = @type.provide(:test, :parent => Puppet::Provider::ParsedFile,
592
+ :filetype => :ram, :default_target => :yayness) do
593
+ record_line :test, :fields => %w{name two}
594
+ end
595
+ cleanup do @type.unprovide(:test) end
596
+
597
+ bill = nil
598
+ assert_nothing_raised do
599
+ bill = @type.create :name => "bill",
600
+ :one => "a", :two => "c"
601
+ end
602
+
603
+ assert_apply(bill)
604
+
605
+ prov.prefetch
606
+ assert_nothing_raised do
607
+ bill.retrieve
608
+ end
609
+
610
+ assert(bill.insync?,
611
+ "An invalid field marked the record out of sync")
612
+ end
613
+
614
+ # Make sure we call the prefetch hook at the right place.
615
+ def test_prefetch_hook
616
+ prov = @type.provide(:test, :parent => Puppet::Provider::ParsedFile,
617
+ :filetype => :ram, :default_target => :yayness) do
618
+
619
+ def self.prefetch_hook(records)
620
+ records
621
+ end
622
+
623
+ record_line :test, :fields => %w{name two}
624
+ end
625
+ cleanup do @type.unprovide(:test) end
626
+
627
+ target = "target"
628
+
629
+ records = [{:target => "nope"}]
630
+ targeted = {:target => "target"}
631
+ prov.send(:instance_variable_set, "@records", records)
632
+ prov.expects(:retrieve).with(target).returns([targeted])
633
+ prov.expects(:target_records).with(target).returns([targeted])
634
+
635
+ prov.expects(:prefetch_hook).with([targeted]).returns([targeted])
636
+
637
+ prov.prefetch_target(target)
638
+ end
639
+
640
+ # #529
641
+ def test_keep_content_with_target
642
+ mkprovider
643
+ @provider.filetype = :flat
644
+ dpath = tempfile
645
+ opath = tempfile
646
+ @provider.default_target = dpath
647
+
648
+ dtarget = @provider.target_object(dpath)
649
+ otarget = @provider.target_object(opath)
650
+
651
+ dtarget.write("dname a c\n")
652
+ otarget.write("oname b d\n")
653
+
654
+ # Now make a resource that targets elsewhat.
655
+ res = @type.create(:name => "test", :one => "a", :two => "c",
656
+ :target => opath)
657
+
658
+ assert(res.property(:target), "Target is a parameter, not a property")
659
+
660
+ assert_apply(res)
661
+
662
+ assert_equal("oname b d\ntest a c\n", otarget.read,
663
+ "did not get correct results in specified target")
664
+ end
665
+ end
666
+
667
+ # $Id: parsedfile.rb 2290 2007-03-18 18:00:26Z luke $
668
+