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,65 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ require 'tempfile'
6
+ require 'puppet/util/loadedfile'
7
+
8
+ describe Puppet::Util::LoadedFile do
9
+ before(:each) do
10
+ @f = Tempfile.new('loadedfile_test')
11
+ @f.puts "yayness"
12
+ @f.flush
13
+
14
+ @loaded = Puppet::Util::LoadedFile.new(@f.path)
15
+
16
+ fake_ctime = Time.now - (2 * Puppet[:filetimeout])
17
+ @stat = stub('stat', :ctime => fake_ctime)
18
+ @fake_now = Time.now + (2 * Puppet[:filetimeout])
19
+ end
20
+
21
+ it "should recognize when the file has not changed" do
22
+ # Use fake "now" so that we can be sure changed? actually checks, without sleeping
23
+ # for Puppet[:filetimeout] seconds.
24
+ Time.stubs(:now).returns(@fake_now)
25
+ @loaded.changed?.should == false
26
+ end
27
+
28
+ it "should recognize when the file has changed" do
29
+ # Fake File.stat so we don't have to depend on the filesystem granularity. Doing a flush()
30
+ # just didn't do the job.
31
+ File.stubs(:stat).returns(@stat)
32
+ # Use fake "now" so that we can be sure changed? actually checks, without sleeping
33
+ # for Puppet[:filetimeout] seconds.
34
+ Time.stubs(:now).returns(@fake_now)
35
+ @loaded.changed?.should be_an_instance_of(Time)
36
+ end
37
+
38
+ it "should not catch a change until the timeout has elapsed" do
39
+ # Fake File.stat so we don't have to depend on the filesystem granularity. Doing a flush()
40
+ # just didn't do the job.
41
+ File.stubs(:stat).returns(@stat)
42
+ @loaded.changed?.should be(false)
43
+ # Use fake "now" so that we can be sure changed? actually checks, without sleeping
44
+ # for Puppet[:filetimeout] seconds.
45
+ Time.stubs(:now).returns(@fake_now)
46
+ @loaded.changed?.should_not be(false)
47
+ end
48
+
49
+ it "should consider a file changed when that file is missing" do
50
+ @f.close!
51
+ # Use fake "now" so that we can be sure changed? actually checks, without sleeping
52
+ # for Puppet[:filetimeout] seconds.
53
+ Time.stubs(:now).returns(@fake_now)
54
+ @loaded.changed?.should_not be(false)
55
+ end
56
+
57
+ it "should disable checking if Puppet[:filetimeout] is negative" do
58
+ Puppet[:filetimeout] = -1
59
+ @loaded.changed?.should_not be(false)
60
+ end
61
+
62
+ after(:each) do
63
+ @f.close
64
+ end
65
+ end
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
4
+
5
+ require 'puppet/util/log'
6
+
7
+ describe Puppet::Util::Log do
8
+ describe "instances" do
9
+ before do
10
+ Puppet::Util::Log.stubs(:newmessage)
11
+ end
12
+
13
+ [:level, :message, :time, :remote].each do |attr|
14
+ it "should have a %s attribute" % attr do
15
+ log = Puppet::Util::Log.new :level => :notice, :message => "A test message"
16
+ log.should respond_to(attr)
17
+ log.should respond_to(attr.to_s + "=")
18
+ end
19
+ end
20
+
21
+ it "should fail if created without a level" do
22
+ lambda { Puppet::Util::Log.new(:message => "A test message") }.should raise_error(ArgumentError)
23
+ end
24
+
25
+ it "should fail if created without a message" do
26
+ lambda { Puppet::Util::Log.new(:level => :notice) }.should raise_error(ArgumentError)
27
+ end
28
+
29
+ it "should make available the level passed in at initialization" do
30
+ Puppet::Util::Log.new(:level => :notice, :message => "A test message").level.should == :notice
31
+ end
32
+
33
+ it "should make available the message passed in at initialization" do
34
+ Puppet::Util::Log.new(:level => :notice, :message => "A test message").message.should == "A test message"
35
+ end
36
+
37
+ # LAK:NOTE I don't know why this behavior is here, I'm just testing what's in the code,
38
+ # at least at first.
39
+ it "should always convert messages to strings" do
40
+ Puppet::Util::Log.new(:level => :notice, :message => :foo).message.should == "foo"
41
+ end
42
+
43
+ it "should convert the level to a symbol if it's passed in as a string" do
44
+ Puppet::Util::Log.new(:level => "notice", :message => :foo).level.should == :notice
45
+ end
46
+
47
+ it "should fail if the level is not a symbol or string" do
48
+ lambda { Puppet::Util::Log.new(:level => 50, :message => :foo) }.should raise_error(ArgumentError)
49
+ end
50
+
51
+ it "should fail if the provided level is not valid" do
52
+ Puppet::Util::Log.expects(:validlevel?).with(:notice).returns false
53
+ lambda { Puppet::Util::Log.new(:level => :notice, :message => :foo) }.should raise_error(ArgumentError)
54
+ end
55
+
56
+ it "should set its time to the initialization time" do
57
+ time = mock 'time'
58
+ Time.expects(:now).returns time
59
+ Puppet::Util::Log.new(:level => "notice", :message => :foo).time.should equal(time)
60
+ end
61
+
62
+ it "should make available any passed-in tags" do
63
+ log = Puppet::Util::Log.new(:level => "notice", :message => :foo, :tags => %w{foo bar})
64
+ log.tags.should be_include("foo")
65
+ log.tags.should be_include("bar")
66
+ end
67
+
68
+ it "should use an passed-in source" do
69
+ Puppet::Util::Log.any_instance.expects(:source=).with "foo"
70
+ Puppet::Util::Log.new(:level => "notice", :message => :foo, :source => "foo")
71
+ end
72
+
73
+ it "should default to 'Puppet' as its source" do
74
+ Puppet::Util::Log.new(:level => "notice", :message => :foo).source.should == "Puppet"
75
+ end
76
+
77
+ it "should register itself with Log" do
78
+ Puppet::Util::Log.expects(:newmessage)
79
+ Puppet::Util::Log.new(:level => "notice", :message => :foo)
80
+ end
81
+
82
+ it "should have a method for determining if a tag is present" do
83
+ Puppet::Util::Log.new(:level => "notice", :message => :foo).should respond_to(:tagged?)
84
+ end
85
+
86
+ it "should match a tag if any of the tags are equivalent to the passed tag as a string" do
87
+ Puppet::Util::Log.new(:level => "notice", :message => :foo, :tags => %w{one two}).should be_tagged(:one)
88
+ end
89
+
90
+ it "should tag itself with its log level" do
91
+ Puppet::Util::Log.new(:level => "notice", :message => :foo).should be_tagged(:notice)
92
+ end
93
+
94
+ it "should return its message when converted to a string" do
95
+ Puppet::Util::Log.new(:level => "notice", :message => :foo).to_s.should == "foo"
96
+ end
97
+
98
+ it "should include its time, source, level, and message when prepared for reporting" do
99
+ log = Puppet::Util::Log.new(:level => "notice", :message => :foo)
100
+ report = log.to_report
101
+ report.should be_include("notice")
102
+ report.should be_include("foo")
103
+ report.should be_include(log.source)
104
+ report.should be_include(log.time.to_s)
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
4
+
5
+ require 'puppet/util/metric'
6
+
7
+ describe Puppet::Util::Metric do
8
+ before do
9
+ @metric = Puppet::Util::Metric.new("foo")
10
+ end
11
+
12
+ it "should be aliased to Puppet::Metric" do
13
+ Puppet::Util::Metric.should equal(Puppet::Metric)
14
+ end
15
+
16
+ [:type, :name, :value, :label, :basedir].each do |name|
17
+ it "should have a #{name} attribute" do
18
+ @metric.should respond_to(name)
19
+ @metric.should respond_to(name.to_s + "=")
20
+ end
21
+ end
22
+
23
+ it "should default to the :rrdir as the basedir "do
24
+ Puppet.settings.expects(:value).with(:rrddir).returns "myrrd"
25
+ @metric.basedir.should == "myrrd"
26
+ end
27
+
28
+ it "should use any provided basedir" do
29
+ @metric.basedir = "foo"
30
+ @metric.basedir.should == "foo"
31
+ end
32
+
33
+ it "should require a name at initialization" do
34
+ lambda { Puppet::Util::Metric.new }.should raise_error(ArgumentError)
35
+ end
36
+
37
+ it "should always convert its name to a string" do
38
+ Puppet::Util::Metric.new(:foo).name.should == "foo"
39
+ end
40
+
41
+ it "should support a label" do
42
+ Puppet::Util::Metric.new("foo", "mylabel").label.should == "mylabel"
43
+ end
44
+
45
+ it "should autogenerate a label if none is provided" do
46
+ Puppet::Util::Metric.new("foo_bar").label.should == "Foo bar"
47
+ end
48
+
49
+ it "should have a method for adding values" do
50
+ @metric.should respond_to(:newvalue)
51
+ end
52
+
53
+ it "should have a method for returning values" do
54
+ @metric.should respond_to(:values)
55
+ end
56
+
57
+ it "should require a name and value for its values" do
58
+ lambda { @metric.newvalue }.should raise_error(ArgumentError)
59
+ end
60
+
61
+ it "should support a label for values" do
62
+ @metric.newvalue(:foo, 10, "label")
63
+ @metric.values[0][1].should == "label"
64
+ end
65
+
66
+ it "should autogenerate value labels if none is provided" do
67
+ @metric.newvalue("foo_bar", 10)
68
+ @metric.values[0][1].should == "Foo bar"
69
+ end
70
+
71
+ it "should return its values sorted by label" do
72
+ @metric.newvalue(:foo, 10, "b")
73
+ @metric.newvalue(:bar, 10, "a")
74
+
75
+ @metric.values.should == [[:bar, "a", 10], [:foo, "b", 10]]
76
+ end
77
+
78
+ it "should use an array indexer method to retrieve individual values" do
79
+ @metric.newvalue(:foo, 10)
80
+ @metric[:foo].should == 10
81
+ end
82
+
83
+ it "should return nil if the named value cannot be found" do
84
+ @metric[:foo].should be_nil
85
+ end
86
+
87
+ # LAK: I'm not taking the time to develop these tests right now.
88
+ # I expect they should actually be extracted into a separate class
89
+ # anyway.
90
+ it "should be able to graph metrics using RRDTool"
91
+
92
+ it "should be able to create a new RRDTool database"
93
+
94
+ it "should be able to store metrics into an RRDTool database"
95
+ end
@@ -0,0 +1,128 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Created by Luke Kanies on 2007-11-18.
4
+ # Copyright (c) 2007. All rights reserved.
5
+
6
+ require File.dirname(__FILE__) + '/../../spec_helper'
7
+
8
+ require 'puppet/util/nagios_maker'
9
+
10
+ describe Puppet::Util::NagiosMaker do
11
+ before do
12
+ @module = Puppet::Util::NagiosMaker
13
+
14
+ @nagtype = stub 'nagios type', :parameters => [], :namevar => :name
15
+ Nagios::Base.stubs(:type).with(:test).returns(@nagtype)
16
+ end
17
+
18
+ it "should be able to create a new nagios type" do
19
+ @module.should respond_to(:create_nagios_type)
20
+ end
21
+
22
+ it "should fail if it cannot find the named Naginator type" do
23
+ Nagios::Base.stubs(:type).returns(nil)
24
+
25
+ lambda { @module.create_nagios_type(:no_such_type) }.should raise_error(Puppet::DevError)
26
+ end
27
+
28
+ it "should create a new RAL type with the provided name prefixed with 'nagios_'" do
29
+ type = stub 'type', :newparam => nil, :newproperty => nil, :ensurable => nil, :provide => nil, :desc => nil
30
+
31
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
32
+ @module.create_nagios_type(:test)
33
+ end
34
+
35
+ it "should mark the created type as ensurable" do
36
+ type = stub 'type', :newparam => nil, :newproperty => nil, :provide => nil, :desc => nil
37
+
38
+ type.expects(:ensurable)
39
+
40
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
41
+ @module.create_nagios_type(:test)
42
+ end
43
+
44
+ it "should create a namevar parameter for the nagios type's name parameter" do
45
+ type = stub 'type', :newproperty => nil, :ensurable => nil, :provide => nil, :desc => nil
46
+
47
+ type.expects(:newparam).with(:name, :namevar => true)
48
+
49
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
50
+ @module.create_nagios_type(:test)
51
+ end
52
+
53
+ it "should create a property for all non-namevar parameters" do
54
+ type = stub 'type', :newparam => nil, :ensurable => nil, :provide => nil, :desc => nil
55
+
56
+ @nagtype.stubs(:parameters).returns([:one, :two])
57
+
58
+ type.expects(:newproperty).with(:one)
59
+ type.expects(:newproperty).with(:two)
60
+ type.expects(:newproperty).with(:target)
61
+
62
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
63
+ @module.create_nagios_type(:test)
64
+ end
65
+
66
+ it "should skip parameters that start with integers" do
67
+ type = stub 'type', :newparam => nil, :ensurable => nil, :provide => nil, :desc => nil
68
+
69
+ @nagtype.stubs(:parameters).returns(["2dcoords".to_sym, :other])
70
+
71
+ type.expects(:newproperty).with(:other)
72
+ type.expects(:newproperty).with(:target)
73
+
74
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
75
+ @module.create_nagios_type(:test)
76
+ end
77
+
78
+ it "should deduplicate the parameter list" do
79
+ type = stub 'type', :newparam => nil, :ensurable => nil, :provide => nil, :desc => nil
80
+
81
+ @nagtype.stubs(:parameters).returns([:one, :one])
82
+
83
+ type.expects(:newproperty).with(:one)
84
+ type.expects(:newproperty).with(:target)
85
+
86
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
87
+ @module.create_nagios_type(:test)
88
+ end
89
+
90
+ it "should create a target property" do
91
+ type = stub 'type', :newparam => nil, :ensurable => nil, :provide => nil, :desc => nil
92
+
93
+ type.expects(:newproperty).with(:target)
94
+
95
+ Puppet::Type.expects(:newtype).with(:nagios_test).returns(type)
96
+ @module.create_nagios_type(:test)
97
+ end
98
+ end
99
+
100
+ describe Puppet::Util::NagiosMaker, " when creating the naginator provider" do
101
+ before do
102
+ @module = Puppet::Util::NagiosMaker
103
+
104
+ @nagtype = stub 'nagios type', :parameters => [], :namevar => :name
105
+ Nagios::Base.stubs(:type).with(:test).returns(@nagtype)
106
+
107
+ @type = stub 'type', :newparam => nil, :ensurable => nil, :newproperty => nil, :desc => nil
108
+ Puppet::Type.stubs(:newtype).with(:nagios_test).returns(@type)
109
+ end
110
+
111
+ it "should add a naginator provider" do
112
+ @type.expects(:provide).with { |name, options| name == :naginator }
113
+
114
+ @module.create_nagios_type(:test)
115
+ end
116
+
117
+ it "should set Puppet::Provider::Naginator as the parent class of the provider" do
118
+ @type.expects(:provide).with { |name, options| options[:parent] == Puppet::Provider::Naginator }
119
+
120
+ @module.create_nagios_type(:test)
121
+ end
122
+
123
+ it "should use /etc/nagios/$name.cfg as the default target" do
124
+ @type.expects(:provide).with { |name, options| options[:default_target] == "/etc/nagios/nagios_test.cfg" }
125
+
126
+ @module.create_nagios_type(:test)
127
+ end
128
+ end
@@ -0,0 +1,256 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Dir.chdir(File.dirname(__FILE__)) { (s = lambda { |f| File.exist?(f) ? require(f) : Dir.chdir("..") { s.call(f) } }).call("spec/spec_helper.rb") }
4
+
5
+ require 'puppet/util/posix'
6
+
7
+ class PosixTest
8
+ include Puppet::Util::POSIX
9
+ end
10
+
11
+ describe Puppet::Util::POSIX do
12
+ before do
13
+ @posix = PosixTest.new
14
+ end
15
+
16
+ [:group, :gr].each do |name|
17
+ it "should return :gid as the field for %s" % name do
18
+ @posix.idfield(name).should == :gid
19
+ end
20
+
21
+ it "should return :getgrgid as the id method for %s" % name do
22
+ @posix.methodbyid(name).should == :getgrgid
23
+ end
24
+
25
+ it "should return :getgrnam as the name method for %s" % name do
26
+ @posix.methodbyname(name).should == :getgrnam
27
+ end
28
+ end
29
+
30
+ [:user, :pw, :passwd].each do |name|
31
+ it "should return :uid as the field for %s" % name do
32
+ @posix.idfield(name).should == :uid
33
+ end
34
+
35
+ it "should return :getpwuid as the id method for %s" % name do
36
+ @posix.methodbyid(name).should == :getpwuid
37
+ end
38
+
39
+ it "should return :getpwnam as the name method for %s" % name do
40
+ @posix.methodbyname(name).should == :getpwnam
41
+ end
42
+ end
43
+
44
+ describe "when retrieving a posix field" do
45
+ before do
46
+ @thing = stub 'thing', :field => "asdf"
47
+ end
48
+
49
+ it "should fail if no id was passed" do
50
+ lambda { @posix.get_posix_field("asdf", "bar", nil) }.should raise_error(Puppet::DevError)
51
+ end
52
+
53
+ describe "and the id is an integer" do
54
+ it "should log an error and return nil if the specified id is greater than the maximum allowed ID" do
55
+ Puppet.settings.expects(:value).with(:maximum_uid).returns 100
56
+ Puppet.expects(:err)
57
+
58
+ @posix.get_posix_field("asdf", "bar", 200).should be_nil
59
+ end
60
+
61
+ it "should use the method return by :methodbyid and return the specified field" do
62
+ Etc.expects(:getgrgid).returns @thing
63
+
64
+ @thing.expects(:field).returns "myval"
65
+
66
+ @posix.get_posix_field(:gr, :field, 200).should == "myval"
67
+ end
68
+
69
+ it "should return nil if the method throws an exception" do
70
+ Etc.expects(:getgrgid).raises ArgumentError
71
+
72
+ @thing.expects(:field).never
73
+
74
+ @posix.get_posix_field(:gr, :field, 200).should be_nil
75
+ end
76
+ end
77
+
78
+ describe "and the id is not an integer" do
79
+ it "should use the method return by :methodbyid and return the specified field" do
80
+ Etc.expects(:getgrnam).returns @thing
81
+
82
+ @thing.expects(:field).returns "myval"
83
+
84
+ @posix.get_posix_field(:gr, :field, "asdf").should == "myval"
85
+ end
86
+
87
+ it "should return nil if the method throws an exception" do
88
+ Etc.expects(:getgrnam).raises ArgumentError
89
+
90
+ @thing.expects(:field).never
91
+
92
+ @posix.get_posix_field(:gr, :field, "asdf").should be_nil
93
+ end
94
+ end
95
+ end
96
+
97
+ describe "when returning the gid" do
98
+ before do
99
+ @posix.stubs(:get_posix_field)
100
+ end
101
+
102
+ describe "and the group is an integer" do
103
+ it "should convert integers specified as a string into an integer" do
104
+ @posix.expects(:get_posix_field).with(:group, :name, 100)
105
+
106
+ @posix.gid("100")
107
+ end
108
+
109
+ it "should look up the name for the group" do
110
+ @posix.expects(:get_posix_field).with(:group, :name, 100)
111
+
112
+ @posix.gid(100)
113
+ end
114
+
115
+ it "should return nil if the group cannot be found" do
116
+ @posix.expects(:get_posix_field).once.returns nil
117
+ @posix.expects(:search_posix_field).never
118
+
119
+ @posix.gid(100).should be_nil
120
+ end
121
+
122
+ it "should use the found name to look up the id" do
123
+ @posix.expects(:get_posix_field).with(:group, :name, 100).returns "asdf"
124
+ @posix.expects(:get_posix_field).with(:group, :gid, "asdf").returns 100
125
+
126
+ @posix.gid(100).should == 100
127
+ end
128
+
129
+ # LAK: This is because some platforms have a broken Etc module that always return
130
+ # the same group.
131
+ it "should use :search_posix_field if the discovered id does not match the passed-in id" do
132
+ @posix.expects(:get_posix_field).with(:group, :name, 100).returns "asdf"
133
+ @posix.expects(:get_posix_field).with(:group, :gid, "asdf").returns 50
134
+
135
+ @posix.expects(:search_posix_field).with(:group, :gid, 100).returns "asdf"
136
+
137
+ @posix.gid(100).should == "asdf"
138
+ end
139
+ end
140
+
141
+ describe "and the group is a string" do
142
+ it "should look up the gid for the group" do
143
+ @posix.expects(:get_posix_field).with(:group, :gid, "asdf")
144
+
145
+ @posix.gid("asdf")
146
+ end
147
+
148
+ it "should return nil if the group cannot be found" do
149
+ @posix.expects(:get_posix_field).once.returns nil
150
+ @posix.expects(:search_posix_field).never
151
+
152
+ @posix.gid("asdf").should be_nil
153
+ end
154
+
155
+ it "should use the found gid to look up the nam" do
156
+ @posix.expects(:get_posix_field).with(:group, :gid, "asdf").returns 100
157
+ @posix.expects(:get_posix_field).with(:group, :name, 100).returns "asdf"
158
+
159
+ @posix.gid("asdf").should == 100
160
+ end
161
+
162
+ it "should use :search_posix_field if the discovered name does not match the passed-in name" do
163
+ @posix.expects(:get_posix_field).with(:group, :gid, "asdf").returns 100
164
+ @posix.expects(:get_posix_field).with(:group, :name, 100).returns "boo"
165
+
166
+ @posix.expects(:search_posix_field).with(:group, :gid, "asdf").returns "asdf"
167
+
168
+ @posix.gid("asdf").should == "asdf"
169
+ end
170
+ end
171
+ end
172
+
173
+ describe "when returning the uid" do
174
+ before do
175
+ @posix.stubs(:get_posix_field)
176
+ end
177
+
178
+ describe "and the group is an integer" do
179
+ it "should convert integers specified as a string into an integer" do
180
+ @posix.expects(:get_posix_field).with(:passwd, :name, 100)
181
+
182
+ @posix.uid("100")
183
+ end
184
+
185
+ it "should look up the name for the group" do
186
+ @posix.expects(:get_posix_field).with(:passwd, :name, 100)
187
+
188
+ @posix.uid(100)
189
+ end
190
+
191
+ it "should return nil if the group cannot be found" do
192
+ @posix.expects(:get_posix_field).once.returns nil
193
+ @posix.expects(:search_posix_field).never
194
+
195
+ @posix.uid(100).should be_nil
196
+ end
197
+
198
+ it "should use the found name to look up the id" do
199
+ @posix.expects(:get_posix_field).with(:passwd, :name, 100).returns "asdf"
200
+ @posix.expects(:get_posix_field).with(:passwd, :uid, "asdf").returns 100
201
+
202
+ @posix.uid(100).should == 100
203
+ end
204
+
205
+ # LAK: This is because some platforms have a broken Etc module that always return
206
+ # the same group.
207
+ it "should use :search_posix_field if the discovered id does not match the passed-in id" do
208
+ @posix.expects(:get_posix_field).with(:passwd, :name, 100).returns "asdf"
209
+ @posix.expects(:get_posix_field).with(:passwd, :uid, "asdf").returns 50
210
+
211
+ @posix.expects(:search_posix_field).with(:passwd, :uid, 100).returns "asdf"
212
+
213
+ @posix.uid(100).should == "asdf"
214
+ end
215
+ end
216
+
217
+ describe "and the group is a string" do
218
+ it "should look up the uid for the group" do
219
+ @posix.expects(:get_posix_field).with(:passwd, :uid, "asdf")
220
+
221
+ @posix.uid("asdf")
222
+ end
223
+
224
+ it "should return nil if the group cannot be found" do
225
+ @posix.expects(:get_posix_field).once.returns nil
226
+ @posix.expects(:search_posix_field).never
227
+
228
+ @posix.uid("asdf").should be_nil
229
+ end
230
+
231
+ it "should use the found uid to look up the nam" do
232
+ @posix.expects(:get_posix_field).with(:passwd, :uid, "asdf").returns 100
233
+ @posix.expects(:get_posix_field).with(:passwd, :name, 100).returns "asdf"
234
+
235
+ @posix.uid("asdf").should == 100
236
+ end
237
+
238
+ it "should use :search_posix_field if the discovered name does not match the passed-in name" do
239
+ @posix.expects(:get_posix_field).with(:passwd, :uid, "asdf").returns 100
240
+ @posix.expects(:get_posix_field).with(:passwd, :name, 100).returns "boo"
241
+
242
+ @posix.expects(:search_posix_field).with(:passwd, :uid, "asdf").returns "asdf"
243
+
244
+ @posix.uid("asdf").should == "asdf"
245
+ end
246
+ end
247
+ end
248
+
249
+ it "should be able to iteratively search for posix values" do
250
+ @posix.should respond_to(:search_posix_field)
251
+ end
252
+
253
+ describe "when searching for posix values iteratively" do
254
+ it "should iterate across all of the structs returned by Etc and return the appropriate field from the first matching value"
255
+ end
256
+ end