puppet 0.24.6 → 0.24.7

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

Potentially problematic release.


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

Files changed (383) hide show
  1. data/CHANGELOG +115 -0
  2. data/Rakefile +43 -14
  3. data/bin/puppetca +6 -5
  4. data/bin/puppetdoc +109 -15
  5. data/bin/ralsh +3 -1
  6. data/conf/redhat/puppet.spec +74 -48
  7. data/examples/mcx_dock_absent.pp +4 -0
  8. data/examples/mcx_dock_default.pp +118 -0
  9. data/examples/mcx_dock_full.pp +125 -0
  10. data/examples/mcx_dock_invalid.pp +9 -0
  11. data/examples/mcx_nogroup.pp +118 -0
  12. data/examples/mcx_notexists_absent.pp +4 -0
  13. data/ext/emacs/puppet-mode.el +1 -1
  14. data/lib/puppet.rb +1 -1
  15. data/lib/puppet/external/nagios/base.rb +114 -71
  16. data/lib/puppet/feature/base.rb +6 -0
  17. data/lib/puppet/indirector/yaml.rb +12 -3
  18. data/lib/puppet/module.rb +1 -1
  19. data/lib/puppet/network/client/master.rb +1 -1
  20. data/lib/puppet/network/xmlrpc/client.rb +3 -1
  21. data/lib/puppet/parameter.rb +1 -1
  22. data/lib/puppet/parser/ast.rb +15 -0
  23. data/lib/puppet/parser/ast/astarray.rb +1 -2
  24. data/lib/puppet/parser/ast/casestatement.rb +2 -0
  25. data/lib/puppet/parser/ast/collection.rb +2 -0
  26. data/lib/puppet/parser/ast/comparison_operator.rb +4 -0
  27. data/lib/puppet/parser/ast/definition.rb +2 -0
  28. data/lib/puppet/parser/ast/else.rb +3 -0
  29. data/lib/puppet/parser/ast/function.rb +19 -12
  30. data/lib/puppet/parser/ast/hostclass.rb +9 -1
  31. data/lib/puppet/parser/ast/ifstatement.rb +3 -0
  32. data/lib/puppet/parser/ast/node.rb +3 -0
  33. data/lib/puppet/parser/ast/resource.rb +3 -0
  34. data/lib/puppet/parser/ast/resource_defaults.rb +2 -0
  35. data/lib/puppet/parser/ast/resource_override.rb +3 -0
  36. data/lib/puppet/parser/ast/vardef.rb +3 -0
  37. data/lib/puppet/parser/functions.rb +14 -0
  38. data/lib/puppet/parser/functions/inline_template.rb +21 -0
  39. data/lib/puppet/parser/functions/template.rb +3 -2
  40. data/lib/puppet/parser/lexer.rb +56 -7
  41. data/lib/puppet/parser/parser.rb +114 -98
  42. data/lib/puppet/parser/parser_support.rb +24 -4
  43. data/lib/puppet/parser/resource/reference.rb +4 -3
  44. data/lib/puppet/parser/templatewrapper.rb +30 -22
  45. data/lib/puppet/property.rb +1 -1
  46. data/lib/puppet/property/list.rb +7 -2
  47. data/lib/puppet/property/ordered_list.rb +22 -0
  48. data/lib/puppet/provider/augeas/augeas.rb +189 -0
  49. data/lib/puppet/provider/computer/computer.rb +22 -0
  50. data/lib/puppet/provider/confine.rb +4 -1
  51. data/lib/puppet/provider/confine/variable.rb +13 -2
  52. data/lib/puppet/provider/confine_collection.rb +4 -1
  53. data/lib/puppet/provider/confiner.rb +1 -1
  54. data/lib/puppet/provider/group/directoryservice.rb +6 -3
  55. data/lib/puppet/provider/group/groupadd.rb +5 -2
  56. data/lib/puppet/provider/group/ldap.rb +11 -9
  57. data/lib/puppet/provider/group/netinfo.rb +8 -4
  58. data/lib/puppet/provider/group/pw.rb +5 -1
  59. data/lib/puppet/provider/host/netinfo.rb +5 -2
  60. data/lib/puppet/provider/macauthorization/macauthorization.rb +315 -0
  61. data/lib/puppet/provider/mcx/mcxcontent.rb +201 -0
  62. data/lib/puppet/provider/nameservice/directoryservice.rb +210 -107
  63. data/lib/puppet/provider/nameservice/netinfo.rb +7 -2
  64. data/lib/puppet/provider/package/appdmg.rb +0 -3
  65. data/lib/puppet/provider/package/apt.rb +6 -0
  66. data/lib/puppet/provider/package/rpm.rb +2 -0
  67. data/lib/puppet/provider/package/yum.rb +5 -1
  68. data/lib/puppet/provider/package/yumhelper.py +9 -0
  69. data/lib/puppet/provider/service/base.rb +9 -6
  70. data/lib/puppet/provider/service/daemontools.rb +25 -15
  71. data/lib/puppet/provider/service/debian.rb +6 -2
  72. data/lib/puppet/provider/service/freebsd.rb +5 -2
  73. data/lib/puppet/provider/service/gentoo.rb +6 -3
  74. data/lib/puppet/provider/service/init.rb +31 -21
  75. data/lib/puppet/provider/service/launchd.rb +195 -0
  76. data/lib/puppet/provider/service/redhat.rb +5 -2
  77. data/lib/puppet/provider/service/runit.rb +30 -20
  78. data/lib/puppet/provider/service/smf.rb +7 -4
  79. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +21 -1
  80. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  81. data/lib/puppet/provider/user/netinfo.rb +9 -3
  82. data/lib/puppet/provider/user/user_role_add.rb +43 -6
  83. data/lib/puppet/provider/zfs/solaris.rb +45 -0
  84. data/lib/puppet/provider/zone/solaris.rb +8 -4
  85. data/lib/puppet/provider/zpool/solaris.rb +116 -0
  86. data/lib/puppet/rails/database/003_add_environment_to_host.rb +9 -0
  87. data/lib/puppet/rails/database/schema.rb +1 -0
  88. data/lib/puppet/rails/host.rb +4 -0
  89. data/lib/puppet/reference/configuration.rb +1 -1
  90. data/lib/puppet/reports/tagmail.rb +15 -6
  91. data/lib/puppet/transaction/change.rb +3 -5
  92. data/lib/puppet/transportable.rb +1 -0
  93. data/lib/puppet/type/augeas.rb +155 -0
  94. data/lib/puppet/type/computer.rb +62 -0
  95. data/lib/puppet/type/exec.rb +2 -1
  96. data/lib/puppet/type/file.rb +1 -1
  97. data/lib/puppet/type/file/ensure.rb +8 -5
  98. data/lib/puppet/type/file/mode.rb +0 -14
  99. data/lib/puppet/type/file/owner.rb +32 -64
  100. data/lib/puppet/type/file/selcontext.rb +3 -8
  101. data/lib/puppet/type/group.rb +27 -45
  102. data/lib/puppet/type/k5login.rb +1 -1
  103. data/lib/puppet/type/macauthorization.rb +141 -0
  104. data/lib/puppet/type/mcx.rb +115 -0
  105. data/lib/puppet/type/mount.rb +1 -1
  106. data/lib/puppet/type/nagios_hostdependency.rb +3 -0
  107. data/lib/puppet/type/ssh_authorized_key.rb +16 -0
  108. data/lib/puppet/type/tidy.rb +43 -14
  109. data/lib/puppet/type/user.rb +25 -1
  110. data/lib/puppet/type/zfs.rb +51 -0
  111. data/lib/puppet/type/zone.rb +8 -0
  112. data/lib/puppet/type/zpool.rb +93 -0
  113. data/lib/puppet/util.rb +17 -38
  114. data/lib/puppet/util/file_locking.rb +44 -0
  115. data/lib/puppet/util/filetype.rb +3 -3
  116. data/lib/puppet/util/log.rb +1 -16
  117. data/lib/puppet/util/metric.rb +0 -5
  118. data/lib/puppet/util/rdoc.rb +85 -0
  119. data/lib/puppet/util/rdoc/code_objects.rb +219 -0
  120. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +829 -0
  121. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +1051 -0
  122. data/lib/puppet/util/rdoc/parser.rb +437 -0
  123. data/lib/puppet/util/selinux.rb +135 -63
  124. data/lib/puppet/util/settings.rb +136 -126
  125. data/lib/puppet/util/storage.rb +4 -2
  126. data/spec/Rakefile +91 -0
  127. data/spec/integration/checksum.rb +47 -0
  128. data/spec/integration/defaults.rb +47 -0
  129. data/spec/integration/file_serving/configuration.rb +43 -0
  130. data/spec/integration/file_serving/content.rb +18 -0
  131. data/spec/integration/file_serving/metadata.rb +18 -0
  132. data/spec/integration/indirector/direct_file_server.rb +80 -0
  133. data/spec/integration/indirector/file_content/file_server.rb +18 -0
  134. data/spec/integration/indirector/file_metadata/file_server.rb +18 -0
  135. data/spec/integration/indirector/module_files.rb +57 -0
  136. data/spec/integration/indirector/node/ldap.rb +15 -0
  137. data/spec/integration/indirector/rest.rb +464 -0
  138. data/spec/integration/network/server/mongrel.rb +48 -0
  139. data/spec/integration/network/server/webrick.rb +48 -0
  140. data/spec/integration/node.rb +93 -0
  141. data/spec/integration/node/catalog.rb +54 -0
  142. data/spec/integration/node/facts.rb +45 -0
  143. data/spec/integration/provider/package.rb +26 -0
  144. data/spec/integration/provider/service/init.rb +32 -0
  145. data/spec/integration/reference/providers.rb +17 -0
  146. data/spec/integration/reports.rb +14 -0
  147. data/spec/integration/transaction/report.rb +26 -0
  148. data/spec/integration/type/package.rb +22 -0
  149. data/spec/integration/util/file_locking.rb +36 -0
  150. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +46 -0
  151. data/spec/monkey_patches/alias_should_to_must.rb +5 -0
  152. data/spec/shared_behaviours/file_server_terminus.rb +42 -0
  153. data/spec/shared_behaviours/file_serving.rb +64 -0
  154. data/spec/shared_behaviours/memory_terminus.rb +32 -0
  155. data/spec/spec.opts +5 -0
  156. data/spec/spec_helper.rb +36 -0
  157. data/spec/unit/executables/client/certhandler.rb +122 -0
  158. data/spec/unit/file_serving/configuration.rb +224 -0
  159. data/spec/unit/file_serving/configuration/parser.rb +135 -0
  160. data/spec/unit/file_serving/content.rb +71 -0
  161. data/spec/unit/file_serving/file_base.rb +124 -0
  162. data/spec/unit/file_serving/fileset.rb +239 -0
  163. data/spec/unit/file_serving/indirection_hooks.rb +124 -0
  164. data/spec/unit/file_serving/metadata.rb +187 -0
  165. data/spec/unit/file_serving/mount.rb +143 -0
  166. data/spec/unit/file_serving/terminus_helper.rb +76 -0
  167. data/spec/unit/indirector.rb +152 -0
  168. data/spec/unit/indirector/catalog/compiler.rb +156 -0
  169. data/spec/unit/indirector/catalog/yaml.rb +25 -0
  170. data/spec/unit/indirector/checksum/file.rb +139 -0
  171. data/spec/unit/indirector/code.rb +33 -0
  172. data/spec/unit/indirector/direct_file_server.rb +89 -0
  173. data/spec/unit/indirector/envelope.rb +47 -0
  174. data/spec/unit/indirector/exec.rb +51 -0
  175. data/spec/unit/indirector/facts/facter.rb +76 -0
  176. data/spec/unit/indirector/facts/yaml.rb +26 -0
  177. data/spec/unit/indirector/file.rb +154 -0
  178. data/spec/unit/indirector/file_content/file.rb +18 -0
  179. data/spec/unit/indirector/file_content/file_server.rb +18 -0
  180. data/spec/unit/indirector/file_content/modules.rb +18 -0
  181. data/spec/unit/indirector/file_content/rest.rb +11 -0
  182. data/spec/unit/indirector/file_metadata/file.rb +52 -0
  183. data/spec/unit/indirector/file_metadata/file_server.rb +18 -0
  184. data/spec/unit/indirector/file_metadata/modules.rb +42 -0
  185. data/spec/unit/indirector/file_metadata/rest.rb +9 -0
  186. data/spec/unit/indirector/file_server.rb +184 -0
  187. data/spec/unit/indirector/indirection.rb +731 -0
  188. data/spec/unit/indirector/ldap.rb +143 -0
  189. data/spec/unit/indirector/memory.rb +29 -0
  190. data/spec/unit/indirector/module_files.rb +259 -0
  191. data/spec/unit/indirector/node/exec.rb +69 -0
  192. data/spec/unit/indirector/node/ldap.rb +424 -0
  193. data/spec/unit/indirector/node/memory.rb +19 -0
  194. data/spec/unit/indirector/node/plain.rb +19 -0
  195. data/spec/unit/indirector/node/rest.rb +13 -0
  196. data/spec/unit/indirector/node/yaml.rb +25 -0
  197. data/spec/unit/indirector/plain.rb +29 -0
  198. data/spec/unit/indirector/report/processor.rb +81 -0
  199. data/spec/unit/indirector/request.rb +87 -0
  200. data/spec/unit/indirector/rest.rb +372 -0
  201. data/spec/unit/indirector/ssl_rsa/file.rb +116 -0
  202. data/spec/unit/indirector/terminus.rb +245 -0
  203. data/spec/unit/indirector/yaml.rb +145 -0
  204. data/spec/unit/module.rb +247 -0
  205. data/spec/unit/network/client.rb +45 -0
  206. data/spec/unit/network/client/master.rb +442 -0
  207. data/spec/unit/network/handler/fileserver.rb +179 -0
  208. data/spec/unit/network/http.rb +35 -0
  209. data/spec/unit/network/http/mongrel.rb +117 -0
  210. data/spec/unit/network/http/mongrel/rest.rb +377 -0
  211. data/spec/unit/network/http/mongrel/xmlrpc.rb +0 -0
  212. data/spec/unit/network/http/webrick.rb +127 -0
  213. data/spec/unit/network/http/webrick/rest.rb +323 -0
  214. data/spec/unit/network/http/webrick/xmlrpc.rb +0 -0
  215. data/spec/unit/network/http_pool.rb +238 -0
  216. data/spec/unit/network/server.rb +316 -0
  217. data/spec/unit/network/xmlrpc/client.rb +13 -0
  218. data/spec/unit/node.rb +167 -0
  219. data/spec/unit/node/catalog.rb +864 -0
  220. data/spec/unit/node/environment.rb +37 -0
  221. data/spec/unit/node/facts.rb +44 -0
  222. data/spec/unit/other/checksum.rb +92 -0
  223. data/spec/unit/other/pgraph.rb +210 -0
  224. data/spec/unit/other/transaction.rb +33 -0
  225. data/spec/unit/other/transbucket.rb +172 -0
  226. data/spec/unit/other/transobject.rb +92 -0
  227. data/spec/unit/parameter.rb +24 -0
  228. data/spec/unit/parser/ast.rb +37 -0
  229. data/spec/unit/parser/ast/arithmetic_operator.rb +73 -0
  230. data/spec/unit/parser/ast/astarray.rb +66 -0
  231. data/spec/unit/parser/ast/boolean_operator.rb +53 -0
  232. data/spec/unit/parser/ast/collexpr.rb +92 -0
  233. data/spec/unit/parser/ast/comparison_operator.rb +92 -0
  234. data/spec/unit/parser/ast/definition.rb +195 -0
  235. data/spec/unit/parser/ast/function.rb +77 -0
  236. data/spec/unit/parser/ast/hostclass.rb +148 -0
  237. data/spec/unit/parser/ast/minus.rb +36 -0
  238. data/spec/unit/parser/ast/node.rb +125 -0
  239. data/spec/unit/parser/ast/nop.rb +20 -0
  240. data/spec/unit/parser/ast/not.rb +30 -0
  241. data/spec/unit/parser/ast/resource_override.rb +51 -0
  242. data/spec/unit/parser/ast/resource_reference.rb +63 -0
  243. data/spec/unit/parser/ast/vardef.rb +47 -0
  244. data/spec/unit/parser/collector.rb +426 -0
  245. data/spec/unit/parser/compiler.rb +561 -0
  246. data/spec/unit/parser/functions.rb +83 -0
  247. data/spec/unit/parser/functions/inline_template.rb +59 -0
  248. data/spec/unit/parser/functions/template.rb +62 -0
  249. data/spec/unit/parser/interpreter.rb +138 -0
  250. data/spec/unit/parser/lexer.rb +646 -0
  251. data/spec/unit/parser/parser.rb +228 -0
  252. data/spec/unit/parser/resource.rb +336 -0
  253. data/spec/unit/parser/resource/reference.rb +95 -0
  254. data/spec/unit/parser/scope.rb +87 -0
  255. data/spec/unit/parser/templatewrapper.rb +129 -0
  256. data/spec/unit/property.rb +35 -0
  257. data/spec/unit/property/keyvalue.rb +168 -0
  258. data/spec/unit/property/list.rb +156 -0
  259. data/spec/unit/property/ordered_list.rb +64 -0
  260. data/spec/unit/provider/augeas/augeas.rb +238 -0
  261. data/spec/unit/provider/confine.rb +78 -0
  262. data/spec/unit/provider/confine/exists.rb +81 -0
  263. data/spec/unit/provider/confine/false.rb +53 -0
  264. data/spec/unit/provider/confine/feature.rb +60 -0
  265. data/spec/unit/provider/confine/true.rb +53 -0
  266. data/spec/unit/provider/confine/variable.rb +107 -0
  267. data/spec/unit/provider/confine_collection.rb +134 -0
  268. data/spec/unit/provider/confiner.rb +63 -0
  269. data/spec/unit/provider/group/groupadd.rb +31 -0
  270. data/spec/unit/provider/group/ldap.rb +105 -0
  271. data/spec/unit/provider/ldap.rb +248 -0
  272. data/spec/unit/provider/macauthorization.rb +147 -0
  273. data/spec/unit/provider/mcx/mcxcontent.rb +175 -0
  274. data/spec/unit/provider/mount.rb +130 -0
  275. data/spec/unit/provider/mount/parsed.rb +185 -0
  276. data/spec/unit/provider/package/apt.rb +138 -0
  277. data/spec/unit/provider/package/dpkg.rb +163 -0
  278. data/spec/unit/provider/package/gem.rb +87 -0
  279. data/spec/unit/provider/package/hpux.rb +52 -0
  280. data/spec/unit/provider/selboolean.rb +37 -0
  281. data/spec/unit/provider/selmodule-example.pp +0 -0
  282. data/spec/unit/provider/selmodule.rb +66 -0
  283. data/spec/unit/provider/service/daemontools.rb +124 -0
  284. data/spec/unit/provider/service/launchd.rb +134 -0
  285. data/spec/unit/provider/service/runit.rb +117 -0
  286. data/spec/unit/provider/ssh_authorized_key/parsed.rb +102 -0
  287. data/spec/unit/provider/user/hpux.rb +25 -0
  288. data/spec/unit/provider/user/ldap.rb +279 -0
  289. data/spec/unit/provider/user/user_role_add.rb +249 -0
  290. data/spec/unit/provider/user/useradd.rb +115 -0
  291. data/spec/unit/provider/zfs/solaris.rb +87 -0
  292. data/spec/unit/provider/zone/solaris.rb +42 -0
  293. data/spec/unit/provider/zpool/solaris.rb +179 -0
  294. data/spec/unit/rails.rb +125 -0
  295. data/spec/unit/relationship.rb +149 -0
  296. data/spec/unit/reports.rb +61 -0
  297. data/spec/unit/resource_reference.rb +73 -0
  298. data/spec/unit/simple_graph.rb +280 -0
  299. data/spec/unit/transaction/change.rb +187 -0
  300. data/spec/unit/transaction/event.rb +25 -0
  301. data/spec/unit/transaction/report.rb +40 -0
  302. data/spec/unit/type.rb +64 -0
  303. data/spec/unit/type/augeas.rb +113 -0
  304. data/spec/unit/type/computer.rb +82 -0
  305. data/spec/unit/type/exec.rb +91 -0
  306. data/spec/unit/type/file.rb +155 -0
  307. data/spec/unit/type/file/ensure.rb +21 -0
  308. data/spec/unit/type/file/group.rb +118 -0
  309. data/spec/unit/type/file/owner.rb +132 -0
  310. data/spec/unit/type/file/selinux.rb +82 -0
  311. data/spec/unit/type/group.rb +40 -0
  312. data/spec/unit/type/macauthorization.rb +78 -0
  313. data/spec/unit/type/mcx.rb +108 -0
  314. data/spec/unit/type/mount.rb +219 -0
  315. data/spec/unit/type/nagios.rb +63 -0
  316. data/spec/unit/type/noop_metaparam.rb +38 -0
  317. data/spec/unit/type/package.rb +246 -0
  318. data/spec/unit/type/resources.rb +27 -0
  319. data/spec/unit/type/schedule.rb +339 -0
  320. data/spec/unit/type/selboolean.rb +47 -0
  321. data/spec/unit/type/selmodule.rb +18 -0
  322. data/spec/unit/type/service.rb +254 -0
  323. data/spec/unit/type/ssh_authorized_key.rb +106 -0
  324. data/spec/unit/type/tidy.rb +68 -0
  325. data/spec/unit/type/user.rb +260 -0
  326. data/spec/unit/type/zfs.rb +45 -0
  327. data/spec/unit/type/zone.rb +20 -0
  328. data/spec/unit/type/zpool.rb +110 -0
  329. data/spec/unit/util/checksums.rb +99 -0
  330. data/spec/unit/util/constant_inflector.rb +70 -0
  331. data/spec/unit/util/file_locking.rb +115 -0
  332. data/spec/unit/util/ldap/connection.rb +169 -0
  333. data/spec/unit/util/ldap/generator.rb +54 -0
  334. data/spec/unit/util/ldap/manager.rb +654 -0
  335. data/spec/unit/util/loadedfile.rb +65 -0
  336. data/spec/unit/util/log.rb +107 -0
  337. data/spec/unit/util/metric.rb +95 -0
  338. data/spec/unit/util/nagios_maker.rb +128 -0
  339. data/spec/unit/util/posix.rb +256 -0
  340. data/spec/unit/util/resource_template.rb +58 -0
  341. data/spec/unit/util/selinux.rb +219 -0
  342. data/spec/unit/util/settings.rb +847 -0
  343. data/spec/unit/util/storage.rb +248 -0
  344. data/spec/unit/util/tagging.rb +92 -0
  345. data/spec/unit/util/uri_helper.rb +41 -0
  346. data/spec/unit/util/user_attr.rb +47 -0
  347. data/spec/unit/util/warnings.rb +35 -0
  348. data/test/certmgr/support.rb +0 -6
  349. data/test/data/providers/ssh_authorized_key/parsed/authorized_keys +1 -0
  350. data/test/data/snippets/multilinecomments.pp +6 -0
  351. data/test/data/snippets/multipleclass.pp +9 -0
  352. data/test/language/functions.rb +11 -1
  353. data/test/language/snippets.rb +16 -0
  354. data/test/lib/puppettest/runnable_test.rb +1 -1
  355. data/test/network/handler/fileserver.rb +5 -0
  356. data/test/other/report.rb +0 -4
  357. data/test/ral/type/resources.rb +2 -19
  358. data/test/util/settings.rb +4 -4
  359. data/test/util/storage.rb +0 -24
  360. data/test/util/utiltest.rb +0 -33
  361. metadata +319 -26
  362. data/conf/debian/README.source +0 -2
  363. data/conf/debian/TODO.Debian +0 -1
  364. data/conf/debian/changelog +0 -257
  365. data/conf/debian/compat +0 -1
  366. data/conf/debian/control +0 -45
  367. data/conf/debian/copyright +0 -17
  368. data/conf/debian/docs +0 -1
  369. data/conf/debian/fileserver.conf +0 -12
  370. data/conf/debian/puppet.NEWS +0 -63
  371. data/conf/debian/puppet.conf +0 -8
  372. data/conf/debian/puppet.dirs +0 -7
  373. data/conf/debian/puppet.files +0 -6
  374. data/conf/debian/puppet.init +0 -64
  375. data/conf/debian/puppet.logrotate +0 -11
  376. data/conf/debian/puppet.postinst +0 -9
  377. data/conf/debian/puppet.postrm +0 -21
  378. data/conf/debian/puppet.preinst +0 -25
  379. data/conf/debian/puppetmaster.files +0 -4
  380. data/conf/debian/puppetmaster.init +0 -58
  381. data/conf/debian/rules +0 -115
  382. data/conf/debian/watch +0 -2
  383. data/lib/puppet/type/nagios_hostgroupescalation.rb +0 -3
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ describe Puppet::Parser::Functions do
6
+
7
+ before(:each) do
8
+ end
9
+
10
+ after(:each) do
11
+ # Rationale:
12
+ # our various tests will almost all register to Pupet::Parser::Functions
13
+ # a new function called "name". All tests are required to stub Puppet::Parser::Scope
14
+ # so that +no+ new real ruby method are defined.
15
+ # After each test, we want to leave the whole Puppet::Parser::Functions environment
16
+ # as it was before we were called, hence we call rmfunction (which might not succeed
17
+ # if the function hasn't been registered in the test). It is also important in this
18
+ # section to stub +remove_method+ here so that we don't pollute the scope.
19
+ Puppet::Parser::Scope.stubs(:remove_method)
20
+ begin
21
+ Puppet::Parser::Functions.rmfunction("name")
22
+ rescue
23
+ end
24
+ end
25
+
26
+ describe "when calling newfunction" do
27
+ it "should create the function in the scope class" do
28
+ Puppet::Parser::Scope.expects(:define_method).with { |name,block| name == "function_name" }
29
+
30
+ Puppet::Parser::Functions.newfunction("name", :type => :rvalue)
31
+ end
32
+
33
+ it "should raise an error if the function already exists" do
34
+ Puppet::Parser::Scope.expects(:define_method).with { |name,block| name == "function_name" }.once
35
+ Puppet::Parser::Functions.newfunction("name", :type => :rvalue)
36
+
37
+ lambda { Puppet::Parser::Functions.newfunction("name", :type => :rvalue) }.should raise_error
38
+ end
39
+
40
+ it "should raise an error if the function type is not correct" do
41
+ Puppet::Parser::Scope.expects(:define_method).with { |name,block| name == "function_name" }.never
42
+
43
+ lambda { Puppet::Parser::Functions.newfunction("name", :type => :unknown) }.should raise_error
44
+ end
45
+ end
46
+
47
+ describe "when calling rmfunction" do
48
+ it "should remove the function in the scope class" do
49
+ Puppet::Parser::Scope.expects(:define_method).with { |name,block| name == "function_name" }
50
+ Puppet::Parser::Functions.newfunction("name", :type => :rvalue)
51
+
52
+ Puppet::Parser::Scope.expects(:remove_method).with("function_name").once
53
+
54
+ Puppet::Parser::Functions.rmfunction("name")
55
+ end
56
+
57
+ it "should raise an error if the function doesn't exists" do
58
+ lambda { Puppet::Parser::Functions.rmfunction("name") }.should raise_error
59
+ end
60
+ end
61
+
62
+ describe "when calling function to test function existance" do
63
+
64
+ it "should return false if the function doesn't exist" do
65
+ Puppet::Parser::Functions.autoloader.stubs(:load)
66
+
67
+ Puppet::Parser::Functions.function("name").should be_false
68
+ end
69
+
70
+ it "should return it's name if the function exists" do
71
+ Puppet::Parser::Scope.expects(:define_method).with { |name,block| name == "function_name" }
72
+ Puppet::Parser::Functions.newfunction("name", :type => :rvalue)
73
+
74
+ Puppet::Parser::Functions.function("name").should == "function_name"
75
+ end
76
+
77
+ it "should try to autoload the function if it doesn't exist yet" do
78
+ Puppet::Parser::Functions.autoloader.expects(:load)
79
+
80
+ Puppet::Parser::Functions.function("name")
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe "the inline_template function" do
6
+
7
+ before :each do
8
+ @scope = Puppet::Parser::Scope.new()
9
+ end
10
+
11
+ it "should exist" do
12
+ Puppet::Parser::Functions.function("inline_template").should == "function_inline_template"
13
+ end
14
+
15
+ it "should create a TemplateWrapper when called" do
16
+ tw = stub_everything 'template_wrapper'
17
+
18
+ Puppet::Parser::TemplateWrapper.expects(:new).returns(tw)
19
+
20
+ @scope.function_inline_template("test")
21
+ end
22
+
23
+ it "should pass the template string to TemplateWrapper.result" do
24
+ tw = stub_everything 'template_wrapper'
25
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw)
26
+
27
+ tw.expects(:result).with("test")
28
+
29
+ @scope.function_inline_template("test")
30
+ end
31
+
32
+ it "should return what TemplateWrapper.result returns" do
33
+ tw = stub_everything 'template_wrapper'
34
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw)
35
+
36
+ tw.expects(:result).returns("template contents evaluated")
37
+
38
+ @scope.function_inline_template("test").should == "template contents evaluated"
39
+ end
40
+
41
+ it "should concatenate template wrapper outputs for multiple templates" do
42
+ tw1 = stub_everything "template_wrapper1"
43
+ tw2 = stub_everything "template_wrapper2"
44
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw1,tw2)
45
+ tw1.stubs(:result).returns("result1")
46
+ tw2.stubs(:result).returns("result2")
47
+
48
+ @scope.function_inline_template(["1","2"]).should == "result1result2"
49
+ end
50
+
51
+ it "should raise an error if the template raises an error" do
52
+ tw = stub_everything 'template_wrapper'
53
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw)
54
+ tw.stubs(:result).raises
55
+
56
+ lambda { @scope.function_inline_template("1") }.should raise_error(Puppet::ParseError)
57
+ end
58
+
59
+ end
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+
5
+ describe "the template function" do
6
+
7
+ before :each do
8
+ @scope = Puppet::Parser::Scope.new()
9
+ end
10
+
11
+ it "should exist" do
12
+ Puppet::Parser::Functions.function("template").should == "function_template"
13
+ end
14
+
15
+ it "should create a TemplateWrapper when called" do
16
+ tw = stub_everything 'template_wrapper'
17
+
18
+ Puppet::Parser::TemplateWrapper.expects(:new).returns(tw)
19
+
20
+ @scope.function_template("test")
21
+ end
22
+
23
+ it "should give the template filename to the TemplateWrapper" do
24
+ tw = stub_everything 'template_wrapper'
25
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw)
26
+
27
+ tw.expects(:file=).with("test")
28
+
29
+ @scope.function_template("test")
30
+ end
31
+
32
+ it "should return what TemplateWrapper.result returns" do
33
+ tw = stub_everything 'template_wrapper'
34
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw)
35
+ tw.stubs(:file=).with("test")
36
+
37
+ tw.expects(:result).returns("template contents evaluated")
38
+
39
+ @scope.function_template("test").should == "template contents evaluated"
40
+ end
41
+
42
+ it "should concatenate template wrapper outputs for multiple templates" do
43
+ tw1 = stub_everything "template_wrapper1"
44
+ tw2 = stub_everything "template_wrapper2"
45
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw1,tw2)
46
+ tw1.stubs(:file=).with("1")
47
+ tw2.stubs(:file=).with("2")
48
+ tw1.stubs(:result).returns("result1")
49
+ tw2.stubs(:result).returns("result2")
50
+
51
+ @scope.function_template(["1","2"]).should == "result1result2"
52
+ end
53
+
54
+ it "should raise an error if the template raises an error" do
55
+ tw = stub_everything 'template_wrapper'
56
+ Puppet::Parser::TemplateWrapper.stubs(:new).returns(tw)
57
+ tw.stubs(:result).raises
58
+
59
+ lambda { @scope.function_template("1") }.should raise_error(Puppet::ParseError)
60
+ end
61
+
62
+ end
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ describe Puppet::Parser::Interpreter do
6
+ before do
7
+ @interp = Puppet::Parser::Interpreter.new
8
+ @parser = mock 'parser'
9
+ end
10
+
11
+ describe "when creating parser instances" do
12
+ it "should create a parser with code if there is code defined in the :code setting" do
13
+ Puppet.settings.stubs(:value).with(:code, :myenv).returns("mycode")
14
+ @parser.expects(:string=).with("mycode")
15
+ @parser.expects(:parse)
16
+ Puppet::Parser::Parser.expects(:new).with(:environment => :myenv).returns(@parser)
17
+ @interp.send(:create_parser, :myenv).object_id.should equal(@parser.object_id)
18
+ end
19
+
20
+ it "should create a parser with the main manifest when the code setting is an empty string" do
21
+ Puppet.settings.stubs(:value).with(:code, :myenv).returns("")
22
+ Puppet.settings.stubs(:value).with(:manifest, :myenv).returns("/my/file")
23
+ @parser.expects(:parse)
24
+ @parser.expects(:file=).with("/my/file")
25
+ Puppet::Parser::Parser.expects(:new).with(:environment => :myenv).returns(@parser)
26
+ @interp.send(:create_parser, :myenv).should equal(@parser)
27
+ end
28
+
29
+ it "should return nothing when new parsers fail" do
30
+ Puppet::Parser::Parser.expects(:new).with(:environment => :myenv).raises(ArgumentError)
31
+ proc { @interp.send(:create_parser, :myenv) }.should raise_error(Puppet::Error)
32
+ end
33
+
34
+ it "should create parsers with environment-appropriate manifests" do
35
+ # Set our per-environment values. We can't just stub :value, because
36
+ # it's called by too much of the rest of the code.
37
+ text = "[env1]\nmanifest = /t/env1.pp\n[env2]\nmanifest = /t/env2.pp"
38
+ file = mock 'file'
39
+ file.stubs(:changed?).returns(true)
40
+ file.stubs(:file).returns("/whatever")
41
+ Puppet.settings.stubs(:read_file).with(file).returns(text)
42
+ Puppet.settings.parse(file)
43
+
44
+ parser1 = mock 'parser1'
45
+ Puppet::Parser::Parser.expects(:new).with(:environment => :env1).returns(parser1)
46
+ parser1.expects(:file=).with("/t/env1.pp")
47
+ parser1.expects(:parse)
48
+ @interp.send(:create_parser, :env1)
49
+
50
+ parser2 = mock 'parser2'
51
+ Puppet::Parser::Parser.expects(:new).with(:environment => :env2).returns(parser2)
52
+ parser2.expects(:file=).with("/t/env2.pp")
53
+ parser2.expects(:parse)
54
+ @interp.send(:create_parser, :env2)
55
+ end
56
+ end
57
+
58
+ describe "when managing parser instances" do
59
+ it "should use the same parser when the parser does not need reparsing" do
60
+ @interp.expects(:create_parser).with(:myenv).returns(@parser)
61
+ @interp.send(:parser, :myenv).should equal(@parser)
62
+
63
+ @parser.expects(:reparse?).returns(false)
64
+ @interp.send(:parser, :myenv).should equal(@parser)
65
+ end
66
+
67
+ it "should fail intelligently if a parser cannot be created and one does not already exist" do
68
+ @interp.expects(:create_parser).with(:myenv).raises(ArgumentError)
69
+ proc { @interp.send(:parser, :myenv) }.should raise_error(ArgumentError)
70
+ end
71
+
72
+ it "should use different parsers for different environments" do
73
+ # get one for the first env
74
+ @interp.expects(:create_parser).with(:first_env).returns(@parser)
75
+ @interp.send(:parser, :first_env).should equal(@parser)
76
+
77
+ other_parser = mock('otherparser')
78
+ @interp.expects(:create_parser).with(:second_env).returns(other_parser)
79
+ @interp.send(:parser, :second_env).should equal(other_parser)
80
+ end
81
+
82
+ describe "when files need reparsing" do
83
+ it "should create a new parser" do
84
+ oldparser = mock('oldparser')
85
+ newparser = mock('newparser')
86
+ oldparser.expects(:reparse?).returns(true)
87
+
88
+ @interp.expects(:create_parser).with(:myenv).returns(oldparser)
89
+ @interp.send(:parser, :myenv).should equal(oldparser)
90
+ @interp.expects(:create_parser).with(:myenv).returns(newparser)
91
+ @interp.send(:parser, :myenv).should equal(newparser)
92
+ end
93
+
94
+ it "should raise an exception if a new parser cannot be created" do
95
+ # Get the first parser in the hash.
96
+ @interp.expects(:create_parser).with(:myenv).returns(@parser)
97
+ @interp.send(:parser, :myenv).should equal(@parser)
98
+
99
+ @parser.expects(:reparse?).returns(true)
100
+
101
+ @interp.expects(:create_parser).with(:myenv).raises(Puppet::Error, "Could not parse")
102
+
103
+ lambda { @interp.parser(:myenv) }.should raise_error(Puppet::Error)
104
+ end
105
+ end
106
+ end
107
+
108
+ describe "when compiling a catalog" do
109
+ before do
110
+ @node = stub 'node', :environment => :myenv
111
+ @compiler = mock 'compile'
112
+ end
113
+
114
+ it "should create a compile with the node and parser" do
115
+ @compiler.expects(:compile).returns(:config)
116
+ @interp.expects(:parser).with(:myenv).returns(@parser)
117
+ Puppet::Parser::Compiler.expects(:new).with(@node, @parser).returns(@compiler)
118
+ @interp.compile(@node)
119
+ end
120
+
121
+ it "should fail intelligently when no parser can be found" do
122
+ @node.stubs(:name).returns("whatever")
123
+ @interp.expects(:parser).with(:myenv).returns(nil)
124
+ proc { @interp.compile(@node) }.should raise_error(Puppet::ParseError)
125
+ end
126
+ end
127
+
128
+ describe "when returning catalog version" do
129
+ it "should ask the appropriate parser for the catalog version" do
130
+ node = mock 'node'
131
+ node.expects(:environment).returns(:myenv)
132
+ parser = mock 'parser'
133
+ parser.expects(:version).returns(:myvers)
134
+ @interp.expects(:parser).with(:myenv).returns(parser)
135
+ @interp.configuration_version(node).should equal(:myvers)
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,646 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ require 'puppet/parser/lexer'
6
+
7
+ describe Puppet::Parser::Lexer do
8
+ describe "when reading strings" do
9
+ before { @lexer = Puppet::Parser::Lexer.new }
10
+ it "should increment the line count for every carriage return in the string" do
11
+ @lexer.line = 10
12
+ @lexer.string = "this\nis\natest'"
13
+ @lexer.slurpstring("'")
14
+
15
+ @lexer.line.should == 12
16
+ end
17
+
18
+ it "should not increment the line count for escapes in the string" do
19
+ @lexer.line = 10
20
+ @lexer.string = "this\\nis\\natest'"
21
+ @lexer.slurpstring("'")
22
+
23
+ @lexer.line.should == 10
24
+ end
25
+ end
26
+ end
27
+
28
+ describe Puppet::Parser::Lexer::Token do
29
+ before do
30
+ @token = Puppet::Parser::Lexer::Token.new(%r{something}, :NAME)
31
+ end
32
+
33
+ [:regex, :name, :string, :skip, :incr_line, :skip_text, :accumulate].each do |param|
34
+ it "should have a #{param.to_s} reader" do
35
+ @token.should be_respond_to(param)
36
+ end
37
+
38
+ it "should have a #{param.to_s} writer" do
39
+ @token.should be_respond_to(param.to_s + "=")
40
+ end
41
+ end
42
+ end
43
+
44
+ describe Puppet::Parser::Lexer::Token, "when initializing" do
45
+ it "should create a regex if the first argument is a string" do
46
+ Puppet::Parser::Lexer::Token.new("something", :NAME).regex.should == %r{something}
47
+ end
48
+
49
+ it "should set the string if the first argument is one" do
50
+ Puppet::Parser::Lexer::Token.new("something", :NAME).string.should == "something"
51
+ end
52
+
53
+ it "should set the regex if the first argument is one" do
54
+ Puppet::Parser::Lexer::Token.new(%r{something}, :NAME).regex.should == %r{something}
55
+ end
56
+ end
57
+
58
+ describe Puppet::Parser::Lexer::TokenList do
59
+ before do
60
+ @list = Puppet::Parser::Lexer::TokenList.new
61
+ end
62
+
63
+ it "should have a method for retrieving tokens by the name" do
64
+ token = @list.add_token :name, "whatever"
65
+ @list[:name].should equal(token)
66
+ end
67
+
68
+ it "should have a method for retrieving string tokens by the string" do
69
+ token = @list.add_token :name, "whatever"
70
+ @list.lookup("whatever").should equal(token)
71
+ end
72
+
73
+ it "should add tokens to the list when directed" do
74
+ token = @list.add_token :name, "whatever"
75
+ @list[:name].should equal(token)
76
+ end
77
+
78
+ it "should have a method for adding multiple tokens at once" do
79
+ @list.add_tokens "whatever" => :name, "foo" => :bar
80
+ @list[:name].should_not be_nil
81
+ @list[:bar].should_not be_nil
82
+ end
83
+
84
+ it "should fail to add tokens sharing a name with an existing token" do
85
+ @list.add_token :name, "whatever"
86
+ lambda { @list.add_token :name, "whatever" }.should raise_error(ArgumentError)
87
+ end
88
+
89
+ it "should set provided options on tokens being added" do
90
+ token = @list.add_token :name, "whatever", :skip_text => true
91
+ token.skip_text.should == true
92
+ end
93
+
94
+ it "should define any provided blocks as a :convert method" do
95
+ token = @list.add_token(:name, "whatever") do "foo" end
96
+ token.convert.should == "foo"
97
+ end
98
+
99
+ it "should store all string tokens in the :string_tokens list" do
100
+ one = @list.add_token(:name, "1")
101
+ @list.string_tokens.should be_include(one)
102
+ end
103
+
104
+ it "should store all regex tokens in the :regex_tokens list" do
105
+ one = @list.add_token(:name, %r{one})
106
+ @list.regex_tokens.should be_include(one)
107
+ end
108
+
109
+ it "should not store string tokens in the :regex_tokens list" do
110
+ one = @list.add_token(:name, "1")
111
+ @list.regex_tokens.should_not be_include(one)
112
+ end
113
+
114
+ it "should not store regex tokens in the :string_tokens list" do
115
+ one = @list.add_token(:name, %r{one})
116
+ @list.string_tokens.should_not be_include(one)
117
+ end
118
+
119
+ it "should sort the string tokens inversely by length when asked" do
120
+ one = @list.add_token(:name, "1")
121
+ two = @list.add_token(:other, "12")
122
+ @list.sort_tokens
123
+ @list.string_tokens.should == [two, one]
124
+ end
125
+ end
126
+
127
+ describe Puppet::Parser::Lexer::TOKENS do
128
+ before do
129
+ @lexer = Puppet::Parser::Lexer.new()
130
+ end
131
+
132
+ {
133
+ :LBRACK => '[',
134
+ :RBRACK => ']',
135
+ :LBRACE => '{',
136
+ :RBRACE => '}',
137
+ :LPAREN => '(',
138
+ :RPAREN => ')',
139
+ :EQUALS => '=',
140
+ :ISEQUAL => '==',
141
+ :GREATEREQUAL => '>=',
142
+ :GREATERTHAN => '>',
143
+ :LESSTHAN => '<',
144
+ :LESSEQUAL => '<=',
145
+ :NOTEQUAL => '!=',
146
+ :NOT => '!',
147
+ :COMMA => ',',
148
+ :DOT => '.',
149
+ :COLON => ':',
150
+ :AT => '@',
151
+ :LLCOLLECT => '<<|',
152
+ :RRCOLLECT => '|>>',
153
+ :LCOLLECT => '<|',
154
+ :RCOLLECT => '|>',
155
+ :SEMIC => ';',
156
+ :QMARK => '?',
157
+ :BACKSLASH => '\\',
158
+ :FARROW => '=>',
159
+ :PARROW => '+>',
160
+ :APPENDS => '+=',
161
+ :PLUS => '+',
162
+ :MINUS => '-',
163
+ :DIV => '/',
164
+ :TIMES => '*',
165
+ :LSHIFT => '<<',
166
+ :RSHIFT => '>>',
167
+ }.each do |name, string|
168
+ it "should have a token named #{name.to_s}" do
169
+ Puppet::Parser::Lexer::TOKENS[name].should_not be_nil
170
+ end
171
+
172
+ it "should match '#{string}' for the token #{name.to_s}" do
173
+ Puppet::Parser::Lexer::TOKENS[name].string.should == string
174
+ end
175
+ end
176
+
177
+ {
178
+ "case" => :CASE,
179
+ "class" => :CLASS,
180
+ "default" => :DEFAULT,
181
+ "define" => :DEFINE,
182
+ "import" => :IMPORT,
183
+ "if" => :IF,
184
+ "elsif" => :ELSIF,
185
+ "else" => :ELSE,
186
+ "inherits" => :INHERITS,
187
+ "node" => :NODE,
188
+ "and" => :AND,
189
+ "or" => :OR,
190
+ "undef" => :UNDEF,
191
+ "false" => :FALSE,
192
+ "true" => :TRUE
193
+ }.each do |string, name|
194
+ it "should have a keyword named #{name.to_s}" do
195
+ Puppet::Parser::Lexer::KEYWORDS[name].should_not be_nil
196
+ end
197
+
198
+ it "should have the keyword for #{name.to_s} set to #{string}" do
199
+ Puppet::Parser::Lexer::KEYWORDS[name].string.should == string
200
+ end
201
+ end
202
+
203
+ # These tokens' strings don't matter, just that the tokens exist.
204
+ [:DQTEXT, :SQTEXT, :BOOLEAN, :NAME, :NUMBER, :COMMENT, :MLCOMMENT, :RETURN, :SQUOTE, :DQUOTE, :VARIABLE].each do |name|
205
+ it "should have a token named #{name.to_s}" do
206
+ Puppet::Parser::Lexer::TOKENS[name].should_not be_nil
207
+ end
208
+ end
209
+ end
210
+
211
+ describe Puppet::Parser::Lexer::TOKENS[:CLASSNAME] do
212
+ before { @token = Puppet::Parser::Lexer::TOKENS[:CLASSNAME] }
213
+
214
+ it "should match against lower-case alpha-numeric terms separated by double colons" do
215
+ @token.regex.should =~ "one::two"
216
+ end
217
+
218
+ it "should match against many lower-case alpha-numeric terms separated by double colons" do
219
+ @token.regex.should =~ "one::two::three::four::five"
220
+ end
221
+
222
+ it "should match against lower-case alpha-numeric terms prefixed by double colons" do
223
+ @token.regex.should =~ "::one"
224
+ end
225
+ end
226
+
227
+ describe Puppet::Parser::Lexer::TOKENS[:CLASSREF] do
228
+ before { @token = Puppet::Parser::Lexer::TOKENS[:CLASSREF] }
229
+
230
+ it "should match against single upper-case alpha-numeric terms" do
231
+ @token.regex.should =~ "One"
232
+ end
233
+
234
+ it "should match against upper-case alpha-numeric terms separated by double colons" do
235
+ @token.regex.should =~ "One::Two"
236
+ end
237
+
238
+ it "should match against many upper-case alpha-numeric terms separated by double colons" do
239
+ @token.regex.should =~ "One::Two::Three::Four::Five"
240
+ end
241
+
242
+ it "should match against upper-case alpha-numeric terms prefixed by double colons" do
243
+ @token.regex.should =~ "::One"
244
+ end
245
+ end
246
+
247
+ describe Puppet::Parser::Lexer::TOKENS[:NAME] do
248
+ before { @token = Puppet::Parser::Lexer::TOKENS[:NAME] }
249
+
250
+ it "should match against lower-case alpha-numeric terms" do
251
+ @token.regex.should =~ "one-two"
252
+ end
253
+
254
+ it "should return itself and the value if the matched term is not a keyword" do
255
+ Puppet::Parser::Lexer::KEYWORDS.expects(:lookup).returns(nil)
256
+ @token.convert(stub("lexer"), "myval").should == [Puppet::Parser::Lexer::TOKENS[:NAME], "myval"]
257
+ end
258
+
259
+ it "should return the keyword token and the value if the matched term is a keyword" do
260
+ keyword = stub 'keyword', :name => :testing
261
+ Puppet::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
262
+ @token.convert(stub("lexer"), "myval").should == [keyword, "myval"]
263
+ end
264
+
265
+ it "should return the BOOLEAN token and 'true' if the matched term is the string 'true'" do
266
+ keyword = stub 'keyword', :name => :TRUE
267
+ Puppet::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
268
+ @token.convert(stub('lexer'), "true").should == [Puppet::Parser::Lexer::TOKENS[:BOOLEAN], true]
269
+ end
270
+
271
+ it "should return the BOOLEAN token and 'false' if the matched term is the string 'false'" do
272
+ keyword = stub 'keyword', :name => :FALSE
273
+ Puppet::Parser::Lexer::KEYWORDS.expects(:lookup).returns(keyword)
274
+ @token.convert(stub('lexer'), "false").should == [Puppet::Parser::Lexer::TOKENS[:BOOLEAN], false]
275
+ end
276
+ end
277
+
278
+ describe Puppet::Parser::Lexer::TOKENS[:NUMBER] do
279
+ before do
280
+ @token = Puppet::Parser::Lexer::TOKENS[:NUMBER]
281
+ # @regex = Regexp.new('^'+@token.regex.source+'$')
282
+ @regex = @token.regex
283
+ end
284
+
285
+ it "should match against numeric terms" do
286
+ @regex.should =~ "2982383139"
287
+ end
288
+
289
+ it "should match against float terms" do
290
+ @regex.should =~ "29823.235"
291
+ end
292
+
293
+ it "should match against hexadecimal terms" do
294
+ @regex.should =~ "0xBEEF0023"
295
+ end
296
+
297
+ it "should match against float with exponent terms" do
298
+ @regex.should =~ "10e23"
299
+ end
300
+
301
+ it "should match against float terms with negative exponents" do
302
+ @regex.should =~ "10e-23"
303
+ end
304
+
305
+ it "should match against float terms with fractional parts and exponent" do
306
+ @regex.should =~ "1.234e23"
307
+ end
308
+
309
+ it "should return the NAME token and the value" do
310
+ @token.convert(stub("lexer"), "myval").should == [Puppet::Parser::Lexer::TOKENS[:NAME], "myval"]
311
+ end
312
+ end
313
+
314
+ describe Puppet::Parser::Lexer::TOKENS[:COMMENT] do
315
+ before { @token = Puppet::Parser::Lexer::TOKENS[:COMMENT] }
316
+
317
+ it "should match against lines starting with '#'" do
318
+ @token.regex.should =~ "# this is a comment"
319
+ end
320
+
321
+ it "should be marked to get skipped" do
322
+ @token.skip?.should be_true
323
+ end
324
+
325
+ it "should be marked to accumulate" do
326
+ @token.accumulate?.should be_true
327
+ end
328
+
329
+ it "'s block should return the comment without the #" do
330
+ @token.convert(@lexer,"# this is a comment")[1].should == "this is a comment"
331
+ end
332
+ end
333
+
334
+ describe Puppet::Parser::Lexer::TOKENS[:MLCOMMENT] do
335
+ before do
336
+ @token = Puppet::Parser::Lexer::TOKENS[:MLCOMMENT]
337
+ @lexer = stub 'lexer', :line => 0
338
+ end
339
+
340
+ it "should match against lines enclosed with '/*' and '*/'" do
341
+ @token.regex.should =~ "/* this is a comment */"
342
+ end
343
+
344
+ it "should match multiple lines enclosed with '/*' and '*/'" do
345
+ @token.regex.should =~ """/*
346
+ this is a comment
347
+ */"""
348
+ end
349
+
350
+ it "should increase the lexer current line number by the amount of lines spanned by the comment" do
351
+ @lexer.expects(:line=).with(2)
352
+ @token.convert(@lexer, "1\n2\n3")
353
+ end
354
+
355
+ it "should not greedily match comments" do
356
+ match = @token.regex.match("/* first */ word /* second */")
357
+ match[1].should == " first "
358
+ end
359
+
360
+ it "should be marked to accumulate" do
361
+ @token.accumulate?.should be_true
362
+ end
363
+
364
+ it "'s block should return the comment without the comment marks" do
365
+ @lexer.stubs(:line=).with(0)
366
+
367
+ @token.convert(@lexer,"/* this is a comment */")[1].should == "this is a comment"
368
+ end
369
+
370
+ end
371
+
372
+ describe Puppet::Parser::Lexer::TOKENS[:RETURN] do
373
+ before { @token = Puppet::Parser::Lexer::TOKENS[:RETURN] }
374
+
375
+ it "should match against carriage returns" do
376
+ @token.regex.should =~ "\n"
377
+ end
378
+
379
+ it "should be marked to initiate text skipping" do
380
+ @token.skip_text.should be_true
381
+ end
382
+
383
+ it "should be marked to increment the line" do
384
+ @token.incr_line.should be_true
385
+ end
386
+ end
387
+
388
+ describe Puppet::Parser::Lexer::TOKENS[:SQUOTE] do
389
+ before { @token = Puppet::Parser::Lexer::TOKENS[:SQUOTE] }
390
+
391
+ it "should match against single quotes" do
392
+ @token.regex.should =~ "'"
393
+ end
394
+
395
+ it "should slurp the rest of the quoted string" do
396
+ lexer = stub("lexer")
397
+ lexer.expects(:slurpstring).with("myval").returns("otherval")
398
+ @token.convert(lexer, "myval")
399
+ end
400
+
401
+ it "should return the SQTEXT token with the slurped string" do
402
+ lexer = stub("lexer")
403
+ lexer.stubs(:slurpstring).with("myval").returns("otherval")
404
+ @token.convert(lexer, "myval").should == [Puppet::Parser::Lexer::TOKENS[:SQTEXT], "otherval"]
405
+ end
406
+ end
407
+
408
+ describe Puppet::Parser::Lexer::TOKENS[:DQUOTE] do
409
+ before { @token = Puppet::Parser::Lexer::TOKENS[:DQUOTE] }
410
+
411
+ it "should match against single quotes" do
412
+ @token.regex.should =~ '"'
413
+ end
414
+
415
+ it "should slurp the rest of the quoted string" do
416
+ lexer = stub("lexer")
417
+ lexer.expects(:slurpstring).with("myval").returns("otherval")
418
+ @token.convert(lexer, "myval")
419
+ end
420
+
421
+ it "should return the DQTEXT token with the slurped string" do
422
+ lexer = stub("lexer")
423
+ lexer.stubs(:slurpstring).with("myval").returns("otherval")
424
+ @token.convert(lexer, "myval").should == [Puppet::Parser::Lexer::TOKENS[:DQTEXT], "otherval"]
425
+ end
426
+ end
427
+
428
+ describe Puppet::Parser::Lexer::TOKENS[:VARIABLE] do
429
+ before { @token = Puppet::Parser::Lexer::TOKENS[:VARIABLE] }
430
+
431
+ it "should match against alpha words prefixed with '$'" do
432
+ @token.regex.should =~ '$this_var'
433
+ end
434
+
435
+ it "should return the VARIABLE token and the variable name stripped of the '$'" do
436
+ @token.convert(stub("lexer"), "$myval").should == [Puppet::Parser::Lexer::TOKENS[:VARIABLE], "myval"]
437
+ end
438
+ end
439
+
440
+ describe Puppet::Parser::Lexer, "when lexing comments" do
441
+ before { @lexer = Puppet::Parser::Lexer.new }
442
+
443
+ it "should accumulate token in munge_token" do
444
+ token = stub 'token', :skip => true, :accumulate? => true, :incr_line => nil, :skip_text => false
445
+
446
+ token.stubs(:convert).with(@lexer, "# this is a comment").returns([token, " this is a comment"])
447
+ @lexer.munge_token(token, "# this is a comment")
448
+ @lexer.munge_token(token, "# this is a comment")
449
+
450
+ @lexer.getcomment.should == " this is a comment\n this is a comment\n"
451
+ end
452
+
453
+ it "should add a new comment stack level on LBRACE" do
454
+ @lexer.string = "{"
455
+
456
+ @lexer.expects(:commentpush)
457
+
458
+ @lexer.fullscan
459
+ end
460
+
461
+ it "should return the current comments on getcomment" do
462
+ @lexer.string = "# comment"
463
+ @lexer.fullscan
464
+
465
+ @lexer.getcomment.should == "comment\n"
466
+ end
467
+
468
+ it "should discard the previous comments on blank line" do
469
+ @lexer.string = "# 1\n\n# 2"
470
+ @lexer.fullscan
471
+
472
+ @lexer.getcomment.should == "2\n"
473
+ end
474
+
475
+ end
476
+
477
+ # FIXME: We need to rewrite all of these tests, but I just don't want to take the time right now.
478
+ describe "Puppet::Parser::Lexer in the old tests" do
479
+ before { @lexer = Puppet::Parser::Lexer.new }
480
+
481
+ it "should do simple lexing" do
482
+ strings = {
483
+ %q{\\} => [[:BACKSLASH,"\\"],[false,false]],
484
+ %q{simplest scanner test} => [[:NAME,"simplest"],[:NAME,"scanner"],[:NAME,"test"],[false,false]],
485
+ %q{returned scanner test
486
+ } => [[:NAME,"returned"],[:NAME,"scanner"],[:NAME,"test"],[false,false]]
487
+ }
488
+ strings.each { |str,ary|
489
+ @lexer.string = str
490
+ @lexer.fullscan().should == ary
491
+ }
492
+ end
493
+
494
+ it "should correctly lex quoted strings" do
495
+ strings = {
496
+ %q{a simple "scanner" test
497
+ } => [[:NAME,"a"],[:NAME,"simple"],[:DQTEXT,"scanner"],[:NAME,"test"],[false,false]],
498
+ %q{a simple 'single quote scanner' test
499
+ } => [[:NAME,"a"],[:NAME,"simple"],[:SQTEXT,"single quote scanner"],[:NAME,"test"],[false,false]],
500
+ %q{a harder 'a $b \c"'
501
+ } => [[:NAME,"a"],[:NAME,"harder"],[:SQTEXT,'a $b \c"'],[false,false]],
502
+ %q{a harder "scanner test"
503
+ } => [[:NAME,"a"],[:NAME,"harder"],[:DQTEXT,"scanner test"],[false,false]],
504
+ %q{a hardest "scanner \"test\""
505
+ } => [[:NAME,"a"],[:NAME,"hardest"],[:DQTEXT,'scanner "test"'],[false,false]],
506
+ %q{a hardestest "scanner \"test\"
507
+ "
508
+ } => [[:NAME,"a"],[:NAME,"hardestest"],[:DQTEXT,'scanner "test"
509
+ '],[false,false]],
510
+ %q{function("call")} => [[:NAME,"function"],[:LPAREN,"("],[:DQTEXT,'call'],[:RPAREN,")"],[false,false]]
511
+ }
512
+ strings.each { |str,array|
513
+ @lexer.string = str
514
+ @lexer.fullscan().should == array
515
+ }
516
+ end
517
+
518
+ it "should fail usefully" do
519
+ strings = %w{
520
+ ^
521
+ }
522
+ strings.each { |str|
523
+ @lexer.string = str
524
+ lambda { @lexer.fullscan() }.should raise_error(RuntimeError)
525
+ }
526
+ end
527
+
528
+ it "should fail if the string is not set" do
529
+ lambda { @lexer.fullscan() }.should raise_error(Puppet::LexError)
530
+ end
531
+
532
+ it "should correctly identify keywords" do
533
+ @lexer.string = "case"
534
+ @lexer.fullscan.should == [[:CASE, "case"], [false, false]]
535
+ end
536
+
537
+ it "should correctly match strings" do
538
+ names = %w{this is a bunch of names}
539
+ types = %w{Many Different Words A Word}
540
+ words = %w{differently Cased words A a}
541
+
542
+ names.each { |t|
543
+ @lexer.string = t
544
+ @lexer.fullscan.should == [[:NAME,t],[false,false]]
545
+ }
546
+ types.each { |t|
547
+ @lexer.string = t
548
+ @lexer.fullscan.should == [[:CLASSREF,t],[false,false]]
549
+ }
550
+ end
551
+
552
+ it "should correctly parse names with numerals" do
553
+ string = %w{1name name1 11names names11}
554
+
555
+ string.each { |t|
556
+ @lexer.string = t
557
+ @lexer.fullscan.should == [[:NAME,t],[false,false]]
558
+ }
559
+ end
560
+
561
+ it "should correctly parse empty strings" do
562
+ bit = '$var = ""'
563
+
564
+ @lexer.string = bit
565
+
566
+ lambda { @lexer.fullscan }.should_not raise_error
567
+ end
568
+
569
+ it "should correctly parse virtual resources" do
570
+ string = "@type {"
571
+
572
+ @lexer.string = string
573
+
574
+ @lexer.fullscan.should == [[:AT, "@"], [:NAME, "type"], [:LBRACE, "{"], [false,false]]
575
+ end
576
+
577
+ it "should correctly deal with namespaces" do
578
+ @lexer.string = %{class myclass}
579
+
580
+ @lexer.fullscan
581
+
582
+ @lexer.namespace.should == "myclass"
583
+
584
+ @lexer.namepop
585
+
586
+ @lexer.namespace.should == ""
587
+
588
+ @lexer.string = "class base { class sub { class more"
589
+
590
+ @lexer.fullscan
591
+
592
+ @lexer.namespace.should == "base::sub::more"
593
+
594
+ @lexer.namepop
595
+
596
+ @lexer.namespace.should == "base::sub"
597
+ end
598
+
599
+ it "should correctly handle fully qualified names" do
600
+ @lexer.string = "class base { class sub::more {"
601
+
602
+ @lexer.fullscan
603
+
604
+ @lexer.namespace.should == "base::sub::more"
605
+
606
+ @lexer.namepop
607
+
608
+ @lexer.namespace.should == "base"
609
+ end
610
+
611
+ it "should correctly lex variables" do
612
+ ["$variable", "$::variable", "$qualified::variable", "$further::qualified::variable"].each do |string|
613
+ @lexer.string = string
614
+
615
+ @lexer.scan do |t, s|
616
+ t.should == :VARIABLE
617
+ string.sub(/^\$/, '').should == s
618
+ break
619
+ end
620
+ end
621
+ end
622
+
623
+ # #774
624
+ it "should correctly parse the CLASSREF token" do
625
+ string = ["Foo", "::Foo","Foo::Bar","::Foo::Bar"]
626
+
627
+ string.each do |foo|
628
+ @lexer.string = foo
629
+ @lexer.fullscan[0].should == [:CLASSREF, foo]
630
+ end
631
+ end
632
+
633
+ end
634
+
635
+ require 'puppettest/support/utils'
636
+ describe "Puppet::Parser::Lexer in the old tests when lexing example files" do
637
+ extend PuppetTest
638
+ extend PuppetTest::Support::Utils
639
+ textfiles() do |file|
640
+ it "should correctly lex #{file}" do
641
+ lexer = Puppet::Parser::Lexer.new()
642
+ lexer.file = file
643
+ lambda { lexer.fullscan() }.should_not raise_error
644
+ end
645
+ end
646
+ end