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
@@ -80,7 +80,7 @@ describe Puppet::Resource::Type do
80
80
  lambda { Puppet::Resource::Type.new(:node, /foo/) }.should_not raise_error
81
81
  end
82
82
 
83
- it "should allow a AST::HostName instance as its name" do
83
+ it "should allow an AST::HostName instance as its name" do
84
84
  regex = Puppet::Parser::AST::Regex.new(:value => /foo/)
85
85
  name = Puppet::Parser::AST::HostName.new(:value => regex)
86
86
  lambda { Puppet::Resource::Type.new(:node, name) }.should_not raise_error
@@ -134,6 +134,10 @@ describe Puppet::Resource::Type do
134
134
  Puppet::Resource::Type.new(:node, /\w/).match("foo").should be_true
135
135
  end
136
136
 
137
+ it "should return true when its regex matches the provided name" do
138
+ Puppet::Resource::Type.new(:node, /\w/).match("foo").should be_true
139
+ end
140
+
137
141
  it "should return false when its regex does not match the provided name" do
138
142
  (!!Puppet::Resource::Type.new(:node, /\d/).match("foo")).should be_false
139
143
  end
@@ -396,13 +400,29 @@ describe Puppet::Resource::Type do
396
400
  @resource.environment.known_resource_types.add @type
397
401
  end
398
402
 
399
- it "should add hostclass names to the classes list" do
403
+ it "should add node regex captures to its scope" do
404
+ @type = Puppet::Resource::Type.new(:node, /f(\w)o(.*)$/)
405
+ match = @type.match('foo')
406
+
407
+ code = stub 'code'
408
+ @type.stubs(:code).returns code
409
+
410
+ subscope = stub 'subscope', :compiler => @compiler
411
+ @scope.expects(:newscope).with(:source => @type, :namespace => '', :resource => @resource).returns subscope
412
+
413
+ elevel = 876
414
+ subscope.expects(:ephemeral_level).returns elevel
415
+ subscope.expects(:ephemeral_from).with(match, nil, nil).returns subscope
416
+ code.expects(:safeevaluate).with(subscope)
417
+ subscope.expects(:unset_ephemeral_var).with(elevel)
418
+
419
+ # Just to keep the stub quiet about intermediate calls
420
+ @type.expects(:set_resource_parameters).with(@resource, subscope)
421
+
400
422
  @type.evaluate_code(@resource)
401
- @compiler.catalog.classes.should be_include("foo")
402
423
  end
403
424
 
404
- it "should add node names to the classes list" do
405
- @type = Puppet::Resource::Type.new(:node, "foo")
425
+ it "should add hostclass names to the classes list" do
406
426
  @type.evaluate_code(@resource)
407
427
  @compiler.catalog.classes.should be_include("foo")
408
428
  end
@@ -267,42 +267,45 @@ describe Puppet::Resource do
267
267
  end
268
268
 
269
269
  describe "when setting default parameters" do
270
- before do
271
- @scope = mock "Scope"
272
- @scope.stubs(:source).returns(nil)
270
+ let(:foo_node) { Puppet::Node.new('foo') }
271
+ let(:compiler) { Puppet::Parser::Compiler.new(foo_node) }
272
+ let(:scope) { Puppet::Parser::Scope.new(compiler) }
273
+
274
+ def ast_string(value)
275
+ Puppet::Parser::AST::String.new({:value => value})
273
276
  end
274
277
 
275
278
  it "should fail when asked to set default values and it is not a parser resource" do
276
279
  Puppet::Node::Environment.new.known_resource_types.add(
277
- Puppet::Resource::Type.new(:definition, "default_param", :arguments => {"a" => Puppet::Parser::AST::String.new(:value => "default")})
280
+ Puppet::Resource::Type.new(:definition, "default_param", :arguments => {"a" => ast_string("default")})
278
281
  )
279
282
  resource = Puppet::Resource.new("default_param", "name")
280
- lambda { resource.set_default_parameters(@scope) }.should raise_error(Puppet::DevError)
283
+ lambda { resource.set_default_parameters(scope) }.should raise_error(Puppet::DevError)
281
284
  end
282
285
 
283
286
  it "should evaluate and set any default values when no value is provided" do
284
287
  Puppet::Node::Environment.new.known_resource_types.add(
285
- Puppet::Resource::Type.new(:definition, "default_param", :arguments => {"a" => Puppet::Parser::AST::String.new(:value => "a_default_value")})
288
+ Puppet::Resource::Type.new(:definition, "default_param", :arguments => {"a" => ast_string("a_default_value")})
286
289
  )
287
- resource = Puppet::Parser::Resource.new("default_param", "name", :scope => Puppet::Parser::Scope.new(Puppet::Parser::Compiler.new(Puppet::Node.new("foo"))))
288
- resource.set_default_parameters(@scope)
290
+ resource = Puppet::Parser::Resource.new("default_param", "name", :scope => scope)
291
+ resource.set_default_parameters(scope)
289
292
  resource["a"].should == "a_default_value"
290
293
  end
291
294
 
292
295
  it "should skip attributes with no default value" do
293
296
  Puppet::Node::Environment.new.known_resource_types.add(
294
- Puppet::Resource::Type.new(:definition, "no_default_param", :arguments => {"a" => Puppet::Parser::AST::String.new(:value => "a_default_value")})
297
+ Puppet::Resource::Type.new(:definition, "no_default_param", :arguments => {"a" => ast_string("a_default_value")})
295
298
  )
296
- resource = Puppet::Parser::Resource.new("no_default_param", "name", :scope => Puppet::Parser::Scope.new(Puppet::Parser::Compiler.new(Puppet::Node.new("foo"))))
297
- lambda { resource.set_default_parameters(@scope) }.should_not raise_error
299
+ resource = Puppet::Parser::Resource.new("no_default_param", "name", :scope => scope)
300
+ lambda { resource.set_default_parameters(scope) }.should_not raise_error
298
301
  end
299
302
 
300
303
  it "should return the list of default parameters set" do
301
304
  Puppet::Node::Environment.new.known_resource_types.add(
302
- Puppet::Resource::Type.new(:definition, "default_param", :arguments => {"a" => Puppet::Parser::AST::String.new(:value => "a_default_value")})
305
+ Puppet::Resource::Type.new(:definition, "default_param", :arguments => {"a" => ast_string("a_default_value")})
303
306
  )
304
- resource = Puppet::Parser::Resource.new("default_param", "name", :scope => Puppet::Parser::Scope.new(Puppet::Parser::Compiler.new(Puppet::Node.new("foo"))))
305
- resource.set_default_parameters(@scope).should == ["a"]
307
+ resource = Puppet::Parser::Resource.new("default_param", "name", :scope => scope)
308
+ resource.set_default_parameters(scope).should == ["a"]
306
309
  end
307
310
 
308
311
  describe "when the resource type is :hostclass" do
@@ -315,26 +318,52 @@ describe Puppet::Resource do
315
318
  environment = Puppet::Node::Environment.new(environment_name)
316
319
  environment.known_resource_types.add(apache)
317
320
 
318
- @scope.stubs(:host).returns('host')
319
- @scope.stubs(:environment).returns(Puppet::Node::Environment.new(environment_name))
320
- @scope.stubs(:facts).returns(Puppet::Node::Facts.new("facts", fact_values))
321
+ scope.stubs(:host).returns('host')
322
+ scope.stubs(:environment).returns(Puppet::Node::Environment.new(environment_name))
323
+ scope.stubs(:facts).returns(Puppet::Node::Facts.new("facts", fact_values))
321
324
  end
322
325
 
323
326
  context "when no value is provided" do
327
+ before(:each) do
328
+ Puppet[:binder] = true
329
+ end
330
+
324
331
  let(:resource) do
325
- Puppet::Parser::Resource.new("class", "apache", :scope => @scope)
332
+ Puppet::Parser::Resource.new("class", "apache", :scope => scope)
326
333
  end
327
334
 
328
335
  it "should query the data_binding terminus using a namespaced key" do
329
336
  Puppet::DataBinding.indirection.expects(:find).with(
330
337
  'apache::port', all_of(has_key(:environment), has_key(:variables)))
331
- resource.set_default_parameters(@scope)
338
+ resource.set_default_parameters(scope)
339
+ end
340
+
341
+ it "should query the injector using a namespaced key" do
342
+ compiler.injector.expects(:lookup).with(scope, 'apache::port')
343
+ resource.set_default_parameters(scope)
332
344
  end
333
345
 
334
346
  it "should use the value from the data_binding terminus" do
335
347
  Puppet::DataBinding.indirection.expects(:find).returns('443')
336
348
 
337
- resource.set_default_parameters(@scope)
349
+ resource.set_default_parameters(scope)
350
+
351
+ resource[:port].should == '443'
352
+ end
353
+
354
+ it "should use the value from the injector" do
355
+ compiler.injector.expects(:lookup).with(scope, 'apache::port').returns('443')
356
+
357
+ resource.set_default_parameters(scope)
358
+
359
+ resource[:port].should == '443'
360
+ end
361
+
362
+ it "should not call the DataBinding terminus when injector produces a value" do
363
+ compiler.injector.expects(:lookup).with(scope, 'apache::port').returns('443')
364
+ Puppet::DataBinding.indirection.expects(:find).never()
365
+
366
+ resource.set_default_parameters(scope)
338
367
 
339
368
  resource[:port].should == '443'
340
369
  end
@@ -342,7 +371,15 @@ describe Puppet::Resource do
342
371
  it "should use the default value if the data_binding terminus returns nil" do
343
372
  Puppet::DataBinding.indirection.expects(:find).returns(nil)
344
373
 
345
- resource.set_default_parameters(@scope)
374
+ resource.set_default_parameters(scope)
375
+
376
+ resource[:port].should == '80'
377
+ end
378
+
379
+ it "should use the default value if the injector returns nil" do
380
+ compiler.injector.expects(:lookup).returns(nil)
381
+
382
+ resource.set_default_parameters(scope)
346
383
 
347
384
  resource[:port].should == '80'
348
385
  end
@@ -356,18 +393,25 @@ describe Puppet::Resource do
356
393
  end
357
394
 
358
395
  let(:resource) do
359
- Puppet::Parser::Resource.new("class", "apache", :scope => @scope,
396
+ Puppet::Parser::Resource.new("class", "apache", :scope => scope,
360
397
  :parameters => [port_parameter])
361
398
  end
362
399
 
363
400
  it "should not query the data_binding terminus" do
364
401
  Puppet::DataBinding.indirection.expects(:find).never
365
- resource.set_default_parameters(@scope)
402
+ resource.set_default_parameters(scope)
403
+ end
404
+
405
+ it "should not query the injector" do
406
+ # enable the injector
407
+ Puppet[:binder] = true
408
+ compiler.injector.expects(:find).never
409
+ resource.set_default_parameters(scope)
366
410
  end
367
411
 
368
412
  it "should use the value provided" do
369
413
  Puppet::DataBinding.indirection.expects(:find).never
370
- resource.set_default_parameters(@scope).should == []
414
+ resource.set_default_parameters(scope).should == []
371
415
  resource[:port].should == '8080'
372
416
  end
373
417
  end
@@ -155,5 +155,21 @@ describe Puppet::Run do
155
155
  run.background.should be_true
156
156
  run.status.should == 'success'
157
157
  end
158
+
159
+ it "should round trip through pson" do
160
+ run = Puppet::Run.new(
161
+ :tags => ['a', 'b', 'c'],
162
+ :ignoreschedules => true,
163
+ :pluginsync => false,
164
+ :background => true
165
+ )
166
+ run.instance_variable_set(:@status, true)
167
+
168
+ tripped = Puppet::Run.convert_from(:pson, run.render(:pson))
169
+
170
+ tripped.options.should == run.options
171
+ tripped.status.should == run.status
172
+ tripped.background.should == run.background
173
+ end
158
174
  end
159
175
  end
@@ -34,14 +34,15 @@ describe Puppet::Scheduler::Scheduler do
34
34
  job
35
35
  end
36
36
 
37
+ let(:scheduler) { Puppet::Scheduler::Scheduler.new(timer) }
38
+
37
39
  it "uses the minimum interval" do
38
40
  later_job = one_time_job(7)
39
41
  earlier_job = one_time_job(2)
40
- scheduler = Puppet::Scheduler::Scheduler.new([later_job, earlier_job], timer)
41
42
  later_job.last_run = now
42
43
  earlier_job.last_run = now
43
44
 
44
- scheduler.run_loop
45
+ scheduler.run_loop([later_job, earlier_job])
45
46
 
46
47
  timer.wait_for_calls.should == [2, 5]
47
48
  end
@@ -50,9 +51,8 @@ describe Puppet::Scheduler::Scheduler do
50
51
  enabled = one_time_job(7)
51
52
  enabled.last_run = now
52
53
  disabled = disabled_job(2)
53
- scheduler = Puppet::Scheduler::Scheduler.new([enabled, disabled], timer)
54
54
 
55
- scheduler.run_loop
55
+ scheduler.run_loop([enabled, disabled])
56
56
 
57
57
  timer.wait_for_calls.should == [7]
58
58
  end
@@ -60,46 +60,35 @@ describe Puppet::Scheduler::Scheduler do
60
60
  it "asks the timer to wait for the job interval" do
61
61
  job = one_time_job(5)
62
62
  job.last_run = now
63
- scheduler = Puppet::Scheduler::Scheduler.new([job], timer)
64
63
 
65
- scheduler.run_loop
64
+ scheduler.run_loop([job])
66
65
 
67
66
  timer.wait_for_calls.should == [5]
68
67
  end
69
68
 
70
69
  it "does not run when there are no jobs" do
71
- timer = mock 'no run timer'
72
- scheduler = Puppet::Scheduler::Scheduler.new([], timer)
73
-
74
- timer.stubs(:now).returns(now)
75
- timer.expects(:wait_for).never
70
+ scheduler.run_loop([])
76
71
 
77
- scheduler.run_loop
72
+ timer.wait_for_calls.should be_empty
78
73
  end
79
74
 
80
75
  it "does not run when there are only disabled jobs" do
81
- timer = mock 'no run timer'
82
76
  disabled_job = Puppet::Scheduler::Job.new(0)
83
- scheduler = Puppet::Scheduler::Scheduler.new([disabled_job], timer)
84
-
85
77
  disabled_job.disable
86
- timer.stubs(:now).returns(now)
87
- timer.expects(:wait_for).never
88
78
 
89
- scheduler.run_loop
79
+ scheduler.run_loop([disabled_job])
80
+
81
+ timer.wait_for_calls.should be_empty
90
82
  end
91
83
 
92
84
  it "stops running when there are no more enabled jobs" do
93
- timer = mock 'run once timer'
94
85
  disabling_job = Puppet::Scheduler::Job.new(0) do |j|
95
86
  j.disable
96
87
  end
97
- scheduler = Puppet::Scheduler::Scheduler.new([disabling_job], timer)
98
88
 
99
- timer.stubs(:now).returns(now)
100
- timer.expects(:wait_for).once
89
+ scheduler.run_loop([disabling_job])
101
90
 
102
- scheduler.run_loop
91
+ timer.wait_for_calls.size.should == 1
103
92
  end
104
93
 
105
94
  it "marks the start of the run loop" do
@@ -107,8 +96,7 @@ describe Puppet::Scheduler::Scheduler do
107
96
 
108
97
  disabled_job.disable
109
98
 
110
- scheduler = Puppet::Scheduler::Scheduler.new([disabled_job], timer)
111
- scheduler.run_loop
99
+ scheduler.run_loop([disabled_job])
112
100
 
113
101
  disabled_job.start_time.should == now
114
102
  end
@@ -121,8 +109,7 @@ describe Puppet::Scheduler::Scheduler do
121
109
  job.disable if countdown == 0
122
110
  end
123
111
 
124
- scheduler = Puppet::Scheduler::Scheduler.new([slow_job], timer)
125
- scheduler.run_loop
112
+ scheduler.run_loop([slow_job])
126
113
 
127
114
  timer.wait_for_calls.should == [0, 3, 7, 3]
128
115
  end
@@ -2,6 +2,11 @@ require 'spec_helper'
2
2
  require 'semver'
3
3
 
4
4
  describe SemVer do
5
+
6
+ describe 'MAX should be +Infinity' do
7
+ SemVer::MAX.major.infinite?.should == 1
8
+ end
9
+
5
10
  describe '::valid?' do
6
11
  it 'should validate basic version strings' do
7
12
  %w[ 0.0.0 999.999.999 v0.0.0 v999.999.999 ].each do |vstring|
@@ -0,0 +1,27 @@
1
+ require 'spec_helper'
2
+
3
+ require 'puppet/settings'
4
+
5
+ describe Puppet::Settings::EnumSetting do
6
+ it "allows a configured value" do
7
+ setting = enum_setting_allowing("allowed")
8
+
9
+ expect(setting.munge("allowed")).to eq("allowed")
10
+ end
11
+
12
+ it "disallows a value that is not configured" do
13
+ setting = enum_setting_allowing("allowed", "also allowed")
14
+
15
+ expect do
16
+ setting.munge("disallowed")
17
+ end.to raise_error(Puppet::Settings::ValidationError,
18
+ "Invalid value 'disallowed' for parameter testing. Allowed values are 'allowed', 'also allowed'")
19
+ end
20
+
21
+ def enum_setting_allowing(*values)
22
+ Puppet::Settings::EnumSetting.new(:settings => mock('settings'),
23
+ :name => "testing",
24
+ :desc => "description of testing",
25
+ :values => values)
26
+ end
27
+ end
@@ -266,7 +266,7 @@ describe Puppet::Settings do
266
266
  @settings[:myval] = "12"
267
267
  @settings.set_by_cli?(:myval).should be_false
268
268
  end
269
-
269
+
270
270
  describe "setbycli" do
271
271
  it "should generate a deprecation warning" do
272
272
  Puppet.expects(:deprecation_warning)
@@ -289,11 +289,17 @@ describe Puppet::Settings do
289
289
  @settings.define_settings :mysection,
290
290
  :one => { :default => "whah", :desc => "yay" },
291
291
  :two => { :default => "$one yay", :desc => "bah" }
292
+ @settings.expects(:unsafe_flush_cache)
292
293
  @settings[:two].should == "whah yay"
293
294
  @settings.handlearg("--one", "else")
294
295
  @settings[:two].should == "else yay"
295
296
  end
296
297
 
298
+ it "should clear the cache when the preferred_run_mode is changed" do
299
+ @settings.expects(:flush_cache)
300
+ @settings.preferred_run_mode = :master
301
+ end
302
+
297
303
  it "should not clear other values when setting getopt-specific values" do
298
304
  @settings[:myval] = "yay"
299
305
  @settings.handlearg("--no-bool", "")
@@ -477,7 +483,8 @@ describe Puppet::Settings do
477
483
  :one => { :default => "ONE", :desc => "a" },
478
484
  :two => { :default => "$one TWO", :desc => "b"},
479
485
  :three => { :default => "$one $two THREE", :desc => "c"},
480
- :four => { :default => "$two $three FOUR", :desc => "d"}
486
+ :four => { :default => "$two $three FOUR", :desc => "d"},
487
+ :five => { :default => nil, :desc => "e" }
481
488
  FileTest.stubs(:exist?).returns true
482
489
  end
483
490
 
@@ -535,6 +542,20 @@ describe Puppet::Settings do
535
542
  @settings[:two].should == "one TWO"
536
543
  end
537
544
 
545
+ describe "caching values that evaluate to false" do
546
+ it "caches nil" do
547
+ @settings.expects(:convert).once.returns nil
548
+ @settings[:five].should be_nil
549
+ @settings[:five].should be_nil
550
+ end
551
+
552
+ it "caches false" do
553
+ @settings.expects(:convert).once.returns false
554
+ @settings[:five].should == false
555
+ @settings[:five].should == false
556
+ end
557
+ end
558
+
538
559
  it "should not cache values such that information from one environment is returned for another environment" do
539
560
  text = "[env1]\none = oneval\n[env2]\none = twoval\n"
540
561
  @settings.stubs(:read_file).returns(text)
@@ -984,65 +1005,53 @@ describe Puppet::Settings do
984
1005
  @settings.stubs(:user_config_file).returns(@userconfig)
985
1006
  end
986
1007
 
987
- it "should use a LoadedFile instance to determine if the file has changed" do
988
- file = mock 'file'
989
- Puppet::Util::LoadedFile.expects(:new).with(@file).returns file
990
-
991
- file.expects(:changed?)
992
-
993
- @settings.stubs(:parse)
994
- @settings.reparse_config_files
995
- end
996
-
997
- it "should not create the LoadedFile instance and should not parse if the file does not exist" do
1008
+ it "does not create the WatchedFile instance and should not parse if the file does not exist" do
998
1009
  FileTest.expects(:exist?).with(@file).returns false
999
- Puppet::Util::LoadedFile.expects(:new).never
1010
+ Puppet::Util::WatchedFile.expects(:new).never
1000
1011
 
1001
1012
  @settings.expects(:parse_config_files).never
1002
1013
 
1003
1014
  @settings.reparse_config_files
1004
1015
  end
1005
1016
 
1006
- it "should not reparse if the file has not changed" do
1007
- file = mock 'file'
1008
- Puppet::Util::LoadedFile.expects(:new).with(@file).returns file
1017
+ context "and watched file exists" do
1018
+ before do
1019
+ @watched_file = Puppet::Util::WatchedFile.new(@file)
1020
+ Puppet::Util::WatchedFile.expects(:new).with(@file).returns @watched_file
1021
+ end
1009
1022
 
1010
- file.expects(:changed?).returns false
1023
+ it "uses a WatchedFile instance to determine if the file has changed" do
1024
+ @watched_file.expects(:changed?)
1011
1025
 
1012
- @settings.expects(:parse_config_files).never
1026
+ @settings.reparse_config_files
1027
+ end
1013
1028
 
1014
- @settings.reparse_config_files
1015
- end
1029
+ it "does not reparse if the file has not changed" do
1030
+ @watched_file.expects(:changed?).returns false
1016
1031
 
1017
- it "should reparse if the file has changed" do
1018
- file = stub 'file', :file => @file
1019
- Puppet::Util::LoadedFile.expects(:new).with(@file).returns file
1032
+ @settings.expects(:parse_config_files).never
1020
1033
 
1021
- file.expects(:changed?).returns true
1034
+ @settings.reparse_config_files
1035
+ end
1022
1036
 
1023
- @settings.expects(:parse_config_files)
1037
+ it "reparses if the file has changed" do
1038
+ @watched_file.expects(:changed?).returns true
1024
1039
 
1025
- @settings.reparse_config_files
1026
- end
1040
+ @settings.expects(:unsafe_parse).with(@file)
1027
1041
 
1028
- it "should replace in-memory values with on-file values" do
1029
- # Init the value
1030
- text = "[main]\none = disk-init\n"
1031
- file = mock 'file'
1032
- file.stubs(:changed?).returns(true)
1033
- file.stubs(:file).returns(@file)
1034
- @settings[:one] = "init"
1035
- @settings.files = [file]
1042
+ @settings.reparse_config_files
1043
+ end
1036
1044
 
1037
- # Now replace the value
1038
- text = "[main]\none = disk-replace\n"
1045
+ it "replaces in-memory values with on-file values" do
1046
+ @watched_file.stubs(:changed?).returns(true)
1047
+ @settings[:one] = "init"
1039
1048
 
1040
- # This is kinda ridiculous - the reason it parses twice is that
1041
- # it goes to parse again when we ask for the value, because the
1042
- # mock always says it should get reparsed.
1043
- @settings.stubs(:read_file).returns(text)
1044
- @settings.reparse_config_files
1045
- @settings[:one].should == "disk-replace"
1049
+ # Now replace the value
1050
+ text = "[main]\none = disk-replace\n"
1051
+ @settings.stubs(:read_file).returns(text)
1052
+ @settings.reparse_config_files
1053
+ @settings[:one].should == "disk-replace"
1054
+ end
1046
1055
  end
1047
1056
 
1048
1057
  it "should retain parameters set by cli when configuration files are reparsed" do