puppet 0.23.2 → 0.24.0

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 (629) hide show
  1. data/CHANGELOG +112 -1
  2. data/README +1 -1
  3. data/Rakefile +1 -2
  4. data/bin/filebucket +2 -3
  5. data/bin/puppet +55 -39
  6. data/bin/puppetca +20 -11
  7. data/bin/puppetd +30 -31
  8. data/bin/puppetdoc +27 -28
  9. data/bin/puppetmasterd +24 -42
  10. data/bin/puppetrun +3 -4
  11. data/bin/ralsh +5 -7
  12. data/conf/redhat/puppet.spec +4 -1
  13. data/conf/solaris/smf/svc-puppetd +1 -1
  14. data/conf/solaris/smf/svc-puppetmasterd +1 -1
  15. data/examples/code/allatonce +1 -1
  16. data/examples/code/assignments +1 -1
  17. data/examples/code/components +1 -1
  18. data/examples/code/file.bl +1 -1
  19. data/examples/code/filedefaults +1 -1
  20. data/examples/code/fileparsing +1 -1
  21. data/examples/code/filerecursion +1 -1
  22. data/examples/code/functions +1 -1
  23. data/examples/code/groups +1 -1
  24. data/examples/code/head +1 -1
  25. data/examples/code/importing +1 -1
  26. data/examples/code/modules/sample-module.pp +10 -0
  27. data/examples/code/modules/sample-module/README.txt +17 -0
  28. data/examples/code/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +36 -0
  29. data/examples/code/modules/sample-module/manifests/init.pp +12 -0
  30. data/examples/code/modules/sample-module/templates/sample.erb +5 -0
  31. data/examples/code/nodes +1 -1
  32. data/examples/code/one +1 -1
  33. data/examples/code/relationships +1 -1
  34. data/examples/code/selectors +1 -1
  35. data/examples/code/simpletests +1 -1
  36. data/examples/root/etc/init.d/sleeper +1 -1
  37. data/examples/root/etc/puppet/fileserver.conf +1 -1
  38. data/ext/ldap/puppet.schema +1 -1
  39. data/ext/module_puppet +30 -21
  40. data/ext/puppet-test +3 -3
  41. data/ext/vim/filetype.vim +1 -1
  42. data/install.rb +1 -2
  43. data/lib/puppet.rb +20 -19
  44. data/lib/puppet/checksum.rb +57 -0
  45. data/lib/puppet/config_stores/rest.rb +1 -1
  46. data/lib/puppet/daemon.rb +0 -1
  47. data/lib/puppet/{configuration.rb → defaults.rb} +56 -23
  48. data/lib/puppet/dsl.rb +22 -116
  49. data/lib/puppet/error.rb +0 -9
  50. data/lib/puppet/event.rb +0 -1
  51. data/lib/puppet/external/gratr/rdot.rb +0 -1
  52. data/lib/puppet/external/lock.rb +0 -1
  53. data/lib/puppet/feature/base.rb +3 -2
  54. data/lib/puppet/feature/rails.rb +0 -1
  55. data/lib/puppet/file_serving.rb +7 -0
  56. data/lib/puppet/file_serving/configuration.rb +129 -0
  57. data/lib/puppet/file_serving/configuration/parser.rb +124 -0
  58. data/lib/puppet/file_serving/content.rb +34 -0
  59. data/lib/puppet/file_serving/file_base.rb +63 -0
  60. data/lib/puppet/file_serving/fileset.rb +138 -0
  61. data/lib/puppet/file_serving/indirection_hooks.rb +44 -0
  62. data/lib/puppet/file_serving/metadata.rb +69 -0
  63. data/lib/puppet/file_serving/mount.rb +186 -0
  64. data/lib/puppet/file_serving/terminus_helper.rb +19 -0
  65. data/lib/puppet/indirector.rb +68 -0
  66. data/lib/puppet/indirector/catalog/compiler.rb +173 -0
  67. data/lib/puppet/indirector/catalog/yaml.rb +24 -0
  68. data/lib/puppet/indirector/checksum/file.rb +33 -0
  69. data/lib/puppet/indirector/code.rb +6 -0
  70. data/lib/puppet/indirector/direct_file_server.rb +27 -0
  71. data/lib/puppet/indirector/exec.rb +57 -0
  72. data/lib/puppet/indirector/facts/facter.rb +65 -0
  73. data/lib/puppet/indirector/facts/memory.rb +9 -0
  74. data/lib/puppet/indirector/facts/yaml.rb +7 -0
  75. data/lib/puppet/indirector/file.rb +54 -0
  76. data/lib/puppet/indirector/file_content.rb +5 -0
  77. data/lib/puppet/indirector/file_content/file.rb +11 -0
  78. data/lib/puppet/indirector/file_content/file_server.rb +11 -0
  79. data/lib/puppet/indirector/file_content/modules.rb +11 -0
  80. data/lib/puppet/indirector/file_content/rest.rb +12 -0
  81. data/lib/puppet/indirector/file_metadata.rb +5 -0
  82. data/lib/puppet/indirector/file_metadata/file.rb +26 -0
  83. data/lib/puppet/indirector/file_metadata/file_server.rb +11 -0
  84. data/lib/puppet/indirector/file_metadata/modules.rb +17 -0
  85. data/lib/puppet/indirector/file_metadata/rest.rb +12 -0
  86. data/lib/puppet/indirector/file_server.rb +56 -0
  87. data/lib/puppet/indirector/indirection.rb +237 -0
  88. data/lib/puppet/indirector/ldap.rb +90 -0
  89. data/lib/puppet/indirector/memory.rb +21 -0
  90. data/lib/puppet/indirector/module_files.rb +82 -0
  91. data/lib/puppet/indirector/node/exec.rb +52 -0
  92. data/lib/puppet/indirector/node/ldap.rb +120 -0
  93. data/lib/puppet/indirector/node/memory.rb +10 -0
  94. data/lib/puppet/indirector/node/plain.rb +19 -0
  95. data/lib/puppet/indirector/node/rest.rb +7 -0
  96. data/lib/puppet/indirector/node/yaml.rb +7 -0
  97. data/lib/puppet/indirector/plain.rb +9 -0
  98. data/lib/puppet/indirector/report/processor.rb +50 -0
  99. data/lib/puppet/indirector/rest.rb +8 -0
  100. data/lib/puppet/indirector/ssl_rsa.rb +5 -0
  101. data/lib/puppet/indirector/ssl_rsa/file.rb +33 -0
  102. data/lib/puppet/indirector/terminus.rb +178 -0
  103. data/lib/puppet/indirector/yaml.rb +57 -0
  104. data/lib/puppet/metatype/attributes.rb +3 -3
  105. data/lib/puppet/metatype/closure.rb +0 -66
  106. data/lib/puppet/metatype/container.rb +0 -9
  107. data/lib/puppet/metatype/evaluation.rb +10 -2
  108. data/lib/puppet/metatype/instances.rb +16 -30
  109. data/lib/puppet/metatype/manager.rb +1 -2
  110. data/lib/puppet/metatype/metaparams.rb +27 -21
  111. data/lib/puppet/metatype/providers.rb +3 -2
  112. data/lib/puppet/metatype/relationships.rb +1 -2
  113. data/lib/puppet/metatype/schedules.rb +0 -1
  114. data/lib/puppet/metatype/tags.rb +0 -1
  115. data/lib/puppet/module.rb +60 -32
  116. data/lib/puppet/network/authconfig.rb +0 -1
  117. data/lib/puppet/network/authorization.rb +0 -1
  118. data/lib/puppet/network/authstore.rb +0 -1
  119. data/lib/puppet/network/client.rb +13 -4
  120. data/lib/puppet/network/client/ca.rb +4 -5
  121. data/lib/puppet/network/client/dipper.rb +0 -1
  122. data/lib/puppet/network/client/file.rb +0 -1
  123. data/lib/puppet/network/client/master.rb +127 -235
  124. data/lib/puppet/network/client/proxy.rb +0 -1
  125. data/lib/puppet/network/client/report.rb +0 -1
  126. data/lib/puppet/network/client/resource.rb +0 -1
  127. data/lib/puppet/network/client/runner.rb +0 -1
  128. data/lib/puppet/network/client/status.rb +0 -1
  129. data/lib/puppet/network/client_request.rb +0 -1
  130. data/lib/puppet/network/handler.rb +5 -2
  131. data/lib/puppet/network/handler/ca.rb +1 -2
  132. data/lib/puppet/network/handler/configuration.rb +184 -0
  133. data/lib/puppet/network/handler/filebucket.rb +1 -2
  134. data/lib/puppet/network/handler/fileserver.rb +279 -107
  135. data/lib/puppet/network/handler/master.rb +57 -152
  136. data/lib/puppet/network/handler/report.rb +6 -65
  137. data/lib/puppet/network/handler/resource.rb +5 -13
  138. data/lib/puppet/network/handler/runner.rb +3 -4
  139. data/lib/puppet/network/handler/status.rb +0 -1
  140. data/lib/puppet/network/http.rb +13 -0
  141. data/lib/puppet/network/http/handler.rb +109 -0
  142. data/lib/puppet/network/http/mongrel.rb +54 -0
  143. data/lib/puppet/network/http/mongrel/rest.rb +37 -0
  144. data/lib/puppet/network/http/mongrel/xmlrpc.rb +4 -0
  145. data/lib/puppet/network/http/webrick.rb +51 -0
  146. data/lib/puppet/network/http/webrick/rest.rb +41 -0
  147. data/lib/puppet/network/http/webrick/xmlrpc.rb +4 -0
  148. data/lib/puppet/network/http_server.rb +3 -0
  149. data/lib/puppet/network/{server → http_server}/mongrel.rb +11 -5
  150. data/lib/puppet/network/{server → http_server}/webrick.rb +9 -5
  151. data/lib/puppet/network/rest_controller.rb +2 -0
  152. data/lib/puppet/network/rights.rb +0 -1
  153. data/lib/puppet/network/server.rb +63 -3
  154. data/lib/puppet/network/xmlrpc/client.rb +90 -23
  155. data/lib/puppet/network/xmlrpc/processor.rb +0 -1
  156. data/lib/puppet/network/xmlrpc/server.rb +0 -1
  157. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +0 -1
  158. data/lib/puppet/node.rb +165 -0
  159. data/lib/puppet/node/catalog.rb +480 -0
  160. data/lib/puppet/node/environment.rb +46 -0
  161. data/lib/puppet/node/facts.rb +36 -0
  162. data/lib/puppet/parameter.rb +34 -28
  163. data/lib/puppet/parser/ast.rb +0 -1
  164. data/lib/puppet/parser/ast/astarray.rb +30 -53
  165. data/lib/puppet/parser/ast/branch.rb +0 -10
  166. data/lib/puppet/parser/ast/caseopt.rb +0 -11
  167. data/lib/puppet/parser/ast/casestatement.rb +0 -12
  168. data/lib/puppet/parser/ast/collection.rb +1 -3
  169. data/lib/puppet/parser/ast/collexpr.rb +0 -2
  170. data/lib/puppet/parser/ast/{component.rb → definition.rb} +58 -72
  171. data/lib/puppet/parser/ast/else.rb +0 -10
  172. data/lib/puppet/parser/ast/function.rb +0 -2
  173. data/lib/puppet/parser/ast/hostclass.rb +21 -19
  174. data/lib/puppet/parser/ast/ifstatement.rb +0 -13
  175. data/lib/puppet/parser/ast/leaf.rb +0 -8
  176. data/lib/puppet/parser/ast/node.rb +13 -10
  177. data/lib/puppet/parser/ast/resource.rb +75 -0
  178. data/lib/puppet/parser/ast/{resourcedefaults.rb → resource_defaults.rb} +4 -20
  179. data/lib/puppet/parser/ast/{resourceoverride.rb → resource_override.rb} +3 -5
  180. data/lib/puppet/parser/ast/resource_reference.rb +66 -0
  181. data/lib/puppet/parser/ast/resourceparam.rb +0 -14
  182. data/lib/puppet/parser/ast/selector.rb +0 -10
  183. data/lib/puppet/parser/ast/tag.rb +0 -2
  184. data/lib/puppet/parser/ast/vardef.rb +0 -14
  185. data/lib/puppet/parser/collector.rb +83 -101
  186. data/lib/puppet/parser/compile.rb +509 -0
  187. data/lib/puppet/parser/functions.rb +10 -10
  188. data/lib/puppet/parser/interpreter.rb +44 -662
  189. data/lib/puppet/parser/lexer.rb +1 -3
  190. data/lib/puppet/parser/parser.rb +674 -701
  191. data/lib/puppet/parser/parser_support.rb +33 -24
  192. data/lib/puppet/parser/resource.rb +219 -162
  193. data/lib/puppet/parser/resource/param.rb +1 -2
  194. data/lib/puppet/parser/resource/reference.rb +24 -16
  195. data/lib/puppet/parser/scope.rb +48 -459
  196. data/lib/puppet/parser/templatewrapper.rb +4 -5
  197. data/lib/puppet/pgraph.rb +10 -13
  198. data/lib/puppet/property.rb +25 -41
  199. data/lib/puppet/propertychange.rb +0 -2
  200. data/lib/puppet/provider.rb +15 -11
  201. data/lib/puppet/provider/cron/crontab.rb +6 -7
  202. data/lib/puppet/provider/group/groupadd.rb +0 -1
  203. data/lib/puppet/provider/group/netinfo.rb +0 -1
  204. data/lib/puppet/provider/group/pw.rb +0 -1
  205. data/lib/puppet/provider/host/netinfo.rb +0 -1
  206. data/lib/puppet/provider/host/parsed.rb +0 -1
  207. data/lib/puppet/provider/interface/redhat.rb +90 -91
  208. data/lib/puppet/provider/interface/sunos.rb +98 -81
  209. data/lib/puppet/provider/mailalias/aliases.rb +0 -1
  210. data/lib/puppet/provider/maillist/mailman.rb +2 -3
  211. data/lib/puppet/provider/mount.rb +10 -9
  212. data/lib/puppet/provider/mount/netinfo.rb +0 -1
  213. data/lib/puppet/provider/mount/parsed.rb +0 -1
  214. data/lib/puppet/provider/nameservice.rb +0 -1
  215. data/lib/puppet/provider/nameservice/netinfo.rb +0 -1
  216. data/lib/puppet/provider/nameservice/objectadd.rb +0 -1
  217. data/lib/puppet/provider/nameservice/pw.rb +0 -1
  218. data/lib/puppet/provider/package.rb +0 -2
  219. data/lib/puppet/provider/package/appdmg.rb +0 -1
  220. data/lib/puppet/provider/package/apple.rb +0 -1
  221. data/lib/puppet/provider/package/apt.rb +0 -1
  222. data/lib/puppet/provider/package/aptitude.rb +0 -1
  223. data/lib/puppet/provider/package/aptrpm.rb +0 -1
  224. data/lib/puppet/provider/package/blastwave.rb +0 -1
  225. data/lib/puppet/provider/package/darwinport.rb +0 -1
  226. data/lib/puppet/provider/package/dpkg.rb +9 -1
  227. data/lib/puppet/provider/package/fink.rb +0 -1
  228. data/lib/puppet/provider/package/freebsd.rb +0 -1
  229. data/lib/puppet/provider/package/gem.rb +0 -1
  230. data/lib/puppet/provider/package/openbsd.rb +1 -2
  231. data/lib/puppet/provider/package/pkgdmg.rb +14 -15
  232. data/lib/puppet/provider/package/portage.rb +6 -7
  233. data/lib/puppet/provider/package/ports.rb +1 -4
  234. data/lib/puppet/provider/package/rpm.rb +31 -45
  235. data/lib/puppet/provider/package/sun.rb +0 -3
  236. data/lib/puppet/provider/package/sunfreeware.rb +0 -1
  237. data/lib/puppet/provider/package/up2date.rb +0 -1
  238. data/lib/puppet/provider/package/urpmi.rb +0 -1
  239. data/lib/puppet/provider/package/yum.rb +45 -14
  240. data/lib/puppet/provider/package/yumhelper.py +37 -0
  241. data/lib/puppet/provider/parsedfile.rb +2 -3
  242. data/lib/puppet/provider/port/parsed.rb +0 -1
  243. data/lib/puppet/provider/service/base.rb +4 -1
  244. data/lib/puppet/provider/service/debian.rb +5 -2
  245. data/lib/puppet/provider/service/freebsd.rb +51 -0
  246. data/lib/puppet/provider/service/init.rb +16 -40
  247. data/lib/puppet/provider/service/redhat.rb +1 -6
  248. data/lib/puppet/provider/service/smf.rb +0 -1
  249. data/lib/puppet/provider/sshkey/parsed.rb +0 -1
  250. data/lib/puppet/provider/user/netinfo.rb +0 -1
  251. data/lib/puppet/provider/user/pw.rb +0 -1
  252. data/lib/puppet/provider/user/useradd.rb +0 -1
  253. data/lib/puppet/provider/zone/solaris.rb +0 -1
  254. data/lib/puppet/rails.rb +35 -30
  255. data/lib/puppet/rails/database/schema.rb +0 -1
  256. data/lib/puppet/rails/host.rb +6 -15
  257. data/lib/puppet/rails/param_name.rb +1 -2
  258. data/lib/puppet/rails/param_value.rb +0 -1
  259. data/lib/puppet/rails/puppet_class.rb +0 -1
  260. data/lib/puppet/rails/resource.rb +3 -5
  261. data/lib/puppet/reference/configuration.rb +12 -6
  262. data/lib/puppet/reference/indirection.rb +34 -0
  263. data/lib/puppet/reference/node_source.rb +9 -0
  264. data/lib/puppet/relationship.rb +10 -8
  265. data/lib/puppet/reports.rb +51 -0
  266. data/lib/puppet/reports/log.rb +2 -3
  267. data/lib/puppet/reports/rrdgraph.rb +2 -5
  268. data/lib/puppet/reports/store.rb +6 -7
  269. data/lib/puppet/reports/tagmail.rb +2 -3
  270. data/lib/puppet/resource_reference.rb +79 -0
  271. data/lib/puppet/simple_graph.rb +251 -0
  272. data/lib/puppet/sslcertificates.rb +19 -15
  273. data/lib/puppet/sslcertificates/ca.rb +56 -15
  274. data/lib/puppet/sslcertificates/certificate.rb +0 -1
  275. data/lib/puppet/sslcertificates/inventory.rb +2 -6
  276. data/lib/puppet/sslcertificates/monkey_patch.rb +6 -0
  277. data/lib/puppet/sslcertificates/support.rb +4 -5
  278. data/lib/puppet/transaction.rb +93 -96
  279. data/lib/puppet/transaction/report.rb +5 -1
  280. data/lib/puppet/transportable.rb +79 -125
  281. data/lib/puppet/type.rb +44 -10
  282. data/lib/puppet/type/component.rb +25 -110
  283. data/lib/puppet/type/cron.rb +1 -2
  284. data/lib/puppet/type/exec.rb +19 -13
  285. data/lib/puppet/type/group.rb +0 -1
  286. data/lib/puppet/type/host.rb +0 -1
  287. data/lib/puppet/type/interface.rb +6 -3
  288. data/lib/puppet/type/k5login.rb +87 -0
  289. data/lib/puppet/type/mailalias.rb +0 -1
  290. data/lib/puppet/type/maillist.rb +0 -1
  291. data/lib/puppet/type/mount.rb +7 -13
  292. data/lib/puppet/type/notify.rb +0 -1
  293. data/lib/puppet/type/package.rb +7 -63
  294. data/lib/puppet/type/pfile.rb +25 -32
  295. data/lib/puppet/type/pfile/checksum.rb +0 -1
  296. data/lib/puppet/type/pfile/content.rb +18 -3
  297. data/lib/puppet/type/pfile/ensure.rb +5 -6
  298. data/lib/puppet/type/pfile/group.rb +4 -1
  299. data/lib/puppet/type/pfile/mode.rb +0 -1
  300. data/lib/puppet/type/pfile/owner.rb +6 -9
  301. data/lib/puppet/type/pfile/source.rb +28 -11
  302. data/lib/puppet/type/pfile/target.rb +2 -1
  303. data/lib/puppet/type/pfile/type.rb +0 -1
  304. data/lib/puppet/type/pfilebucket.rb +0 -1
  305. data/lib/puppet/type/port.rb +0 -1
  306. data/lib/puppet/type/resources.rb +0 -1
  307. data/lib/puppet/type/schedule.rb +17 -15
  308. data/lib/puppet/type/service.rb +23 -159
  309. data/lib/puppet/type/sshkey.rb +0 -1
  310. data/lib/puppet/type/tidy.rb +15 -7
  311. data/lib/puppet/type/user.rb +0 -1
  312. data/lib/puppet/type/zone.rb +0 -1
  313. data/lib/puppet/util.rb +1 -2
  314. data/lib/puppet/util/autoload.rb +21 -23
  315. data/lib/puppet/util/checksums.rb +37 -0
  316. data/lib/puppet/util/classgen.rb +0 -1
  317. data/lib/puppet/util/diff.rb +71 -0
  318. data/lib/puppet/util/docs.rb +8 -2
  319. data/lib/puppet/util/errors.rb +0 -1
  320. data/lib/puppet/util/execution.rb +0 -1
  321. data/lib/puppet/util/fact_store.rb +0 -1
  322. data/lib/puppet/util/feature.rb +31 -22
  323. data/lib/puppet/util/fileparsing.rb +3 -2
  324. data/lib/puppet/util/filetype.rb +30 -12
  325. data/lib/puppet/util/graph.rb +0 -1
  326. data/lib/puppet/util/inifile.rb +0 -1
  327. data/lib/puppet/util/instance_loader.rb +11 -4
  328. data/lib/puppet/util/loadedfile.rb +0 -1
  329. data/lib/puppet/util/log.rb +0 -1
  330. data/lib/puppet/util/log_paths.rb +0 -1
  331. data/lib/puppet/util/logging.rb +0 -1
  332. data/lib/puppet/util/metaid.rb +0 -1
  333. data/lib/puppet/util/methodhelper.rb +0 -2
  334. data/lib/puppet/util/metric.rb +1 -2
  335. data/lib/puppet/util/plist.rb +0 -1
  336. data/lib/puppet/util/plist/generator.rb +0 -1
  337. data/lib/puppet/util/plist/parser.rb +0 -1
  338. data/lib/puppet/util/posix.rb +7 -1
  339. data/lib/puppet/util/provider_features.rb +11 -12
  340. data/lib/puppet/util/rails/collection_merger.rb +0 -1
  341. data/lib/puppet/util/reference.rb +2 -3
  342. data/lib/puppet/util/{config.rb → settings.rb} +424 -300
  343. data/lib/puppet/util/storage.rb +1 -3
  344. data/lib/puppet/util/subclass_loader.rb +0 -1
  345. data/lib/puppet/util/suidmanager.rb +25 -42
  346. data/lib/puppet/util/uri_helper.rb +22 -0
  347. data/lib/puppet/util/variables.rb +0 -1
  348. data/lib/puppet/util/warnings.rb +0 -1
  349. data/test/Rakefile +1 -1
  350. data/test/certmgr/ca.rb +8 -2
  351. data/test/certmgr/certmgr.rb +14 -6
  352. data/test/certmgr/inventory.rb +18 -30
  353. data/test/certmgr/support.rb +3 -2
  354. data/test/executables/filebucket.rb +1 -2
  355. data/test/executables/puppetbin.rb +1 -2
  356. data/test/executables/puppetca.rb +7 -2
  357. data/test/executables/puppetd.rb +23 -29
  358. data/test/executables/puppetmasterd.rb +1 -2
  359. data/test/executables/puppetmodule.rb +1 -2
  360. data/test/language/ast.rb +24 -29
  361. data/test/language/ast/casestatement.rb +1 -2
  362. data/test/language/ast/definition.rb +166 -0
  363. data/test/language/ast/hostclass.rb +50 -29
  364. data/test/language/ast/resource.rb +59 -0
  365. data/test/language/ast/{resourceref.rb → resource_reference.rb} +30 -20
  366. data/test/language/ast/selector.rb +1 -2
  367. data/test/language/ast/variable.rb +1 -2
  368. data/test/language/compile.rb +569 -0
  369. data/test/language/functions.rb +57 -76
  370. data/test/language/lexer.rb +20 -3
  371. data/test/language/parser.rb +45 -33
  372. data/test/language/resource.rb +275 -308
  373. data/test/language/scope.rb +135 -410
  374. data/test/language/snippets.rb +19 -41
  375. data/test/language/transportable.rb +8 -29
  376. data/test/lib/mocha/auto_verify.rb +6 -6
  377. data/test/lib/mocha/deprecation.rb +22 -0
  378. data/test/lib/mocha/exception_raiser.rb +17 -0
  379. data/test/lib/mocha/expectation.rb +167 -84
  380. data/test/lib/mocha/infinite_range.rb +4 -6
  381. data/test/lib/mocha/inspect.rb +3 -1
  382. data/test/lib/mocha/is_a.rb +9 -0
  383. data/test/lib/mocha/missing_expectation.rb +27 -0
  384. data/test/lib/mocha/mock.rb +192 -5
  385. data/test/lib/mocha/multiple_yields.rb +20 -0
  386. data/test/lib/mocha/no_yields.rb +11 -0
  387. data/test/lib/mocha/object.rb +11 -1
  388. data/test/lib/mocha/parameter_matchers.rb +9 -0
  389. data/test/lib/mocha/parameter_matchers/all_of.rb +39 -0
  390. data/test/lib/mocha/parameter_matchers/any_of.rb +44 -0
  391. data/test/lib/mocha/parameter_matchers/anything.rb +30 -0
  392. data/test/lib/mocha/parameter_matchers/has_entry.rb +39 -0
  393. data/test/lib/mocha/parameter_matchers/has_key.rb +39 -0
  394. data/test/lib/mocha/parameter_matchers/has_value.rb +39 -0
  395. data/test/lib/mocha/parameter_matchers/includes.rb +37 -0
  396. data/test/lib/mocha/return_values.rb +31 -0
  397. data/test/lib/mocha/single_return_value.rb +24 -0
  398. data/test/lib/mocha/single_yield.rb +18 -0
  399. data/test/lib/mocha/standalone.rb +2 -0
  400. data/test/lib/mocha/stub.rb +18 -0
  401. data/test/lib/mocha/test_case_adapter.rb +3 -3
  402. data/test/lib/mocha/yield_parameters.rb +31 -0
  403. data/test/lib/puppettest.rb +38 -20
  404. data/test/lib/puppettest/certificates.rb +0 -1
  405. data/test/lib/puppettest/exetest.rb +0 -1
  406. data/test/lib/puppettest/fakes.rb +0 -1
  407. data/test/lib/puppettest/fileparsing.rb +8 -15
  408. data/test/lib/puppettest/filetesting.rb +0 -1
  409. data/test/lib/puppettest/parsertesting.rb +37 -23
  410. data/test/lib/puppettest/railstesting.rb +3 -6
  411. data/test/lib/puppettest/reporttesting.rb +0 -1
  412. data/test/lib/puppettest/resourcetesting.rb +6 -34
  413. data/test/lib/puppettest/runnable_test.rb +30 -0
  414. data/test/lib/puppettest/servertest.rb +2 -3
  415. data/test/lib/puppettest/support/assertions.rb +13 -41
  416. data/test/lib/puppettest/support/collection.rb +0 -1
  417. data/test/lib/puppettest/support/helpers.rb +0 -1
  418. data/test/lib/puppettest/support/resources.rb +17 -17
  419. data/test/lib/puppettest/support/utils.rb +45 -27
  420. data/test/lib/puppettest/testcase.rb +2 -21
  421. data/test/lib/rake/puppet_test_loader.rb +0 -1
  422. data/test/lib/rake/puppet_testtask.rb +0 -1
  423. data/test/network/authconfig.rb +1 -2
  424. data/test/network/authorization.rb +1 -2
  425. data/test/network/authstore.rb +1 -2
  426. data/test/network/client/ca.rb +12 -7
  427. data/test/network/client/client.rb +17 -22
  428. data/test/network/client/dipper.rb +1 -2
  429. data/test/network/client/master.rb +70 -184
  430. data/test/network/client/resource.rb +9 -2
  431. data/test/network/client_request.rb +1 -2
  432. data/test/network/daemon.rb +1 -2
  433. data/test/network/handler/bucket.rb +2 -31
  434. data/test/network/handler/ca.rb +9 -3
  435. data/test/network/handler/configuration.rb +160 -0
  436. data/test/network/handler/fileserver.rb +24 -5
  437. data/test/network/handler/handler.rb +1 -2
  438. data/test/network/handler/master.rb +38 -243
  439. data/test/network/handler/report.rb +2 -104
  440. data/test/network/handler/resource.rb +5 -3
  441. data/test/network/handler/runner.rb +22 -60
  442. data/test/network/rights.rb +1 -2
  443. data/test/network/server/mongrel_test.rb +2 -3
  444. data/test/network/server/webrick.rb +17 -11
  445. data/test/network/xmlrpc/client.rb +27 -12
  446. data/test/network/xmlrpc/processor.rb +3 -4
  447. data/test/network/xmlrpc/server.rb +1 -2
  448. data/test/network/xmlrpc/webrick_servlet.rb +8 -2
  449. data/test/other/dsl.rb +2 -4
  450. data/test/other/events.rb +14 -56
  451. data/test/other/overrides.rb +3 -6
  452. data/test/other/propertychange.rb +1 -2
  453. data/test/other/provider.rb +1 -2
  454. data/test/other/puppet.rb +1 -2
  455. data/test/other/relationships.rb +15 -17
  456. data/test/other/report.rb +14 -20
  457. data/test/other/transactions.rb +109 -192
  458. data/test/puppet/conffiles.rb +3 -5
  459. data/test/puppet/defaults.rb +1 -28
  460. data/test/puppet/errortest.rb +1 -2
  461. data/test/puppet/tc_suidmanager.rb +77 -63
  462. data/test/rails/ast.rb +4 -4
  463. data/test/rails/configuration.rb +71 -0
  464. data/test/rails/host.rb +19 -30
  465. data/test/rails/rails.rb +1 -2
  466. data/test/rails/railsparameter.rb +3 -4
  467. data/test/rails/railsresource.rb +6 -5
  468. data/test/ral/manager/attributes.rb +1 -2
  469. data/test/ral/manager/instances.rb +3 -3
  470. data/test/ral/manager/manager.rb +1 -2
  471. data/test/ral/manager/provider.rb +1 -2
  472. data/test/ral/manager/type.rb +89 -93
  473. data/test/ral/providers/cron/crontab.rb +9 -11
  474. data/test/ral/providers/group.rb +1 -2
  475. data/test/ral/providers/host/netinfo.rb +1 -2
  476. data/test/ral/providers/host/parsed.rb +1 -2
  477. data/test/ral/providers/mailalias/aliases.rb +1 -2
  478. data/test/ral/providers/mount/netinfo.rb +1 -2
  479. data/test/ral/providers/nameservice.rb +1 -2
  480. data/test/ral/providers/package.rb +5 -4
  481. data/test/ral/providers/package/apt.rb +0 -1
  482. data/test/ral/providers/package/aptrpm.rb +0 -1
  483. data/test/ral/providers/parsedfile.rb +1 -2
  484. data/test/ral/providers/port/parsed.rb +1 -2
  485. data/test/ral/providers/provider.rb +10 -5
  486. data/test/ral/providers/service/base.rb +1 -2
  487. data/test/ral/providers/service/debian.rb +58 -0
  488. data/test/ral/providers/sshkey/parsed.rb +1 -2
  489. data/test/ral/providers/user.rb +3 -2
  490. data/test/ral/providers/user/useradd.rb +0 -1
  491. data/test/ral/types/basic.rb +4 -9
  492. data/test/ral/types/cron.rb +6 -12
  493. data/test/ral/types/exec.rb +6 -7
  494. data/test/ral/types/file.rb +35 -14
  495. data/test/ral/types/file/target.rb +6 -5
  496. data/test/ral/types/filebucket.rb +3 -2
  497. data/test/ral/types/fileignoresource.rb +10 -42
  498. data/test/ral/types/filesources.rb +21 -60
  499. data/test/ral/types/group.rb +3 -3
  500. data/test/ral/types/host.rb +6 -3
  501. data/test/ral/types/mailalias.rb +1 -2
  502. data/test/ral/types/parameter.rb +5 -3
  503. data/test/ral/types/port.rb +1 -2
  504. data/test/ral/types/property.rb +3 -3
  505. data/test/ral/types/resources.rb +1 -2
  506. data/test/ral/types/service.rb +5 -3
  507. data/test/ral/types/sshkey.rb +5 -3
  508. data/test/ral/types/tidy.rb +63 -3
  509. data/test/ral/types/user.rb +10 -11
  510. data/test/ral/types/yumrepo.rb +1 -1
  511. data/test/ral/types/zone.rb +1 -2
  512. data/test/util/autoload.rb +23 -27
  513. data/test/util/classgen.rb +1 -2
  514. data/test/util/execution.rb +1 -2
  515. data/test/util/features.rb +1 -3
  516. data/test/util/fileparsing.rb +11 -3
  517. data/test/util/filetype.rb +1 -2
  518. data/test/util/inifile.rb +1 -1
  519. data/test/util/instance_loader.rb +5 -6
  520. data/test/util/loadedfile.rb +1 -2
  521. data/test/util/log.rb +1 -2
  522. data/test/util/metrics.rb +1 -2
  523. data/test/util/package.rb +1 -2
  524. data/test/util/posixtest.rb +1 -2
  525. data/test/util/{config.rb → settings.rb} +123 -265
  526. data/test/util/storage.rb +1 -2
  527. data/test/util/subclass_loader.rb +1 -2
  528. data/test/util/utiltest.rb +1 -111
  529. metadata +130 -112
  530. data/ext/tools/passwd2puppet +0 -45
  531. data/lib/puppet/fact_stores/yaml.rb +0 -42
  532. data/lib/puppet/network/handler/facts.rb +0 -70
  533. data/lib/puppet/parser/ast/resourcedef.rb +0 -222
  534. data/lib/puppet/parser/ast/resourceref.rb +0 -58
  535. data/test/language/ast/component.rb +0 -142
  536. data/test/language/collector.rb +0 -179
  537. data/test/language/interpreter.rb +0 -804
  538. data/test/language/node.rb +0 -126
  539. data/test/lib/mocha/mock_methods.rb +0 -122
  540. data/test/lib/puppettest/graph.rb +0 -41
  541. data/test/lib/spec.rb +0 -8
  542. data/test/lib/spec/callback.rb +0 -11
  543. data/test/lib/spec/callback/callback_container.rb +0 -60
  544. data/test/lib/spec/callback/extensions/module.rb +0 -24
  545. data/test/lib/spec/callback/extensions/object.rb +0 -37
  546. data/test/lib/spec/deprecated.rb +0 -3
  547. data/test/lib/spec/expectations.rb +0 -59
  548. data/test/lib/spec/expectations/differs/default.rb +0 -62
  549. data/test/lib/spec/expectations/errors.rb +0 -6
  550. data/test/lib/spec/expectations/extensions.rb +0 -3
  551. data/test/lib/spec/expectations/extensions/object.rb +0 -109
  552. data/test/lib/spec/expectations/extensions/proc.rb +0 -57
  553. data/test/lib/spec/expectations/extensions/string_and_symbol.rb +0 -17
  554. data/test/lib/spec/expectations/handler.rb +0 -47
  555. data/test/lib/spec/expectations/should.rb +0 -5
  556. data/test/lib/spec/expectations/should/base.rb +0 -64
  557. data/test/lib/spec/expectations/should/change.rb +0 -69
  558. data/test/lib/spec/expectations/should/have.rb +0 -128
  559. data/test/lib/spec/expectations/should/not.rb +0 -74
  560. data/test/lib/spec/expectations/should/should.rb +0 -81
  561. data/test/lib/spec/expectations/sugar.rb +0 -47
  562. data/test/lib/spec/matchers.rb +0 -160
  563. data/test/lib/spec/matchers/be.rb +0 -161
  564. data/test/lib/spec/matchers/be_close.rb +0 -37
  565. data/test/lib/spec/matchers/change.rb +0 -120
  566. data/test/lib/spec/matchers/eql.rb +0 -43
  567. data/test/lib/spec/matchers/equal.rb +0 -43
  568. data/test/lib/spec/matchers/has.rb +0 -44
  569. data/test/lib/spec/matchers/have.rb +0 -140
  570. data/test/lib/spec/matchers/include.rb +0 -50
  571. data/test/lib/spec/matchers/match.rb +0 -41
  572. data/test/lib/spec/matchers/raise_error.rb +0 -100
  573. data/test/lib/spec/matchers/respond_to.rb +0 -35
  574. data/test/lib/spec/matchers/satisfy.rb +0 -47
  575. data/test/lib/spec/matchers/throw_symbol.rb +0 -75
  576. data/test/lib/spec/mocks.rb +0 -232
  577. data/test/lib/spec/mocks/argument_expectation.rb +0 -132
  578. data/test/lib/spec/mocks/error_generator.rb +0 -85
  579. data/test/lib/spec/mocks/errors.rb +0 -10
  580. data/test/lib/spec/mocks/extensions/object.rb +0 -3
  581. data/test/lib/spec/mocks/message_expectation.rb +0 -231
  582. data/test/lib/spec/mocks/methods.rb +0 -40
  583. data/test/lib/spec/mocks/mock.rb +0 -26
  584. data/test/lib/spec/mocks/mock_handler.rb +0 -166
  585. data/test/lib/spec/mocks/order_group.rb +0 -29
  586. data/test/lib/spec/rake/spectask.rb +0 -173
  587. data/test/lib/spec/rake/verify_rcov.rb +0 -47
  588. data/test/lib/spec/runner.rb +0 -132
  589. data/test/lib/spec/runner/backtrace_tweaker.rb +0 -55
  590. data/test/lib/spec/runner/command_line.rb +0 -34
  591. data/test/lib/spec/runner/context.rb +0 -154
  592. data/test/lib/spec/runner/context_eval.rb +0 -142
  593. data/test/lib/spec/runner/context_runner.rb +0 -55
  594. data/test/lib/spec/runner/drb_command_line.rb +0 -21
  595. data/test/lib/spec/runner/execution_context.rb +0 -17
  596. data/test/lib/spec/runner/extensions/kernel.rb +0 -17
  597. data/test/lib/spec/runner/extensions/object.rb +0 -32
  598. data/test/lib/spec/runner/formatter.rb +0 -5
  599. data/test/lib/spec/runner/formatter/base_text_formatter.rb +0 -118
  600. data/test/lib/spec/runner/formatter/html_formatter.rb +0 -219
  601. data/test/lib/spec/runner/formatter/progress_bar_formatter.rb +0 -27
  602. data/test/lib/spec/runner/formatter/rdoc_formatter.rb +0 -22
  603. data/test/lib/spec/runner/formatter/specdoc_formatter.rb +0 -23
  604. data/test/lib/spec/runner/heckle_runner.rb +0 -71
  605. data/test/lib/spec/runner/heckle_runner_win.rb +0 -10
  606. data/test/lib/spec/runner/option_parser.rb +0 -224
  607. data/test/lib/spec/runner/reporter.rb +0 -105
  608. data/test/lib/spec/runner/spec_matcher.rb +0 -25
  609. data/test/lib/spec/runner/spec_parser.rb +0 -41
  610. data/test/lib/spec/runner/spec_should_raise_handler.rb +0 -74
  611. data/test/lib/spec/runner/specification.rb +0 -114
  612. data/test/lib/spec/translator.rb +0 -87
  613. data/test/lib/spec/version.rb +0 -30
  614. data/test/network/handler/facts.rb +0 -112
  615. data/test/other/pgraph.rb +0 -290
  616. data/test/other/relationship.rb +0 -74
  617. data/test/puppet/modules.rb +0 -59
  618. data/test/rails/collection.rb +0 -247
  619. data/test/rails/interpreter.rb +0 -91
  620. data/test/ral/providers/mount/parsed.rb +0 -251
  621. data/test/ral/providers/service.rb +0 -235
  622. data/test/ral/types/component.rb +0 -113
  623. data/test/ral/types/interface.rb +0 -40
  624. data/test/ral/types/mount.rb +0 -362
  625. data/test/ral/types/package.rb +0 -154
  626. data/test/ral/types/schedule.rb +0 -357
  627. data/test/tagging/tagging.rb +0 -170
  628. data/test/util/fact_store.rb +0 -67
  629. data/test/util/graph.rb +0 -108
@@ -1,179 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
-
5
- require 'puppettest'
6
- require 'puppettest/parsertesting'
7
- require 'puppettest/resourcetesting'
8
-
9
- class TestCollector < Test::Unit::TestCase
10
- include PuppetTest
11
- include PuppetTest::ParserTesting
12
- include PuppetTest::ResourceTesting
13
- Parser = Puppet::Parser
14
- AST = Parser::AST
15
-
16
- def setup
17
- super
18
- Puppet[:trace] = false
19
- @interp, @scope, @source = mkclassframing
20
- end
21
-
22
- # Test just collecting a specific resource. This is used by the 'realize'
23
- # function, and it's much faster than iterating over all of the resources.
24
- def test_collect_resource
25
- # Make a collector
26
- coll = nil
27
- assert_nothing_raised do
28
- coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :virtual)
29
- end
30
-
31
- # Now set the resource in the collector
32
- assert_nothing_raised do
33
- coll.resources = ["File[/tmp/virtual1]", "File[/tmp/virtual3]"]
34
- end
35
- @scope.newcollection(coll)
36
-
37
- # Evaluate the collector and make sure it doesn't fail with no resources
38
- # found yet
39
- assert_nothing_raised("Resource collection with no results failed") do
40
- assert_equal(false, coll.evaluate)
41
- end
42
-
43
- # Make a couple of virtual resources
44
- one = mkresource(:type => "file", :title => "/tmp/virtual1",
45
- :virtual => true, :params => {:owner => "root"})
46
- two = mkresource(:type => "file", :title => "/tmp/virtual2",
47
- :virtual => true, :params => {:owner => "root"})
48
- @scope.setresource one
49
- @scope.setresource two
50
-
51
- # Now run the collector again and make sure it finds our resource
52
- assert_nothing_raised do
53
- assert_equal([one], coll.evaluate, "did not find resource")
54
- end
55
-
56
- # And make sure the resource is no longer virtual
57
- assert(! one.virtual?,
58
- "Resource is still virtual")
59
-
60
- # But the other still is
61
- assert(two.virtual?,
62
- "Resource got realized")
63
-
64
- # Make sure that the collection is still there
65
- assert(@scope.collections.include?(coll), "collection was deleted too soon")
66
-
67
- # Now add our third resource
68
- three = mkresource(:type => "file", :title => "/tmp/virtual3",
69
- :virtual => true, :params => {:owner => "root"})
70
- @scope.setresource three
71
-
72
- # Run the collection
73
- assert_nothing_raised do
74
- assert_equal([three], coll.evaluate, "did not find resource")
75
- end
76
- assert(! three.virtual?, "three is still virtual")
77
-
78
- # And make sure that the collection got deleted from the scope's list
79
- assert(@scope.collections.empty?, "collection was not deleted")
80
- end
81
-
82
- def test_virtual
83
- # Make a virtual resource
84
- virtual = mkresource(:type => "file", :title => "/tmp/virtual",
85
- :virtual => true, :params => {:owner => "root"})
86
- @scope.setresource virtual
87
-
88
- # And a non-virtual
89
- real = mkresource(:type => "file", :title => "/tmp/real",
90
- :params => {:owner => "root"})
91
- @scope.setresource real
92
-
93
- # Now make a collector
94
- coll = nil
95
-
96
- # Make a fake query
97
- code = proc do |res|
98
- true
99
- end
100
- assert_nothing_raised do
101
- coll = Puppet::Parser::Collector.new(@scope, "file", nil, code, :virtual)
102
- end
103
-
104
- # Set it in our scope
105
- @scope.newcollection(coll)
106
-
107
- # Make sure it's in the collections
108
- assert(@scope.collections.include?(coll), "collection was not added")
109
-
110
- # And try to collect the virtual resources.
111
- ret = nil
112
- assert_nothing_raised do
113
- ret = coll.collect_virtual
114
- end
115
-
116
- assert_equal([virtual], ret)
117
-
118
- # Now make sure evaluate does the right thing.
119
- assert_nothing_raised do
120
- ret = coll.evaluate
121
- end
122
-
123
- # And make sure our virtual object is no longer virtual
124
- assert(! virtual.virtual?, "Virtual object did not get realized")
125
-
126
- # Now make a new collector of a different type and make sure it
127
- # finds nothing.
128
- assert_nothing_raised do
129
- coll = Puppet::Parser::Collector.new(@scope, "exec", nil, nil, :virtual)
130
- end
131
-
132
- # Remark this as virtual
133
- virtual.virtual = true
134
-
135
- assert_nothing_raised do
136
- ret = coll.evaluate
137
- end
138
-
139
- assert_equal(false, ret)
140
- end
141
-
142
- # Collections that specify resources should be deleted when they succeed,
143
- # but others should remain until the very end.
144
- def test_normal_collections_remain
145
- # Make a collector
146
- coll = nil
147
- assert_nothing_raised do
148
- coll = Puppet::Parser::Collector.new(@scope, "file", nil, nil, :virtual)
149
- end
150
-
151
- @scope.newcollection(coll)
152
-
153
- # run the collection and make sure it doesn't get deleted, since it
154
- # didn't return anything
155
- assert_nothing_raised do
156
- assert_equal(false, coll.evaluate,
157
- "Evaluate returned incorrect value")
158
- end
159
-
160
- assert_equal([coll], @scope.collections, "Collection was deleted")
161
-
162
- # Make a resource
163
- one = mkresource(:type => "file", :title => "/tmp/virtual1",
164
- :virtual => true, :params => {:owner => "root"})
165
- @scope.setresource one
166
-
167
- # Now perform the collection again, and it should still be there
168
- assert_nothing_raised do
169
- assert_equal([one], coll.evaluate,
170
- "Evaluate returned incorrect value")
171
- end
172
-
173
- assert_equal([coll], @scope.collections, "Collection was deleted")
174
-
175
- assert_equal(false, one.virtual?, "One was not realized")
176
- end
177
- end
178
-
179
- # $Id: collector.rb 2597 2007-06-17 21:41:50Z luke $
@@ -1,804 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift("../lib").unshift("../../lib") if __FILE__ =~ /\.rb$/
4
-
5
- require 'facter'
6
-
7
- require 'puppet'
8
- require 'puppet/parser/interpreter'
9
- require 'puppet/parser/parser'
10
- require 'puppet/network/client'
11
- require 'puppettest'
12
- require 'puppettest/resourcetesting'
13
- require 'puppettest/parsertesting'
14
- require 'puppettest/servertest'
15
- require 'timeout'
16
-
17
- class TestInterpreter < PuppetTest::TestCase
18
- include PuppetTest
19
- include PuppetTest::ServerTest
20
- include PuppetTest::ParserTesting
21
- include PuppetTest::ResourceTesting
22
- AST = Puppet::Parser::AST
23
- NodeDef = Puppet::Parser::Interpreter::NodeDef
24
-
25
- # create a simple manifest that uses nodes to create a file
26
- def mknodemanifest(node, file)
27
- createdfile = tempfile()
28
-
29
- File.open(file, "w") { |f|
30
- f.puts "node %s { file { \"%s\": ensure => file, mode => 755 } }\n" %
31
- [node, createdfile]
32
- }
33
-
34
- return [file, createdfile]
35
- end
36
-
37
- def test_simple
38
- file = tempfile()
39
- File.open(file, "w") { |f|
40
- f.puts "file { \"/etc\": owner => root }"
41
- }
42
- assert_nothing_raised {
43
- Puppet::Parser::Interpreter.new(:Manifest => file)
44
- }
45
- end
46
-
47
- def test_reloadfiles
48
- hostname = Facter["hostname"].value
49
-
50
- file = tempfile()
51
-
52
- # Create a first version
53
- createdfile = mknodemanifest(hostname, file)
54
-
55
- interp = nil
56
- assert_nothing_raised {
57
- interp = Puppet::Parser::Interpreter.new(:Manifest => file)
58
- }
59
-
60
- config = nil
61
- assert_nothing_raised {
62
- config = interp.run(hostname, {})
63
- }
64
- sleep(1)
65
-
66
- # Now create a new file
67
- createdfile = mknodemanifest(hostname, file)
68
-
69
- newconfig = nil
70
- assert_nothing_raised {
71
- newconfig = interp.run(hostname, {})
72
- }
73
-
74
- assert(config != newconfig, "Configs are somehow the same")
75
- end
76
-
77
- # Make sure searchnode behaves as we expect.
78
- def test_nodesearch
79
- # We use two sources here to catch a weird bug where the default
80
- # node is used if the host isn't in the first source.
81
- interp = mkinterp
82
-
83
- # Make some nodes
84
- names = %w{node1 node2 node2.domain.com}
85
- interp.newnode names
86
- interp.newnode %w{default}
87
-
88
- nodes = {}
89
- # Make sure we can find them all, using the direct method
90
- names.each do |name|
91
- nodes[name] = interp.nodesearch_code(name)
92
- assert(nodes[name], "Could not find %s" % name)
93
- nodes[name].file = __FILE__
94
- end
95
-
96
- # Now let's try it with the nodesearch method
97
- names.each do |name|
98
- node = interp.nodesearch(name)
99
- assert(node, "Could not find #{name} via nodesearch")
100
- end
101
-
102
- # Make sure we find the default node when we search for nonexistent nodes
103
- assert_nothing_raised do
104
- default = interp.nodesearch("nosuchnode")
105
- assert(default, "Did not find default node")
106
- assert_equal("default", default.classname)
107
- end
108
-
109
- # Now make sure the longest match always wins
110
- node = interp.nodesearch(*%w{node2 node2.domain.com})
111
-
112
- assert(node, "Did not find node2")
113
- assert_equal("node2.domain.com", node.classname,
114
- "Did not get longest match")
115
- end
116
-
117
- def test_parsedate
118
- Puppet[:filetimeout] = 0
119
- main = tempfile()
120
- sub = tempfile()
121
- mainfile = tempfile()
122
- subfile = tempfile()
123
- count = 0
124
- updatemain = proc do
125
- count += 1
126
- File.open(main, "w") { |f|
127
- f.puts "import '#{sub}'
128
- file { \"#{mainfile}\": content => #{count} }
129
- "
130
- }
131
- end
132
- updatesub = proc do
133
- count += 1
134
- File.open(sub, "w") { |f|
135
- f.puts "file { \"#{subfile}\": content => #{count} }
136
- "
137
- }
138
- end
139
-
140
- updatemain.call
141
- updatesub.call
142
-
143
- interp = Puppet::Parser::Interpreter.new(
144
- :Manifest => main,
145
- :Local => true
146
- )
147
-
148
- date = interp.parsedate
149
-
150
- # Now update the site file and make sure we catch it
151
- sleep 1
152
- updatemain.call
153
- newdate = interp.parsedate
154
- assert(date != newdate, "Parsedate was not updated")
155
- date = newdate
156
-
157
- # And then the subfile
158
- sleep 1
159
- updatesub.call
160
- newdate = interp.parsedate
161
- assert(date != newdate, "Parsedate was not updated")
162
- end
163
-
164
- # Make sure class, node, and define methods are case-insensitive
165
- def test_structure_case_insensitivity
166
- interp = mkinterp
167
-
168
- result = nil
169
- assert_nothing_raised do
170
- result = interp.newclass "Yayness"
171
- end
172
- assert_equal(result, interp.findclass("", "yayNess"))
173
-
174
- assert_nothing_raised do
175
- result = interp.newdefine "FunTest"
176
- end
177
- assert_equal(result, interp.finddefine("", "fUntEst"),
178
- "%s was not matched" % "fUntEst")
179
-
180
- assert_nothing_raised do
181
- result = interp.newnode("MyNode").shift
182
- end
183
- assert_equal(result, interp.nodesearch("mYnOde"),
184
- "mYnOde was not matched")
185
-
186
- assert_nothing_raised do
187
- result = interp.newnode("YayTest.Domain.Com").shift
188
- end
189
- assert_equal(result, interp.nodesearch("yaYtEst.domAin.cOm"),
190
- "yaYtEst.domAin.cOm was not matched")
191
- end
192
-
193
- # Make sure our whole chain works.
194
- def test_evaluate
195
- interp, scope, source = mkclassframing
196
-
197
- # Create a define that we'll be using
198
- interp.newdefine("wrapper", :code => AST::ASTArray.new(:children => [
199
- resourcedef("file", varref("name"), "owner" => "root")
200
- ]))
201
-
202
- # Now create a resource that uses that define
203
- define = mkresource(:type => "wrapper", :title => "/tmp/testing",
204
- :scope => scope, :source => source, :params => :none)
205
-
206
- scope.setresource define
207
-
208
- # And a normal resource
209
- scope.setresource mkresource(:type => "file", :title => "/tmp/rahness",
210
- :scope => scope, :source => source,
211
- :params => {:owner => "root"})
212
-
213
- # Now evaluate everything
214
- objects = nil
215
- interp.usenodes = false
216
- assert_nothing_raised do
217
- objects = interp.evaluate(nil, {})
218
- end
219
-
220
- assert_instance_of(Puppet::TransBucket, objects)
221
- end
222
-
223
- # Test evaliterate. It's a very simple method, but it's pretty tough
224
- # to test. It iterates over collections and instances of defined types
225
- # until there's no more work to do.
226
- def test_evaliterate
227
- interp, scope, source = mkclassframing
228
-
229
- # Create a top-level definition that creates a builtin object
230
- interp.newdefine("one", :arguments => [%w{owner}],
231
- :code => AST::ASTArray.new(:children => [
232
- resourcedef("file", varref("name"),
233
- "owner" => varref("owner")
234
- )
235
- ])
236
- )
237
-
238
- # Create another definition to call that one
239
- interp.newdefine("two", :arguments => [%w{owner}],
240
- :code => AST::ASTArray.new(:children => [
241
- resourcedef("one", varref("name"),
242
- "owner" => varref("owner")
243
- )
244
- ])
245
- )
246
-
247
- # And then a third
248
- interp.newdefine("three", :arguments => [%w{owner}],
249
- :code => AST::ASTArray.new(:children => [
250
- resourcedef("two", varref("name"),
251
- "owner" => varref("owner")
252
- )
253
- ])
254
- )
255
-
256
- # And create a definition that creates a virtual resource
257
- interp.newdefine("virtualizer", :arguments => [%w{owner}],
258
- :code => AST::ASTArray.new(:children => [
259
- virt_resourcedef("one", varref("name"),
260
- "owner" => varref("owner")
261
- )
262
- ])
263
- )
264
-
265
- # Now create an instance of three
266
- three = Puppet::Parser::Resource.new(
267
- :type => "three", :title => "one",
268
- :scope => scope, :source => source,
269
- :params => paramify(source, :owner => "root")
270
- )
271
- scope.setresource(three)
272
-
273
- # An instance of the virtualizer
274
- virt = Puppet::Parser::Resource.new(
275
- :type => "virtualizer", :title => "two",
276
- :scope => scope, :source => source,
277
- :params => paramify(source, :owner => "root")
278
- )
279
- scope.setresource(virt)
280
-
281
- # And a virtual instance of three
282
- virt_three = Puppet::Parser::Resource.new(
283
- :type => "three", :title => "three",
284
- :scope => scope, :source => source,
285
- :params => paramify(source, :owner => "root")
286
- )
287
- virt_three.virtual = true
288
- scope.setresource(virt_three)
289
-
290
- # Create a normal, virtual resource
291
- plainvirt = Puppet::Parser::Resource.new(
292
- :type => "user", :title => "five",
293
- :scope => scope, :source => source,
294
- :params => paramify(source, :uid => "root")
295
- )
296
- plainvirt.virtual = true
297
- scope.setresource(plainvirt)
298
-
299
- # Now create some collections for our virtual resources
300
- %w{Three[three] One[two]}.each do |ref|
301
- coll = Puppet::Parser::Collector.new(scope, "file", nil, nil, :virtual)
302
- coll.resources = [ref]
303
- scope.newcollection(coll)
304
- end
305
-
306
- # And create a generic user collector for our plain resource
307
- coll = Puppet::Parser::Collector.new(scope, "user", nil, nil, :virtual)
308
- scope.newcollection(coll)
309
-
310
- ret = nil
311
- assert_nothing_raised do
312
- ret = scope.unevaluated
313
- end
314
-
315
-
316
- assert_instance_of(Array, ret)
317
- assert_equal(3, ret.length,
318
- "did not get the correct number of unevaled resources")
319
-
320
- # Now translate the whole tree
321
- assert_nothing_raised do
322
- Timeout::timeout(2) do
323
- interp.evaliterate(scope)
324
- end
325
- end
326
-
327
- # Now make sure we've got all of our files
328
- %w{one two three}.each do |name|
329
- file = scope.findresource("File[%s]" % name)
330
- assert(file, "Could not find file %s" % name)
331
-
332
- assert_equal("root", file[:owner])
333
- assert(! file.virtual?, "file %s is still virtual" % name)
334
- end
335
-
336
- # Now make sure we found the user
337
- assert(! plainvirt.virtual?, "user was not realized")
338
- end
339
-
340
- # Make sure we fail if there are any leftover overrides to perform.
341
- # This would normally mean that someone is trying to override an object
342
- # that does not exist.
343
- def test_failonleftovers
344
- interp, scope, source = mkclassframing
345
-
346
- # Make sure we don't fail, since there are no overrides
347
- assert_nothing_raised do
348
- interp.failonleftovers(scope)
349
- end
350
-
351
- # Add an override, and make sure it causes a failure
352
- over1 = mkresource :scope => scope, :source => source,
353
- :params => {:one => "yay"}
354
-
355
- scope.setoverride(over1)
356
-
357
- assert_raise(Puppet::ParseError) do
358
- interp.failonleftovers(scope)
359
- end
360
-
361
- # Make a new scope to test leftover collections
362
- scope = mkscope :interp => interp
363
- interp.meta_def(:check_resource_collections) do
364
- raise ArgumentError, "yep"
365
- end
366
-
367
- assert_raise(ArgumentError, "did not call check_resource_colls") do
368
- interp.failonleftovers(scope)
369
- end
370
- end
371
-
372
- def test_evalnode
373
- interp = mkinterp
374
- interp.usenodes = false
375
- scope = Parser::Scope.new(:interp => interp)
376
- facts = Facter.to_hash
377
-
378
- # First make sure we get no failures when client is nil
379
- assert_nothing_raised do
380
- interp.evalnode(nil, scope, facts)
381
- end
382
-
383
- # Now define a node
384
- interp.newnode "mynode", :code => AST::ASTArray.new(:children => [
385
- resourcedef("file", "/tmp/testing", "owner" => "root")
386
- ])
387
-
388
- # Eval again, and make sure it does nothing
389
- assert_nothing_raised do
390
- interp.evalnode("mynode", scope, facts)
391
- end
392
-
393
- assert_nil(scope.findresource("File[/tmp/testing]"),
394
- "Eval'ed node with nodes off")
395
-
396
- # Now enable usenodes and make sure it works.
397
- interp.usenodes = true
398
- assert_nothing_raised do
399
- interp.evalnode("mynode", scope, facts)
400
- end
401
- file = scope.findresource("File[/tmp/testing]")
402
-
403
- assert_instance_of(Puppet::Parser::Resource, file,
404
- "Could not find file")
405
- end
406
-
407
- # This is mostly used for the cfengine module
408
- def test_specificclasses
409
- interp = mkinterp :Classes => %w{klass1 klass2}, :UseNodes => false
410
-
411
- # Make sure it's not a failure to be missing classes, since
412
- # we're using the cfengine class list, which is huge.
413
- assert_nothing_raised do
414
- interp.evaluate(nil, {})
415
- end
416
-
417
- interp.newclass("klass1", :code => AST::ASTArray.new(:children => [
418
- resourcedef("file", "/tmp/klass1", "owner" => "root")
419
- ]))
420
- interp.newclass("klass2", :code => AST::ASTArray.new(:children => [
421
- resourcedef("file", "/tmp/klass2", "owner" => "root")
422
- ]))
423
-
424
- ret = nil
425
- assert_nothing_raised do
426
- ret = interp.evaluate(nil, {})
427
- end
428
-
429
- found = ret.flatten.collect do |res| res.name end
430
-
431
- assert(found.include?("/tmp/klass1"), "Did not evaluate klass1")
432
- assert(found.include?("/tmp/klass2"), "Did not evaluate klass2")
433
- end
434
-
435
- def mk_node_mapper
436
- # First, make sure our nodesearch command works as we expect
437
- # Make a nodemapper
438
- mapper = tempfile()
439
- ruby = %x{which ruby}.chomp
440
- File.open(mapper, "w") { |f|
441
- f.puts "#!#{ruby}
442
- require 'yaml'
443
- name = ARGV[0].chomp
444
- result = {}
445
-
446
- if name =~ /a/
447
- result[:parameters] = {'one' => ARGV[0] + '1', 'two' => ARGV[0] + '2'}
448
- end
449
-
450
- if name =~ /p/
451
- result['classes'] = [1,2,3].collect { |n| ARGV[0] + n.to_s }
452
- end
453
-
454
- puts YAML.dump(result)
455
- "
456
- }
457
- File.chmod(0755, mapper)
458
- mapper
459
- end
460
-
461
- def test_nodesearch_external
462
- interp = mkinterp
463
-
464
- mapper = mk_node_mapper
465
- # Make sure it gives the right response
466
- assert_equal({'classes' => %w{apple1 apple2 apple3}, :parameters => {"one" => "apple1", "two" => "apple2"}},
467
- YAML.load(%x{#{mapper} apple}))
468
-
469
- # First make sure we get nil back by default
470
- assert_nothing_raised {
471
- assert_nil(interp.nodesearch_external("apple"),
472
- "Interp#nodesearch_external defaulted to a non-nil response")
473
- }
474
- assert_nothing_raised { Puppet[:external_nodes] = mapper }
475
-
476
- node = nil
477
- # Both 'a' and 'p', so we get classes and parameters
478
- assert_nothing_raised { node = interp.nodesearch_external("apple") }
479
- assert_equal("apple", node.name, "node name was not set correctly for apple")
480
- assert_equal(%w{apple1 apple2 apple3}, node.classes, "node classes were not set correctly for apple")
481
- assert_equal( {"one" => "apple1", "two" => "apple2"}, node.parameters, "node parameters were not set correctly for apple")
482
-
483
- # A 'p' but no 'a', so we only get classes
484
- assert_nothing_raised { node = interp.nodesearch_external("plum") }
485
- assert_equal("plum", node.name, "node name was not set correctly for plum")
486
- assert_equal(%w{plum1 plum2 plum3}, node.classes, "node classes were not set correctly for plum")
487
- assert_equal({}, node.parameters, "node parameters were not set correctly for plum")
488
-
489
- # An 'a' but no 'p', so we only get parameters.
490
- assert_nothing_raised { node = interp.nodesearch_external("guava")} # no p's, thus no classes
491
- assert_equal("guava", node.name, "node name was not set correctly for guava")
492
- assert_equal([], node.classes, "node classes were not set correctly for guava")
493
- assert_equal({"one" => "guava1", "two" => "guava2"}, node.parameters, "node parameters were not set correctly for guava")
494
-
495
- assert_nothing_raised { node = interp.nodesearch_external("honeydew")} # neither, thus nil
496
- assert_nil(node)
497
- end
498
-
499
- # A wrapper test, to make sure we're correctly calling the external search method.
500
- def test_nodesearch_external_functional
501
- mapper = mk_node_mapper
502
-
503
- Puppet[:external_nodes] = mapper
504
- interp = mkinterp
505
-
506
- node = nil
507
- assert_nothing_raised do
508
- node = interp.nodesearch("apple")
509
- end
510
- assert_instance_of(NodeDef, node, "did not create node")
511
- end
512
-
513
- def test_check_resource_collections
514
- interp = mkinterp
515
- scope = mkscope :interp => interp
516
- coll = Puppet::Parser::Collector.new(scope, "file", nil, nil, :virtual)
517
- coll.resources = ["File[/tmp/virtual1]", "File[/tmp/virtual2]"]
518
- scope.newcollection(coll)
519
-
520
- assert_raise(Puppet::ParseError, "Did not fail on remaining resource colls") do
521
- interp.check_resource_collections(scope)
522
- end
523
- end
524
-
525
- def test_nodedef
526
- interp = mkinterp
527
- interp.newclass("base")
528
- interp.newclass("sub", :parent => "base")
529
- interp.newclass("other")
530
-
531
- node = nil
532
- assert_nothing_raised("Could not create a node definition") do
533
- node = NodeDef.new :name => "yay", :classes => "sub", :parameters => {"one" => "two", "three" => "four"}
534
- end
535
-
536
- scope = mkscope :interp => interp
537
- assert_nothing_raised("Could not evaluate the node definition") do
538
- node.evaluate(:scope => scope)
539
- end
540
-
541
- assert_equal("two", scope.lookupvar("one"), "NodeDef did not set variable")
542
- assert_equal("four", scope.lookupvar("three"), "NodeDef did not set variable")
543
-
544
- assert(scope.classlist.include?("sub"), "NodeDef did not evaluate class")
545
- assert(scope.classlist.include?("base"), "NodeDef did not evaluate base class")
546
-
547
- # Now try a node def with multiple classes
548
- assert_nothing_raised("Could not create a node definition") do
549
- node = NodeDef.new :name => "yay", :classes => %w{sub other base}, :parameters => {"one" => "two", "three" => "four"}
550
- end
551
-
552
- scope = mkscope :interp => interp
553
- assert_nothing_raised("Could not evaluate the node definition") do
554
- node.evaluate(:scope => scope)
555
- end
556
-
557
- assert_equal("two", scope.lookupvar("one"), "NodeDef did not set variable")
558
- assert_equal("four", scope.lookupvar("three"), "NodeDef did not set variable")
559
-
560
- assert(scope.classlist.include?("sub"), "NodeDef did not evaluate class")
561
- assert(scope.classlist.include?("other"), "NodeDef did not evaluate other class")
562
-
563
- # And a node def with no params
564
- assert_nothing_raised("Could not create a node definition with no params") do
565
- node = NodeDef.new :name => "yay", :classes => %w{sub other base}
566
- end
567
-
568
- scope = mkscope :interp => interp
569
- assert_nothing_raised("Could not evaluate the node definition") do
570
- node.evaluate(:scope => scope)
571
- end
572
-
573
- assert(scope.classlist.include?("sub"), "NodeDef did not evaluate class")
574
- assert(scope.classlist.include?("other"), "NodeDef did not evaluate other class")
575
-
576
- # Now make sure nodedef doesn't fail when some classes are not defined (#687).
577
- assert_nothing_raised("Could not create a node definition with some invalid classes") do
578
- node = NodeDef.new :name => "yay", :classes => %w{base unknown}
579
- end
580
-
581
- scope = mkscope :interp => interp
582
- assert_nothing_raised("Could not evaluate the node definition with some invalid classes") do
583
- node.evaluate(:scope => scope)
584
- end
585
-
586
- assert(scope.classlist.include?("base"), "NodeDef did not evaluate class")
587
- end
588
-
589
- # This can stay in the main test suite because it doesn't actually use ldapsearch,
590
- # it just overrides the method so it behaves as though it were hitting ldap.
591
- def test_ldapnodes
592
- interp = mkinterp
593
-
594
- nodetable = {}
595
-
596
- # Override the ldapsearch definition, so we don't have to actually set it up.
597
- interp.meta_def(:ldapsearch) do |name|
598
- nodetable[name]
599
- end
600
-
601
- # Make sure we get nothing for nonexistent hosts
602
- node = nil
603
- assert_nothing_raised do
604
- node = interp.nodesearch_ldap("nosuchhost")
605
- end
606
-
607
- assert_nil(node, "Got a node for a non-existent host")
608
-
609
- # Now add a base node with some classes and parameters
610
- nodetable["base"] = [nil, %w{one two}, {"base" => "true"}]
611
-
612
- assert_nothing_raised do
613
- node = interp.nodesearch_ldap("base")
614
- end
615
-
616
- assert_instance_of(NodeDef, node, "Did not get node from ldap nodesearch")
617
- assert_equal("base", node.name, "node name was not set")
618
-
619
- assert_equal(%w{one two}, node.classes, "node classes were not set")
620
- assert_equal({"base" => "true"}, node.parameters, "node parameters were not set")
621
-
622
- # Now use a different with this as the base
623
- nodetable["middle"] = ["base", %w{three}, {"center" => "boo"}]
624
- assert_nothing_raised do
625
- node = interp.nodesearch_ldap("middle")
626
- end
627
-
628
- assert_instance_of(NodeDef, node, "Did not get node from ldap nodesearch")
629
- assert_equal("middle", node.name, "node name was not set")
630
-
631
- assert_equal(%w{one two three}.sort, node.classes.sort, "node classes were not set correctly with a parent node")
632
- assert_equal({"base" => "true", "center" => "boo"}, node.parameters, "node parameters were not set correctly with a parent node")
633
-
634
- # And one further, to make sure we fully recurse
635
- nodetable["top"] = ["middle", %w{four five}, {"master" => "far"}]
636
- assert_nothing_raised do
637
- node = interp.nodesearch_ldap("top")
638
- end
639
-
640
- assert_instance_of(NodeDef, node, "Did not get node from ldap nodesearch")
641
- assert_equal("top", node.name, "node name was not set")
642
-
643
- assert_equal(%w{one two three four five}.sort, node.classes.sort, "node classes were not set correctly with the top node")
644
- assert_equal({"base" => "true", "center" => "boo", "master" => "far"}, node.parameters, "node parameters were not set correctly with the top node")
645
- end
646
-
647
- # Make sure that reparsing is atomic -- failures don't cause a broken state, and we aren't subject
648
- # to race conditions if someone contacts us while we're reparsing.
649
- def test_atomic_reparsing
650
- Puppet[:filetimeout] = -10
651
- file = tempfile
652
- File.open(file, "w") { |f| f.puts %{file { '/tmp': ensure => directory }} }
653
- interp = mkinterp :Manifest => file, :UseNodes => false
654
-
655
- assert_nothing_raised("Could not compile the first time") do
656
- interp.run("yay", {})
657
- end
658
-
659
- oldparser = interp.send(:instance_variable_get, "@parser")
660
-
661
- # Now add a syntax failure
662
- File.open(file, "w") { |f| f.puts %{file { /tmp: ensure => directory }} }
663
- assert_nothing_raised("Could not compile the first time") do
664
- interp.run("yay", {})
665
- end
666
-
667
- # And make sure the old parser is still there
668
- newparser = interp.send(:instance_variable_get, "@parser")
669
- assert_equal(oldparser.object_id, newparser.object_id, "Failed parser still replaced existing parser")
670
- end
671
- end
672
-
673
- class LdapNodeTest < PuppetTest::TestCase
674
- include PuppetTest
675
- include PuppetTest::ServerTest
676
- include PuppetTest::ParserTesting
677
- include PuppetTest::ResourceTesting
678
- AST = Puppet::Parser::AST
679
- NodeDef = Puppet::Parser::Interpreter::NodeDef
680
- confine "LDAP is not available" => Puppet.features.ldap?
681
- confine "No LDAP test data for networks other than Luke's" => Facter.value(:domain) == "madstop.com"
682
- def ldapconnect
683
-
684
- @ldap = LDAP::Conn.new("ldap", 389)
685
- @ldap.set_option( LDAP::LDAP_OPT_PROTOCOL_VERSION, 3 )
686
- @ldap.simple_bind("", "")
687
-
688
- return @ldap
689
- end
690
-
691
- def ldaphost(name)
692
- node = NodeDef.new(:name => name)
693
- parent = nil
694
- found = false
695
- @ldap.search( "ou=hosts, dc=madstop, dc=com", 2,
696
- "(&(objectclass=puppetclient)(cn=%s))" % name
697
- ) do |entry|
698
- node.classes = entry.vals("puppetclass") || []
699
- node.parameters = entry.to_hash.inject({}) do |hash, ary|
700
- if ary[1].length == 1
701
- hash[ary[0]] = ary[1].shift
702
- else
703
- hash[ary[0]] = ary[1]
704
- end
705
- hash
706
- end
707
- parent = node.parameters["parentnode"]
708
- found = true
709
- end
710
- raise "Could not find node %s" % name unless found
711
-
712
- return node, parent
713
- end
714
-
715
- def test_ldapsearch
716
- Puppet[:ldapbase] = "ou=hosts, dc=madstop, dc=com"
717
- Puppet[:ldapnodes] = true
718
-
719
- ldapconnect()
720
-
721
- interp = mkinterp :NodeSources => [:ldap, :code]
722
-
723
- # Make sure we get nil and nil back when we search for something missing
724
- parent, classes, parameters = nil
725
- assert_nothing_raised do
726
- parent, classes, parameters = interp.ldapsearch("nosuchhost")
727
- end
728
-
729
- assert_nil(parent, "Got a parent for a non-existent host")
730
- assert_nil(classes, "Got classes for a non-existent host")
731
-
732
- # Make sure we can find 'culain' in ldap
733
- assert_nothing_raised do
734
- parent, classes, parameters = interp.ldapsearch("culain")
735
- end
736
-
737
- node, realparent = ldaphost("culain")
738
- assert_equal(realparent, parent, "did not get correct parent node from ldap")
739
- assert_equal(node.classes, classes, "did not get correct ldap classes from ldap")
740
- assert_equal(node.parameters, parameters, "did not get correct ldap parameters from ldap")
741
-
742
- # Now compare when we specify the attributes to get.
743
- Puppet[:ldapattrs] = "cn"
744
- assert_nothing_raised do
745
- parent, classes, parameters = interp.ldapsearch("culain")
746
- end
747
- assert_equal(realparent, parent, "did not get correct parent node from ldap")
748
- assert_equal(node.classes, classes, "did not get correct ldap classes from ldap")
749
-
750
- list = %w{cn puppetclass parentnode dn}
751
- should = node.parameters.inject({}) { |h, a| h[a[0]] = a[1] if list.include?(a[0]); h }
752
- assert_equal(should, parameters, "did not get correct ldap parameters from ldap")
753
- end
754
- end
755
-
756
- class LdapReconnectTests < PuppetTest::TestCase
757
- include PuppetTest
758
- include PuppetTest::ServerTest
759
- include PuppetTest::ParserTesting
760
- include PuppetTest::ResourceTesting
761
- AST = Puppet::Parser::AST
762
- NodeDef = Puppet::Parser::Interpreter::NodeDef
763
- confine "Not running on culain as root" => (Puppet::Util::SUIDManager.uid == 0 and Facter.value("hostname") == "culain")
764
-
765
- def test_ldapreconnect
766
- Puppet[:ldapbase] = "ou=hosts, dc=madstop, dc=com"
767
- Puppet[:ldapnodes] = true
768
-
769
- interp = nil
770
- assert_nothing_raised {
771
- interp = Puppet::Parser::Interpreter.new(
772
- :Manifest => mktestmanifest()
773
- )
774
- }
775
- hostname = "culain.madstop.com"
776
-
777
- # look for our host
778
- assert_nothing_raised {
779
- parent, classes = interp.nodesearch_ldap(hostname)
780
- }
781
-
782
- # Now restart ldap
783
- system("/etc/init.d/slapd restart 2>/dev/null >/dev/null")
784
- sleep(1)
785
-
786
- # and look again
787
- assert_nothing_raised {
788
- parent, classes = interp.nodesearch_ldap(hostname)
789
- }
790
-
791
- # Now stop ldap
792
- system("/etc/init.d/slapd stop 2>/dev/null >/dev/null")
793
- cleanup do
794
- system("/etc/init.d/slapd start 2>/dev/null >/dev/null")
795
- end
796
-
797
- # And make sure we actually fail here
798
- assert_raise(Puppet::Error) {
799
- parent, classes = interp.nodesearch_ldap(hostname)
800
- }
801
- end
802
- end
803
-
804
- # $Id: interpreter.rb 2742 2007-08-03 23:49:53Z luke $