puppet 0.24.9 → 0.25.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 (910) hide show
  1. data/CHANGELOG +18680 -1241
  2. data/CHANGELOG.old +1705 -0
  3. data/LICENSE +2 -2
  4. data/README +1 -1
  5. data/README.queueing +126 -0
  6. data/README.rst +4 -4
  7. data/Rakefile +62 -216
  8. data/bin/filebucket +6 -117
  9. data/bin/pi +50 -0
  10. data/bin/puppet +7 -188
  11. data/bin/puppetdoc +7 -198
  12. data/bin/ralsh +4 -191
  13. data/conf/auth.conf +94 -0
  14. data/conf/gentoo/init.d/puppetmaster +30 -30
  15. data/conf/osx/PackageInfo.plist +30 -30
  16. data/conf/osx/createpackage.sh +23 -18
  17. data/conf/osx/preflight +8 -0
  18. data/conf/puppet-queue.conf +10 -0
  19. data/conf/redhat/client.init +52 -41
  20. data/conf/redhat/logrotate +1 -0
  21. data/conf/redhat/puppet.spec +74 -36
  22. data/conf/redhat/rundir-perms.patch +28 -0
  23. data/conf/redhat/server.init +48 -43
  24. data/conf/redhat/server.sysconfig +4 -4
  25. data/conf/solaris/smf/puppetd.xml +53 -53
  26. data/conf/solaris/smf/puppetmasterd.xml +53 -53
  27. data/conf/solaris/smf/svc-puppetd +4 -4
  28. data/conf/solaris/smf/svc-puppetmasterd +3 -3
  29. data/conf/suse/client.init +4 -4
  30. data/conf/suse/puppet.spec +14 -14
  31. data/conf/suse/server.init +17 -17
  32. data/examples/etc/init.d/sleeper +8 -8
  33. data/examples/mac_dscl.pp +2 -2
  34. data/examples/mac_dscl_revert.pp +1 -1
  35. data/examples/mcx_dock_default.pp +108 -108
  36. data/examples/mcx_dock_full.pp +108 -108
  37. data/examples/mcx_nogroup.pp +108 -108
  38. data/examples/modules/sample-module/lib/puppet/parser/functions/hostname_to_dn.rb +5 -5
  39. data/examples/modules/sample-module/manifests/init.pp +2 -2
  40. data/examples/relationships +1 -1
  41. data/ext/autotest/config +6 -6
  42. data/ext/bin/sleeper +12 -12
  43. data/ext/dbfix.sql +21 -21
  44. data/ext/emacs/puppet-mode.el +42 -41
  45. data/ext/extlookup.rb +183 -0
  46. data/ext/ldap/puppet.schema +2 -1
  47. data/ext/logcheck/puppet +1 -1
  48. data/ext/module_puppet +7 -7
  49. data/ext/nagios/check_puppet.rb +83 -83
  50. data/ext/nagios/naggen +302 -0
  51. data/ext/puppet-test +61 -18
  52. data/ext/puppetlisten/puppetlisten.rb +76 -0
  53. data/ext/puppetlisten/puppetrun.rb +39 -0
  54. data/ext/puppetstoredconfigclean.rb +29 -29
  55. data/ext/rack/README +73 -0
  56. data/ext/rack/files/apache2.conf +38 -0
  57. data/ext/rack/files/config.ru +18 -0
  58. data/ext/rack/manifest.pp +59 -0
  59. data/ext/vim/syntax/puppet.vim +54 -35
  60. data/install.rb +37 -26
  61. data/lib/puppet.rb +15 -227
  62. data/lib/puppet/agent.rb +134 -0
  63. data/lib/puppet/agent/locker.rb +42 -0
  64. data/lib/puppet/agent/runner.rb +65 -0
  65. data/lib/puppet/application.rb +313 -0
  66. data/lib/puppet/application/filebucket.rb +87 -0
  67. data/lib/puppet/application/pi.rb +214 -0
  68. data/lib/puppet/application/puppet.rb +177 -0
  69. data/lib/puppet/application/puppetca.rb +71 -0
  70. data/lib/puppet/application/puppetd.rb +256 -0
  71. data/lib/puppet/application/puppetdoc.rb +222 -0
  72. data/lib/puppet/application/puppetmasterd.rb +168 -0
  73. data/lib/puppet/application/puppetqd.rb +96 -0
  74. data/lib/puppet/application/puppetrun.rb +219 -0
  75. data/lib/puppet/application/ralsh.rb +168 -0
  76. data/lib/puppet/configurer.rb +177 -0
  77. data/lib/puppet/configurer/downloader.rb +79 -0
  78. data/lib/puppet/configurer/fact_handler.rb +68 -0
  79. data/lib/puppet/configurer/plugin_handler.rb +26 -0
  80. data/lib/puppet/daemon.rb +78 -28
  81. data/lib/puppet/defaults.rb +239 -166
  82. data/lib/puppet/dsl.rb +7 -7
  83. data/lib/puppet/external/dot.rb +271 -271
  84. data/lib/puppet/external/event-loop/better-definers.rb +298 -298
  85. data/lib/puppet/external/event-loop/event-loop.rb +274 -274
  86. data/lib/puppet/external/event-loop/signal-system.rb +163 -163
  87. data/lib/puppet/external/lock.rb +1 -1
  88. data/lib/puppet/external/nagios.rb +20 -20
  89. data/lib/puppet/external/nagios/base.rb +3 -3
  90. data/lib/puppet/external/nagios/grammar.ry +185 -0
  91. data/lib/puppet/external/nagios/makefile +9 -0
  92. data/lib/puppet/external/nagios/parser.rb +1 -1
  93. data/lib/puppet/feature/json.rb +2 -0
  94. data/lib/puppet/feature/rack.rb +24 -0
  95. data/lib/puppet/feature/rails.rb +23 -33
  96. data/lib/puppet/feature/rubygems.rb +6 -0
  97. data/lib/puppet/feature/stomp.rb +6 -0
  98. data/lib/puppet/file_serving/{file_base.rb → base.rb} +10 -9
  99. data/lib/puppet/file_serving/configuration.rb +61 -61
  100. data/lib/puppet/file_serving/configuration/parser.rb +24 -29
  101. data/lib/puppet/file_serving/content.rb +26 -11
  102. data/lib/puppet/file_serving/fileset.rb +54 -19
  103. data/lib/puppet/file_serving/indirection_hooks.rb +12 -24
  104. data/lib/puppet/file_serving/metadata.rb +8 -8
  105. data/lib/puppet/file_serving/mount.rb +9 -151
  106. data/lib/puppet/file_serving/mount/file.rb +126 -0
  107. data/lib/puppet/file_serving/mount/modules.rb +25 -0
  108. data/lib/puppet/file_serving/mount/plugins.rb +27 -0
  109. data/lib/puppet/file_serving/terminus_helper.rb +9 -4
  110. data/lib/puppet/indirector.rb +6 -4
  111. data/lib/puppet/indirector/active_record.rb +28 -0
  112. data/lib/puppet/indirector/catalog/active_record.rb +36 -0
  113. data/lib/puppet/indirector/catalog/compiler.rb +50 -24
  114. data/lib/puppet/indirector/catalog/queue.rb +5 -0
  115. data/lib/puppet/indirector/catalog/rest.rb +6 -0
  116. data/lib/puppet/indirector/catalog/yaml.rb +2 -4
  117. data/lib/puppet/indirector/certificate/ca.rb +9 -0
  118. data/lib/puppet/indirector/certificate/file.rb +9 -0
  119. data/lib/puppet/indirector/certificate/rest.rb +9 -0
  120. data/lib/puppet/indirector/certificate_request/ca.rb +14 -0
  121. data/lib/puppet/indirector/certificate_request/file.rb +8 -0
  122. data/lib/puppet/indirector/certificate_request/rest.rb +9 -0
  123. data/lib/puppet/indirector/certificate_revocation_list/ca.rb +8 -0
  124. data/lib/puppet/indirector/certificate_revocation_list/file.rb +8 -0
  125. data/lib/puppet/indirector/certificate_revocation_list/rest.rb +9 -0
  126. data/lib/puppet/indirector/direct_file_server.rb +4 -8
  127. data/lib/puppet/indirector/exec.rb +2 -6
  128. data/lib/puppet/indirector/facts/active_record.rb +36 -0
  129. data/lib/puppet/indirector/facts/facter.rb +30 -22
  130. data/lib/puppet/indirector/facts/rest.rb +6 -0
  131. data/lib/puppet/indirector/file.rb +1 -0
  132. data/lib/puppet/indirector/file_content/rest.rb +0 -1
  133. data/lib/puppet/indirector/file_metadata/file.rb +2 -2
  134. data/lib/puppet/indirector/file_metadata/rest.rb +0 -1
  135. data/lib/puppet/indirector/file_server.rb +31 -18
  136. data/lib/puppet/indirector/indirection.rb +46 -33
  137. data/lib/puppet/indirector/key/ca.rb +12 -0
  138. data/lib/puppet/indirector/key/file.rb +42 -0
  139. data/lib/puppet/indirector/node/active_record.rb +13 -0
  140. data/lib/puppet/indirector/node/ldap.rb +1 -1
  141. data/lib/puppet/indirector/queue.rb +83 -0
  142. data/lib/puppet/indirector/report/processor.rb +1 -1
  143. data/lib/puppet/indirector/report/rest.rb +7 -0
  144. data/lib/puppet/indirector/request.rb +158 -15
  145. data/lib/puppet/indirector/rest.rb +74 -36
  146. data/lib/puppet/indirector/runner/rest.rb +7 -0
  147. data/lib/puppet/indirector/ssl_file.rb +174 -0
  148. data/lib/puppet/indirector/terminus.rb +4 -4
  149. data/lib/puppet/indirector/yaml.rb +1 -1
  150. data/lib/puppet/metatype/manager.rb +3 -3
  151. data/lib/puppet/module.rb +99 -124
  152. data/lib/puppet/network/authconfig.rb +57 -42
  153. data/lib/puppet/network/authstore.rb +58 -10
  154. data/lib/puppet/network/client.rb +0 -2
  155. data/lib/puppet/network/client/ca.rb +1 -1
  156. data/lib/puppet/network/client/dipper.rb +7 -2
  157. data/lib/puppet/network/format.rb +123 -0
  158. data/lib/puppet/network/format_handler.rb +156 -0
  159. data/lib/puppet/network/formats.rb +123 -0
  160. data/lib/puppet/network/handler/filebucket.rb +1 -1
  161. data/lib/puppet/network/handler/fileserver.rb +43 -35
  162. data/lib/puppet/network/handler/master.rb +4 -4
  163. data/lib/puppet/network/handler/report.rb +1 -1
  164. data/lib/puppet/network/handler/resource.rb +16 -20
  165. data/lib/puppet/network/handler/runner.rb +9 -42
  166. data/lib/puppet/network/http.rb +4 -4
  167. data/lib/puppet/network/http/api.rb +4 -0
  168. data/lib/puppet/network/http/api/v1.rb +65 -0
  169. data/lib/puppet/network/http/handler.rb +163 -56
  170. data/lib/puppet/network/http/mongrel.rb +19 -15
  171. data/lib/puppet/network/http/mongrel/rest.rb +35 -17
  172. data/lib/puppet/network/http/rack.rb +62 -0
  173. data/lib/puppet/network/http/rack/httphandler.rb +34 -0
  174. data/lib/puppet/network/http/rack/rest.rb +79 -0
  175. data/lib/puppet/network/http/rack/xmlrpc.rb +65 -0
  176. data/lib/puppet/network/http/webrick.rb +89 -16
  177. data/lib/puppet/network/http/webrick/rest.rb +24 -11
  178. data/lib/puppet/network/http_pool.rb +28 -29
  179. data/lib/puppet/network/http_server/mongrel.rb +8 -10
  180. data/lib/puppet/network/http_server/webrick.rb +1 -3
  181. data/lib/puppet/network/rest_authconfig.rb +89 -0
  182. data/lib/puppet/network/rest_authorization.rb +25 -0
  183. data/lib/puppet/network/rights.rb +230 -27
  184. data/lib/puppet/network/server.rb +133 -31
  185. data/lib/puppet/network/xmlrpc/client.rb +5 -5
  186. data/lib/puppet/network/xmlrpc/webrick_servlet.rb +6 -6
  187. data/lib/puppet/node.rb +28 -21
  188. data/lib/puppet/node/environment.rb +48 -0
  189. data/lib/puppet/node/facts.rb +21 -0
  190. data/lib/puppet/parameter.rb +291 -219
  191. data/lib/puppet/parser/ast.rb +1 -0
  192. data/lib/puppet/parser/ast/astarray.rb +5 -1
  193. data/lib/puppet/parser/ast/boolean_operator.rb +3 -3
  194. data/lib/puppet/parser/ast/caseopt.rb +10 -0
  195. data/lib/puppet/parser/ast/casestatement.rb +12 -27
  196. data/lib/puppet/parser/ast/collection.rb +31 -0
  197. data/lib/puppet/parser/ast/collexpr.rb +18 -11
  198. data/lib/puppet/parser/ast/comparison_operator.rb +1 -1
  199. data/lib/puppet/parser/ast/definition.rb +6 -2
  200. data/lib/puppet/parser/ast/function.rb +7 -2
  201. data/lib/puppet/parser/ast/ifstatement.rb +11 -6
  202. data/lib/puppet/parser/ast/leaf.rb +106 -3
  203. data/lib/puppet/parser/ast/match_operator.rb +31 -0
  204. data/lib/puppet/parser/ast/node.rb +10 -6
  205. data/lib/puppet/parser/ast/resource_defaults.rb +2 -2
  206. data/lib/puppet/parser/ast/resource_override.rb +1 -1
  207. data/lib/puppet/parser/ast/resource_reference.rb +11 -3
  208. data/lib/puppet/parser/ast/selector.rb +14 -32
  209. data/lib/puppet/parser/ast/vardef.rb +1 -1
  210. data/lib/puppet/parser/collector.rb +67 -15
  211. data/lib/puppet/parser/compiler.rb +21 -53
  212. data/lib/puppet/parser/files.rb +92 -0
  213. data/lib/puppet/parser/functions.rb +3 -3
  214. data/lib/puppet/parser/functions/defined.rb +3 -3
  215. data/lib/puppet/parser/functions/fqdn_rand.rb +3 -3
  216. data/lib/puppet/parser/functions/inline_template.rb +4 -4
  217. data/lib/puppet/parser/functions/regsubst.rb +37 -35
  218. data/lib/puppet/parser/functions/require.rb +34 -0
  219. data/lib/puppet/parser/functions/shellquote.rb +41 -0
  220. data/lib/puppet/parser/functions/split.rb +29 -0
  221. data/lib/puppet/parser/functions/sprintf.rb +6 -6
  222. data/lib/puppet/parser/functions/template.rb +4 -4
  223. data/lib/puppet/parser/functions/versioncmp.rb +22 -1
  224. data/lib/puppet/parser/grammar.ra +812 -0
  225. data/lib/puppet/parser/interpreter.rb +4 -4
  226. data/lib/puppet/parser/lexer.rb +44 -15
  227. data/lib/puppet/parser/loaded_code.rb +115 -0
  228. data/lib/puppet/parser/makefile +8 -0
  229. data/lib/puppet/parser/parser.rb +1080 -928
  230. data/lib/puppet/parser/parser_support.rb +118 -96
  231. data/lib/puppet/parser/resource.rb +56 -126
  232. data/lib/puppet/parser/resource/param.rb +2 -76
  233. data/lib/puppet/parser/resource/reference.rb +15 -8
  234. data/lib/puppet/parser/scope.rb +68 -35
  235. data/lib/puppet/parser/templatewrapper.rb +8 -8
  236. data/lib/puppet/parser/yaml_trimmer.rb +11 -0
  237. data/lib/puppet/property.rb +69 -124
  238. data/lib/puppet/property/list.rb +3 -3
  239. data/lib/puppet/provider.rb +5 -5
  240. data/lib/puppet/provider/augeas/augeas.rb +119 -118
  241. data/lib/puppet/provider/computer/computer.rb +3 -3
  242. data/lib/puppet/provider/confine/variable.rb +1 -1
  243. data/lib/puppet/provider/cron/crontab.rb +8 -7
  244. data/lib/puppet/provider/group/directoryservice.rb +2 -2
  245. data/lib/puppet/provider/group/groupadd.rb +1 -1
  246. data/lib/puppet/provider/group/ldap.rb +3 -3
  247. data/lib/puppet/provider/group/pw.rb +1 -1
  248. data/lib/puppet/provider/host/parsed.rb +3 -3
  249. data/lib/puppet/provider/ldap.rb +1 -3
  250. data/lib/puppet/provider/macauthorization/macauthorization.rb +62 -55
  251. data/lib/puppet/provider/mailalias/aliases.rb +9 -1
  252. data/lib/puppet/provider/maillist/mailman.rb +8 -4
  253. data/lib/puppet/provider/mcx/mcxcontent.rb +11 -11
  254. data/lib/puppet/provider/mount/parsed.rb +2 -2
  255. data/lib/puppet/provider/nameservice.rb +6 -6
  256. data/lib/puppet/provider/nameservice/directoryservice.rb +83 -87
  257. data/lib/puppet/provider/package/appdmg.rb +10 -9
  258. data/lib/puppet/provider/package/apple.rb +1 -3
  259. data/lib/puppet/provider/package/apt.rb +5 -5
  260. data/lib/puppet/provider/package/aptitude.rb +1 -1
  261. data/lib/puppet/provider/package/aptrpm.rb +1 -1
  262. data/lib/puppet/provider/package/darwinport.rb +1 -1
  263. data/lib/puppet/provider/package/dpkg.rb +2 -2
  264. data/lib/puppet/provider/package/fink.rb +6 -6
  265. data/lib/puppet/provider/package/freebsd.rb +1 -1
  266. data/lib/puppet/provider/package/gem.rb +2 -2
  267. data/lib/puppet/provider/package/hpux.rb +5 -5
  268. data/lib/puppet/provider/package/pkgdmg.rb +30 -22
  269. data/lib/puppet/provider/package/portage.rb +1 -1
  270. data/lib/puppet/provider/package/ports.rb +1 -1
  271. data/lib/puppet/provider/package/rpm.rb +5 -5
  272. data/lib/puppet/provider/package/rug.rb +1 -1
  273. data/lib/puppet/provider/package/sun.rb +7 -7
  274. data/lib/puppet/provider/package/up2date.rb +1 -1
  275. data/lib/puppet/provider/package/yum.rb +2 -2
  276. data/lib/puppet/provider/package/yumhelper.py +2 -2
  277. data/lib/puppet/provider/port/parsed.rb +1 -1
  278. data/lib/puppet/provider/selmodule/semodule.rb +3 -3
  279. data/lib/puppet/provider/service/base.rb +21 -12
  280. data/lib/puppet/provider/service/daemontools.rb +86 -49
  281. data/lib/puppet/provider/service/debian.rb +20 -12
  282. data/lib/puppet/provider/service/freebsd.rb +5 -5
  283. data/lib/puppet/provider/service/gentoo.rb +2 -2
  284. data/lib/puppet/provider/service/init.rb +21 -33
  285. data/lib/puppet/provider/service/launchd.rb +120 -48
  286. data/lib/puppet/provider/service/redhat.rb +12 -21
  287. data/lib/puppet/provider/service/runit.rb +19 -9
  288. data/lib/puppet/provider/service/smf.rb +49 -34
  289. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +34 -0
  290. data/lib/puppet/provider/sshkey/parsed.rb +2 -2
  291. data/lib/puppet/provider/user/directoryservice.rb +12 -29
  292. data/lib/puppet/provider/user/hpux.rb +3 -3
  293. data/lib/puppet/provider/user/ldap.rb +2 -2
  294. data/lib/puppet/provider/zfs/solaris.rb +1 -1
  295. data/lib/puppet/provider/zone/solaris.rb +4 -4
  296. data/lib/puppet/provider/zpool/solaris.rb +3 -3
  297. data/lib/puppet/rails.rb +9 -9
  298. data/lib/puppet/rails/benchmark.rb +69 -0
  299. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +5 -5
  300. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +2 -2
  301. data/lib/puppet/rails/database/003_add_environment_to_host.rb +1 -1
  302. data/lib/puppet/rails/database/schema.rb +8 -8
  303. data/lib/puppet/rails/fact_value.rb +1 -1
  304. data/lib/puppet/rails/host.rb +211 -93
  305. data/lib/puppet/rails/param_name.rb +5 -1
  306. data/lib/puppet/rails/param_value.rb +29 -2
  307. data/lib/puppet/rails/puppet_tag.rb +5 -0
  308. data/lib/puppet/rails/resource.rb +120 -20
  309. data/lib/puppet/rails/resource_tag.rb +1 -1
  310. data/lib/puppet/rails/source_file.rb +1 -1
  311. data/lib/puppet/reference/configuration.rb +14 -14
  312. data/lib/puppet/reference/function.rb +1 -1
  313. data/lib/puppet/reference/metaparameter.rb +48 -0
  314. data/lib/puppet/reference/providers.rb +6 -6
  315. data/lib/puppet/reference/type.rb +1 -37
  316. data/lib/puppet/relationship.rb +57 -30
  317. data/lib/puppet/reports/rrdgraph.rb +4 -4
  318. data/lib/puppet/reports/store.rb +3 -3
  319. data/lib/puppet/reports/tagmail.rb +15 -15
  320. data/lib/puppet/resource.rb +265 -0
  321. data/lib/puppet/{node → resource}/catalog.rb +188 -112
  322. data/lib/puppet/{resource_reference.rb → resource/reference.rb} +46 -24
  323. data/lib/puppet/simple_graph.rb +165 -27
  324. data/lib/puppet/ssl.rb +7 -0
  325. data/lib/puppet/ssl/base.rb +62 -0
  326. data/lib/puppet/ssl/certificate.rb +34 -0
  327. data/lib/puppet/ssl/certificate_authority.rb +298 -0
  328. data/lib/puppet/ssl/certificate_authority/interface.rb +118 -0
  329. data/lib/puppet/ssl/certificate_factory.rb +145 -0
  330. data/lib/puppet/ssl/certificate_request.rb +51 -0
  331. data/lib/puppet/ssl/certificate_revocation_list.rb +86 -0
  332. data/lib/puppet/ssl/host.rb +271 -0
  333. data/lib/puppet/ssl/inventory.rb +52 -0
  334. data/lib/puppet/ssl/key.rb +56 -0
  335. data/lib/puppet/sslcertificates.rb +6 -6
  336. data/lib/puppet/sslcertificates/ca.rb +15 -15
  337. data/lib/puppet/sslcertificates/certificate.rb +4 -4
  338. data/lib/puppet/sslcertificates/inventory.rb +3 -3
  339. data/lib/puppet/transaction.rb +113 -139
  340. data/lib/puppet/transaction/change.rb +6 -6
  341. data/lib/puppet/transaction/event.rb +1 -1
  342. data/lib/puppet/transaction/report.rb +7 -1
  343. data/lib/puppet/transportable.rb +28 -28
  344. data/lib/puppet/type.rb +263 -688
  345. data/lib/puppet/type/augeas.rb +3 -2
  346. data/lib/puppet/type/component.rb +28 -95
  347. data/lib/puppet/type/computer.rb +10 -10
  348. data/lib/puppet/type/cron.rb +19 -14
  349. data/lib/puppet/type/exec.rb +21 -20
  350. data/lib/puppet/type/file.rb +306 -633
  351. data/lib/puppet/type/file/checksum.rb +10 -11
  352. data/lib/puppet/type/file/content.rb +83 -22
  353. data/lib/puppet/type/file/ensure.rb +15 -9
  354. data/lib/puppet/type/file/group.rb +7 -1
  355. data/lib/puppet/type/file/mode.rb +1 -1
  356. data/lib/puppet/type/file/owner.rb +9 -3
  357. data/lib/puppet/type/file/selcontext.rb +4 -4
  358. data/lib/puppet/type/file/source.rb +78 -179
  359. data/lib/puppet/type/file/target.rb +3 -3
  360. data/lib/puppet/type/file/type.rb +2 -2
  361. data/lib/puppet/type/filebucket.rb +33 -54
  362. data/lib/puppet/type/group.rb +8 -8
  363. data/lib/puppet/type/host.rb +7 -7
  364. data/lib/puppet/type/k5login.rb +2 -2
  365. data/lib/puppet/type/macauthorization.rb +77 -52
  366. data/lib/puppet/type/mailalias.rb +2 -2
  367. data/lib/puppet/type/maillist.rb +2 -2
  368. data/lib/puppet/type/mcx.rb +3 -3
  369. data/lib/puppet/type/mount.rb +16 -11
  370. data/lib/puppet/type/notify.rb +4 -4
  371. data/lib/puppet/type/package.rb +6 -28
  372. data/lib/puppet/type/port.rb +1 -1
  373. data/lib/puppet/type/resources.rb +19 -19
  374. data/lib/puppet/type/schedule.rb +18 -20
  375. data/lib/puppet/type/selmodule.rb +1 -1
  376. data/lib/puppet/type/service.rb +11 -7
  377. data/lib/puppet/type/ssh_authorized_key.rb +26 -9
  378. data/lib/puppet/type/sshkey.rb +2 -2
  379. data/lib/puppet/type/tidy.rb +285 -289
  380. data/lib/puppet/type/user.rb +9 -7
  381. data/lib/puppet/type/yumrepo.rb +17 -16
  382. data/lib/puppet/type/zone.rb +8 -7
  383. data/lib/puppet/util.rb +11 -36
  384. data/lib/puppet/util/autoload.rb +31 -19
  385. data/lib/puppet/util/autoload/file_cache.rb +115 -0
  386. data/lib/puppet/util/backups.rb +86 -0
  387. data/lib/puppet/util/cacher.rb +135 -0
  388. data/lib/puppet/util/checksums.rb +11 -1
  389. data/lib/puppet/util/classgen.rb +1 -1
  390. data/lib/puppet/util/config_store.rb +2 -2
  391. data/lib/puppet/util/constant_inflector.rb +1 -1
  392. data/lib/puppet/util/diff.rb +2 -2
  393. data/lib/puppet/util/docs.rb +9 -3
  394. data/lib/puppet/util/execution.rb +1 -1
  395. data/lib/puppet/util/feature.rb +27 -20
  396. data/lib/puppet/util/fileparsing.rb +3 -3
  397. data/lib/puppet/util/filetype.rb +8 -6
  398. data/lib/puppet/util/graph.rb +5 -5
  399. data/lib/puppet/util/inifile.rb +5 -5
  400. data/lib/puppet/util/json.rb +13 -0
  401. data/lib/puppet/util/ldap/connection.rb +2 -2
  402. data/lib/puppet/util/log.rb +48 -31
  403. data/lib/puppet/util/metric.rb +4 -4
  404. data/lib/puppet/util/monkey_patches.rb +43 -0
  405. data/lib/puppet/util/nagios_maker.rb +1 -1
  406. data/lib/puppet/util/package.rb +4 -4
  407. data/lib/puppet/util/pidlock.rb +59 -59
  408. data/lib/puppet/util/posix.rb +13 -52
  409. data/lib/puppet/util/provider_features.rb +3 -3
  410. data/lib/puppet/util/queue.rb +96 -0
  411. data/lib/puppet/util/queue/stomp.rb +47 -0
  412. data/lib/puppet/util/rails/cache_accumulator.rb +65 -0
  413. data/lib/puppet/util/rails/collection_merger.rb +0 -39
  414. data/lib/puppet/util/rails/reference_serializer.rb +17 -3
  415. data/lib/puppet/util/rdoc.rb +1 -0
  416. data/lib/puppet/util/rdoc/code_objects.rb +5 -1
  417. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +5 -5
  418. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +13 -13
  419. data/lib/puppet/util/rdoc/parser.rb +28 -32
  420. data/lib/puppet/util/reference.rb +29 -8
  421. data/lib/puppet/util/resource_template.rb +1 -1
  422. data/lib/puppet/util/selinux.rb +12 -6
  423. data/lib/puppet/util/settings.rb +203 -578
  424. data/lib/puppet/util/settings/boolean_setting.rb +33 -0
  425. data/lib/puppet/util/settings/file_setting.rb +119 -0
  426. data/lib/puppet/util/settings/setting.rb +110 -0
  427. data/lib/puppet/util/subclass_loader.rb +1 -1
  428. data/lib/puppet/util/suidmanager.rb +2 -2
  429. data/lib/puppet/util/tagging.rb +1 -1
  430. data/lib/puppet/util/warnings.rb +17 -9
  431. data/man/man8/filebucket.8 +2 -2
  432. data/man/man8/pi.8 +2 -2
  433. data/man/man8/puppet.8 +3 -4
  434. data/man/man8/puppet.conf.8 +63 -63
  435. data/man/man8/puppetca.8 +2 -2
  436. data/man/man8/puppetd.8 +2 -2
  437. data/man/man8/puppetdoc.8 +2 -2
  438. data/man/man8/puppetmasterd.8 +2 -2
  439. data/man/man8/puppetrun.8 +2 -2
  440. data/man/man8/ralsh.8 +3 -3
  441. data/sbin/puppetca +102 -0
  442. data/sbin/puppetd +159 -0
  443. data/sbin/puppetmasterd +66 -0
  444. data/sbin/puppetqd +53 -0
  445. data/sbin/puppetrun +130 -0
  446. data/spec/Rakefile +2 -2
  447. data/spec/integration/application/puppet.rb +33 -0
  448. data/spec/integration/bin/puppetmasterd.rb +110 -0
  449. data/spec/integration/configurer.rb +18 -0
  450. data/spec/integration/defaults.rb +158 -7
  451. data/spec/integration/file_serving/content.rb +2 -0
  452. data/spec/integration/file_serving/fileset.rb +14 -0
  453. data/spec/integration/file_serving/metadata.rb +2 -0
  454. data/spec/integration/file_serving/terminus_helper.rb +22 -0
  455. data/spec/integration/indirector/catalog/compiler.rb +67 -0
  456. data/spec/integration/indirector/catalog/queue.rb +61 -0
  457. data/spec/integration/indirector/certificate/rest.rb +69 -0
  458. data/spec/integration/indirector/certificate_request/rest.rb +89 -0
  459. data/spec/integration/indirector/certificate_revocation_list/rest.rb +77 -0
  460. data/spec/integration/indirector/direct_file_server.rb +16 -23
  461. data/spec/integration/indirector/file_content/file_server.rb +75 -0
  462. data/spec/integration/indirector/report/rest.rb +95 -0
  463. data/spec/integration/indirector/rest.rb +207 -147
  464. data/spec/integration/network/client.rb +19 -0
  465. data/spec/integration/network/formats.rb +110 -0
  466. data/spec/integration/network/handler.rb +25 -0
  467. data/spec/integration/network/server/mongrel.rb +26 -8
  468. data/spec/integration/network/server/webrick.rb +49 -11
  469. data/spec/integration/node/environment.rb +58 -0
  470. data/spec/integration/node/facts.rb +4 -2
  471. data/spec/integration/parser/compiler.rb +29 -0
  472. data/spec/integration/parser/functions/require.rb +67 -0
  473. data/spec/integration/provider/mailalias/aliases.rb +25 -0
  474. data/spec/integration/{node → resource}/catalog.rb +17 -10
  475. data/spec/integration/ssl/certificate_authority.rb +135 -0
  476. data/spec/integration/ssl/certificate_request.rb +59 -0
  477. data/spec/integration/ssl/certificate_revocation_list.rb +42 -0
  478. data/spec/integration/ssl/host.rb +90 -0
  479. data/spec/integration/transaction.rb +66 -0
  480. data/spec/integration/transaction/report.rb +2 -5
  481. data/spec/integration/type.rb +22 -0
  482. data/spec/integration/type/file.rb +458 -0
  483. data/spec/integration/type/package.rb +1 -1
  484. data/spec/integration/type/tidy.rb +27 -0
  485. data/spec/integration/util/autoload.rb +114 -0
  486. data/spec/integration/util/feature.rb +54 -0
  487. data/spec/integration/util/file_locking.rb +2 -1
  488. data/spec/integration/util/settings.rb +27 -0
  489. data/spec/lib/puppet_spec/files.rb +9 -0
  490. data/spec/monkey_patches/add_confine_and_runnable_to_rspec_dsl.rb +1 -0
  491. data/spec/monkey_patches/alias_should_to_must.rb +1 -0
  492. data/spec/shared_behaviours/file_server_terminus.rb +14 -11
  493. data/spec/shared_behaviours/file_serving.rb +13 -17
  494. data/spec/spec_helper.rb +22 -5
  495. data/spec/unit/agent.rb +259 -0
  496. data/spec/unit/agent/locker.rb +100 -0
  497. data/spec/unit/agent/runner.rb +118 -0
  498. data/spec/unit/application.rb +420 -0
  499. data/spec/unit/application/filebucket.rb +220 -0
  500. data/spec/unit/application/pi.rb +84 -0
  501. data/spec/unit/application/puppet.rb +404 -0
  502. data/spec/unit/application/puppetca.rb +142 -0
  503. data/spec/unit/application/puppetd.rb +502 -0
  504. data/spec/unit/application/puppetdoc.rb +345 -0
  505. data/spec/unit/application/puppetmasterd.rb +456 -0
  506. data/spec/unit/application/puppetqd.rb +186 -0
  507. data/spec/unit/application/puppetrun.rb +279 -0
  508. data/spec/unit/application/ralsh.rb +237 -0
  509. data/spec/unit/configurer.rb +232 -0
  510. data/spec/unit/configurer/downloader.rb +188 -0
  511. data/spec/unit/configurer/fact_handler.rb +150 -0
  512. data/spec/unit/configurer/plugin_handler.rb +112 -0
  513. data/spec/unit/daemon.rb +287 -0
  514. data/spec/unit/file_serving/{file_base.rb → base.rb} +39 -31
  515. data/spec/unit/file_serving/configuration.rb +104 -93
  516. data/spec/unit/file_serving/configuration/parser.rb +64 -18
  517. data/spec/unit/file_serving/content.rb +65 -26
  518. data/spec/unit/file_serving/fileset.rb +116 -14
  519. data/spec/unit/file_serving/indirection_hooks.rb +34 -95
  520. data/spec/unit/file_serving/metadata.rb +27 -40
  521. data/spec/unit/file_serving/mount.rb +7 -118
  522. data/spec/unit/file_serving/mount/file.rb +188 -0
  523. data/spec/unit/file_serving/mount/modules.rb +63 -0
  524. data/spec/unit/file_serving/mount/plugins.rb +61 -0
  525. data/spec/unit/file_serving/terminus_helper.rb +39 -27
  526. data/spec/unit/indirector.rb +6 -1
  527. data/spec/unit/indirector/active_record.rb +76 -0
  528. data/spec/unit/indirector/catalog/active_record.rb +122 -0
  529. data/spec/unit/indirector/catalog/compiler.rb +222 -118
  530. data/spec/unit/indirector/catalog/queue.rb +20 -0
  531. data/spec/unit/indirector/catalog/rest.rb +11 -0
  532. data/spec/unit/indirector/catalog/yaml.rb +6 -6
  533. data/spec/unit/indirector/certificate/ca.rb +28 -0
  534. data/spec/unit/indirector/certificate/file.rb +28 -0
  535. data/spec/unit/indirector/certificate/rest.rb +23 -0
  536. data/spec/unit/indirector/certificate_request/ca.rb +19 -0
  537. data/spec/unit/indirector/certificate_request/file.rb +19 -0
  538. data/spec/unit/indirector/certificate_request/rest.rb +23 -0
  539. data/spec/unit/indirector/certificate_revocation_list/ca.rb +21 -0
  540. data/spec/unit/indirector/certificate_revocation_list/file.rb +20 -0
  541. data/spec/unit/indirector/certificate_revocation_list/rest.rb +23 -0
  542. data/spec/unit/indirector/direct_file_server.rb +3 -8
  543. data/spec/unit/indirector/exec.rb +6 -1
  544. data/spec/unit/indirector/facts/active_record.rb +104 -0
  545. data/spec/unit/indirector/facts/facter.rb +53 -12
  546. data/spec/unit/indirector/facts/rest.rb +11 -0
  547. data/spec/unit/indirector/file.rb +8 -1
  548. data/spec/unit/indirector/file_metadata/file.rb +5 -5
  549. data/spec/unit/indirector/file_server.rb +181 -98
  550. data/spec/unit/indirector/indirection.rb +102 -38
  551. data/spec/unit/indirector/key/ca.rb +28 -0
  552. data/spec/unit/indirector/key/file.rb +104 -0
  553. data/spec/unit/indirector/node/active_record.rb +34 -0
  554. data/spec/unit/indirector/node/ldap.rb +1 -1
  555. data/spec/unit/indirector/node/rest.rb +2 -2
  556. data/spec/unit/indirector/queue.rb +123 -0
  557. data/spec/unit/indirector/report/rest.rb +28 -0
  558. data/spec/unit/indirector/request.rb +221 -0
  559. data/spec/unit/indirector/rest.rb +343 -334
  560. data/spec/unit/indirector/runner/rest.rb +11 -0
  561. data/spec/unit/indirector/ssl_file.rb +280 -0
  562. data/spec/unit/module.rb +180 -180
  563. data/spec/unit/network/authconfig.rb +292 -0
  564. data/spec/unit/network/authstore.rb +94 -0
  565. data/spec/unit/network/client.rb +2 -2
  566. data/spec/unit/network/client/dipper.rb +16 -0
  567. data/spec/unit/network/format.rb +191 -0
  568. data/spec/unit/network/format_handler.rb +306 -0
  569. data/spec/unit/network/formats.rb +249 -0
  570. data/spec/unit/network/handler/fileserver.rb +2 -5
  571. data/spec/unit/network/http.rb +3 -3
  572. data/spec/unit/network/http/api/v1.rb +122 -0
  573. data/spec/unit/network/http/handler.rb +448 -0
  574. data/spec/unit/network/http/mongrel.rb +46 -32
  575. data/spec/unit/network/http/mongrel/rest.rb +174 -319
  576. data/spec/unit/network/http/rack.rb +102 -0
  577. data/spec/unit/network/http/rack/rest.rb +199 -0
  578. data/spec/unit/network/http/rack/xmlrpc.rb +157 -0
  579. data/spec/unit/network/http/webrick.rb +249 -37
  580. data/spec/unit/network/http/webrick/rest.rb +113 -279
  581. data/spec/unit/network/http_pool.rb +86 -110
  582. data/spec/unit/network/rest_authconfig.rb +146 -0
  583. data/spec/unit/network/rest_authorization.rb +43 -0
  584. data/spec/unit/network/rights.rb +519 -0
  585. data/spec/unit/network/server.rb +475 -257
  586. data/spec/unit/node.rb +43 -10
  587. data/spec/unit/node/environment.rb +143 -9
  588. data/spec/unit/node/facts.rb +77 -24
  589. data/spec/unit/other/selinux.rb +85 -0
  590. data/spec/unit/other/transbucket.rb +29 -13
  591. data/spec/unit/other/transobject.rb +35 -15
  592. data/spec/unit/parameter.rb +378 -5
  593. data/spec/unit/parser/ast.rb +1 -1
  594. data/spec/unit/parser/ast/arithmetic_operator.rb +17 -17
  595. data/spec/unit/parser/ast/astarray.rb +16 -10
  596. data/spec/unit/parser/ast/boolean_operator.rb +2 -2
  597. data/spec/unit/parser/ast/casestatement.rb +143 -0
  598. data/spec/unit/parser/ast/collection.rb +63 -0
  599. data/spec/unit/parser/ast/collexpr.rb +31 -8
  600. data/spec/unit/parser/ast/comparison_operator.rb +9 -9
  601. data/spec/unit/parser/ast/definition.rb +18 -0
  602. data/spec/unit/parser/ast/function.rb +6 -0
  603. data/spec/unit/parser/ast/ifstatement.rb +75 -0
  604. data/spec/unit/parser/ast/leaf.rb +261 -0
  605. data/spec/unit/parser/ast/match_operator.rb +50 -0
  606. data/spec/unit/parser/ast/minus.rb +1 -1
  607. data/spec/unit/parser/ast/node.rb +20 -0
  608. data/spec/unit/parser/ast/not.rb +1 -1
  609. data/spec/unit/parser/ast/resource_override.rb +5 -5
  610. data/spec/unit/parser/ast/resource_reference.rb +11 -5
  611. data/spec/unit/parser/ast/selector.rb +156 -0
  612. data/spec/unit/parser/ast/vardef.rb +11 -11
  613. data/spec/unit/parser/collector.rb +167 -48
  614. data/spec/unit/parser/compiler.rb +128 -104
  615. data/spec/unit/parser/files.rb +190 -0
  616. data/spec/unit/parser/functions/inline_template.rb +0 -0
  617. data/spec/unit/parser/functions/regsubst.rb +42 -42
  618. data/spec/unit/parser/functions/require.rb +36 -0
  619. data/spec/unit/parser/functions/shellquote.rb +92 -0
  620. data/spec/unit/parser/functions/split.rb +51 -0
  621. data/spec/unit/parser/functions/sprintf.rb +11 -11
  622. data/spec/unit/parser/functions/template.rb +0 -0
  623. data/spec/unit/parser/functions/versioncmp.rb +2 -2
  624. data/spec/unit/parser/interpreter.rb +16 -7
  625. data/spec/unit/parser/lexer.rb +72 -12
  626. data/spec/unit/parser/loaded_code.rb +198 -0
  627. data/spec/unit/parser/parser.rb +215 -28
  628. data/spec/unit/parser/resource.rb +131 -22
  629. data/spec/unit/parser/scope.rb +207 -12
  630. data/spec/unit/parser/templatewrapper.rb +8 -3
  631. data/spec/unit/property.rb +270 -16
  632. data/spec/unit/property/list.rb +12 -6
  633. data/spec/unit/provider.rb +31 -0
  634. data/spec/unit/provider/augeas/augeas.rb +61 -33
  635. data/spec/unit/provider/macauthorization.rb +29 -29
  636. data/spec/unit/provider/mcx/mcxcontent.rb +4 -4
  637. data/spec/unit/provider/mount/parsed.rb +5 -8
  638. data/spec/unit/provider/naginator.rb +0 -0
  639. data/spec/unit/provider/package/apt.rb +6 -6
  640. data/spec/unit/provider/package/pkgdmg.rb +73 -0
  641. data/spec/unit/provider/selboolean.rb +1 -1
  642. data/spec/unit/provider/selmodule.rb +2 -2
  643. data/spec/unit/provider/service/daemontools.rb +40 -15
  644. data/spec/unit/provider/service/debian.rb +89 -0
  645. data/spec/unit/provider/service/init.rb +106 -0
  646. data/spec/unit/provider/service/launchd.rb +71 -13
  647. data/spec/unit/provider/service/redhat.rb +94 -0
  648. data/spec/unit/provider/service/runit.rb +14 -2
  649. data/spec/unit/provider/ssh_authorized_key/parsed.rb +66 -2
  650. data/spec/unit/provider/user/ldap.rb +1 -1
  651. data/spec/unit/provider/user/user_role_add.rb +1 -1
  652. data/spec/unit/provider/zfs/solaris.rb +18 -6
  653. data/spec/unit/provider/zone/solaris.rb +1 -1
  654. data/spec/unit/rails.rb +16 -22
  655. data/spec/unit/rails/host.rb +163 -0
  656. data/spec/unit/rails/param_value.rb +49 -0
  657. data/spec/unit/rails/resource.rb +87 -0
  658. data/spec/unit/relationship.rb +141 -29
  659. data/spec/unit/resource.rb +504 -0
  660. data/spec/unit/resource/catalog.rb +1061 -0
  661. data/spec/unit/resource/reference.rb +111 -0
  662. data/spec/unit/simple_graph.rb +448 -191
  663. data/spec/unit/ssl/certificate.rb +124 -0
  664. data/spec/unit/ssl/certificate_authority.rb +741 -0
  665. data/spec/unit/ssl/certificate_authority/interface.rb +269 -0
  666. data/spec/unit/ssl/certificate_factory.rb +107 -0
  667. data/spec/unit/ssl/certificate_request.rb +193 -0
  668. data/spec/unit/ssl/certificate_revocation_list.rb +180 -0
  669. data/spec/unit/ssl/host.rb +704 -0
  670. data/spec/unit/ssl/inventory.rb +180 -0
  671. data/spec/unit/ssl/key.rb +198 -0
  672. data/spec/unit/transaction.rb +65 -2
  673. data/spec/unit/transaction/change.rb +1 -1
  674. data/spec/unit/transaction/report.rb +1 -1
  675. data/spec/unit/type.rb +361 -8
  676. data/spec/unit/type/augeas.rb +30 -37
  677. data/spec/unit/type/component.rb +63 -0
  678. data/spec/unit/type/computer.rb +17 -21
  679. data/spec/unit/type/exec.rb +27 -2
  680. data/spec/unit/type/file.rb +704 -83
  681. data/spec/unit/type/file/content.rb +253 -15
  682. data/spec/unit/type/file/ensure.rb +65 -2
  683. data/spec/unit/type/file/group.rb +5 -0
  684. data/spec/unit/type/file/owner.rb +5 -0
  685. data/spec/unit/type/file/selinux.rb +12 -16
  686. data/spec/unit/type/file/source.rb +264 -0
  687. data/spec/unit/type/filebucket.rb +74 -0
  688. data/spec/unit/type/group.rb +1 -5
  689. data/spec/unit/type/macauthorization.rb +59 -26
  690. data/spec/unit/type/mcx.rb +8 -16
  691. data/spec/unit/type/mount.rb +8 -16
  692. data/spec/unit/type/noop_metaparam.rb +0 -2
  693. data/spec/unit/type/package.rb +13 -23
  694. data/spec/unit/type/resources.rb +4 -7
  695. data/spec/unit/type/schedule.rb +1 -7
  696. data/spec/unit/type/selboolean.rb +4 -6
  697. data/spec/unit/type/service.rb +23 -33
  698. data/spec/unit/type/ssh_authorized_key.rb +25 -14
  699. data/spec/unit/type/tidy.rb +329 -21
  700. data/spec/unit/type/user.rb +18 -10
  701. data/spec/unit/type/zfs.rb +6 -6
  702. data/spec/unit/util/autoload.rb +94 -3
  703. data/spec/unit/util/autoload/file_cache.rb +183 -0
  704. data/spec/unit/util/backups.rb +159 -0
  705. data/spec/unit/util/cache_accumulator.rb +69 -0
  706. data/spec/unit/util/cacher.rb +185 -0
  707. data/spec/unit/util/checksums.rb +9 -1
  708. data/spec/unit/util/feature.rb +72 -0
  709. data/spec/unit/util/filetype.rb +1 -11
  710. data/spec/unit/util/json.rb +21 -0
  711. data/spec/unit/util/log.rb +45 -0
  712. data/spec/unit/util/package.rb +2 -2
  713. data/spec/unit/util/queue.rb +88 -0
  714. data/spec/unit/util/queue/stomp.rb +140 -0
  715. data/spec/unit/util/reference_serializer.rb +52 -0
  716. data/spec/unit/util/selinux.rb +5 -3
  717. data/spec/unit/util/settings.rb +413 -264
  718. data/spec/unit/util/settings/file_setting.rb +223 -0
  719. data/spec/unit/util/storage.rb +11 -11
  720. data/spec/unit/util/warnings.rb +21 -17
  721. data/test/Rakefile +6 -5
  722. data/test/certmgr/ca.rb +5 -5
  723. data/test/certmgr/certmgr.rb +4 -4
  724. data/test/data/providers/cron/crontab.allthree +2 -2
  725. data/test/data/providers/cron/crontab.envNcomment +1 -1
  726. data/test/data/providers/cron/crontab.envNname +1 -1
  727. data/test/data/providers/cron/crontab.multirecords +1 -1
  728. data/test/data/providers/cron/crontab_collections.yaml +14 -14
  729. data/test/data/providers/cron/crontab_multiple_with_env.yaml +6 -6
  730. data/test/data/providers/cron/crontab_sample_records.yaml +102 -102
  731. data/test/data/providers/mailalias/aliases/test1 +28 -0
  732. data/test/data/providers/package/testpackages.yaml +6 -6
  733. data/test/data/reports/1.yaml +17 -17
  734. data/test/data/reports/tagmail_passers.conf +2 -2
  735. data/test/data/snippets/append.pp +5 -5
  736. data/test/data/snippets/casestatement.pp +9 -2
  737. data/test/data/snippets/classincludes.pp +1 -1
  738. data/test/data/snippets/collection_override.pp +8 -0
  739. data/test/data/snippets/fqparents.pp +2 -2
  740. data/test/data/snippets/ifexpression.pp +12 -0
  741. data/test/data/snippets/multilinecomments.pp +5 -1
  742. data/test/data/snippets/selectorvalues.pp +7 -0
  743. data/test/data/types/hosts/1 +1 -1
  744. data/test/data/types/hosts/2 +3 -3
  745. data/test/data/types/hosts/solaris +2 -2
  746. data/test/data/types/mount/freebsd.fstab +7 -7
  747. data/test/data/types/mount/solaris.fstab +10 -10
  748. data/test/data/types/port/1 +472 -472
  749. data/test/data/types/port/darwin +4347 -4347
  750. data/test/language/ast.rb +3 -2
  751. data/test/language/ast/casestatement.rb +12 -12
  752. data/test/language/ast/resource.rb +4 -4
  753. data/test/language/ast/resource_reference.rb +5 -5
  754. data/test/language/ast/selector.rb +11 -11
  755. data/test/language/ast/variable.rb +4 -4
  756. data/test/language/functions.rb +16 -16
  757. data/test/language/parser.rb +89 -111
  758. data/test/language/resource.rb +3 -88
  759. data/test/language/scope.rb +14 -55
  760. data/test/language/snippets.rb +31 -31
  761. data/test/lib/puppettest.rb +12 -12
  762. data/test/lib/puppettest/certificates.rb +2 -2
  763. data/test/lib/puppettest/exetest.rb +0 -1
  764. data/test/lib/puppettest/fakes.rb +1 -1
  765. data/test/lib/puppettest/parsertesting.rb +9 -4
  766. data/test/lib/puppettest/railstesting.rb +3 -3
  767. data/test/lib/puppettest/servertest.rb +1 -1
  768. data/test/lib/puppettest/support/assertions.rb +2 -2
  769. data/test/lib/puppettest/support/collection.rb +1 -1
  770. data/test/lib/puppettest/support/resources.rb +7 -7
  771. data/test/lib/puppettest/support/utils.rb +10 -16
  772. data/test/lib/puppettest/testcase.rb +2 -1
  773. data/test/network/authconfig.rb +1 -1
  774. data/test/network/authorization.rb +1 -1
  775. data/test/network/authstore.rb +57 -14
  776. data/test/network/client/ca.rb +1 -0
  777. data/test/network/client/resource.rb +12 -50
  778. data/test/network/client_request.rb +1 -1
  779. data/test/network/handler/bucket.rb +2 -2
  780. data/test/network/handler/fileserver.rb +17 -21
  781. data/test/network/handler/master.rb +5 -5
  782. data/test/network/handler/report.rb +3 -3
  783. data/test/network/handler/resource.rb +29 -75
  784. data/test/network/handler/runner.rb +8 -58
  785. data/test/network/rights.rb +1 -1
  786. data/test/network/server/mongrel_test.rb +15 -1
  787. data/test/network/server/webrick.rb +0 -36
  788. data/test/network/xmlrpc/webrick_servlet.rb +5 -5
  789. data/test/other/dsl.rb +3 -3
  790. data/test/other/events.rb +15 -15
  791. data/test/other/puppet.rb +2 -32
  792. data/test/other/relationships.rb +21 -148
  793. data/test/other/report.rb +20 -23
  794. data/test/other/transactions.rb +110 -298
  795. data/test/puppet/defaults.rb +1 -1
  796. data/test/puppet/tc_suidmanager.rb +1 -1
  797. data/test/rails/railsparameter.rb +4 -4
  798. data/test/ral/manager/attributes.rb +12 -68
  799. data/test/ral/manager/instances.rb +3 -19
  800. data/test/ral/manager/manager.rb +7 -7
  801. data/test/ral/manager/provider.rb +7 -7
  802. data/test/ral/manager/type.rb +54 -349
  803. data/test/ral/providers/cron/crontab.rb +14 -14
  804. data/test/ral/providers/group.rb +5 -6
  805. data/test/ral/providers/host/parsed.rb +3 -3
  806. data/test/ral/providers/mailalias/aliases.rb +4 -4
  807. data/test/ral/providers/package.rb +3 -3
  808. data/test/ral/providers/package/aptitude.rb +55 -55
  809. data/test/ral/providers/package/aptrpm.rb +7 -7
  810. data/test/ral/providers/parsedfile.rb +10 -14
  811. data/test/ral/providers/port/parsed.rb +6 -6
  812. data/test/ral/providers/provider.rb +10 -10
  813. data/test/ral/providers/service/base.rb +32 -32
  814. data/test/ral/providers/sshkey/parsed.rb +14 -14
  815. data/test/ral/providers/user.rb +16 -17
  816. data/test/ral/providers/user/useradd.rb +19 -22
  817. data/test/ral/type/cron.rb +21 -28
  818. data/test/ral/type/exec.rb +57 -60
  819. data/test/ral/type/file.rb +88 -862
  820. data/test/ral/type/file/target.rb +21 -70
  821. data/test/ral/type/fileignoresource.rb +37 -44
  822. data/test/ral/type/filesources.rb +43 -473
  823. data/test/ral/type/group.rb +6 -7
  824. data/test/ral/type/host.rb +14 -30
  825. data/test/ral/type/mailalias.rb +3 -3
  826. data/test/ral/type/port.rb +5 -5
  827. data/test/ral/type/resources.rb +37 -37
  828. data/test/ral/type/service.rb +3 -3
  829. data/test/ral/type/sshkey.rb +34 -39
  830. data/test/ral/type/user.rb +15 -14
  831. data/test/ral/type/yumrepo.rb +18 -17
  832. data/test/ral/type/zone.rb +4 -6
  833. data/test/test +9 -9
  834. data/test/util/fileparsing.rb +10 -10
  835. data/test/util/inifile.rb +6 -6
  836. data/test/util/instance_loader.rb +1 -1
  837. data/test/util/log.rb +2 -2
  838. data/test/util/metrics.rb +1 -6
  839. data/test/util/package.rb +1 -1
  840. data/test/util/pidlock.rb +116 -116
  841. data/test/util/settings.rb +40 -429
  842. data/test/util/storage.rb +5 -5
  843. data/test/util/subclass_loader.rb +0 -7
  844. data/test/util/utiltest.rb +10 -29
  845. metadata +1369 -941
  846. data/bin/puppetca +0 -363
  847. data/bin/puppetd +0 -439
  848. data/bin/puppetmasterd +0 -289
  849. data/bin/puppetrun +0 -369
  850. data/conf/redhat/lsb-config.patch +0 -51
  851. data/conf/redhat/no-chuser-0.15.1.patch +0 -38
  852. data/conf/redhat/no-lockdir.patch +0 -13
  853. data/examples/mac_netinfo.pp +0 -5
  854. data/ext/passenger/README +0 -63
  855. data/ext/passenger/apache2.conf +0 -29
  856. data/ext/passenger/config.ru +0 -40
  857. data/lib/puppet/config_stores/rest.rb +0 -60
  858. data/lib/puppet/executables/client/certhandler.rb +0 -82
  859. data/lib/puppet/indirector/file_content/modules.rb +0 -11
  860. data/lib/puppet/indirector/file_metadata/modules.rb +0 -17
  861. data/lib/puppet/indirector/module_files.rb +0 -82
  862. data/lib/puppet/indirector/ssl_rsa.rb +0 -5
  863. data/lib/puppet/indirector/ssl_rsa/file.rb +0 -33
  864. data/lib/puppet/network/client/master.rb +0 -524
  865. data/lib/puppet/network/http_server/rack.rb +0 -148
  866. data/lib/puppet/pgraph.rb +0 -121
  867. data/lib/puppet/provider/group/netinfo.rb +0 -15
  868. data/lib/puppet/provider/host/netinfo.rb +0 -19
  869. data/lib/puppet/provider/mount/netinfo.rb +0 -37
  870. data/lib/puppet/provider/nameservice/netinfo.rb +0 -224
  871. data/lib/puppet/provider/user/netinfo.rb +0 -111
  872. data/lib/puppet/util/fact_store.rb +0 -59
  873. data/lib/puppet/util/uri_helper.rb +0 -22
  874. data/spec/integration/file_serving/configuration.rb +0 -43
  875. data/spec/integration/indirector/module_files.rb +0 -57
  876. data/spec/unit/executables/client/certhandler.rb +0 -135
  877. data/spec/unit/indirector/file_content/modules.rb +0 -18
  878. data/spec/unit/indirector/file_metadata/modules.rb +0 -42
  879. data/spec/unit/indirector/module_files.rb +0 -259
  880. data/spec/unit/indirector/ssl_rsa/file.rb +0 -121
  881. data/spec/unit/network/client/master.rb +0 -442
  882. data/spec/unit/node/catalog.rb +0 -865
  883. data/spec/unit/other/pgraph.rb +0 -210
  884. data/spec/unit/resource_reference.rb +0 -73
  885. data/spec/unit/util/uri_helper.rb +0 -41
  886. data/test/data/snippets/ifexpression.rb +0 -6
  887. data/test/executables/filebucket.rb +0 -51
  888. data/test/executables/puppetbin.rb +0 -104
  889. data/test/executables/puppetca.rb +0 -115
  890. data/test/executables/puppetd.rb +0 -55
  891. data/test/executables/puppetmasterd.rb +0 -147
  892. data/test/network/client/client.rb +0 -195
  893. data/test/network/client/master.rb +0 -490
  894. data/test/network/daemon.rb +0 -70
  895. data/test/network/handler/handler.rb +0 -63
  896. data/test/other/overrides.rb +0 -107
  897. data/test/puppet/conffiles.rb +0 -107
  898. data/test/rails/ast.rb +0 -73
  899. data/test/rails/configuration.rb +0 -71
  900. data/test/rails/host.rb +0 -154
  901. data/test/rails/railsresource.rb +0 -251
  902. data/test/ral/providers/host/netinfo.rb +0 -56
  903. data/test/ral/providers/mount/netinfo.rb +0 -79
  904. data/test/ral/type/basic.rb +0 -85
  905. data/test/ral/type/filebucket.rb +0 -157
  906. data/test/ral/type/parameter.rb +0 -174
  907. data/test/ral/type/property.rb +0 -388
  908. data/test/ral/type/tidy.rb +0 -291
  909. data/test/util/autoload.rb +0 -145
  910. data/test/util/features.rb +0 -95
@@ -14,8 +14,8 @@ describe Puppet::Util::Package, " versioncmp" do
14
14
  ary = %w{ 1.1.6 2.3 1.1a 3.0 1.5 1 2.4 1.1-4 2.3.1 1.2 2.3.0 1.1-3 2.4b 2.4 2.40.2 2.3a.1 3.1 0002 1.1-5 1.1.a 1.06}
15
15
 
16
16
  newary = ary.sort { |a, b| Puppet::Util::Package.versioncmp(a,b) }
17
-
17
+
18
18
  newary.should == ["0002", "1", "1.06", "1.1-3", "1.1-4", "1.1-5", "1.1.6", "1.1.a", "1.1a", "1.2", "1.5", "2.3", "2.3.0", "2.3.1", "2.3a.1", "2.4", "2.4", "2.4b", "2.40.2", "3.0", "3.1"]
19
19
  end
20
-
20
+
21
21
  end
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+ require 'puppet/util/queue'
5
+ require 'spec/mocks'
6
+
7
+ def make_test_client_class(n)
8
+ c = Class.new do
9
+ class <<self
10
+ attr_accessor :name
11
+ def to_s
12
+ name
13
+ end
14
+ end
15
+ end
16
+ c.name = n
17
+ c
18
+ end
19
+
20
+ mod = Puppet::Util::Queue
21
+ client_classes = { :default => make_test_client_class('Bogus::Default'), :setup => make_test_client_class('Bogus::Setup') }
22
+ mod.register_queue_type(client_classes[:default], :default)
23
+ mod.register_queue_type(client_classes[:setup], :setup)
24
+
25
+ describe Puppet::Util::Queue do
26
+ before :each do
27
+ @class = Class.new do
28
+ extend mod
29
+ end
30
+ end
31
+
32
+ context 'when determining a type name from a class' do
33
+ it 'should handle a simple one-word class name' do
34
+ mod.queue_type_from_class(make_test_client_class('Foo')).should == :foo
35
+ end
36
+
37
+ it 'should handle a simple two-word class name' do
38
+ mod.queue_type_from_class(make_test_client_class('FooBar')).should == :foo_bar
39
+ end
40
+
41
+ it 'should handle a two-part class name with one terminating word' do
42
+ mod.queue_type_from_class(make_test_client_class('Foo::Bar')).should == :bar
43
+ end
44
+
45
+ it 'should handle a two-part class name with two terminating words' do
46
+ mod.queue_type_from_class(make_test_client_class('Foo::BarBah')).should == :bar_bah
47
+ end
48
+ end
49
+
50
+ context 'when registering a queue client class' do
51
+ c = make_test_client_class('Foo::Bogus')
52
+ it 'uses the proper default name logic when type is unspecified' do
53
+ mod.register_queue_type(c)
54
+ mod.queue_type_to_class(:bogus).should == c
55
+ end
56
+
57
+ it 'uses an explicit type name when provided' do
58
+ mod.register_queue_type(c, :aardvark)
59
+ mod.queue_type_to_class(:aardvark).should == c
60
+ end
61
+
62
+ it 'throws an exception when type names conflict' do
63
+ mod.register_queue_type( make_test_client_class('Conflict') )
64
+ lambda { mod.register_queue_type( c, :conflict) }.should raise_error
65
+ end
66
+
67
+ it 'handle multiple, non-conflicting registrations' do
68
+ a = make_test_client_class('TestA')
69
+ b = make_test_client_class('TestB')
70
+ mod.register_queue_type(a)
71
+ mod.register_queue_type(b)
72
+ mod.queue_type_to_class(:test_a).should == a
73
+ mod.queue_type_to_class(:test_b).should == b
74
+ end
75
+
76
+ it 'throws an exception when type name is unknown' do
77
+ lambda { mod.queue_type_to_class(:nope) }.should raise_error
78
+ end
79
+ end
80
+
81
+ context 'when determining client type' do
82
+ it 'returns client class based on the :queue_type setting' do
83
+ Puppet.settings.expects(:value).with(:queue_type).returns(:myqueue)
84
+ Puppet::Util::Queue.expects(:queue_type_to_class).with(:myqueue).returns "eh"
85
+ @class.client_class.should == "eh"
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,140 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../../spec_helper'
4
+ require 'puppet/util/queue'
5
+
6
+ describe Puppet::Util::Queue do
7
+ confine "Missing Stomp" => Puppet.features.stomp?
8
+
9
+ it 'should load :stomp client appropriately' do
10
+ Puppet.settings.stubs(:value).returns 'faux_queue_source'
11
+ Puppet::Util::Queue.queue_type_to_class(:stomp).name.should == 'Puppet::Util::Queue::Stomp'
12
+ end
13
+ end
14
+
15
+ describe 'Puppet::Util::Queue::Stomp' do
16
+ confine "Missing Stomp" => Puppet.features.stomp?
17
+
18
+ before do
19
+ # So we make sure we never create a real client instance.
20
+ # Otherwise we'll try to connect, and that's bad.
21
+ Stomp::Client.stubs(:new).returns stub("client")
22
+ end
23
+
24
+ it 'should be registered with Puppet::Util::Queue as :stomp type' do
25
+ Puppet::Util::Queue.queue_type_to_class(:stomp).should == Puppet::Util::Queue::Stomp
26
+ end
27
+
28
+ describe "when initializing" do
29
+ it "should create a Stomp client instance" do
30
+ Stomp::Client.expects(:new).returns stub("stomp_client")
31
+ Puppet::Util::Queue::Stomp.new
32
+ end
33
+
34
+ it "should provide helpful failures when the queue source is not a valid source" do
35
+ # Stub rather than expect, so we can include the source in the error
36
+ Puppet.settings.stubs(:value).with(:queue_source).returns "-----"
37
+
38
+ lambda { Puppet::Util::Queue::Stomp.new }.should raise_error(ArgumentError)
39
+ end
40
+
41
+ it "should fail unless the queue source is a stomp URL" do
42
+ # Stub rather than expect, so we can include the source in the error
43
+ Puppet.settings.stubs(:value).with(:queue_source).returns "http://foo/bar"
44
+
45
+ lambda { Puppet::Util::Queue::Stomp.new }.should raise_error(ArgumentError)
46
+ end
47
+
48
+ it "should fail somewhat helpfully if the Stomp client cannot be created" do
49
+ Stomp::Client.expects(:new).raises RuntimeError
50
+ lambda { Puppet::Util::Queue::Stomp.new }.should raise_error(ArgumentError)
51
+ end
52
+
53
+ list = %w{user password host port}
54
+ {"user" => "myuser", "password" => "mypass", "host" => "foohost", "port" => 42}.each do |name, value|
55
+ it "should use the #{name} from the queue source as the queueing #{name}" do
56
+ Puppet.settings.expects(:value).with(:queue_source).returns "stomp://myuser:mypass@foohost:42/"
57
+
58
+ Stomp::Client.expects(:new).with { |*args| args[list.index(name)] == value }
59
+ Puppet::Util::Queue::Stomp.new
60
+ end
61
+ end
62
+
63
+ it "should create a reliable client instance" do
64
+ Puppet.settings.expects(:value).with(:queue_source).returns "stomp://myuser@foohost:42/"
65
+
66
+ Stomp::Client.expects(:new).with { |*args| args[4] == true }
67
+ Puppet::Util::Queue::Stomp.new
68
+ end
69
+ end
70
+
71
+ describe "when sending a message" do
72
+ before do
73
+ @client = stub 'client'
74
+ Stomp::Client.stubs(:new).returns @client
75
+ @queue = Puppet::Util::Queue::Stomp.new
76
+ end
77
+
78
+ it "should send it to the queue client instance" do
79
+ @client.expects(:send).with { |queue, msg, options| msg == "Smite!" }
80
+ @queue.send_message('fooqueue', 'Smite!')
81
+ end
82
+
83
+ it "should send it to the transformed queue name" do
84
+ @client.expects(:send).with { |queue, msg, options| queue == "/queue/fooqueue" }
85
+ @queue.send_message('fooqueue', 'Smite!')
86
+ end
87
+
88
+ it "should send it as a persistent message" do
89
+ @client.expects(:send).with { |queue, msg, options| options[:persistent] == true }
90
+ @queue.send_message('fooqueue', 'Smite!')
91
+ end
92
+ end
93
+
94
+ describe "when subscribing to a queue" do
95
+ before do
96
+ @client = stub 'client', :acknowledge => true
97
+ Stomp::Client.stubs(:new).returns @client
98
+ @queue = Puppet::Util::Queue::Stomp.new
99
+ end
100
+
101
+ it "should subscribe via the queue client instance" do
102
+ @client.expects(:subscribe)
103
+ @queue.subscribe('fooqueue')
104
+ end
105
+
106
+ it "should subscribe to the transformed queue name" do
107
+ @client.expects(:subscribe).with { |queue, options| queue == "/queue/fooqueue" }
108
+ @queue.subscribe('fooqueue')
109
+ end
110
+
111
+ it "should specify that its messages should be acknowledged" do
112
+ @client.expects(:subscribe).with { |queue, options| options[:ack] == :client }
113
+ @queue.subscribe('fooqueue')
114
+ end
115
+
116
+ it "should yield the body of any received message" do
117
+ message = mock 'message'
118
+ message.expects(:body).returns "mybody"
119
+
120
+ @client.expects(:subscribe).yields(message)
121
+
122
+ body = nil
123
+ @queue.subscribe('fooqueue') { |b| body = b }
124
+ body.should == "mybody"
125
+ end
126
+
127
+ it "should acknowledge all successfully processed messages" do
128
+ message = stub 'message', :body => "mybode"
129
+
130
+ @client.stubs(:subscribe).yields(message)
131
+ @client.expects(:acknowledge).with(message)
132
+
133
+ @queue.subscribe('fooqueue') { |b| "eh" }
134
+ end
135
+ end
136
+
137
+ it 'should transform the simple queue name to "/queue/<queue_name>"' do
138
+ Puppet::Util::Queue::Stomp.new.stompify_target('blah').should == '/queue/blah'
139
+ end
140
+ end
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+ require 'puppet/util/rails/reference_serializer'
5
+
6
+ class SerializeTester
7
+ include Puppet::Util::ReferenceSerializer
8
+ end
9
+
10
+ describe Puppet::Util::ReferenceSerializer do
11
+ before do
12
+ @tester = SerializeTester.new
13
+ end
14
+
15
+ describe "when serializing" do
16
+ it "should yaml-dump resource references" do
17
+ ref = Puppet::Parser::Resource::Reference.new(:type => "file", :title => "/foo")
18
+ @tester.serialize_value(ref).should =~ /^---/
19
+ end
20
+
21
+ it "should convert the boolean 'true' into the string 'true'" do
22
+ @tester.serialize_value(true).should == "true"
23
+ end
24
+
25
+ it "should convert the boolean 'false' into the string 'false'" do
26
+ @tester.serialize_value(false).should == "false"
27
+ end
28
+
29
+ it "should return all other values" do
30
+ @tester.serialize_value("foo").should == "foo"
31
+ end
32
+ end
33
+
34
+ describe "when unserializing" do
35
+ it "should yaml-load values that look like yaml" do
36
+ yaml = YAML.dump(%w{a b c})
37
+ @tester.unserialize_value(yaml).should == %w{a b c}
38
+ end
39
+
40
+ it "should convert the string 'true' into the boolean 'true'" do
41
+ @tester.unserialize_value("true").should == true
42
+ end
43
+
44
+ it "should convert the string 'false' into the boolean 'false'" do
45
+ @tester.unserialize_value("false").should == false
46
+ end
47
+
48
+ it "should return all other values" do
49
+ @tester.unserialize_value("foo").should == "foo"
50
+ end
51
+ end
52
+ end
@@ -31,7 +31,9 @@ describe Puppet::Util::SELinux do
31
31
 
32
32
  describe "filesystem detection" do
33
33
  before :each do
34
- File.expects(:read).with("/proc/mounts").returns "rootfs / rootfs rw 0 0\n/dev/root / ext3 rw,relatime,errors=continue,user_xattr,acl,data=ordered 0 0\n/dev /dev tmpfs rw,relatime,mode=755 0 0\n/proc /proc proc rw,relatime 0 0\n/sys /sys sysfs rw,relatime 0 0\n192.168.1.1:/var/export /mnt/nfs nfs rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.1,mountvers=3,mountproto=udp,addr=192.168.1.1 0 0\n"
34
+ fh = stub 'fh', :close => nil
35
+ File.stubs(:open).with("/proc/mounts").returns fh
36
+ fh.expects(:read_nonblock).times(2).returns("rootfs / rootfs rw 0 0\n/dev/root / ext3 rw,relatime,errors=continue,user_xattr,acl,data=ordered 0 0\n/dev /dev tmpfs rw,relatime,mode=755 0 0\n/proc /proc proc rw,relatime 0 0\n/sys /sys sysfs rw,relatime 0 0\n192.168.1.1:/var/export /mnt/nfs nfs rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,hard,nointr,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.1,mountvers=3,mountproto=udp,addr=192.168.1.1 0 0\n").then.raises EOFError
35
37
  end
36
38
 
37
39
  it "should parse the contents of /proc/mounts" do
@@ -46,7 +48,7 @@ describe Puppet::Util::SELinux do
46
48
  it "should match a path on / to ext3" do
47
49
  find_fs('/etc/puppet/testfile').should == "ext3"
48
50
  end
49
-
51
+
50
52
  it "should match a path on /mnt/nfs to nfs" do
51
53
  find_fs('/mnt/nfs/testfile/foobar').should == "nfs"
52
54
  end
@@ -109,7 +111,7 @@ describe Puppet::Util::SELinux do
109
111
  self.expects(:find_fs).with("/foo").returns "nfs"
110
112
  get_selinux_default_context("/foo").should be_nil
111
113
  end
112
-
114
+
113
115
  end
114
116
 
115
117
  describe "parse_selinux_context" do
@@ -2,7 +2,7 @@
2
2
 
3
3
  require File.dirname(__FILE__) + '/../../spec_helper'
4
4
 
5
- describe Puppet::Util::Settings do
5
+ describe Puppet::Util::Settings do
6
6
  describe "when specifying defaults" do
7
7
  before do
8
8
  @settings = Puppet::Util::Settings.new
@@ -39,13 +39,22 @@ describe Puppet::Util::Settings do
39
39
  end
40
40
 
41
41
  it "should support specifying owner, group, and mode when specifying files" do
42
- @settings.setdefaults(:section, :myvalue => {:default => "/some/file", :owner => "blah", :mode => "boo", :group => "yay", :desc => "whatever"})
42
+ @settings.setdefaults(:section, :myvalue => {:default => "/some/file", :owner => "service", :mode => "boo", :group => "service", :desc => "whatever"})
43
43
  end
44
44
 
45
45
  it "should support specifying a short name" do
46
46
  @settings.setdefaults(:section, :myvalue => {:default => "w", :desc => "b", :short => "m"})
47
47
  end
48
48
 
49
+ it "should support specifying the setting type" do
50
+ @settings.setdefaults(:section, :myvalue => {:default => "/w", :desc => "b", :type => :setting})
51
+ @settings.setting(:myvalue).should be_instance_of(Puppet::Util::Settings::Setting)
52
+ end
53
+
54
+ it "should fail if an invalid setting type is specified" do
55
+ lambda { @settings.setdefaults(:section, :myvalue => {:default => "w", :desc => "b", :type => :foo}) }.should raise_error(ArgumentError)
56
+ end
57
+
49
58
  it "should fail when short names conflict" do
50
59
  @settings.setdefaults(:section, :myvalue => {:default => "w", :desc => "b", :short => "m"})
51
60
  lambda { @settings.setdefaults(:section, :myvalue => {:default => "w", :desc => "b", :short => "m"}) }.should raise_error(ArgumentError)
@@ -70,17 +79,38 @@ describe Puppet::Util::Settings do
70
79
  end
71
80
 
72
81
  it "should support a getopt-specific mechanism for turning booleans off" do
73
- @settings.handlearg("--no-bool")
82
+ @settings.handlearg("--no-bool", "")
74
83
  @settings[:bool].should == false
75
84
  end
76
85
 
77
86
  it "should support a getopt-specific mechanism for turning booleans on" do
87
+ # Turn it off first
88
+ @settings[:bool] = false
89
+ @settings.handlearg("--bool", "")
90
+ @settings[:bool].should == true
91
+ end
92
+
93
+ it "should consider a cli setting with no argument to be a boolean" do
78
94
  # Turn it off first
79
95
  @settings[:bool] = false
80
96
  @settings.handlearg("--bool")
81
97
  @settings[:bool].should == true
82
98
  end
83
99
 
100
+ it "should consider a cli setting with an empty string as an argument to be a boolean" do
101
+ # Turn it off first
102
+ @settings[:bool] = false
103
+ @settings.handlearg("--bool", "")
104
+ @settings[:bool].should == true
105
+ end
106
+
107
+ it "should consider a cli setting with a boolean as an argument to be a boolean" do
108
+ # Turn it off first
109
+ @settings[:bool] = false
110
+ @settings.handlearg("--bool", true)
111
+ @settings[:bool].should == true
112
+ end
113
+
84
114
  it "should clear the cache when setting getopt-specific values" do
85
115
  @settings.setdefaults :mysection, :one => ["whah", "yay"], :two => ["$one yay", "bah"]
86
116
  @settings[:two].should == "whah yay"
@@ -90,10 +120,15 @@ describe Puppet::Util::Settings do
90
120
 
91
121
  it "should not clear other values when setting getopt-specific values" do
92
122
  @settings[:myval] = "yay"
93
- @settings.handlearg("--no-bool")
123
+ @settings.handlearg("--no-bool", "")
94
124
  @settings[:myval].should == "yay"
95
125
  end
96
126
 
127
+ it "should clear the list of used sections" do
128
+ @settings.expects(:clearused)
129
+ @settings[:myval] = "yay"
130
+ end
131
+
97
132
  it "should call passed blocks when values are set" do
98
133
  values = []
99
134
  @settings.setdefaults(:section, :hooker => {:default => "yay", :desc => "boo", :hook => lambda { |v| values << v }})
@@ -103,6 +138,16 @@ describe Puppet::Util::Settings do
103
138
  values.should == %w{something}
104
139
  end
105
140
 
141
+ it "should call passed blocks when values are set via the command line" do
142
+ values = []
143
+ @settings.setdefaults(:section, :hooker => {:default => "yay", :desc => "boo", :hook => lambda { |v| values << v }})
144
+ values.should == []
145
+
146
+ @settings.handlearg("--hooker", "yay")
147
+
148
+ values.should == %w{yay}
149
+ end
150
+
106
151
  it "should provide an option to call passed blocks during definition" do
107
152
  values = []
108
153
  @settings.setdefaults(:section, :hooker => {:default => "yay", :desc => "boo", :call_on_define => true, :hook => lambda { |v| values << v }})
@@ -116,7 +161,7 @@ describe Puppet::Util::Settings do
116
161
  values.should == %w{test/yay}
117
162
  end
118
163
 
119
- it "should munge values using the element-specific methods" do
164
+ it "should munge values using the setting-specific methods" do
120
165
  @settings[:bool] = "false"
121
166
  @settings[:bool].should == false
122
167
  end
@@ -126,12 +171,18 @@ describe Puppet::Util::Settings do
126
171
  @settings[:myval] = "memarg"
127
172
  @settings[:myval].should == "cliarg"
128
173
  end
174
+
175
+ it "should clear the list of environments" do
176
+ Puppet::Node::Environment.expects(:clear).at_least(1)
177
+ @settings[:myval] = "memarg"
178
+ end
129
179
  end
130
180
 
131
181
  describe "when returning values" do
132
182
  before do
133
183
  @settings = Puppet::Util::Settings.new
134
- @settings.setdefaults :section, :one => ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"], :four => ["$two $three FOUR", "d"]
184
+ @settings.setdefaults :section, :config => ["/my/file", "eh"], :one => ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"], :four => ["$two $three FOUR", "d"]
185
+ FileTest.stubs(:exist?).returns true
135
186
  end
136
187
 
137
188
  it "should provide a mechanism for returning set values" do
@@ -168,11 +219,8 @@ describe Puppet::Util::Settings do
168
219
 
169
220
  it "should not cache values such that information from one environment is returned for another environment" do
170
221
  text = "[env1]\none = oneval\n[env2]\none = twoval\n"
171
- file = mock 'file'
172
- file.stubs(:changed?).returns(true)
173
- file.stubs(:file).returns("/whatever")
174
- @settings.stubs(:read_file).with(file).returns(text)
175
- @settings.parse(file)
222
+ @settings.stubs(:read_file).returns(text)
223
+ @settings.parse
176
224
 
177
225
  @settings.value(:one, "env1").should == "oneval"
178
226
  @settings.value(:one, "env2").should == "twoval"
@@ -190,8 +238,10 @@ describe Puppet::Util::Settings do
190
238
  before do
191
239
  @settings = Puppet::Util::Settings.new
192
240
  @settings.setdefaults :section,
241
+ :config => ["/my/file", "a"],
193
242
  :one => ["ONE", "a"],
194
243
  :name => ["myname", "w"]
244
+ FileTest.stubs(:exist?).returns true
195
245
  end
196
246
 
197
247
  it "should return default values if no values have been set" do
@@ -200,12 +250,9 @@ describe Puppet::Util::Settings do
200
250
 
201
251
  it "should return values set on the cli before values set in the configuration file" do
202
252
  text = "[main]\none = fileval\n"
203
- file = mock 'file'
204
- file.stubs(:changed?).returns(true)
205
- file.stubs(:file).returns("/whatever")
206
- @settings.stubs(:parse_file).returns(text)
253
+ @settings.stubs(:read_file).returns(text)
207
254
  @settings.handlearg("--one", "clival")
208
- @settings.parse(file)
255
+ @settings.parse
209
256
 
210
257
  @settings[:one].should == "clival"
211
258
  end
@@ -218,11 +265,8 @@ describe Puppet::Util::Settings do
218
265
 
219
266
  it "should return values set in the executable-specific section before values set in the main section" do
220
267
  text = "[main]\none = mainval\n[myname]\none = nameval\n"
221
- file = mock 'file'
222
- file.stubs(:changed?).returns(true)
223
- file.stubs(:file).returns("/whatever")
224
- @settings.stubs(:read_file).with(file).returns(text)
225
- @settings.parse(file)
268
+ @settings.stubs(:read_file).returns(text)
269
+ @settings.parse
226
270
 
227
271
  @settings[:one].should == "nameval"
228
272
  end
@@ -230,22 +274,15 @@ describe Puppet::Util::Settings do
230
274
  it "should not return values outside of its search path" do
231
275
  text = "[other]\none = oval\n"
232
276
  file = "/some/file"
233
- file = mock 'file'
234
- file.stubs(:changed?).returns(true)
235
- file.stubs(:file).returns("/whatever")
236
- @settings.stubs(:read_file).with(file).returns(text)
237
- @settings.parse(file)
277
+ @settings.stubs(:read_file).returns(text)
278
+ @settings.parse
238
279
  @settings[:one].should == "ONE"
239
280
  end
240
281
 
241
282
  it "should return values in a specified environment" do
242
283
  text = "[env]\none = envval\n"
243
- file = "/some/file"
244
- file = mock 'file'
245
- file.stubs(:changed?).returns(true)
246
- file.stubs(:file).returns("/whatever")
247
- @settings.stubs(:read_file).with(file).returns(text)
248
- @settings.parse(file)
284
+ @settings.stubs(:read_file).returns(text)
285
+ @settings.parse
249
286
  @settings.value(:one, "env").should == "envval"
250
287
  end
251
288
 
@@ -257,12 +294,8 @@ describe Puppet::Util::Settings do
257
294
 
258
295
  it "should return values in a specified environment before values in the main or name sections" do
259
296
  text = "[env]\none = envval\n[main]\none = mainval\n[myname]\none = nameval\n"
260
- file = "/some/file"
261
- file = mock 'file'
262
- file.stubs(:changed?).returns(true)
263
- file.stubs(:file).returns("/whatever")
264
- @settings.stubs(:read_file).with(file).returns(text)
265
- @settings.parse(file)
297
+ @settings.stubs(:read_file).returns(text)
298
+ @settings.parse
266
299
  @settings.value(:one, "env").should == "envval"
267
300
  end
268
301
  end
@@ -270,30 +303,55 @@ describe Puppet::Util::Settings do
270
303
  describe "when parsing its configuration" do
271
304
  before do
272
305
  @settings = Puppet::Util::Settings.new
273
- @settings.setdefaults :section, :one => ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"]
306
+ @settings.stubs(:service_user_available?).returns true
307
+ @file = "/some/file"
308
+ @settings.setdefaults :section, :user => ["suser", "doc"], :group => ["sgroup", "doc"]
309
+ @settings.setdefaults :section, :config => ["/some/file", "eh"], :one => ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"]
310
+ FileTest.stubs(:exist?).returns true
311
+ end
312
+
313
+ it "should use its current ':config' value for the file to parse" do
314
+ @settings[:config] = "/my/file"
315
+
316
+ File.expects(:read).with("/my/file").returns("[main]")
317
+
318
+ @settings.parse
319
+ end
320
+
321
+ it "should fail if no configuration setting is defined" do
322
+ @settings = Puppet::Util::Settings.new
323
+ lambda { @settings.parse }.should raise_error(RuntimeError)
324
+ end
325
+
326
+ it "should not try to parse non-existent files" do
327
+ FileTest.expects(:exist?).with("/some/file").returns false
328
+
329
+ File.expects(:read).with("/some/file").never
330
+
331
+ @settings.parse
332
+ end
333
+
334
+ it "should set a timer that triggers reparsing, even if the file does not exist" do
335
+ FileTest.expects(:exist?).returns false
336
+ @settings.expects(:set_filetimeout_timer)
337
+
338
+ @settings.parse
274
339
  end
275
340
 
276
341
  it "should return values set in the configuration file" do
277
342
  text = "[main]
278
343
  one = fileval
279
344
  "
280
- file = "/some/file"
281
- @settings.expects(:read_file).with(file).returns(text)
282
- @settings.parse(file)
345
+ @settings.expects(:read_file).returns(text)
346
+ @settings.parse
283
347
  @settings[:one].should == "fileval"
284
348
  end
285
349
 
286
350
  #484 - this should probably be in the regression area
287
351
  it "should not throw an exception on unknown parameters" do
288
352
  text = "[main]\nnosuchparam = mval\n"
289
- file = "/some/file"
290
- @settings.expects(:read_file).with(file).returns(text)
291
- lambda { @settings.parse(file) }.should_not raise_error
292
- end
293
-
294
- it "should support an old parse method when per-executable configuration files still exist" do
295
- # I'm not going to bother testing this method.
296
- @settings.should respond_to(:old_parse)
353
+ @settings.expects(:read_file).returns(text)
354
+ lambda { @settings.parse }.should_not raise_error
297
355
  end
298
356
 
299
357
  it "should convert booleans in the configuration file into Ruby booleans" do
@@ -301,9 +359,8 @@ describe Puppet::Util::Settings do
301
359
  one = true
302
360
  two = false
303
361
  "
304
- file = "/some/file"
305
- @settings.expects(:read_file).with(file).returns(text)
306
- @settings.parse(file)
362
+ @settings.expects(:read_file).returns(text)
363
+ @settings.parse
307
364
  @settings[:one].should == true
308
365
  @settings[:two].should == false
309
366
  end
@@ -312,9 +369,8 @@ describe Puppet::Util::Settings do
312
369
  text = "[main]
313
370
  one = 65
314
371
  "
315
- file = "/some/file"
316
- @settings.expects(:read_file).with(file).returns(text)
317
- @settings.parse(file)
372
+ @settings.expects(:read_file).returns(text)
373
+ @settings.parse
318
374
  @settings[:one].should == 65
319
375
  end
320
376
 
@@ -322,26 +378,25 @@ describe Puppet::Util::Settings do
322
378
  @settings.setdefaults :section, :myfile => ["/myfile", "a"]
323
379
 
324
380
  text = "[main]
325
- myfile = /other/file {owner = luke, group = luke, mode = 644}
381
+ myfile = /other/file {owner = service, group = service, mode = 644}
326
382
  "
327
- file = "/some/file"
328
- @settings.expects(:read_file).with(file).returns(text)
329
- @settings.parse(file)
383
+ @settings.expects(:read_file).returns(text)
384
+ @settings.parse
330
385
  @settings[:myfile].should == "/other/file"
331
- @settings.metadata(:myfile).should == {:owner => "luke", :group => "luke", :mode => "644"}
386
+ @settings.metadata(:myfile).should == {:owner => "suser", :group => "sgroup", :mode => "644"}
332
387
  end
333
388
 
334
389
  it "should support specifying a single piece of metadata (owner, group, or mode) in the configuration file" do
335
390
  @settings.setdefaults :section, :myfile => ["/myfile", "a"]
336
391
 
337
392
  text = "[main]
338
- myfile = /other/file {owner = luke}
393
+ myfile = /other/file {owner = service}
339
394
  "
340
395
  file = "/some/file"
341
- @settings.expects(:read_file).with(file).returns(text)
342
- @settings.parse(file)
396
+ @settings.expects(:read_file).returns(text)
397
+ @settings.parse
343
398
  @settings[:myfile].should == "/other/file"
344
- @settings.metadata(:myfile).should == {:owner => "luke"}
399
+ @settings.metadata(:myfile).should == {:owner => "suser"}
345
400
  end
346
401
 
347
402
  it "should call hooks associated with values set in the configuration file" do
@@ -351,9 +406,8 @@ describe Puppet::Util::Settings do
351
406
  text = "[main]
352
407
  mysetting = setval
353
408
  "
354
- file = "/some/file"
355
- @settings.expects(:read_file).with(file).returns(text)
356
- @settings.parse(file)
409
+ @settings.expects(:read_file).returns(text)
410
+ @settings.parse
357
411
  values.should == ["setval"]
358
412
  end
359
413
 
@@ -366,9 +420,8 @@ describe Puppet::Util::Settings do
366
420
  [puppet]
367
421
  mysetting = other
368
422
  "
369
- file = "/some/file"
370
- @settings.expects(:read_file).with(file).returns(text)
371
- @settings.parse(file)
423
+ @settings.expects(:read_file).returns(text)
424
+ @settings.parse
372
425
  values.should == ["setval"]
373
426
  end
374
427
 
@@ -383,9 +436,8 @@ describe Puppet::Util::Settings do
383
436
  [yay]
384
437
  mysetting = other
385
438
  "
386
- file = "/some/file"
387
- @settings.expects(:read_file).with(file).returns(text)
388
- @settings.parse(file)
439
+ @settings.expects(:read_file).returns(text)
440
+ @settings.parse
389
441
  values.should == ["other"]
390
442
  end
391
443
 
@@ -397,9 +449,8 @@ describe Puppet::Util::Settings do
397
449
  text = "[main]
398
450
  mysetting = $base/setval
399
451
  "
400
- file = "/some/file"
401
- @settings.expects(:read_file).with(file).returns(text)
402
- @settings.parse(file)
452
+ @settings.expects(:read_file).returns(text)
453
+ @settings.parse
403
454
  values.should == ["yay/setval"]
404
455
  end
405
456
 
@@ -410,7 +461,7 @@ describe Puppet::Util::Settings do
410
461
  myarg =
411
462
  "
412
463
  @settings.stubs(:read_file).returns(text)
413
- @settings.parse("/some/file")
464
+ @settings.parse
414
465
  @settings[:myarg].should == ""
415
466
  end
416
467
  end
@@ -418,7 +469,59 @@ describe Puppet::Util::Settings do
418
469
  describe "when reparsing its configuration" do
419
470
  before do
420
471
  @settings = Puppet::Util::Settings.new
421
- @settings.setdefaults :section, :one => ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"]
472
+ @settings.setdefaults :section, :config => ["/test/file", "a"], :one => ["ONE", "a"], :two => ["$one TWO", "b"], :three => ["$one $two THREE", "c"]
473
+ FileTest.stubs(:exist?).returns true
474
+ end
475
+
476
+ it "should use a LoadedFile instance to determine if the file has changed" do
477
+ file = mock 'file'
478
+ Puppet::Util::LoadedFile.expects(:new).with("/test/file").returns file
479
+
480
+ file.expects(:changed?)
481
+
482
+ @settings.stubs(:parse)
483
+ @settings.reparse
484
+ end
485
+
486
+ it "should not create the LoadedFile instance and should not parse if the file does not exist" do
487
+ FileTest.expects(:exist?).with("/test/file").returns false
488
+ Puppet::Util::LoadedFile.expects(:new).never
489
+
490
+ @settings.expects(:parse).never
491
+
492
+ @settings.reparse
493
+ end
494
+
495
+ it "should not reparse if the file has not changed" do
496
+ file = mock 'file'
497
+ Puppet::Util::LoadedFile.expects(:new).with("/test/file").returns file
498
+
499
+ file.expects(:changed?).returns false
500
+
501
+ @settings.expects(:parse).never
502
+
503
+ @settings.reparse
504
+ end
505
+
506
+ it "should reparse if the file has changed" do
507
+ file = stub 'file', :file => "/test/file"
508
+ Puppet::Util::LoadedFile.expects(:new).with("/test/file").returns file
509
+
510
+ file.expects(:changed?).returns true
511
+
512
+ @settings.expects(:parse)
513
+
514
+ @settings.reparse
515
+ end
516
+
517
+ it "should use a cached LoadedFile instance" do
518
+ first = mock 'first'
519
+ second = mock 'second'
520
+ Puppet::Util::LoadedFile.expects(:new).times(2).with("/test/file").returns(first).then.returns(second)
521
+
522
+ @settings.file.should equal(first)
523
+ Puppet::Util::Cacher.expire
524
+ @settings.file.should equal(second)
422
525
  end
423
526
 
424
527
  it "should replace in-memory values with on-file values" do
@@ -432,11 +535,11 @@ describe Puppet::Util::Settings do
432
535
 
433
536
  # Now replace the value
434
537
  text = "[main]\none = disk-replace\n"
435
-
538
+
436
539
  # This is kinda ridiculous - the reason it parses twice is that
437
540
  # it goes to parse again when we ask for the value, because the
438
541
  # mock always says it should get reparsed.
439
- @settings.expects(:read_file).with(file).returns(text).times(2)
542
+ @settings.stubs(:read_file).returns(text)
440
543
  @settings.reparse
441
544
  @settings[:one].should == "disk-replace"
442
545
  end
@@ -445,10 +548,8 @@ describe Puppet::Util::Settings do
445
548
  @settings.handlearg("--one", "clival")
446
549
 
447
550
  text = "[main]\none = on-disk\n"
448
- file = mock 'file'
449
- file.stubs(:file).returns("/test/file")
450
- @settings.stubs(:read_file).with(file).returns(text)
451
- @settings.parse(file)
551
+ @settings.stubs(:read_file).returns(text)
552
+ @settings.parse
452
553
 
453
554
  @settings[:one].should == "clival"
454
555
  end
@@ -456,17 +557,14 @@ describe Puppet::Util::Settings do
456
557
  it "should remove in-memory values that are no longer set in the file" do
457
558
  # Init the value
458
559
  text = "[main]\none = disk-init\n"
459
- file = mock 'file'
460
- file.stubs(:changed?).returns(true)
461
- file.stubs(:file).returns("/test/file")
462
- @settings.expects(:read_file).with(file).returns(text)
463
- @settings.parse(file)
560
+ @settings.expects(:read_file).returns(text)
561
+ @settings.parse
464
562
  @settings[:one].should == "disk-init"
465
563
 
466
564
  # Now replace the value
467
565
  text = "[main]\ntwo = disk-replace\n"
468
- @settings.expects(:read_file).with(file).returns(text)
469
- @settings.parse(file)
566
+ @settings.expects(:read_file).returns(text)
567
+ @settings.parse
470
568
  #@settings.reparse
471
569
 
472
570
  # The originally-overridden value should be replaced with the default
@@ -477,238 +575,219 @@ describe Puppet::Util::Settings do
477
575
  end
478
576
  end
479
577
 
480
- describe "when being used to manage the host machine" do
578
+ it "should provide a method for creating a catalog of resources from its configuration" do
579
+ Puppet::Util::Settings.new.should respond_to(:to_catalog)
580
+ end
581
+
582
+ describe "when creating a catalog" do
481
583
  before do
482
584
  @settings = Puppet::Util::Settings.new
483
- @settings.setdefaults :main, :maindir => ["/maindir", "a"], :seconddir => ["/seconddir", "a"]
484
- @settings.setdefaults :other, :otherdir => {:default => "/otherdir", :desc => "a", :owner => "luke", :group => "johnny", :mode => 0755}
485
- @settings.setdefaults :third, :thirddir => ["/thirddir", "b"]
486
- @settings.setdefaults :files, :myfile => {:default => "/myfile", :desc => "a", :mode => 0755}
585
+ @settings.stubs(:service_user_available?).returns true
487
586
  end
488
587
 
489
- after do
490
- Puppet::Type.type(:file).clear
491
- end
492
-
493
- def stub_transaction
494
- @bucket = mock 'bucket'
495
- @config = mock 'config', :clear => nil
496
- @trans = mock 'transaction'
497
-
498
- @settings.expects(:to_transportable).with(:whatever).returns(@bucket)
499
- @bucket.expects(:to_catalog).returns(@config)
500
- @config.expects(:apply).yields(@trans)
501
- @config.stubs(:host_config=)
588
+ it "should add all file resources to the catalog if no sections have been specified" do
589
+ @settings.setdefaults :main, :maindir => ["/maindir", "a"], :seconddir => ["/seconddir", "a"]
590
+ @settings.setdefaults :other, :otherdir => ["/otherdir", "a"]
591
+ catalog = @settings.to_catalog
592
+ %w{/maindir /seconddir /otherdir}.each do |path|
593
+ catalog.resource(:file, path).should be_instance_of(Puppet::Resource)
594
+ end
502
595
  end
503
596
 
504
- it "should provide a method that writes files with the correct modes" do
505
- pending "Not converted from test/unit yet"
597
+ it "should add only files in the specified sections if section names are provided" do
598
+ @settings.setdefaults :main, :maindir => ["/maindir", "a"]
599
+ @settings.setdefaults :other, :otherdir => ["/otherdir", "a"]
600
+ catalog = @settings.to_catalog(:main)
601
+ catalog.resource(:file, "/otherdir").should be_nil
602
+ catalog.resource(:file, "/maindir").should be_instance_of(Puppet::Resource)
506
603
  end
507
604
 
508
- it "should provide a method that creates directories with the correct modes" do
509
- Puppet::Util::SUIDManager.expects(:asuser).with("luke", "johnny").yields
510
- Dir.expects(:mkdir).with("/otherdir", 0755)
511
- @settings.mkdir(:otherdir)
605
+ it "should not try to add the same file twice" do
606
+ @settings.setdefaults :main, :maindir => ["/maindir", "a"]
607
+ @settings.setdefaults :other, :otherdir => ["/maindir", "a"]
608
+ lambda { @settings.to_catalog }.should_not raise_error
512
609
  end
513
610
 
514
- it "should be able to create needed directories in a single section" do
515
- Dir.expects(:mkdir).with("/maindir")
516
- Dir.expects(:mkdir).with("/seconddir")
517
- @settings.use(:main)
518
- end
611
+ it "should ignore files whose :to_resource method returns nil" do
612
+ @settings.setdefaults :main, :maindir => ["/maindir", "a"]
613
+ @settings.setting(:maindir).expects(:to_resource).returns nil
519
614
 
520
- it "should be able to create needed directories in multiple sections" do
521
- Dir.expects(:mkdir).with("/maindir")
522
- Dir.expects(:mkdir).with("/seconddir")
523
- Dir.expects(:mkdir).with("/thirddir")
524
- @settings.use(:main, :third)
615
+ Puppet::Resource::Catalog.any_instance.expects(:add_resource).never
616
+ @settings.to_catalog
525
617
  end
526
618
 
527
- it "should provide a method to trigger enforcing of file modes on existing files and directories" do
528
- pending "Not converted from test/unit yet"
529
- end
619
+ describe "when adding users and groups to the catalog" do
620
+ before do
621
+ Puppet.features.stubs(:root?).returns true
622
+ @settings.setdefaults :foo, :mkusers => [true, "e"], :user => ["suser", "doc"], :group => ["sgroup", "doc"]
623
+ @settings.setdefaults :other, :otherdir => {:default => "/otherdir", :desc => "a", :owner => "service", :group => "service"}
530
624
 
531
- it "should provide a method to convert the file mode enforcement into a Puppet manifest" do
532
- pending "Not converted from test/unit yet"
533
- end
625
+ @catalog = @settings.to_catalog
626
+ end
534
627
 
535
- it "should create files when configured to do so with the :create parameter"
536
-
537
- it "should provide a method to convert the file mode enforcement into transportable resources" do
538
- # Make it think we're root so it tries to manage user and group.
539
- Puppet.features.stubs(:root?).returns(true)
540
- File.stubs(:exist?).with("/myfile").returns(true)
541
- trans = nil
542
- trans = @settings.to_transportable
543
- resources = []
544
- trans.delve { |obj| resources << obj if obj.is_a? Puppet::TransObject }
545
- %w{/maindir /seconddir /otherdir /myfile}.each do |path|
546
- obj = resources.find { |r| r.type == "file" and r.name == path }
547
- if path.include?("dir")
548
- obj[:ensure].should == :directory
549
- else
550
- # Do not create the file, just manage mode
551
- obj[:ensure].should be_nil
552
- end
553
- obj.should be_instance_of(Puppet::TransObject)
554
- case path
555
- when "/otherdir":
556
- obj[:owner].should == "luke"
557
- obj[:group].should == "johnny"
558
- obj[:mode].should == 0755
559
- when "/myfile":
560
- obj[:mode].should == 0755
561
- end
628
+ it "should add each specified user and group to the catalog if :mkusers is a valid setting, is enabled, and we're running as root" do
629
+ @catalog.resource(:user, "suser").should be_instance_of(Puppet::Resource)
630
+ @catalog.resource(:group, "sgroup").should be_instance_of(Puppet::Resource)
562
631
  end
563
- end
564
632
 
565
- it "should not try to manage user or group when not running as root" do
566
- Puppet.features.stubs(:root?).returns(false)
567
- trans = nil
568
- trans = @settings.to_transportable(:other)
569
- trans.delve do |obj|
570
- next unless obj.is_a?(Puppet::TransObject)
571
- obj[:owner].should be_nil
572
- obj[:group].should be_nil
633
+ it "should only add users and groups to the catalog from specified sections" do
634
+ @settings.setdefaults :yay, :yaydir => {:default => "/yaydir", :desc => "a", :owner => "service", :group => "service"}
635
+ catalog = @settings.to_catalog(:other)
636
+ catalog.resource(:user, "jane").should be_nil
637
+ catalog.resource(:group, "billy").should be_nil
573
638
  end
574
- end
575
639
 
576
- it "should add needed users and groups to the manifest when asked" do
577
- # This is how we enable user/group management
578
- @settings.setdefaults :main, :mkusers => [true, "w"]
579
- Puppet.features.stubs(:root?).returns(false)
580
- trans = nil
581
- trans = @settings.to_transportable(:other)
582
- resources = []
583
- trans.delve { |obj| resources << obj if obj.is_a? Puppet::TransObject and obj.type != "file" }
640
+ it "should not add users or groups to the catalog if :mkusers not running as root" do
641
+ Puppet.features.stubs(:root?).returns false
584
642
 
585
- user = resources.find { |r| r.type == "user" }
586
- user.should be_instance_of(Puppet::TransObject)
587
- user.name.should == "luke"
588
- user[:ensure].should == :present
643
+ catalog = @settings.to_catalog
644
+ catalog.resource(:user, "suser").should be_nil
645
+ catalog.resource(:group, "sgroup").should be_nil
646
+ end
589
647
 
590
- # This should maybe be a separate test, but...
591
- group = resources.find { |r| r.type == "group" }
592
- group.should be_instance_of(Puppet::TransObject)
593
- group.name.should == "johnny"
594
- group[:ensure].should == :present
595
- end
648
+ it "should not add users or groups to the catalog if :mkusers is not a valid setting" do
649
+ Puppet.features.stubs(:root?).returns true
650
+ settings = Puppet::Util::Settings.new
651
+ settings.setdefaults :other, :otherdir => {:default => "/otherdir", :desc => "a", :owner => "service", :group => "service"}
596
652
 
597
- it "should ignore tags and schedules when creating files and directories"
653
+ catalog = settings.to_catalog
654
+ catalog.resource(:user, "suser").should be_nil
655
+ catalog.resource(:group, "sgroup").should be_nil
656
+ end
598
657
 
599
- it "should apply all resources in debug mode to reduce logging"
658
+ it "should not add users or groups to the catalog if :mkusers is a valid setting but is disabled" do
659
+ @settings[:mkusers] = false
600
660
 
601
- it "should not try to manage absent files" do
602
- # Make it think we're root so it tries to manage user and group.
603
- Puppet.features.stubs(:root?).returns(true)
604
- trans = nil
605
- trans = @settings.to_transportable
606
- file = nil
607
- trans.delve { |obj| file = obj if obj.name == "/myfile" }
608
- file.should be_nil
609
- end
661
+ catalog = @settings.to_catalog
662
+ catalog.resource(:user, "suser").should be_nil
663
+ catalog.resource(:group, "sgroup").should be_nil
664
+ end
610
665
 
611
- it "should not try to manage files in memory" do
612
- main = Puppet::Type.type(:file).create(:path => "/maindir")
666
+ it "should not try to add users or groups to the catalog twice" do
667
+ @settings.setdefaults :yay, :yaydir => {:default => "/yaydir", :desc => "a", :owner => "service", :group => "service"}
613
668
 
614
- trans = @settings.to_transportable
669
+ # This would fail if users/groups were added twice
670
+ lambda { @settings.to_catalog }.should_not raise_error
671
+ end
615
672
 
616
- lambda { trans.to_catalog }.should_not raise_error
617
- end
673
+ it "should set :ensure to :present on each created user and group" do
674
+ @catalog.resource(:user, "suser")[:ensure].should == :present
675
+ @catalog.resource(:group, "sgroup")[:ensure].should == :present
676
+ end
618
677
 
619
- it "should do nothing if a catalog cannot be created" do
620
- bucket = mock 'bucket'
621
- catalog = mock 'catalog'
678
+ it "should set each created user's :gid to the service group" do
679
+ @settings.to_catalog.resource(:user, "suser")[:gid].should == "sgroup"
680
+ end
622
681
 
623
- @settings.expects(:to_transportable).returns bucket
624
- bucket.expects(:to_catalog).raises RuntimeError
625
- catalog.expects(:apply).never
682
+ it "should not attempt to manage the root user" do
683
+ Puppet.features.stubs(:root?).returns true
684
+ @settings.setdefaults :foo, :foodir => {:default => "/foodir", :desc => "a", :owner => "root", :group => "service"}
626
685
 
627
- @settings.use(:mysection)
686
+ @settings.to_catalog.resource(:user, "root").should be_nil
687
+ end
628
688
  end
689
+ end
629
690
 
630
- it "should clear the catalog after applying" do
631
- bucket = mock 'bucket'
632
- catalog = mock 'catalog'
633
-
634
- @settings.expects(:to_transportable).returns bucket
635
- bucket.expects(:to_catalog).returns catalog
636
- catalog.stubs(:host_config=)
637
- catalog.stubs(:apply)
638
- catalog.expects(:clear)
639
-
640
- @settings.use(:mysection)
641
- end
691
+ it "should be able to be converted to a manifest" do
692
+ Puppet::Util::Settings.new.should respond_to(:to_manifest)
693
+ end
642
694
 
643
- it "should clear the catalog even if there is an exception during applying" do
644
- bucket = mock 'bucket'
645
- catalog = mock 'catalog'
695
+ describe "when being converted to a manifest" do
696
+ it "should produce a string with the code for each resource joined by two carriage returns" do
697
+ @settings = Puppet::Util::Settings.new
698
+ @settings.setdefaults :main, :maindir => ["/maindir", "a"], :seconddir => ["/seconddir", "a"]
646
699
 
647
- @settings.expects(:to_transportable).returns bucket
648
- bucket.expects(:to_catalog).returns catalog
649
- catalog.stubs(:host_config=)
650
- catalog.expects(:apply).raises(ArgumentError)
651
- catalog.expects(:clear)
700
+ main = stub 'main_resource', :ref => "File[/maindir]"
701
+ main.expects(:to_manifest).returns "maindir"
702
+ second = stub 'second_resource', :ref => "File[/seconddir]"
703
+ second.expects(:to_manifest).returns "seconddir"
704
+ @settings.setting(:maindir).expects(:to_resource).returns main
705
+ @settings.setting(:seconddir).expects(:to_resource).returns second
652
706
 
653
- # We don't care about the raised exception, we just care that
654
- # we clear the catalog even with the exception
655
- lambda { @settings.use(:mysection) }.should raise_error
707
+ @settings.to_manifest.split("\n\n").sort.should == %w{maindir seconddir}
656
708
  end
709
+ end
657
710
 
658
- it "should do nothing if all specified sections have already been used" do
659
- bucket = mock 'bucket'
660
- catalog = mock 'catalog'
661
-
662
- @settings.expects(:to_transportable).once.returns(bucket)
663
- bucket.expects(:to_catalog).returns catalog
664
- catalog.stub_everything
711
+ describe "when using sections of the configuration to manage the local host" do
712
+ before do
713
+ @settings = Puppet::Util::Settings.new
714
+ @settings.stubs(:service_user_available?).returns true
715
+ @settings.setdefaults :main, :maindir => ["/maindir", "a"], :seconddir => ["/seconddir", "a"]
716
+ @settings.setdefaults :main, :user => ["suser", "doc"], :group => ["sgroup", "doc"]
717
+ @settings.setdefaults :other, :otherdir => {:default => "/otherdir", :desc => "a", :owner => "service", :group => "service", :mode => 0755}
718
+ @settings.setdefaults :third, :thirddir => ["/thirddir", "b"]
719
+ @settings.setdefaults :files, :myfile => {:default => "/myfile", :desc => "a", :mode => 0755}
720
+ end
665
721
 
666
- @settings.use(:whatever)
722
+ it "should provide a method that writes files with the correct modes" do
723
+ @settings.should respond_to(:write)
724
+ end
667
725
 
668
- @settings.use(:whatever)
726
+ it "should provide a method that creates directories with the correct modes" do
727
+ Puppet::Util::SUIDManager.expects(:asuser).with("suser", "sgroup").yields
728
+ Dir.expects(:mkdir).with("/otherdir", 0755)
729
+ @settings.mkdir(:otherdir)
669
730
  end
670
731
 
671
- it "should ignore file settings whose values are not strings" do
672
- @settings[:maindir] = false
732
+ it "should create a catalog with the specified sections" do
733
+ @settings.expects(:to_catalog).with(:main, :other).returns Puppet::Resource::Catalog.new("foo")
734
+ @settings.use(:main, :other)
735
+ end
673
736
 
674
- lambda { trans = @settings.to_transportable }.should_not raise_error
737
+ it "should canonicalize the sections" do
738
+ @settings.expects(:to_catalog).with(:main, :other).returns Puppet::Resource::Catalog.new("foo")
739
+ @settings.use("main", "other")
675
740
  end
676
741
 
677
- it "should be able to turn the current configuration into a parseable manifest"
742
+ it "should ignore sections that have already been used" do
743
+ @settings.expects(:to_catalog).with(:main).returns Puppet::Resource::Catalog.new("foo")
744
+ @settings.use(:main)
745
+ @settings.expects(:to_catalog).with(:other).returns Puppet::Resource::Catalog.new("foo")
746
+ @settings.use(:main, :other)
747
+ end
678
748
 
679
- it "should convert octal numbers correctly when producing a manifest"
749
+ it "should ignore tags and schedules when creating files and directories"
680
750
 
681
751
  it "should be able to provide all of its parameters in a format compatible with GetOpt::Long" do
682
752
  pending "Not converted from test/unit yet"
683
753
  end
684
754
 
685
- it "should not attempt to manage files within /dev" do
686
- pending "Not converted from test/unit yet"
687
- end
755
+ it "should convert the created catalog to a RAL catalog" do
756
+ @catalog = Puppet::Resource::Catalog.new("foo")
757
+ @settings.expects(:to_catalog).with(:main).returns @catalog
688
758
 
689
- it "should not modify the stored state database when managing resources" do
690
- Puppet::Util::Storage.expects(:store).never
691
- Puppet::Util::Storage.expects(:load).never
692
- Dir.expects(:mkdir).with("/maindir")
693
- Dir.expects(:mkdir).with("/seconddir")
759
+ @catalog.expects(:to_ral).returns @catalog
694
760
  @settings.use(:main)
695
761
  end
696
762
 
697
- it "should convert all relative paths to fully-qualified paths (#795)" do
698
- @settings[:myfile] = "unqualified"
699
- dir = Dir.getwd
700
- @settings[:myfile].should == File.join(dir, "unqualified")
763
+ it "should specify that it is not managing a host catalog" do
764
+ catalog = Puppet::Resource::Catalog.new("foo")
765
+ @settings.expects(:to_catalog).returns catalog
766
+
767
+ catalog.stubs(:to_ral).returns catalog
768
+
769
+ catalog.expects(:host_config=).with false
770
+
771
+ @settings.use(:main)
701
772
  end
702
773
 
703
774
  it "should support a method for re-using all currently used sections" do
704
- Dir.expects(:mkdir).with("/thirddir").times(2)
705
- @settings.use(:third)
775
+ @settings.expects(:to_catalog).with(:main, :third).times(2).returns Puppet::Resource::Catalog.new("foo")
776
+
777
+ @settings.use(:main, :third)
706
778
  @settings.reuse
707
779
  end
708
780
 
709
781
  it "should fail with an appropriate message if any resources fail" do
710
- stub_transaction
782
+ @catalog = Puppet::Resource::Catalog.new("foo")
783
+ @catalog.stubs(:to_ral).returns @catalog
784
+ @settings.expects(:to_catalog).returns @catalog
785
+
786
+ @trans = mock("transaction")
787
+ @catalog.expects(:apply).yields(@trans)
788
+
711
789
  @trans.expects(:any_failed?).returns(true)
790
+
712
791
  report = mock 'report'
713
792
  @trans.expects(:report).returns report
714
793
 
@@ -718,8 +797,6 @@ describe Puppet::Util::Settings do
718
797
  @settings.expects(:raise).with { |msg| msg.include?("My failure") }
719
798
  @settings.use(:whatever)
720
799
  end
721
-
722
- after { Puppet::Type.allclear }
723
800
  end
724
801
 
725
802
  describe "when dealing with printing configs" do
@@ -844,4 +921,76 @@ describe Puppet::Util::Settings do
844
921
  end
845
922
  end
846
923
  end
924
+
925
+ describe "when setting a timer to trigger configuration file reparsing" do
926
+ before do
927
+ @settings = Puppet::Util::Settings.new
928
+ @settings.setdefaults :foo, :filetimeout => [5, "eh"]
929
+ end
930
+
931
+ it "should do nothing if no filetimeout setting is available" do
932
+ @settings.expects(:value).with(:filetimeout).returns nil
933
+ EventLoop::Timer.expects(:new).never
934
+ @settings.set_filetimeout_timer
935
+ end
936
+
937
+ it "should always convert the timer interval to an integer" do
938
+ @settings.expects(:value).with(:filetimeout).returns "10"
939
+ EventLoop::Timer.expects(:new).with(:interval => 10, :start? => true, :tolerance => 1)
940
+ @settings.set_filetimeout_timer
941
+ end
942
+
943
+ it "should do nothing if the filetimeout setting is not greater than 0" do
944
+ @settings.expects(:value).with(:filetimeout).returns -2
945
+ EventLoop::Timer.expects(:new).never
946
+ @settings.set_filetimeout_timer
947
+ end
948
+
949
+ it "should create a timer with its interval set to the filetimeout, start? set to true, and a tolerance of 1" do
950
+ @settings.expects(:value).with(:filetimeout).returns 5
951
+ EventLoop::Timer.expects(:new).with(:interval => 5, :start? => true, :tolerance => 1)
952
+
953
+ @settings.set_filetimeout_timer
954
+ end
955
+
956
+ it "should reparse when the timer goes off" do
957
+ EventLoop::Timer.expects(:new).with(:interval => 5, :start? => true, :tolerance => 1).yields
958
+
959
+ @settings.expects(:reparse)
960
+
961
+ @settings.set_filetimeout_timer
962
+ end
963
+ end
964
+
965
+ describe "when determining if the service user is available" do
966
+ it "should return false if there is no user setting" do
967
+ Puppet::Util::Settings.new.should_not be_service_user_available
968
+ end
969
+
970
+ it "should return false if the user provider says the user is missing" do
971
+ settings = Puppet::Util::Settings.new
972
+ settings.setdefaults :main, :user => ["foo", "doc"]
973
+
974
+ user = mock 'user'
975
+ user.expects(:exists?).returns false
976
+
977
+ Puppet::Type.type(:user).expects(:new).with { |args| args[:name] == "foo" }.returns user
978
+
979
+ settings.should_not be_service_user_available
980
+ end
981
+
982
+ it "should return true if the user provider says the user is present" do
983
+ settings = Puppet::Util::Settings.new
984
+ settings.setdefaults :main, :user => ["foo", "doc"]
985
+
986
+ user = mock 'user'
987
+ user.expects(:exists?).returns true
988
+
989
+ Puppet::Type.type(:user).expects(:new).with { |args| args[:name] == "foo" }.returns user
990
+
991
+ settings.should be_service_user_available
992
+ end
993
+
994
+ it "should cache the result"
995
+ end
847
996
  end