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,13 +1,10 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
6
  require 'puppet/parser/lexer'
9
- require 'test/unit'
10
- require 'puppettest.rb'
7
+ require 'puppettest'
11
8
 
12
9
  #%q{service("telnet") = \{
13
10
  # port => "23",
@@ -17,9 +14,13 @@ require 'puppettest.rb'
17
14
  #} => [[:NAME, "service"], [:LPAREN, "("], [:DQUOTE, "\""], [:NAME, "telnet"], [:DQUOTE, "\""], [:RPAREN, ")"], [:EQUALS, "="], [:lbrace, "{"], [:NAME, "port"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "23"], [:DQUOTE, "\""], [:COMMA, ","], [:NAME, "protocol"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "tcp"], [:DQUOTE, "\""], [:COMMA, ","], [:NAME, "name"], [:FARROW, "=>"], [:DQUOTE, "\""], [:NAME, "telnet"], [:DQUOTE, "\""], [:COMMA, ","], [:RBRACE, "}"]]
18
15
 
19
16
  class TestLexer < Test::Unit::TestCase
20
- include TestPuppet
17
+ include PuppetTest
21
18
  def setup
22
19
  super
20
+ mklexer
21
+ end
22
+
23
+ def mklexer
23
24
  @lexer = Puppet::Parser::Lexer.new()
24
25
  end
25
26
 
@@ -86,9 +87,10 @@ class TestLexer < Test::Unit::TestCase
86
87
 
87
88
  def test_files
88
89
  textfiles() { |file|
89
- @lexer.file = file
90
- assert_nothing_raised() {
91
- @lexer.fullscan()
90
+ lexer = Puppet::Parser::Lexer.new()
91
+ lexer.file = file
92
+ assert_nothing_raised("Failed to lex %s" % file) {
93
+ lexer.fullscan()
92
94
  }
93
95
  Puppet::Type.allclear
94
96
  }
@@ -156,6 +158,90 @@ class TestLexer < Test::Unit::TestCase
156
158
 
157
159
  assert_equal([[:AT, "@"], [:NAME, "type"], [:LBRACE, "{"], [false,false]],ret)
158
160
  end
161
+
162
+ def test_namespace
163
+ @lexer.string = %{class myclass}
164
+
165
+ assert_nothing_raised {
166
+ @lexer.fullscan
167
+ }
168
+
169
+ assert_equal("myclass", @lexer.namespace)
170
+
171
+ assert_nothing_raised do
172
+ @lexer.namepop
173
+ end
174
+
175
+ assert_equal("", @lexer.namespace)
176
+
177
+ @lexer.string = "class base { class sub { class more"
178
+
179
+ assert_nothing_raised {
180
+ @lexer.fullscan
181
+ }
182
+
183
+ assert_equal("base::sub::more", @lexer.namespace)
184
+
185
+ assert_nothing_raised do
186
+ @lexer.namepop
187
+ end
188
+
189
+ assert_equal("base::sub", @lexer.namespace)
190
+
191
+ # Now try it with some fq names
192
+ mklexer
193
+
194
+ @lexer.string = "class base { class sub::more {"
195
+
196
+ assert_nothing_raised {
197
+ @lexer.fullscan
198
+ }
199
+
200
+ assert_equal("base::sub::more", @lexer.namespace)
201
+
202
+ assert_nothing_raised do
203
+ @lexer.namepop
204
+ end
205
+
206
+ assert_equal("base", @lexer.namespace)
207
+ end
208
+
209
+ def test_indefine
210
+ @lexer.string = %{define me}
211
+
212
+ assert_nothing_raised {
213
+ @lexer.scan { |t,s| }
214
+ }
215
+
216
+ assert(@lexer.indefine?, "Lexer not considered in define")
217
+
218
+ # Now make sure we throw an error when trying to nest defines.
219
+ assert_raise(Puppet::ParseError) do
220
+ @lexer.string = %{define another}
221
+ @lexer.scan { |t,s| }
222
+ end
223
+
224
+ assert_nothing_raised do
225
+ @lexer.indefine = false
226
+ end
227
+
228
+ assert(! @lexer.indefine?, "Lexer still considered in define")
229
+ end
230
+
231
+ # Make sure the different qualified variables work.
232
+ def test_variable
233
+ ["$variable", "$::variable", "$qualified::variable", "$further::qualified::variable"].each do |string|
234
+ @lexer.string = string
235
+
236
+ assert_nothing_raised("Could not lex %s" % string) do
237
+ @lexer.scan do |t, s|
238
+ assert_equal(:VARIABLE, t, "did not get variable as token")
239
+ assert_equal(string.sub(/^\$/, ''), s, "did not get correct string back")
240
+ break
241
+ end
242
+ end
243
+ end
244
+ end
159
245
  end
160
246
 
161
- # $Id: lexer.rb 1189 2006-05-13 18:27:22Z luke $
247
+ # $Id: lexer.rb 2393 2007-04-19 18:34:03Z luke $
@@ -1,21 +1,17 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
6
  require 'puppet/parser/parser'
9
- require 'test/unit'
10
7
  require 'puppettest'
11
8
 
12
9
  class TestParser < Test::Unit::TestCase
13
- include ParserTesting
10
+ include PuppetTest::ParserTesting
14
11
 
15
12
  def setup
16
13
  super
17
14
  Puppet[:parseonly] = true
18
- @parser = Puppet::Parser::Parser.new()
19
15
  end
20
16
 
21
17
  def test_simple_hostname
@@ -32,6 +28,10 @@ class TestParser < Test::Unit::TestCase
32
28
  check_parseable "'svn.23.nu'"
33
29
  check_parseable "'HOST'"
34
30
  end
31
+
32
+ def test_inherits_from_default
33
+ check_parseable(["default", "host1"], "node default {}\nnode host1 inherits default {}")
34
+ end
35
35
 
36
36
  def test_reject_hostname
37
37
  check_nonparseable "host.example.com"
@@ -44,52 +44,45 @@ class TestParser < Test::Unit::TestCase
44
44
 
45
45
  AST = Puppet::Parser::AST
46
46
 
47
- def check_parseable(hostnames)
47
+ def check_parseable(hostnames, code = nil)
48
48
  unless hostnames.is_a?(Array)
49
49
  hostnames = [ hostnames ]
50
50
  end
51
+ interp = nil
52
+ code ||= "node #{hostnames.join(", ")} { }"
51
53
  assert_nothing_raised {
52
- @parser.string = "node #{hostnames.join(", ")} { }"
54
+ interp = mkinterp :Code => code
53
55
  }
54
56
  # Strip quotes
55
57
  hostnames.map! { |s| s.sub(/^'(.*)'$/, "\\1") }
56
- ast = nil
58
+
59
+ # parse
57
60
  assert_nothing_raised {
58
- ast = @parser.parse
61
+ interp.send(:parsefiles)
59
62
  }
60
- # Verify that the AST has the expected structure
61
- # and that the leaves have the right hostnames in them
62
- assert_kind_of(AST::ASTArray, ast)
63
- assert_equal(1, ast.children.size)
64
- nodedef = ast.children[0]
65
- assert_kind_of(AST::NodeDef, nodedef)
66
- assert_kind_of(AST::ASTArray, nodedef.names)
67
- assert_equal(hostnames.size, nodedef.names.children.size)
68
- hostnames.size.times do |i|
69
- hostnode = nodedef.names.children[i]
70
- assert_kind_of(AST::HostName, hostnode)
71
- assert_equal(hostnames[i], hostnode.value)
63
+
64
+ # Now make sure we can look up each of the names
65
+ hostnames.each do |name|
66
+ assert(interp.nodesearch(name),
67
+ "Could not find node %s" % name.inspect)
72
68
  end
73
69
  end
74
70
 
75
71
  def check_nonparseable(hostname)
76
- assert_nothing_raised {
77
- @parser.string = "node #{hostname} { }"
78
- }
79
-
80
- assert_raise(Puppet::DevError, Puppet::ParseError) {
81
- @parser.parse
72
+ interp = nil
73
+ assert_raise(Puppet::DevError, Puppet::ParseError, "#{hostname} passed") {
74
+ interp = mkinterp :Code => "node #{hostname} { }"
75
+ interp.send(:parsefiles)
82
76
  }
83
77
  end
84
78
 
85
79
  # Make sure we can find default nodes if there's no other entry
86
80
  def test_default_node
87
81
  Puppet[:parseonly] = false
88
- @parser = Puppet::Parser::Parser.new()
89
82
 
90
83
  fileA = tempfile()
91
84
  fileB = tempfile()
92
- @parser.string = %{
85
+ code = %{
93
86
  node mynode {
94
87
  file { "#{fileA}": ensure => file }
95
88
  }
@@ -98,34 +91,25 @@ node default {
98
91
  file { "#{fileB}": ensure => file }
99
92
  }
100
93
  }
101
-
102
- # First make sure it parses
103
- ast = nil
94
+ interp = nil
104
95
  assert_nothing_raised {
105
- ast = @parser.parse
106
- }
107
-
108
- args = {
109
- :ast => ast,
110
- :facts => {},
111
- :names => ["mynode"]
96
+ interp = mkinterp :Code => code
112
97
  }
113
- # Make sure we get a config for "mynode"
114
98
 
115
- trans = nil
99
+ # First make sure it parses
116
100
  assert_nothing_raised {
117
- trans = Puppet::Parser::Scope.new.evaluate(args)
101
+ interp.send(:parsefiles)
118
102
  }
119
103
 
120
- assert(trans, "Did not get config for mynode")
104
+ # Make sure we find our normal node
105
+ assert(interp.nodesearch("mynode"),
106
+ "Did not find normal node")
121
107
 
122
- args[:names] = ["othernode"]
123
- # Now make sure the default node is used
124
- trans = nil
125
- assert_nothing_raised {
126
- trans = Puppet::Parser::Scope.new.evaluate(args)
127
- }
108
+ # Now look for the default node
109
+ default = interp.nodesearch("someother")
110
+ assert(default,
111
+ "Did not find default node")
128
112
 
129
- assert(trans, "Did not get config for default node")
113
+ assert_equal("default", default.fqname)
130
114
  end
131
115
  end
@@ -1,36 +1,33 @@
1
- if __FILE__ == $0
2
- $:.unshift '../../lib'
3
- $:.unshift '..'
4
- $puppetbase = "../.."
5
- end
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
6
4
 
7
5
  require 'puppet'
8
6
  require 'puppet/parser/parser'
9
- require 'test/unit'
10
7
  require 'puppettest'
11
8
 
12
9
  class TestParser < Test::Unit::TestCase
13
- include ParserTesting
10
+ include PuppetTest::ParserTesting
14
11
  def setup
15
12
  super
16
13
  Puppet[:parseonly] = true
17
14
  #@lexer = Puppet::Parser::Lexer.new()
18
- @parser = Puppet::Parser::Parser.new()
19
15
  end
20
16
 
21
17
  def test_each_file
22
18
  textfiles { |file|
19
+ parser = mkparser
23
20
  Puppet.debug("parsing %s" % file) if __FILE__ == $0
24
21
  assert_nothing_raised() {
25
- @parser.file = file
26
- @parser.parse
22
+ parser.file = file
23
+ parser.parse
27
24
  }
28
25
 
29
26
  Puppet::Type.eachtype { |type|
30
27
  type.each { |obj|
31
- assert(obj.file)
32
- assert(obj.name)
33
- assert(obj.line)
28
+ assert(obj.file, "File is not set on %s" % obj.ref)
29
+ assert(obj.name, "Name is not set on %s" % obj.ref)
30
+ assert(obj.line, "Line is not set on %s" % obj.ref)
34
31
  }
35
32
  }
36
33
  Puppet::Type.allclear
@@ -39,18 +36,20 @@ class TestParser < Test::Unit::TestCase
39
36
 
40
37
  def test_failers
41
38
  failers { |file|
39
+ parser = mkparser
42
40
  Puppet.debug("parsing failer %s" % file) if __FILE__ == $0
43
41
  assert_raise(Puppet::ParseError) {
44
- @parser.file = file
45
- ast = @parser.parse
46
- Puppet::Parser::Scope.new.evaluate(:ast => ast)
42
+ parser.file = file
43
+ ast = parser.parse
44
+ scope = mkscope :interp => parser.interp
45
+ ast.evaluate :scope => scope
47
46
  }
48
47
  Puppet::Type.allclear
49
48
  }
50
49
  end
51
50
 
52
51
  def test_arrayrvalues
53
- parser = Puppet::Parser::Parser.new()
52
+ parser = mkparser
54
53
  ret = nil
55
54
  file = tempfile()
56
55
  assert_nothing_raised {
@@ -90,7 +89,7 @@ class TestParser < Test::Unit::TestCase
90
89
  }
91
90
 
92
91
  assert_nothing_raised("Could not parse multiple files") {
93
- parser = Puppet::Parser::Parser.new()
92
+ parser = mkparser
94
93
  parser.file = manifest
95
94
  parser.parse
96
95
  }
@@ -105,102 +104,18 @@ class TestParser < Test::Unit::TestCase
105
104
  f.puts "import \" no such file \""
106
105
  end
107
106
  assert_raise(Puppet::ParseError) {
108
- parser = Puppet::Parser::Parser.new()
107
+ parser = mkparser
109
108
  parser.file = manifest
110
109
  parser.parse
111
110
  }
112
111
  end
113
112
 
114
- def test_defaults
115
- basedir = File.join(tmpdir(), "defaulttesting")
116
- @@tmpfiles << basedir
117
- Dir.mkdir(basedir)
118
-
119
- defs1 = {
120
- "testing" => "value"
121
- }
122
-
123
- defs2 = {
124
- "one" => "two",
125
- "three" => "four",
126
- "five" => false,
127
- "seven" => "eight",
128
- "nine" => true,
129
- "eleven" => "twelve"
130
- }
131
-
132
- mkdef = proc { |hash|
133
- hash.collect { |arg, value|
134
- "%s = %s" % [arg, value]
135
- }.join(", ")
136
- }
137
- manifest = File.join(basedir, "manifest")
138
- File.open(manifest, "w") { |f|
139
- f.puts "
140
- define method(#{mkdef.call(defs1)}, other) {
141
- $variable = $testing
142
- }
143
-
144
- define othermethod(#{mkdef.call(defs2)}, goodness) {
145
- $more = less
146
- }
147
-
148
- method {
149
- other => yayness
150
- }
151
-
152
- othermethod {
153
- goodness => rahness
154
- }
155
- "
156
- }
157
-
158
- ast = nil
159
- assert_nothing_raised("Could not parse multiple files") {
160
- parser = Puppet::Parser::Parser.new()
161
- parser.file = manifest
162
- ast = parser.parse
163
- }
164
-
165
- assert(ast, "Did not receive AST while parsing defaults")
166
-
167
- scope = nil
168
- assert_nothing_raised("Could not evaluate defaults parse tree") {
169
- scope = Puppet::Parser::Scope.new()
170
- scope.name = "parsetest"
171
- scope.type = "parsetest"
172
- objects = scope.evaluate(:ast => ast)
173
- }
174
-
175
- method = nil
176
- othermethod = nil
177
- assert_nothing_raised {
178
- method = scope.find { |child|
179
- child.is_a?(Puppet::Parser::Scope) and child.type == "method"
180
- }
181
- defs1.each { |var, value|
182
- curval = method.lookupvar(var)
183
- assert_equal(value, curval, "Did not get default")
184
- }
185
- }
186
-
187
- assert_nothing_raised {
188
- method = scope.find { |child|
189
- child.is_a?(Puppet::Parser::Scope) and child.type == "othermethod"
190
- }
191
- defs2.each { |var, value|
192
- curval = method.lookupvar(var)
193
- assert_equal(value, curval, "Did not get default")
194
- }
195
- }
196
- end
197
-
198
113
  def test_trailingcomma
199
114
  path = tempfile()
200
115
  str = %{file { "#{path}": ensure => file, }
201
116
  }
202
117
 
203
- parser = Puppet::Parser::Parser.new
118
+ parser = mkparser
204
119
  parser.string = str
205
120
 
206
121
  assert_nothing_raised("Could not parse trailing comma") {
@@ -222,7 +137,7 @@ class TestParser < Test::Unit::TestCase
222
137
  f.puts %{import "#{imported}"\ninclude foo}
223
138
  end
224
139
 
225
- parser = Puppet::Parser::Parser.new
140
+ parser = mkparser
226
141
  parser.file = importer
227
142
 
228
143
  # Make sure it parses fine
@@ -248,21 +163,21 @@ class TestParser < Test::Unit::TestCase
248
163
  f.puts %{import "#{fullfile}"\ninclude full\nimport "local.pp"\ninclude local}
249
164
  end
250
165
 
251
- file = tempfile()
252
- files << file
166
+ fullmaker = tempfile()
167
+ files << fullmaker
253
168
 
254
169
  File.open(fullfile, "w") do |f|
255
- f.puts %{class full { file { "#{file}": ensure => file }}}
170
+ f.puts %{class full { file { "#{fullmaker}": ensure => file }}}
256
171
  end
257
172
 
258
- file = tempfile()
259
- files << file
173
+ localmaker = tempfile()
174
+ files << localmaker
260
175
 
261
176
  File.open(localfile, "w") do |f|
262
- f.puts %{class local { file { "#{file}": ensure => file }}}
177
+ f.puts %{class local { file { "#{localmaker}": ensure => file }}}
263
178
  end
264
179
 
265
- parser = Puppet::Parser::Parser.new
180
+ parser = mkparser
266
181
  parser.file = importer
267
182
 
268
183
  # Make sure it parses
@@ -294,7 +209,7 @@ class TestParser < Test::Unit::TestCase
294
209
  f.puts %{class local { file { "#{file}": ensure => file }}}
295
210
  end
296
211
 
297
- parser = Puppet::Parser::Parser.new
212
+ parser = mkparser
298
213
  parser.file = importer
299
214
 
300
215
  assert_nothing_raised {
@@ -331,7 +246,7 @@ class TestParser < Test::Unit::TestCase
331
246
  f.puts %{import "subdir/subtwo"}
332
247
  end
333
248
 
334
- parser = Puppet::Parser::Parser.new
249
+ parser = mkparser
335
250
  parser.file = top
336
251
 
337
252
  assert_nothing_raised {
@@ -339,46 +254,20 @@ class TestParser < Test::Unit::TestCase
339
254
  }
340
255
  end
341
256
 
342
- # Verify that collectable objects are marked that way.
343
- def test_collectable
344
- Puppet[:storeconfigs] = true
345
- ["@port { ssh: protocols => tcp, number => 22 }",
346
- "@port { ssh: protocols => tcp, number => 22;
347
- smtp: protocols => tcp, number => 25 }"].each do |text|
348
- parser = Puppet::Parser::Parser.new
349
- parser.string = text
350
-
351
- ret = nil
352
- assert_nothing_raised {
353
- ret = parser.parse
354
- }
355
-
356
- assert_instance_of(AST::ASTArray, ret)
357
-
358
- ret.each do |obj|
359
- assert_instance_of(AST::ObjectDef, obj)
360
- assert(obj.collectable, "Object was not marked collectable")
361
- end
362
- end
363
- end
364
-
365
257
  # Defaults are purely syntactical, so it doesn't make sense to be able to
366
258
  # collect them.
367
259
  def test_uncollectabledefaults
368
260
  string = "@Port { protocols => tcp }"
369
- parser = Puppet::Parser::Parser.new
370
- parser.string = string
371
261
 
372
262
  assert_raise(Puppet::ParseError) {
373
- parser.parse
263
+ mkparser.parse(string)
374
264
  }
375
265
  end
376
266
 
377
267
  # Verify that we can parse collections
378
268
  def test_collecting
379
- Puppet[:storeconfigs] = true
380
- text = "port <| |>"
381
- parser = Puppet::Parser::Parser.new
269
+ text = "Port <| |>"
270
+ parser = mkparser
382
271
  parser.string = text
383
272
 
384
273
  ret = nil
@@ -398,7 +287,7 @@ class TestParser < Test::Unit::TestCase
398
287
  File.open(file, "w") do |f|
399
288
  f.puts %{}
400
289
  end
401
- parser = Puppet::Parser::Parser.new
290
+ parser = mkparser
402
291
  parser.file = file
403
292
  assert_nothing_raised {
404
293
  parser.parse
@@ -418,7 +307,7 @@ node nodeA, nodeB {
418
307
  }
419
308
  end
420
309
 
421
- parser = Puppet::Parser::Parser.new
310
+ parser = mkparser
422
311
  parser.file = file
423
312
  ast = nil
424
313
  assert_nothing_raised {
@@ -429,7 +318,7 @@ node nodeA, nodeB {
429
318
  def test_emptyarrays
430
319
  str = %{$var = []\n}
431
320
 
432
- parser = Puppet::Parser::Parser.new
321
+ parser = mkparser
433
322
  parser.string = str
434
323
 
435
324
  # Make sure it parses fine
@@ -448,7 +337,7 @@ file { "/tmp/yayness":
448
337
  ensure => exists
449
338
  }
450
339
  }
451
- parser = Puppet::Parser::Parser.new
340
+ parser = mkparser
452
341
  parser.string = str
453
342
 
454
343
  # Make sure it parses fine
@@ -456,6 +345,424 @@ file { "/tmp/yayness":
456
345
  parser.parse
457
346
  }
458
347
  end
348
+
349
+ def test_metaparams_in_definition_prototypes
350
+ parser = mkparser
351
+
352
+
353
+ assert_raise(Puppet::ParseError) {
354
+ parser.parse %{define mydef($schedule) {}}
355
+ }
356
+
357
+ assert_nothing_raised {
358
+ parser.parse %{define adef($schedule = false) {}}
359
+ parser.parse %{define mydef($schedule = daily) {}}
360
+ }
361
+ end
362
+
363
+ def test_parsingif
364
+ parser = mkparser
365
+ exec = proc do |val|
366
+ %{exec { "/bin/echo #{val}": logoutput => true }}
367
+ end
368
+ str1 = %{if true { #{exec.call("true")} }}
369
+ ret = nil
370
+ assert_nothing_raised {
371
+ ret = parser.parse(str1)[0]
372
+ }
373
+ assert_instance_of(Puppet::Parser::AST::IfStatement, ret)
374
+ str2 = %{if true { #{exec.call("true")} } else { #{exec.call("false")} }}
375
+ assert_nothing_raised {
376
+ ret = parser.parse(str2)[0]
377
+ }
378
+ assert_instance_of(Puppet::Parser::AST::IfStatement, ret)
379
+ assert_instance_of(Puppet::Parser::AST::Else, ret.else)
380
+ end
381
+
382
+ def test_hostclass
383
+ parser = mkparser
384
+ interp = parser.interp
385
+
386
+ assert_nothing_raised {
387
+ parser.parse %{class myclass { class other {} }}
388
+ }
389
+ assert(interp.findclass("", "myclass"), "Could not find myclass")
390
+ assert(interp.findclass("", "myclass::other"), "Could not find myclass::other")
391
+
392
+ assert_nothing_raised {
393
+ parser.parse "class base {}
394
+ class container {
395
+ class deep::sub inherits base {}
396
+ }"
397
+ }
398
+ sub = interp.findclass("", "container::deep::sub")
399
+ assert(sub, "Could not find sub")
400
+ assert_equal("base", sub.parentclass.type)
401
+
402
+ # Now try it with a parent class being a fq class
403
+ assert_nothing_raised {
404
+ parser.parse "class container::one inherits container::deep::sub {}"
405
+ }
406
+ sub = interp.findclass("", "container::one")
407
+ assert(sub, "Could not find one")
408
+ assert_equal("sub", sub.parentclass.type)
409
+
410
+ # Finally, try including a qualified class
411
+ assert_nothing_raised("Could not include fully qualified class") {
412
+ parser.parse "include container::deep::sub"
413
+ }
414
+ end
415
+
416
+ def test_topnamespace
417
+ parser = mkparser
418
+ parser.interp.clear
419
+
420
+ # Make sure we put the top-level code into a class called "" in
421
+ # the "" namespace
422
+ assert_nothing_raised do
423
+ out = parser.parse ""
424
+
425
+ assert_nil(out)
426
+ assert_nil(parser.interp.findclass("", ""))
427
+ end
428
+
429
+ # Now try something a touch more complicated
430
+ parser.interp.clear
431
+ assert_nothing_raised do
432
+ out = parser.parse "Exec { path => '/usr/bin:/usr/sbin' }"
433
+ assert_instance_of(AST::ASTArray, out)
434
+ assert_equal("", parser.interp.findclass("", "").type)
435
+ assert_equal("", parser.interp.findclass("", "").namespace)
436
+ assert_equal(out.object_id, parser.interp.findclass("", "").code.object_id)
437
+ end
438
+ end
439
+
440
+ # Make sure virtual and exported resources work appropriately.
441
+ def test_virtualresources
442
+ tests = [:virtual]
443
+ if Puppet.features.rails?
444
+ Puppet[:storeconfigs] = true
445
+ tests << :exported
446
+ end
447
+
448
+ tests.each do |form|
449
+ parser = mkparser
450
+
451
+ if form == :virtual
452
+ at = "@"
453
+ else
454
+ at = "@@"
455
+ end
456
+
457
+ check = proc do |res, msg|
458
+ if res.is_a?(Puppet::Parser::Resource)
459
+ txt = res.ref
460
+ else
461
+ txt = res.class
462
+ end
463
+ # Real resources get marked virtual when exported
464
+ if form == :virtual or res.is_a?(Puppet::Parser::Resource)
465
+ assert(res.virtual, "#{msg} #{at}#{txt} is not virtual")
466
+ end
467
+ if form == :virtual
468
+ assert(! res.exported, "#{msg} #{at}#{txt} is exported")
469
+ else
470
+ assert(res.exported, "#{msg} #{at}#{txt} is not exported")
471
+ end
472
+ end
473
+
474
+ ret = nil
475
+ assert_nothing_raised do
476
+ ret = parser.parse("#{at}file { '/tmp/testing': owner => root }")
477
+ end
478
+
479
+ assert_equal("/tmp/testing", ret[0].title.value)
480
+ # We always get an astarray back, so...
481
+ assert_instance_of(AST::ResourceDef, ret[0])
482
+ check.call(ret[0], "simple resource")
483
+
484
+ # Now let's try it with multiple resources in the same spec
485
+ assert_nothing_raised do
486
+ ret = parser.parse("#{at}file { ['/tmp/1', '/tmp/2']: owner => root }")
487
+ end
488
+
489
+ assert_instance_of(AST::ASTArray, ret)
490
+ ret.each do |res|
491
+ assert_instance_of(AST::ResourceDef, res)
492
+ check.call(res, "multiresource")
493
+ end
494
+
495
+ # Now evaluate these
496
+ scope = mkscope
497
+
498
+ klass = scope.interp.newclass ""
499
+ scope.source = klass
500
+
501
+ assert_nothing_raised do
502
+ ret.evaluate :scope => scope
503
+ end
504
+
505
+ # Make sure we can find both of them
506
+ %w{/tmp/1 /tmp/2}.each do |title|
507
+ res = scope.findresource("File[#{title}]")
508
+ assert(res, "Could not find %s" % title)
509
+ check.call(res, "found multiresource")
510
+ end
511
+ end
512
+ end
513
+
514
+ def test_collections
515
+ tests = [:virtual]
516
+ if Puppet.features.rails?
517
+ Puppet[:storeconfigs] = true
518
+ tests << :exported
519
+ end
520
+
521
+ tests.each do |form|
522
+ parser = mkparser
523
+
524
+ if form == :virtual
525
+ arrow = "<||>"
526
+ else
527
+ arrow = "<<||>>"
528
+ end
529
+
530
+ check = proc do |coll|
531
+ assert_instance_of(AST::Collection, coll)
532
+ assert_equal(form, coll.form)
533
+ end
534
+
535
+ ret = nil
536
+ assert_nothing_raised do
537
+ ret = parser.parse("File #{arrow}")
538
+ end
539
+ check.call(ret[0])
540
+ end
541
+ end
542
+
543
+ def test_collectionexpressions
544
+ %w{== !=}.each do |oper|
545
+ str = "File <| title #{oper} '/tmp/testing' |>"
546
+
547
+ parser = mkparser
548
+
549
+ res = nil
550
+ assert_nothing_raised do
551
+ res = parser.parse(str)[0]
552
+ end
553
+
554
+ assert_instance_of(AST::Collection, res)
555
+
556
+ query = res.query
557
+ assert_instance_of(AST::CollExpr, query)
558
+
559
+ assert_equal(:virtual, query.form)
560
+ assert_equal("title", query.test1.value)
561
+ assert_equal("/tmp/testing", query.test2.value)
562
+ assert_equal(oper, query.oper)
563
+ end
564
+ end
565
+
566
+ def test_collectionstatements
567
+ %w{and or}.each do |joiner|
568
+ str = "File <| title == '/tmp/testing' #{joiner} owner == root |>"
569
+
570
+ parser = mkparser
571
+
572
+ res = nil
573
+ assert_nothing_raised do
574
+ res = parser.parse(str)[0]
575
+ end
576
+
577
+ assert_instance_of(AST::Collection, res)
578
+
579
+ query = res.query
580
+ assert_instance_of(AST::CollExpr, query)
581
+
582
+ assert_equal(joiner, query.oper)
583
+ assert_instance_of(AST::CollExpr, query.test1)
584
+ assert_instance_of(AST::CollExpr, query.test2)
585
+ end
586
+ end
587
+
588
+ def test_collectionstatements_with_parens
589
+ [
590
+ "(title == '/tmp/testing' and owner == root) or owner == wheel",
591
+ "(title == '/tmp/testing')"
592
+ ].each do |test|
593
+ str = "File <| #{test} |>"
594
+ parser = mkparser
595
+
596
+ res = nil
597
+ assert_nothing_raised("Could not parse '#{test}'") do
598
+ res = parser.parse(str)[0]
599
+ end
600
+
601
+ assert_instance_of(AST::Collection, res)
602
+
603
+ query = res.query
604
+ assert_instance_of(AST::CollExpr, query)
605
+
606
+ #assert_equal(joiner, query.oper)
607
+ #assert_instance_of(AST::CollExpr, query.test1)
608
+ #assert_instance_of(AST::CollExpr, query.test2)
609
+ end
610
+ end
611
+
612
+ # We've had problems with files other than site.pp importing into main.
613
+ def test_importing_into_main
614
+ top = tempfile()
615
+ other = tempfile()
616
+ File.open(top, "w") do |f|
617
+ f.puts "import '#{other}'"
618
+ end
619
+
620
+ file = tempfile()
621
+ File.open(other, "w") do |f|
622
+ f.puts "file { '#{file}': ensure => present }"
623
+ end
624
+
625
+ interp = mkinterp :Manifest => top, :UseNodes => false
626
+
627
+ code = nil
628
+ assert_nothing_raised do
629
+ code = interp.run("hostname.domain.com", {}).flatten
630
+ end
631
+ assert(code.length == 1, "Did not get the file")
632
+ assert_instance_of(Puppet::TransObject, code[0])
633
+ end
634
+
635
+ def test_fully_qualified_definitions
636
+ parser = mkparser
637
+ interp = parser.interp
638
+
639
+ assert_nothing_raised("Could not parse fully-qualified definition") {
640
+ parser.parse %{define one::two { }}
641
+ }
642
+ assert(interp.finddefine("", "one::two"), "Could not find one::two with no namespace")
643
+ assert(interp.finddefine("one", "two"), "Could not find two in namespace one")
644
+
645
+ # Now try using the definition
646
+ assert_nothing_raised("Could not parse fully-qualified definition usage") {
647
+ parser.parse %{one::two { yayness: }}
648
+ }
649
+ end
650
+
651
+ # #524
652
+ def test_functions_with_no_arguments
653
+ parser = mkparser
654
+ assert_nothing_raised("Could not parse statement function with no args") {
655
+ parser.parse %{tag()}
656
+ }
657
+ assert_nothing_raised("Could not parse rvalue function with no args") {
658
+ parser.parse %{$testing = template()}
659
+ }
660
+ end
661
+
662
+ def test_module_import
663
+ basedir = File.join(tmpdir(), "module-import")
664
+ @@tmpfiles << basedir
665
+ Dir.mkdir(basedir)
666
+ modfiles = [ "init.pp", "mani1.pp", "mani2.pp",
667
+ "sub/smani1.pp", "sub/smani2.pp" ]
668
+
669
+ modpath = File.join(basedir, "modules")
670
+ Puppet[:modulepath] = modpath
671
+
672
+ modname = "amod"
673
+ manipath = File::join(modpath, modname, Puppet::Module::MANIFESTS)
674
+ FileUtils::mkdir_p(File::join(manipath, "sub"))
675
+ targets = []
676
+ modfiles.each do |fname|
677
+ target = File::join(basedir, File::basename(fname, '.pp'))
678
+ targets << target
679
+ txt = %[ file { '#{target}': content => "#{fname}" } ]
680
+ if fname == "init.pp"
681
+ txt = %[import 'mani1' \nimport '#{modname}/mani2'\nimport '#{modname}/sub/*.pp' ] + txt
682
+ end
683
+ File::open(File::join(manipath, fname), "w") do |f|
684
+ f.puts txt
685
+ end
686
+ end
687
+
688
+ manifest_texts = [ "import '#{modname}'",
689
+ "import '#{modname}/init'",
690
+ "import '#{modname}/init.pp'" ]
691
+
692
+ manifest = File.join(modpath, "manifest.pp")
693
+ manifest_texts.each do |txt|
694
+ File.open(manifest, "w") { |f| f.puts txt }
695
+
696
+ assert_nothing_raised {
697
+ parser = mkparser
698
+ parser.file = manifest
699
+ parser.parse
700
+ }
701
+ assert_creates(manifest, *targets)
702
+ end
703
+ end
704
+
705
+ # #544
706
+ def test_ignoreimports
707
+ parser = mkparser
708
+
709
+ assert(! Puppet[:ignoreimport], ":ignoreimport defaulted to true")
710
+ assert_raise(Puppet::ParseError, "Did not fail on missing import") do
711
+ parser.parse("import 'nosuchfile'")
712
+ end
713
+ assert_nothing_raised("could not set :ignoreimport") do
714
+ Puppet[:ignoreimport] = true
715
+ end
716
+ assert_nothing_raised("Parser did not follow :ignoreimports") do
717
+ parser.parse("import 'nosuchfile'")
718
+ end
719
+ end
720
+
721
+ def test_multiple_imports_on_one_line
722
+ one = tempfile
723
+ two = tempfile
724
+ base = tempfile
725
+ File.open(one, "w") { |f| f.puts "$var = value" }
726
+ File.open(two, "w") { |f| f.puts "$var = value" }
727
+ File.open(base, "w") { |f| f.puts "import '#{one}', '#{two}'" }
728
+
729
+ parser = mkparser
730
+ parser.file = base
731
+
732
+ # Importing is logged at debug time.
733
+ Puppet::Util::Log.level = :debug
734
+ assert_nothing_raised("Parser could not import multiple files at once") do
735
+ parser.parse
736
+ end
737
+
738
+ [one, two].each do |file|
739
+ assert(@logs.detect { |l| l.message =~ /importing '#{file}'/},
740
+ "did not import %s" % file)
741
+ end
742
+ end
743
+
744
+ def test_cannot_assign_qualified_variables
745
+ parser = mkparser
746
+ assert_raise(Puppet::ParseError, "successfully assigned a qualified variable") do
747
+ parser.parse("$one::two = yay")
748
+ end
749
+ end
750
+
751
+ # #588
752
+ def test_globbing_with_directories
753
+ dir = tempfile
754
+ Dir.mkdir(dir)
755
+ subdir = File.join(dir, "subdir")
756
+ Dir.mkdir(subdir)
757
+ file = File.join(dir, "file.pp")
758
+ maker = tempfile
759
+ File.open(file, "w") { |f| f.puts "file { '#{maker}': ensure => file }" }
760
+
761
+ parser = mkparser
762
+ assert_nothing_raised("Globbing failed when it matched a directory") do
763
+ parser.import("%s/*" % dir)
764
+ end
765
+ end
459
766
  end
460
767
 
461
- # $Id: parser.rb 1245 2006-06-08 20:06:41Z luke $
768
+ # $Id: parser.rb 2404 2007-04-20 16:40:47Z luke $