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
@@ -23,7 +23,7 @@ describe Puppet::Parser::Collector, "when initializing" do
23
23
  end
24
24
 
25
25
  it "should only accept :virtual or :exported as the collector form" do
26
- proc { @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @vquery, @equery, :other) }.should raise_error(ArgumentError)
26
+ expect { @collector = Puppet::Parser::Collector.new(@scope, @resource_type, @vquery, @equery, :other) }.to raise_error(ArgumentError)
27
27
  end
28
28
 
29
29
  it "should accept an optional virtual query" do
@@ -61,7 +61,7 @@ describe Puppet::Parser::Collector, "when collecting specific virtual resources"
61
61
  it "should not fail when it does not find any resources to collect" do
62
62
  @collector.resources = ["File[virtual1]", "File[virtual2]"]
63
63
  @scope.stubs(:findresource).returns(false)
64
- proc { @collector.evaluate }.should_not raise_error
64
+ expect { @collector.evaluate }.to_not raise_error
65
65
  end
66
66
 
67
67
  it "should mark matched resources as non-virtual" do
@@ -429,7 +429,7 @@ describe Puppet::Parser::Collector, "when collecting exported resources", :if =>
429
429
  @compiler.add_resource(@scope, local)
430
430
 
431
431
  got = nil
432
- expect { got = @collector.evaluate }.not_to raise_error(Puppet::ParseError)
432
+ expect { got = @collector.evaluate }.not_to raise_error
433
433
  got.length.should == 1
434
434
  got.first.type.should == "Notify"
435
435
  got.first.title.should == "boingy-boingy"
@@ -225,9 +225,10 @@ describe Puppet::Parser::Compiler do
225
225
  three = stub 'three', :name => "three"
226
226
  @node.stubs(:name).returns("whatever")
227
227
  @node.stubs(:classes).returns(classes)
228
+ compile_stub(:evaluate_node_classes)
228
229
 
229
230
  @compiler.expects(:evaluate_classes).with(classes, @compiler.topscope)
230
- @compiler.class.publicize_methods(:evaluate_node_classes) { @compiler.evaluate_node_classes }
231
+ @compiler.compile
231
232
  end
232
233
 
233
234
  it "should evaluate any parameterized classes named in the node" do
@@ -521,7 +522,7 @@ describe Puppet::Parser::Compiler do
521
522
  end
522
523
  }
523
524
 
524
- @compiler.class.publicize_methods(:evaluate_collections) { @compiler.evaluate_collections }
525
+ @compiler.compile
525
526
  end
526
527
 
527
528
  it "should not fail when there are unevaluated resource collections that do not refer to specific resources" do
@@ -576,7 +577,7 @@ describe Puppet::Parser::Compiler do
576
577
  it "should raise an error when it can't find class" do
577
578
  klasses = {'foo'=>nil}
578
579
  @node.classes = klasses
579
- @compiler.topscope.stubs(:find_hostclass).with('foo', {:assume_fqname => false}).returns(nil)
580
+ @compiler.topscope.expects(:find_hostclass).with('foo', {:assume_fqname => false}).returns(nil)
580
581
  lambda{ @compiler.compile }.should raise_error(Puppet::Error, /Could not find class foo for testnode/)
581
582
  end
582
583
  end
@@ -23,21 +23,6 @@ describe 'function for dynamically creating resources' do
23
23
  expect { @scope.function_create_resources(['foo', 'bar', 'blah', 'baz']) }.to raise_error(ArgumentError, 'create_resources(): wrong number of arguments (4; must be 2 or 3)')
24
24
  end
25
25
 
26
- describe 'when the caller does not supply a name parameter' do
27
- it 'should set a default resource name equal to the resource title' do
28
- Puppet::Parser::Resource.any_instance.expects(:set_parameter).with(:name, 'test').once
29
- @scope.function_create_resources(['notify', {'test'=>{}}])
30
- end
31
- end
32
-
33
- describe 'when the caller supplies a name parameter' do
34
- it 'should set the resource name to the value provided' do
35
- Puppet::Parser::Resource.any_instance.expects(:set_parameter).with(:name, 'user_supplied').once
36
- Puppet::Parser::Resource.any_instance.expects(:set_parameter).with(:name, 'test').never
37
- @scope.function_create_resources(['notify', {'test'=>{'name' => 'user_supplied'}}])
38
- end
39
- end
40
-
41
26
  describe 'when creating native types' do
42
27
  it 'empty hash should not cause resources to be added' do
43
28
  noop_catalog = compile_to_catalog("create_resources('file', {})")
@@ -68,12 +53,13 @@ describe 'function for dynamically creating resources' do
68
53
  end
69
54
 
70
55
  it 'should fail to add non-existing type' do
71
- expect { @scope.function_create_resources(['create-resource-foo', {}]) }.to raise_error(ArgumentError, 'could not create resource of unknown type create-resource-foo')
56
+ expect do
57
+ @scope.function_create_resources(['create-resource-foo', { 'foo' => {} }])
58
+ end.to raise_error(ArgumentError, /Invalid resource type create-resource-foo/)
72
59
  end
73
60
 
74
61
  it 'should be able to add edges' do
75
- catalog = compile_to_catalog("notify { test: }\n create_resources('notify', {'foo'=>{'require'=>'Notify[test]'}})")
76
- rg = catalog.to_ral.relationship_graph
62
+ rg = compile_to_relationship_graph("notify { test: }\n create_resources('notify', {'foo'=>{'require'=>'Notify[test]'}})")
77
63
  test = rg.vertices.find { |v| v.title == 'test' }
78
64
  foo = rg.vertices.find { |v| v.title == 'foo' }
79
65
  test.must be
@@ -87,6 +73,7 @@ describe 'function for dynamically creating resources' do
87
73
  catalog.resource(:file, "/etc/baz")['group'].should == 'food'
88
74
  end
89
75
  end
76
+
90
77
  describe 'when dynamically creating resource types' do
91
78
  it 'should be able to create defined resoure types' do
92
79
  catalog = compile_to_catalog(<<-MANIFEST)
@@ -125,7 +112,7 @@ describe 'function for dynamically creating resources' do
125
112
  end
126
113
 
127
114
  it 'should be able to add edges' do
128
- catalog = compile_to_catalog(<<-MANIFEST)
115
+ rg = compile_to_relationship_graph(<<-MANIFEST)
129
116
  define foocreateresource($one) {
130
117
  notify { $name: message => $one }
131
118
  }
@@ -135,13 +122,11 @@ describe 'function for dynamically creating resources' do
135
122
  create_resources('foocreateresource', {'blah'=>{'one'=>'two', 'require' => 'Notify[test]'}})
136
123
  MANIFEST
137
124
 
138
- rg = catalog.to_ral.relationship_graph
139
125
  test = rg.vertices.find { |v| v.title == 'test' }
140
126
  blah = rg.vertices.find { |v| v.title == 'blah' }
141
127
  test.must be
142
128
  blah.must be
143
129
  rg.path_between(test,blah).should be
144
- catalog.resource(:notify, "blah")['message'].should == 'two'
145
130
  end
146
131
 
147
132
  it 'should account for default values' do
@@ -172,15 +157,15 @@ describe 'function for dynamically creating resources' do
172
157
  end
173
158
 
174
159
  it 'should fail to create non-existing classes' do
175
- expect {
160
+ expect do
176
161
  compile_to_catalog(<<-MANIFEST)
177
162
  create_resources('class', {'blah'=>{'one'=>'two'}})
178
163
  MANIFEST
179
- }.to raise_error(Puppet::Error ,'could not find hostclass blah at line 1 on node foonode')
164
+ end.to raise_error(Puppet::Error, 'Could not find declared class blah at line 1 on node foonode')
180
165
  end
181
166
 
182
167
  it 'should be able to add edges' do
183
- catalog = compile_to_catalog(<<-MANIFEST)
168
+ rg = compile_to_relationship_graph(<<-MANIFEST)
184
169
  class bar($one) {
185
170
  notify { test: message => $one }
186
171
  }
@@ -190,7 +175,6 @@ describe 'function for dynamically creating resources' do
190
175
  create_resources('class', {'bar'=>{'one'=>'two', 'require' => 'Notify[tester]'}})
191
176
  MANIFEST
192
177
 
193
- rg = catalog.to_ral.relationship_graph
194
178
  test = rg.vertices.find { |v| v.title == 'test' }
195
179
  tester = rg.vertices.find { |v| v.title == 'tester' }
196
180
  test.must be
@@ -18,11 +18,11 @@ describe "the extlookup function" do
18
18
  Puppet::Parser::Functions.function("extlookup").should == "function_extlookup"
19
19
  end
20
20
 
21
- it "should raise a ArgumentError if there is less than 1 arguments" do
21
+ it "should raise an ArgumentError if there is less than 1 arguments" do
22
22
  lambda { @scope.function_extlookup([]) }.should( raise_error(ArgumentError))
23
23
  end
24
24
 
25
- it "should raise a ArgumentError if there is more than 3 arguments" do
25
+ it "should raise an ArgumentError if there is more than 3 arguments" do
26
26
  lambda { @scope.function_extlookup(["foo", "bar", "baz", "gazonk"]) }.should( raise_error(ArgumentError))
27
27
  end
28
28
 
@@ -21,4 +21,16 @@ describe 'Puppet::Parser::Functions#hiera_include' do
21
21
  HieraPuppet.expects(:lookup).with() { |*args| args[4].should be :array }.returns(['someclass'])
22
22
  expect { scope.function_hiera_include(['key']) }.to raise_error Puppet::Error, /Could not find class someclass/
23
23
  end
24
+
25
+ it 'should call the `include` function with the classes' do
26
+ HieraPuppet.expects(:lookup).returns %w[foo bar baz]
27
+
28
+ scope.expects(:function_include).with([%w[foo bar baz]])
29
+ scope.function_hiera_include(['key'])
30
+ end
31
+
32
+ it 'should not raise an error if the resulting hiera lookup returns an empty array' do
33
+ HieraPuppet.expects(:lookup).returns []
34
+ expect { scope.function_hiera_include(['key']) }.to_not raise_error
35
+ end
24
36
  end
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+ require 'puppet/pops'
3
+ require 'stringio'
4
+
5
+ describe "lookup function" do
6
+ before(:each) do
7
+ Puppet[:binder] = true
8
+ end
9
+
10
+ it "must be called with at least a name to lookup" do
11
+ scope = scope_with_injections_from(bound(bindings))
12
+
13
+ expect do
14
+ scope.function_lookup([])
15
+ end.to raise_error(ArgumentError, /Wrong number of arguments/)
16
+ end
17
+
18
+ it "looks up a value that exists" do
19
+ scope = scope_with_injections_from(bound(bind_single("a_value", "something")))
20
+
21
+ expect(scope.function_lookup(['a_value'])).to eq('something')
22
+ end
23
+
24
+ it "returns :undef when the requested value is not bound" do
25
+ scope = scope_with_injections_from(bound(bind_single("a_value", "something")))
26
+
27
+ expect(scope.function_lookup(['not_bound_value'])).to eq(:undef)
28
+ end
29
+
30
+ it "raises an error when the bound type is not assignable to the requested type" do
31
+ scope = scope_with_injections_from(bound(bind_single("a_value", "something")))
32
+
33
+ expect do
34
+ scope.function_lookup(['a_value', 'Integer'])
35
+ end.to raise_error(ArgumentError, /incompatible type, expected: Integer, got: String/)
36
+ end
37
+
38
+ it "returns the value if the bound type is assignable to the requested type" do
39
+ typed_bindings = bindings
40
+ typed_bindings.bind().string().name("a_value").to("something")
41
+ scope = scope_with_injections_from(bound(typed_bindings))
42
+
43
+ expect(scope.function_lookup(['a_value', 'Data'])).to eq("something")
44
+ end
45
+
46
+ it "yields to a given lambda and returns the result" do
47
+ scope = scope_with_injections_from(bound(bind_single("a_value", "something")))
48
+
49
+ expect(scope.function_lookup(['a_value', ast_lambda('|$x|{something_else}')])).to eq('something_else')
50
+ end
51
+
52
+ it "yields to a given lambda and returns the result when giving name and type" do
53
+ scope = scope_with_injections_from(bound(bind_single("a_value", "something")))
54
+
55
+ expect(scope.function_lookup(['a_value', 'String', ast_lambda('|$x|{something_else}')])).to eq('something_else')
56
+ end
57
+
58
+ it "yields :undef when value is not found and using a lambda" do
59
+ scope = scope_with_injections_from(bound(bind_single("a_value", "something")))
60
+
61
+ expect(scope.function_lookup(['not_bound_value', ast_lambda('|$x|{ if $x == undef {good} else {bad}}')])).to eq('good')
62
+ end
63
+
64
+ def scope_with_injections_from(binder)
65
+ injector = Puppet::Pops::Binder::Injector.new(binder)
66
+ scope = Puppet::Parser::Scope.new_for_test_harness('testing')
67
+ scope.compiler.injector = injector
68
+
69
+ scope
70
+ end
71
+
72
+ def bindings
73
+ Puppet::Pops::Binder::BindingsFactory.named_bindings("testing")
74
+ end
75
+
76
+ def bind_single(name, value)
77
+ local_bindings = Puppet::Pops::Binder::BindingsFactory.named_bindings("testing")
78
+ local_bindings.bind().name(name).to(value)
79
+ local_bindings
80
+ end
81
+
82
+ def bound(local_bindings)
83
+ binder = Puppet::Pops::Binder::Binder.new
84
+ binder.define_categories(Puppet::Pops::Binder::BindingsFactory.categories([]))
85
+ binder.define_layers(Puppet::Pops::Binder::BindingsFactory.layered_bindings(Puppet::Pops::Binder::BindingsFactory.named_layer('test layer', local_bindings.model)))
86
+
87
+ binder
88
+ end
89
+
90
+ def ast_lambda(puppet_source)
91
+ puppet_source = "fake_func() " + puppet_source
92
+ model = Puppet::Pops::Parser::EvaluatingParser.new().parse_string(puppet_source, __FILE__).current
93
+ model = model.lambda
94
+ Puppet::Pops::Model::AstTransformer.new(@file_source, nil).transform(model)
95
+ end
96
+ end
@@ -16,11 +16,11 @@ describe "the regsubst function" do
16
16
  Puppet::Parser::Functions.function("regsubst").should == "function_regsubst"
17
17
  end
18
18
 
19
- it "should raise a ArgumentError if there is less than 3 arguments" do
19
+ it "should raise an ArgumentError if there is less than 3 arguments" do
20
20
  lambda { @scope.function_regsubst(["foo", "bar"]) }.should( raise_error(ArgumentError))
21
21
  end
22
22
 
23
- it "should raise a ArgumentError if there is more than 5 arguments" do
23
+ it "should raise an ArgumentError if there is more than 5 arguments" do
24
24
  lambda { @scope.function_regsubst(["foo", "bar", "gazonk", "del", "x", "y"]) }.should( raise_error(ArgumentError))
25
25
  end
26
26
 
@@ -16,11 +16,11 @@ describe "the split function" do
16
16
  Puppet::Parser::Functions.function("split").should == "function_split"
17
17
  end
18
18
 
19
- it "should raise a ArgumentError if there is less than 2 arguments" do
19
+ it "should raise an ArgumentError if there is less than 2 arguments" do
20
20
  lambda { @scope.function_split(["foo"]) }.should( raise_error(ArgumentError))
21
21
  end
22
22
 
23
- it "should raise a ArgumentError if there is more than 2 arguments" do
23
+ it "should raise an ArgumentError if there is more than 2 arguments" do
24
24
  lambda { @scope.function_split(["foo", "bar", "gazonk"]) }.should( raise_error(ArgumentError))
25
25
  end
26
26
 
@@ -16,7 +16,7 @@ describe "the sprintf function" do
16
16
  Puppet::Parser::Functions.function("sprintf").should == "function_sprintf"
17
17
  end
18
18
 
19
- it "should raise a ArgumentError if there is less than 1 argument" do
19
+ it "should raise an ArgumentError if there is less than 1 argument" do
20
20
  lambda { @scope.function_sprintf([]) }.should( raise_error(ArgumentError))
21
21
  end
22
22
 
@@ -16,11 +16,11 @@ describe "the versioncmp function" do
16
16
  Puppet::Parser::Functions.function("versioncmp").should == "function_versioncmp"
17
17
  end
18
18
 
19
- it "should raise a ArgumentError if there is less than 2 arguments" do
19
+ it "should raise an ArgumentError if there is less than 2 arguments" do
20
20
  lambda { @scope.function_versioncmp(["1.2"]) }.should raise_error(ArgumentError)
21
21
  end
22
22
 
23
- it "should raise a ArgumentError if there is more than 2 arguments" do
23
+ it "should raise an ArgumentError if there is more than 2 arguments" do
24
24
  lambda { @scope.function_versioncmp(["1.2", "2.4.5", "3.5.6"]) }.should raise_error(ArgumentError)
25
25
  end
26
26
 
@@ -38,7 +38,7 @@ describe Puppet::Parser::Functions do
38
38
  end
39
39
 
40
40
  it "should raise an error if the function type is not correct" do
41
- lambda { Puppet::Parser::Functions.newfunction("name", :type => :unknown) { |args| } }.should raise_error Puppet::DevError, "Invalid statement type :unknown"
41
+ expect { Puppet::Parser::Functions.newfunction("name", :type => :unknown) { |args| } }.to raise_error Puppet::DevError, "Invalid statement type :unknown"
42
42
  end
43
43
 
44
44
  it "instruments the function to profiles the execution" do
@@ -85,32 +85,32 @@ describe Puppet::Parser::Functions do
85
85
 
86
86
  it "should raise an error if the function is called with too many arguments" do
87
87
  Puppet::Parser::Functions.newfunction("name", :arity => 2) { |args| }
88
- lambda { callable_functions_from(function_module).function_name([1,2,3]) }.should raise_error ArgumentError
88
+ expect { callable_functions_from(function_module).function_name([1,2,3]) }.to raise_error ArgumentError
89
89
  end
90
90
 
91
91
  it "should raise an error if the function is called with too few arguments" do
92
92
  Puppet::Parser::Functions.newfunction("name", :arity => 2) { |args| }
93
- lambda { callable_functions_from(function_module).function_name([1]) }.should raise_error ArgumentError
93
+ expect { callable_functions_from(function_module).function_name([1]) }.to raise_error ArgumentError
94
94
  end
95
95
 
96
96
  it "should not raise an error if the function is called with correct number of arguments" do
97
97
  Puppet::Parser::Functions.newfunction("name", :arity => 2) { |args| }
98
- lambda { callable_functions_from(function_module).function_name([1,2]) }.should_not raise_error ArgumentError
98
+ expect { callable_functions_from(function_module).function_name([1,2]) }.to_not raise_error
99
99
  end
100
100
 
101
101
  it "should raise an error if the variable arg function is called with too few arguments" do
102
102
  Puppet::Parser::Functions.newfunction("name", :arity => -3) { |args| }
103
- lambda { callable_functions_from(function_module).function_name([1]) }.should raise_error ArgumentError
103
+ expect { callable_functions_from(function_module).function_name([1]) }.to raise_error ArgumentError
104
104
  end
105
105
 
106
106
  it "should not raise an error if the variable arg function is called with correct number of arguments" do
107
107
  Puppet::Parser::Functions.newfunction("name", :arity => -3) { |args| }
108
- lambda { callable_functions_from(function_module).function_name([1,2]) }.should_not raise_error ArgumentError
108
+ expect { callable_functions_from(function_module).function_name([1,2]) }.to_not raise_error
109
109
  end
110
110
 
111
111
  it "should not raise an error if the variable arg function is called with more number of arguments" do
112
112
  Puppet::Parser::Functions.newfunction("name", :arity => -3) { |args| }
113
- lambda { callable_functions_from(function_module).function_name([1,2,3]) }.should_not raise_error ArgumentError
113
+ expect { callable_functions_from(function_module).function_name([1,2,3]) }.to_not raise_error
114
114
  end
115
115
  end
116
116
 
@@ -855,7 +855,7 @@ describe "Puppet::Parser::Lexer in the old tests when lexing example files" do
855
855
  end
856
856
  end
857
857
 
858
- describe "when trying to lex an non-existent file" do
858
+ describe "when trying to lex a non-existent file" do
859
859
  include PuppetSpec::Files
860
860
 
861
861
  it "should return an empty list of tokens" do
@@ -38,6 +38,7 @@ describe 'the collect method' do
38
38
  catalog.resource(:file, "/file_b")['ensure'].should == 'present'
39
39
  catalog.resource(:file, "/file_c")['ensure'].should == 'present'
40
40
  end
41
+
41
42
  it 'foreach on a hash selecting value' do
42
43
  catalog = compile_to_catalog(<<-MANIFEST)
43
44
  $a = {'a'=>1,'b'=>2,'c'=>3}
@@ -51,6 +52,46 @@ describe 'the collect method' do
51
52
  catalog.resource(:file, "/file_3")['ensure'].should == 'present'
52
53
  end
53
54
  end
55
+
56
+ context "handles data type corner cases" do
57
+ it "collect gets values that are false" do
58
+ catalog = compile_to_catalog(<<-MANIFEST)
59
+ $a = [false,false]
60
+ $a.collect |$x| { $x }.each |$i, $v| {
61
+ file { "/file_$i.$v": ensure => present }
62
+ }
63
+ MANIFEST
64
+
65
+ catalog.resource(:file, "/file_0.false")['ensure'].should == 'present'
66
+ catalog.resource(:file, "/file_1.false")['ensure'].should == 'present'
67
+ end
68
+
69
+ it "collect gets values that are nil" do
70
+ Puppet::Parser::Functions.newfunction(:nil_array, :type => :rvalue) do |args|
71
+ [nil]
72
+ end
73
+ catalog = compile_to_catalog(<<-MANIFEST)
74
+ $a = nil_array()
75
+ $a.collect |$x| { $x }.each |$i, $v| {
76
+ file { "/file_$i.$v": ensure => present }
77
+ }
78
+ MANIFEST
79
+
80
+ catalog.resource(:file, "/file_0.")['ensure'].should == 'present'
81
+ end
82
+
83
+ it "collect gets values that are undef" do
84
+ catalog = compile_to_catalog(<<-MANIFEST)
85
+ $a = [$does_not_exist]
86
+ $a.collect |$x = "something"| { $x }.each |$i, $v| {
87
+ file { "/file_$i.$v": ensure => present }
88
+ }
89
+ MANIFEST
90
+
91
+ catalog.resource(:file, "/file_0.")['ensure'].should == 'present'
92
+ end
93
+ end
94
+
54
95
  context "in Java style should be callable as" do
55
96
  shared_examples_for 'java style' do
56
97
  it 'collect on an array (multiplying each value by 2)' do
@@ -92,11 +133,13 @@ describe 'the collect method' do
92
133
  catalog.resource(:file, "/file_3")['ensure'].should == 'present'
93
134
  end
94
135
  end
136
+
95
137
  describe 'without fat arrow' do
96
138
  it_should_behave_like 'java style' do
97
139
  let(:farr) { '' }
98
140
  end
99
141
  end
142
+
100
143
  describe 'with fat arrow' do
101
144
  it_should_behave_like 'java style' do
102
145
  let(:farr) { '=>' }