puppet 0.18.4 → 0.22.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. data/CHANGELOG +288 -0
  2. data/README +2 -2
  3. data/Rakefile +78 -5
  4. data/bin/puppet +28 -36
  5. data/bin/puppetca +81 -38
  6. data/bin/puppetd +65 -62
  7. data/bin/puppetdoc +409 -140
  8. data/bin/puppetmasterd +59 -47
  9. data/bin/puppetrun +38 -23
  10. data/conf/freebsd/puppetd +26 -0
  11. data/conf/freebsd/puppetmasterd +26 -0
  12. data/conf/gentoo/conf.d/puppet +5 -0
  13. data/conf/gentoo/conf.d/puppetmaster +12 -0
  14. data/conf/gentoo/init.d/puppet +38 -0
  15. data/conf/gentoo/init.d/puppetmaster +50 -0
  16. data/conf/gentoo/puppet/fileserver.conf +12 -0
  17. data/conf/gentoo/puppet/puppetca.conf +29 -0
  18. data/conf/gentoo/puppet/puppetd.conf +29 -0
  19. data/conf/gentoo/puppet/puppetmasterd.conf +29 -0
  20. data/conf/redhat/client.init +10 -5
  21. data/conf/redhat/client.sysconfig +1 -1
  22. data/conf/redhat/fileserver.conf +2 -2
  23. data/conf/redhat/logrotate +1 -1
  24. data/conf/redhat/no-lockdir.patch +13 -0
  25. data/conf/redhat/puppet.spec +65 -8
  26. data/conf/redhat/puppetd.conf +0 -4
  27. data/conf/redhat/server.init +3 -6
  28. data/conf/solaris/pkginfo +1 -1
  29. data/conf/solaris/smf/svc-puppetd +2 -2
  30. data/conf/suse/client.init +142 -0
  31. data/conf/suse/puppet.spec +221 -0
  32. data/conf/suse/server.init +162 -0
  33. data/examples/code/mac_automount.pp +16 -0
  34. data/examples/root/bin/sleeper +3 -5
  35. data/examples/root/etc/init.d/sleeper +8 -2
  36. data/examples/root/etc/puppet/fileserver.conf +12 -2
  37. data/examples/root/etc/puppet/namespaceauth.conf +20 -0
  38. data/examples/root/etc/puppet/puppetd.conf +4 -0
  39. data/examples/root/etc/puppet/puppetmasterd.conf +6 -9
  40. data/examples/root/etc/puppet/tagmail.conf +1 -0
  41. data/ext/emacs/puppet-mode.el +46 -1
  42. data/ext/logcheck/puppet +15 -0
  43. data/ext/module_puppet +15 -23
  44. data/ext/vim/puppet.vim +4 -2
  45. data/install.rb +2 -1
  46. data/lib/puppet.rb +76 -207
  47. data/lib/puppet/configuration.rb +331 -0
  48. data/lib/puppet/daemon.rb +63 -246
  49. data/lib/puppet/dsl.rb +371 -0
  50. data/lib/puppet/element.rb +8 -26
  51. data/lib/puppet/error.rb +54 -0
  52. data/lib/puppet/event.rb +8 -243
  53. data/lib/puppet/{base64.rb → external/base64.rb} +0 -0
  54. data/lib/puppet/external/event-loop.rb +1 -0
  55. data/lib/puppet/{event-loop → external/event-loop}/better-definers.rb +0 -0
  56. data/lib/puppet/{event-loop → external/event-loop}/event-loop.rb +2 -2
  57. data/lib/puppet/{event-loop → external/event-loop}/signal-system.rb +1 -1
  58. data/lib/puppet/external/gratr.rb +33 -0
  59. data/lib/puppet/external/gratr/adjacency_graph.rb +257 -0
  60. data/lib/puppet/external/gratr/base.rb +34 -0
  61. data/lib/puppet/external/gratr/biconnected.rb +116 -0
  62. data/lib/puppet/external/gratr/chinese_postman.rb +123 -0
  63. data/lib/puppet/external/gratr/common.rb +73 -0
  64. data/lib/puppet/external/gratr/comparability.rb +92 -0
  65. data/lib/puppet/external/gratr/digraph.rb +116 -0
  66. data/lib/puppet/external/gratr/digraph_distance.rb +185 -0
  67. data/lib/puppet/external/gratr/dot.rb +90 -0
  68. data/lib/puppet/external/gratr/edge.rb +145 -0
  69. data/lib/puppet/external/gratr/graph.rb +303 -0
  70. data/lib/puppet/external/gratr/graph_api.rb +83 -0
  71. data/lib/puppet/external/gratr/import.rb +44 -0
  72. data/lib/puppet/external/gratr/labels.rb +90 -0
  73. data/lib/puppet/external/gratr/maximum_flow.rb +64 -0
  74. data/lib/puppet/external/gratr/rdot.rb +327 -0
  75. data/lib/puppet/external/gratr/search.rb +409 -0
  76. data/lib/puppet/external/gratr/strong_components.rb +127 -0
  77. data/lib/puppet/external/gratr/undirected_graph.rb +153 -0
  78. data/lib/puppet/{lock.rb → external/lock.rb} +1 -1
  79. data/lib/puppet/feature/base.rb +20 -0
  80. data/lib/puppet/feature/rails.rb +52 -0
  81. data/lib/puppet/metatype/attributes.rb +719 -0
  82. data/lib/puppet/metatype/closure.rb +111 -0
  83. data/lib/puppet/metatype/container.rb +94 -0
  84. data/lib/puppet/metatype/evaluation.rb +118 -0
  85. data/lib/puppet/metatype/instances.rb +261 -0
  86. data/lib/puppet/metatype/manager.rb +169 -0
  87. data/lib/puppet/metatype/metaparams.rb +409 -0
  88. data/lib/puppet/metatype/providers.rb +260 -0
  89. data/lib/puppet/metatype/relationships.rb +116 -0
  90. data/lib/puppet/metatype/schedules.rb +39 -0
  91. data/lib/puppet/metatype/tags.rb +39 -0
  92. data/lib/puppet/modules.rb +113 -0
  93. data/lib/puppet/network/authconfig.rb +168 -0
  94. data/lib/puppet/network/authorization.rb +84 -0
  95. data/lib/puppet/network/authstore.rb +293 -0
  96. data/lib/puppet/network/client.rb +187 -0
  97. data/lib/puppet/network/client/ca.rb +56 -0
  98. data/lib/puppet/network/client/dipper.rb +81 -0
  99. data/lib/puppet/network/client/file.rb +7 -0
  100. data/lib/puppet/network/client/logger.rb +6 -0
  101. data/lib/puppet/network/client/master.rb +644 -0
  102. data/lib/puppet/{client → network/client}/proxy.rb +3 -3
  103. data/lib/puppet/{client/reporter.rb → network/client/report.rb} +4 -7
  104. data/lib/puppet/{client/pelement.rb → network/client/resource.rb} +6 -19
  105. data/lib/puppet/network/client/runner.rb +13 -0
  106. data/lib/puppet/network/client/status.rb +5 -0
  107. data/lib/puppet/network/client_request.rb +32 -0
  108. data/lib/puppet/network/handler.rb +33 -0
  109. data/lib/puppet/{server → network/handler}/ca.rb +5 -6
  110. data/lib/puppet/network/handler/filebucket.rb +180 -0
  111. data/lib/puppet/{server → network/handler}/fileserver.rb +277 -219
  112. data/lib/puppet/{server → network/handler}/logger.rb +3 -5
  113. data/lib/puppet/{server → network/handler}/master.rb +42 -8
  114. data/lib/puppet/network/handler/report.rb +158 -0
  115. data/lib/puppet/network/handler/resource.rb +190 -0
  116. data/lib/puppet/{server → network/handler}/runner.rb +17 -18
  117. data/lib/puppet/network/handler/status.rb +13 -0
  118. data/lib/puppet/network/rights.rb +74 -0
  119. data/lib/puppet/network/server.rb +5 -0
  120. data/lib/puppet/network/server/mongrel.rb +138 -0
  121. data/lib/puppet/network/server/webrick.rb +153 -0
  122. data/lib/puppet/network/xmlrpc/client.rb +129 -0
  123. data/lib/puppet/network/xmlrpc/processor.rb +91 -0
  124. data/lib/puppet/network/xmlrpc/server.rb +20 -0
  125. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +121 -0
  126. data/lib/puppet/parameter.rb +390 -346
  127. data/lib/puppet/parser/ast.rb +116 -147
  128. data/lib/puppet/parser/ast/astarray.rb +17 -33
  129. data/lib/puppet/parser/ast/branch.rb +2 -0
  130. data/lib/puppet/parser/ast/caseopt.rb +7 -12
  131. data/lib/puppet/parser/ast/casestatement.rb +23 -32
  132. data/lib/puppet/parser/ast/collection.rb +19 -80
  133. data/lib/puppet/parser/ast/collexpr.rb +81 -0
  134. data/lib/puppet/parser/ast/component.rb +160 -89
  135. data/lib/puppet/parser/ast/else.rb +30 -0
  136. data/lib/puppet/parser/ast/function.rb +9 -2
  137. data/lib/puppet/parser/ast/hostclass.rb +47 -131
  138. data/lib/puppet/parser/ast/ifstatement.rb +43 -0
  139. data/lib/puppet/parser/ast/leaf.rb +10 -21
  140. data/lib/puppet/parser/ast/node.rb +32 -79
  141. data/lib/puppet/parser/ast/resourcedef.rb +222 -0
  142. data/lib/puppet/parser/ast/{typedefaults.rb → resourcedefaults.rb} +10 -16
  143. data/lib/puppet/parser/ast/resourceoverride.rb +62 -0
  144. data/lib/puppet/parser/ast/{objectparam.rb → resourceparam.rb} +12 -6
  145. data/lib/puppet/parser/ast/resourceref.rb +44 -0
  146. data/lib/puppet/parser/ast/selector.rb +16 -8
  147. data/lib/puppet/parser/ast/tag.rb +3 -1
  148. data/lib/puppet/parser/ast/vardef.rb +8 -12
  149. data/lib/puppet/parser/collector.rb +181 -0
  150. data/lib/puppet/parser/functions.rb +191 -36
  151. data/lib/puppet/parser/interpreter.rb +802 -380
  152. data/lib/puppet/parser/lexer.rb +86 -19
  153. data/lib/puppet/parser/parser.rb +1123 -960
  154. data/lib/puppet/parser/resource.rb +353 -0
  155. data/lib/puppet/parser/resource/param.rb +57 -0
  156. data/lib/puppet/parser/resource/reference.rb +71 -0
  157. data/lib/puppet/parser/scope.rb +573 -1000
  158. data/lib/puppet/parser/templatewrapper.rb +54 -0
  159. data/lib/puppet/pgraph.rb +208 -0
  160. data/lib/puppet/propertychange.rb +143 -0
  161. data/lib/puppet/provider.rb +302 -0
  162. data/lib/puppet/provider/cron/crontab.rb +187 -0
  163. data/lib/puppet/provider/group/groupadd.rb +29 -0
  164. data/lib/puppet/provider/group/netinfo.rb +12 -0
  165. data/lib/puppet/provider/group/pw.rb +31 -0
  166. data/lib/puppet/provider/host/netinfo.rb +18 -0
  167. data/lib/puppet/provider/host/parsed.rb +73 -0
  168. data/lib/puppet/provider/mount.rb +57 -0
  169. data/lib/puppet/provider/mount/netinfo.rb +38 -0
  170. data/lib/puppet/provider/mount/parsed.rb +37 -0
  171. data/lib/puppet/provider/nameservice.rb +344 -0
  172. data/lib/puppet/provider/nameservice/netinfo.rb +210 -0
  173. data/lib/puppet/provider/nameservice/objectadd.rb +45 -0
  174. data/lib/puppet/provider/nameservice/pw.rb +22 -0
  175. data/lib/puppet/provider/package/apple.rb +53 -0
  176. data/lib/puppet/provider/package/apt.rb +119 -0
  177. data/lib/puppet/provider/package/aptitude.rb +30 -0
  178. data/lib/puppet/provider/package/aptrpm.rb +79 -0
  179. data/lib/puppet/provider/package/blastwave.rb +114 -0
  180. data/lib/puppet/provider/package/darwinport.rb +88 -0
  181. data/lib/puppet/provider/package/dpkg.rb +109 -0
  182. data/lib/puppet/provider/package/freebsd.rb +43 -0
  183. data/lib/puppet/provider/package/gem.rb +104 -0
  184. data/lib/puppet/provider/package/openbsd.rb +93 -0
  185. data/lib/puppet/provider/package/pkgdmg.rb +119 -0
  186. data/lib/puppet/provider/package/portage.rb +112 -0
  187. data/lib/puppet/provider/package/ports.rb +94 -0
  188. data/lib/puppet/provider/package/rpm.rb +125 -0
  189. data/lib/puppet/provider/package/rug.rb +53 -0
  190. data/lib/puppet/provider/package/sun.rb +168 -0
  191. data/lib/puppet/provider/package/sunfreeware.rb +9 -0
  192. data/lib/puppet/provider/package/up2date.rb +45 -0
  193. data/lib/puppet/provider/package/yum.rb +54 -0
  194. data/lib/puppet/provider/parsedfile.rb +342 -0
  195. data/lib/puppet/provider/port/parsed.rb +174 -0
  196. data/lib/puppet/provider/service/base.rb +136 -0
  197. data/lib/puppet/provider/service/debian.rb +32 -0
  198. data/lib/puppet/provider/service/gentoo.rb +49 -0
  199. data/lib/puppet/{type → provider}/service/init.rb +42 -40
  200. data/lib/puppet/provider/service/redhat.rb +59 -0
  201. data/lib/puppet/{type → provider}/service/smf.rb +24 -13
  202. data/lib/puppet/provider/sshkey/parsed.rb +36 -0
  203. data/lib/puppet/provider/user/netinfo.rb +106 -0
  204. data/lib/puppet/provider/user/pw.rb +41 -0
  205. data/lib/puppet/provider/user/useradd.rb +67 -0
  206. data/lib/puppet/provider/zone/solaris.rb +208 -0
  207. data/lib/puppet/rails.rb +102 -66
  208. data/lib/puppet/rails/database/001_add_indexes.rb +38 -0
  209. data/lib/puppet/rails/database/schema.rb +89 -0
  210. data/lib/puppet/rails/external/tagging/acts_as_taggable.rb +62 -0
  211. data/lib/puppet/rails/external/tagging/init.rb +5 -0
  212. data/lib/puppet/rails/external/tagging/tag.rb +50 -0
  213. data/lib/puppet/rails/external/tagging/tagging.rb +12 -0
  214. data/lib/puppet/rails/fact_name.rb +7 -0
  215. data/lib/puppet/rails/fact_value.rb +5 -0
  216. data/lib/puppet/rails/host.rb +95 -46
  217. data/lib/puppet/rails/param_name.rb +28 -0
  218. data/lib/puppet/rails/param_value.rb +5 -0
  219. data/lib/puppet/rails/puppet_class.rb +9 -0
  220. data/lib/puppet/rails/resource.rb +95 -0
  221. data/lib/puppet/rails/source_file.rb +5 -0
  222. data/lib/puppet/relationship.rb +63 -0
  223. data/lib/puppet/reports/log.rb +14 -0
  224. data/lib/puppet/reports/rrdgraph.rb +114 -10
  225. data/lib/puppet/reports/store.rb +64 -0
  226. data/lib/puppet/reports/tagmail.rb +144 -71
  227. data/lib/puppet/sslcertificates.rb +38 -5
  228. data/lib/puppet/sslcertificates/ca.rb +142 -37
  229. data/lib/puppet/sslcertificates/certificate.rb +3 -3
  230. data/lib/puppet/sslcertificates/inventory.rb +53 -0
  231. data/lib/puppet/sslcertificates/support.rb +128 -0
  232. data/lib/puppet/transaction.rb +568 -189
  233. data/lib/puppet/transaction/report.rb +14 -3
  234. data/lib/puppet/transportable.rb +18 -10
  235. data/lib/puppet/type.rb +279 -2299
  236. data/lib/puppet/type/component.rb +63 -63
  237. data/lib/puppet/type/cron.rb +294 -710
  238. data/lib/puppet/type/exec.rb +185 -129
  239. data/lib/puppet/type/group.rb +38 -89
  240. data/lib/puppet/type/host.rb +110 -0
  241. data/lib/puppet/type/mount.rb +189 -0
  242. data/lib/puppet/type/notify.rb +47 -0
  243. data/lib/puppet/type/package.rb +129 -257
  244. data/lib/puppet/type/parsedtype.rb +172 -297
  245. data/lib/puppet/type/pfile.rb +540 -319
  246. data/lib/puppet/type/pfile/checksum.rb +103 -76
  247. data/lib/puppet/type/pfile/content.rb +16 -10
  248. data/lib/puppet/type/pfile/ensure.rb +52 -34
  249. data/lib/puppet/type/pfile/group.rb +25 -18
  250. data/lib/puppet/type/pfile/mode.rb +7 -4
  251. data/lib/puppet/type/pfile/{uid.rb → owner.rb} +21 -17
  252. data/lib/puppet/type/pfile/source.rb +119 -124
  253. data/lib/puppet/type/pfile/target.rb +29 -45
  254. data/lib/puppet/type/pfile/type.rb +2 -2
  255. data/lib/puppet/type/pfilebucket.rb +18 -14
  256. data/lib/puppet/type/port.rb +121 -0
  257. data/lib/puppet/type/property.rb +530 -0
  258. data/lib/puppet/type/resources.rb +150 -0
  259. data/lib/puppet/type/schedule.rb +38 -22
  260. data/lib/puppet/type/service.rb +70 -326
  261. data/lib/puppet/type/sshkey.rb +76 -0
  262. data/lib/puppet/type/tidy.rb +197 -97
  263. data/lib/puppet/type/user.rb +107 -183
  264. data/lib/puppet/type/yumrepo.rb +53 -34
  265. data/lib/puppet/type/zone.rb +55 -208
  266. data/lib/puppet/util.rb +239 -201
  267. data/lib/puppet/util/autoload.rb +107 -0
  268. data/lib/puppet/util/classgen.rb +208 -0
  269. data/lib/puppet/{config.rb → util/config.rb} +102 -54
  270. data/lib/puppet/util/docs.rb +104 -0
  271. data/lib/puppet/util/errors.rb +55 -0
  272. data/lib/puppet/util/execution.rb +22 -0
  273. data/lib/puppet/util/feature.rb +76 -0
  274. data/lib/puppet/util/fileparsing.rb +380 -0
  275. data/lib/puppet/util/filetype.rb +300 -0
  276. data/lib/puppet/util/graph.rb +39 -0
  277. data/lib/puppet/util/inifile.rb +209 -0
  278. data/lib/puppet/util/loadedfile.rb +71 -0
  279. data/lib/puppet/util/log.rb +549 -0
  280. data/lib/puppet/util/logging.rb +20 -0
  281. data/lib/puppet/util/metaid.rb +22 -0
  282. data/lib/puppet/util/methodhelper.rb +37 -0
  283. data/lib/puppet/util/metric.rb +160 -0
  284. data/lib/puppet/util/package.rb +31 -0
  285. data/lib/puppet/util/pidlock.rb +68 -0
  286. data/lib/puppet/util/plist.rb +24 -0
  287. data/lib/puppet/util/plist/generator.rb +226 -0
  288. data/lib/puppet/util/plist/parser.rb +227 -0
  289. data/lib/puppet/util/posix.rb +87 -0
  290. data/lib/puppet/util/provider_features.rb +170 -0
  291. data/lib/puppet/util/rails/collection_merger.rb +42 -0
  292. data/lib/puppet/util/storage.rb +103 -0
  293. data/lib/puppet/util/subclass_loader.rb +83 -0
  294. data/lib/puppet/util/suidmanager.rb +86 -0
  295. data/lib/puppet/util/variables.rb +39 -0
  296. data/lib/puppet/util/warnings.rb +15 -0
  297. data/test/Rakefile +97 -0
  298. data/test/certmgr/ca.rb +81 -0
  299. data/test/certmgr/certmgr.rb +77 -50
  300. data/test/certmgr/inventory.rb +79 -0
  301. data/test/certmgr/support.rb +81 -0
  302. data/test/executables/filebucket.rb +49 -0
  303. data/test/executables/puppetbin.rb +28 -12
  304. data/test/executables/puppetca.rb +75 -54
  305. data/test/executables/puppetd.rb +10 -13
  306. data/test/executables/puppetmasterd.rb +12 -17
  307. data/test/executables/puppetmodule.rb +18 -17
  308. data/test/language/ast.rb +242 -798
  309. data/test/language/ast/casestatement.rb +104 -0
  310. data/test/language/ast/component.rb +133 -0
  311. data/test/language/ast/hostclass.rb +162 -0
  312. data/test/language/ast/selector.rb +62 -0
  313. data/test/language/ast/variable.rb +31 -0
  314. data/test/language/collector.rb +369 -0
  315. data/test/language/functions.rb +305 -18
  316. data/test/language/interpreter.rb +894 -125
  317. data/test/language/lexer.rb +98 -12
  318. data/test/language/node.rb +37 -53
  319. data/test/language/parser.rb +455 -148
  320. data/test/language/resource.rb +535 -0
  321. data/test/language/scope.rb +451 -561
  322. data/test/language/snippets.rb +101 -111
  323. data/test/language/transportable.rb +6 -8
  324. data/test/lib/mocha.rb +19 -0
  325. data/test/lib/mocha/any_instance_method.rb +35 -0
  326. data/test/lib/mocha/auto_verify.rb +113 -0
  327. data/test/lib/mocha/central.rb +35 -0
  328. data/test/lib/mocha/class_method.rb +62 -0
  329. data/test/lib/mocha/expectation.rb +295 -0
  330. data/test/lib/mocha/expectation_error.rb +6 -0
  331. data/test/lib/mocha/infinite_range.rb +27 -0
  332. data/test/lib/mocha/inspect.rb +37 -0
  333. data/test/lib/mocha/instance_method.rb +8 -0
  334. data/test/lib/mocha/metaclass.rb +7 -0
  335. data/test/lib/mocha/mock.rb +20 -0
  336. data/test/lib/mocha/mock_methods.rb +122 -0
  337. data/test/lib/mocha/object.rb +100 -0
  338. data/test/lib/mocha/pretty_parameters.rb +28 -0
  339. data/test/lib/mocha/setup_and_teardown.rb +23 -0
  340. data/test/lib/mocha/standalone.rb +30 -0
  341. data/test/lib/mocha/test_case_adapter.rb +49 -0
  342. data/test/lib/mocha_standalone.rb +2 -0
  343. data/test/lib/puppettest.rb +294 -0
  344. data/test/lib/puppettest/certificates.rb +61 -0
  345. data/test/lib/puppettest/exetest.rb +123 -0
  346. data/test/lib/puppettest/fakes.rb +194 -0
  347. data/test/lib/puppettest/fileparsing.rb +33 -0
  348. data/test/lib/puppettest/filetesting.rb +231 -0
  349. data/test/lib/puppettest/graph.rb +41 -0
  350. data/test/lib/puppettest/parsertesting.rb +392 -0
  351. data/test/lib/puppettest/railstesting.rb +56 -0
  352. data/test/lib/puppettest/reporttesting.rb +19 -0
  353. data/test/lib/puppettest/resourcetesting.rb +73 -0
  354. data/test/lib/puppettest/servertest.rb +72 -0
  355. data/test/lib/puppettest/support.rb +8 -0
  356. data/test/lib/puppettest/support/assertions.rb +101 -0
  357. data/test/lib/puppettest/support/helpers.rb +23 -0
  358. data/test/lib/puppettest/support/resources.rb +37 -0
  359. data/test/lib/puppettest/support/utils.rb +160 -0
  360. data/test/lib/puppettest/testcase.rb +48 -0
  361. data/test/lib/rake/puppet_test_loader.rb +17 -0
  362. data/test/lib/rake/puppet_testtask.rb +17 -0
  363. data/test/lib/spec.rb +8 -0
  364. data/test/lib/spec/callback.rb +11 -0
  365. data/test/lib/spec/callback/callback_container.rb +60 -0
  366. data/test/lib/spec/callback/extensions/module.rb +24 -0
  367. data/test/lib/spec/callback/extensions/object.rb +37 -0
  368. data/test/lib/spec/deprecated.rb +3 -0
  369. data/test/lib/spec/expectations.rb +59 -0
  370. data/test/lib/spec/expectations/differs/default.rb +62 -0
  371. data/test/lib/spec/expectations/errors.rb +6 -0
  372. data/test/lib/spec/expectations/extensions.rb +3 -0
  373. data/test/lib/spec/expectations/extensions/object.rb +109 -0
  374. data/test/lib/spec/expectations/extensions/proc.rb +57 -0
  375. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +17 -0
  376. data/test/lib/spec/expectations/handler.rb +47 -0
  377. data/test/lib/spec/expectations/should.rb +5 -0
  378. data/test/lib/spec/expectations/should/base.rb +64 -0
  379. data/test/lib/spec/expectations/should/change.rb +69 -0
  380. data/test/lib/spec/expectations/should/have.rb +128 -0
  381. data/test/lib/spec/expectations/should/not.rb +74 -0
  382. data/test/lib/spec/expectations/should/should.rb +81 -0
  383. data/test/lib/spec/expectations/sugar.rb +47 -0
  384. data/test/lib/spec/matchers.rb +160 -0
  385. data/test/lib/spec/matchers/be.rb +161 -0
  386. data/test/lib/spec/matchers/be_close.rb +37 -0
  387. data/test/lib/spec/matchers/change.rb +120 -0
  388. data/test/lib/spec/matchers/eql.rb +43 -0
  389. data/test/lib/spec/matchers/equal.rb +43 -0
  390. data/test/lib/spec/matchers/has.rb +44 -0
  391. data/test/lib/spec/matchers/have.rb +140 -0
  392. data/test/lib/spec/matchers/include.rb +50 -0
  393. data/test/lib/spec/matchers/match.rb +41 -0
  394. data/test/lib/spec/matchers/raise_error.rb +100 -0
  395. data/test/lib/spec/matchers/respond_to.rb +35 -0
  396. data/test/lib/spec/matchers/satisfy.rb +47 -0
  397. data/test/lib/spec/matchers/throw_symbol.rb +75 -0
  398. data/test/lib/spec/mocks.rb +232 -0
  399. data/test/lib/spec/mocks/argument_expectation.rb +132 -0
  400. data/test/lib/spec/mocks/error_generator.rb +85 -0
  401. data/test/lib/spec/mocks/errors.rb +10 -0
  402. data/test/lib/spec/mocks/extensions/object.rb +3 -0
  403. data/test/lib/spec/mocks/message_expectation.rb +231 -0
  404. data/test/lib/spec/mocks/methods.rb +40 -0
  405. data/test/lib/spec/mocks/mock.rb +26 -0
  406. data/test/lib/spec/mocks/mock_handler.rb +166 -0
  407. data/test/lib/spec/mocks/order_group.rb +29 -0
  408. data/test/lib/spec/rake/spectask.rb +173 -0
  409. data/test/lib/spec/rake/verify_rcov.rb +47 -0
  410. data/test/lib/spec/runner.rb +132 -0
  411. data/test/lib/spec/runner/backtrace_tweaker.rb +55 -0
  412. data/test/lib/spec/runner/command_line.rb +34 -0
  413. data/test/lib/spec/runner/context.rb +154 -0
  414. data/test/lib/spec/runner/context_eval.rb +142 -0
  415. data/test/lib/spec/runner/context_runner.rb +55 -0
  416. data/test/lib/spec/runner/drb_command_line.rb +21 -0
  417. data/test/lib/spec/runner/execution_context.rb +17 -0
  418. data/test/lib/spec/runner/extensions/kernel.rb +17 -0
  419. data/test/lib/spec/runner/extensions/object.rb +32 -0
  420. data/test/lib/spec/runner/formatter.rb +5 -0
  421. data/test/lib/spec/runner/formatter/base_text_formatter.rb +118 -0
  422. data/test/lib/spec/runner/formatter/html_formatter.rb +219 -0
  423. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +27 -0
  424. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +22 -0
  425. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +23 -0
  426. data/test/lib/spec/runner/heckle_runner.rb +71 -0
  427. data/test/lib/spec/runner/heckle_runner_win.rb +10 -0
  428. data/test/lib/spec/runner/option_parser.rb +224 -0
  429. data/test/lib/spec/runner/reporter.rb +105 -0
  430. data/test/lib/spec/runner/spec_matcher.rb +25 -0
  431. data/test/lib/spec/runner/spec_parser.rb +41 -0
  432. data/test/lib/spec/runner/spec_should_raise_handler.rb +74 -0
  433. data/test/lib/spec/runner/specification.rb +114 -0
  434. data/test/lib/spec/translator.rb +87 -0
  435. data/test/lib/spec/version.rb +30 -0
  436. data/test/lib/stubba.rb +2 -0
  437. data/test/network/authconfig.rb +72 -0
  438. data/test/network/authorization.rb +138 -0
  439. data/test/network/authstore.rb +450 -0
  440. data/test/network/client/ca.rb +38 -0
  441. data/test/{client → network/client}/client.rb +107 -24
  442. data/test/network/client/dipper.rb +35 -0
  443. data/test/network/client/master.rb +627 -0
  444. data/test/{client/pelement.rb → network/client/resource.rb} +13 -29
  445. data/test/network/client_request.rb +39 -0
  446. data/test/network/daemon.rb +71 -0
  447. data/test/{server → network/handler}/bucket.rb +103 -27
  448. data/test/{server → network/handler}/ca.rb +14 -19
  449. data/test/{server → network/handler}/fileserver.rb +443 -68
  450. data/test/network/handler/handler.rb +64 -0
  451. data/test/{server → network/handler}/logger.rb +26 -26
  452. data/test/network/handler/master.rb +352 -0
  453. data/test/network/handler/report.rb +185 -0
  454. data/test/{server/pelement.rb → network/handler/resource.rb} +25 -38
  455. data/test/{server → network/handler}/runner.rb +17 -16
  456. data/test/network/rights.rb +38 -0
  457. data/test/network/server/webrick.rb +140 -0
  458. data/test/network/xmlrpc/client.rb +68 -0
  459. data/test/network/xmlrpc/processor.rb +80 -0
  460. data/test/network/xmlrpc/server.rb +28 -0
  461. data/test/network/xmlrpc/webrick_servlet.rb +26 -0
  462. data/test/other/dsl.rb +218 -0
  463. data/test/other/events.rb +22 -15
  464. data/test/other/overrides.rb +9 -14
  465. data/test/other/pgraph.rb +289 -0
  466. data/test/other/propertychange.rb +142 -0
  467. data/test/other/provider.rb +162 -0
  468. data/test/other/puppet.rb +63 -10
  469. data/test/other/relationship.rb +74 -0
  470. data/test/other/relationships.rb +199 -123
  471. data/test/other/report.rb +152 -23
  472. data/test/other/transactions.rb +824 -78
  473. data/test/puppet/conffiles.rb +16 -11
  474. data/test/puppet/defaults.rb +7 -10
  475. data/test/puppet/{error.rb → errortest.rb} +5 -8
  476. data/test/puppet/modules.rb +58 -0
  477. data/test/puppet/tc_suidmanager.rb +107 -0
  478. data/test/rails/host.rb +177 -0
  479. data/test/rails/rails.rb +27 -0
  480. data/test/rails/railsparameter.rb +62 -0
  481. data/test/rails/railsresource.rb +100 -0
  482. data/test/ral/manager/attributes.rb +296 -0
  483. data/test/ral/manager/manager.rb +55 -0
  484. data/test/ral/manager/provider.rb +54 -0
  485. data/test/ral/manager/type.rb +837 -0
  486. data/test/ral/providers/cron/crontab.rb +346 -0
  487. data/test/ral/providers/group.rb +252 -0
  488. data/test/ral/providers/host/netinfo.rb +58 -0
  489. data/test/ral/providers/host/parsed.rb +226 -0
  490. data/test/ral/providers/mount/netinfo.rb +80 -0
  491. data/test/ral/providers/mount/parsed.rb +223 -0
  492. data/test/ral/providers/nameservice.rb +33 -0
  493. data/test/ral/providers/package.rb +253 -0
  494. data/test/ral/providers/package/apt.rb +89 -0
  495. data/test/ral/providers/package/aptitude.rb +69 -0
  496. data/test/ral/providers/package/aptrpm.rb +89 -0
  497. data/test/ral/providers/package/dpkg.rb +64 -0
  498. data/test/ral/providers/parsedfile.rb +668 -0
  499. data/test/ral/providers/parsedport.rb +233 -0
  500. data/test/ral/providers/provider.rb +423 -0
  501. data/test/{types → ral/providers}/service.rb +20 -121
  502. data/test/ral/providers/service/base.rb +75 -0
  503. data/test/ral/providers/sshkey/parsed.rb +111 -0
  504. data/test/ral/providers/user.rb +567 -0
  505. data/test/ral/providers/user/useradd.rb +250 -0
  506. data/test/ral/types/basic.rb +90 -0
  507. data/test/ral/types/component.rb +113 -0
  508. data/test/ral/types/cron.rb +480 -0
  509. data/test/{types → ral/types}/exec.rb +278 -82
  510. data/test/ral/types/file.rb +1799 -0
  511. data/test/ral/types/file/target.rb +363 -0
  512. data/test/{types → ral/types}/filebucket.rb +15 -17
  513. data/test/{types → ral/types}/fileignoresource.rb +9 -15
  514. data/test/ral/types/filesources.rb +1046 -0
  515. data/test/ral/types/group.rb +169 -0
  516. data/test/ral/types/host.rb +155 -0
  517. data/test/ral/types/mount.rb +312 -0
  518. data/test/ral/types/package.rb +85 -0
  519. data/test/ral/types/parameter.rb +172 -0
  520. data/test/ral/types/port.rb +148 -0
  521. data/test/ral/types/property.rb +343 -0
  522. data/test/ral/types/resources.rb +221 -0
  523. data/test/{types → ral/types}/schedule.rb +34 -12
  524. data/test/ral/types/service.rb +37 -0
  525. data/test/{types → ral/types}/sshkey.rb +75 -65
  526. data/test/ral/types/tidy.rb +240 -0
  527. data/test/ral/types/user.rb +493 -0
  528. data/test/{types → ral/types}/yumrepo.rb +7 -11
  529. data/test/{types → ral/types}/zone.rb +45 -45
  530. data/test/tagging/tagging.rb +17 -26
  531. data/test/util/autoload.rb +130 -0
  532. data/test/util/classgen.rb +227 -0
  533. data/test/{other → util}/config.rb +373 -113
  534. data/test/util/execution.rb +34 -0
  535. data/test/util/features.rb +94 -0
  536. data/test/util/fileparsing.rb +677 -0
  537. data/test/{other → util}/filetype.rb +9 -12
  538. data/test/util/graph.rb +108 -0
  539. data/test/{other → util}/inifile.rb +24 -11
  540. data/test/util/loadedfile.rb +106 -0
  541. data/test/{other → util}/log.rb +96 -50
  542. data/test/{other → util}/metrics.rb +7 -17
  543. data/test/util/package.rb +27 -0
  544. data/test/util/pidlock.rb +126 -0
  545. data/test/util/posixtest.rb +173 -0
  546. data/test/util/storage.rb +123 -0
  547. data/test/util/subclass_loader.rb +100 -0
  548. data/test/util/utiltest.rb +368 -0
  549. metadata +449 -169
  550. data/examples/code/classing +0 -35
  551. data/examples/code/failers/badclassnoparam +0 -10
  552. data/examples/code/failers/badclassparam +0 -10
  553. data/examples/code/failers/badcompnoparam +0 -9
  554. data/examples/code/failers/badcompparam +0 -9
  555. data/examples/code/failers/badtypeparam +0 -3
  556. data/examples/code/failers/noobjectrvalue +0 -1
  557. data/examples/code/snippets/aliastest.pp +0 -16
  558. data/examples/code/snippets/argumentdefaults +0 -14
  559. data/examples/code/snippets/casestatement.pp +0 -58
  560. data/examples/code/snippets/classheirarchy.pp +0 -15
  561. data/examples/code/snippets/classincludes.pp +0 -17
  562. data/examples/code/snippets/classpathtest +0 -11
  563. data/examples/code/snippets/componentmetaparams.pp +0 -11
  564. data/examples/code/snippets/deepclassheirarchy.pp +0 -23
  565. data/examples/code/snippets/defineoverrides.pp +0 -17
  566. data/examples/code/snippets/dirchmod +0 -19
  567. data/examples/code/snippets/emptyclass.pp +0 -9
  568. data/examples/code/snippets/emptyexec.pp +0 -3
  569. data/examples/code/snippets/failmissingexecpath.pp +0 -13
  570. data/examples/code/snippets/falsevalues.pp +0 -3
  571. data/examples/code/snippets/filecreate +0 -11
  572. data/examples/code/snippets/implicititeration +0 -15
  573. data/examples/code/snippets/multipleinstances +0 -7
  574. data/examples/code/snippets/namevartest +0 -9
  575. data/examples/code/snippets/scopetest +0 -13
  576. data/examples/code/snippets/selectorvalues.pp +0 -42
  577. data/examples/code/snippets/simpledefaults +0 -5
  578. data/examples/code/snippets/simpleselector +0 -38
  579. data/examples/code/snippets/singleary.pp +0 -19
  580. data/examples/code/snippets/singlequote.pp +0 -11
  581. data/examples/code/snippets/singleselector.pp +0 -22
  582. data/examples/code/snippets/tag.pp +0 -9
  583. data/examples/code/snippets/tagged.pp +0 -35
  584. data/lib/puppet/client.rb +0 -177
  585. data/lib/puppet/client/ca.rb +0 -21
  586. data/lib/puppet/client/dipper.rb +0 -76
  587. data/lib/puppet/client/file.rb +0 -20
  588. data/lib/puppet/client/log.rb +0 -17
  589. data/lib/puppet/client/master.rb +0 -531
  590. data/lib/puppet/client/runner.rb +0 -17
  591. data/lib/puppet/client/status.rb +0 -7
  592. data/lib/puppet/event-loop.rb +0 -1
  593. data/lib/puppet/filetype.rb +0 -308
  594. data/lib/puppet/inifile.rb +0 -201
  595. data/lib/puppet/log.rb +0 -524
  596. data/lib/puppet/metric.rb +0 -132
  597. data/lib/puppet/networkclient.rb +0 -175
  598. data/lib/puppet/parsedfile.rb +0 -58
  599. data/lib/puppet/parser/ast/classdef.rb +0 -79
  600. data/lib/puppet/parser/ast/compdef.rb +0 -75
  601. data/lib/puppet/parser/ast/nodedef.rb +0 -73
  602. data/lib/puppet/parser/ast/objectdef.rb +0 -284
  603. data/lib/puppet/parser/ast/objectref.rb +0 -77
  604. data/lib/puppet/rails/database.rb +0 -40
  605. data/lib/puppet/rails/rails_object.rb +0 -42
  606. data/lib/puppet/rails/rails_parameter.rb +0 -5
  607. data/lib/puppet/server.rb +0 -196
  608. data/lib/puppet/server/authconfig.rb +0 -177
  609. data/lib/puppet/server/authstore.rb +0 -226
  610. data/lib/puppet/server/filebucket.rb +0 -155
  611. data/lib/puppet/server/pelement.rb +0 -188
  612. data/lib/puppet/server/report.rb +0 -184
  613. data/lib/puppet/server/rights.rb +0 -78
  614. data/lib/puppet/server/servlet.rb +0 -274
  615. data/lib/puppet/statechange.rb +0 -129
  616. data/lib/puppet/storage.rb +0 -98
  617. data/lib/puppet/type/nameservice.rb +0 -264
  618. data/lib/puppet/type/nameservice/netinfo.rb +0 -232
  619. data/lib/puppet/type/nameservice/objectadd.rb +0 -146
  620. data/lib/puppet/type/nameservice/posix.rb +0 -12
  621. data/lib/puppet/type/nameservice/pw.rb +0 -107
  622. data/lib/puppet/type/package/apple.rb +0 -41
  623. data/lib/puppet/type/package/apt.rb +0 -107
  624. data/lib/puppet/type/package/blastwave.rb +0 -136
  625. data/lib/puppet/type/package/darwinport.rb +0 -97
  626. data/lib/puppet/type/package/dpkg.rb +0 -113
  627. data/lib/puppet/type/package/freebsd.rb +0 -19
  628. data/lib/puppet/type/package/gem.rb +0 -119
  629. data/lib/puppet/type/package/openbsd.rb +0 -112
  630. data/lib/puppet/type/package/ports.rb +0 -103
  631. data/lib/puppet/type/package/rpm.rb +0 -121
  632. data/lib/puppet/type/package/sun.rb +0 -174
  633. data/lib/puppet/type/package/sunfreeware.rb +0 -7
  634. data/lib/puppet/type/package/yum.rb +0 -52
  635. data/lib/puppet/type/parsedtype/host.rb +0 -144
  636. data/lib/puppet/type/parsedtype/mount.rb +0 -271
  637. data/lib/puppet/type/parsedtype/port.rb +0 -261
  638. data/lib/puppet/type/parsedtype/sshkey.rb +0 -123
  639. data/lib/puppet/type/service/base.rb +0 -12
  640. data/lib/puppet/type/service/debian.rb +0 -46
  641. data/lib/puppet/type/service/redhat.rb +0 -38
  642. data/lib/puppet/type/state.rb +0 -393
  643. data/lib/puppet/type/symlink.rb +0 -186
  644. data/test/client/master.rb +0 -207
  645. data/test/language/rails.rb +0 -105
  646. data/test/other/parsedfile.rb +0 -58
  647. data/test/other/storage.rb +0 -100
  648. data/test/puppet/utiltest.rb +0 -299
  649. data/test/puppettest.rb +0 -1170
  650. data/test/server/authconfig.rb +0 -56
  651. data/test/server/authstore.rb +0 -218
  652. data/test/server/master.rb +0 -201
  653. data/test/server/report.rb +0 -93
  654. data/test/server/rights.rb +0 -41
  655. data/test/server/server.rb +0 -152
  656. data/test/test +0 -61
  657. data/test/types/basic.rb +0 -117
  658. data/test/types/component.rb +0 -298
  659. data/test/types/cron.rb +0 -718
  660. data/test/types/file.rb +0 -1314
  661. data/test/types/filesources.rb +0 -590
  662. data/test/types/group.rb +0 -323
  663. data/test/types/host.rb +0 -186
  664. data/test/types/mount.rb +0 -294
  665. data/test/types/package.rb +0 -538
  666. data/test/types/parameter.rb +0 -107
  667. data/test/types/port.rb +0 -201
  668. data/test/types/query.rb +0 -101
  669. data/test/types/state.rb +0 -92
  670. data/test/types/symlink.rb +0 -120
  671. data/test/types/tidy.rb +0 -102
  672. data/test/types/type.rb +0 -469
  673. data/test/types/user.rb +0 -563
@@ -1,17 +1,11 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
2
 
3
- if __FILE__ == $0
4
- $:.unshift '../../lib'
5
- $:.unshift '..'
6
- $puppetbase = "../.."
7
- end
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
8
4
 
9
- require 'puppet'
10
- require 'puppet/parser/interpreter'
11
- require 'puppet/parser/parser'
12
- require 'puppet/client'
13
- require 'test/unit'
5
+ require 'mocha'
14
6
  require 'puppettest'
7
+ require 'puppettest/parsertesting'
8
+ require 'puppettest/resourcetesting'
15
9
 
16
10
  # so, what kind of things do we want to test?
17
11
 
@@ -23,7 +17,8 @@ require 'puppettest'
23
17
  # and test whether we've got things in the right scopes
24
18
 
25
19
  class TestScope < Test::Unit::TestCase
26
- include ParserTesting
20
+ include PuppetTest::ParserTesting
21
+ include PuppetTest::ResourceTesting
27
22
 
28
23
  def to_ary(hash)
29
24
  hash.collect { |key,value|
@@ -42,7 +37,7 @@ class TestScope < Test::Unit::TestCase
42
37
 
43
38
  10.times { |index|
44
39
  # slap some recursion in there
45
- scope = Puppet::Parser::Scope.new(:parent => scope)
40
+ scope = mkscope(:parent => scope)
46
41
  scopes.push scope
47
42
 
48
43
  var = "var%s" % index
@@ -102,10 +97,60 @@ class TestScope < Test::Unit::TestCase
102
97
  }
103
98
  end
104
99
 
100
+ def test_lookupvar
101
+ interp = mkinterp
102
+ scope = mkscope :interp => interp
103
+
104
+ # first do the plain lookups
105
+ assert_equal("", scope.lookupvar("var"), "scope did not default to string")
106
+ assert_equal("", scope.lookupvar("var", true), "scope ignored usestring setting")
107
+ assert_equal(:undefined, scope.lookupvar("var", false), "scope ignored usestring setting when false")
108
+
109
+ # Now set the var
110
+ scope.setvar("var", "yep")
111
+ assert_equal("yep", scope.lookupvar("var"), "did not retrieve value correctly")
112
+
113
+ # Now test the parent lookups
114
+ subscope = mkscope :interp => interp
115
+ subscope.parent = scope
116
+ assert_equal("", subscope.lookupvar("nope"), "scope did not default to string with parent")
117
+ assert_equal("", subscope.lookupvar("nope", true), "scope ignored usestring setting with parent")
118
+ assert_equal(:undefined, subscope.lookupvar("nope", false), "scope ignored usestring setting when false with parent")
119
+
120
+ assert_equal("yep", subscope.lookupvar("var"), "did not retrieve value correctly from parent")
121
+
122
+ # Now override the value in the subscope
123
+ subscope.setvar("var", "sub")
124
+ assert_equal("sub", subscope.lookupvar("var"), "did not retrieve overridden value correctly")
125
+
126
+ # Make sure we punt when the var is qualified. Specify the usestring value, so we know it propagates.
127
+ scope.expects(:lookup_qualified_var).with("one::two", false).returns(:punted)
128
+ assert_equal(:punted, scope.lookupvar("one::two", false), "did not return the value of lookup_qualified_var")
129
+ end
130
+
131
+ def test_lookup_qualified_var
132
+ interp = mkinterp
133
+ scope = mkscope :interp => interp
134
+
135
+ scopes = {}
136
+ classes = ["", "one", "one::two", "one::two::three"].each do |name|
137
+ klass = interp.newclass(name)
138
+ klass.evaluate(:scope => scope)
139
+ scopes[name] = scope.class_scope(klass)
140
+ end
141
+
142
+ classes.each do |name|
143
+ var = [name, "var"].join("::")
144
+ scopes[name].expects(:lookupvar).with("var", false).returns(name)
145
+
146
+ assert_equal(name, scope.send(:lookup_qualified_var, var, false), "did not get correct value from lookupvar")
147
+ end
148
+ end
149
+
105
150
  def test_declarative
106
151
  # set to declarative
107
- top = Puppet::Parser::Scope.new(:declarative => true)
108
- sub = Puppet::Parser::Scope.new(:parent => top)
152
+ top = mkscope(:declarative => true)
153
+ sub = mkscope(:parent => top)
109
154
 
110
155
  assert_nothing_raised {
111
156
  top.setvar("test","value")
@@ -123,8 +168,8 @@ class TestScope < Test::Unit::TestCase
123
168
 
124
169
  def test_notdeclarative
125
170
  # set to not declarative
126
- top = Puppet::Parser::Scope.new(:declarative => false)
127
- sub = Puppet::Parser::Scope.new(:parent => top)
171
+ top = mkscope(:declarative => false)
172
+ sub = mkscope(:parent => top)
128
173
 
129
174
  assert_nothing_raised {
130
175
  top.setvar("test","value")
@@ -140,444 +185,201 @@ class TestScope < Test::Unit::TestCase
140
185
  }
141
186
  end
142
187
 
143
- def test_defaults
144
- scope = nil
145
- over = "over"
188
+ def test_setdefaults
189
+ interp, scope, source = mkclassframing
146
190
 
147
- scopes = []
148
- vars = []
149
- values = {}
150
- ovalues = []
191
+ # The setdefaults method doesn't really check what we're doing,
192
+ # so we're just going to use fake defaults here.
151
193
 
152
- defs = Hash.new { |hash,key|
153
- hash[key] = Hash.new(nil)
154
- }
155
-
156
- prevdefs = Hash.new { |hash,key|
157
- hash[key] = Hash.new(nil)
158
- }
159
-
160
- params = %w{a list of parameters that could be used for defaults}
194
+ # First do a simple local lookup
195
+ params = paramify(source, :one => "fun", :two => "shoe")
196
+ origshould = {}
197
+ params.each do |p| origshould[p.name] = p end
198
+ assert_nothing_raised do
199
+ scope.setdefaults(:file, params)
200
+ end
161
201
 
162
- types = %w{a set of types that could be used to set defaults}
202
+ ret = nil
203
+ assert_nothing_raised do
204
+ ret = scope.lookupdefaults(:file)
205
+ end
163
206
 
164
- 10.times { |index|
165
- scope = Puppet::Parser::Scope.new(:parent => scope)
166
- scopes.push scope
207
+ assert_equal(origshould, ret)
167
208
 
168
- tmptypes = []
169
-
170
- # randomly create defaults for a random set of types
171
- tnum = rand(5)
172
- tnum.times { |t|
173
- # pick a type
174
- #Puppet.debug "Type length is %s" % types.length
175
- #s = rand(types.length)
176
- #Puppet.debug "Type num is %s" % s
177
- #type = types[s]
178
- #Puppet.debug "Type is %s" % s
179
- type = types[rand(types.length)]
180
- if tmptypes.include?(type)
181
- Puppet.debug "Duplicate type %s" % type
182
- redo
183
- else
184
- tmptypes.push type
185
- end
209
+ # Now create a subscope and add some more params.
210
+ newscope = scope.newscope
186
211
 
187
- Puppet.debug "type is %s" % type
212
+ newparams = paramify(source, :one => "shun", :three => "free")
213
+ assert_nothing_raised {
214
+ newscope.setdefaults(:file, newparams)
215
+ }
188
216
 
189
- d = {}
217
+ # And make sure we get the appropriate ones back
218
+ should = {}
219
+ params.each do |p| should[p.name] = p end
220
+ newparams.each do |p| should[p.name] = p end
190
221
 
191
- # randomly assign some parameters
192
- num = rand(4)
193
- num.times { |n|
194
- param = params[rand(params.length)]
195
- if d.include?(param)
196
- Puppet.debug "Duplicate param %s" % param
197
- redo
198
- else
199
- d[param] = rand(1000)
200
- end
201
- }
222
+ assert_nothing_raised do
223
+ ret = newscope.lookupdefaults(:file)
224
+ end
202
225
 
203
- # and then add a consistent type
204
- d["always"] = rand(1000)
226
+ assert_equal(should, ret)
205
227
 
206
- d.each { |var,val|
207
- defs[type][var] = val
208
- }
228
+ # Make sure we still only get the originals from the top scope
229
+ assert_nothing_raised do
230
+ ret = scope.lookupdefaults(:file)
231
+ end
209
232
 
210
- assert_nothing_raised {
211
- scope.setdefaults(type,to_ary(d))
212
- }
213
- fdefs = nil
214
- assert_nothing_raised {
215
- fdefs = scope.lookupdefaults(type)
216
- }
233
+ assert_equal(origshould, ret)
217
234
 
218
- # now, make sure that reassignment fails if we're
219
- # in declarative mode
220
- assert_raise(Puppet::ParseError) {
221
- scope.setdefaults(type,[%w{always funtest}])
222
- }
235
+ # Now create another scope and make sure we only get the top defaults
236
+ otherscope = scope.newscope
237
+ assert_equal(origshould, otherscope.lookupdefaults(:file))
223
238
 
224
- # assert that we have collected the same values
225
- assert_equal(defs[type],fdefs)
226
-
227
- # now assert that our parent still finds the same defaults
228
- # it got last time
229
- if parent = scope.parent
230
- unless prevdefs[type].nil?
231
- assert_equal(prevdefs[type],parent.lookupdefaults(type))
232
- end
233
- end
234
- d.each { |var,val|
235
- prevdefs[type][var] = val
236
- }
237
- }
238
- }
239
+ # And make sure none of the scopes has defaults for other types
240
+ [scope, newscope, otherscope].each do |sc|
241
+ assert_equal({}, sc.lookupdefaults(:exec))
242
+ end
239
243
  end
240
244
 
241
245
  def test_strinterp
242
- scope = Puppet::Parser::Scope.new()
243
-
244
- assert_nothing_raised {
245
- scope.setvar("test","value")
246
- }
247
- val = nil
248
- assert_nothing_raised {
249
- val = scope.strinterp("string ${test}")
250
- }
251
- assert_equal("string value", val)
246
+ # Make and evaluate our classes so the qualified lookups work
247
+ interp = mkinterp
248
+ klass = interp.newclass("")
249
+ scope = mkscope(:interp => interp)
250
+ klass.evaluate(:scope => scope)
252
251
 
253
- assert_nothing_raised {
254
- val = scope.strinterp("string ${test} ${test} ${test}")
255
- }
256
- assert_equal("string value value value", val)
252
+ klass = interp.newclass("one")
253
+ klass.evaluate(:scope => scope)
257
254
 
258
- assert_nothing_raised {
259
- val = scope.strinterp("string $test ${test} $test")
260
- }
261
- assert_equal("string value value value", val)
255
+ klass = interp.newclass("one::two")
256
+ klass.evaluate(:scope => scope)
262
257
 
263
- assert_nothing_raised {
264
- val = scope.strinterp("string \\$test")
265
- }
266
- assert_equal("string $test", val)
267
258
 
259
+ scope = scope.class_scope("")
268
260
  assert_nothing_raised {
269
- val = scope.strinterp("\\$test string")
270
- }
271
- assert_equal("$test string", val)
272
- end
273
-
274
- # Test some of the host manipulations
275
- def test_hostlookup
276
- top = Puppet::Parser::Scope.new()
277
-
278
- # Create a deep scope tree, so that we know we're doing a deeply recursive
279
- # search.
280
- mid1 = Puppet::Parser::Scope.new(:parent => top)
281
- mid2 = Puppet::Parser::Scope.new(:parent => mid1)
282
- mid3 = Puppet::Parser::Scope.new(:parent => mid2)
283
- child1 = Puppet::Parser::Scope.new(:parent => mid3)
284
- mida = Puppet::Parser::Scope.new(:parent => top)
285
- midb = Puppet::Parser::Scope.new(:parent => mida)
286
- midc = Puppet::Parser::Scope.new(:parent => midb)
287
- child2 = Puppet::Parser::Scope.new(:parent => midc)
288
-
289
- # verify we can set a host
290
- assert_nothing_raised("Could not create host") {
291
- child1.setnode("testing", AST::Node.new(
292
- :type => "testing",
293
- :code => :notused
294
- )
295
- )
296
- }
297
-
298
- # Verify we cannot redefine it
299
- assert_raise(Puppet::ParseError, "Duplicate host creation succeeded") {
300
- child2.setnode("testing", AST::Node.new(
301
- :type => "testing",
302
- :code => :notused
303
- )
304
- )
305
- }
306
-
307
- # Now verify we can find the host again
308
- host = nil
309
- assert_nothing_raised("Host lookup failed") {
310
- hash = top.node("testing")
311
- host = hash[:node]
312
- }
313
-
314
- assert(host, "Could not find host")
315
- assert(host.code == :notused, "Host is not what we stored")
316
- end
317
-
318
- # Verify that two statements about a file within the same scope tree
319
- # will cause a conflict.
320
- def test_noconflicts
321
- filename = tempfile()
322
- children = []
323
-
324
- # create the parent class
325
- children << classobj("one", :code => AST::ASTArray.new(
326
- :children => [
327
- fileobj(filename, "owner" => "root")
328
- ]
329
- ))
330
-
331
- # now create a child class with differ values
332
- children << classobj("two",
333
- :code => AST::ASTArray.new(
334
- :children => [
335
- fileobj(filename, "owner" => "bin")
336
- ]
337
- ))
338
-
339
- # Now call the child class
340
- assert_nothing_raised("Could not add AST nodes for calling") {
341
- children << AST::ObjectDef.new(
342
- :type => nameobj("two"),
343
- :name => nameobj("yayness"),
344
- :params => astarray()
345
- ) << AST::ObjectDef.new(
346
- :type => nameobj("one"),
347
- :name => nameobj("yayness"),
348
- :params => astarray()
349
- )
350
- }
351
-
352
- top = nil
353
- assert_nothing_raised("Could not create top object") {
354
- top = AST::ASTArray.new(
355
- :children => children
356
- )
357
- }
358
-
359
- objects = nil
360
- scope = nil
361
-
362
- # Here's where we should encounter the failure. It should find that
363
- # it has already created an object with that name, and this should result
364
- # in some pukey-pukeyness.
365
- assert_raise(Puppet::ParseError) {
366
- scope = Puppet::Parser::Scope.new()
367
- objects = scope.evaluate(:ast => top)
368
- }
369
- end
370
-
371
- # Verify that statements about the same element within the same scope
372
- # cause a conflict.
373
- def test_failonconflictinsamescope
374
- filename = tempfile()
375
- children = []
376
-
377
- # Now call the child class
378
- assert_nothing_raised("Could not add AST nodes for calling") {
379
- children << fileobj(filename, "owner" => "root")
380
- children << fileobj(filename, "owner" => "bin")
381
- }
382
-
383
- top = nil
384
- assert_nothing_raised("Could not create top object") {
385
- top = AST::ASTArray.new(
386
- :children => children
387
- )
388
- }
389
-
390
- objects = nil
391
- scope = nil
392
-
393
- # Here's where we should encounter the failure. It should find that
394
- # it has already created an object with that name, and this should result
395
- # in some pukey-pukeyness.
396
- assert_raise(Puppet::ParseError) {
397
- scope = Puppet::Parser::Scope.new()
398
- scope.top = true
399
- objects = scope.evaluate(:ast => top)
400
- }
401
- end
402
-
403
- # Verify that we override statements that we find within our scope
404
- def test_suboverrides
405
- filename = tempfile()
406
- children = []
407
-
408
- # create the parent class
409
- children << classobj("parent", :code => AST::ASTArray.new(
410
- :children => [
411
- fileobj(filename, "owner" => "root")
412
- ]
413
- ))
414
-
415
- # now create a child class with differ values
416
- children << classobj("child", :parentclass => nameobj("parent"),
417
- :code => AST::ASTArray.new(
418
- :children => [
419
- fileobj(filename, "owner" => "bin")
420
- ]
421
- ))
422
-
423
- # Now call the child class
424
- assert_nothing_raised("Could not add AST nodes for calling") {
425
- children << AST::ObjectDef.new(
426
- :type => nameobj("child"),
427
- :name => nameobj("yayness"),
428
- :params => astarray()
429
- )
430
- }
431
-
432
- top = nil
433
- assert_nothing_raised("Could not create top object") {
434
- top = AST::ASTArray.new(
435
- :children => children
436
- )
261
+ scope.setvar("test","value")
437
262
  }
438
263
 
439
- objects = nil
440
- scope = nil
441
- assert_nothing_raised("Could not evaluate") {
442
- scope = Puppet::Parser::Scope.new()
443
- objects = scope.evaluate(:ast => top)
444
- }
264
+ scopes = {"" => scope}
445
265
 
446
- assert_equal(1, objects.length, "Returned too many objects: %s" %
447
- objects.inspect)
266
+ %w{one one::two one::two::three}.each do |name|
267
+ klass = interp.newclass(name)
268
+ klass.evaluate(:scope => scope)
269
+ scopes[name] = scope.class_scope(klass)
270
+ scopes[name].setvar("test", "value-%s" % name.sub(/.+::/,''))
271
+ end
448
272
 
449
- assert_equal(1, objects[0].length, "Returned too many objects: %s" %
450
- objects[0].inspect)
273
+ assert_equal("value", scope.lookupvar("::test"), "did not look up qualified value correctly")
274
+ tests = {
275
+ "string ${test}" => "string value",
276
+ "string ${one::two::three::test}" => "string value-three",
277
+ "string $one::two::three::test" => "string value-three",
278
+ "string ${one::two::test}" => "string value-two",
279
+ "string $one::two::test" => "string value-two",
280
+ "string ${one::test}" => "string value-one",
281
+ "string $one::test" => "string value-one",
282
+ "string ${::test}" => "string value",
283
+ "string $::test" => "string value",
284
+ "string ${test} ${test} ${test}" => "string value value value",
285
+ "string $test ${test} $test" => "string value value value",
286
+ "string \\$test" => "string $test",
287
+ '\\$test string' => "$test string",
288
+ '$test string' => "value string",
289
+ 'a testing $' => "a testing $",
290
+ 'a testing \$' => "a testing $",
291
+ "an escaped \\\n carriage return" => "an escaped carriage return",
292
+ '\$' => "$",
293
+ '\s' => "\s",
294
+ '\t' => "\t",
295
+ '\n' => "\n"
296
+ }
297
+
298
+ tests.each do |input, output|
299
+ assert_nothing_raised("Failed to scan %s" % input.inspect) do
300
+ assert_equal(output, scope.strinterp(input),
301
+ 'did not interpret %s correctly' % input.inspect)
302
+ end
303
+ end
451
304
 
452
- assert_nothing_raised {
453
- file = objects[0][0]
454
- assert_equal("bin", file["owner"], "Value did not override correctly")
455
- }
456
- end
457
-
458
- def test_multipletypes
459
- scope = Puppet::Parser::Scope.new()
460
- children = []
305
+ logs = []
306
+ Puppet::Util::Log.close
307
+ Puppet::Util::Log.newdestination(logs)
461
308
 
462
- # create the parent class
463
- children << classobj("aclass")
464
- children << classobj("aclass")
465
- top = nil
466
- assert_nothing_raised("Could not create top object") {
467
- top = AST::ASTArray.new(
468
- :children => children
469
- )
470
- }
309
+ # #523
310
+ %w{d f h l w z}.each do |l|
311
+ string = "\\" + l
312
+ assert_nothing_raised do
313
+ assert_equal(string, scope.strinterp(string),
314
+ 'did not interpret %s correctly' % string)
315
+ end
471
316
 
472
- scope = nil
473
- assert_raise(Puppet::ParseError) {
474
- scope = Puppet::Parser::Scope.new()
475
- objects = top.evaluate(:scope => scope)
476
- }
317
+ assert(logs.detect { |m| m.message =~ /Unrecognised escape/ },
318
+ "Did not get warning about escape sequence with %s" % string)
319
+ logs.clear
320
+ end
477
321
  end
478
322
 
479
- # Verify that definitions have a different context than classes.
480
- def test_newsubcontext
481
- filename = tempfile()
482
- children = []
323
+ def test_setclass
324
+ interp, scope, source = mkclassframing
483
325
 
484
- # Create a component
485
- children << compobj("comp", :code => AST::ASTArray.new(
486
- :children => [
487
- fileobj(filename, "owner" => "root" )
488
- ]
489
- ))
490
-
491
- # Now create a class that modifies the same file and also
492
- # calls the component
493
- children << classobj("klass", :code => AST::ASTArray.new(
494
- :children => [
495
- fileobj(filename, "owner" => "bin" ),
496
- AST::ObjectDef.new(
497
- :type => nameobj("comp"),
498
- :params => astarray()
499
- )
500
- ]
501
- ))
502
-
503
- # Now call the class
504
- children << AST::ObjectDef.new(
505
- :type => nameobj("klass"),
506
- :params => astarray()
507
- )
508
-
509
- top = nil
510
- assert_nothing_raised("Could not create top object") {
511
- top = AST::ASTArray.new(
512
- :children => children
513
- )
514
- }
326
+ base = scope.findclass("base")
327
+ assert(base, "Could not find base class")
328
+ assert(! scope.setclass?(base), "Class incorrectly set")
329
+ assert(! scope.classlist.include?("base"), "Class incorrectly in classlist")
330
+ assert_nothing_raised do
331
+ scope.setclass base
332
+ end
515
333
 
516
- trans = nil
517
- scope = nil
518
- #assert_nothing_raised {
519
- assert_raise(Puppet::ParseError, "A conflict was allowed") {
520
- scope = Puppet::Parser::Scope.new()
521
- trans = scope.evaluate(:ast => top)
522
- }
523
- # scope = Puppet::Parser::Scope.new()
524
- # trans = scope.evaluate(:ast => top)
525
- #}
526
- end
334
+ assert(scope.setclass?(base), "Class incorrectly unset")
335
+ assert(scope.classlist.include?("base"), "Class not in classlist")
527
336
 
528
- def test_defaultswithmultiplestatements
529
- path = tempfile()
337
+ # Make sure we can retrieve the scope.
338
+ assert_equal(scope, scope.class_scope(base),
339
+ "class scope was not set correctly")
530
340
 
531
- stats = []
532
- stats << defaultobj("file", "group" => "root")
533
- stats << fileobj(path, "owner" => "root")
534
- stats << fileobj(path, "mode" => "755")
341
+ # Now try it with a normal string
342
+ Puppet[:trace] = false
343
+ assert_raise(Puppet::DevError) do
344
+ scope.setclass "string"
345
+ end
535
346
 
536
- top = AST::ASTArray.new(
537
- :file => __FILE__,
538
- :line => __LINE__,
539
- :children => stats
540
- )
541
- scope = Puppet::Parser::Scope.new()
542
- trans = nil
543
- assert_nothing_raised {
544
- trans = scope.evaluate(:ast => top)
545
- }
347
+ assert(! scope.setclass?("string"), "string incorrectly set")
546
348
 
547
- obj = trans.find do |obj| obj.is_a? Puppet::TransObject end
349
+ # Set "" in the class list, and make sure it doesn't show up in the return
350
+ top = scope.findclass("")
351
+ assert(top, "Could not find top class")
352
+ scope.setclass top
548
353
 
549
- assert(obj, "Could not retrieve file obj")
550
- assert_equal("root", obj["group"], "Default did not take")
551
- assert_equal("root", obj["owner"], "Owner did not take")
552
- assert_equal("755", obj["mode"], "Mode did not take")
354
+ assert(! scope.classlist.include?(""), "Class list included empty")
553
355
  end
554
356
 
555
- def test_validclassnames
556
- scope = Puppet::Parser::Scope.new()
357
+ def test_validtags
358
+ scope = mkscope()
557
359
 
558
- ["a class", "Class", "a.class"].each do |bad|
360
+ ["a class", "a.class"].each do |bad|
559
361
  assert_raise(Puppet::ParseError, "Incorrectly allowed %s" % bad.inspect) do
560
- scope.setclass(object_id, bad)
362
+ scope.tag(bad)
561
363
  end
562
364
  end
563
365
 
564
- ["a-class", "a_class", "class", "yayNess"].each do |good|
366
+ ["a-class", "a_class", "Class", "class", "yayNess"].each do |good|
565
367
  assert_nothing_raised("Incorrectly banned %s" % good.inspect) do
566
- scope.setclass(object_id, good)
368
+ scope.tag(good)
567
369
  end
568
370
  end
569
371
 
570
372
  end
571
373
 
572
374
  def test_tagfunction
573
- scope = Puppet::Parser::Scope.new()
375
+ scope = mkscope()
574
376
 
575
377
  assert_nothing_raised {
576
378
  scope.function_tag(["yayness", "booness"])
577
379
  }
578
380
 
579
- assert(scope.classlist.include?("yayness"), "tag 'yayness' did not get set")
580
- assert(scope.classlist.include?("booness"), "tag 'booness' did not get set")
381
+ assert(scope.tags.include?("yayness"), "tag 'yayness' did not get set")
382
+ assert(scope.tags.include?("booness"), "tag 'booness' did not get set")
581
383
 
582
384
  # Now verify that the 'tagged' function works correctly
583
385
  assert(scope.function_tagged("yayness"),
@@ -590,77 +392,37 @@ class TestScope < Test::Unit::TestCase
590
392
  end
591
393
 
592
394
  def test_includefunction
593
- scope = Puppet::Parser::Scope.new()
594
-
595
- one = tempfile()
596
- two = tempfile()
597
-
598
- children = []
599
-
600
- children << classobj("one", :code => AST::ASTArray.new(
601
- :children => [
602
- fileobj(one, "owner" => "root")
603
- ]
604
- ))
395
+ interp = mkinterp
396
+ scope = mkscope :interp => interp
605
397
 
606
- children << classobj("two", :code => AST::ASTArray.new(
607
- :children => [
608
- fileobj(two, "owner" => "root")
609
- ]
610
- ))
398
+ myclass = interp.newclass "myclass"
399
+ otherclass = interp.newclass "otherclass"
611
400
 
612
- children << Puppet::Parser::AST::Function.new(
401
+ function = Puppet::Parser::AST::Function.new(
613
402
  :name => "include",
614
403
  :ftype => :statement,
615
404
  :arguments => AST::ASTArray.new(
616
- :children => [nameobj("one"), nameobj("two")]
405
+ :children => [nameobj("myclass"), nameobj("otherclass")]
617
406
  )
618
407
  )
619
408
 
620
- top = AST::ASTArray.new(:children => children)
621
-
622
- #assert_nothing_raised {
623
- # scope.function_include(["one", "two"])
624
- #}
625
-
626
- assert_nothing_raised {
627
- scope.evaluate(:ast => top)
628
- }
629
-
630
-
631
- assert(scope.classlist.include?("one"), "tag 'one' did not get set")
632
- assert(scope.classlist.include?("two"), "tag 'two' did not get set")
409
+ assert_nothing_raised do
410
+ function.evaluate :scope => scope
411
+ end
633
412
 
634
- # Now verify that the 'tagged' function works correctly
635
- assert(scope.function_tagged("one"),
636
- "tagged function incorrectly returned false")
637
- assert(scope.function_tagged("two"),
638
- "tagged function incorrectly returned false")
413
+ [myclass, otherclass].each do |klass|
414
+ assert(scope.setclass?(klass),
415
+ "%s was not set" % klass.fqname)
416
+ end
639
417
  end
640
418
 
641
419
  def test_definedfunction
642
- scope = Puppet::Parser::Scope.new()
643
-
644
- one = tempfile()
645
- two = tempfile()
646
-
647
- children = []
648
-
649
- children << classobj("one", :code => AST::ASTArray.new(
650
- :children => [
651
- fileobj(one, "owner" => "root")
652
- ]
653
- ))
654
-
655
- children << classobj("two", :code => AST::ASTArray.new(
656
- :children => [
657
- fileobj(two, "owner" => "root")
658
- ]
659
- ))
660
-
661
- top = AST::ASTArray.new(:children => children)
420
+ interp = mkinterp
421
+ %w{one two}.each do |name|
422
+ interp.newdefine name
423
+ end
662
424
 
663
- top.evaluate(:scope => scope)
425
+ scope = mkscope :interp => interp
664
426
 
665
427
  assert_nothing_raised {
666
428
  %w{one two file user}.each do |type|
@@ -671,46 +433,75 @@ class TestScope < Test::Unit::TestCase
671
433
  assert(!scope.function_defined(["nopeness"]),
672
434
  "Class 'nopeness' was incorrectly considered defined")
673
435
  }
674
-
675
-
676
436
  end
677
437
 
678
- # Make sure components acquire defaults.
679
- def test_defaultswithcomponents
680
- children = []
438
+ # Make sure we know what we consider to be truth.
439
+ def test_truth
440
+ assert_equal(true, Puppet::Parser::Scope.true?("a string"),
441
+ "Strings not considered true")
442
+ assert_equal(true, Puppet::Parser::Scope.true?(true),
443
+ "True considered true")
444
+ assert_equal(false, Puppet::Parser::Scope.true?(""),
445
+ "Empty strings considered true")
446
+ assert_equal(false, Puppet::Parser::Scope.true?(false),
447
+ "false considered true")
448
+ end
681
449
 
682
- # Create a component
683
- filename = tempfile()
684
- args = AST::ASTArray.new(
685
- :file => tempfile(),
686
- :line => rand(100),
687
- :children => [nameobj("argument")]
688
- )
689
- children << compobj("comp", :args => args, :code => AST::ASTArray.new(
690
- :children => [
691
- fileobj(filename, "owner" => varref("argument") )
692
- ]
693
- ))
450
+ # Verify scope context is handled correctly.
451
+ def test_scopeinside
452
+ scope = mkscope()
694
453
 
695
- # Create a default
696
- children << defaultobj("comp", "argument" => "yayness")
454
+ one = :one
455
+ two = :two
697
456
 
698
- # lastly, create an object that calls our third component
699
- children << objectdef("comp", "boo", {"argument" => "parentfoo"})
457
+ # First just test the basic functionality.
458
+ assert_nothing_raised {
459
+ scope.inside :one do
460
+ assert_equal(:one, scope.inside, "Context did not get set")
461
+ end
462
+ assert_nil(scope.inside, "Context did not revert")
463
+ }
700
464
 
701
- trans = assert_evaluate(children)
465
+ # Now make sure error settings work.
466
+ assert_raise(RuntimeError) {
467
+ scope.inside :one do
468
+ raise RuntimeError, "This is a failure, yo"
469
+ end
470
+ }
471
+ assert_nil(scope.inside, "Context did not revert")
702
472
 
703
- flat = trans.flatten
473
+ # Now test it a bit deeper in.
474
+ assert_nothing_raised {
475
+ scope.inside :one do
476
+ scope.inside :two do
477
+ assert_equal(:two, scope.inside, "Context did not get set")
478
+ end
479
+ assert_equal(:one, scope.inside, "Context did not get set")
480
+ end
481
+ assert_nil(scope.inside, "Context did not revert")
482
+ }
704
483
 
705
- assert(!flat.empty?, "Got no objects back")
484
+ # And lastly, check errors deeper in
485
+ assert_nothing_raised {
486
+ scope.inside :one do
487
+ begin
488
+ scope.inside :two do
489
+ raise "a failure"
490
+ end
491
+ rescue
492
+ end
493
+ assert_equal(:one, scope.inside, "Context did not get set")
494
+ end
495
+ assert_nil(scope.inside, "Context did not revert")
496
+ }
706
497
 
707
- assert_equal("parentfoo", flat[0]["owner"], "default did not take")
708
498
  end
709
499
 
710
500
  if defined? ActiveRecord
711
- # Verify that we recursively mark as collectable the results of collectable
501
+ # Verify that we recursively mark as exported the results of collectable
712
502
  # components.
713
- def test_collectablecomponents
503
+ def test_exportedcomponents
504
+ interp, scope, source = mkclassframing
714
505
  children = []
715
506
 
716
507
  args = AST::ASTArray.new(
@@ -718,47 +509,44 @@ class TestScope < Test::Unit::TestCase
718
509
  :line => rand(100),
719
510
  :children => [nameobj("arg")]
720
511
  )
512
+
721
513
  # Create a top-level component
722
- children << compobj("one", :args => args)
514
+ interp.newdefine "one", :arguments => [%w{arg}],
515
+ :code => AST::ASTArray.new(
516
+ :children => [
517
+ resourcedef("file", "/tmp", {"owner" => varref("arg")})
518
+ ]
519
+ )
723
520
 
724
521
  # And a component that calls it
725
- children << compobj("two", :args => args, :code => AST::ASTArray.new(
726
- :children => [
727
- objectdef("one", "ptest", {"arg" => "parentfoo"})
728
- ]
729
- ))
522
+ interp.newdefine "two", :arguments => [%w{arg}],
523
+ :code => AST::ASTArray.new(
524
+ :children => [
525
+ resourcedef("one", "ptest", {"arg" => varref("arg")})
526
+ ]
527
+ )
730
528
 
731
529
  # And then a third component that calls the second
732
- children << compobj("three", :args => args, :code => AST::ASTArray.new(
733
- :children => [
734
- objectdef("two", "yay", {"arg" => "parentfoo"})
735
- ]
736
- ))
530
+ interp.newdefine "three", :arguments => [%w{arg}],
531
+ :code => AST::ASTArray.new(
532
+ :children => [
533
+ resourcedef("two", "yay", {"arg" => varref("arg")})
534
+ ]
535
+ )
737
536
 
738
537
  # lastly, create an object that calls our third component
739
- obj = objectdef("three", "boo", {"arg" => "parentfoo"})
538
+ obj = resourcedef("three", "boo", {"arg" => "parentfoo"})
740
539
 
741
- # And mark it as collectable
742
- obj.collectable = true
540
+ # And mark it as exported
541
+ obj.exported = true
743
542
 
744
- children << obj
543
+ obj.evaluate :scope => scope
745
544
 
746
- top = nil
747
- assert_nothing_raised("Could not create top object") {
748
- top = AST::ASTArray.new(
749
- :children => children
750
- )
751
- }
752
-
753
- trans = nil
754
- scope = nil
755
- assert_nothing_raised {
756
- scope = Puppet::Parser::Scope.new()
757
- trans = scope.evaluate(:ast => top)
758
- }
545
+ # And then evaluate it
546
+ interp.evaliterate(scope)
759
547
 
760
548
  %w{file}.each do |type|
761
- objects = scope.exported(type)
549
+ objects = scope.lookupexported(type)
762
550
 
763
551
  assert(!objects.empty?, "Did not get an exported %s" % type)
764
552
  end
@@ -769,7 +557,6 @@ class TestScope < Test::Unit::TestCase
769
557
  # scope.
770
558
  def test_storeandcollect
771
559
  Puppet[:storeconfigs] = true
772
- Puppet::Rails.clear
773
560
  Puppet::Rails.init
774
561
  sleep 1
775
562
  children = []
@@ -777,11 +564,11 @@ class TestScope < Test::Unit::TestCase
777
564
  File.open(file, "w") { |f|
778
565
  f.puts "
779
566
  class yay {
780
- @host { myhost: ip => \"192.168.0.2\" }
567
+ @@host { myhost: ip => \"192.168.0.2\" }
781
568
  }
782
569
  include yay
783
- @host { puppet: ip => \"192.168.0.3\" }
784
- host <||>"
570
+ @@host { puppet: ip => \"192.168.0.3\" }
571
+ Host <<||>>"
785
572
  }
786
573
 
787
574
  interp = nil
@@ -798,7 +585,7 @@ host <||>"
798
585
  # if we pull it up from the database.
799
586
  2.times { |i|
800
587
  assert_nothing_raised {
801
- objects = interp.run("localhost", {})
588
+ objects = interp.run("localhost", {"hostname" => "localhost"})
802
589
  }
803
590
 
804
591
  flat = objects.flatten
@@ -808,53 +595,156 @@ host <||>"
808
595
  end
809
596
  }
810
597
  end
598
+ else
599
+ $stderr.puts "No ActiveRecord -- skipping collection tests"
600
+ end
811
601
 
812
- # Verify that we cannot override differently exported objects
813
- def test_exportedoverrides
814
- filename = tempfile()
815
- children = []
602
+ # Make sure tags behave appropriately.
603
+ def test_tags
604
+ interp, scope, source = mkclassframing
816
605
 
817
- obj = fileobj(filename, "owner" => "root")
818
- obj.collectable = true
819
- # create the parent class
820
- children << classobj("parent", :code => AST::ASTArray.new(
821
- :children => [
822
- obj
823
- ]
824
- ))
825
-
826
- # now create a child class with differ values
827
- children << classobj("child", :parentclass => nameobj("parent"),
828
- :code => AST::ASTArray.new(
829
- :children => [
830
- fileobj(filename, "owner" => "bin")
831
- ]
832
- ))
833
-
834
- # Now call the child class
835
- assert_nothing_raised("Could not add AST nodes for calling") {
836
- children << AST::ObjectDef.new(
837
- :type => nameobj("child"),
838
- :name => nameobj("yayness"),
839
- :params => astarray()
840
- )
841
- }
606
+ # First make sure we can only set legal tags
607
+ ["an invalid tag", "-anotherinvalid", "bad*tag"].each do |tag|
608
+ assert_raise(Puppet::ParseError, "Tag #{tag} was considered valid") do
609
+ scope.tag tag
610
+ end
611
+ end
842
612
 
843
- top = nil
844
- assert_nothing_raised("Could not create top object") {
845
- top = AST::ASTArray.new(
846
- :children => children
847
- )
848
- }
613
+ # Now make sure good tags make it through.
614
+ tags = %w{good-tag yaytag GoodTag another_tag}
615
+ tags.each do |tag|
616
+ assert_nothing_raised("Tag #{tag} was considered invalid") do
617
+ scope.tag tag
618
+ end
619
+ end
849
620
 
850
- objects = nil
851
- scope = nil
852
- assert_raise(Puppet::ParseError, "Incorrectly allowed override") {
853
- scope = Puppet::Parser::Scope.new()
854
- objects = scope.evaluate(:ast => top)
855
- }
621
+ # And make sure we get each of them.
622
+ ptags = scope.tags
623
+ tags.each do |tag|
624
+ assert(ptags.include?(tag), "missing #{tag}")
625
+ end
626
+
627
+
628
+ # Now create a subscope and set some tags there
629
+ newscope = scope.newscope(:type => 'subscope')
630
+
631
+ # set some tags
632
+ newscope.tag "onemore", "yaytag"
633
+
634
+ # And make sure we get them plus our parent tags
635
+ assert_equal((ptags + %w{onemore subscope}).sort, newscope.tags.sort)
856
636
  end
857
- else
858
- $stderr.puts "No ActiveRecord -- skipping collection tests"
637
+
638
+ # Make sure we successfully translate objects
639
+ def test_translate
640
+ interp, scope, source = mkclassframing
641
+
642
+ # Create a define that we'll be using
643
+ interp.newdefine("wrapper", :code => AST::ASTArray.new(:children => [
644
+ resourcedef("file", varref("name"), "owner" => "root")
645
+ ]))
646
+
647
+ # Now create a resource that uses that define
648
+ define = mkresource(:type => "wrapper", :title => "/tmp/testing",
649
+ :scope => scope, :source => source, :params => :none)
650
+
651
+ scope.setresource define
652
+
653
+ # And a normal resource
654
+ scope.setresource mkresource(:type => "file", :title => "/tmp/rahness",
655
+ :scope => scope, :source => source,
656
+ :params => {:owner => "root"})
657
+
658
+ # Evaluate the the define thing.
659
+ define.evaluate
660
+
661
+ # Now the scope should have a resource and a subscope. Translate the
662
+ # whole thing.
663
+ ret = nil
664
+ assert_nothing_raised do
665
+ ret = scope.translate
666
+ end
667
+
668
+ assert_instance_of(Puppet::TransBucket, ret)
669
+
670
+ ret.each do |obj|
671
+ assert(obj.is_a?(Puppet::TransBucket) || obj.is_a?(Puppet::TransObject),
672
+ "Got a non-transportable object %s" % obj.class)
673
+ end
674
+
675
+ rahness = ret.find { |c| c.type == "file" and c.name == "/tmp/rahness" }
676
+ assert(rahness, "Could not find top-level file")
677
+ assert_equal("root", rahness["owner"])
678
+
679
+ bucket = ret.find { |c| c.class == Puppet::TransBucket and c.name == "/tmp/testing" }
680
+ assert(bucket, "Could not find define bucket")
681
+
682
+ testing = bucket.find { |c| c.type == "file" and c.name == "/tmp/testing" }
683
+ assert(testing, "Could not find define file")
684
+ assert_equal("root", testing["owner"])
685
+
686
+ end
687
+
688
+ def test_namespaces
689
+ interp, scope, source = mkclassframing
690
+
691
+ assert_equal([""], scope.namespaces,
692
+ "Started out with incorrect namespaces")
693
+ assert_nothing_raised { scope.add_namespace("fun::test") }
694
+ assert_equal(["fun::test"], scope.namespaces,
695
+ "Did not add namespace correctly")
696
+ assert_nothing_raised { scope.add_namespace("yay::test") }
697
+ assert_equal(["fun::test", "yay::test"], scope.namespaces,
698
+ "Did not add extra namespace correctly")
699
+ end
700
+
701
+ def test_findclass_and_finddefine
702
+ interp = mkinterp
703
+
704
+ # Make sure our scope calls the interp findclass method with
705
+ # the right namespaces
706
+ scope = mkscope :interp => interp
707
+
708
+ interp.metaclass.send(:attr_accessor, :last)
709
+
710
+ methods = [:findclass, :finddefine]
711
+ methods.each do |m|
712
+ interp.meta_def(m) do |namespace, name|
713
+ @checked ||= []
714
+ @checked << [namespace, name]
715
+
716
+ # Only return a value on the last call.
717
+ if @last == namespace
718
+ ret = @checked.dup
719
+ @checked.clear
720
+ return ret
721
+ else
722
+ return nil
723
+ end
724
+ end
725
+ end
726
+
727
+ test = proc do |should|
728
+ interp.last = scope.namespaces[-1]
729
+ methods.each do |method|
730
+ result = scope.send(method, "testing")
731
+ assert_equal(should, result,
732
+ "did not get correct value from %s with namespaces %s" %
733
+ [method, scope.namespaces.inspect])
734
+ end
735
+ end
736
+
737
+ # Start with the empty namespace
738
+ assert_nothing_raised { test.call([["", "testing"]]) }
739
+
740
+ # Now add a namespace
741
+ scope.add_namespace("a")
742
+ assert_nothing_raised { test.call([["a", "testing"]]) }
743
+
744
+ # And another
745
+ scope.add_namespace("b")
746
+ assert_nothing_raised { test.call([["a", "testing"], ["b", "testing"]]) }
859
747
  end
860
748
  end
749
+
750
+ # $Id: scope.rb 2418 2007-04-26 19:09:24Z luke $