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
@@ -8,7 +8,7 @@ require 'puppet/network/http'
8
8
 
9
9
  describe "Puppet::Network::HTTP::Mongrel", "after initializing" do
10
10
  confine "Mongrel is not available" => Puppet.features.mongrel?
11
-
11
+
12
12
  it "should not be listening" do
13
13
  require 'puppet/network/http/mongrel'
14
14
 
@@ -27,87 +27,101 @@ describe "Puppet::Network::HTTP::Mongrel", "when turning on listening" do
27
27
  @mock_mongrel.stubs(:run)
28
28
  @mock_mongrel.stubs(:register)
29
29
  Mongrel::HttpServer.stubs(:new).returns(@mock_mongrel)
30
- @listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
30
+
31
+ @mock_puppet_mongrel = mock('puppet_mongrel')
32
+ Puppet::Network::HTTPServer::Mongrel.stubs(:new).returns(@mock_puppet_mongrel)
33
+
34
+ @listen_params = { :address => "127.0.0.1", :port => 31337, :protocols => [ :rest, :xmlrpc ], :xmlrpc_handlers => [ :status, :fileserver ] }
31
35
  end
32
-
36
+
33
37
  it "should fail if already listening" do
34
38
  @server.listen(@listen_params)
35
39
  Proc.new { @server.listen(@listen_params) }.should raise_error(RuntimeError)
36
40
  end
37
-
38
- it "should require at least one handler" do
39
- Proc.new { @server.listen(@listen_params.delete_if {|k,v| :handlers == k}) }.should raise_error(ArgumentError)
40
- end
41
-
41
+
42
42
  it "should require at least one protocol" do
43
43
  Proc.new { @server.listen(@listen_params.delete_if {|k,v| :protocols == k}) }.should raise_error(ArgumentError)
44
44
  end
45
-
45
+
46
46
  it "should require a listening address to be specified" do
47
47
  Proc.new { @server.listen(@listen_params.delete_if {|k,v| :address == k})}.should raise_error(ArgumentError)
48
48
  end
49
-
49
+
50
50
  it "should require a listening port to be specified" do
51
51
  Proc.new { @server.listen(@listen_params.delete_if {|k,v| :port == k})}.should raise_error(ArgumentError)
52
52
  end
53
-
53
+
54
54
  it "should order a mongrel server to start" do
55
55
  @mock_mongrel.expects(:run)
56
56
  @server.listen(@listen_params)
57
57
  end
58
-
58
+
59
59
  it "should tell mongrel to listen on the specified address and port" do
60
60
  Mongrel::HttpServer.expects(:new).with("127.0.0.1", 31337).returns(@mock_mongrel)
61
61
  @server.listen(@listen_params)
62
62
  end
63
-
63
+
64
64
  it "should be listening" do
65
65
  Mongrel::HttpServer.expects(:new).returns(@mock_mongrel)
66
66
  @server.listen(@listen_params)
67
67
  @server.should be_listening
68
68
  end
69
69
 
70
- it "should instantiate a handler for each protocol+handler pair to configure web server routing" do
71
- @listen_params[:protocols].each do |protocol|
72
- @listen_params[:handlers].each do |handler|
73
- @mock_mongrel.expects(:register)
74
- end
70
+ describe "when providing REST services" do
71
+ it "should instantiate a handler at / for handling REST calls" do
72
+ Puppet::Network::HTTP::MongrelREST.expects(:new).returns "myhandler"
73
+ @mock_mongrel.expects(:register).with("/", "myhandler")
74
+
75
+ @server.listen(@listen_params)
76
+ end
77
+
78
+ it "should use a Mongrel + REST class to configure Mongrel when REST services are requested" do
79
+ @server.expects(:class_for_protocol).with(:rest).at_least_once.returns(Puppet::Network::HTTP::MongrelREST)
80
+ @server.listen(@listen_params)
75
81
  end
76
- @server.listen(@listen_params)
77
- end
78
-
79
- it "should use a Mongrel + REST class to configure Mongrel when REST services are requested" do
80
- @server.expects(:class_for_protocol).with(:rest).at_least_once.returns(Puppet::Network::HTTP::MongrelREST)
81
- @server.listen(@listen_params)
82
82
  end
83
-
84
- it "should fail if services from an unknown protocol are requested" do
85
- Proc.new { @server.listen(@listen_params.merge(:protocols => [ :foo ]))}.should raise_error(ArgumentError)
83
+
84
+ describe "when providing XMLRPC services" do
85
+ it "should do nothing if no xmlrpc handlers have been provided" do
86
+ Puppet::Network::HTTPServer::Mongrel.expects(:new).never
87
+ @server.listen(@listen_params.merge(:xmlrpc_handlers => []))
88
+ end
89
+
90
+ it "should create an instance of the existing Mongrel http server with the right handlers" do
91
+ Puppet::Network::HTTPServer::Mongrel.expects(:new).with([:status, :master]).returns(@mock_puppet_mongrel)
92
+ @server.listen(@listen_params.merge(:xmlrpc_handlers => [:status, :master]))
93
+ end
94
+
95
+ it "should register the Mongrel server instance at /RPC2" do
96
+ @mock_mongrel.expects(:register).with("/RPC2", @mock_puppet_mongrel)
97
+
98
+ @server.listen(@listen_params.merge(:xmlrpc_handlers => [:status, :master]))
99
+ end
86
100
  end
87
101
  end
88
102
 
89
103
  describe "Puppet::Network::HTTP::Mongrel", "when turning off listening" do
90
104
  confine "Mongrel is not available" => Puppet.features.mongrel?
91
-
105
+
92
106
  before do
93
107
  @mock_mongrel = mock('mongrel httpserver')
94
108
  @mock_mongrel.stubs(:run)
95
109
  @mock_mongrel.stubs(:register)
96
110
  Mongrel::HttpServer.stubs(:new).returns(@mock_mongrel)
97
- @server = Puppet::Network::HTTP::Mongrel.new
111
+ @server = Puppet::Network::HTTP::Mongrel.new
98
112
  @listen_params = { :address => "127.0.0.1", :port => 31337, :handlers => [ :node, :catalog ], :protocols => [ :rest ] }
99
113
  end
100
-
114
+
101
115
  it "should fail unless listening" do
102
116
  Proc.new { @server.unlisten }.should raise_error(RuntimeError)
103
117
  end
104
-
118
+
105
119
  it "should order mongrel server to stop" do
106
120
  @server.listen(@listen_params)
107
121
  @mock_mongrel.expects(:stop)
108
122
  @server.unlisten
109
123
  end
110
-
124
+
111
125
  it "should not be listening" do
112
126
  @server.listen(@listen_params)
113
127
  @mock_mongrel.stubs(:stop)
@@ -1,377 +1,232 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require File.dirname(__FILE__) + '/../../../../spec_helper'
4
+
4
5
  require 'puppet/network/http'
5
6
 
6
- describe "Puppet::Network::HTTP::MongrelREST", "when initializing" do
7
+ describe "Puppet::Network::HTTP::MongrelREST" do
7
8
  confine "Mongrel is not available" => Puppet.features.mongrel?
8
-
9
9
  before do
10
10
  require 'puppet/network/http/mongrel/rest'
11
-
12
- @mock_mongrel = mock('Mongrel server')
13
- @mock_mongrel.stubs(:register)
14
- @mock_model = mock('indirected model')
15
- Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@mock_model)
16
- @params = { :server => @mock_mongrel, :handler => :foo }
17
11
  end
18
12
 
19
- it "should require access to a Mongrel server" do
20
- Proc.new { Puppet::Network::HTTP::MongrelREST.new(@params.delete_if {|k,v| :server == k })}.should raise_error(ArgumentError)
21
- end
22
13
 
23
- it "should require an indirection name" do
24
- Proc.new { Puppet::Network::HTTP::MongrelREST.new(@params.delete_if {|k,v| :handler == k })}.should raise_error(ArgumentError)
14
+ it "should include the Puppet::Network::HTTP::Handler module" do
15
+ Puppet::Network::HTTP::MongrelREST.ancestors.should be_include(Puppet::Network::HTTP::Handler)
25
16
  end
26
17
 
27
- it "should look up the indirection model from the indirection name" do
28
- Puppet::Indirector::Indirection.expects(:model).with(:foo).returns(@mock_model)
29
- Puppet::Network::HTTP::MongrelREST.new(@params)
30
- end
31
-
32
- it "should fail if the indirection is not known" do
33
- Puppet::Indirector::Indirection.expects(:model).with(:foo).returns(nil)
34
- Proc.new { Puppet::Network::HTTP::MongrelREST.new(@params) }.should raise_error(ArgumentError)
35
- end
36
- end
37
-
38
- describe "Puppet::Network::HTTP::MongrelREST", "when receiving a request" do
39
- confine "Mongrel is not available" => Puppet.features.mongrel?
40
-
41
- before do
42
- @mock_request = stub('mongrel http request')
43
- @mock_head = stub('response head')
44
- @mock_body = stub('response body', :write => true)
45
- @mock_response = stub('mongrel http response')
46
- @mock_response.stubs(:start).yields(@mock_head, @mock_body)
47
- @mock_model_class = stub('indirected model class')
48
- @mock_mongrel = stub('mongrel http server', :register => true)
49
- Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@mock_model_class)
50
- @handler = Puppet::Network::HTTP::MongrelREST.new(:server => @mock_mongrel, :handler => :foo)
51
- end
52
-
53
- def setup_find_request(params = {})
54
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET',
55
- Mongrel::Const::REQUEST_PATH => '/foo/key',
56
- 'QUERY_STRING' => ''}.merge(params))
57
- @mock_model_class.stubs(:find)
58
- end
59
-
60
- def setup_search_request(params = {})
61
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET',
62
- Mongrel::Const::REQUEST_PATH => '/foos',
63
- 'QUERY_STRING' => '' }.merge(params))
64
- @mock_model_class.stubs(:search).returns([])
65
- end
66
-
67
- def setup_destroy_request(params = {})
68
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'DELETE',
69
- Mongrel::Const::REQUEST_PATH => '/foo/key',
70
- 'QUERY_STRING' => '' }.merge(params))
71
- @mock_model_class.stubs(:destroy)
72
- end
73
-
74
- def setup_save_request(params = {})
75
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'PUT',
76
- Mongrel::Const::REQUEST_PATH => '/foo',
77
- 'QUERY_STRING' => '' }.merge(params))
78
- @mock_request.stubs(:body).returns('this is a fake request body')
79
- @mock_model_instance = stub('indirected model instance', :save => true)
80
- @mock_model_class.stubs(:from_yaml).returns(@mock_model_instance)
81
- end
82
-
83
- def setup_bad_request
84
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'POST', Mongrel::Const::REQUEST_PATH => '/foos'})
85
- end
86
-
87
- it "should call the model find method if the request represents a singular HTTP GET" do
88
- setup_find_request
89
- @mock_model_class.expects(:find).with { |key, args| key == 'key' }
90
- @handler.process(@mock_request, @mock_response)
91
- end
92
-
93
- it "should call the model search method if the request represents a plural HTTP GET" do
94
- setup_search_request
95
- @mock_model_class.expects(:search).returns([])
96
- @handler.process(@mock_request, @mock_response)
97
- end
98
-
99
- it "should call the model destroy method if the request represents an HTTP DELETE" do
100
- setup_destroy_request
101
- @mock_model_class.expects(:destroy).with { |key, args| key == 'key' }
102
- @handler.process(@mock_request, @mock_response)
103
- end
104
-
105
- it "should call the model save method if the request represents an HTTP PUT" do
106
- setup_save_request
107
- @mock_model_instance.expects(:save)
108
- @handler.process(@mock_request, @mock_response)
109
- end
110
-
111
- it "should fail if the HTTP method isn't supported" do
112
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'POST', Mongrel::Const::REQUEST_PATH => '/foo'})
113
- @mock_response.expects(:start).with(404)
114
- @handler.process(@mock_request, @mock_response)
115
- end
116
-
117
- it "should fail if the request's pluralization is wrong" do
118
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'DELETE', Mongrel::Const::REQUEST_PATH => '/foos/key'})
119
- @mock_response.expects(:start).with(404)
120
- @handler.process(@mock_request, @mock_response)
121
-
122
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'PUT', Mongrel::Const::REQUEST_PATH => '/foos/key'})
123
- @mock_response.expects(:start).with(404)
124
- @handler.process(@mock_request, @mock_response)
125
- end
126
-
127
- it "should fail if the request is for an unknown path" do
128
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET',
129
- Mongrel::Const::REQUEST_PATH => '/bar/key',
130
- 'QUERY_STRING' => '' })
131
- @mock_response.expects(:start).with(404)
132
- @handler.process(@mock_request, @mock_response)
18
+ describe "when initializing" do
19
+ it "should call the Handler's initialization hook with its provided arguments as the server and handler" do
20
+ Puppet::Network::HTTP::MongrelREST.any_instance.expects(:initialize_for_puppet).with(:server => "my", :handler => "arguments")
21
+ Puppet::Network::HTTP::MongrelREST.new(:server => "my", :handler => "arguments")
22
+ end
133
23
  end
134
24
 
135
- describe "and determining the request parameters", :shared => true do
136
- confine "Mongrel is not available" => Puppet.features.mongrel?
137
-
25
+ describe "when receiving a request" do
138
26
  before do
139
- @mock_request.stubs(:params).returns({})
140
- end
27
+ @params = {}
28
+ @request = stub('mongrel http request', :params => @params)
29
+
30
+ @head = stub('response head')
31
+ @body = stub('response body', :write => true)
32
+ @response = stub('mongrel http response')
33
+ @response.stubs(:start).yields(@head, @body)
34
+ @model_class = stub('indirected model class')
35
+ @mongrel = stub('mongrel http server', :register => true)
36
+ Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@model_class)
37
+ @handler = Puppet::Network::HTTP::MongrelREST.new(:server => @mongrel, :handler => :foo)
38
+ end
39
+
40
+ describe "and using the HTTP Handler interface" do
41
+ it "should return the HTTP_ACCEPT parameter as the accept header" do
42
+ @params.expects(:[]).with("HTTP_ACCEPT").returns "myaccept"
43
+ @handler.accept_header(@request).should == "myaccept"
44
+ end
141
45
 
142
- it "should include the HTTP request parameters" do
143
- @mock_request.expects(:params).returns('QUERY_STRING' => 'foo=baz&bar=xyzzy')
144
- result = @handler.params(@mock_request)
145
- result["foo"].should == "baz"
146
- result["bar"].should == "xyzzy"
147
- end
46
+ it "should return the Content-Type parameter as the Content-Type header" do
47
+ @params.expects(:[]).with("HTTP_CONTENT_TYPE").returns "mycontent"
48
+ @handler.content_type_header(@request).should == "mycontent"
49
+ end
148
50
 
149
- it "should pass the client's ip address to model find" do
150
- @mock_request.stubs(:params).returns("REMOTE_ADDR" => "ipaddress")
151
- @handler.params(@mock_request)[:ip].should == "ipaddress"
152
- end
51
+ it "should use the REQUEST_METHOD as the http method" do
52
+ @params.expects(:[]).with(Mongrel::Const::REQUEST_METHOD).returns "mymethod"
53
+ @handler.http_method(@request).should == "mymethod"
54
+ end
153
55
 
154
- it "should use the :ssl_client_header to determine the parameter when looking for the certificate" do
155
- Puppet.settings.stubs(:value).returns "eh"
156
- Puppet.settings.expects(:value).with(:ssl_client_header).returns "myheader"
157
- @mock_request.stubs(:params).returns("myheader" => "/CN=host.domain.com")
158
- @handler.params(@mock_request)
159
- end
56
+ it "should return the request path as the path" do
57
+ @params.expects(:[]).with(Mongrel::Const::REQUEST_PATH).returns "/foo/bar"
58
+ @handler.path(@request).should == "/foo/bar"
59
+ end
160
60
 
161
- it "should retrieve the hostname by matching the certificate parameter" do
162
- Puppet.settings.stubs(:value).returns "eh"
163
- Puppet.settings.expects(:value).with(:ssl_client_header).returns "myheader"
164
- @mock_request.stubs(:params).returns("myheader" => "/CN=host.domain.com")
165
- @handler.params(@mock_request)[:node].should == "host.domain.com"
166
- end
61
+ it "should return the request body as the body" do
62
+ @request.expects(:body).returns StringIO.new("mybody")
63
+ @handler.body(@request).should == "mybody"
64
+ end
167
65
 
168
- it "should use the :ssl_client_header to determine the parameter for checking whether the host certificate is valid" do
169
- Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
170
- Puppet.settings.expects(:value).with(:ssl_client_verify_header).returns "myheader"
171
- @mock_request.stubs(:params).returns("myheader" => "SUCCESS", "certheader" => "/CN=host.domain.com")
172
- @handler.params(@mock_request)
173
- end
66
+ it "should set the response's content-type header when setting the content type" do
67
+ @header = mock 'header'
68
+ @response.expects(:header).returns @header
69
+ @header.expects(:[]=).with('Content-Type', "mytype")
174
70
 
175
- it "should consider the host authenticated if the validity parameter contains 'SUCCESS'" do
176
- Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
177
- Puppet.settings.stubs(:value).with(:ssl_client_verify_header).returns "myheader"
178
- @mock_request.stubs(:params).returns("myheader" => "SUCCESS", "certheader" => "/CN=host.domain.com")
179
- @handler.params(@mock_request)[:authenticated].should be_true
180
- end
71
+ @handler.set_content_type(@response, "mytype")
72
+ end
181
73
 
182
- it "should consider the host unauthenticated if the validity parameter does not contain 'SUCCESS'" do
183
- Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
184
- Puppet.settings.stubs(:value).with(:ssl_client_verify_header).returns "myheader"
185
- @mock_request.stubs(:params).returns("myheader" => "whatever", "certheader" => "/CN=host.domain.com")
186
- @handler.params(@mock_request)[:authenticated].should be_false
187
- end
74
+ it "should set the status and write the body when setting the response for a successful request" do
75
+ head = mock 'head'
76
+ body = mock 'body'
77
+ @response.expects(:start).with(200).yields(head, body)
188
78
 
189
- it "should consider the host unauthenticated if no certificate information is present" do
190
- Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
191
- Puppet.settings.stubs(:value).with(:ssl_client_verify_header).returns "myheader"
192
- @mock_request.stubs(:params).returns("myheader" => nil, "certheader" => "SUCCESS")
193
- @handler.params(@mock_request)[:authenticated].should be_false
194
- end
79
+ body.expects(:write).with("mybody")
195
80
 
196
- it "should not pass a node name to model method if no certificate information is present" do
197
- Puppet.settings.stubs(:value).returns "eh"
198
- Puppet.settings.expects(:value).with(:ssl_client_header).returns "myheader"
199
- @mock_request.stubs(:params).returns("myheader" => nil)
200
- @handler.params(@mock_request).should_not be_include(:node)
201
- end
202
- end
81
+ @handler.set_response(@response, "mybody", 200)
82
+ end
203
83
 
204
- describe "when finding a model instance" do |variable|
205
- confine "Mongrel is not available" => Puppet.features.mongrel?
84
+ it "should set the status and reason and write the body when setting the response for a successful request" do
85
+ head = mock 'head'
86
+ body = mock 'body'
87
+ @response.expects(:start).with(400, false, "mybody").yields(head, body)
206
88
 
207
- it "should fail to find model if key is not specified" do
208
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET', Mongrel::Const::REQUEST_PATH => '/foo'})
209
- @mock_response.expects(:start).with(404)
210
- @handler.process(@mock_request, @mock_response)
211
- end
89
+ body.expects(:write).with("mybody")
212
90
 
213
- it "should use a common method for determining the request parameters" do
214
- setup_find_request('QUERY_STRING' => 'foo=baz&bar=xyzzy')
215
- @handler.expects(:params).returns(:foo => :baz, :bar => :xyzzy)
216
- @mock_model_class.expects(:find).with do |key, args|
217
- args[:foo] == :baz and args[:bar] == :xyzzy
91
+ @handler.set_response(@response, "mybody", 400)
218
92
  end
219
- @handler.process(@mock_request, @mock_response)
220
93
  end
221
94
 
222
- it "should generate a 200 response when a model find call succeeds" do
223
- setup_find_request
224
- @mock_response.expects(:start).with(200)
225
- @handler.process(@mock_request, @mock_response)
226
- end
95
+ describe "and determining the request parameters" do
96
+ before do
97
+ @request.stubs(:params).returns({})
98
+ end
227
99
 
228
- it "should return a serialized object when a model find call succeeds" do
229
- setup_find_request
230
- @mock_model_instance = stub('model instance')
231
- @mock_model_instance.expects(:to_yaml)
232
- @mock_model_class.stubs(:find).returns(@mock_model_instance)
233
- @handler.process(@mock_request, @mock_response)
234
- end
100
+ it "should skip empty parameter values" do
101
+ @request.expects(:params).returns('QUERY_STRING' => "&=")
102
+ lambda { @handler.params(@request) }.should_not raise_error
103
+ end
235
104
 
236
- it "should serialize a controller exception when an exception is thrown by find" do
237
- setup_find_request
238
- @mock_model_class.expects(:find).raises(ArgumentError)
239
- @mock_response.expects(:start).with(404)
240
- @handler.process(@mock_request, @mock_response)
241
- end
242
- end
105
+ it "should include the HTTP request parameters, with the keys as symbols" do
106
+ @request.expects(:params).returns('QUERY_STRING' => 'foo=baz&bar=xyzzy')
107
+ result = @handler.params(@request)
108
+ result[:foo].should == "baz"
109
+ result[:bar].should == "xyzzy"
110
+ end
243
111
 
244
- describe "when destroying a model instance" do |variable|
245
- confine "Mongrel is not available" => Puppet.features.mongrel?
112
+ it "should CGI-decode the HTTP parameters" do
113
+ encoding = CGI.escape("foo bar")
114
+ @request.expects(:params).returns('QUERY_STRING' => "foo=#{encoding}")
115
+ result = @handler.params(@request)
116
+ result[:foo].should == "foo bar"
117
+ end
246
118
 
247
- it "should fail to destroy model if key is not specified" do
248
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'DELETE', Mongrel::Const::REQUEST_PATH => '/foo'})
249
- @mock_response.expects(:start).with(404)
250
- @handler.process(@mock_request, @mock_response)
251
- end
119
+ it "should convert the string 'true' to the boolean" do
120
+ @request.expects(:params).returns('QUERY_STRING' => 'foo=true')
121
+ result = @handler.params(@request)
122
+ result[:foo].should be_true
123
+ end
252
124
 
253
- it "should use a common method for determining the request parameters" do
254
- setup_destroy_request('QUERY_STRING' => 'foo=baz&bar=xyzzy')
255
- @handler.expects(:params).returns(:foo => :baz, :bar => :xyzzy)
256
- @mock_model_class.expects(:destroy).with do |key, args|
257
- args[:foo] == :baz and args[:bar] == :xyzzy
125
+ it "should convert the string 'false' to the boolean" do
126
+ @request.expects(:params).returns('QUERY_STRING' => 'foo=false')
127
+ result = @handler.params(@request)
128
+ result[:foo].should be_false
258
129
  end
259
- @handler.process(@mock_request, @mock_response)
260
- end
261
130
 
262
- it "should pass HTTP request parameters to model destroy" do
263
- setup_destroy_request('QUERY_STRING' => 'foo=baz&bar=xyzzy')
264
- @mock_model_class.expects(:destroy).with do |key, args|
265
- key == 'key' and args['foo'] == 'baz' and args['bar'] == 'xyzzy'
131
+ it "should convert integer arguments to Integers" do
132
+ @request.expects(:params).returns('QUERY_STRING' => 'foo=15')
133
+ result = @handler.params(@request)
134
+ result[:foo].should == 15
266
135
  end
267
- @handler.process(@mock_request, @mock_response)
268
- end
269
136
 
270
- it "should generate a 200 response when a model destroy call succeeds" do
271
- setup_destroy_request
272
- @mock_response.expects(:start).with(200)
273
- @handler.process(@mock_request, @mock_response)
274
- end
137
+ it "should convert floating point arguments to Floats" do
138
+ @request.expects(:params).returns('QUERY_STRING' => 'foo=1.5')
139
+ result = @handler.params(@request)
140
+ result[:foo].should == 1.5
141
+ end
275
142
 
276
- it "should return a serialized success result when a model destroy call succeeds" do
277
- setup_destroy_request
278
- @mock_model_class.stubs(:destroy).returns(true)
279
- @mock_body.expects(:write).with("--- true\n")
280
- @handler.process(@mock_request, @mock_response)
281
- end
143
+ it "should YAML-load and URI-decode values that are YAML-encoded" do
144
+ escaping = CGI.escape(YAML.dump(%w{one two}))
145
+ @request.expects(:params).returns('QUERY_STRING' => "foo=#{escaping}")
146
+ result = @handler.params(@request)
147
+ result[:foo].should == %w{one two}
148
+ end
282
149
 
283
- it "should serialize a controller exception when an exception is thrown by destroy" do
284
- setup_destroy_request
285
- @mock_model_class.expects(:destroy).raises(ArgumentError)
286
- @mock_response.expects(:start).with(404)
287
- @handler.process(@mock_request, @mock_response)
288
- end
289
- end
150
+ it "should not allow the client to set the node via the query string" do
151
+ @request.stubs(:params).returns('QUERY_STRING' => "node=foo")
152
+ @handler.params(@request)[:node].should be_nil
153
+ end
290
154
 
291
- describe "when saving a model instance" do |variable|
292
- confine "Mongrel is not available" => Puppet.features.mongrel?
155
+ it "should not allow the client to set the IP address via the query string" do
156
+ @request.stubs(:params).returns('QUERY_STRING' => "ip=foo")
157
+ @handler.params(@request)[:ip].should be_nil
158
+ end
293
159
 
294
- it "should fail to save model if data is not specified" do
295
- @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'PUT', Mongrel::Const::REQUEST_PATH => '/foo'})
296
- @mock_request.stubs(:body).returns('')
297
- @mock_response.expects(:start).with(404)
298
- @handler.process(@mock_request, @mock_response)
299
- end
160
+ it "should pass the client's ip address to model find" do
161
+ @request.stubs(:params).returns("REMOTE_ADDR" => "ipaddress")
162
+ @handler.params(@request)[:ip].should == "ipaddress"
163
+ end
300
164
 
301
- it "should use a common method for determining the request parameters" do
302
- setup_save_request('QUERY_STRING' => 'foo=baz&bar=xyzzy')
303
- @handler.expects(:params).returns(:foo => :baz, :bar => :xyzzy)
304
- @mock_model_instance.expects(:save).with do |args|
305
- args[:foo] == :baz and args[:bar] == :xyzzy
165
+ it "should pass the client's provided X-Forwared-For value as the ip" do
166
+ @request.stubs(:params).returns("HTTP_X_FORWARDED_FOR" => "ipaddress")
167
+ @handler.params(@request)[:ip].should == "ipaddress"
306
168
  end
307
- @handler.process(@mock_request, @mock_response)
308
- end
309
169
 
310
- it "should generate a 200 response when a model save call succeeds" do
311
- setup_save_request
312
- @mock_response.expects(:start).with(200)
313
- @handler.process(@mock_request, @mock_response)
314
- end
170
+ it "should pass the client's provided X-Forwared-For first value as the ip" do
171
+ @request.stubs(:params).returns("HTTP_X_FORWARDED_FOR" => "ipproxy1,ipproxy2,ipaddress")
172
+ @handler.params(@request)[:ip].should == "ipaddress"
173
+ end
315
174
 
316
- it "should return a serialized object when a model save call succeeds" do
317
- setup_save_request
318
- @mock_model_instance.stubs(:save).returns(@mock_model_instance)
319
- @mock_model_instance.expects(:to_yaml).returns('foo')
320
- @handler.process(@mock_request, @mock_response)
321
- end
175
+ it "should pass the client's provided X-Forwared-For value as the ip instead of the REMOTE_ADDR" do
176
+ @request.stubs(:params).returns("REMOTE_ADDR" => "remote_addr")
177
+ @request.stubs(:params).returns("HTTP_X_FORWARDED_FOR" => "ipaddress")
178
+ @handler.params(@request)[:ip].should == "ipaddress"
179
+ end
322
180
 
323
- it "should serialize a controller exception when an exception is thrown by save" do
324
- setup_save_request
325
- @mock_model_instance.expects(:save).raises(ArgumentError)
326
- @mock_response.expects(:start).with(404)
327
- @handler.process(@mock_request, @mock_response)
328
- end
329
- end
181
+ it "should use the :ssl_client_header to determine the parameter when looking for the certificate" do
182
+ Puppet.settings.stubs(:value).returns "eh"
183
+ Puppet.settings.expects(:value).with(:ssl_client_header).returns "myheader"
184
+ @request.stubs(:params).returns("myheader" => "/CN=host.domain.com")
185
+ @handler.params(@request)
186
+ end
330
187
 
331
- describe "when searching for model instances" do |variable|
332
- confine "Mongrel is not available" => Puppet.features.mongrel?
188
+ it "should retrieve the hostname by matching the certificate parameter" do
189
+ Puppet.settings.stubs(:value).returns "eh"
190
+ Puppet.settings.expects(:value).with(:ssl_client_header).returns "myheader"
191
+ @request.stubs(:params).returns("myheader" => "/CN=host.domain.com")
192
+ @handler.params(@request)[:node].should == "host.domain.com"
193
+ end
333
194
 
334
- it "should use a common method for determining the request parameters" do
335
- setup_search_request('QUERY_STRING' => 'foo=baz&bar=xyzzy')
336
- @handler.expects(:params).returns(:foo => :baz, :bar => :xyzzy)
337
- @mock_model_class.expects(:search).with do |args|
338
- args[:foo] == :baz and args[:bar] == :xyzzy
195
+ it "should use the :ssl_client_header to determine the parameter for checking whether the host certificate is valid" do
196
+ Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
197
+ Puppet.settings.expects(:value).with(:ssl_client_verify_header).returns "myheader"
198
+ @request.stubs(:params).returns("myheader" => "SUCCESS", "certheader" => "/CN=host.domain.com")
199
+ @handler.params(@request)
339
200
  end
340
- @handler.process(@mock_request, @mock_response)
341
- end
342
201
 
343
- it "should pass HTTP request parameters to model search" do
344
- setup_search_request('QUERY_STRING' => 'foo=baz&bar=xyzzy')
345
- @mock_model_class.expects(:search).with do |args|
346
- args['foo'] == 'baz' and args['bar'] == 'xyzzy'
347
- end.returns([])
348
- @handler.process(@mock_request, @mock_response)
349
- end
350
-
351
- it "should generate a 200 response when a model search call succeeds" do
352
- setup_search_request
353
- @mock_response.expects(:start).with(200)
354
- @handler.process(@mock_request, @mock_response)
355
- end
202
+ it "should consider the host authenticated if the validity parameter contains 'SUCCESS'" do
203
+ Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
204
+ Puppet.settings.stubs(:value).with(:ssl_client_verify_header).returns "myheader"
205
+ @request.stubs(:params).returns("myheader" => "SUCCESS", "certheader" => "/CN=host.domain.com")
206
+ @handler.params(@request)[:authenticated].should be_true
207
+ end
356
208
 
357
- it "should return a list of serialized objects when a model search call succeeds" do
358
- setup_search_request
359
- mock_matches = [1..5].collect {|i| mock("model instance #{i}", :to_yaml => "model instance #{i}") }
360
- @mock_model_class.stubs(:search).returns(mock_matches)
361
- @handler.process(@mock_request, @mock_response)
362
- end
209
+ it "should consider the host unauthenticated if the validity parameter does not contain 'SUCCESS'" do
210
+ Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
211
+ Puppet.settings.stubs(:value).with(:ssl_client_verify_header).returns "myheader"
212
+ @request.stubs(:params).returns("myheader" => "whatever", "certheader" => "/CN=host.domain.com")
213
+ @handler.params(@request)[:authenticated].should be_false
214
+ end
363
215
 
364
- it "should serialize a controller exception when an exception is thrown by search" do
365
- setup_search_request
366
- @mock_model_class.expects(:search).raises(ArgumentError)
367
- @mock_response.expects(:start).with(404)
368
- @handler.process(@mock_request, @mock_response)
369
- end
370
- end
216
+ it "should consider the host unauthenticated if no certificate information is present" do
217
+ Puppet.settings.stubs(:value).with(:ssl_client_header).returns "certheader"
218
+ Puppet.settings.stubs(:value).with(:ssl_client_verify_header).returns "myheader"
219
+ @request.stubs(:params).returns("myheader" => nil, "certheader" => "SUCCESS")
220
+ @handler.params(@request)[:authenticated].should be_false
221
+ end
371
222
 
372
- it "should serialize a controller exception if the request fails" do
373
- setup_bad_request
374
- @mock_response.expects(:start).with(404)
375
- @handler.process(@mock_request, @mock_response)
223
+ it "should resolve the node name with an ip address look-up if no certificate is present" do
224
+ Puppet.settings.stubs(:value).returns "eh"
225
+ Puppet.settings.expects(:value).with(:ssl_client_header).returns "myheader"
226
+ @request.stubs(:params).returns("myheader" => nil)
227
+ @handler.expects(:resolve_node).returns("host.domain.com")
228
+ @handler.params(@request)[:node].should == "host.domain.com"
229
+ end
230
+ end
376
231
  end
377
232
  end