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
@@ -16,21 +16,18 @@ end
16
16
  describe Puppet::Network::HTTP::WEBrick, "when turning on listening" do
17
17
  before do
18
18
  @mock_webrick = stub('webrick', :[] => {})
19
- [:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
19
+ [:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
20
20
  WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
21
21
  @server = Puppet::Network::HTTP::WEBrick.new
22
- @listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
22
+ [:setup_logger, :setup_ssl].each {|meth| @server.stubs(meth).returns({})} # the empty hash is required because of how we're merging
23
+ @listen_params = { :address => "127.0.0.1", :port => 31337, :xmlrpc_handlers => [], :protocols => [ :rest ] }
23
24
  end
24
-
25
+
25
26
  it "should fail if already listening" do
26
27
  @server.listen(@listen_params)
27
28
  Proc.new { @server.listen(@listen_params) }.should raise_error(RuntimeError)
28
29
  end
29
-
30
- it "should require at least one handler" do
31
- Proc.new { @server.listen(@listen_params.delete_if {|k,v| :handlers == k}) }.should raise_error(ArgumentError)
32
- end
33
-
30
+
34
31
  it "should require at least one protocol" do
35
32
  Proc.new { @server.listen(@listen_params.delete_if {|k,v| :protocols == k}) }.should raise_error(ArgumentError)
36
33
  end
@@ -38,46 +35,109 @@ describe Puppet::Network::HTTP::WEBrick, "when turning on listening" do
38
35
  it "should require a listening address to be specified" do
39
36
  Proc.new { @server.listen(@listen_params.delete_if {|k,v| :address == k})}.should raise_error(ArgumentError)
40
37
  end
41
-
38
+
42
39
  it "should require a listening port to be specified" do
43
- Proc.new { @server.listen(@listen_params.delete_if {|k,v| :port == k})}.should raise_error(ArgumentError)
40
+ Proc.new { @server.listen(@listen_params.delete_if {|k,v| :port == k})}.should raise_error(ArgumentError)
44
41
  end
45
42
 
46
- it "should order a webrick server to start" do
43
+ it "should order a webrick server to start in a separate thread" do
47
44
  @mock_webrick.expects(:start)
45
+ # If you remove this you'll sometimes get race condition problems
46
+ Thread.expects(:new).yields
48
47
  @server.listen(@listen_params)
49
48
  end
50
-
49
+
51
50
  it "should tell webrick to listen on the specified address and port" do
52
51
  WEBrick::HTTPServer.expects(:new).with {|args|
53
52
  args[:Port] == 31337 and args[:BindAddress] == "127.0.0.1"
54
53
  }.returns(@mock_webrick)
55
54
  @server.listen(@listen_params)
56
55
  end
57
-
56
+
57
+ it "should configure a logger for webrick" do
58
+ @server.expects(:setup_logger).returns(:Logger => :mylogger)
59
+
60
+ WEBrick::HTTPServer.expects(:new).with {|args|
61
+ args[:Logger] == :mylogger
62
+ }.returns(@mock_webrick)
63
+
64
+ @server.listen(@listen_params)
65
+ end
66
+
67
+ it "should configure SSL for webrick" do
68
+ @server.expects(:setup_ssl).returns(:Ssl => :testing, :Other => :yay)
69
+
70
+ WEBrick::HTTPServer.expects(:new).with {|args|
71
+ args[:Ssl] == :testing and args[:Other] == :yay
72
+ }.returns(@mock_webrick)
73
+
74
+ @server.listen(@listen_params)
75
+ end
76
+
58
77
  it "should be listening" do
59
78
  @server.listen(@listen_params)
60
79
  @server.should be_listening
61
80
  end
62
-
63
- it "should instantiate a handler for each protocol+handler pair to configure web server routing" do
64
- @listen_params[:protocols].each do |protocol|
65
- mock_handler = mock("handler instance for [#{protocol}]")
66
- mock_handler_class = mock("handler class for [#{protocol}]")
67
- @listen_params[:handlers].each do |handler|
68
- @mock_webrick.expects(:mount)
69
- end
81
+
82
+ describe "when the REST protocol is requested" do
83
+ it "should register the REST handler at /" do
84
+ # We don't care about the options here.
85
+ @mock_webrick.expects(:mount).with { |path, klass, options| path == "/" and klass == Puppet::Network::HTTP::WEBrickREST }
86
+
87
+ @server.listen(@listen_params.merge(:protocols => [:rest]))
70
88
  end
71
- @server.listen(@listen_params)
72
89
  end
73
90
 
74
- it "should use a WEBrick + REST class to configure WEBrick when REST services are requested" do
75
- Puppet::Network::HTTP::WEBrick.expects(:class_for_protocol).with(:rest).at_least_once
76
- @server.listen(@listen_params.merge(:protocols => [:rest]))
77
- end
78
-
79
- it "should fail if services from an unknown protocol are requested" do
80
- Proc.new { @server.listen(@listen_params.merge(:protocols => [ :foo ]))}.should raise_error
91
+ describe "when the XMLRPC protocol is requested" do
92
+ before do
93
+ @servlet = mock 'servlet'
94
+
95
+ Puppet::Network::XMLRPC::WEBrickServlet.stubs(:new).returns @servlet
96
+
97
+ @master_handler = mock('master_handler')
98
+ @file_handler = mock('file_handler')
99
+
100
+ @master = mock 'master'
101
+ @file = mock 'file'
102
+ @master_handler.stubs(:new).returns @master
103
+ @file_handler.stubs(:new).returns @file
104
+
105
+ Puppet::Network::Handler.stubs(:handler).with(:master).returns @master_handler
106
+ Puppet::Network::Handler.stubs(:handler).with(:fileserver).returns @file_handler
107
+ end
108
+
109
+ it "should do nothing if no xmlrpc handlers have been specified" do
110
+ Puppet::Network::Handler.expects(:handler).never
111
+
112
+ @server.listen(@listen_params.merge(:protocols => [:xmlrpc], :xmlrpc_handlers => []))
113
+ end
114
+
115
+ it "should look the handler classes up via their base class" do
116
+ Puppet::Network::Handler.expects(:handler).with(:master).returns @master_handler
117
+ Puppet::Network::Handler.expects(:handler).with(:fileserver).returns @file_handler
118
+
119
+ @server.listen(@listen_params.merge(:protocols => [:xmlrpc], :xmlrpc_handlers => [:master, :fileserver]))
120
+ end
121
+
122
+ it "should create an instance for each requested xmlrpc handler" do
123
+ @master_handler.expects(:new).returns @master
124
+ @file_handler.expects(:new).returns @file
125
+
126
+ @server.listen(@listen_params.merge(:protocols => [:xmlrpc], :xmlrpc_handlers => [:master, :fileserver]))
127
+ end
128
+
129
+ it "should create a webrick servlet with the xmlrpc handler instances" do
130
+ Puppet::Network::XMLRPC::WEBrickServlet.expects(:new).with([@master, @file]).returns @servlet
131
+
132
+ @server.listen(@listen_params.merge(:protocols => [:xmlrpc], :xmlrpc_handlers => [:master, :fileserver]))
133
+ end
134
+
135
+ it "should mount the webrick servlet at /RPC2" do
136
+ @mock_webrick.stubs(:mount)
137
+ @mock_webrick.expects(:mount).with("/RPC2", @servlet)
138
+
139
+ @server.listen(@listen_params.merge(:protocols => [:xmlrpc], :xmlrpc_handlers => [:master, :fileserver]))
140
+ end
81
141
  end
82
142
  end
83
143
 
@@ -86,15 +146,15 @@ describe Puppet::Network::HTTP::WEBrick, "when looking up the class to handle a
86
146
  it "should require a protocol" do
87
147
  lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol }.should raise_error(ArgumentError)
88
148
  end
89
-
149
+
90
150
  it "should accept a protocol" do
91
- lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("bob") }.should_not raise_error(ArgumentError)
151
+ lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("bob") }.should_not raise_error(ArgumentError)
92
152
  end
93
-
153
+
94
154
  it "should use a WEBrick + REST class when a REST protocol is specified" do
95
155
  Puppet::Network::HTTP::WEBrick.class_for_protocol("rest").should == Puppet::Network::HTTP::WEBrickREST
96
156
  end
97
-
157
+
98
158
  it "should fail when an unknown protocol is specified" do
99
159
  lambda { Puppet::Network::HTTP::WEBrick.class_for_protocol("abcdefg") }.should raise_error
100
160
  end
@@ -105,23 +165,175 @@ describe Puppet::Network::HTTP::WEBrick, "when turning off listening" do
105
165
  @mock_webrick = stub('webrick', :[] => {})
106
166
  [:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
107
167
  WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
108
- @server = Puppet::Network::HTTP::WEBrick.new
168
+ @server = Puppet::Network::HTTP::WEBrick.new
169
+ [:setup_logger, :setup_ssl].each {|meth| @server.stubs(meth).returns({})} # the empty hash is required because of how we're merging
109
170
  @listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
110
171
  end
111
-
172
+
112
173
  it "should fail unless listening" do
113
174
  Proc.new { @server.unlisten }.should raise_error(RuntimeError)
114
175
  end
115
-
176
+
116
177
  it "should order webrick server to stop" do
117
178
  @mock_webrick.expects(:shutdown)
118
179
  @server.listen(@listen_params)
119
180
  @server.unlisten
120
181
  end
121
-
182
+
122
183
  it "should no longer be listening" do
123
184
  @server.listen(@listen_params)
124
185
  @server.unlisten
125
186
  @server.should_not be_listening
126
187
  end
127
188
  end
189
+
190
+ describe Puppet::Network::HTTP::WEBrick do
191
+ before do
192
+ @mock_webrick = stub('webrick', :[] => {})
193
+ [:mount, :start, :shutdown].each {|meth| @mock_webrick.stubs(meth)}
194
+ WEBrick::HTTPServer.stubs(:new).returns(@mock_webrick)
195
+ @server = Puppet::Network::HTTP::WEBrick.new
196
+ end
197
+
198
+ describe "when configuring an http logger" do
199
+ before do
200
+ Puppet.settings.stubs(:value).returns "something"
201
+ Puppet.settings.stubs(:use)
202
+ @filehandle = stub 'handle', :fcntl => nil, :sync => nil
203
+
204
+ File.stubs(:open).returns @filehandle
205
+ end
206
+
207
+ it "should use the settings for :main, :ssl, and the process name" do
208
+ Puppet.settings.stubs(:value).with(:name).returns "myname"
209
+ Puppet.settings.expects(:use).with(:main, :ssl, "myname")
210
+
211
+ @server.setup_logger
212
+ end
213
+
214
+ it "should use the masterlog if the process name is 'puppetmasterd'" do
215
+ Puppet.settings.stubs(:value).with(:name).returns "puppetmasterd"
216
+ Puppet.settings.expects(:value).with(:masterhttplog).returns "/master/log"
217
+
218
+ File.expects(:open).with("/master/log", "a+").returns @filehandle
219
+
220
+ @server.setup_logger
221
+ end
222
+
223
+ it "should use the httplog if the process name is not 'puppetmasterd'" do
224
+ Puppet.settings.stubs(:value).with(:name).returns "other"
225
+ Puppet.settings.expects(:value).with(:httplog).returns "/other/log"
226
+
227
+ File.expects(:open).with("/other/log", "a+").returns @filehandle
228
+
229
+ @server.setup_logger
230
+ end
231
+
232
+ describe "and creating the logging filehandle" do
233
+ it "should set fcntl to 'Fcntl::F_SETFD, Fcntl::FD_CLOEXEC'" do
234
+ @filehandle.expects(:fcntl).with(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
235
+
236
+ @server.setup_logger
237
+ end
238
+
239
+ it "should sync the filehandle" do
240
+ @filehandle.expects(:sync)
241
+
242
+ @server.setup_logger
243
+ end
244
+ end
245
+
246
+ it "should create a new WEBrick::Log instance with the open filehandle" do
247
+ WEBrick::Log.expects(:new).with(@filehandle)
248
+
249
+ @server.setup_logger
250
+ end
251
+
252
+ it "should set debugging if the current loglevel is :debug" do
253
+ Puppet::Util::Log.expects(:level).returns :debug
254
+
255
+ WEBrick::Log.expects(:new).with { |handle, debug| debug == WEBrick::Log::DEBUG }
256
+
257
+ @server.setup_logger
258
+ end
259
+
260
+ it "should return the logger as the main log" do
261
+ logger = mock 'logger'
262
+ WEBrick::Log.expects(:new).returns logger
263
+
264
+ @server.setup_logger[:Logger].should == logger
265
+ end
266
+
267
+ it "should return the logger as the access log using both the Common and Referer log format" do
268
+ logger = mock 'logger'
269
+ WEBrick::Log.expects(:new).returns logger
270
+
271
+ @server.setup_logger[:AccessLog].should == [
272
+ [logger, WEBrick::AccessLog::COMMON_LOG_FORMAT],
273
+ [logger, WEBrick::AccessLog::REFERER_LOG_FORMAT]
274
+ ]
275
+ end
276
+ end
277
+
278
+ describe "when configuring ssl" do
279
+ before do
280
+ @key = stub 'key', :content => "mykey"
281
+ @cert = stub 'cert', :content => "mycert"
282
+ @host = stub 'host', :key => @key, :certificate => @cert, :name => "yay", :ssl_store => "mystore"
283
+
284
+ Puppet::SSL::Certificate.stubs(:find).with('ca').returns @cert
285
+
286
+ Puppet::SSL::Host.stubs(:localhost).returns @host
287
+ end
288
+
289
+ it "should use the key from the localhost SSL::Host instance" do
290
+ Puppet::SSL::Host.expects(:localhost).returns @host
291
+ @host.expects(:key).returns @key
292
+
293
+ @server.setup_ssl[:SSLPrivateKey].should == "mykey"
294
+ end
295
+
296
+ it "should configure the certificate" do
297
+ @server.setup_ssl[:SSLCertificate].should == "mycert"
298
+ end
299
+
300
+ it "should fail if no CA certificate can be found" do
301
+ Puppet::SSL::Certificate.stubs(:find).with('ca').returns nil
302
+
303
+ lambda { @server.setup_ssl }.should raise_error(Puppet::Error)
304
+ end
305
+
306
+ it "should specify the path to the CA certificate" do
307
+ Puppet.settings.stubs(:value).returns "whatever"
308
+ Puppet.settings.stubs(:value).with(:hostcrl).returns 'false'
309
+ Puppet.settings.stubs(:value).with(:localcacert).returns '/ca/crt'
310
+
311
+ @server.setup_ssl[:SSLCACertificateFile].should == "/ca/crt"
312
+ end
313
+
314
+ it "should start ssl immediately" do
315
+ @server.setup_ssl[:SSLStartImmediately].should be_true
316
+ end
317
+
318
+ it "should enable ssl" do
319
+ @server.setup_ssl[:SSLEnable].should be_true
320
+ end
321
+
322
+ it "should configure the verification method as 'OpenSSL::SSL::VERIFY_PEER'" do
323
+ @server.setup_ssl[:SSLVerifyClient].should == OpenSSL::SSL::VERIFY_PEER
324
+ end
325
+
326
+ it "should add an x509 store" do
327
+ Puppet.settings.stubs(:value).returns "whatever"
328
+ Puppet.settings.stubs(:value).with(:hostcrl).returns '/my/crl'
329
+
330
+ @host.expects(:ssl_store).returns "mystore"
331
+
332
+ @server.setup_ssl[:SSLCertificateStore].should == "mystore"
333
+ end
334
+
335
+ it "should set the certificate name to 'nil'" do
336
+ @server.setup_ssl[:SSLCertName].should be_nil
337
+ end
338
+ end
339
+ end
@@ -4,320 +4,154 @@ require File.dirname(__FILE__) + '/../../../../spec_helper'
4
4
  require 'puppet/network/http'
5
5
  require 'puppet/network/http/webrick/rest'
6
6
 
7
- describe Puppet::Network::HTTP::WEBrickREST, "when initializing" do
8
- before do
9
- @mock_webrick = stub('WEBrick server', :mount => true, :[] => {})
10
- @mock_model = mock('indirected model')
11
- Puppet::Indirector::Indirection.stubs(:model).returns(@mock_model)
12
- @params = [ @mock_webrick, :foo ]
7
+ describe Puppet::Network::HTTP::WEBrickREST do
8
+ it "should include the Puppet::Network::HTTP::Handler module" do
9
+ Puppet::Network::HTTP::WEBrickREST.ancestors.should be_include(Puppet::Network::HTTP::Handler)
13
10
  end
14
11
 
15
- it "should require access to a WEBrick server" do
16
- Proc.new {
17
- @params[0] = nil
18
- Puppet::Network::HTTP::WEBrickREST.new(*@params)
19
- }.should raise_error(ArgumentError)
20
- end
21
-
22
- it "should require an indirection name" do
23
- Proc.new { Puppet::Network::HTTP::WEBrickREST.new(@params.first) }.should raise_error(ArgumentError)
24
- end
25
-
26
- it "should look up the indirection model from the indirection name" do
27
- Puppet::Indirector::Indirection.expects(:model).returns(@mock_model)
28
- Puppet::Network::HTTP::WEBrickREST.new(*@params)
29
- end
30
-
31
- it "should fail if the indirection is not known" do
32
- Puppet::Indirector::Indirection.expects(:model).returns(nil)
33
- Proc.new { Puppet::Network::HTTP::WEBrickREST.new(*@params) }.should raise_error(ArgumentError)
34
- end
35
- end
36
-
37
- describe Puppet::Network::HTTP::WEBrickREST, "when receiving a request" do
38
- before do
39
- @mock_request = stub('webrick http request', :query => {}, :peeraddr => %w{eh boo host ip}, :client_cert => nil)
40
- @mock_response = stub('webrick http response', :status= => true, :body= => true)
41
- @mock_model_class = stub('indirected model class')
42
- @mock_webrick = stub('webrick http server', :mount => true, :[] => {})
43
- Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@mock_model_class)
44
- @handler = Puppet::Network::HTTP::WEBrickREST.new(@mock_webrick, :foo)
45
- end
46
-
47
- def setup_find_request
48
- @mock_request.stubs(:request_method).returns('GET')
49
- @mock_request.stubs(:path).returns('/foo/key')
50
- @mock_model_class.stubs(:find)
51
- end
52
-
53
- def setup_search_request
54
- @mock_request.stubs(:request_method).returns('GET')
55
- @mock_request.stubs(:path).returns('/foos')
56
- @mock_model_class.stubs(:search).returns([])
57
- end
58
-
59
- def setup_destroy_request
60
- @mock_request.stubs(:request_method).returns('DELETE')
61
- @mock_request.stubs(:path).returns('/foo/key')
62
- @mock_model_class.stubs(:destroy)
63
- end
64
-
65
- def setup_save_request
66
- @mock_request.stubs(:request_method).returns('PUT')
67
- @mock_request.stubs(:path).returns('/foo')
68
- @mock_request.stubs(:body).returns('This is a fake request body')
69
- @mock_model_instance = stub('indirected model instance', :save => true)
70
- @mock_model_class.stubs(:from_yaml).returns(@mock_model_instance)
71
- end
72
-
73
- def setup_bad_request
74
- @mock_request.stubs(:request_method).returns('POST')
75
- @mock_request.stubs(:path).returns('/foos')
76
- end
77
-
78
- it "should delegate its :service method to its :process method" do
79
- @handler.expects(:process).with(@mock_request, @mock_response).returns "stuff"
80
- @handler.service(@mock_request, @mock_response).should == "stuff"
81
- end
82
-
83
- it "should call the model find method if the request represents a singular HTTP GET" do
84
- setup_find_request
85
- @mock_model_class.expects(:find).with { |key, args| key == 'key' }
86
- @handler.process(@mock_request, @mock_response)
87
- end
88
-
89
- it "should call the model search method if the request represents a plural HTTP GET" do
90
- setup_search_request
91
- @mock_model_class.expects(:search).returns([])
92
- @handler.process(@mock_request, @mock_response)
93
- end
94
-
95
- it "should call the model destroy method if the request represents an HTTP DELETE" do
96
- setup_destroy_request
97
- @mock_model_class.expects(:destroy).with { |key, args| key == 'key' }
98
- @handler.process(@mock_request, @mock_response)
99
- end
100
-
101
- it "should call the model save method if the request represents an HTTP PUT" do
102
- setup_save_request
103
- @mock_model_instance.expects(:save)
104
- @handler.process(@mock_request, @mock_response)
105
- end
106
-
107
- it "should fail if the HTTP method isn't supported" do
108
- @mock_request.stubs(:request_method).returns('POST')
109
- @mock_request.stubs(:path).returns('/foo')
110
- @mock_response.expects(:status=).with(404)
111
- @handler.process(@mock_request, @mock_response)
112
- end
113
-
114
- it "should fail if delete request's pluralization is wrong" do
115
- @mock_request.stubs(:request_method).returns('DELETE')
116
- @mock_request.stubs(:path).returns('/foos/key')
117
- @mock_response.expects(:status=).with(404)
118
- @handler.process(@mock_request, @mock_response)
119
- end
120
-
121
- it "should fail if put request's pluralization is wrong" do
122
- @mock_request.stubs(:request_method).returns('PUT')
123
- @mock_request.stubs(:path).returns('/foos/key')
124
- @mock_response.expects(:status=).with(404)
125
- @handler.process(@mock_request, @mock_response)
126
- end
127
-
128
- it "should fail if the request is for an unknown path" do
129
- @mock_request.stubs(:request_method).returns('GET')
130
- @mock_request.stubs(:path).returns('/bar/key')
131
- @mock_response.expects(:status=).with(404)
132
- @handler.process(@mock_request, @mock_response)
12
+ describe "when initializing" do
13
+ it "should call the Handler's initialization hook with its provided arguments as the server and handler" do
14
+ Puppet::Network::HTTP::WEBrickREST.any_instance.expects(:initialize_for_puppet).with(:server => "my", :handler => "arguments")
15
+ Puppet::Network::HTTP::WEBrickREST.new("my", "arguments")
16
+ end
133
17
  end
134
18
 
135
- describe "and determining the request parameters" do
136
- it "should include the HTTP request parameters" do
137
- @mock_request.stubs(:query).returns(:foo => :baz, :bar => :xyzzy)
138
- result = @handler.params(@mock_request)
139
- result[:foo].should == :baz
140
- result[:bar].should == :xyzzy
19
+ describe "when receiving a request" do
20
+ before do
21
+ @request = stub('webrick http request', :query => {}, :peeraddr => %w{eh boo host ip}, :client_cert => nil)
22
+ @response = stub('webrick http response', :status= => true, :body= => true)
23
+ @model_class = stub('indirected model class')
24
+ @webrick = stub('webrick http server', :mount => true, :[] => {})
25
+ Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@model_class)
26
+ @handler = Puppet::Network::HTTP::WEBrickREST.new(@webrick, :foo)
141
27
  end
142
28
 
143
- it "should pass the client's ip address to model find" do
144
- @mock_request.stubs(:peeraddr).returns(%w{noidea dunno hostname ipaddress})
145
- @handler.params(@mock_request)[:ip].should == "ipaddress"
29
+ it "should delegate its :service method to its :process method" do
30
+ @handler.expects(:process).with(@request, @response).returns "stuff"
31
+ @handler.service(@request, @response).should == "stuff"
146
32
  end
147
33
 
148
- it "should set 'authenticated' to true if a certificate is present" do
149
- cert = stub 'cert', :subject => [%w{CN host.domain.com}]
150
- @mock_request.stubs(:client_cert).returns cert
151
- @handler.params(@mock_request)[:authenticated].should be_true
152
- end
34
+ describe "when using the Handler interface" do
35
+ it "should use the 'accept' request parameter as the Accept header" do
36
+ @request.expects(:[]).with("accept").returns "foobar"
37
+ @handler.accept_header(@request).should == "foobar"
38
+ end
153
39
 
154
- it "should set 'authenticated' to false if no certificate is present" do
155
- @mock_request.stubs(:client_cert).returns nil
156
- @handler.params(@mock_request)[:authenticated].should be_false
157
- end
40
+ it "should use the 'content-type' request header as the Content-Type header" do
41
+ @request.expects(:[]).with("content-type").returns "foobar"
42
+ @handler.content_type_header(@request).should == "foobar"
43
+ end
158
44
 
159
- it "should pass the client's certificate name to model method if a certificate is present" do
160
- cert = stub 'cert', :subject => [%w{CN host.domain.com}]
161
- @mock_request.stubs(:client_cert).returns cert
162
- @handler.params(@mock_request)[:node].should == "host.domain.com"
163
- end
45
+ it "should use the request method as the http method" do
46
+ @request.expects(:request_method).returns "FOO"
47
+ @handler.http_method(@request).should == "FOO"
48
+ end
164
49
 
165
- it "should not pass a node name to model method if no certificate is present" do
166
- @mock_request.stubs(:client_cert).returns nil
167
- @handler.params(@mock_request).should_not be_include(:node)
168
- end
169
- end
50
+ it "should return the request path as the path" do
51
+ @request.expects(:path).returns "/foo/bar"
52
+ @handler.path(@request).should == "/foo/bar"
53
+ end
170
54
 
171
- describe "when finding a model instance" do |variable|
172
- it "should fail to find model if key is not specified" do
173
- @mock_request.stubs(:request_method).returns('GET')
174
- @mock_request.stubs(:path).returns('/foo')
175
- @mock_response.expects(:status=).with(404)
176
- @handler.process(@mock_request, @mock_response)
177
- end
55
+ it "should return the request body as the body" do
56
+ @request.expects(:body).returns "my body"
57
+ @handler.body(@request).should == "my body"
58
+ end
178
59
 
179
- it "should use a common method for determining the request parameters" do
180
- setup_find_request
181
- @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
182
- @mock_model_class.expects(:find).with do |key, args|
183
- args[:foo] == :baz and args[:bar] == :xyzzy
60
+ it "should set the response's 'content-type' header when setting the content type" do
61
+ @response.expects(:[]=).with("content-type", "text/html")
62
+ @handler.set_content_type(@response, "text/html")
184
63
  end
185
- @handler.process(@mock_request, @mock_response)
186
- end
187
64
 
188
- it "should generate a 200 response when a model find call succeeds" do
189
- setup_find_request
190
- @mock_response.expects(:status=).with(200)
191
- @handler.process(@mock_request, @mock_response)
192
- end
65
+ it "should set the status and body on the response when setting the response for a successful query" do
66
+ @response.expects(:status=).with 200
67
+ @response.expects(:body=).with "mybody"
193
68
 
194
- it "should return a serialized object when a model find call succeeds" do
195
- setup_find_request
196
- @mock_model_instance = stub('model instance')
197
- @mock_model_instance.expects(:to_yaml)
198
- @mock_model_class.stubs(:find).returns(@mock_model_instance)
199
- @handler.process(@mock_request, @mock_response)
200
- end
69
+ @handler.set_response(@response, "mybody", 200)
70
+ end
201
71
 
202
- it "should serialize a controller exception when an exception is thrown by find" do
203
- setup_find_request
204
- @mock_model_class.expects(:find).raises(ArgumentError)
205
- @mock_response.expects(:status=).with(404)
206
- @handler.process(@mock_request, @mock_response)
207
- end
208
- end
72
+ it "should set the status and message on the response when setting the response for a failed query" do
73
+ @response.expects(:status=).with 400
74
+ @response.expects(:reason_phrase=).with "mybody"
209
75
 
210
- describe "when destroying a model instance" do |variable|
211
- it "should fail to destroy model if key is not specified" do
212
- @mock_request.stubs(:request_method).returns('DELETE')
213
- @mock_request.stubs(:path).returns('/foo')
214
- @mock_response.expects(:status=).with(404)
215
- @handler.process(@mock_request, @mock_response)
76
+ @handler.set_response(@response, "mybody", 400)
77
+ end
216
78
  end
217
79
 
218
- it "should use a common method for determining the request parameters" do
219
- setup_destroy_request
220
- @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
221
- @mock_model_class.expects(:destroy).with do |key, args|
222
- args[:foo] == :baz and args[:bar] == :xyzzy
80
+ describe "and determining the request parameters" do
81
+ it "should include the HTTP request parameters, with the keys as symbols" do
82
+ @request.stubs(:query).returns("foo" => "baz", "bar" => "xyzzy")
83
+ result = @handler.params(@request)
84
+ result[:foo].should == "baz"
85
+ result[:bar].should == "xyzzy"
223
86
  end
224
- @handler.process(@mock_request, @mock_response)
225
- end
226
87
 
227
- it "should generate a 200 response when a model destroy call succeeds" do
228
- setup_destroy_request
229
- @mock_response.expects(:status=).with(200)
230
- @handler.process(@mock_request, @mock_response)
231
- end
88
+ it "should CGI-decode the HTTP parameters" do
89
+ encoding = CGI.escape("foo bar")
90
+ @request.expects(:query).returns('foo' => encoding)
91
+ result = @handler.params(@request)
92
+ result[:foo].should == "foo bar"
93
+ end
232
94
 
233
- it "should return a serialized success result when a model destroy call succeeds" do
234
- setup_destroy_request
235
- @mock_model_class.stubs(:destroy).returns(true)
236
- @mock_response.expects(:body=).with("--- true\n")
237
- @handler.process(@mock_request, @mock_response)
238
- end
95
+ it "should convert the string 'true' to the boolean" do
96
+ @request.expects(:query).returns('foo' => "true")
97
+ result = @handler.params(@request)
98
+ result[:foo].should be_true
99
+ end
239
100
 
240
- it "should serialize a controller exception when an exception is thrown by destroy" do
241
- setup_destroy_request
242
- @mock_model_class.expects(:destroy).raises(ArgumentError)
243
- @mock_response.expects(:status=).with(404)
244
- @handler.process(@mock_request, @mock_response)
245
- end
246
- end
101
+ it "should convert the string 'false' to the boolean" do
102
+ @request.expects(:query).returns('foo' => "false")
103
+ result = @handler.params(@request)
104
+ result[:foo].should be_false
105
+ end
247
106
 
248
- describe "when saving a model instance" do
249
- it "should fail to save model if data is not specified" do
250
- @mock_request.stubs(:request_method).returns('PUT')
251
- @mock_request.stubs(:path).returns('/foo')
252
- @mock_request.stubs(:body).returns('')
253
- @mock_response.expects(:status=).with(404)
254
- @handler.process(@mock_request, @mock_response)
255
- end
107
+ it "should YAML-load and CGI-decode values that are YAML-encoded" do
108
+ escaping = CGI.escape(YAML.dump(%w{one two}))
109
+ @request.expects(:query).returns('foo' => escaping)
110
+ result = @handler.params(@request)
111
+ result[:foo].should == %w{one two}
112
+ end
256
113
 
257
- it "should use a common method for determining the request parameters" do
258
- setup_save_request
259
- @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
260
- @mock_model_instance.expects(:save).with do |args|
261
- args[:foo] == :baz and args[:bar] == :xyzzy
114
+ it "should not allow clients to set the node via the request parameters" do
115
+ @request.stubs(:query).returns("node" => "foo")
116
+ @handler.stubs(:resolve_node)
117
+
118
+ @handler.params(@request)[:node].should be_nil
262
119
  end
263
- @handler.process(@mock_request, @mock_response)
264
- end
265
120
 
266
- it "should generate a 200 response when a model save call succeeds" do
267
- setup_save_request
268
- @mock_response.expects(:status=).with(200)
269
- @handler.process(@mock_request, @mock_response)
270
- end
121
+ it "should not allow clients to set the IP via the request parameters" do
122
+ @request.stubs(:query).returns("ip" => "foo")
123
+ @handler.params(@request)[:ip].should_not == "foo"
124
+ end
271
125
 
272
- it "should return a serialized object when a model save call succeeds" do
273
- setup_save_request
274
- @mock_model_instance.stubs(:save).returns(@mock_model_instance)
275
- @mock_model_instance.expects(:to_yaml).returns('foo')
276
- @handler.process(@mock_request, @mock_response)
277
- end
126
+ it "should pass the client's ip address to model find" do
127
+ @request.stubs(:peeraddr).returns(%w{noidea dunno hostname ipaddress})
128
+ @handler.params(@request)[:ip].should == "ipaddress"
129
+ end
278
130
 
279
- it "should serialize a controller exception when an exception is thrown by save" do
280
- setup_save_request
281
- @mock_model_instance.expects(:save).raises(ArgumentError)
282
- @mock_response.expects(:status=).with(404)
283
- @handler.process(@mock_request, @mock_response)
284
- end
285
- end
131
+ it "should set 'authenticated' to true if a certificate is present" do
132
+ cert = stub 'cert', :subject => [%w{CN host.domain.com}]
133
+ @request.stubs(:client_cert).returns cert
134
+ @handler.params(@request)[:authenticated].should be_true
135
+ end
286
136
 
287
- describe "when searching for model instances" do
288
- it "should use a common method for determining the request parameters" do
289
- setup_search_request
290
- @handler.stubs(:params).returns(:foo => :baz, :bar => :xyzzy)
291
- @mock_model_class.expects(:search).with do |args|
292
- args[:foo] == :baz and args[:bar] == :xyzzy
137
+ it "should set 'authenticated' to false if no certificate is present" do
138
+ @request.stubs(:client_cert).returns nil
139
+ @handler.params(@request)[:authenticated].should be_false
293
140
  end
294
- @handler.process(@mock_request, @mock_response)
295
- end
296
141
 
297
- it "should generate a 200 response when a model search call succeeds" do
298
- setup_search_request
299
- @mock_response.expects(:status=).with(200)
300
- @handler.process(@mock_request, @mock_response)
301
- end
142
+ it "should pass the client's certificate name to model method if a certificate is present" do
143
+ cert = stub 'cert', :subject => [%w{CN host.domain.com}]
144
+ @request.stubs(:client_cert).returns cert
145
+ @handler.params(@request)[:node].should == "host.domain.com"
146
+ end
302
147
 
303
- it "should return a list of serialized objects when a model search call succeeds" do
304
- setup_search_request
305
- mock_matches = [1..5].collect {|i| mock("model instance #{i}", :to_yaml => "model instance #{i}") }
306
- @mock_model_class.stubs(:search).returns(mock_matches)
307
- @handler.process(@mock_request, @mock_response)
308
- end
148
+ it "should resolve the node name with an ip address look-up if no certificate is present" do
149
+ @request.stubs(:client_cert).returns nil
309
150
 
310
- it "should serialize a controller exception when an exception is thrown by search" do
311
- setup_search_request
312
- @mock_model_class.expects(:search).raises(ArgumentError)
313
- @mock_response.expects(:status=).with(404)
314
- @handler.process(@mock_request, @mock_response)
315
- end
316
- end
151
+ @handler.expects(:resolve_node).returns(:resolved_node)
317
152
 
318
- it "should serialize a controller exception if the request fails" do
319
- setup_bad_request
320
- @mock_response.expects(:status=).with(404)
321
- @handler.process(@mock_request, @mock_response)
153
+ @handler.params(@request)[:node].should == :resolved_node
154
+ end
155
+ end
322
156
  end
323
157
  end