puppet 2.6.18 → 2.7.1

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 (1050) hide show
  1. data/CHANGELOG +733 -187
  2. data/LICENSE +13 -13
  3. data/README.md +5 -9
  4. data/Rakefile +1 -1
  5. data/conf/auth.conf +8 -3
  6. data/conf/redhat/puppet.spec +21 -110
  7. data/conf/solaris/pkginfo +3 -4
  8. data/conf/suse/puppet.spec +1 -1
  9. data/ext/cert_inspector +140 -0
  10. data/ext/nagios/naggen +12 -5
  11. data/ext/puppet-test +11 -5
  12. data/ext/vim/README +1 -2
  13. data/ext/yaml_nodes.rb +11 -5
  14. data/install.rb +1 -54
  15. data/lib/puppet.rb +6 -10
  16. data/lib/puppet/application.rb +23 -32
  17. data/lib/puppet/application/agent.rb +228 -7
  18. data/lib/puppet/application/apply.rb +108 -36
  19. data/lib/puppet/application/catalog.rb +4 -0
  20. data/lib/puppet/application/cert.rb +128 -17
  21. data/lib/puppet/application/certificate.rb +18 -0
  22. data/lib/puppet/application/certificate_request.rb +4 -0
  23. data/lib/puppet/application/certificate_revocation_list.rb +4 -0
  24. data/lib/puppet/application/config.rb +4 -0
  25. data/lib/puppet/application/describe.rb +53 -0
  26. data/lib/puppet/application/device.rb +255 -0
  27. data/lib/puppet/application/doc.rb +92 -6
  28. data/lib/puppet/application/face_base.rb +246 -0
  29. data/lib/puppet/application/facts.rb +4 -0
  30. data/lib/puppet/application/file.rb +4 -0
  31. data/lib/puppet/application/filebucket.rb +102 -0
  32. data/lib/puppet/application/help.rb +4 -0
  33. data/lib/puppet/application/indirection_base.rb +4 -0
  34. data/lib/puppet/application/inspect.rb +21 -23
  35. data/lib/puppet/application/key.rb +4 -0
  36. data/lib/puppet/application/kick.rb +131 -4
  37. data/lib/puppet/application/man.rb +4 -0
  38. data/lib/puppet/application/master.rb +108 -40
  39. data/lib/puppet/application/node.rb +4 -0
  40. data/lib/puppet/application/parser.rb +5 -0
  41. data/lib/puppet/application/plugin.rb +3 -0
  42. data/lib/puppet/application/queue.rb +75 -13
  43. data/lib/puppet/application/report.rb +4 -0
  44. data/lib/puppet/application/resource.rb +115 -23
  45. data/lib/puppet/application/resource_type.rb +4 -0
  46. data/lib/puppet/application/secret_agent.rb +6 -0
  47. data/lib/puppet/application/status.rb +4 -0
  48. data/lib/puppet/configurer.rb +57 -61
  49. data/lib/puppet/configurer/fact_handler.rb +1 -6
  50. data/lib/puppet/daemon.rb +2 -2
  51. data/lib/puppet/defaults.rb +30 -88
  52. data/lib/puppet/dsl/resource_type_api.rb +19 -31
  53. data/lib/puppet/external/nagios/parser.rb +1 -1
  54. data/lib/puppet/face.rb +12 -0
  55. data/lib/puppet/face/catalog.rb +130 -0
  56. data/lib/puppet/face/catalog/select.rb +49 -0
  57. data/lib/puppet/face/certificate.rb +115 -0
  58. data/lib/puppet/face/certificate_request.rb +55 -0
  59. data/lib/puppet/face/certificate_revocation_list.rb +60 -0
  60. data/lib/puppet/face/config.rb +45 -0
  61. data/lib/puppet/face/facts.rb +81 -0
  62. data/lib/puppet/face/file.rb +47 -0
  63. data/lib/puppet/face/file/download.rb +54 -0
  64. data/lib/puppet/face/file/store.rb +21 -0
  65. data/lib/puppet/face/help.rb +131 -0
  66. data/lib/puppet/face/help/action.erb +53 -0
  67. data/lib/puppet/face/help/face.erb +79 -0
  68. data/lib/puppet/face/help/global.erb +19 -0
  69. data/lib/puppet/face/help/man.erb +136 -0
  70. data/lib/puppet/face/key.rb +15 -0
  71. data/lib/puppet/face/man.rb +93 -0
  72. data/lib/puppet/face/node.rb +43 -0
  73. data/lib/puppet/face/parser.rb +42 -0
  74. data/lib/puppet/face/plugin.rb +55 -0
  75. data/lib/puppet/face/report.rb +56 -0
  76. data/lib/puppet/face/resource.rb +53 -0
  77. data/lib/puppet/face/resource_type.rb +81 -0
  78. data/lib/puppet/face/secret_agent.rb +54 -0
  79. data/lib/puppet/face/status.rb +52 -0
  80. data/lib/puppet/feature/ssh.rb +4 -0
  81. data/lib/puppet/file_bucket/dipper.rb +3 -3
  82. data/lib/puppet/file_bucket/file.rb +6 -5
  83. data/lib/puppet/file_bucket/file/indirection_hooks.rb +9 -0
  84. data/lib/puppet/file_serving/configuration.rb +1 -2
  85. data/lib/puppet/file_serving/content.rb +2 -1
  86. data/lib/puppet/file_serving/{terminus_selector.rb → indirection_hooks.rb} +3 -2
  87. data/lib/puppet/file_serving/metadata.rb +2 -1
  88. data/lib/puppet/file_serving/mount/modules.rb +5 -4
  89. data/lib/puppet/indirector.rb +16 -43
  90. data/lib/puppet/indirector/catalog/active_record.rb +1 -1
  91. data/lib/puppet/indirector/catalog/compiler.rb +5 -15
  92. data/lib/puppet/indirector/catalog/static_compiler.rb +137 -0
  93. data/lib/puppet/indirector/certificate_request/ca.rb +8 -0
  94. data/lib/puppet/indirector/certificate_status.rb +4 -0
  95. data/lib/puppet/indirector/certificate_status/file.rb +82 -0
  96. data/lib/puppet/indirector/certificate_status/rest.rb +10 -0
  97. data/lib/puppet/indirector/couch.rb +5 -3
  98. data/lib/puppet/indirector/exec.rb +3 -3
  99. data/lib/puppet/indirector/face.rb +127 -0
  100. data/lib/puppet/indirector/facts/network_device.rb +25 -0
  101. data/lib/puppet/indirector/file.rb +79 -0
  102. data/lib/puppet/indirector/file_bucket_file/file.rb +0 -4
  103. data/lib/puppet/indirector/indirection.rb +1 -2
  104. data/lib/puppet/indirector/inventory/yaml.rb +81 -0
  105. data/lib/puppet/indirector/report/processor.rb +0 -2
  106. data/lib/puppet/indirector/request.rb +0 -4
  107. data/lib/puppet/indirector/resource/ral.rb +0 -4
  108. data/lib/puppet/indirector/resource_type/parser.rb +19 -3
  109. data/lib/puppet/indirector/rest.rb +11 -5
  110. data/lib/puppet/indirector/run/local.rb +0 -4
  111. data/lib/puppet/indirector/ssl_file.rb +1 -5
  112. data/lib/puppet/indirector/terminus.rb +3 -26
  113. data/lib/puppet/indirector/yaml.rb +0 -5
  114. data/lib/puppet/interface.rb +156 -0
  115. data/lib/puppet/interface/action.rb +284 -0
  116. data/lib/puppet/interface/action_builder.rb +74 -0
  117. data/lib/puppet/interface/action_manager.rb +70 -0
  118. data/lib/puppet/interface/documentation.rb +230 -0
  119. data/lib/puppet/interface/face_collection.rb +137 -0
  120. data/lib/puppet/interface/option.rb +108 -0
  121. data/lib/puppet/interface/option_builder.rb +54 -0
  122. data/lib/puppet/interface/option_manager.rb +67 -0
  123. data/lib/puppet/metatype/manager.rb +20 -7
  124. data/lib/puppet/module.rb +1 -1
  125. data/lib/puppet/network/client.rb +179 -0
  126. data/lib/puppet/network/client/ca.rb +56 -0
  127. data/lib/puppet/network/client/file.rb +6 -0
  128. data/lib/puppet/network/client/proxy.rb +27 -0
  129. data/lib/puppet/network/client/report.rb +26 -0
  130. data/lib/puppet/network/client/runner.rb +10 -0
  131. data/lib/puppet/network/client/status.rb +4 -0
  132. data/lib/puppet/network/format.rb +1 -1
  133. data/lib/puppet/network/formats.rb +63 -0
  134. data/lib/puppet/network/handler/ca.rb +106 -16
  135. data/lib/puppet/network/handler/filebucket.rb +2 -4
  136. data/lib/puppet/network/handler/fileserver.rb +3 -2
  137. data/lib/puppet/network/handler/master.rb +5 -3
  138. data/lib/puppet/network/handler/report.rb +0 -2
  139. data/lib/puppet/network/handler/runner.rb +0 -2
  140. data/lib/puppet/network/handler/status.rb +0 -2
  141. data/lib/puppet/network/http/api/v1.rb +11 -3
  142. data/lib/puppet/network/http/handler.rb +26 -35
  143. data/lib/puppet/network/http/rack/rest.rb +2 -7
  144. data/lib/puppet/network/http/webrick.rb +1 -2
  145. data/lib/puppet/network/http_pool.rb +8 -17
  146. data/lib/puppet/network/http_server/mongrel.rb +1 -0
  147. data/lib/puppet/network/http_server/webrick.rb +155 -0
  148. data/lib/puppet/network/rest_authconfig.rb +4 -3
  149. data/lib/puppet/network/rest_authorization.rb +2 -2
  150. data/lib/puppet/network/rights.rb +4 -9
  151. data/lib/puppet/network/server.rb +1 -1
  152. data/lib/puppet/network/xmlrpc/client.rb +211 -0
  153. data/lib/puppet/node.rb +2 -1
  154. data/lib/puppet/node/environment.rb +30 -3
  155. data/lib/puppet/node/facts.rb +15 -15
  156. data/lib/puppet/node/inventory.rb +7 -0
  157. data/lib/puppet/parser/ast.rb +6 -2
  158. data/lib/puppet/parser/ast/astarray.rb +12 -23
  159. data/lib/puppet/parser/ast/caseopt.rb +12 -24
  160. data/lib/puppet/parser/ast/definition.rb +17 -0
  161. data/lib/puppet/parser/ast/hostclass.rb +29 -0
  162. data/lib/puppet/parser/ast/leaf.rb +2 -2
  163. data/lib/puppet/parser/ast/node.rb +20 -0
  164. data/lib/puppet/parser/ast/resource.rb +42 -50
  165. data/lib/puppet/parser/ast/resource_instance.rb +9 -0
  166. data/lib/puppet/parser/ast/resource_override.rb +2 -3
  167. data/lib/puppet/parser/ast/resource_reference.rb +1 -1
  168. data/lib/puppet/parser/ast/top_level_construct.rb +4 -0
  169. data/lib/puppet/parser/ast/vardef.rb +1 -1
  170. data/lib/puppet/parser/compiler.rb +16 -17
  171. data/lib/puppet/parser/functions/create_resources.rb +47 -0
  172. data/lib/puppet/parser/functions/extlookup.rb +2 -7
  173. data/lib/puppet/parser/functions/fqdn_rand.rb +2 -2
  174. data/lib/puppet/parser/functions/sha1.rb +1 -1
  175. data/lib/puppet/parser/grammar.ra +67 -144
  176. data/lib/puppet/parser/lexer.rb +1 -1
  177. data/lib/puppet/parser/parser.rb +1190 -1262
  178. data/lib/puppet/parser/parser_support.rb +48 -73
  179. data/lib/puppet/parser/resource.rb +2 -19
  180. data/lib/puppet/parser/scope.rb +33 -103
  181. data/lib/puppet/parser/templatewrapper.rb +21 -22
  182. data/lib/puppet/parser/type_loader.rb +60 -35
  183. data/lib/puppet/provider/aixobject.rb +393 -0
  184. data/lib/puppet/provider/augeas/augeas.rb +37 -15
  185. data/lib/puppet/provider/cisco.rb +9 -0
  186. data/lib/puppet/provider/cron/crontab.rb +1 -7
  187. data/lib/puppet/provider/exec/posix.rb +3 -6
  188. data/lib/puppet/provider/exec/shell.rb +2 -11
  189. data/lib/puppet/provider/file/posix.rb +1 -1
  190. data/lib/puppet/provider/file/win32.rb +1 -1
  191. data/lib/puppet/provider/group/aix.rb +141 -0
  192. data/lib/puppet/provider/group/directoryservice.rb +0 -14
  193. data/lib/puppet/provider/host/parsed.rb +23 -55
  194. data/lib/puppet/provider/interface/base.rb +0 -0
  195. data/lib/puppet/provider/interface/cisco.rb +27 -0
  196. data/lib/puppet/provider/mcx/mcxcontent.rb +57 -96
  197. data/lib/puppet/provider/mount/parsed.rb +1 -1
  198. data/lib/puppet/provider/naginator.rb +1 -9
  199. data/lib/puppet/provider/nameservice/directoryservice.rb +41 -26
  200. data/lib/puppet/provider/network_device.rb +68 -0
  201. data/lib/puppet/provider/package/appdmg.rb +13 -13
  202. data/lib/puppet/provider/package/aptitude.rb +0 -1
  203. data/lib/puppet/provider/package/pip.rb +109 -0
  204. data/lib/puppet/provider/package/pkgdmg.rb +24 -32
  205. data/lib/puppet/provider/package/pkgutil.rb +175 -0
  206. data/lib/puppet/provider/package/yum.rb +8 -1
  207. data/lib/puppet/provider/service/daemontools.rb +1 -1
  208. data/lib/puppet/provider/service/launchd.rb +1 -1
  209. data/lib/puppet/provider/service/smf.rb +3 -3
  210. data/lib/puppet/provider/service/upstart.rb +73 -0
  211. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +9 -10
  212. data/lib/puppet/provider/user/aix.rb +353 -0
  213. data/lib/puppet/provider/user/directoryservice.rb +0 -14
  214. data/lib/puppet/provider/user/user_role_add.rb +17 -32
  215. data/lib/puppet/provider/vlan/cisco.rb +28 -0
  216. data/lib/puppet/provider/zfs/solaris.rb +1 -1
  217. data/lib/puppet/provider/zone/solaris.rb +3 -0
  218. data/lib/puppet/provider/zpool/solaris.rb +7 -5
  219. data/lib/puppet/rails.rb +1 -1
  220. data/lib/puppet/rails/benchmark.rb +1 -1
  221. data/lib/puppet/rails/fact_name.rb +1 -0
  222. data/lib/puppet/rails/host.rb +0 -7
  223. data/lib/puppet/reference/configuration.rb +26 -101
  224. data/lib/puppet/reports/store.rb +3 -7
  225. data/lib/puppet/resource.rb +1 -1
  226. data/lib/puppet/resource/catalog.rb +86 -36
  227. data/lib/puppet/resource/type.rb +10 -15
  228. data/lib/puppet/resource/type_collection.rb +55 -63
  229. data/lib/puppet/simple_graph.rb +370 -269
  230. data/lib/puppet/ssl/base.rb +0 -8
  231. data/lib/puppet/ssl/certificate.rb +0 -6
  232. data/lib/puppet/ssl/certificate_authority.rb +24 -109
  233. data/lib/puppet/ssl/certificate_authority/interface.rb +19 -66
  234. data/lib/puppet/ssl/certificate_factory.rb +91 -112
  235. data/lib/puppet/ssl/certificate_request.rb +15 -98
  236. data/lib/puppet/ssl/certificate_revocation_list.rb +1 -1
  237. data/lib/puppet/ssl/host.rb +85 -51
  238. data/lib/puppet/ssl/inventory.rb +1 -1
  239. data/lib/puppet/sslcertificates.rb +146 -0
  240. data/lib/puppet/sslcertificates/ca.rb +375 -0
  241. data/lib/puppet/sslcertificates/certificate.rb +255 -0
  242. data/lib/puppet/sslcertificates/inventory.rb +38 -0
  243. data/lib/puppet/sslcertificates/support.rb +146 -0
  244. data/lib/puppet/status.rb +1 -1
  245. data/lib/puppet/transaction.rb +163 -94
  246. data/lib/puppet/transaction/event.rb +1 -1
  247. data/lib/puppet/transaction/event_manager.rb +19 -3
  248. data/lib/puppet/transaction/report.rb +9 -3
  249. data/lib/puppet/type.rb +107 -62
  250. data/lib/puppet/type/augeas.rb +10 -14
  251. data/lib/puppet/type/cron.rb +13 -14
  252. data/lib/puppet/type/exec.rb +0 -9
  253. data/lib/puppet/type/file.rb +20 -29
  254. data/lib/puppet/type/file/ctime.rb +1 -1
  255. data/lib/puppet/type/file/ensure.rb +1 -1
  256. data/lib/puppet/type/file/group.rb +1 -1
  257. data/lib/puppet/type/file/mode.rb +1 -1
  258. data/lib/puppet/type/file/mtime.rb +1 -1
  259. data/lib/puppet/type/file/selcontext.rb +1 -1
  260. data/lib/puppet/type/file/source.rb +3 -3
  261. data/lib/puppet/type/file/type.rb +1 -1
  262. data/lib/puppet/type/group.rb +36 -0
  263. data/lib/puppet/type/host.rb +18 -43
  264. data/lib/puppet/type/interface.rb +109 -0
  265. data/lib/puppet/type/k5login.rb +1 -4
  266. data/lib/puppet/type/macauthorization.rb +3 -3
  267. data/lib/puppet/type/mcx.rb +2 -21
  268. data/lib/puppet/type/router.rb +14 -0
  269. data/lib/puppet/type/schedule.rb +2 -0
  270. data/lib/puppet/type/service.rb +2 -0
  271. data/lib/puppet/type/sshkey.rb +6 -1
  272. data/lib/puppet/type/tidy.rb +12 -12
  273. data/lib/puppet/type/user.rb +36 -9
  274. data/lib/puppet/type/vlan.rb +26 -0
  275. data/lib/puppet/type/whit.rb +13 -1
  276. data/lib/puppet/type/zfs.rb +100 -8
  277. data/lib/puppet/type/zone.rb +45 -1
  278. data/lib/puppet/type/zpool.rb +1 -0
  279. data/lib/puppet/util.rb +63 -91
  280. data/lib/puppet/util/autoload.rb +16 -14
  281. data/lib/puppet/util/classgen.rb +13 -1
  282. data/lib/puppet/util/command_line.rb +109 -22
  283. data/lib/puppet/util/log.rb +1 -0
  284. data/lib/puppet/util/log/destinations.rb +16 -4
  285. data/lib/puppet/util/logging.rb +11 -0
  286. data/lib/puppet/util/monkey_patches.rb +7 -77
  287. data/lib/puppet/util/network_device.rb +17 -0
  288. data/lib/puppet/util/network_device/base.rb +27 -0
  289. data/lib/puppet/util/network_device/cisco.rb +4 -0
  290. data/lib/puppet/util/network_device/cisco/device.rb +256 -0
  291. data/lib/puppet/util/network_device/cisco/facts.rb +72 -0
  292. data/lib/puppet/util/network_device/cisco/interface.rb +82 -0
  293. data/lib/puppet/util/network_device/config.rb +93 -0
  294. data/lib/puppet/util/network_device/ipcalc.rb +68 -0
  295. data/lib/puppet/util/network_device/transport.rb +3 -0
  296. data/lib/puppet/util/network_device/transport/base.rb +26 -0
  297. data/lib/puppet/util/network_device/transport/ssh.rb +121 -0
  298. data/lib/puppet/util/network_device/transport/telnet.rb +42 -0
  299. data/lib/puppet/util/rdoc.rb +4 -10
  300. data/lib/puppet/util/rdoc/parser.rb +34 -23
  301. data/lib/puppet/util/reference.rb +7 -8
  302. data/lib/puppet/util/selinux.rb +2 -2
  303. data/lib/puppet/util/settings.rb +1 -6
  304. data/lib/puppet/util/settings/file_setting.rb +0 -1
  305. data/lib/puppet/util/suidmanager.rb +30 -79
  306. data/lib/puppet/util/zaml.rb +41 -40
  307. data/man/man5/puppet.conf.5 +291 -873
  308. data/man/man8/filebucket.8 +47 -71
  309. data/man/man8/pi.8 +44 -10
  310. data/man/man8/puppet-agent.8 +154 -0
  311. data/man/man8/puppet-apply.8 +75 -0
  312. data/man/man8/puppet-catalog.8 +286 -0
  313. data/man/man8/puppet-cert.8 +97 -0
  314. data/man/man8/puppet-certificate.8 +229 -0
  315. data/man/man8/puppet-certificate_request.8 +168 -0
  316. data/man/man8/puppet-certificate_revocation_list.8 +165 -0
  317. data/man/man8/puppet-config.8 +80 -0
  318. data/man/man8/puppet-describe.8 +51 -0
  319. data/man/man8/puppet-device.8 +86 -0
  320. data/man/man8/puppet-doc.8 +101 -0
  321. data/man/man8/puppet-facts.8 +217 -0
  322. data/man/man8/puppet-file.8 +225 -0
  323. data/man/man8/puppet-filebucket.8 +81 -0
  324. data/man/man8/puppet-help.8 +71 -0
  325. data/man/man8/puppet-inspect.8 +28 -0
  326. data/man/man8/puppet-key.8 +126 -0
  327. data/man/man8/puppet-kick.8 +95 -0
  328. data/man/man8/puppet-man.8 +74 -0
  329. data/man/man8/puppet-master.8 +74 -0
  330. data/man/man8/puppet-node.8 +171 -0
  331. data/man/man8/puppet-parser.8 +71 -0
  332. data/man/man8/puppet-plugin.8 +77 -0
  333. data/man/man8/puppet-queue.8 +55 -0
  334. data/man/man8/puppet-report.8 +187 -0
  335. data/man/man8/puppet-resource.8 +84 -0
  336. data/man/man8/puppet-resource_type.8 +214 -0
  337. data/man/man8/puppet-secret_agent.8 +74 -0
  338. data/man/man8/puppet-status.8 +150 -0
  339. data/man/man8/puppet.8 +2 -2
  340. data/man/man8/puppetca.8 +64 -136
  341. data/man/man8/puppetd.8 +99 -228
  342. data/man/man8/puppetdoc.8 +41 -48
  343. data/man/man8/puppetmasterd.8 +54 -32
  344. data/man/man8/puppetqd.8 +45 -10
  345. data/man/man8/puppetrun.8 +56 -134
  346. data/man/man8/ralsh.8 +48 -49
  347. data/spec/fixtures/faulty_face/puppet/face/syntax.rb +8 -0
  348. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +28 -0
  349. data/spec/fixtures/unit/parser/lexer/aliastest.pp +16 -0
  350. data/spec/fixtures/unit/parser/lexer/append.pp +11 -0
  351. data/spec/fixtures/unit/parser/lexer/argumentdefaults.pp +14 -0
  352. data/spec/fixtures/unit/parser/lexer/arithmetic_expression.pp +8 -0
  353. data/spec/fixtures/unit/parser/lexer/arraytrailingcomma.pp +3 -0
  354. data/spec/fixtures/unit/parser/lexer/casestatement.pp +65 -0
  355. data/spec/fixtures/unit/parser/lexer/classheirarchy.pp +15 -0
  356. data/spec/fixtures/unit/parser/lexer/classincludes.pp +17 -0
  357. data/spec/fixtures/unit/parser/lexer/classpathtest.pp +11 -0
  358. data/spec/fixtures/unit/parser/lexer/collection.pp +10 -0
  359. data/spec/fixtures/unit/parser/lexer/collection_override.pp +8 -0
  360. data/spec/fixtures/unit/parser/lexer/collection_within_virtual_definitions.pp +20 -0
  361. data/spec/fixtures/unit/parser/lexer/componentmetaparams.pp +11 -0
  362. data/spec/fixtures/unit/parser/lexer/componentrequire.pp +8 -0
  363. data/spec/fixtures/unit/parser/lexer/deepclassheirarchy.pp +23 -0
  364. data/spec/fixtures/unit/parser/lexer/defineoverrides.pp +17 -0
  365. data/spec/fixtures/unit/parser/lexer/emptyclass.pp +9 -0
  366. data/spec/fixtures/unit/parser/lexer/emptyexec.pp +3 -0
  367. data/spec/fixtures/unit/parser/lexer/emptyifelse.pp +9 -0
  368. data/spec/fixtures/unit/parser/lexer/falsevalues.pp +3 -0
  369. data/spec/fixtures/unit/parser/lexer/filecreate.pp +11 -0
  370. data/spec/fixtures/unit/parser/lexer/fqdefinition.pp +5 -0
  371. data/spec/fixtures/unit/parser/lexer/fqparents.pp +11 -0
  372. data/spec/fixtures/unit/parser/lexer/funccomma.pp +5 -0
  373. data/spec/fixtures/unit/parser/lexer/hash.pp +33 -0
  374. data/spec/fixtures/unit/parser/lexer/ifexpression.pp +12 -0
  375. data/spec/fixtures/unit/parser/lexer/implicititeration.pp +15 -0
  376. data/spec/fixtures/unit/parser/lexer/multilinecomments.pp +10 -0
  377. data/spec/fixtures/unit/parser/lexer/multipleclass.pp +9 -0
  378. data/spec/fixtures/unit/parser/lexer/multipleinstances.pp +7 -0
  379. data/spec/fixtures/unit/parser/lexer/multisubs.pp +13 -0
  380. data/spec/fixtures/unit/parser/lexer/namevartest.pp +9 -0
  381. data/spec/fixtures/unit/parser/lexer/scopetest.pp +13 -0
  382. data/spec/fixtures/unit/parser/lexer/selectorvalues.pp +49 -0
  383. data/spec/fixtures/unit/parser/lexer/simpledefaults.pp +5 -0
  384. data/spec/fixtures/unit/parser/lexer/simpleselector.pp +38 -0
  385. data/spec/fixtures/unit/parser/lexer/singleary.pp +19 -0
  386. data/spec/fixtures/unit/parser/lexer/singlequote.pp +11 -0
  387. data/spec/fixtures/unit/parser/lexer/singleselector.pp +22 -0
  388. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +11 -0
  389. data/spec/fixtures/unit/parser/lexer/tag.pp +9 -0
  390. data/spec/fixtures/unit/parser/lexer/tagged.pp +35 -0
  391. data/spec/fixtures/unit/parser/lexer/virtualresources.pp +14 -0
  392. data/spec/fixtures/unit/provider/host/parsed/valid_hosts +19 -0
  393. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +144 -0
  394. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +7 -0
  395. data/spec/fixtures/unit/provider/mount/parsed/darwin.mount +6 -0
  396. data/spec/fixtures/unit/provider/mount/parsed/freebsd.fstab +8 -0
  397. data/spec/fixtures/unit/provider/mount/parsed/freebsd.mount +3 -0
  398. data/spec/fixtures/unit/provider/mount/parsed/hpux.mount +17 -0
  399. data/spec/fixtures/unit/provider/mount/parsed/linux.fstab +11 -0
  400. data/spec/fixtures/unit/provider/mount/parsed/linux.mount +5 -0
  401. data/spec/fixtures/unit/provider/mount/parsed/netbsd.fstab +9 -0
  402. data/spec/fixtures/unit/provider/mount/parsed/netbsd.mount +8 -0
  403. data/spec/fixtures/unit/provider/mount/parsed/openbsd.fstab +4 -0
  404. data/spec/fixtures/unit/provider/mount/parsed/openbsd.mount +4 -0
  405. data/spec/fixtures/unit/provider/mount/parsed/solaris.fstab +11 -0
  406. data/spec/fixtures/unit/provider/mount/parsed/solaris.mount +6 -0
  407. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys +7 -0
  408. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys1 +3 -0
  409. data/spec/fixtures/unit/provider/ssh_authorized_key/parsed/authorized_keys2 +1 -0
  410. data/spec/fixtures/unit/reports/tagmail/tagmail_failers.conf +3 -0
  411. data/spec/fixtures/unit/reports/tagmail/tagmail_passers.conf +30 -0
  412. data/spec/fixtures/unit/util/rdoc/basic.pp +16 -0
  413. data/spec/integration/application/apply_spec.rb +2 -5
  414. data/spec/integration/application/doc_spec.rb +5 -6
  415. data/spec/integration/configurer_spec.rb +10 -6
  416. data/spec/integration/defaults_spec.rb +18 -52
  417. data/spec/integration/faces/documentation_spec.rb +55 -0
  418. data/spec/integration/file_serving/content_spec.rb +10 -3
  419. data/spec/integration/file_serving/fileset_spec.rb +2 -3
  420. data/spec/integration/file_serving/metadata_spec.rb +10 -3
  421. data/spec/integration/file_serving/terminus_helper_spec.rb +2 -3
  422. data/spec/integration/indirector/catalog/compiler_spec.rb +7 -12
  423. data/spec/integration/indirector/catalog/queue_spec.rb +3 -4
  424. data/spec/integration/indirector/direct_file_server_spec.rb +2 -2
  425. data/spec/integration/indirector/file_content/file_server_spec.rb +7 -7
  426. data/spec/integration/indirector/file_metadata/file_server_spec.rb +2 -2
  427. data/spec/integration/indirector/node/ldap_spec.rb +3 -4
  428. data/spec/integration/network/client_spec.rb +18 -0
  429. data/spec/integration/network/formats_spec.rb +3 -4
  430. data/spec/integration/network/handler_spec.rb +3 -4
  431. data/spec/integration/network/server/mongrel_spec.rb +3 -4
  432. data/spec/integration/network/server/webrick_spec.rb +4 -4
  433. data/spec/integration/node/environment_spec.rb +2 -3
  434. data/spec/integration/node/facts_spec.rb +6 -6
  435. data/spec/integration/node_spec.rb +16 -16
  436. data/spec/integration/parser/collector_spec.rb +3 -4
  437. data/spec/integration/parser/compiler_spec.rb +43 -3
  438. data/spec/integration/parser/functions/require_spec.rb +2 -3
  439. data/spec/integration/parser/functions_spec.rb +3 -4
  440. data/spec/integration/parser/parser_spec.rb +7 -6
  441. data/spec/integration/parser/ruby_manifest_spec.rb +2 -3
  442. data/spec/integration/provider/mailalias/aliases_spec.rb +5 -19
  443. data/spec/integration/provider/mount_spec.rb +2 -2
  444. data/spec/integration/provider/package_spec.rb +3 -4
  445. data/spec/integration/provider/service/init_spec.rb +4 -6
  446. data/spec/integration/reference/providers_spec.rb +2 -3
  447. data/spec/integration/reports_spec.rb +2 -2
  448. data/spec/integration/resource/catalog_spec.rb +6 -7
  449. data/spec/integration/resource/type_collection_spec.rb +2 -3
  450. data/spec/integration/ssl/certificate_authority_spec.rb +7 -7
  451. data/spec/integration/ssl/certificate_request_spec.rb +7 -7
  452. data/spec/integration/ssl/certificate_revocation_list_spec.rb +2 -2
  453. data/spec/integration/ssl/host_spec.rb +4 -4
  454. data/spec/integration/transaction/report_spec.rb +3 -3
  455. data/spec/integration/transaction_spec.rb +61 -6
  456. data/spec/integration/type/file_spec.rb +10 -8
  457. data/spec/integration/type/package_spec.rb +2 -3
  458. data/spec/integration/type/tidy_spec.rb +2 -3
  459. data/spec/integration/type_spec.rb +2 -14
  460. data/spec/integration/util/autoload_spec.rb +2 -3
  461. data/spec/integration/util/feature_spec.rb +2 -3
  462. data/spec/integration/util/file_locking_spec.rb +3 -4
  463. data/spec/integration/util/rdoc/parser_spec.rb +3 -4
  464. data/spec/integration/util/settings_spec.rb +2 -3
  465. data/spec/lib/matchers/json.rb +111 -0
  466. data/spec/lib/puppet/face/basetest.rb +46 -0
  467. data/spec/lib/puppet/face/huzzah.rb +7 -0
  468. data/spec/lib/puppet/face/version_matching.rb +12 -0
  469. data/spec/lib/puppet_spec/files.rb +38 -5
  470. data/spec/lib/puppet_spec/fixtures.rb +28 -0
  471. data/spec/lib/puppet_spec/matchers.rb +87 -0
  472. data/spec/lib/puppet_spec/verbose.rb +0 -0
  473. data/spec/monkey_patches/alias_should_to_must.rb +0 -0
  474. data/spec/monkey_patches/publicize_methods.rb +0 -0
  475. data/spec/shared_behaviours/all_parsedfile_providers.rb +21 -0
  476. data/spec/shared_behaviours/an_indirector_face.rb +6 -0
  477. data/spec/shared_behaviours/documentation_on_faces.rb +263 -0
  478. data/spec/shared_behaviours/file_server_terminus.rb +1 -1
  479. data/spec/shared_behaviours/file_serving.rb +61 -70
  480. data/spec/shared_behaviours/memory_terminus.rb +0 -0
  481. data/spec/shared_behaviours/path_parameters.rb +0 -0
  482. data/spec/shared_behaviours/things_that_declare_options.rb +150 -0
  483. data/spec/spec.opts +0 -2
  484. data/spec/spec_helper.rb +33 -75
  485. data/spec/unit/agent/locker_spec.rb +2 -3
  486. data/spec/unit/agent_spec.rb +2 -2
  487. data/spec/unit/application/agent_spec.rb +51 -76
  488. data/spec/unit/application/apply_spec.rb +86 -150
  489. data/spec/unit/application/cert_spec.rb +8 -30
  490. data/spec/unit/application/certificate_spec.rb +20 -0
  491. data/spec/unit/application/config_spec.rb +9 -0
  492. data/spec/unit/application/describe_spec.rb +2 -3
  493. data/spec/unit/application/device_spec.rb +342 -0
  494. data/spec/unit/application/doc_spec.rb +11 -18
  495. data/spec/unit/application/face_base_spec.rb +360 -0
  496. data/spec/unit/application/facts_spec.rb +27 -0
  497. data/spec/unit/application/filebucket_spec.rb +7 -18
  498. data/spec/unit/application/indirection_base_spec.rb +42 -0
  499. data/spec/unit/application/inspect_spec.rb +7 -13
  500. data/spec/unit/application/kick_spec.rb +15 -38
  501. data/spec/unit/application/master_spec.rb +25 -81
  502. data/spec/unit/application/queue_spec.rb +12 -22
  503. data/spec/unit/application/resource_spec.rb +19 -53
  504. data/spec/unit/application/secret_agent_spec.rb +32 -0
  505. data/spec/unit/application_spec.rb +65 -34
  506. data/spec/unit/configurer/downloader_spec.rb +2 -3
  507. data/spec/unit/configurer/fact_handler_spec.rb +39 -46
  508. data/spec/unit/configurer/plugin_handler_spec.rb +2 -3
  509. data/spec/unit/configurer_spec.rb +329 -411
  510. data/spec/unit/daemon_spec.rb +7 -14
  511. data/spec/unit/dsl/resource_api_spec.rb +2 -3
  512. data/spec/unit/dsl/resource_type_api_spec.rb +24 -37
  513. data/spec/unit/face/catalog_spec.rb +7 -0
  514. data/spec/unit/face/certificate_request_spec.rb +7 -0
  515. data/spec/unit/face/certificate_revocation_list_spec.rb +7 -0
  516. data/spec/unit/face/certificate_spec.rb +23 -0
  517. data/spec/unit/face/config_spec.rb +24 -0
  518. data/spec/unit/face/facts_spec.rb +23 -0
  519. data/spec/unit/face/file_spec.rb +12 -0
  520. data/spec/unit/face/help_spec.rb +129 -0
  521. data/spec/unit/face/key_spec.rb +7 -0
  522. data/spec/unit/face/node_spec.rb +7 -0
  523. data/spec/unit/face/plugin_spec.rb +10 -0
  524. data/spec/unit/face/report_spec.rb +7 -0
  525. data/spec/unit/face/resource_spec.rb +7 -0
  526. data/spec/unit/face/resource_type_spec.rb +7 -0
  527. data/spec/unit/face/secret_agent_spec.rb +25 -0
  528. data/spec/unit/face_spec.rb +1 -0
  529. data/spec/unit/file_bucket/dipper_spec.rb +7 -8
  530. data/spec/unit/file_bucket/file_spec.rb +7 -16
  531. data/spec/unit/file_collection/lookup_spec.rb +2 -3
  532. data/spec/unit/file_collection_spec.rb +2 -3
  533. data/spec/unit/file_serving/base_spec.rb +2 -3
  534. data/spec/unit/file_serving/configuration/parser_spec.rb +2 -3
  535. data/spec/unit/file_serving/configuration_spec.rb +31 -40
  536. data/spec/unit/file_serving/content_spec.rb +6 -3
  537. data/spec/unit/file_serving/fileset_spec.rb +2 -3
  538. data/spec/unit/file_serving/{terminus_selector_spec.rb → indirection_hooks_spec.rb} +14 -13
  539. data/spec/unit/file_serving/metadata_spec.rb +6 -3
  540. data/spec/unit/file_serving/mount/file_spec.rb +2 -3
  541. data/spec/unit/file_serving/mount/modules_spec.rb +2 -11
  542. data/spec/unit/file_serving/mount/plugins_spec.rb +2 -3
  543. data/spec/unit/file_serving/mount_spec.rb +2 -3
  544. data/spec/unit/file_serving/terminus_helper_spec.rb +2 -2
  545. data/spec/unit/indirector/active_record_spec.rb +5 -7
  546. data/spec/unit/indirector/catalog/active_record_spec.rb +2 -3
  547. data/spec/unit/indirector/catalog/compiler_spec.rb +30 -50
  548. data/spec/unit/indirector/catalog/queue_spec.rb +2 -3
  549. data/spec/unit/indirector/catalog/rest_spec.rb +2 -3
  550. data/spec/unit/indirector/catalog/yaml_spec.rb +2 -3
  551. data/spec/unit/indirector/certificate/ca_spec.rb +2 -2
  552. data/spec/unit/indirector/certificate/file_spec.rb +2 -2
  553. data/spec/unit/indirector/certificate/rest_spec.rb +2 -3
  554. data/spec/unit/indirector/certificate_request/ca_spec.rb +47 -2
  555. data/spec/unit/indirector/certificate_request/file_spec.rb +2 -2
  556. data/spec/unit/indirector/certificate_request/rest_spec.rb +2 -3
  557. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +2 -2
  558. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +2 -2
  559. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +2 -3
  560. data/spec/unit/indirector/certificate_status/file_spec.rb +187 -0
  561. data/spec/unit/indirector/certificate_status/rest_spec.rb +14 -0
  562. data/spec/unit/indirector/code_spec.rb +6 -8
  563. data/spec/unit/indirector/direct_file_server_spec.rb +6 -7
  564. data/spec/unit/indirector/envelope_spec.rb +2 -3
  565. data/spec/unit/indirector/exec_spec.rb +12 -13
  566. data/spec/unit/indirector/face_spec.rb +68 -0
  567. data/spec/unit/indirector/facts/active_record_spec.rb +2 -3
  568. data/spec/unit/indirector/facts/couch_spec.rb +71 -66
  569. data/spec/unit/indirector/facts/facter_spec.rb +2 -2
  570. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +20 -20
  571. data/spec/unit/indirector/facts/network_device_spec.rb +89 -0
  572. data/spec/unit/indirector/facts/rest_spec.rb +2 -3
  573. data/spec/unit/indirector/facts/yaml_spec.rb +2 -3
  574. data/spec/unit/indirector/file_bucket_file/file_spec.rb +17 -18
  575. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +2 -3
  576. data/spec/unit/indirector/file_content/file_server_spec.rb +2 -2
  577. data/spec/unit/indirector/file_content/file_spec.rb +2 -2
  578. data/spec/unit/indirector/file_content/rest_spec.rb +2 -3
  579. data/spec/unit/indirector/file_metadata/file_server_spec.rb +2 -2
  580. data/spec/unit/indirector/file_metadata/file_spec.rb +2 -2
  581. data/spec/unit/indirector/file_metadata/rest_spec.rb +2 -3
  582. data/spec/unit/indirector/file_server_spec.rb +8 -7
  583. data/spec/unit/indirector/file_spec.rb +179 -0
  584. data/spec/unit/indirector/indirection_spec.rb +3 -24
  585. data/spec/unit/indirector/inventory/yaml_spec.rb +220 -0
  586. data/spec/unit/indirector/key/ca_spec.rb +2 -2
  587. data/spec/unit/indirector/key/file_spec.rb +2 -2
  588. data/spec/unit/indirector/ldap_spec.rb +6 -8
  589. data/spec/unit/indirector/memory_spec.rb +5 -7
  590. data/spec/unit/indirector/node/active_record_spec.rb +2 -3
  591. data/spec/unit/indirector/node/exec_spec.rb +3 -4
  592. data/spec/unit/indirector/node/ldap_spec.rb +3 -4
  593. data/spec/unit/indirector/node/memory_spec.rb +2 -3
  594. data/spec/unit/indirector/node/plain_spec.rb +2 -3
  595. data/spec/unit/indirector/node/rest_spec.rb +2 -3
  596. data/spec/unit/indirector/node/yaml_spec.rb +2 -3
  597. data/spec/unit/indirector/plain_spec.rb +5 -7
  598. data/spec/unit/indirector/queue_spec.rb +11 -14
  599. data/spec/unit/indirector/report/processor_spec.rb +7 -9
  600. data/spec/unit/indirector/report/rest_spec.rb +2 -3
  601. data/spec/unit/indirector/report/yaml_spec.rb +3 -4
  602. data/spec/unit/indirector/request_spec.rb +3 -25
  603. data/spec/unit/indirector/resource/ral_spec.rb +3 -4
  604. data/spec/unit/indirector/resource/rest_spec.rb +2 -3
  605. data/spec/unit/indirector/resource_type/parser_spec.rb +87 -13
  606. data/spec/unit/indirector/resource_type/rest_spec.rb +2 -3
  607. data/spec/unit/indirector/rest_spec.rb +45 -16
  608. data/spec/unit/indirector/run/local_spec.rb +2 -3
  609. data/spec/unit/indirector/run/rest_spec.rb +2 -3
  610. data/spec/unit/indirector/ssl_file_spec.rb +9 -27
  611. data/spec/unit/indirector/status/rest_spec.rb +2 -3
  612. data/spec/unit/indirector/terminus_spec.rb +180 -187
  613. data/spec/unit/indirector/yaml_spec.rb +9 -23
  614. data/spec/unit/indirector_spec.rb +61 -79
  615. data/spec/unit/interface/action_builder_spec.rb +214 -0
  616. data/spec/unit/interface/action_manager_spec.rb +282 -0
  617. data/spec/unit/interface/action_spec.rb +545 -0
  618. data/spec/unit/interface/documentation_spec.rb +34 -0
  619. data/spec/unit/interface/face_collection_spec.rb +180 -0
  620. data/spec/unit/interface/option_builder_spec.rb +77 -0
  621. data/spec/unit/interface/option_spec.rb +100 -0
  622. data/spec/unit/interface_spec.rb +228 -0
  623. data/spec/unit/module_spec.rb +34 -10
  624. data/spec/unit/network/authconfig_spec.rb +3 -4
  625. data/spec/unit/network/authstore_spec.rb +3 -4
  626. data/spec/unit/network/client_spec.rb +45 -0
  627. data/spec/unit/network/format_handler_spec.rb +2 -3
  628. data/spec/unit/network/format_spec.rb +2 -3
  629. data/spec/unit/network/formats_spec.rb +107 -3
  630. data/spec/unit/network/handler/fileserver_spec.rb +3 -4
  631. data/spec/unit/network/http/api/v1_spec.rb +61 -27
  632. data/spec/unit/network/http/compression_spec.rb +2 -3
  633. data/spec/unit/network/http/handler_spec.rb +78 -109
  634. data/spec/unit/network/http/mongrel/rest_spec.rb +3 -4
  635. data/spec/unit/network/http/mongrel_spec.rb +6 -6
  636. data/spec/unit/network/http/rack/rest_spec.rb +2 -20
  637. data/spec/unit/network/http/rack/xmlrpc_spec.rb +2 -3
  638. data/spec/unit/network/http/rack_spec.rb +2 -3
  639. data/spec/unit/network/http/webrick/rest_spec.rb +3 -4
  640. data/spec/unit/network/http/webrick_spec.rb +4 -8
  641. data/spec/unit/network/http_pool_spec.rb +82 -95
  642. data/spec/unit/network/http_spec.rb +2 -2
  643. data/spec/unit/network/rest_authconfig_spec.rb +9 -42
  644. data/spec/unit/network/rights_spec.rb +6 -7
  645. data/spec/unit/network/server_spec.rb +2 -2
  646. data/spec/unit/network/xmlrpc/client_spec.rb +172 -0
  647. data/spec/unit/node/environment_spec.rb +63 -7
  648. data/spec/unit/node/facts_spec.rb +9 -13
  649. data/spec/unit/node_spec.rb +5 -13
  650. data/spec/unit/other/selinux_spec.rb +2 -3
  651. data/spec/unit/other/transbucket_spec.rb +2 -3
  652. data/spec/unit/other/transobject_spec.rb +2 -3
  653. data/spec/unit/parameter/path_spec.rb +2 -2
  654. data/spec/unit/parameter/value_collection_spec.rb +2 -3
  655. data/spec/unit/parameter/value_spec.rb +2 -3
  656. data/spec/unit/parameter_spec.rb +2 -3
  657. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +2 -13
  658. data/spec/unit/parser/ast/astarray_spec.rb +18 -36
  659. data/spec/unit/parser/ast/asthash_spec.rb +4 -4
  660. data/spec/unit/parser/ast/boolean_operator_spec.rb +2 -3
  661. data/spec/unit/parser/ast/casestatement_spec.rb +17 -14
  662. data/spec/unit/parser/ast/collection_spec.rb +2 -3
  663. data/spec/unit/parser/ast/collexpr_spec.rb +2 -3
  664. data/spec/unit/parser/ast/comparison_operator_spec.rb +4 -5
  665. data/spec/unit/parser/ast/definition_spec.rb +21 -0
  666. data/spec/unit/parser/ast/function_spec.rb +3 -4
  667. data/spec/unit/parser/ast/hostclass_spec.rb +72 -0
  668. data/spec/unit/parser/ast/ifstatement_spec.rb +2 -3
  669. data/spec/unit/parser/ast/in_operator_spec.rb +2 -3
  670. data/spec/unit/parser/ast/leaf_spec.rb +23 -19
  671. data/spec/unit/parser/ast/match_operator_spec.rb +2 -3
  672. data/spec/unit/parser/ast/minus_spec.rb +2 -3
  673. data/spec/unit/parser/ast/node_spec.rb +30 -0
  674. data/spec/unit/parser/ast/nop_spec.rb +2 -3
  675. data/spec/unit/parser/ast/not_spec.rb +2 -3
  676. data/spec/unit/parser/ast/relationship_spec.rb +2 -3
  677. data/spec/unit/parser/ast/resource_defaults_spec.rb +2 -3
  678. data/spec/unit/parser/ast/resource_override_spec.rb +2 -3
  679. data/spec/unit/parser/ast/resource_reference_spec.rb +21 -8
  680. data/spec/unit/parser/ast/resource_spec.rb +24 -13
  681. data/spec/unit/parser/ast/selector_spec.rb +3 -4
  682. data/spec/unit/parser/ast/vardef_spec.rb +15 -9
  683. data/spec/unit/parser/ast_spec.rb +2 -3
  684. data/spec/unit/parser/collector_spec.rb +2 -3
  685. data/spec/unit/parser/compiler_spec.rb +62 -35
  686. data/spec/unit/parser/files_spec.rb +2 -3
  687. data/spec/unit/parser/functions/create_resources_spec.rb +137 -0
  688. data/spec/unit/parser/functions/defined_spec.rb +5 -3
  689. data/spec/unit/parser/functions/extlookup_spec.rb +10 -10
  690. data/spec/unit/parser/functions/fqdn_rand_spec.rb +15 -13
  691. data/spec/unit/parser/functions/generate_spec.rb +5 -3
  692. data/spec/unit/parser/functions/include_spec.rb +5 -3
  693. data/spec/unit/parser/functions/inline_template_spec.rb +6 -17
  694. data/spec/unit/parser/functions/realize_spec.rb +5 -3
  695. data/spec/unit/parser/functions/regsubst_spec.rb +5 -3
  696. data/spec/unit/parser/functions/require_spec.rb +5 -3
  697. data/spec/unit/parser/functions/shellquote_spec.rb +8 -6
  698. data/spec/unit/parser/functions/split_spec.rb +5 -3
  699. data/spec/unit/parser/functions/sprintf_spec.rb +5 -3
  700. data/spec/unit/parser/functions/tag_spec.rb +5 -3
  701. data/spec/unit/parser/functions/template_spec.rb +6 -21
  702. data/spec/unit/parser/functions/versioncmp_spec.rb +5 -3
  703. data/spec/unit/parser/functions_spec.rb +2 -3
  704. data/spec/unit/parser/lexer_spec.rb +3 -7
  705. data/spec/unit/parser/parser_spec.rb +71 -90
  706. data/spec/unit/parser/relationship_spec.rb +2 -3
  707. data/spec/unit/parser/resource_spec.rb +6 -65
  708. data/spec/unit/parser/scope_spec.rb +28 -179
  709. data/spec/unit/parser/templatewrapper_spec.rb +25 -43
  710. data/spec/unit/parser/type_loader_spec.rb +120 -78
  711. data/spec/unit/property/ensure_spec.rb +2 -3
  712. data/spec/unit/property/keyvalue_spec.rb +4 -8
  713. data/spec/unit/property/list_spec.rb +2 -3
  714. data/spec/unit/property/ordered_list_spec.rb +2 -3
  715. data/spec/unit/property_spec.rb +2 -3
  716. data/spec/unit/provider/augeas/augeas_spec.rb +80 -3
  717. data/spec/unit/provider/cisco_spec.rb +16 -0
  718. data/spec/unit/provider/confine/exists_spec.rb +2 -3
  719. data/spec/unit/provider/confine/false_spec.rb +2 -3
  720. data/spec/unit/provider/confine/feature_spec.rb +2 -3
  721. data/spec/unit/provider/confine/true_spec.rb +2 -3
  722. data/spec/unit/provider/confine/variable_spec.rb +2 -3
  723. data/spec/unit/provider/confine_collection_spec.rb +2 -3
  724. data/spec/unit/provider/confine_spec.rb +2 -3
  725. data/spec/unit/provider/confiner_spec.rb +2 -3
  726. data/spec/unit/provider/exec/posix_spec.rb +2 -2
  727. data/spec/unit/provider/exec/shell_spec.rb +2 -2
  728. data/spec/unit/provider/group/groupadd_spec.rb +2 -3
  729. data/spec/unit/provider/group/ldap_spec.rb +2 -2
  730. data/spec/unit/provider/host/parsed_spec.rb +197 -0
  731. data/spec/unit/provider/interface/cisco_spec.rb +58 -0
  732. data/spec/unit/provider/ldap_spec.rb +2 -2
  733. data/spec/unit/provider/macauthorization_spec.rb +2 -2
  734. data/spec/unit/provider/mcx/mcxcontent_spec.rb +2 -21
  735. data/spec/unit/provider/mount/parsed_spec.rb +61 -86
  736. data/spec/unit/provider/mount_spec.rb +2 -3
  737. data/spec/unit/provider/naginator_spec.rb +2 -3
  738. data/spec/unit/provider/nameservice/directoryservice_spec.rb +2 -63
  739. data/spec/unit/provider/network_device_spec.rb +153 -0
  740. data/spec/unit/provider/package/aix_spec.rb +2 -3
  741. data/spec/unit/provider/package/apt_spec.rb +2 -3
  742. data/spec/unit/provider/package/dpkg_spec.rb +2 -3
  743. data/spec/unit/provider/package/freebsd_spec.rb +2 -3
  744. data/spec/unit/provider/package/gem_spec.rb +2 -3
  745. data/spec/unit/provider/package/hpux_spec.rb +2 -3
  746. data/spec/unit/provider/package/macports_spec.rb +2 -2
  747. data/spec/unit/provider/package/nim_spec.rb +2 -3
  748. data/spec/unit/provider/package/pip_spec.rb +180 -0
  749. data/spec/unit/provider/package/pkg_spec.rb +2 -3
  750. data/spec/unit/provider/package/pkgdmg_spec.rb +49 -56
  751. data/spec/unit/provider/package/pkgutil_spec.rb +182 -0
  752. data/spec/unit/provider/package/yum_spec.rb +66 -0
  753. data/spec/unit/provider/package/zypper_spec.rb +2 -3
  754. data/spec/unit/provider/parsedfile_spec.rb +2 -3
  755. data/spec/unit/provider/selboolean_spec.rb +2 -3
  756. data/spec/unit/provider/selmodule_spec.rb +2 -2
  757. data/spec/unit/provider/service/daemontools_spec.rb +2 -2
  758. data/spec/unit/provider/service/debian_spec.rb +2 -2
  759. data/spec/unit/provider/service/freebsd_spec.rb +2 -3
  760. data/spec/unit/provider/service/init_spec.rb +3 -3
  761. data/spec/unit/provider/service/launchd_spec.rb +2 -2
  762. data/spec/unit/provider/service/redhat_spec.rb +2 -2
  763. data/spec/unit/provider/service/runit_spec.rb +2 -2
  764. data/spec/unit/provider/service/smf_spec.rb +137 -0
  765. data/spec/unit/provider/service/src_spec.rb +7 -7
  766. data/spec/unit/provider/service/upstart.rb +48 -0
  767. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +28 -47
  768. data/spec/unit/provider/sshkey/parsed_spec.rb +2 -3
  769. data/spec/unit/provider/user/hpux_spec.rb +2 -3
  770. data/spec/unit/provider/user/ldap_spec.rb +2 -2
  771. data/spec/unit/provider/user/user_role_add_spec.rb +15 -53
  772. data/spec/unit/provider/user/useradd_spec.rb +2 -3
  773. data/spec/unit/provider/vlan/cisco_spec.rb +56 -0
  774. data/spec/unit/provider/zfs/solaris_spec.rb +4 -4
  775. data/spec/unit/provider/zone/solaris_spec.rb +2 -3
  776. data/spec/unit/provider/zpool/solaris_spec.rb +33 -4
  777. data/spec/unit/provider_spec.rb +2 -3
  778. data/spec/unit/puppet/provider/README.markdown +4 -0
  779. data/spec/unit/puppet/type/README.markdown +4 -0
  780. data/spec/unit/puppet_spec.rb +2 -2
  781. data/spec/unit/rails/host_spec.rb +2 -11
  782. data/spec/unit/rails/param_value_spec.rb +2 -3
  783. data/spec/unit/rails/resource_spec.rb +2 -3
  784. data/spec/unit/rails_spec.rb +2 -3
  785. data/spec/unit/relationship_spec.rb +2 -2
  786. data/spec/unit/reports/http_spec.rb +2 -3
  787. data/spec/unit/reports/rrdgraph_spec.rb +2 -3
  788. data/spec/unit/reports/store_spec.rb +2 -17
  789. data/spec/unit/reports/tagmail_spec.rb +4 -8
  790. data/spec/unit/reports_spec.rb +2 -3
  791. data/spec/unit/resource/catalog_spec.rb +15 -74
  792. data/spec/unit/resource/status_spec.rb +3 -4
  793. data/spec/unit/resource/type_collection_helper_spec.rb +2 -3
  794. data/spec/unit/resource/type_collection_spec.rb +69 -81
  795. data/spec/unit/resource/type_spec.rb +26 -44
  796. data/spec/unit/resource_spec.rb +3 -4
  797. data/spec/unit/run_spec.rb +2 -3
  798. data/spec/unit/simple_graph_spec.rb +434 -80
  799. data/spec/unit/ssl/base_spec.rb +3 -4
  800. data/spec/unit/ssl/certificate_authority/interface_spec.rb +56 -96
  801. data/spec/unit/ssl/certificate_authority_spec.rb +71 -246
  802. data/spec/unit/ssl/certificate_factory_spec.rb +72 -93
  803. data/spec/unit/ssl/certificate_request_spec.rb +11 -76
  804. data/spec/unit/ssl/certificate_revocation_list_spec.rb +4 -5
  805. data/spec/unit/ssl/certificate_spec.rb +2 -34
  806. data/spec/unit/ssl/host_spec.rb +202 -207
  807. data/spec/unit/ssl/inventory_spec.rb +4 -5
  808. data/spec/unit/ssl/key_spec.rb +2 -3
  809. data/spec/unit/sslcertificates/ca_spec.rb +110 -0
  810. data/spec/unit/status_spec.rb +8 -5
  811. data/spec/unit/transaction/event_manager_spec.rb +2 -3
  812. data/spec/unit/transaction/event_spec.rb +7 -8
  813. data/spec/unit/transaction/report_spec.rb +25 -14
  814. data/spec/unit/transaction/resource_harness_spec.rb +2 -4
  815. data/spec/unit/transaction_spec.rb +31 -28
  816. data/spec/unit/transportable_spec.rb +0 -0
  817. data/spec/unit/type/augeas_spec.rb +3 -4
  818. data/spec/unit/type/component_spec.rb +2 -3
  819. data/spec/unit/type/computer_spec.rb +2 -3
  820. data/spec/unit/type/cron_spec.rb +12 -3
  821. data/spec/unit/type/exec_spec.rb +2 -32
  822. data/spec/unit/type/file/checksum_spec.rb +2 -3
  823. data/spec/unit/type/file/content_spec.rb +2 -3
  824. data/spec/unit/type/file/ctime.rb +2 -3
  825. data/spec/unit/type/file/ensure_spec.rb +2 -3
  826. data/spec/unit/type/file/group_spec.rb +2 -3
  827. data/spec/unit/type/file/mtime.rb +2 -3
  828. data/spec/unit/type/file/owner_spec.rb +2 -3
  829. data/spec/unit/type/file/selinux_spec.rb +2 -3
  830. data/spec/unit/type/file/source_spec.rb +9 -10
  831. data/spec/unit/type/file/type.rb +2 -3
  832. data/spec/unit/type/file_spec.rb +15 -30
  833. data/spec/unit/type/filebucket_spec.rb +2 -3
  834. data/spec/unit/type/group_spec.rb +4 -5
  835. data/spec/unit/type/host_spec.rb +129 -0
  836. data/spec/unit/type/interface_spec.rb +98 -0
  837. data/spec/unit/type/macauthorization_spec.rb +2 -3
  838. data/spec/unit/type/maillist_spec.rb +2 -3
  839. data/spec/unit/type/mcx_spec.rb +2 -23
  840. data/spec/unit/type/mount_spec.rb +41 -18
  841. data/spec/unit/type/nagios_spec.rb +2 -3
  842. data/spec/unit/type/noop_metaparam_spec.rb +2 -3
  843. data/spec/unit/type/package_spec.rb +2 -3
  844. data/spec/unit/type/resources_spec.rb +3 -4
  845. data/spec/unit/type/schedule_spec.rb +19 -12
  846. data/spec/unit/type/selboolean_spec.rb +2 -3
  847. data/spec/unit/type/selmodule_spec.rb +2 -3
  848. data/spec/unit/type/service_spec.rb +6 -3
  849. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -3
  850. data/spec/unit/type/sshkey_spec.rb +70 -0
  851. data/spec/unit/type/stage_spec.rb +2 -3
  852. data/spec/unit/type/tidy_spec.rb +4 -4
  853. data/spec/unit/type/user_spec.rb +2 -11
  854. data/spec/unit/type/vlan_spec.rb +45 -0
  855. data/spec/unit/type/whit_spec.rb +4 -5
  856. data/spec/unit/type/zfs_spec.rb +2 -3
  857. data/spec/unit/type/zone_spec.rb +22 -3
  858. data/spec/unit/type/zpool_spec.rb +2 -3
  859. data/spec/unit/type_spec.rb +2 -69
  860. data/spec/unit/util/autoload/file_cache_spec.rb +2 -3
  861. data/spec/unit/util/autoload_spec.rb +6 -7
  862. data/spec/unit/util/backups_spec.rb +2 -3
  863. data/spec/unit/util/cache_accumulator_spec.rb +2 -3
  864. data/spec/unit/util/cacher_spec.rb +3 -4
  865. data/spec/unit/util/checksums_spec.rb +2 -2
  866. data/spec/unit/util/command_line_spec.rb +11 -8
  867. data/spec/unit/util/constant_inflector_spec.rb +2 -2
  868. data/spec/unit/util/errors_spec.rb +2 -3
  869. data/spec/unit/util/execution_spec.rb +2 -3
  870. data/spec/unit/util/execution_stub_spec.rb +2 -3
  871. data/spec/unit/util/feature_spec.rb +2 -3
  872. data/spec/unit/util/file_locking_spec.rb +4 -5
  873. data/spec/unit/util/filetype_spec.rb +2 -3
  874. data/spec/unit/util/inline_docs_spec.rb +2 -3
  875. data/spec/unit/util/ldap/connection_spec.rb +2 -2
  876. data/spec/unit/util/ldap/generator_spec.rb +2 -2
  877. data/spec/unit/util/ldap/manager_spec.rb +2 -2
  878. data/spec/unit/util/loadedfile_spec.rb +2 -3
  879. data/spec/unit/util/log/destinations_spec.rb +2 -3
  880. data/spec/unit/util/log_spec.rb +6 -7
  881. data/spec/unit/util/logging_spec.rb +27 -3
  882. data/spec/unit/util/metric_spec.rb +2 -3
  883. data/spec/unit/util/monkey_patches_spec.rb +48 -10
  884. data/spec/unit/util/nagios_maker_spec.rb +2 -2
  885. data/spec/unit/util/network_device/cisco/device_spec.rb +408 -0
  886. data/spec/unit/util/network_device/cisco/facts_spec.rb +63 -0
  887. data/spec/unit/util/network_device/cisco/interface_spec.rb +89 -0
  888. data/spec/unit/util/network_device/config_spec.rb +102 -0
  889. data/spec/unit/util/network_device/ipcalc_spec.rb +63 -0
  890. data/spec/unit/util/network_device/transport/base_spec.rb +42 -0
  891. data/spec/unit/util/network_device/transport/ssh_spec.rb +219 -0
  892. data/spec/unit/util/network_device/transport/telnet_spec.rb +76 -0
  893. data/spec/unit/util/network_device_spec.rb +50 -0
  894. data/spec/unit/util/package_spec.rb +2 -3
  895. data/spec/unit/util/posix_spec.rb +2 -3
  896. data/spec/unit/util/pson_spec.rb +3 -4
  897. data/spec/unit/util/queue/stomp_spec.rb +4 -5
  898. data/spec/unit/util/queue_spec.rb +2 -3
  899. data/spec/unit/util/rdoc/parser_spec.rb +17 -12
  900. data/spec/unit/util/rdoc_spec.rb +19 -58
  901. data/spec/unit/util/reference_serializer_spec.rb +2 -3
  902. data/spec/unit/util/resource_template_spec.rb +2 -3
  903. data/spec/unit/util/run_mode_spec.rb +2 -3
  904. data/spec/unit/util/selinux_spec.rb +4 -5
  905. data/spec/unit/util/settings/file_setting_spec.rb +2 -7
  906. data/spec/unit/util/settings_spec.rb +2 -24
  907. data/spec/unit/util/storage_spec.rb +2 -3
  908. data/spec/unit/util/tagging_spec.rb +2 -2
  909. data/spec/unit/util/user_attr_spec.rb +2 -3
  910. data/spec/unit/util/warnings_spec.rb +2 -3
  911. data/spec/unit/util/zaml_spec.rb +23 -53
  912. data/spec/watchr.rb +146 -0
  913. data/tasks/rake/gem.rake +5 -4
  914. data/tasks/rake/git_workflow.rake +62 -51
  915. data/tasks/rake/manpages.rake +69 -0
  916. data/test/certmgr/certmgr.rb +308 -0
  917. data/test/certmgr/inventory.rb +69 -0
  918. data/test/certmgr/support.rb +105 -0
  919. data/test/data/providers/host/parsed/valid_hosts +19 -0
  920. data/test/language/ast.rb +1 -1
  921. data/test/language/ast/variable.rb +1 -1
  922. data/test/language/functions.rb +8 -9
  923. data/test/language/parser.rb +44 -52
  924. data/test/language/scope.rb +13 -24
  925. data/test/language/snippets.rb +11 -2
  926. data/test/language/transportable.rb +1 -1
  927. data/test/lib/puppettest.rb +2 -2
  928. data/test/lib/puppettest/exetest.rb +1 -1
  929. data/test/lib/puppettest/parsertesting.rb +5 -8
  930. data/test/lib/puppettest/servertest.rb +1 -0
  931. data/test/lib/puppettest/support/assertions.rb +6 -1
  932. data/test/lib/puppettest/support/utils.rb +0 -19
  933. data/test/network/authconfig.rb +1 -1
  934. data/test/network/authorization.rb +1 -1
  935. data/test/network/authstore.rb +1 -1
  936. data/test/network/client/ca.rb +69 -0
  937. data/test/network/client/dipper.rb +34 -0
  938. data/test/network/client_request.rb +1 -1
  939. data/test/network/handler/ca.rb +273 -0
  940. data/test/network/handler/fileserver.rb +1 -1
  941. data/test/network/handler/master.rb +13 -9
  942. data/test/network/handler/report.rb +1 -1
  943. data/test/network/handler/runner.rb +1 -1
  944. data/test/network/rights.rb +1 -1
  945. data/test/network/server/mongrel_test.rb +99 -0
  946. data/test/network/server/webrick.rb +128 -0
  947. data/test/network/xmlrpc/client.rb +45 -0
  948. data/test/network/xmlrpc/processor.rb +1 -1
  949. data/test/network/xmlrpc/server.rb +1 -1
  950. data/test/network/xmlrpc/webrick_servlet.rb +1 -1
  951. data/test/other/provider.rb +1 -1
  952. data/test/other/puppet.rb +1 -1
  953. data/test/other/relationships.rb +11 -18
  954. data/test/other/report.rb +1 -1
  955. data/test/other/transactions.rb +2 -35
  956. data/test/puppet/defaults.rb +1 -1
  957. data/test/puppet/errortest.rb +1 -1
  958. data/test/puppet/tc_suidmanager.rb +120 -0
  959. data/test/rails/rails.rb +2 -1
  960. data/test/rails/railsparameter.rb +2 -2
  961. data/test/ral/manager/attributes.rb +1 -1
  962. data/test/ral/manager/instances.rb +1 -1
  963. data/test/ral/manager/manager.rb +1 -1
  964. data/test/ral/manager/provider.rb +1 -1
  965. data/test/ral/manager/type.rb +1 -1
  966. data/test/ral/providers/cron/crontab.rb +1 -1
  967. data/test/ral/providers/group.rb +1 -1
  968. data/test/ral/providers/host/parsed.rb +1 -203
  969. data/test/ral/providers/mailalias/aliases.rb +1 -1
  970. data/test/ral/providers/nameservice.rb +1 -1
  971. data/test/ral/providers/package.rb +1 -1
  972. data/test/ral/providers/package/aptitude.rb +1 -1
  973. data/test/ral/providers/package/aptrpm.rb +1 -1
  974. data/test/ral/providers/parsedfile.rb +1 -1
  975. data/test/ral/providers/port/parsed.rb +1 -1
  976. data/test/ral/providers/provider.rb +1 -1
  977. data/test/ral/providers/service/base.rb +1 -1
  978. data/test/ral/providers/sshkey/parsed.rb +1 -1
  979. data/test/ral/providers/user.rb +1 -1
  980. data/test/ral/providers/user/useradd.rb +1 -1
  981. data/test/ral/type/cron.rb +1 -1
  982. data/test/ral/type/exec.rb +1 -42
  983. data/test/ral/type/file.rb +1 -1
  984. data/test/ral/type/file/target.rb +6 -19
  985. data/test/ral/type/fileignoresource.rb +1 -1
  986. data/test/ral/type/filesources.rb +61 -1
  987. data/test/ral/type/host.rb +1 -1
  988. data/test/ral/type/mailalias.rb +1 -1
  989. data/test/ral/type/port.rb +1 -1
  990. data/test/ral/type/resources.rb +1 -1
  991. data/test/ral/type/service.rb +1 -1
  992. data/test/ral/type/sshkey.rb +1 -1
  993. data/test/ral/type/user.rb +1 -1
  994. data/test/ral/type/yumrepo.rb +1 -1
  995. data/test/ral/type/zone.rb +1 -1
  996. data/test/test +2 -2
  997. data/test/util/classgen.rb +1 -1
  998. data/test/util/execution.rb +1 -1
  999. data/test/util/fileparsing.rb +1 -1
  1000. data/test/util/inifile.rb +1 -1
  1001. data/test/util/instance_loader.rb +1 -1
  1002. data/test/util/log.rb +1 -1
  1003. data/test/util/metrics.rb +1 -1
  1004. data/test/util/package.rb +1 -1
  1005. data/test/util/pidlock.rb +1 -1
  1006. data/test/util/settings.rb +1 -1
  1007. data/test/util/storage.rb +1 -1
  1008. data/test/util/subclass_loader.rb +1 -1
  1009. data/test/util/utiltest.rb +1 -1
  1010. metadata +312 -48
  1011. data/CHANGELOG.old +0 -1705
  1012. data/CONTRIBUTING.md +0 -299
  1013. data/COPYING +0 -340
  1014. data/README.queueing +0 -126
  1015. data/ext/upload_facts.rb +0 -120
  1016. data/ext/vim/ftplugin/puppet.vim +0 -94
  1017. data/ext/vim/indent/puppet.vim +0 -76
  1018. data/lib/puppet/indirector/errors.rb +0 -5
  1019. data/lib/puppet/indirector/facts/inventory_service.rb +0 -20
  1020. data/lib/puppet/indirector/file_bucket_file/selector.rb +0 -53
  1021. data/lib/puppet/indirector/file_content/selector.rb +0 -30
  1022. data/lib/puppet/indirector/file_metadata/selector.rb +0 -30
  1023. data/lib/puppet/indirector/resource/validator.rb +0 -8
  1024. data/lib/puppet/util/command_line/filebucket +0 -97
  1025. data/lib/puppet/util/command_line/pi +0 -48
  1026. data/lib/puppet/util/command_line/puppet +0 -73
  1027. data/lib/puppet/util/command_line/puppetca +0 -131
  1028. data/lib/puppet/util/command_line/puppetd +0 -188
  1029. data/lib/puppet/util/command_line/puppetdoc +0 -67
  1030. data/lib/puppet/util/command_line/puppetmasterd +0 -70
  1031. data/lib/puppet/util/command_line/puppetqd +0 -53
  1032. data/lib/puppet/util/command_line/puppetrun +0 -125
  1033. data/lib/puppet/util/command_line/ralsh +0 -89
  1034. data/spec/integration/file_bucket/file_spec.rb +0 -44
  1035. data/spec/integration/indirector/bucket_file/rest_spec.rb +0 -77
  1036. data/spec/integration/indirector/certificate/rest_spec.rb +0 -69
  1037. data/spec/integration/indirector/certificate_request/rest_spec.rb +0 -89
  1038. data/spec/integration/indirector/certificate_revocation_list/rest_spec.rb +0 -85
  1039. data/spec/integration/indirector/report/rest_spec.rb +0 -93
  1040. data/spec/shared_behaviours/file_serving_model.rb +0 -73
  1041. data/spec/unit/indirector/facts/inventory_service_spec.rb +0 -22
  1042. data/spec/unit/indirector/file_bucket_file/selector_spec.rb +0 -29
  1043. data/spec/unit/indirector/file_content/selector_spec.rb +0 -10
  1044. data/spec/unit/indirector/file_metadata/selector_spec.rb +0 -11
  1045. data/spec/unit/network/handler/ca_spec.rb +0 -87
  1046. data/spec/unit/network/rest_authorization_spec.rb +0 -43
  1047. data/spec/unit/provider/package/appdmg_spec.rb +0 -42
  1048. data/spec/unit/type/k5login_spec.rb +0 -115
  1049. data/spec/unit/util/suidmanager_spec.rb +0 -220
  1050. data/spec/unit/util_spec.rb +0 -104
@@ -1,6 +1,5 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.dirname(__FILE__) + '/../../spec_helper'
1
+ #!/usr/bin/env rspec
2
+ require 'spec_helper'
4
3
 
5
4
  require 'puppet/resource/type'
6
5
 
@@ -55,12 +54,24 @@ describe Puppet::Resource::Type do
55
54
  double_convert.arguments.should == {"one" => nil, "two" => "foo"}
56
55
  end
57
56
 
58
- it "should include any extra attributes" do
59
- @type.file = "/my/file"
60
- @type.line = 50
57
+ it "should not include arguments if none are present" do
58
+ @type.to_pson["arguments"].should be_nil
59
+ end
60
+
61
+ [:line, :doc, :file, :parent].each do |attr|
62
+ it "should include #{attr} when set" do
63
+ @type.send(attr.to_s + "=", "value")
64
+ double_convert.send(attr).should == "value"
65
+ end
66
+
67
+ it "should not include #{attr} when not set" do
68
+ @type.to_pson[attr.to_s].should be_nil
69
+ end
70
+ end
61
71
 
62
- double_convert.file.should == "/my/file"
63
- double_convert.line.should == 50
72
+ it "should not include docs if they are empty" do
73
+ @type.doc = ""
74
+ @type.to_pson["doc"].should be_nil
64
75
  end
65
76
  end
66
77
 
@@ -225,35 +236,6 @@ describe Puppet::Resource::Type do
225
236
  end
226
237
  end
227
238
 
228
- describe "when creating a subscope" do
229
- before do
230
- @scope = stub 'scope', :newscope => nil
231
- @resource = stub 'resource'
232
- @type = Puppet::Resource::Type.new(:hostclass, "foo")
233
- end
234
-
235
- it "should return a new scope created with the provided scope as the parent" do
236
- @scope.expects(:newscope).returns "foo"
237
- @type.subscope(@scope, @resource).should == "foo"
238
- end
239
-
240
- it "should set the source as itself" do
241
- @scope.expects(:newscope).with { |args| args[:source] == @type }
242
- @type.subscope(@scope, @resource)
243
- end
244
-
245
- it "should set the scope's namespace to its namespace" do
246
- @type.expects(:namespace).returns "yayness"
247
- @scope.expects(:newscope).with { |args| args[:namespace] == "yayness" }
248
- @type.subscope(@scope, @resource)
249
- end
250
-
251
- it "should set the scope's resource to the provided resource" do
252
- @scope.expects(:newscope).with { |args| args[:resource] == @resource }
253
- @type.subscope(@scope, @resource)
254
- end
255
- end
256
-
257
239
  describe "when setting its parameters in the scope" do
258
240
  before do
259
241
  @scope = Puppet::Parser::Scope.new(:compiler => stub("compiler", :environment => Puppet::Node::Environment.new), :source => stub("source"))
@@ -263,7 +245,7 @@ describe Puppet::Resource::Type do
263
245
 
264
246
  ['module_name', 'name', 'title'].each do |variable|
265
247
  it "should allow #{variable} to be evaluated as param default" do
266
- @type.module_name = "bar"
248
+ @type.instance_eval { @module_name = "bar" }
267
249
  var = Puppet::Parser::AST::Variable.new({'value' => variable})
268
250
  @type.set_arguments :foo => var
269
251
  @type.set_resource_parameters(@resource, @scope)
@@ -344,7 +326,7 @@ describe Puppet::Resource::Type do
344
326
  end
345
327
 
346
328
  it "should set its module name in the scope if available" do
347
- @type.module_name = "mymod"
329
+ @type.instance_eval { @module_name = "mymod" }
348
330
 
349
331
  @type.set_resource_parameters(@resource, @scope)
350
332
 
@@ -453,7 +435,7 @@ describe Puppet::Resource::Type do
453
435
 
454
436
  it "should set all of its parameters in a subscope" do
455
437
  subscope = stub 'subscope', :compiler => @compiler
456
- @type.expects(:subscope).with(@scope, @resource).returns subscope
438
+ @scope.expects(:newscope).with(:source => @type, :dynamic => true, :namespace => 'foo', :resource => @resource).returns subscope
457
439
  @type.expects(:set_resource_parameters).with(@resource, subscope)
458
440
 
459
441
  @type.evaluate_code(@resource)
@@ -481,8 +463,9 @@ describe Puppet::Resource::Type do
481
463
  it "should evaluate the AST code if any is provided" do
482
464
  code = stub 'code'
483
465
  @type.stubs(:code).returns code
484
- @type.stubs(:subscope).returns stub_everything("subscope", :compiler => @compiler)
485
- code.expects(:safeevaluate).with @type.subscope
466
+ subscope = stub_everything("subscope", :compiler => @compiler)
467
+ @scope.stubs(:newscope).returns subscope
468
+ code.expects(:safeevaluate).with subscope
486
469
 
487
470
  @type.evaluate_code(@resource)
488
471
  end
@@ -553,8 +536,7 @@ describe Puppet::Resource::Type do
553
536
  @compiler.add_resource @scope, @parent_resource
554
537
 
555
538
  @type.resource_type_collection = @scope.known_resource_types
556
- @type.resource_type_collection.stubs(:node).with("parent").returns(@parent_type)
557
- @type.resource_type_collection.stubs(:node).with("Parent").returns(@parent_type)
539
+ @type.resource_type_collection.add(@parent_type)
558
540
  end
559
541
 
560
542
  it "should evaluate the parent's resource" do
@@ -1,6 +1,5 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ #!/usr/bin/env rspec
2
+ require 'spec_helper'
4
3
  require 'puppet/resource'
5
4
 
6
5
  describe Puppet::Resource do
@@ -517,7 +516,7 @@ type: File
517
516
  )
518
517
  end
519
518
 
520
- it "should align, sort and add trailing commas to attributes with ensure first" do
519
+ it "should align, sort and add trailing commas to attributes with ensure first", :'fails_on_ruby_1.9.2' => true do
521
520
  @resource.to_manifest.should == <<-HEREDOC.gsub(/^\s{8}/, '').gsub(/\n$/, '')
522
521
  one::two { '/my/file':
523
522
  ensure => 'present',
@@ -1,6 +1,5 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.dirname(__FILE__) + '/../spec_helper'
1
+ #!/usr/bin/env rspec
2
+ require 'spec_helper'
4
3
  require 'puppet/agent'
5
4
  require 'puppet/run'
6
5
 
@@ -1,9 +1,9 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/env rspec
2
2
  #
3
3
  # Created by Luke Kanies on 2007-11-1.
4
4
  # Copyright (c) 2006. All rights reserved.
5
5
 
6
- require File.dirname(__FILE__) + '/../spec_helper'
6
+ require 'spec_helper'
7
7
  require 'puppet/simple_graph'
8
8
 
9
9
  describe Puppet::SimpleGraph do
@@ -31,12 +31,6 @@ describe Puppet::SimpleGraph do
31
31
  proc { @graph.to_dot_graph }.should_not raise_error
32
32
  end
33
33
 
34
- it "should always put its edges first when printing yaml" do
35
- @graph = Puppet::SimpleGraph.new
36
- @graph.add_edge(:one, :two)
37
- @graph.to_yaml_properties[0].should == "@edges"
38
- end
39
-
40
34
  describe "when managing vertices" do
41
35
  before do
42
36
  @graph = Puppet::SimpleGraph.new
@@ -117,16 +111,31 @@ describe Puppet::SimpleGraph do
117
111
  @graph.edge?(:one, :two).should be_true
118
112
  end
119
113
 
120
- it "should provide a method for retrieving an edge label" do
121
- edge = Puppet::Relationship.new(:one, :two, :callback => :awesome)
122
- @graph.add_edge(edge)
123
- @graph.edge_label(:one, :two).should == {:callback => :awesome}
124
- end
114
+ describe "when retrieving edges between two nodes" do
115
+ it "should handle the case of nodes not in the graph" do
116
+ @graph.edges_between(:one, :two).should == []
117
+ end
125
118
 
126
- it "should provide a method for retrieving an edge" do
127
- edge = Puppet::Relationship.new(:one, :two)
128
- @graph.add_edge(edge)
129
- @graph.edge(:one, :two).should equal(edge)
119
+ it "should handle the case of nodes with no edges between them" do
120
+ @graph.add_vertex(:one)
121
+ @graph.add_vertex(:two)
122
+ @graph.edges_between(:one, :two).should == []
123
+ end
124
+
125
+ it "should handle the case of nodes connected by a single edge" do
126
+ edge = Puppet::Relationship.new(:one, :two)
127
+ @graph.add_edge(edge)
128
+ @graph.edges_between(:one, :two).length.should == 1
129
+ @graph.edges_between(:one, :two)[0].should equal(edge)
130
+ end
131
+
132
+ it "should handle the case of nodes connected by multiple edges" do
133
+ edge1 = Puppet::Relationship.new(:one, :two, :callback => :foo)
134
+ edge2 = Puppet::Relationship.new(:one, :two, :callback => :bar)
135
+ @graph.add_edge(edge1)
136
+ @graph.add_edge(edge2)
137
+ Set.new(@graph.edges_between(:one, :two)).should == Set.new([edge1, edge2])
138
+ end
130
139
  end
131
140
 
132
141
  it "should add the edge source as a vertex if it is not already" do
@@ -253,12 +262,12 @@ describe Puppet::SimpleGraph do
253
262
 
254
263
  it "should retain labels on edges" do
255
264
  @graph.add_edge(:one, :two, :callback => :awesome)
256
- edge = @graph.reversal.edge(:two, :one)
265
+ edge = @graph.reversal.edges_between(:two, :one)[0]
257
266
  edge.label.should == {:callback => :awesome}
258
267
  end
259
268
  end
260
269
 
261
- describe "when sorting the graph" do
270
+ describe "when reporting cycles in the graph" do
262
271
  before do
263
272
  @graph = Puppet::SimpleGraph.new
264
273
  end
@@ -269,40 +278,127 @@ describe Puppet::SimpleGraph do
269
278
  end
270
279
  end
271
280
 
272
- it "should sort the graph topologically" do
273
- add_edges :a => :b, :b => :c
274
- @graph.topsort.should == [:a, :b, :c]
275
- end
276
-
277
281
  it "should fail on two-vertex loops" do
278
282
  add_edges :a => :b, :b => :a
279
- proc { @graph.topsort }.should raise_error(Puppet::Error)
283
+ proc { @graph.report_cycles_in_graph }.should raise_error(Puppet::Error)
280
284
  end
281
285
 
282
286
  it "should fail on multi-vertex loops" do
283
287
  add_edges :a => :b, :b => :c, :c => :a
284
- proc { @graph.topsort }.should raise_error(Puppet::Error)
288
+ proc { @graph.report_cycles_in_graph }.should raise_error(Puppet::Error)
285
289
  end
286
290
 
287
291
  it "should fail when a larger tree contains a small cycle" do
288
292
  add_edges :a => :b, :b => :a, :c => :a, :d => :c
289
- proc { @graph.topsort }.should raise_error(Puppet::Error)
293
+ proc { @graph.report_cycles_in_graph }.should raise_error(Puppet::Error)
290
294
  end
291
295
 
292
296
  it "should succeed on trees with no cycles" do
293
297
  add_edges :a => :b, :b => :e, :c => :a, :d => :c
294
- proc { @graph.topsort }.should_not raise_error
298
+ proc { @graph.report_cycles_in_graph }.should_not raise_error
295
299
  end
296
300
 
297
- # Our graph's add_edge method is smart enough not to add
298
- # duplicate edges, so we use the objects, which it doesn't
299
- # check.
300
- it "should be able to sort graphs with duplicate edges" do
301
- one = Puppet::Relationship.new(:a, :b)
302
- @graph.add_edge(one)
303
- two = Puppet::Relationship.new(:a, :b)
304
- @graph.add_edge(two)
305
- proc { @graph.topsort }.should_not raise_error
301
+ it "should produce the correct relationship text" do
302
+ add_edges :a => :b, :b => :a
303
+ # cycle detection starts from a or b randomly
304
+ # so we need to check for either ordering in the error message
305
+ want = %r{Found 1 dependency cycle:\n\((a => b => a|b => a => b)\)\nTry}
306
+ expect { @graph.report_cycles_in_graph }.to raise_error(Puppet::Error, want)
307
+ end
308
+
309
+ it "cycle discovery should be the minimum cycle for a simple graph" do
310
+ add_edges "a" => "b"
311
+ add_edges "b" => "a"
312
+ add_edges "b" => "c"
313
+
314
+ cycles = nil
315
+ expect { cycles = @graph.find_cycles_in_graph.sort }.should_not raise_error
316
+ cycles.should be == [["a", "b"]]
317
+ end
318
+
319
+ it "cycle discovery should handle two distinct cycles" do
320
+ add_edges "a" => "a1", "a1" => "a"
321
+ add_edges "b" => "b1", "b1" => "b"
322
+
323
+ cycles = nil
324
+ expect { cycles = @graph.find_cycles_in_graph.sort }.should_not raise_error
325
+ cycles.should be == [["a", "a1"], ["b", "b1"]]
326
+ end
327
+
328
+ it "cycle discovery should handle two cycles in a connected graph" do
329
+ add_edges "a" => "b", "b" => "c", "c" => "d"
330
+ add_edges "a" => "a1", "a1" => "a"
331
+ add_edges "c" => "c1", "c1" => "c2", "c2" => "c3", "c3" => "c"
332
+
333
+ cycles = nil
334
+ expect { cycles = @graph.find_cycles_in_graph.sort }.should_not raise_error
335
+ cycles.should be == [%w{a a1}, %w{c c1 c2 c3}]
336
+ end
337
+
338
+ it "cycle discovery should handle a complicated cycle" do
339
+ add_edges "a" => "b", "b" => "c"
340
+ add_edges "a" => "c"
341
+ add_edges "c" => "c1", "c1" => "a"
342
+ add_edges "c" => "c2", "c2" => "b"
343
+
344
+ cycles = nil
345
+ expect { cycles = @graph.find_cycles_in_graph.sort }.should_not raise_error
346
+ cycles.should be == [%w{a b c c1 c2}]
347
+ end
348
+
349
+ it "cycle discovery should not fail with large data sets" do
350
+ limit = 3000
351
+ (1..(limit - 1)).each do |n| add_edges n.to_s => (n+1).to_s end
352
+
353
+ cycles = nil
354
+ expect { cycles = @graph.find_cycles_in_graph.sort }.should_not raise_error
355
+ cycles.should be == []
356
+ end
357
+
358
+ it "path finding should work with a simple cycle" do
359
+ add_edges "a" => "b", "b" => "c", "c" => "a"
360
+
361
+ cycles = @graph.find_cycles_in_graph.sort
362
+ paths = @graph.paths_in_cycle(cycles.first, 100)
363
+ paths.should be == [%w{a b c a}]
364
+ end
365
+
366
+ it "path finding should work with two independent cycles" do
367
+ add_edges "a" => "b1"
368
+ add_edges "a" => "b2"
369
+ add_edges "b1" => "a", "b2" => "a"
370
+
371
+ cycles = @graph.find_cycles_in_graph.sort
372
+ cycles.length.should be == 1
373
+
374
+ paths = @graph.paths_in_cycle(cycles.first, 100)
375
+ paths.sort.should be == [%w{a b1 a}, %w{a b2 a}]
376
+ end
377
+
378
+ it "path finding should prefer shorter paths in cycles" do
379
+ add_edges "a" => "b", "b" => "c", "c" => "a"
380
+ add_edges "b" => "a"
381
+
382
+ cycles = @graph.find_cycles_in_graph.sort
383
+ cycles.length.should be == 1
384
+
385
+ paths = @graph.paths_in_cycle(cycles.first, 100)
386
+ paths.should be == [%w{a b a}, %w{a b c a}]
387
+ end
388
+
389
+ it "path finding should respect the max_path value" do
390
+ (1..20).each do |n| add_edges "a" => "b#{n}", "b#{n}" => "a" end
391
+
392
+ cycles = @graph.find_cycles_in_graph.sort
393
+ cycles.length.should be == 1
394
+
395
+ (1..20).each do |n|
396
+ paths = @graph.paths_in_cycle(cycles.first, n)
397
+ paths.length.should be == n
398
+ end
399
+
400
+ paths = @graph.paths_in_cycle(cycles.first, 21)
401
+ paths.length.should be == 20
306
402
  end
307
403
  end
308
404
 
@@ -345,7 +441,7 @@ describe Puppet::SimpleGraph do
345
441
  end
346
442
  end
347
443
 
348
- describe "when matching edges" do
444
+ describe "when matching edges", :'fails_on_ruby_1.9.2' => true do
349
445
  before do
350
446
  @graph = Puppet::SimpleGraph.new
351
447
  @event = Puppet::Transaction::Event.new(:name => :yay, :resource => "a")
@@ -409,7 +505,7 @@ describe Puppet::SimpleGraph do
409
505
 
410
506
  require 'puppet/util/graph'
411
507
 
412
- class Container
508
+ class Container < Puppet::Type::Component
413
509
  include Puppet::Util::Graph
414
510
  include Enumerable
415
511
  attr_accessor :name
@@ -429,8 +525,13 @@ describe Puppet::SimpleGraph do
429
525
  def to_s
430
526
  @name
431
527
  end
528
+
529
+ def ref
530
+ "Container[#{self}]"
531
+ end
432
532
  end
433
533
 
534
+ require "puppet/resource/catalog"
434
535
  describe "when splicing the graph" do
435
536
  def container_graph
436
537
  @one = Container.new("one", %w{a b})
@@ -439,17 +540,25 @@ describe Puppet::SimpleGraph do
439
540
  @middle = Container.new("middle", ["e", "f", @two])
440
541
  @top = Container.new("top", ["g", "h", @middle, @one, @three])
441
542
  @empty = Container.new("empty", [])
442
-
543
+
443
544
  @whit = Puppet::Type.type(:whit)
444
545
  @stage = Puppet::Type.type(:stage).new(:name => "foo")
445
546
 
446
- @contgraph = @top.to_graph
547
+ @contgraph = @top.to_graph(Puppet::Resource::Catalog.new)
447
548
 
448
549
  # We have to add the container to the main graph, else it won't
449
550
  # be spliced in the dependency graph.
450
551
  @contgraph.add_vertex(@empty)
451
552
  end
452
553
 
554
+ def containers
555
+ @contgraph.vertices.select { |x| !x.is_a? String }
556
+ end
557
+
558
+ def contents_of(x)
559
+ @contgraph.direct_dependents_of(x)
560
+ end
561
+
453
562
  def dependency_graph
454
563
  @depgraph = Puppet::SimpleGraph.new
455
564
  @contgraph.vertices.each do |v|
@@ -458,13 +567,34 @@ describe Puppet::SimpleGraph do
458
567
 
459
568
  # We have to specify a relationship to our empty container, else it
460
569
  # never makes it into the dep graph in the first place.
461
- {@one => @two, "f" => "c", "h" => @middle, "c" => @empty}.each do |source, target|
570
+ @explicit_dependencies = {@one => @two, "f" => "c", "h" => @middle, "c" => @empty}
571
+ @explicit_dependencies.each do |source, target|
462
572
  @depgraph.add_edge(source, target, :callback => :refresh)
463
573
  end
464
574
  end
465
575
 
466
576
  def splice
467
- @depgraph.splice!(@contgraph, Container)
577
+ @contgraph.splice!(@depgraph)
578
+ end
579
+
580
+ def whit_called(name)
581
+ x = @depgraph.vertices.find { |v| v.is_a?(@whit) && v.name =~ /#{Regexp.escape(name)}/ }
582
+ x.should_not be_nil
583
+ def x.to_s
584
+ "Whit[#{name}]"
585
+ end
586
+ def x.inspect
587
+ to_s
588
+ end
589
+ x
590
+ end
591
+
592
+ def admissible_sentinal_of(x)
593
+ @depgraph.vertex?(x) ? x : whit_called("admissible_#{x.ref}")
594
+ end
595
+
596
+ def completed_sentinal_of(x)
597
+ @depgraph.vertex?(x) ? x : whit_called("completed_#{x.ref}")
468
598
  end
469
599
 
470
600
  before do
@@ -473,63 +603,87 @@ describe Puppet::SimpleGraph do
473
603
  splice
474
604
  end
475
605
 
476
- # This is the real heart of splicing -- replacing all containers in
477
- # our relationship and exploding their relationships so that each
478
- # relationship to a container gets copied to all of its children.
606
+ # This is the real heart of splicing -- replacing all containers X in our
607
+ # relationship graph with a pair of whits { admissible_X and completed_X }
608
+ # such that that
609
+ #
610
+ # 0) completed_X depends on admissible_X
611
+ # 1) contents of X each depend on admissible_X
612
+ # 2) completed_X depends on each on the contents of X
613
+ # 3) everything which depended on X depends on completed_X
614
+ # 4) admissible_X depends on everything X depended on
615
+ # 5) the containers and their edges must be removed
616
+ #
617
+ # Note that this requires attention to the possible case of containers
618
+ # which contain or depend on other containers.
619
+ #
620
+ # Point by point:
621
+
622
+ # 0) completed_X depends on admissible_X
623
+ #
624
+ it "every container's completed sentinal should depend on its admissible sentinal" do
625
+ containers.each { |container|
626
+ @depgraph.path_between(admissible_sentinal_of(container),completed_sentinal_of(container)).should be
627
+ }
628
+ end
629
+
630
+ # 1) contents of X each depend on admissible_X
631
+ #
632
+ it "all contained objects should depend on their container's admissible sentinal" do
633
+ containers.each { |container|
634
+ contents_of(container).each { |leaf|
635
+ @depgraph.should be_edge(admissible_sentinal_of(container),admissible_sentinal_of(leaf))
636
+ }
637
+ }
638
+ end
639
+
640
+ # 2) completed_X depends on each on the contents of X
641
+ #
642
+ it "completed sentinals should depend on their container's contents" do
643
+ containers.each { |container|
644
+ contents_of(container).each { |leaf|
645
+ @depgraph.should be_edge(completed_sentinal_of(leaf),completed_sentinal_of(container))
646
+ }
647
+ }
648
+ end
649
+
650
+ #
651
+ # 3) everything which depended on X depends on completed_X
652
+
653
+ #
654
+ # 4) admissible_X depends on everything X depended on
655
+
656
+ # 5) the containers and their edges must be removed
657
+ #
479
658
  it "should remove all Container objects from the dependency graph" do
480
659
  @depgraph.vertices.find_all { |v| v.is_a?(Container) }.should be_empty
481
660
  end
482
661
 
483
- # This is a bit hideous, but required to make stages work with relationships - they're
484
- # the top of the graph.
485
662
  it "should remove all Stage resources from the dependency graph" do
486
663
  @depgraph.vertices.find_all { |v| v.is_a?(Puppet::Type.type(:stage)) }.should be_empty
487
664
  end
488
665
 
489
- it "should add container relationships to contained objects" do
490
- @contgraph.leaves(@middle).each do |leaf|
491
- @depgraph.should be_edge("h", leaf)
492
- end
493
- end
494
-
495
- it "should explode container-to-container relationships, making edges between all respective contained objects" do
496
- @one.each do |oobj|
497
- @two.each do |tobj|
498
- @depgraph.should be_edge(oobj, tobj)
499
- end
500
- end
501
- end
502
-
503
- it "should contain a whit-resource to mark the place held by the empty container" do
504
- @depgraph.vertices.find_all { |v| v.is_a?(@whit) }.length.should == 1
505
- end
506
-
507
- it "should replace edges to empty containers with edges to their residual whit" do
508
- emptys_whit = @depgraph.vertices.find_all { |v| v.is_a?(@whit) }.first
509
- @depgraph.should be_edge("c", emptys_whit)
510
- end
511
-
512
666
  it "should no longer contain anything but the non-container objects" do
513
667
  @depgraph.vertices.find_all { |v| ! v.is_a?(String) and ! v.is_a?(@whit)}.should be_empty
514
668
  end
515
669
 
516
- it "should copy labels" do
517
- @depgraph.edges.each do |edge|
518
- edge.label.should == {:callback => :refresh}
519
- end
670
+ it "should retain labels on non-containment edges" do
671
+ @explicit_dependencies.each { |f,t|
672
+ @depgraph.edges_between(completed_sentinal_of(f),admissible_sentinal_of(t))[0].label.should == {:callback => :refresh}
673
+ }
520
674
  end
521
675
 
522
676
  it "should not add labels to edges that have none" do
523
677
  @depgraph.add_edge(@two, @three)
524
678
  splice
525
- @depgraph.edge_label("c", "i").should == {}
679
+ @depgraph.path_between("c", "i").any? {|segment| segment.all? {|e| e.label == {} }}.should be
526
680
  end
527
681
 
528
682
  it "should copy labels over edges that have none" do
529
683
  @depgraph.add_edge("c", @three, {:callback => :refresh})
530
684
  splice
531
685
  # And make sure the label got copied.
532
- @depgraph.edge_label("c", "i").should == {:callback => :refresh}
686
+ @depgraph.path_between("c", "i").flatten.select {|e| e.label == {:callback => :refresh} }.should_not be_empty
533
687
  end
534
688
 
535
689
  it "should not replace a label with a nil label" do
@@ -537,7 +691,7 @@ describe Puppet::SimpleGraph do
537
691
  @depgraph.add_edge(@middle, @three)
538
692
  @depgraph.add_edge("c", @three, {:callback => :refresh})
539
693
  splice
540
- @depgraph.edge_label("c", "i").should == {:callback => :refresh}
694
+ @depgraph.path_between("c","i").flatten.select {|e| e.label == {:callback => :refresh} }.should_not be_empty
541
695
  end
542
696
 
543
697
  it "should copy labels to all created edges" do
@@ -546,9 +700,209 @@ describe Puppet::SimpleGraph do
546
700
  splice
547
701
  @three.each do |child|
548
702
  edge = Puppet::Relationship.new("c", child)
549
- @depgraph.should be_edge(edge.source, edge.target)
550
- @depgraph.edge_label(edge.source, edge.target).should == {:callback => :refresh}
703
+ (path = @depgraph.path_between(edge.source, edge.target)).should be
704
+ path.should_not be_empty
705
+ path.flatten.select {|e| e.label == {:callback => :refresh} }.should_not be_empty
706
+ end
707
+ end
708
+ end
709
+
710
+ it "should serialize to YAML using the old format by default" do
711
+ Puppet::SimpleGraph.use_new_yaml_format.should == false
712
+ end
713
+
714
+ describe "(yaml tests)" do
715
+ def empty_graph(graph)
716
+ end
717
+
718
+ def one_vertex_graph(graph)
719
+ graph.add_vertex(:a)
720
+ end
721
+
722
+ def graph_without_edges(graph)
723
+ [:a, :b, :c].each { |x| graph.add_vertex(x) }
724
+ end
725
+
726
+ def one_edge_graph(graph)
727
+ graph.add_edge(:a, :b)
728
+ end
729
+
730
+ def many_edge_graph(graph)
731
+ graph.add_edge(:a, :b)
732
+ graph.add_edge(:a, :c)
733
+ graph.add_edge(:b, :d)
734
+ graph.add_edge(:c, :d)
735
+ end
736
+
737
+ def labeled_edge_graph(graph)
738
+ graph.add_edge(:a, :b, :callback => :foo, :event => :bar)
739
+ end
740
+
741
+ def overlapping_edge_graph(graph)
742
+ graph.add_edge(:a, :b, :callback => :foo, :event => :bar)
743
+ graph.add_edge(:a, :b, :callback => :biz, :event => :baz)
744
+ end
745
+
746
+ def self.all_test_graphs
747
+ [:empty_graph, :one_vertex_graph, :graph_without_edges, :one_edge_graph, :many_edge_graph, :labeled_edge_graph,
748
+ :overlapping_edge_graph]
749
+ end
750
+
751
+ def object_ids(enumerable)
752
+ # Return a sorted list of the object id's of the elements of an
753
+ # enumerable.
754
+ enumerable.collect { |x| x.object_id }.sort
755
+ end
756
+
757
+ def graph_to_yaml(graph, which_format)
758
+ previous_use_new_yaml_format = Puppet::SimpleGraph.use_new_yaml_format
759
+ Puppet::SimpleGraph.use_new_yaml_format = (which_format == :new)
760
+ ZAML.dump(graph)
761
+ ensure
762
+ Puppet::SimpleGraph.use_new_yaml_format = previous_use_new_yaml_format
763
+ end
764
+
765
+ # Test serialization of graph to YAML.
766
+ [:old, :new].each do |which_format|
767
+ all_test_graphs.each do |graph_to_test|
768
+ it "should be able to serialize #{graph_to_test} to YAML (#{which_format} format)" do
769
+ graph = Puppet::SimpleGraph.new
770
+ send(graph_to_test, graph)
771
+ yaml_form = graph_to_yaml(graph, which_format)
772
+
773
+ # Hack the YAML so that objects in the Puppet namespace get
774
+ # changed to YAML::DomainType objects. This lets us inspect
775
+ # the serialized objects easily without invoking any
776
+ # yaml_initialize hooks.
777
+ yaml_form.gsub!('!ruby/object:Puppet::', '!hack/object:Puppet::')
778
+ serialized_object = YAML.load(yaml_form)
779
+
780
+ # Check that the object contains instance variables @edges and
781
+ # @vertices only. @reversal is also permitted, but we don't
782
+ # check it, because it is going to be phased out.
783
+ serialized_object.type_id.should == 'object:Puppet::SimpleGraph'
784
+ serialized_object.value.keys.reject { |x| x == 'reversal' }.sort.should == ['edges', 'vertices']
785
+
786
+ # Check edges by forming a set of tuples (source, target,
787
+ # callback, event) based on the graph and the YAML and make sure
788
+ # they match.
789
+ edges = serialized_object.value['edges']
790
+ edges.should be_a(Array)
791
+ expected_edge_tuples = graph.edges.collect { |edge| [edge.source, edge.target, edge.callback, edge.event] }
792
+ actual_edge_tuples = edges.collect do |edge|
793
+ edge.type_id.should == 'object:Puppet::Relationship'
794
+ %w{source target}.each { |x| edge.value.keys.should include(x) }
795
+ edge.value.keys.each { |x| ['source', 'target', 'callback', 'event'].should include(x) }
796
+ %w{source target callback event}.collect { |x| edge.value[x] }
797
+ end
798
+ Set.new(actual_edge_tuples).should == Set.new(expected_edge_tuples)
799
+ actual_edge_tuples.length.should == expected_edge_tuples.length
800
+
801
+ # Check vertices one by one.
802
+ vertices = serialized_object.value['vertices']
803
+ if which_format == :old
804
+ vertices.should be_a(Hash)
805
+ Set.new(vertices.keys).should == Set.new(graph.vertices)
806
+ vertices.each do |key, value|
807
+ value.type_id.should == 'object:Puppet::SimpleGraph::VertexWrapper'
808
+ value.value.keys.sort.should == %w{adjacencies vertex}
809
+ value.value['vertex'].should equal(key)
810
+ adjacencies = value.value['adjacencies']
811
+ adjacencies.should be_a(Hash)
812
+ Set.new(adjacencies.keys).should == Set.new([:in, :out])
813
+ [:in, :out].each do |direction|
814
+ adjacencies[direction].should be_a(Hash)
815
+ expected_adjacent_vertices = Set.new(graph.adjacent(key, :direction => direction, :type => :vertices))
816
+ Set.new(adjacencies[direction].keys).should == expected_adjacent_vertices
817
+ adjacencies[direction].each do |adj_key, adj_value|
818
+ # Since we already checked edges, just check consistency
819
+ # with edges.
820
+ desired_source = direction == :in ? adj_key : key
821
+ desired_target = direction == :in ? key : adj_key
822
+ expected_edges = edges.select do |edge|
823
+ edge.value['source'] == desired_source && edge.value['target'] == desired_target
824
+ end
825
+ adj_value.should be_a(Set)
826
+ if object_ids(adj_value) != object_ids(expected_edges)
827
+ raise "For vertex #{key.inspect}, direction #{direction.inspect}: expected adjacencies #{expected_edges.inspect} but got #{adj_value.inspect}"
828
+ end
829
+ end
830
+ end
831
+ end
832
+ else
833
+ vertices.should be_a(Array)
834
+ Set.new(vertices).should == Set.new(graph.vertices)
835
+ vertices.length.should == graph.vertices.length
836
+ end
837
+ end
838
+ end
839
+
840
+ # Test deserialization of graph from YAML. This presumes the
841
+ # correctness of serialization to YAML, which has already been
842
+ # tested.
843
+ all_test_graphs.each do |graph_to_test|
844
+ it "should be able to deserialize #{graph_to_test} from YAML (#{which_format} format)" do
845
+ reference_graph = Puppet::SimpleGraph.new
846
+ send(graph_to_test, reference_graph)
847
+ yaml_form = graph_to_yaml(reference_graph, which_format)
848
+ recovered_graph = YAML.load(yaml_form)
849
+
850
+ # Test that the recovered vertices match the vertices in the
851
+ # reference graph.
852
+ expected_vertices = reference_graph.vertices.to_a
853
+ recovered_vertices = recovered_graph.vertices.to_a
854
+ Set.new(recovered_vertices).should == Set.new(expected_vertices)
855
+ recovered_vertices.length.should == expected_vertices.length
856
+
857
+ # Test that the recovered edges match the edges in the
858
+ # reference graph.
859
+ expected_edge_tuples = reference_graph.edges.collect do |edge|
860
+ [edge.source, edge.target, edge.callback, edge.event]
861
+ end
862
+ recovered_edge_tuples = recovered_graph.edges.collect do |edge|
863
+ [edge.source, edge.target, edge.callback, edge.event]
864
+ end
865
+ Set.new(recovered_edge_tuples).should == Set.new(expected_edge_tuples)
866
+ recovered_edge_tuples.length.should == expected_edge_tuples.length
867
+
868
+ # We ought to test that the recovered graph is self-consistent
869
+ # too. But we're not going to bother with that yet because
870
+ # the internal representation of the graph is about to change.
871
+ end
872
+ end
873
+
874
+ it "should be able to serialize a graph where the vertices contain backreferences to the graph (#{which_format} format)" do
875
+ reference_graph = Puppet::SimpleGraph.new
876
+ vertex = Object.new
877
+ vertex.instance_eval { @graph = reference_graph }
878
+ reference_graph.add_edge(vertex, :other_vertex)
879
+ yaml_form = graph_to_yaml(reference_graph, which_format)
880
+ recovered_graph = YAML.load(yaml_form)
881
+
882
+ recovered_graph.vertices.length.should == 2
883
+ recovered_vertex = recovered_graph.vertices.reject { |x| x.is_a?(Symbol) }[0]
884
+ recovered_vertex.instance_eval { @graph }.should equal(recovered_graph)
885
+ recovered_graph.edges.length.should == 1
886
+ recovered_edge = recovered_graph.edges[0]
887
+ recovered_edge.source.should equal(recovered_vertex)
888
+ recovered_edge.target.should == :other_vertex
889
+ end
890
+ end
891
+
892
+ it "should serialize properly when used as a base class" do
893
+ class Puppet::TestDerivedClass < Puppet::SimpleGraph
894
+ attr_accessor :foo
551
895
  end
896
+ derived = Puppet::TestDerivedClass.new
897
+ derived.add_edge(:a, :b)
898
+ derived.foo = 1234
899
+ recovered_derived = YAML.load(YAML.dump(derived))
900
+ recovered_derived.class.should equal(Puppet::TestDerivedClass)
901
+ recovered_derived.edges.length.should == 1
902
+ recovered_derived.edges[0].source.should == :a
903
+ recovered_derived.edges[0].target.should == :b
904
+ recovered_derived.vertices.length.should == 2
905
+ recovered_derived.foo.should == 1234
552
906
  end
553
907
  end
554
908
  end