puppet 3.2.4 → 3.3.0.rc2

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 (562) hide show
  1. data/COMMITTERS.md +101 -42
  2. data/Gemfile +15 -4
  3. data/README.md +5 -1
  4. data/README_DEVELOPER.md +117 -54
  5. data/Rakefile +4 -0
  6. data/ext/build_defaults.yaml +3 -2
  7. data/ext/debian/puppet-common.manpages +33 -1
  8. data/ext/gentoo/init.d/puppet +1 -1
  9. data/ext/gentoo/init.d/puppetmaster +1 -1
  10. data/ext/redhat/puppet.spec.erb +0 -1
  11. data/install.rb +2 -1
  12. data/lib/hiera/backend/puppet_backend.rb +1 -1
  13. data/lib/puppet/application.rb +10 -9
  14. data/lib/puppet/application/agent.rb +87 -93
  15. data/lib/puppet/application/apply.rb +0 -2
  16. data/lib/puppet/application/device.rb +3 -3
  17. data/lib/puppet/application/kick.rb +2 -2
  18. data/lib/puppet/application/master.rb +41 -19
  19. data/lib/puppet/application/queue.rb +5 -3
  20. data/lib/puppet/bindings.rb +147 -0
  21. data/lib/puppet/configurer.rb +25 -15
  22. data/lib/puppet/configurer/fact_handler.rb +2 -9
  23. data/lib/puppet/daemon.rb +44 -33
  24. data/lib/puppet/defaults.rb +57 -26
  25. data/lib/puppet/error.rb +1 -1
  26. data/lib/puppet/external/dot.rb +2 -2
  27. data/lib/puppet/external/nagios/base.rb +1 -6
  28. data/lib/puppet/external/pson/common.rb +2 -2
  29. data/lib/puppet/external/pson/pure/generator.rb +2 -2
  30. data/lib/puppet/external/pson/pure/parser.rb +1 -1
  31. data/lib/puppet/face/ca.rb +1 -1
  32. data/lib/puppet/face/config.rb +1 -1
  33. data/lib/puppet/face/help.rb +2 -2
  34. data/lib/puppet/face/module/list.rb +2 -2
  35. data/lib/puppet/feature/rails.rb +1 -1
  36. data/lib/puppet/file_bucket/dipper.rb +0 -1
  37. data/lib/puppet/file_serving/base.rb +1 -1
  38. data/lib/puppet/file_serving/configuration/parser.rb +20 -14
  39. data/lib/puppet/forge.rb +0 -32
  40. data/lib/puppet/forge/cache.rb +1 -1
  41. data/lib/puppet/forge/errors.rb +3 -3
  42. data/lib/puppet/forge/repository.rb +7 -42
  43. data/lib/puppet/graph.rb +11 -0
  44. data/lib/puppet/graph/key.rb +26 -0
  45. data/lib/puppet/graph/prioritizer.rb +29 -0
  46. data/lib/puppet/graph/random_prioritizer.rb +16 -0
  47. data/lib/puppet/{rb_tree_map.rb → graph/rb_tree_map.rb} +3 -3
  48. data/lib/puppet/graph/relationship_graph.rb +246 -0
  49. data/lib/puppet/graph/sequential_prioritizer.rb +31 -0
  50. data/lib/puppet/{simple_graph.rb → graph/simple_graph.rb} +22 -3
  51. data/lib/puppet/graph/title_hash_prioritizer.rb +16 -0
  52. data/lib/puppet/indirector.rb +2 -2
  53. data/lib/puppet/indirector/catalog/compiler.rb +10 -7
  54. data/lib/puppet/indirector/catalog/static_compiler.rb +50 -0
  55. data/lib/puppet/indirector/certificate/rest.rb +1 -1
  56. data/lib/puppet/indirector/exec.rb +1 -1
  57. data/lib/puppet/indirector/facts/facter.rb +2 -2
  58. data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -1
  59. data/lib/puppet/indirector/facts/network_device.rb +1 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +0 -1
  61. data/lib/puppet/indirector/indirection.rb +2 -2
  62. data/lib/puppet/indirector/memory.rb +9 -0
  63. data/lib/puppet/indirector/node/ldap.rb +2 -4
  64. data/lib/puppet/indirector/report/processor.rb +1 -2
  65. data/lib/puppet/indirector/report/rest.rb +1 -1
  66. data/lib/puppet/indirector/request.rb +32 -10
  67. data/lib/puppet/indirector/resource/rest.rb +1 -1
  68. data/lib/puppet/indirector/resource_type/parser.rb +31 -12
  69. data/lib/puppet/interface.rb +1 -1
  70. data/lib/puppet/interface/documentation.rb +7 -11
  71. data/lib/puppet/interface/option.rb +1 -1
  72. data/lib/puppet/interface/option_builder.rb +1 -1
  73. data/lib/puppet/metatype/manager.rb +2 -2
  74. data/lib/puppet/module.rb +7 -1
  75. data/lib/puppet/module_tool.rb +1 -1
  76. data/lib/puppet/module_tool/applications/application.rb +10 -0
  77. data/lib/puppet/module_tool/applications/installer.rb +6 -3
  78. data/lib/puppet/module_tool/dependency.rb +2 -0
  79. data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
  80. data/lib/puppet/module_tool/metadata.rb +25 -13
  81. data/lib/puppet/module_tool/modulefile.rb +7 -7
  82. data/lib/puppet/module_tool/shared_behaviors.rb +4 -2
  83. data/lib/puppet/module_tool/skeleton.rb +1 -1
  84. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +5 -5
  85. data/lib/puppet/module_tool/skeleton/templates/generator/tests/init.pp.erb +5 -4
  86. data/lib/puppet/network/auth_config_parser.rb +3 -0
  87. data/lib/puppet/network/authconfig.rb +0 -1
  88. data/lib/puppet/network/authorization.rb +1 -1
  89. data/lib/puppet/network/authstore.rb +2 -2
  90. data/lib/puppet/network/format_handler.rb +25 -114
  91. data/lib/puppet/network/format_support.rb +106 -0
  92. data/lib/puppet/network/formats.rb +10 -4
  93. data/lib/puppet/network/http/compression.rb +1 -1
  94. data/lib/puppet/network/http/connection.rb +76 -32
  95. data/lib/puppet/network/http/handler.rb +122 -61
  96. data/lib/puppet/network/http/rack/rest.rb +1 -1
  97. data/lib/puppet/network/http/webrick/rest.rb +9 -3
  98. data/lib/puppet/network/http_pool.rb +2 -2
  99. data/lib/puppet/network/resolver.rb +1 -0
  100. data/lib/puppet/network/server.rb +5 -81
  101. data/lib/puppet/node/environment.rb +256 -13
  102. data/lib/puppet/node/facts.rb +28 -2
  103. data/lib/puppet/parameter.rb +27 -18
  104. data/lib/puppet/parameter/boolean.rb +20 -0
  105. data/lib/puppet/parameter/path.rb +1 -1
  106. data/lib/puppet/parameter/value.rb +1 -1
  107. data/lib/puppet/parameter/value_collection.rb +1 -1
  108. data/lib/puppet/parser/ast/arithmetic_operator.rb +8 -0
  109. data/lib/puppet/parser/ast/casestatement.rb +0 -3
  110. data/lib/puppet/parser/ast/lambda.rb +25 -6
  111. data/lib/puppet/parser/ast/leaf.rb +10 -3
  112. data/lib/puppet/parser/ast/nop.rb +1 -1
  113. data/lib/puppet/parser/ast/resource_override.rb +0 -2
  114. data/lib/puppet/parser/compiler.rb +92 -34
  115. data/lib/puppet/parser/files.rb +0 -5
  116. data/lib/puppet/parser/functions/create_resources.rb +23 -46
  117. data/lib/puppet/parser/functions/each.rb +0 -2
  118. data/lib/puppet/parser/functions/extlookup.rb +2 -2
  119. data/lib/puppet/parser/functions/foreach.rb +0 -2
  120. data/lib/puppet/parser/functions/hiera_include.rb +1 -1
  121. data/lib/puppet/parser/functions/lookup.rb +44 -0
  122. data/lib/puppet/parser/functions/slice.rb +1 -1
  123. data/lib/puppet/parser/grammar.ra +0 -1
  124. data/lib/puppet/parser/lexer.rb +0 -1
  125. data/lib/puppet/parser/parser.rb +0 -1
  126. data/lib/puppet/parser/parser_factory.rb +3 -2
  127. data/lib/puppet/parser/parser_support.rb +1 -1
  128. data/lib/puppet/parser/relationship.rb +1 -1
  129. data/lib/puppet/parser/scope.rb +49 -24
  130. data/lib/puppet/parser/type_loader.rb +13 -18
  131. data/lib/puppet/pops.rb +45 -0
  132. data/lib/puppet/pops/adaptable.rb +2 -2
  133. data/lib/puppet/pops/adapters.rb +4 -0
  134. data/lib/puppet/pops/binder/binder.rb +421 -0
  135. data/lib/puppet/pops/binder/binder_issues.rb +142 -0
  136. data/lib/puppet/pops/binder/bindings_checker.rb +217 -0
  137. data/lib/puppet/pops/binder/bindings_composer.rb +241 -0
  138. data/lib/puppet/pops/binder/bindings_factory.rb +847 -0
  139. data/lib/puppet/pops/binder/bindings_label_provider.rb +46 -0
  140. data/lib/puppet/pops/binder/bindings_loader.rb +79 -0
  141. data/lib/puppet/pops/binder/bindings_model.rb +215 -0
  142. data/lib/puppet/pops/binder/bindings_model_dumper.rb +205 -0
  143. data/lib/puppet/pops/binder/bindings_validator_factory.rb +28 -0
  144. data/lib/puppet/pops/binder/config/binder_config.rb +139 -0
  145. data/lib/puppet/pops/binder/config/binder_config_checker.rb +183 -0
  146. data/lib/puppet/pops/binder/config/diagnostic_producer.rb +32 -0
  147. data/lib/puppet/pops/binder/config/issues.rb +106 -0
  148. data/lib/puppet/pops/binder/hiera2.rb +10 -0
  149. data/lib/puppet/pops/binder/hiera2/bindings_provider.rb +148 -0
  150. data/lib/puppet/pops/binder/hiera2/config.rb +69 -0
  151. data/lib/puppet/pops/binder/hiera2/config_checker.rb +68 -0
  152. data/lib/puppet/pops/binder/hiera2/diagnostic_producer.rb +36 -0
  153. data/lib/puppet/pops/binder/hiera2/issues.rb +67 -0
  154. data/lib/puppet/pops/binder/hiera2/json_backend.rb +18 -0
  155. data/lib/puppet/pops/binder/hiera2/yaml_backend.rb +21 -0
  156. data/lib/puppet/pops/binder/injector.rb +688 -0
  157. data/lib/puppet/pops/binder/injector_entry.rb +53 -0
  158. data/lib/puppet/pops/binder/key_factory.rb +61 -0
  159. data/lib/puppet/pops/binder/producers.rb +829 -0
  160. data/lib/puppet/pops/binder/scheme_handler/confdir_hiera_scheme.rb +67 -0
  161. data/lib/puppet/pops/binder/scheme_handler/confdir_scheme.rb +34 -0
  162. data/lib/puppet/pops/binder/scheme_handler/module_hiera_scheme.rb +92 -0
  163. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +84 -0
  164. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +54 -0
  165. data/lib/puppet/pops/binder/system_bindings.rb +72 -0
  166. data/lib/puppet/pops/issue_reporter.rb +75 -0
  167. data/lib/puppet/pops/issues.rb +9 -5
  168. data/lib/puppet/pops/model/ast_transformer.rb +4 -4
  169. data/lib/puppet/pops/model/ast_tree_dumper.rb +1 -1
  170. data/lib/puppet/pops/model/factory.rb +25 -13
  171. data/lib/puppet/pops/model/model.rb +1 -1
  172. data/lib/puppet/pops/model/tree_dumper.rb +2 -2
  173. data/lib/puppet/pops/parser/egrammar.ra +0 -1
  174. data/lib/puppet/pops/parser/eparser.rb +1 -2
  175. data/lib/puppet/pops/parser/evaluating_parser.rb +162 -0
  176. data/lib/puppet/pops/parser/lexer.rb +8 -6
  177. data/lib/puppet/pops/types/class_loader.rb +118 -0
  178. data/lib/puppet/pops/types/type_calculator.rb +557 -0
  179. data/lib/puppet/pops/types/type_factory.rb +147 -0
  180. data/lib/puppet/pops/types/type_parser.rb +117 -0
  181. data/lib/puppet/pops/types/types.rb +132 -0
  182. data/lib/puppet/pops/validation.rb +146 -17
  183. data/lib/puppet/pops/validation/checker3_1.rb +1 -1
  184. data/lib/puppet/pops/validation/validator_factory_3_1.rb +6 -16
  185. data/lib/puppet/property.rb +3 -3
  186. data/lib/puppet/property/keyvalue.rb +1 -1
  187. data/lib/puppet/provider.rb +2 -2
  188. data/lib/puppet/provider/aixobject.rb +19 -21
  189. data/lib/puppet/provider/augeas/augeas.rb +3 -1
  190. data/lib/puppet/provider/command.rb +2 -2
  191. data/lib/puppet/provider/group/aix.rb +1 -1
  192. data/lib/puppet/provider/group/ldap.rb +1 -1
  193. data/lib/puppet/provider/macauthorization/macauthorization.rb +1 -1
  194. data/lib/puppet/provider/mailalias/aliases.rb +3 -8
  195. data/lib/puppet/provider/mcx/mcxcontent.rb +7 -1
  196. data/lib/puppet/provider/mount.rb +8 -3
  197. data/lib/puppet/provider/nameservice.rb +1 -1
  198. data/lib/puppet/provider/nameservice/directoryservice.rb +5 -5
  199. data/lib/puppet/provider/package/appdmg.rb +1 -1
  200. data/lib/puppet/provider/package/apt.rb +0 -1
  201. data/lib/puppet/provider/package/dpkg.rb +86 -32
  202. data/lib/puppet/provider/package/fink.rb +0 -2
  203. data/lib/puppet/provider/package/freebsd.rb +0 -2
  204. data/lib/puppet/provider/package/openbsd.rb +57 -10
  205. data/lib/puppet/provider/package/opkg.rb +0 -1
  206. data/lib/puppet/provider/package/pacman.rb +0 -1
  207. data/lib/puppet/provider/package/pip.rb +1 -1
  208. data/lib/puppet/provider/package/pkgdmg.rb +17 -6
  209. data/lib/puppet/provider/package/pkgutil.rb +1 -1
  210. data/lib/puppet/provider/package/portage.rb +9 -1
  211. data/lib/puppet/provider/package/ports.rb +2 -2
  212. data/lib/puppet/provider/package/rpm.rb +29 -12
  213. data/lib/puppet/provider/package/rug.rb +1 -1
  214. data/lib/puppet/provider/package/urpmi.rb +11 -15
  215. data/lib/puppet/provider/package/windows/exe_package.rb +1 -1
  216. data/lib/puppet/provider/package/windows/package.rb +1 -26
  217. data/lib/puppet/provider/package/yum.rb +1 -1
  218. data/lib/puppet/provider/package/zypper.rb +22 -3
  219. data/lib/puppet/provider/parsedfile.rb +1 -12
  220. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +1 -1
  221. data/lib/puppet/provider/service/base.rb +1 -1
  222. data/lib/puppet/provider/service/daemontools.rb +3 -3
  223. data/lib/puppet/provider/service/debian.rb +1 -1
  224. data/lib/puppet/provider/service/init.rb +14 -20
  225. data/lib/puppet/provider/service/openrc.rb +3 -1
  226. data/lib/puppet/provider/service/redhat.rb +5 -8
  227. data/lib/puppet/provider/service/runit.rb +3 -2
  228. data/lib/puppet/provider/service/systemd.rb +1 -1
  229. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  230. data/lib/puppet/provider/sshkey/parsed.rb +0 -2
  231. data/lib/puppet/provider/user/aix.rb +25 -12
  232. data/lib/puppet/provider/user/directoryservice.rb +4 -7
  233. data/lib/puppet/provider/user/ldap.rb +0 -1
  234. data/lib/puppet/provider/user/user_role_add.rb +2 -0
  235. data/lib/puppet/provider/user/useradd.rb +1 -1
  236. data/lib/puppet/provider/zone/solaris.rb +1 -2
  237. data/lib/puppet/reference/metaparameter.rb +1 -1
  238. data/lib/puppet/reference/type.rb +1 -1
  239. data/lib/puppet/reports/rrdgraph.rb +1 -1
  240. data/lib/puppet/reports/tagmail.rb +1 -1
  241. data/lib/puppet/resource.rb +16 -4
  242. data/lib/puppet/resource/catalog.rb +111 -173
  243. data/lib/puppet/resource/status.rb +42 -3
  244. data/lib/puppet/resource/type.rb +33 -46
  245. data/lib/puppet/resource/type_collection.rb +19 -15
  246. data/lib/puppet/run.rb +5 -1
  247. data/lib/puppet/scheduler/scheduler.rb +14 -15
  248. data/lib/puppet/settings.rb +78 -41
  249. data/lib/puppet/settings/boolean_setting.rb +0 -2
  250. data/lib/puppet/settings/config_file.rb +0 -2
  251. data/lib/puppet/settings/directory_setting.rb +0 -2
  252. data/lib/puppet/settings/duration_setting.rb +0 -2
  253. data/lib/puppet/settings/enum_setting.rb +16 -0
  254. data/lib/puppet/settings/file_setting.rb +0 -2
  255. data/lib/puppet/settings/path_setting.rb +0 -2
  256. data/lib/puppet/settings/string_setting.rb +0 -3
  257. data/lib/puppet/settings/terminus_setting.rb +0 -2
  258. data/lib/puppet/ssl/certificate_authority.rb +102 -9
  259. data/lib/puppet/test/test_helper.rb +1 -0
  260. data/lib/puppet/transaction.rb +130 -292
  261. data/lib/puppet/transaction/additional_resource_generator.rb +126 -0
  262. data/lib/puppet/transaction/event.rb +16 -1
  263. data/lib/puppet/transaction/report.rb +34 -14
  264. data/lib/puppet/transaction/resource_harness.rb +16 -19
  265. data/lib/puppet/type.rb +59 -53
  266. data/lib/puppet/type/component.rb +0 -2
  267. data/lib/puppet/type/cron.rb +13 -2
  268. data/lib/puppet/type/exec.rb +5 -7
  269. data/lib/puppet/type/file.rb +9 -32
  270. data/lib/puppet/type/file/content.rb +4 -1
  271. data/lib/puppet/type/file/ctime.rb +3 -1
  272. data/lib/puppet/type/file/ensure.rb +1 -1
  273. data/lib/puppet/type/file/mode.rb +0 -1
  274. data/lib/puppet/type/file/mtime.rb +2 -1
  275. data/lib/puppet/type/group.rb +7 -9
  276. data/lib/puppet/type/host.rb +1 -2
  277. data/lib/puppet/type/mcx.rb +0 -1
  278. data/lib/puppet/type/mount.rb +38 -6
  279. data/lib/puppet/type/package.rb +2 -2
  280. data/lib/puppet/type/resources.rb +5 -4
  281. data/lib/puppet/type/schedule.rb +1 -4
  282. data/lib/puppet/type/selmodule.rb +1 -1
  283. data/lib/puppet/type/service.rb +1 -3
  284. data/lib/puppet/type/tidy.rb +3 -3
  285. data/lib/puppet/type/user.rb +9 -13
  286. data/lib/puppet/type/yumrepo.rb +11 -7
  287. data/lib/puppet/util.rb +14 -7
  288. data/lib/puppet/util/autoload.rb +0 -1
  289. data/lib/puppet/util/backups.rb +1 -3
  290. data/lib/puppet/util/classgen.rb +1 -1
  291. data/lib/puppet/util/command_line/puppet_option_parser.rb +1 -3
  292. data/lib/puppet/util/command_line/trollop.rb +1 -1
  293. data/lib/puppet/util/constant_inflector.rb +1 -2
  294. data/lib/puppet/util/errors.rb +1 -0
  295. data/lib/puppet/util/file_watcher.rb +28 -0
  296. data/lib/puppet/util/fileparsing.rb +1 -3
  297. data/lib/puppet/util/filetype.rb +0 -1
  298. data/lib/puppet/util/http_proxy.rb +38 -0
  299. data/lib/puppet/util/ldap/manager.rb +1 -2
  300. data/lib/puppet/util/log.rb +31 -10
  301. data/lib/puppet/util/log/destinations.rb +0 -50
  302. data/lib/puppet/util/metric.rb +8 -1
  303. data/lib/puppet/util/monkey_patches.rb +14 -148
  304. data/lib/puppet/util/network_device/cisco/facts.rb +1 -1
  305. data/lib/puppet/util/network_device/config.rb +6 -9
  306. data/lib/puppet/util/network_device/transport/ssh.rb +1 -1
  307. data/lib/puppet/util/pidlock.rb +3 -0
  308. data/lib/puppet/util/posix.rb +1 -1
  309. data/lib/puppet/util/profiler.rb +1 -1
  310. data/lib/puppet/util/rdoc.rb +1 -1
  311. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +0 -1
  312. data/lib/puppet/util/rdoc/generators/template/puppet/puppet.rb +50 -42
  313. data/lib/puppet/util/retryaction.rb +0 -1
  314. data/lib/puppet/util/symbolic_file_mode.rb +5 -1
  315. data/lib/puppet/util/tagging.rb +0 -2
  316. data/lib/puppet/util/warnings.rb +3 -0
  317. data/lib/puppet/util/watched_file.rb +37 -0
  318. data/lib/puppet/util/watcher.rb +17 -0
  319. data/lib/puppet/util/watcher/change_watcher.rb +33 -0
  320. data/lib/puppet/util/watcher/periodic_watcher.rb +37 -0
  321. data/lib/puppet/util/watcher/timer.rb +19 -0
  322. data/lib/puppet/util/windows/user.rb +1 -1
  323. data/lib/puppet/version.rb +1 -1
  324. data/lib/puppetx.rb +109 -0
  325. data/lib/puppetx/puppet/bindings_scheme_handler.rb +130 -0
  326. data/lib/puppetx/puppet/hiera2_backend.rb +31 -0
  327. data/lib/puppetx/puppet/syntax_checker.rb +91 -0
  328. data/lib/puppetx/puppetlabs/syntax_checkers/json.rb +39 -0
  329. data/lib/semver.rb +1 -1
  330. data/man/man8/puppet-kick.8 +1 -1
  331. data/spec/fixtures/integration/provider/cron/crontab/unspecialized +15 -0
  332. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/binder_config.yaml +18 -0
  333. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/hiera.yaml +8 -0
  334. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/common.yaml +1 -0
  335. data/spec/fixtures/unit/pops/binder/bindings_composer/hiera1config/modules/good/hiera.yaml +10 -0
  336. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +19 -0
  337. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/common.yaml +1 -0
  338. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/hiera.yaml +11 -0
  339. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/localhost.yaml +1 -0
  340. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/common.yaml +3 -0
  341. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/hiera.yaml +13 -0
  342. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppet/bindings/awesome/default.rb +4 -0
  343. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_backend.rb +11 -0
  344. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/lib/puppetx/awesome/echo_scheme_handler.rb +18 -0
  345. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome/localhost.yaml +1 -0
  346. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/common.yaml +3 -0
  347. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/bad/hiera_config.yaml +9 -0
  348. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/common.yaml +2 -0
  349. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/good/hiera.yaml +11 -0
  350. data/spec/fixtures/unit/pops/binder/config/binder_config/ok/binder_config.yaml +9 -0
  351. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/hiera.yaml +9 -0
  352. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.json +9 -0
  353. data/spec/fixtures/unit/pops/binder/hiera2/bindings_provider/ok/node.example.com.yaml +5 -0
  354. data/spec/fixtures/unit/pops/binder/hiera2/config/bad_syntax/hiera.yaml +10 -0
  355. data/spec/fixtures/unit/pops/binder/hiera2/config/malformed_hierarchy/hiera.yaml +8 -0
  356. data/spec/fixtures/unit/pops/binder/hiera2/config/missing/foo.txt +1 -0
  357. data/spec/fixtures/unit/pops/binder/hiera2/config/no_backends/hiera.yaml +7 -0
  358. data/spec/fixtures/unit/pops/binder/hiera2/config/no_hierarchy/hiera.yaml +4 -0
  359. data/spec/fixtures/unit/pops/binder/hiera2/config/not_a_hash/hiera.yaml +2 -0
  360. data/spec/fixtures/unit/pops/binder/hiera2/config/ok/hiera.yaml +8 -0
  361. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/empty/common.yaml +0 -0
  362. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/invalid/common.yaml +1 -0
  363. data/spec/fixtures/unit/pops/binder/hiera2/yaml_backend/ok/common.yaml +2 -0
  364. data/spec/fixtures/unit/provider/package/openbsd/pkginfo_flavors.list +2 -0
  365. data/spec/integration/agent/logging_spec.rb +178 -0
  366. data/spec/integration/configurer_spec.rb +1 -1
  367. data/spec/integration/defaults_spec.rb +0 -6
  368. data/spec/integration/network/authconfig_spec.rb +19 -0
  369. data/spec/integration/network/server/webrick_spec.rb +10 -11
  370. data/spec/integration/parser/catalog_spec.rb +85 -0
  371. data/spec/integration/provider/cron/crontab_spec.rb +11 -0
  372. data/spec/integration/provider/mount_spec.rb +1 -0
  373. data/spec/integration/transaction_spec.rb +8 -8
  374. data/spec/integration/type/file_spec.rb +1 -1
  375. data/spec/integration/util/settings_spec.rb +58 -11
  376. data/spec/lib/matchers/include_in_order.rb +21 -0
  377. data/spec/lib/matchers/include_in_order_spec.rb +30 -0
  378. data/spec/lib/matchers/relationship_graph_matchers.rb +48 -0
  379. data/spec/lib/puppet_spec/compiler.rb +24 -0
  380. data/spec/lib/puppet_spec/pops.rb +16 -0
  381. data/spec/spec_helper.rb +0 -1
  382. data/spec/unit/application/agent_spec.rb +145 -145
  383. data/spec/unit/application/apply_spec.rb +1 -1
  384. data/spec/unit/application/doc_spec.rb +1 -1
  385. data/spec/unit/application/face_base_spec.rb +3 -3
  386. data/spec/unit/application/facts_spec.rb +1 -0
  387. data/spec/unit/application/master_spec.rb +0 -15
  388. data/spec/unit/application/queue_spec.rb +6 -12
  389. data/spec/unit/application/resource_spec.rb +1 -1
  390. data/spec/unit/configurer/fact_handler_spec.rb +19 -50
  391. data/spec/unit/configurer_spec.rb +23 -7
  392. data/spec/unit/daemon_spec.rb +97 -121
  393. data/spec/unit/defaults_spec.rb +44 -0
  394. data/spec/unit/face/node_spec.rb +2 -2
  395. data/spec/unit/file_serving/configuration/parser_spec.rb +23 -33
  396. data/spec/unit/file_serving/configuration_spec.rb +2 -2
  397. data/spec/unit/file_serving/mount/file_spec.rb +4 -4
  398. data/spec/unit/forge/repository_spec.rb +9 -29
  399. data/spec/unit/graph/key_spec.rb +41 -0
  400. data/spec/unit/{rb_tree_map_spec.rb → graph/rb_tree_map_spec.rb} +7 -7
  401. data/spec/unit/graph/relationship_graph_spec.rb +393 -0
  402. data/spec/unit/graph/sequential_prioritizer_spec.rb +32 -0
  403. data/spec/unit/{simple_graph_spec.rb → graph/simple_graph.rb} +42 -254
  404. data/spec/unit/graph/title_hash_prioritizer_spec.rb +49 -0
  405. data/spec/unit/hiera_puppet_spec.rb +1 -1
  406. data/spec/unit/indirector/catalog/active_record_spec.rb +4 -2
  407. data/spec/unit/indirector/catalog/compiler_spec.rb +20 -26
  408. data/spec/unit/indirector/face_spec.rb +1 -1
  409. data/spec/unit/indirector/facts/facter_spec.rb +11 -1
  410. data/spec/unit/indirector/facts/network_device_spec.rb +11 -1
  411. data/spec/unit/indirector/hiera_spec.rb +1 -1
  412. data/spec/unit/indirector/instrumentation_data/local_spec.rb +1 -1
  413. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +1 -1
  414. data/spec/unit/indirector/request_spec.rb +92 -39
  415. data/spec/unit/indirector/rest_spec.rb +1 -0
  416. data/spec/unit/indirector_spec.rb +2 -2
  417. data/spec/unit/interface/option_builder_spec.rb +1 -0
  418. data/spec/unit/interface/option_spec.rb +1 -0
  419. data/spec/unit/interface_spec.rb +2 -2
  420. data/spec/unit/module_tool/applications/installer_spec.rb +49 -2
  421. data/spec/unit/module_tool/metadata_spec.rb +13 -0
  422. data/spec/unit/network/authstore_spec.rb +1 -1
  423. data/spec/unit/network/format_handler_spec.rb +33 -282
  424. data/spec/unit/network/format_support_spec.rb +199 -0
  425. data/spec/unit/network/formats_spec.rb +2 -2
  426. data/spec/unit/network/http/connection_spec.rb +88 -7
  427. data/spec/unit/network/http/handler_spec.rb +271 -249
  428. data/spec/unit/network/http/rack/rest_spec.rb +1 -1
  429. data/spec/unit/network/http/webrick/rest_spec.rb +73 -22
  430. data/spec/unit/network/http_pool_spec.rb +40 -0
  431. data/spec/unit/network/server_spec.rb +18 -207
  432. data/spec/unit/node/facts_spec.rb +68 -17
  433. data/spec/unit/other/selinux_spec.rb +24 -20
  434. data/spec/unit/parameter/boolean_spec.rb +25 -0
  435. data/spec/unit/parameter/value_collection_spec.rb +7 -7
  436. data/spec/unit/parameter_spec.rb +10 -13
  437. data/spec/unit/parser/ast/function_spec.rb +4 -4
  438. data/spec/unit/parser/ast/leaf_spec.rb +45 -6
  439. data/spec/unit/parser/collector_spec.rb +3 -3
  440. data/spec/unit/parser/compiler_spec.rb +4 -3
  441. data/spec/unit/parser/functions/create_resources_spec.rb +9 -25
  442. data/spec/unit/parser/functions/extlookup_spec.rb +2 -2
  443. data/spec/unit/parser/functions/hiera_include_spec.rb +12 -0
  444. data/spec/unit/parser/functions/lookup_spec.rb +96 -0
  445. data/spec/unit/parser/functions/regsubst_spec.rb +2 -2
  446. data/spec/unit/parser/functions/split_spec.rb +2 -2
  447. data/spec/unit/parser/functions/sprintf_spec.rb +1 -1
  448. data/spec/unit/parser/functions/versioncmp_spec.rb +2 -2
  449. data/spec/unit/parser/functions_spec.rb +7 -7
  450. data/spec/unit/parser/lexer_spec.rb +1 -1
  451. data/spec/unit/parser/methods/collect_spec.rb +43 -0
  452. data/spec/unit/parser/resource_spec.rb +9 -9
  453. data/spec/unit/parser/scope_spec.rb +45 -2
  454. data/spec/unit/parser/type_loader_spec.rb +159 -175
  455. data/spec/unit/pops/binder/binder_spec.rb +62 -0
  456. data/spec/unit/pops/binder/bindings_checker_spec.rb +196 -0
  457. data/spec/unit/pops/binder/bindings_composer_spec.rb +89 -0
  458. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +18 -0
  459. data/spec/unit/pops/binder/config/binder_config_spec.rb +48 -0
  460. data/spec/unit/pops/binder/hiera2/bindings_provider_spec.rb +74 -0
  461. data/spec/unit/pops/binder/hiera2/config_spec.rb +61 -0
  462. data/spec/unit/pops/binder/hiera2/yaml_backend_spec.rb +33 -0
  463. data/spec/unit/pops/binder/injector_spec.rb +789 -0
  464. data/spec/unit/pops/containment_spec.rb +1 -0
  465. data/spec/unit/pops/issues_spec.rb +1 -1
  466. data/spec/unit/pops/parser/evaluating_parser_spec.rb +88 -0
  467. data/spec/unit/pops/parser/lexer_spec.rb +1 -1
  468. data/spec/unit/pops/parser/parse_calls_spec.rb +4 -0
  469. data/spec/unit/pops/parser/parser_spec.rb +1 -1
  470. data/spec/unit/pops/types/type_calculator_spec.rb +484 -0
  471. data/spec/unit/pops/types/type_factory_spec.rb +65 -0
  472. data/spec/unit/pops/types/type_parser_spec.rb +93 -0
  473. data/spec/unit/property/list_spec.rb +1 -1
  474. data/spec/unit/property/ordered_list_spec.rb +1 -1
  475. data/spec/unit/provider/aixobject_spec.rb +101 -0
  476. data/spec/unit/provider/augeas/augeas_spec.rb +14 -3
  477. data/spec/unit/provider/mcx/mcxcontent_spec.rb +52 -16
  478. data/spec/unit/provider/mount/parsed_spec.rb +44 -56
  479. data/spec/unit/provider/mount_spec.rb +11 -2
  480. data/spec/unit/provider/naginator_spec.rb +8 -0
  481. data/spec/unit/provider/package/apt_spec.rb +5 -1
  482. data/spec/unit/provider/package/aptitude_spec.rb +9 -5
  483. data/spec/unit/provider/package/aptrpm_spec.rb +2 -2
  484. data/spec/unit/provider/package/dpkg_spec.rb +274 -99
  485. data/spec/unit/provider/package/openbsd_spec.rb +84 -1
  486. data/spec/unit/provider/package/opkg_spec.rb +3 -3
  487. data/spec/unit/provider/package/pip_spec.rb +16 -0
  488. data/spec/unit/provider/package/pkgdmg_spec.rb +62 -7
  489. data/spec/unit/provider/package/rpm_spec.rb +112 -21
  490. data/spec/unit/provider/package/urpmi.rb +80 -0
  491. data/spec/unit/provider/package/windows/exe_package_spec.rb +1 -1
  492. data/spec/unit/provider/package/yum_spec.rb +85 -0
  493. data/spec/unit/provider/package/zypper_spec.rb +25 -6
  494. data/spec/unit/provider/parsedfile_spec.rb +3 -2
  495. data/spec/unit/provider/service/init_spec.rb +10 -10
  496. data/spec/unit/provider/service/openrc_spec.rb +16 -0
  497. data/spec/unit/provider/service/openwrt_spec.rb +1 -1
  498. data/spec/unit/provider/service/redhat_spec.rb +7 -0
  499. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +2 -2
  500. data/spec/unit/provider/user/aix_spec.rb +89 -0
  501. data/spec/unit/provider/user/directoryservice_spec.rb +11 -4
  502. data/spec/unit/provider/user/user_role_add_spec.rb +18 -0
  503. data/spec/unit/provider_spec.rb +2 -13
  504. data/spec/unit/reports/http_spec.rb +1 -1
  505. data/spec/unit/resource/catalog_spec.rb +23 -97
  506. data/spec/unit/resource/resource_type.json +34 -0
  507. data/spec/unit/resource/status_spec.rb +56 -0
  508. data/spec/unit/resource/type_collection_spec.rb +6 -6
  509. data/spec/unit/resource/type_spec.rb +25 -5
  510. data/spec/unit/resource_spec.rb +68 -24
  511. data/spec/unit/run_spec.rb +16 -0
  512. data/spec/unit/scheduler/scheduler_spec.rb +14 -27
  513. data/spec/unit/semver_spec.rb +5 -0
  514. data/spec/unit/settings/enum_setting_spec.rb +27 -0
  515. data/spec/unit/settings_spec.rb +53 -44
  516. data/spec/unit/ssl/certificate_authority_spec.rb +155 -19
  517. data/spec/unit/transaction/additional_resource_generator_spec.rb +419 -0
  518. data/spec/unit/transaction/event_manager_spec.rb +2 -2
  519. data/spec/unit/transaction/event_spec.rb +57 -0
  520. data/spec/unit/transaction/report_spec.rb +66 -0
  521. data/spec/unit/transaction/resource_harness_spec.rb +27 -20
  522. data/spec/unit/transaction_spec.rb +182 -390
  523. data/spec/unit/type/augeas_spec.rb +3 -3
  524. data/spec/unit/type/component_spec.rb +0 -9
  525. data/spec/unit/type/computer_spec.rb +1 -1
  526. data/spec/unit/type/cron_spec.rb +2 -2
  527. data/spec/unit/type/exec_spec.rb +4 -2
  528. data/spec/unit/type/file/content_spec.rb +11 -0
  529. data/spec/unit/type/file/group_spec.rb +1 -1
  530. data/spec/unit/type/file_spec.rb +16 -8
  531. data/spec/unit/type/mount_spec.rb +445 -259
  532. data/spec/unit/type/package_spec.rb +4 -4
  533. data/spec/unit/type/resources_spec.rb +30 -1
  534. data/spec/unit/type/user_spec.rb +26 -3
  535. data/spec/unit/type/yumrepo_spec.rb +7 -27
  536. data/spec/unit/type/zone_spec.rb +4 -1
  537. data/spec/unit/type_spec.rb +66 -33
  538. data/spec/unit/util/backups_spec.rb +3 -3
  539. data/spec/unit/util/http_proxy_spec.rb +83 -0
  540. data/spec/unit/util/log_spec.rb +79 -8
  541. data/spec/unit/util/metric_spec.rb +12 -0
  542. data/spec/unit/util/monkey_patches_spec.rb +6 -0
  543. data/spec/unit/util/network_device/config_spec.rb +26 -64
  544. data/spec/unit/util/pidlock_spec.rb +4 -1
  545. data/spec/unit/util/tagging_spec.rb +5 -9
  546. data/spec/unit/util/warnings_spec.rb +1 -1
  547. data/spec/unit/util/watched_file_spec.rb +52 -0
  548. data/spec/unit/util/watcher/periodic_watcher_spec.rb +52 -0
  549. data/spec/unit/util/watcher_spec.rb +56 -0
  550. data/spec/unit/util_spec.rb +16 -0
  551. metadata +2767 -2576
  552. data/ext/debian/puppet.manpages +0 -32
  553. data/ext/osx/PackageInfo.plist +0 -36
  554. data/ext/osx/createpackage.sh +0 -187
  555. data/ext/redhat/rundir-perms.patch +0 -28
  556. data/lib/puppet/external/base64.rb +0 -19
  557. data/lib/puppet/util/graph.rb +0 -27
  558. data/lib/puppet/util/loadedfile.rb +0 -61
  559. data/lib/puppet/util/log_paths.rb +0 -22
  560. data/lib/puppet/util/subclass_loader.rb +0 -78
  561. data/spec/monkey_patches/publicize_methods.rb +0 -11
  562. data/spec/unit/util/loadedfile_spec.rb +0 -71
@@ -101,6 +101,7 @@ describe Puppet::Indirector::REST do
101
101
  end
102
102
 
103
103
  after :all do
104
+ Puppet::TestModel.indirection.delete
104
105
  # Remove the class, unlinking it from the rest of the system.
105
106
  Puppet.send(:remove_const, :TestModel)
106
107
  end
@@ -118,9 +118,9 @@ describe Puppet::Indirector, "when registering an indirection" do
118
118
  @indirection = @thingie.indirects :first, :some => :options
119
119
  end
120
120
 
121
- it "should extend the class with the Format Handler" do
121
+ it "should extend the class to handle serialization" do
122
122
  @indirection = @thingie.indirects :first
123
- @thingie.singleton_class.ancestors.should be_include(Puppet::Network::FormatHandler)
123
+ @thingie.should respond_to(:convert_from)
124
124
  end
125
125
 
126
126
  after do
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'puppet/interface'
2
3
 
3
4
  describe Puppet::Interface::OptionBuilder do
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'puppet/interface'
2
3
 
3
4
  describe Puppet::Interface::Option do
@@ -24,11 +24,11 @@ describe Puppet::Interface do
24
24
  end
25
25
 
26
26
  it "should raise an exception when the requested version is unavailable" do
27
- expect { subject[:huzzah, '17.0.0'] }.to raise_error, Puppet::Error
27
+ expect { subject[:huzzah, '17.0.0'] }.to raise_error(Puppet::Error, /Could not find version/)
28
28
  end
29
29
 
30
30
  it "should raise an exception when the requested face doesn't exist" do
31
- expect { subject[:burrble_toot, :current] }.to raise_error, Puppet::Error
31
+ expect { subject[:burrble_toot, :current] }.to raise_error(Puppet::Error, /Could not find Puppet Face/)
32
32
  end
33
33
 
34
34
  describe "version matching" do
@@ -42,6 +42,17 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => Puppet.features
42
42
 
43
43
  let(:remote_dependency_info) do
44
44
  {
45
+ "pmtacceptance/apache" => [
46
+ { "dependencies" => [],
47
+ "version" => "1.0.0-alpha",
48
+ "file" => "/pmtacceptance-apache-1.0.0-alpha.tar.gz" },
49
+ { "dependencies" => [],
50
+ "version" => "1.0.0-beta",
51
+ "file" => "/pmtacceptance-apache-1.0.0-beta.tar.gz" },
52
+ { "dependencies" => [],
53
+ "version" => "1.0.0-rc1",
54
+ "file" => "/pmtacceptance-apache-1.0.0-rc1.tar.gz" },
55
+ ],
45
56
  "pmtacceptance/stdlib" => [
46
57
  { "dependencies" => [],
47
58
  "version" => "0.0.1",
@@ -49,9 +60,15 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => Puppet.features
49
60
  { "dependencies" => [],
50
61
  "version" => "0.0.2",
51
62
  "file" => "/pmtacceptance-stdlib-0.0.2.tar.gz" },
63
+ { "dependencies" => [],
64
+ "version" => "1.0.0-pre",
65
+ "file" => "/pmtacceptance-stdlib-1.0.0-pre.tar.gz" },
52
66
  { "dependencies" => [],
53
67
  "version" => "1.0.0",
54
- "file" => "/pmtacceptance-stdlib-1.0.0.tar.gz" }
68
+ "file" => "/pmtacceptance-stdlib-1.0.0.tar.gz" },
69
+ { "dependencies" => [],
70
+ "version" => "1.5.0-pre",
71
+ "file" => "/pmtacceptance-stdlib-1.5.0-pre.tar.gz" },
55
72
  ],
56
73
  "pmtacceptance/java" => [
57
74
  { "dependencies" => [["pmtacceptance/stdlib", ">= 0.0.1"]],
@@ -97,7 +114,7 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => Puppet.features
97
114
  raise_error(ArgumentError, "Could not install module with invalid name: puppet")
98
115
  end
99
116
 
100
- it "should install the requested module" do
117
+ it "should install the current stable version of the requested module" do
101
118
  Puppet::ModuleTool::Applications::Unpacker.expects(:new).
102
119
  with('/fake_cache/pmtacceptance-stdlib-1.0.0.tar.gz', options).
103
120
  returns(unpacker)
@@ -107,6 +124,36 @@ describe Puppet::ModuleTool::Applications::Installer, :unless => Puppet.features
107
124
  results[:installed_modules][0][:version][:vstring].should == "1.0.0"
108
125
  end
109
126
 
127
+ it "should install the most recent version of requested module in the absence of a stable version" do
128
+ Puppet::ModuleTool::Applications::Unpacker.expects(:new).
129
+ with('/fake_cache/pmtacceptance-apache-1.0.0-rc1.tar.gz', options).
130
+ returns(unpacker)
131
+ results = installer_class.run('pmtacceptance-apache', forge, install_dir, options)
132
+ results[:installed_modules].length == 1
133
+ results[:installed_modules][0][:module].should == "pmtacceptance-apache"
134
+ results[:installed_modules][0][:version][:vstring].should == "1.0.0-rc1"
135
+ end
136
+
137
+ it "should install the most recent stable version of requested module for the requested version range" do
138
+ Puppet::ModuleTool::Applications::Unpacker.expects(:new).
139
+ with('/fake_cache/pmtacceptance-stdlib-1.0.0.tar.gz', options.merge(:version => '1.x')).
140
+ returns(unpacker)
141
+ results = installer_class.run('pmtacceptance-stdlib', forge, install_dir, options.merge(:version => '1.x'))
142
+ results[:installed_modules].length == 1
143
+ results[:installed_modules][0][:module].should == "pmtacceptance-stdlib"
144
+ results[:installed_modules][0][:version][:vstring].should == "1.0.0"
145
+ end
146
+
147
+ it "should install the most recent version of requested module for the requested version range in the absence of a stable version" do
148
+ Puppet::ModuleTool::Applications::Unpacker.expects(:new).
149
+ with('/fake_cache/pmtacceptance-stdlib-1.5.0-pre.tar.gz', options.merge(:version => '1.5.0-pre')).
150
+ returns(unpacker)
151
+ results = installer_class.run('pmtacceptance-stdlib', forge, install_dir, options.merge(:version => '1.5.0-pre'))
152
+ results[:installed_modules].length == 1
153
+ results[:installed_modules][0][:module].should == "pmtacceptance-stdlib"
154
+ results[:installed_modules][0][:version][:vstring].should == "1.5.0-pre"
155
+ end
156
+
110
157
  context "should check the target directory" do
111
158
  let(:installer) do
112
159
  installer_class.new('pmtacceptance-stdlib', forge, install_dir, options)
@@ -8,4 +8,17 @@ describe Puppet::ModuleTool::Metadata do
8
8
  metadata.license.should == "Apache License, Version 2.0"
9
9
  end
10
10
  end
11
+
12
+ describe :to_hash do
13
+ it 'should merge extra_data in' do
14
+ metadata = Puppet::ModuleTool::Metadata.new
15
+ metadata.extra_metadata = {
16
+ 'checksums' => 'badsums',
17
+ 'special_key' => 'special'
18
+ }
19
+ meta_hash = metadata.to_hash
20
+ meta_hash['special_key'].should == 'special'
21
+ meta_hash['checksums'].should == {}
22
+ end
23
+ end
11
24
  end
@@ -82,7 +82,7 @@ describe Puppet::Network::AuthStore::Declaration do
82
82
  end
83
83
 
84
84
  (1..3).each { |n|
85
- describe "when the pattern is a IP mask with #{n} numeric segments and a *" do
85
+ describe "when the pattern is an IP mask with #{n} numeric segments and a *" do
86
86
  before :each do
87
87
  @ip_pattern = ip.split('.')[0,n].join('.')+'.*'
88
88
  @declaration = Puppet::Network::AuthStore::Declaration.new(:allow_ip,@ip_pattern)
@@ -3,209 +3,33 @@ require 'spec_helper'
3
3
 
4
4
  require 'puppet/network/format_handler'
5
5
 
6
- class FormatTester
7
- extend Puppet::Network::FormatHandler
8
- end
9
-
10
6
  describe Puppet::Network::FormatHandler do
11
- after do
12
- formats = Puppet::Network::FormatHandler.instance_variable_get("@formats")
13
- formats.each do |name, format|
14
- formats.delete(name) unless format.is_a?(Puppet::Network::Format)
15
- end
7
+ before(:each) do
8
+ @saved_formats = Puppet::Network::FormatHandler.instance_variable_get(:@formats).dup
9
+ Puppet::Network::FormatHandler.instance_variable_set(:@formats, {})
16
10
  end
17
11
 
18
- it "should be able to list supported formats" do
19
- FormatTester.should respond_to(:supported_formats)
12
+ after(:each) do
13
+ Puppet::Network::FormatHandler.instance_variable_set(:@formats, @saved_formats)
20
14
  end
21
15
 
22
- it "should include all supported formats" do
23
- one = stub 'supported', :supported? => true, :name => :one, :weight => 1
24
- two = stub 'supported', :supported? => false, :name => :two, :weight => 1
25
- three = stub 'supported', :supported? => true, :name => :three, :weight => 1
26
- four = stub 'supported', :supported? => false, :name => :four, :weight => 1
27
- Puppet::Network::FormatHandler.stubs(:formats).returns [:one, :two, :three, :four]
28
- Puppet::Network::FormatHandler.stubs(:format).with(:one).returns one
29
- Puppet::Network::FormatHandler.stubs(:format).with(:two).returns two
30
- Puppet::Network::FormatHandler.stubs(:format).with(:three).returns three
31
- Puppet::Network::FormatHandler.stubs(:format).with(:four).returns four
32
- result = FormatTester.supported_formats
33
- result.length.should == 2
34
- result.should be_include(:one)
35
- result.should be_include(:three)
36
- end
37
-
38
- it "should return the supported formats in decreasing order of weight" do
39
- one = stub 'supported', :supported? => true, :name => :one, :weight => 1
40
- two = stub 'supported', :supported? => true, :name => :two, :weight => 6
41
- three = stub 'supported', :supported? => true, :name => :three, :weight => 2
42
- four = stub 'supported', :supported? => true, :name => :four, :weight => 8
43
- Puppet::Network::FormatHandler.stubs(:formats).returns [:one, :two, :three, :four]
44
- Puppet::Network::FormatHandler.stubs(:format).with(:one).returns one
45
- Puppet::Network::FormatHandler.stubs(:format).with(:two).returns two
46
- Puppet::Network::FormatHandler.stubs(:format).with(:three).returns three
47
- Puppet::Network::FormatHandler.stubs(:format).with(:four).returns four
48
- FormatTester.supported_formats.should == [:four, :two, :three, :one]
49
- end
50
-
51
-
52
- describe "with a preferred serialization format setting" do
53
- before do
54
- one = stub 'supported', :supported? => true, :name => :one, :weight => 1
55
- two = stub 'supported', :supported? => true, :name => :two, :weight => 6
56
- Puppet::Network::FormatHandler.stubs(:formats).returns [:one, :two]
57
- Puppet::Network::FormatHandler.stubs(:format).with(:one).returns one
58
- Puppet::Network::FormatHandler.stubs(:format).with(:two).returns two
59
- end
60
- describe "that is supported" do
61
- before do
62
- Puppet[:preferred_serialization_format] = :one
63
- end
64
- it "should return the preferred serialization format first" do
65
- FormatTester.supported_formats.should == [:one, :two]
66
- end
67
- end
68
- describe "that is not supported" do
69
- before do
70
- Puppet[:preferred_serialization_format] = :unsupported
71
- end
72
- it "should still return the default format first" do
73
- FormatTester.supported_formats.should == [:two, :one]
74
- end
75
- it "should log a debug message" do
76
- Puppet.expects(:debug).with("Value of 'preferred_serialization_format' (unsupported) is invalid for FormatTester, using default (two)")
77
- Puppet.expects(:debug).with("FormatTester supports formats: one two; using two")
78
- FormatTester.supported_formats
16
+ describe "when creating formats" do
17
+ it "should instance_eval any block provided when creating a format" do
18
+ format = Puppet::Network::FormatHandler.create(:test_format) do
19
+ def asdfghjkl; end
79
20
  end
21
+ format.should respond_to(:asdfghjkl)
80
22
  end
81
23
  end
82
24
 
83
- it "should return the first format as the default format" do
84
- FormatTester.expects(:supported_formats).returns [:one, :two]
85
- FormatTester.default_format.should == :one
86
- end
87
-
88
- it "should be able to use a protected format for better logging on errors" do
89
- Puppet::Network::FormatHandler.should respond_to(:protected_format)
90
- end
91
-
92
- it "should delegate all methods from the informative format to the specified format" do
93
- format = mock 'format'
94
- format.stubs(:name).returns(:myformat)
95
- Puppet::Network::FormatHandler.expects(:format).twice.with(:myformat).returns format
96
-
97
- format.expects(:render).with("foo").returns "yay"
98
- Puppet::Network::FormatHandler.protected_format(:myformat).render("foo").should == "yay"
99
- end
100
-
101
- it "should provide better logging if a failure is encountered when delegating from the informative format to the real format" do
102
- format = mock 'format'
103
- format.stubs(:name).returns(:myformat)
104
- Puppet::Network::FormatHandler.expects(:format).twice.with(:myformat).returns format
105
-
106
- format.expects(:render).with("foo").raises "foo"
107
- lambda { Puppet::Network::FormatHandler.protected_format(:myformat).render("foo") }.should raise_error(Puppet::Network::FormatHandler::FormatError)
108
- end
109
-
110
- it "should raise an error if we couldn't find a format by name or mime-type" do
111
- Puppet::Network::FormatHandler.stubs(:format).with(:myformat).returns nil
112
- lambda { Puppet::Network::FormatHandler.protected_format(:myformat) }.should raise_error
113
- end
114
-
115
- describe "when using formats" do
116
- before do
117
- @format = mock 'format'
118
- @format.stubs(:supported?).returns true
119
- @format.stubs(:name).returns :my_format
120
- Puppet::Network::FormatHandler.stubs(:format).with(:my_format).returns @format
121
- Puppet::Network::FormatHandler.stubs(:mime).with("text/myformat").returns @format
122
- Puppet::Network::Format.stubs(:===).returns false
123
- Puppet::Network::Format.stubs(:===).with(@format).returns true
124
- end
125
-
126
- it "should be able to test whether a format is supported" do
127
- FormatTester.should respond_to(:support_format?)
128
- end
129
-
130
- it "should use the Format to determine whether a given format is supported" do
131
- @format.expects(:supported?).with(FormatTester)
132
- FormatTester.support_format?(:my_format)
133
- end
134
-
135
- it "should be able to convert from a given format" do
136
- FormatTester.should respond_to(:convert_from)
137
- end
138
-
139
- it "should call the format-specific converter when asked to convert from a given format" do
140
- @format.expects(:intern).with(FormatTester, "mydata")
141
- FormatTester.convert_from(:my_format, "mydata")
142
- end
143
-
144
- it "should call the format-specific converter when asked to convert from a given format by mime-type" do
145
- @format.expects(:intern).with(FormatTester, "mydata")
146
- FormatTester.convert_from("text/myformat", "mydata")
147
- end
148
-
149
- it "should call the format-specific converter when asked to convert from a given format by format instance" do
150
- @format.expects(:intern).with(FormatTester, "mydata")
151
- FormatTester.convert_from(@format, "mydata")
152
- end
153
-
154
- it "should raise a FormatError when an exception is encountered when converting from a format" do
155
- @format.expects(:intern).with(FormatTester, "mydata").raises "foo"
156
- lambda { FormatTester.convert_from(:my_format, "mydata") }.should raise_error(Puppet::Network::FormatHandler::FormatError)
157
- end
158
-
159
- it "should be able to use a specific hook for converting into multiple instances" do
160
- @format.expects(:intern_multiple).with(FormatTester, "mydata")
161
-
162
- FormatTester.convert_from_multiple(:my_format, "mydata")
163
- end
164
-
165
- it "should raise a FormatError when an exception is encountered when converting multiple items from a format" do
166
- @format.expects(:intern_multiple).with(FormatTester, "mydata").raises "foo"
167
- lambda { FormatTester.convert_from_multiple(:my_format, "mydata") }.should raise_error(Puppet::Network::FormatHandler::FormatError)
168
- end
169
-
170
- it "should be able to use a specific hook for rendering multiple instances" do
171
- @format.expects(:render_multiple).with("mydata")
172
-
173
- FormatTester.render_multiple(:my_format, "mydata")
174
- end
175
-
176
- it "should raise a FormatError when an exception is encountered when rendering multiple items into a format" do
177
- @format.expects(:render_multiple).with("mydata").raises "foo"
178
- lambda { FormatTester.render_multiple(:my_format, "mydata") }.should raise_error(Puppet::Network::FormatHandler::FormatError)
179
- end
180
- end
181
-
182
- describe "when managing formats" do
183
- it "should have a method for defining a new format" do
184
- Puppet::Network::FormatHandler.should respond_to(:create)
185
- end
186
-
187
- it "should create a format instance when asked" do
188
- format = stub 'format', :name => :foo
189
- Puppet::Network::Format.expects(:new).with(:foo).returns format
190
- Puppet::Network::FormatHandler.create(:foo)
191
- end
192
-
193
- it "should instance_eval any block provided when creating a format" do
194
- format = stub 'format', :name => :instance_eval
195
- format.expects(:yayness)
196
- Puppet::Network::Format.expects(:new).returns format
197
- Puppet::Network::FormatHandler.create(:instance_eval) do
198
- yayness
199
- end
200
- end
25
+ describe "when retrieving formats" do
26
+ let!(:format) { Puppet::Network::FormatHandler.create(:the_format, :extension => "foo", :mime => "foo/bar") }
201
27
 
202
28
  it "should be able to retrieve a format by name" do
203
- format = Puppet::Network::FormatHandler.create(:by_name)
204
- Puppet::Network::FormatHandler.format(:by_name).should equal(format)
29
+ Puppet::Network::FormatHandler.format(:the_format).should equal(format)
205
30
  end
206
31
 
207
32
  it "should be able to retrieve a format by extension" do
208
- format = Puppet::Network::FormatHandler.create(:by_extension, :extension => "foo")
209
33
  Puppet::Network::FormatHandler.format_by_extension("foo").should equal(format)
210
34
  end
211
35
 
@@ -213,123 +37,50 @@ describe Puppet::Network::FormatHandler do
213
37
  Puppet::Network::FormatHandler.format_by_extension("yayness").should be_nil
214
38
  end
215
39
 
216
- it "should be able to retrieve formats by name irrespective of case and class" do
217
- format = Puppet::Network::FormatHandler.create(:by_name)
218
- Puppet::Network::FormatHandler.format(:By_Name).should equal(format)
40
+ it "should be able to retrieve formats by name irrespective of case" do
41
+ Puppet::Network::FormatHandler.format(:The_Format).should equal(format)
219
42
  end
220
43
 
221
44
  it "should be able to retrieve a format by mime type" do
222
- format = Puppet::Network::FormatHandler.create(:by_name, :mime => "foo/bar")
223
45
  Puppet::Network::FormatHandler.mime("foo/bar").should equal(format)
224
46
  end
225
47
 
226
48
  it "should be able to retrieve a format by mime type irrespective of case" do
227
- format = Puppet::Network::FormatHandler.create(:by_name, :mime => "foo/bar")
228
49
  Puppet::Network::FormatHandler.mime("Foo/Bar").should equal(format)
229
50
  end
230
-
231
- it "should be able to return all formats" do
232
- one = stub 'one', :name => :one
233
- two = stub 'two', :name => :two
234
- Puppet::Network::Format.expects(:new).with(:one).returns(one)
235
- Puppet::Network::Format.expects(:new).with(:two).returns(two)
236
-
237
- Puppet::Network::FormatHandler.create(:one)
238
- Puppet::Network::FormatHandler.create(:two)
239
-
240
- list = Puppet::Network::FormatHandler.formats
241
- list.should be_include(:one)
242
- list.should be_include(:two)
243
- end
244
51
  end
245
52
 
246
- describe "when an instance" do
247
- it "should be able to test whether a format is supported" do
248
- FormatTester.new.should respond_to(:support_format?)
53
+ describe "#most_suitable_format_for" do
54
+ before :each do
55
+ Puppet::Network::FormatHandler.create(:one, :extension => "foo", :mime => "text/one")
56
+ Puppet::Network::FormatHandler.create(:two, :extension => "bar", :mime => "text/two")
249
57
  end
250
58
 
251
- it "should be able to convert to a given format" do
252
- FormatTester.new.should respond_to(:render)
253
- end
59
+ let(:format_one) { Puppet::Network::FormatHandler.format(:one) }
60
+ let(:format_two) { Puppet::Network::FormatHandler.format(:two) }
254
61
 
255
- it "should be able to get a format mime-type" do
256
- FormatTester.new.should respond_to(:mime)
62
+ def suitable_in_setup_formats(accepted)
63
+ Puppet::Network::FormatHandler.most_suitable_format_for(accepted, [:one, :two])
257
64
  end
258
65
 
259
- it "should raise a FormatError when a rendering error is encountered" do
260
- format = stub 'rendering format', :supported? => true, :name => :foo
261
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
262
-
263
- tester = FormatTester.new
264
- format.expects(:render).with(tester).raises "eh"
265
-
266
- lambda { tester.render(:foo) }.should raise_error(Puppet::Network::FormatHandler::FormatError)
66
+ it "finds no format when none are acceptable" do
67
+ suitable_in_setup_formats(["three"]).should be_nil
267
68
  end
268
69
 
269
- it "should call the format-specific converter when asked to convert to a given format" do
270
- format = stub 'rendering format', :supported? => true, :name => :foo
271
-
272
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
273
-
274
- tester = FormatTester.new
275
- format.expects(:render).with(tester).returns "foo"
276
-
277
- tester.render(:foo).should == "foo"
70
+ it "skips unsupported, but accepted, formats" do
71
+ suitable_in_setup_formats(["three", "two"]).should == format_two
278
72
  end
279
73
 
280
- it "should call the format-specific converter when asked to convert to a given format by mime-type" do
281
- format = stub 'rendering format', :supported? => true, :name => :foo
282
- Puppet::Network::FormatHandler.stubs(:mime).with("text/foo").returns format
283
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
284
-
285
- tester = FormatTester.new
286
- format.expects(:render).with(tester).returns "foo"
287
-
288
- tester.render("text/foo").should == "foo"
74
+ it "gives the first acceptable and suitable format" do
75
+ suitable_in_setup_formats(["three", "one", "two"]).should == format_one
289
76
  end
290
77
 
291
- it "should call the format converter when asked to convert to a given format instance" do
292
- format = stub 'rendering format', :supported? => true, :name => :foo
293
- Puppet::Network::Format.stubs(:===).with(format).returns(true)
294
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
295
-
296
- tester = FormatTester.new
297
- format.expects(:render).with(tester).returns "foo"
298
-
299
- tester.render(format).should == "foo"
78
+ it "allows specifying acceptable formats by mime type" do
79
+ suitable_in_setup_formats(["text/one"]).should == format_one
300
80
  end
301
81
 
302
- it "should render to the default format if no format is provided when rendering" do
303
- format = stub 'rendering format', :supported? => true, :name => :foo
304
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
305
-
306
- FormatTester.expects(:default_format).returns :foo
307
- tester = FormatTester.new
308
-
309
- format.expects(:render).with(tester)
310
- tester.render
311
- end
312
-
313
- it "should call the format-specific converter when asked for the mime-type of a given format" do
314
- format = stub 'rendering format', :supported? => true, :name => :foo
315
-
316
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
317
-
318
- tester = FormatTester.new
319
- format.expects(:mime).returns "text/foo"
320
-
321
- tester.mime(:foo).should == "text/foo"
322
- end
323
-
324
- it "should return the default format mime-type if no format is provided" do
325
- format = stub 'rendering format', :supported? => true, :name => :foo
326
- Puppet::Network::FormatHandler.stubs(:format).with(:foo).returns format
327
-
328
- FormatTester.expects(:default_format).returns :foo
329
- tester = FormatTester.new
330
-
331
- format.expects(:mime).returns "text/foo"
332
- tester.mime.should == "text/foo"
82
+ it "allows specifying acceptable formats by canonical name" do
83
+ suitable_in_setup_formats([:one]).should == format_one
333
84
  end
334
85
  end
335
86
  end