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
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../../spec_helper'
4
+
5
+ describe "Puppet::Rails::Resource" do
6
+ confine "Cannot test without ActiveRecord" => Puppet.features.rails?
7
+
8
+ def column(name, type)
9
+ ActiveRecord::ConnectionAdapters::Column.new(name, nil, type, false)
10
+ end
11
+
12
+ before do
13
+ require 'puppet/rails/resource'
14
+
15
+ # Stub this so we don't need access to the DB.
16
+ Puppet::Rails::Resource.stubs(:columns).returns([column("title", "string"), column("restype", "string"), column("exported", "boolean")])
17
+ end
18
+
19
+ describe "when creating initial resource arguments" do
20
+ it "should set the restype to the resource's type" do
21
+ Puppet::Rails::Resource.rails_resource_initial_args(Puppet::Resource.new(:file, "/file"))[:restype].should == "File"
22
+ end
23
+
24
+ it "should set the title to the resource's title" do
25
+ Puppet::Rails::Resource.rails_resource_initial_args(Puppet::Resource.new(:file, "/file"))[:title].should == "/file"
26
+ end
27
+
28
+ it "should set the line to the resource's line if one is available" do
29
+ resource = Puppet::Resource.new(:file, "/file")
30
+ resource.line = 50
31
+
32
+ Puppet::Rails::Resource.rails_resource_initial_args(resource)[:line].should == 50
33
+ end
34
+
35
+ it "should set 'exported' to true of the resource is exported" do
36
+ resource = Puppet::Resource.new(:file, "/file")
37
+ resource.exported = true
38
+
39
+ Puppet::Rails::Resource.rails_resource_initial_args(resource)[:exported].should be_true
40
+ end
41
+
42
+ it "should set 'exported' to false of the resource is not exported" do
43
+ resource = Puppet::Resource.new(:file, "/file")
44
+ resource.exported = false
45
+
46
+ Puppet::Rails::Resource.rails_resource_initial_args(resource)[:exported].should be_false
47
+
48
+ resource = Puppet::Resource.new(:file, "/file")
49
+ resource.exported = nil
50
+
51
+ Puppet::Rails::Resource.rails_resource_initial_args(resource)[:exported].should be_false
52
+ end
53
+ end
54
+
55
+ describe "when merging in a parser resource" do
56
+ before do
57
+ @parser = mock 'parser resource'
58
+
59
+ @resource = Puppet::Rails::Resource.new
60
+ [:merge_attributes, :merge_parameters, :merge_tags, :save].each { |m| @resource.stubs(m) }
61
+ end
62
+
63
+ it "should merge the attributes" do
64
+ @resource.expects(:merge_attributes).with(@parser)
65
+
66
+ @resource.merge_parser_resource(@parser)
67
+ end
68
+
69
+ it "should merge the parameters" do
70
+ @resource.expects(:merge_parameters).with(@parser)
71
+
72
+ @resource.merge_parser_resource(@parser)
73
+ end
74
+
75
+ it "should merge the tags" do
76
+ @resource.expects(:merge_tags).with(@parser)
77
+
78
+ @resource.merge_parser_resource(@parser)
79
+ end
80
+
81
+ it "should save itself" do
82
+ @resource.expects(:save)
83
+
84
+ @resource.merge_parser_resource(@parser)
85
+ end
86
+ end
87
+ end
@@ -19,6 +19,20 @@ describe Puppet::Relationship do
19
19
  @edge.should respond_to(:target)
20
20
  end
21
21
 
22
+ it "should have a :callback attribute" do
23
+ @edge.callback = :foo
24
+ @edge.callback.should == :foo
25
+ end
26
+
27
+ it "should have an :event attribute" do
28
+ @edge.event = :NONE
29
+ @edge.event.should == :NONE
30
+ end
31
+
32
+ it "should require a callback if a non-NONE event is specified" do
33
+ proc { @edge.event = :something }.should raise_error(ArgumentError)
34
+ end
35
+
22
36
  it "should have a :label attribute" do
23
37
  @edge.should respond_to(:label)
24
38
  end
@@ -27,11 +41,22 @@ describe Puppet::Relationship do
27
41
  @edge = Puppet::Relationship.new("a", "b")
28
42
  @edge.ref.should == "a => b"
29
43
  end
44
+
45
+ it "should be able to produce a label as a hash with its event and callback" do
46
+ @edge.callback = :foo
47
+ @edge.event = :bar
48
+
49
+ @edge.label.should == {:callback => :foo, :event => :bar}
50
+ end
51
+
52
+ it "should work if nil options are provided" do
53
+ lambda { Puppet::Relationship.new("a", "b", nil) }.should_not raise_error
54
+ end
30
55
  end
31
56
 
32
57
  describe Puppet::Relationship, " when initializing" do
33
58
  before do
34
- @edge = Puppet::Relationship.new(:a, :b, :testing => :foo)
59
+ @edge = Puppet::Relationship.new(:a, :b)
35
60
  end
36
61
 
37
62
  it "should use the first argument as the source" do
@@ -42,38 +67,20 @@ describe Puppet::Relationship, " when initializing" do
42
67
  @edge.target.should == :b
43
68
  end
44
69
 
45
- it "should use the third argument as the label" do
46
- @edge.label.should == {:testing => :foo}
47
- end
48
-
49
- it "should require a callback if a non-NONE event is specified" do
50
- proc { Puppet::Relationship.new(:a, :b, :event => :something) }.should raise_error(ArgumentError)
51
- end
52
-
53
- it "should require the label to be a hash" do
54
- proc { Puppet::Relationship.new(:a, :b, :event) }.should raise_error(ArgumentError)
70
+ it "should set the rest of the arguments as the event and callback" do
71
+ @edge = Puppet::Relationship.new(:a, :b, :callback => :foo, :event => :bar)
72
+ @edge.callback.should == :foo
73
+ @edge.event.should == :bar
55
74
  end
56
- end
57
75
 
58
- describe Puppet::Relationship, " when interpreting the label" do
59
- it "should default to an event of nil" do
60
- @edge = Puppet::Relationship.new(:a, :b)
61
- @edge.event.should be_nil
76
+ it "should accept events specified as strings" do
77
+ @edge = Puppet::Relationship.new(:a, :b, "event" => :NONE)
78
+ @edge.event.should == :NONE
62
79
  end
63
80
 
64
- it "should expose a provided event via the :event method" do
65
- @edge = Puppet::Relationship.new(:a, :b, :event => :something, :callback => :whatever)
66
- @edge.event.should == :something
67
- end
68
-
69
- it "should default to a nil callback" do
70
- @edge = Puppet::Relationship.new(:a, :b)
71
- @edge.callback.should be_nil
72
- end
73
-
74
- it "should expose a provided callback via the :callback method" do
75
- @edge = Puppet::Relationship.new(:a, :b, :callback => :testing)
76
- @edge.callback.should == :testing
81
+ it "should accept callbacks specified as strings" do
82
+ @edge = Puppet::Relationship.new(:a, :b, "callback" => :foo)
83
+ @edge.callback.should == :foo
77
84
  end
78
85
  end
79
86
 
@@ -147,3 +154,108 @@ describe Puppet::Relationship, " when matching edges with a non-standard event"
147
154
  @edge.should be_match(:random)
148
155
  end
149
156
  end
157
+
158
+ describe Puppet::Relationship, "when converting to json" do
159
+ confine "Missing 'json' library" => Puppet.features.json?
160
+
161
+ before do
162
+ @edge = Puppet::Relationship.new(:a, :b, :event => :random, :callback => :whatever)
163
+ end
164
+
165
+ def json_output_should
166
+ @edge.class.expects(:json_create).with { |hash| yield hash }
167
+ end
168
+
169
+ # LAK:NOTE For all of these tests, we convert back to the edge so we can
170
+ # trap the actual data structure then.
171
+ it "should set the 'json_class' to Puppet::Relationship" do
172
+ json_output_should { |hash| hash['json_class'] == "Puppet::Relationship" }
173
+
174
+ JSON.parse @edge.to_json
175
+ end
176
+
177
+ it "should store the stringified source as the source in the data" do
178
+ json_output_should { |hash| hash['data']['source'] == "a" }
179
+
180
+ JSON.parse @edge.to_json
181
+ end
182
+
183
+ it "should store the stringified target as the target in the data" do
184
+ json_output_should { |hash| hash['data']['target'] == "b" }
185
+
186
+ JSON.parse @edge.to_json
187
+ end
188
+
189
+ it "should store the jsonified event as the event in the data" do
190
+ @edge.event = :random
191
+ json_output_should { |hash| hash['data']['event'] == "random" }
192
+
193
+ JSON.parse @edge.to_json
194
+ end
195
+
196
+ it "should not store an event when none is set" do
197
+ @edge.event = nil
198
+ json_output_should { |hash| hash['data']['event'].nil? }
199
+
200
+ JSON.parse @edge.to_json
201
+ end
202
+
203
+ it "should store the jsonified callback as the callback in the data" do
204
+ @edge.callback = "whatever"
205
+ json_output_should { |hash| hash['data']['callback'] == "whatever" }
206
+
207
+ JSON.parse @edge.to_json
208
+ end
209
+
210
+ it "should not store a callback when none is set in the edge" do
211
+ @edge.callback = nil
212
+ json_output_should { |hash| hash['data']['callback'].nil? }
213
+
214
+ JSON.parse @edge.to_json
215
+ end
216
+ end
217
+
218
+ describe Puppet::Relationship, "when converting from json" do
219
+ confine "Missing 'json' library" => Puppet.features.json?
220
+
221
+ before do
222
+ @event = "random"
223
+ @callback = "whatever"
224
+ @data = {
225
+ "source" => "mysource",
226
+ "target" => "mytarget",
227
+ "event" => @event,
228
+ "callback" => @callback
229
+ }
230
+ @json = {
231
+ "json_class" => "Puppet::Relationship",
232
+ "data" => @data
233
+ }
234
+ end
235
+
236
+ def json_result_should
237
+ Puppet::Relationship.expects(:new).with { |*args| yield args }
238
+ end
239
+
240
+ it "should be extended with the JSON utility module" do
241
+ Puppet::Relationship.metaclass.ancestors.should be_include(Puppet::Util::Json)
242
+ end
243
+
244
+ # LAK:NOTE For all of these tests, we convert back to the edge so we can
245
+ # trap the actual data structure then.
246
+ it "should pass the source in as the first argument" do
247
+ Puppet::Relationship.from_json("source" => "mysource", "target" => "mytarget").source.should == "mysource"
248
+ end
249
+
250
+ it "should pass the target in as the second argument" do
251
+ Puppet::Relationship.from_json("source" => "mysource", "target" => "mytarget").target.should == "mytarget"
252
+ end
253
+
254
+ it "should pass the event as an argument if it's provided" do
255
+ Puppet::Relationship.from_json("source" => "mysource", "target" => "mytarget", "event" => "myevent", "callback" => "eh").event.should == "myevent"
256
+ end
257
+
258
+ it "should pass the callback as an argument if it's provided" do
259
+ Puppet::Relationship.from_json("source" => "mysource", "target" => "mytarget", "callback" => "mycallback").callback.should == "mycallback"
260
+ end
261
+ end
@@ -0,0 +1,504 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+ require 'puppet/resource'
5
+
6
+ describe Puppet::Resource do
7
+ [:catalog, :file, :line].each do |attr|
8
+ it "should have an #{attr} attribute" do
9
+ resource = Puppet::Resource.new("file", "/my/file")
10
+ resource.should respond_to(attr)
11
+ resource.should respond_to(attr.to_s + "=")
12
+ end
13
+ end
14
+
15
+ describe "when initializing" do
16
+ it "should require the type and title" do
17
+ lambda { Puppet::Resource.new }.should raise_error(ArgumentError)
18
+ end
19
+
20
+ it "should create a resource reference with its type and title" do
21
+ ref = Puppet::Resource::Reference.new("file", "/f")
22
+ Puppet::Resource::Reference.expects(:new).with("file", "/f").returns ref
23
+ Puppet::Resource.new("file", "/f")
24
+ end
25
+
26
+ it "should allow setting of parameters" do
27
+ Puppet::Resource.new("file", "/f", :noop => true)[:noop].should be_true
28
+ end
29
+
30
+ it "should tag itself with its type" do
31
+ Puppet::Resource.new("file", "/f").should be_tagged("file")
32
+ end
33
+
34
+ it "should tag itself with its title if the title is a valid tag" do
35
+ Puppet::Resource.new("file", "bar").should be_tagged("bar")
36
+ end
37
+
38
+ it "should not tag itself with its title if the title is a not valid tag" do
39
+ Puppet::Resource.new("file", "/bar").should_not be_tagged("/bar")
40
+ end
41
+ end
42
+
43
+ it "should use the resource reference to determine its type" do
44
+ ref = Puppet::Resource::Reference.new("file", "/f")
45
+ Puppet::Resource::Reference.expects(:new).returns ref
46
+ resource = Puppet::Resource.new("file", "/f")
47
+ ref.expects(:type).returns "mytype"
48
+ resource.type.should == "mytype"
49
+ end
50
+
51
+ it "should use its resource reference to determine its title" do
52
+ ref = Puppet::Resource::Reference.new("file", "/f")
53
+ Puppet::Resource::Reference.expects(:new).returns ref
54
+ resource = Puppet::Resource.new("file", "/f")
55
+ ref.expects(:title).returns "mytitle"
56
+ resource.title.should == "mytitle"
57
+ end
58
+
59
+ it "should use its resource reference to determine whether it is builtin" do
60
+ ref = Puppet::Resource::Reference.new("file", "/f")
61
+ Puppet::Resource::Reference.expects(:new).returns ref
62
+ resource = Puppet::Resource.new("file", "/f")
63
+ ref.expects(:builtin_type?).returns "yep"
64
+ resource.builtin_type?.should == "yep"
65
+ end
66
+
67
+ it "should call its builtin_type? method when 'builtin?' is called" do
68
+ resource = Puppet::Resource.new("file", "/f")
69
+ resource.expects(:builtin_type?).returns "foo"
70
+ resource.builtin?.should == "foo"
71
+ end
72
+
73
+ it "should use its resource reference to produce its canonical reference string" do
74
+ ref = Puppet::Resource::Reference.new("file", "/f")
75
+ Puppet::Resource::Reference.expects(:new).returns ref
76
+ resource = Puppet::Resource.new("file", "/f")
77
+ ref.expects(:to_s).returns "Foo[bar]"
78
+ resource.ref.should == "Foo[bar]"
79
+ end
80
+
81
+ it "should be taggable" do
82
+ Puppet::Resource.ancestors.should be_include(Puppet::Util::Tagging)
83
+ end
84
+
85
+ it "should have an 'exported' attribute" do
86
+ resource = Puppet::Resource.new("file", "/f")
87
+ resource.exported = true
88
+ resource.exported.should == true
89
+ resource.should be_exported
90
+ end
91
+
92
+ describe "when managing parameters" do
93
+ before do
94
+ @resource = Puppet::Resource.new("file", "/my/file")
95
+ end
96
+
97
+ it "should allow setting and retrieving of parameters" do
98
+ @resource[:foo] = "bar"
99
+ @resource[:foo].should == "bar"
100
+ end
101
+
102
+ it "should canonicalize retrieved parameter names to treat symbols and strings equivalently" do
103
+ @resource[:foo] = "bar"
104
+ @resource["foo"].should == "bar"
105
+ end
106
+
107
+ it "should canonicalize set parameter names to treat symbols and strings equivalently" do
108
+ @resource["foo"] = "bar"
109
+ @resource[:foo].should == "bar"
110
+ end
111
+
112
+ it "should set the namevar when asked to set the name" do
113
+ Puppet::Type.type(:file).stubs(:namevar).returns :myvar
114
+ @resource[:name] = "/foo"
115
+ @resource[:myvar].should == "/foo"
116
+ end
117
+
118
+ it "should return the namevar when asked to return the name" do
119
+ Puppet::Type.type(:file).stubs(:namevar).returns :myvar
120
+ @resource[:myvar] = "/foo"
121
+ @resource[:name].should == "/foo"
122
+ end
123
+
124
+ it "should be able to set the name for non-builtin types" do
125
+ resource = Puppet::Resource.new(:foo, "bar")
126
+ lambda { resource[:name] = "eh" }.should_not raise_error
127
+ end
128
+
129
+ it "should be able to return the name for non-builtin types" do
130
+ resource = Puppet::Resource.new(:foo, "bar")
131
+ resource[:name] = "eh"
132
+ resource[:name].should == "eh"
133
+ end
134
+
135
+ it "should be able to iterate over parameters" do
136
+ @resource[:foo] = "bar"
137
+ @resource[:fee] = "bare"
138
+ params = {}
139
+ @resource.each do |key, value|
140
+ params[key] = value
141
+ end
142
+ params.should == {:foo => "bar", :fee => "bare"}
143
+ end
144
+
145
+ it "should include Enumerable" do
146
+ @resource.class.ancestors.should be_include(Enumerable)
147
+ end
148
+
149
+ it "should have a method for testing whether a parameter is included" do
150
+ @resource[:foo] = "bar"
151
+ @resource.should be_has_key(:foo)
152
+ @resource.should_not be_has_key(:eh)
153
+ end
154
+
155
+ it "should have a method for providing the list of parameters" do
156
+ @resource[:foo] = "bar"
157
+ @resource[:bar] = "foo"
158
+ keys = @resource.keys
159
+ keys.should be_include(:foo)
160
+ keys.should be_include(:bar)
161
+ end
162
+
163
+ it "should have a method for providing the number of parameters" do
164
+ @resource[:foo] = "bar"
165
+ @resource.length.should == 1
166
+ end
167
+
168
+ it "should have a method for deleting parameters" do
169
+ @resource[:foo] = "bar"
170
+ @resource.delete(:foo)
171
+ @resource[:foo].should be_nil
172
+ end
173
+
174
+ it "should have a method for testing whether the parameter list is empty" do
175
+ @resource.should be_empty
176
+ @resource[:foo] = "bar"
177
+ @resource.should_not be_empty
178
+ end
179
+
180
+ it "should be able to produce a hash of all existing parameters" do
181
+ @resource[:foo] = "bar"
182
+ @resource[:fee] = "yay"
183
+
184
+ hash = @resource.to_hash
185
+ hash[:foo].should == "bar"
186
+ hash[:fee].should == "yay"
187
+ end
188
+
189
+ it "should not provide direct access to the internal parameters hash when producing a hash" do
190
+ hash = @resource.to_hash
191
+ hash[:foo] = "bar"
192
+ @resource[:foo].should be_nil
193
+ end
194
+
195
+ it "should use the title as the namevar to the hash if no namevar is present" do
196
+ Puppet::Type.type(:file).stubs(:namevar).returns :myvar
197
+ @resource.to_hash[:myvar].should == "/my/file"
198
+ end
199
+
200
+ it "should set :name to the title if :name is not present for non-builtin types" do
201
+ resource = Puppet::Resource.new :foo, "bar"
202
+ resource.to_hash[:name].should == "bar"
203
+ end
204
+ end
205
+
206
+ describe "when serializing" do
207
+ before do
208
+ @resource = Puppet::Resource.new("file", "/my/file")
209
+ @resource["one"] = "test"
210
+ @resource["two"] = "other"
211
+ end
212
+
213
+ it "should be able to be dumped to yaml" do
214
+ proc { YAML.dump(@resource) }.should_not raise_error
215
+ end
216
+
217
+ it "should produce an equivalent yaml object" do
218
+ text = YAML.dump(@resource)
219
+
220
+ newresource = YAML.load(text)
221
+ newresource.title.should == @resource.title
222
+ newresource.type.should == @resource.type
223
+ %w{one two}.each do |param|
224
+ newresource[param].should == @resource[param]
225
+ end
226
+ end
227
+ end
228
+
229
+ describe "when converting to a RAL resource" do
230
+ before do
231
+ @resource = Puppet::Resource.new("file", "/my/file")
232
+ @resource["one"] = "test"
233
+ @resource["two"] = "other"
234
+ end
235
+
236
+ it "should use the resource type's :create method to create the resource if the resource is of a builtin type" do
237
+ type = mock 'resource type'
238
+ type.expects(:new).with(@resource).returns(:myresource)
239
+ Puppet::Type.expects(:type).with(@resource.type).returns(type)
240
+ @resource.to_ral.should == :myresource
241
+ end
242
+
243
+ it "should convert to a component instance if the resource type is not of a builtin type" do
244
+ component = mock 'component type'
245
+ Puppet::Type::Component.expects(:new).with(@resource).returns "meh"
246
+
247
+ Puppet::Type.expects(:type).with(@resource.type).returns(nil)
248
+ @resource.to_ral.should == "meh"
249
+ end
250
+ end
251
+
252
+ it "should be able to convert itself to Puppet code" do
253
+ Puppet::Resource.new("one::two", "/my/file").should respond_to(:to_manifest)
254
+ end
255
+
256
+ describe "when converting to puppet code" do
257
+ before do
258
+ @resource = Puppet::Resource.new("one::two", "/my/file", :noop => true, :foo => %w{one two})
259
+ end
260
+
261
+ it "should print the type and title" do
262
+ @resource.to_manifest.should be_include("one::two { '/my/file':\n")
263
+ end
264
+
265
+ it "should print each parameter, with the value single-quoted" do
266
+ @resource.to_manifest.should be_include(" noop => 'true'")
267
+ end
268
+
269
+ it "should print array values appropriately" do
270
+ @resource.to_manifest.should be_include(" foo => ['one','two']")
271
+ end
272
+ end
273
+
274
+ it "should be able to convert itself to a TransObject instance" do
275
+ Puppet::Resource.new("one::two", "/my/file").should respond_to(:to_trans)
276
+ end
277
+
278
+ describe "when converting to a TransObject" do
279
+ describe "and the resource is not an instance of a builtin type" do
280
+ before do
281
+ @resource = Puppet::Resource.new("foo", "bar")
282
+ end
283
+
284
+ it "should return a simple TransBucket if it is not an instance of a builtin type" do
285
+ bucket = @resource.to_trans
286
+ bucket.should be_instance_of(Puppet::TransBucket)
287
+ bucket.type.should == @resource.type
288
+ bucket.name.should == @resource.title
289
+ end
290
+
291
+ it "should copy over the resource's file" do
292
+ @resource.file = "/foo/bar"
293
+ @resource.to_trans.file.should == "/foo/bar"
294
+ end
295
+
296
+ it "should copy over the resource's line" do
297
+ @resource.line = 50
298
+ @resource.to_trans.line.should == 50
299
+ end
300
+ end
301
+
302
+ describe "and the resource is an instance of a builtin type" do
303
+ before do
304
+ @resource = Puppet::Resource.new("file", "bar")
305
+ end
306
+
307
+ it "should return a TransObject if it is an instance of a builtin resource type" do
308
+ trans = @resource.to_trans
309
+ trans.should be_instance_of(Puppet::TransObject)
310
+ trans.type.should == "file"
311
+ trans.name.should == @resource.title
312
+ end
313
+
314
+ it "should copy over the resource's file" do
315
+ @resource.file = "/foo/bar"
316
+ @resource.to_trans.file.should == "/foo/bar"
317
+ end
318
+
319
+ it "should copy over the resource's line" do
320
+ @resource.line = 50
321
+ @resource.to_trans.line.should == 50
322
+ end
323
+
324
+ # Only TransObjects support tags, annoyingly
325
+ it "should copy over the resource's tags" do
326
+ @resource.tag "foo"
327
+ @resource.to_trans.tags.should == @resource.tags
328
+ end
329
+
330
+ it "should copy the resource's parameters into the transobject and convert the parameter name to a string" do
331
+ @resource[:foo] = "bar"
332
+ @resource.to_trans["foo"].should == "bar"
333
+ end
334
+
335
+ it "should be able to copy arrays of values" do
336
+ @resource[:foo] = %w{yay fee}
337
+ @resource.to_trans["foo"].should == %w{yay fee}
338
+ end
339
+
340
+ it "should reduce single-value arrays to just a value" do
341
+ @resource[:foo] = %w{yay}
342
+ @resource.to_trans["foo"].should == "yay"
343
+ end
344
+
345
+ it "should convert resource references into the backward-compatible form" do
346
+ @resource[:foo] = Puppet::Resource::Reference.new(:file, "/f")
347
+ @resource.to_trans["foo"].should == %w{file /f}
348
+ end
349
+
350
+ it "should convert resource references into the backward-compatible form even when within arrays" do
351
+ @resource[:foo] = ["a", Puppet::Resource::Reference.new(:file, "/f")]
352
+ @resource.to_trans["foo"].should == ["a", %w{file /f}]
353
+ end
354
+ end
355
+ end
356
+
357
+ describe "when converting to json" do
358
+ confine "Missing 'json' library" => Puppet.features.json?
359
+
360
+ def json_output_should
361
+ @resource.class.expects(:json_create).with { |hash| yield hash }
362
+ end
363
+
364
+ it "should include the json util module" do
365
+ Puppet::Resource.metaclass.ancestors.should be_include(Puppet::Util::Json)
366
+ end
367
+
368
+ # LAK:NOTE For all of these tests, we convert back to the resource so we can
369
+ # trap the actual data structure then.
370
+ it "should set its json_class to 'Puppet::Resource'" do
371
+ JSON.parse(Puppet::Resource.new("file", "yay").to_json).should be_instance_of(Puppet::Resource)
372
+ end
373
+
374
+ it "should set its type to the provided type" do
375
+ JSON.parse(Puppet::Resource.new("File", "/foo").to_json).type.should == "File"
376
+ end
377
+
378
+ it "should set its title to the provided title" do
379
+ JSON.parse(Puppet::Resource.new("File", "/foo").to_json).title.should == "/foo"
380
+ end
381
+
382
+ it "should include all tags from the resource" do
383
+ resource = Puppet::Resource.new("File", "/foo")
384
+ resource.tag("yay")
385
+
386
+ JSON.parse(resource.to_json).tags.should == resource.tags
387
+ end
388
+
389
+ it "should include the file if one is set" do
390
+ resource = Puppet::Resource.new("File", "/foo")
391
+ resource.file = "/my/file"
392
+
393
+ JSON.parse(resource.to_json).file.should == "/my/file"
394
+ end
395
+
396
+ it "should include the line if one is set" do
397
+ resource = Puppet::Resource.new("File", "/foo")
398
+ resource.line = 50
399
+
400
+ JSON.parse(resource.to_json).line.should == 50
401
+ end
402
+
403
+ it "should include the 'exported' value if one is set" do
404
+ resource = Puppet::Resource.new("File", "/foo")
405
+ resource.exported = true
406
+
407
+ JSON.parse(resource.to_json).exported.should be_true
408
+ end
409
+
410
+ it "should set 'exported' to false if no value is set" do
411
+ resource = Puppet::Resource.new("File", "/foo")
412
+
413
+ JSON.parse(resource.to_json).exported.should be_false
414
+ end
415
+
416
+ it "should set all of its parameters as the 'parameters' entry" do
417
+ resource = Puppet::Resource.new("File", "/foo")
418
+ resource[:foo] = %w{bar eh}
419
+ resource[:fee] = %w{baz}
420
+
421
+ result = JSON.parse(resource.to_json)
422
+ result["foo"].should == %w{bar eh}
423
+ result["fee"].should == %w{baz}
424
+ end
425
+
426
+ it "should set all parameter values as arrays" do
427
+ resource = Puppet::Resource.new("File", "/foo")
428
+ resource[:foo] = "bar"
429
+ JSON.parse(resource.to_json)["foo"].should == %w{bar}
430
+ end
431
+ end
432
+
433
+ describe "when converting from json" do
434
+ confine "Missing 'json' library" => Puppet.features.json?
435
+
436
+ def json_result_should
437
+ Puppet::Resource.expects(:new).with { |hash| yield hash }
438
+ end
439
+
440
+ before do
441
+ @data = {
442
+ 'type' => "file",
443
+ 'title' => "yay",
444
+ }
445
+ end
446
+
447
+ it "should set its type to the provided type" do
448
+ Puppet::Resource.from_json(@data).type.should == "File"
449
+ end
450
+
451
+ it "should set its title to the provided title" do
452
+ Puppet::Resource.from_json(@data).title.should == "yay"
453
+ end
454
+
455
+ it "should tag the resource with any provided tags" do
456
+ @data['tags'] = %w{foo bar}
457
+ resource = Puppet::Resource.from_json(@data)
458
+ resource.tags.should be_include("foo")
459
+ resource.tags.should be_include("bar")
460
+ end
461
+
462
+ it "should set its file to the provided file" do
463
+ @data['file'] = "/foo/bar"
464
+ Puppet::Resource.from_json(@data).file.should == "/foo/bar"
465
+ end
466
+
467
+ it "should set its line to the provided line" do
468
+ @data['line'] = 50
469
+ Puppet::Resource.from_json(@data).line.should == 50
470
+ end
471
+
472
+ it "should 'exported' to true if set in the json data" do
473
+ @data['exported'] = true
474
+ Puppet::Resource.from_json(@data).exported.should be_true
475
+ end
476
+
477
+ it "should 'exported' to false if not set in the json data" do
478
+ Puppet::Resource.from_json(@data).exported.should be_false
479
+ end
480
+
481
+ it "should fail if no title is provided" do
482
+ @data.delete('title')
483
+ lambda { Puppet::Resource.from_json(@data) }.should raise_error(ArgumentError)
484
+ end
485
+
486
+ it "should fail if no type is provided" do
487
+ @data.delete('type')
488
+ lambda { Puppet::Resource.from_json(@data) }.should raise_error(ArgumentError)
489
+ end
490
+
491
+ it "should set each of the provided parameters" do
492
+ @data['parameters'] = {'foo' => %w{one two}, 'fee' => %w{three four}}
493
+ resource = Puppet::Resource.from_json(@data)
494
+ resource['foo'].should == %w{one two}
495
+ resource['fee'].should == %w{three four}
496
+ end
497
+
498
+ it "should convert single-value array parameters to normal values" do
499
+ @data['parameters'] = {'foo' => %w{one}}
500
+ resource = Puppet::Resource.from_json(@data)
501
+ resource['foo'].should == %w{one}
502
+ end
503
+ end
504
+ end