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
@@ -82,7 +82,7 @@ describe Puppet::Parser::Resource do
82
82
  @resource = Puppet::Parser::Resource.new("whatever", "whatever", :scope => @scope, :source => @source).isomorphic?.should be_true
83
83
  end
84
84
 
85
- it "should have a array-indexing method for retrieving parameter values" do
85
+ it "should have an array-indexing method for retrieving parameter values" do
86
86
  @resource = mkresource
87
87
  @resource[:one].should == "yay"
88
88
  end
@@ -181,7 +181,7 @@ describe Puppet::Parser::Resource do
181
181
  resource = Puppet::Parser::Resource.new(:class, "foo", :scope => @scope, :catalog => @catalog)
182
182
  resource[:stage] = 'other'
183
183
 
184
- lambda { resource.evaluate }.should raise_error(ArgumentError, /Could not find stage other specified by/)
184
+ expect { resource.evaluate }.to raise_error(ArgumentError, /Could not find stage other specified by/)
185
185
  end
186
186
 
187
187
  it "should add edges from the class resources to the parent's stage if no stage is specified" do
@@ -328,19 +328,19 @@ describe Puppet::Parser::Resource do
328
328
  end
329
329
 
330
330
  it "should fail on tags containing '*' characters" do
331
- lambda { @resource.tag("bad*tag") }.should raise_error(Puppet::ParseError)
331
+ expect { @resource.tag("bad*tag") }.to raise_error(Puppet::ParseError)
332
332
  end
333
333
 
334
334
  it "should fail on tags starting with '-' characters" do
335
- lambda { @resource.tag("-badtag") }.should raise_error(Puppet::ParseError)
335
+ expect { @resource.tag("-badtag") }.to raise_error(Puppet::ParseError)
336
336
  end
337
337
 
338
338
  it "should fail on tags containing ' ' characters" do
339
- lambda { @resource.tag("bad tag") }.should raise_error(Puppet::ParseError)
339
+ expect { @resource.tag("bad tag") }.to raise_error(Puppet::ParseError)
340
340
  end
341
341
 
342
342
  it "should allow alpha tags" do
343
- lambda { @resource.tag("good_tag") }.should_not raise_error(Puppet::ParseError)
343
+ expect { @resource.tag("good_tag") }.to_not raise_error
344
344
  end
345
345
  end
346
346
 
@@ -354,7 +354,7 @@ describe Puppet::Parser::Resource do
354
354
  it "should fail when the override was not created by a parent class" do
355
355
  @override.source = "source2"
356
356
  @override.source.expects(:child_of?).with("source1").returns(false)
357
- lambda { @resource.merge(@override) }.should raise_error(Puppet::ParseError)
357
+ expect { @resource.merge(@override) }.to raise_error(Puppet::ParseError)
358
358
  end
359
359
 
360
360
  it "should succeed when the override was created in the current scope" do
@@ -550,7 +550,7 @@ describe Puppet::Parser::Resource do
550
550
  resource = Puppet::Parser::Resource.new :foo, "bar", :scope => @scope, :source => stub("source")
551
551
  resource[:one] = :two
552
552
  resource.expects(:validate_parameter).with(:one).raises ArgumentError
553
- lambda { resource.send(:validate) }.should raise_error(Puppet::ParseError)
553
+ expect { resource.send(:validate) }.to raise_error(Puppet::ParseError)
554
554
  end
555
555
  end
556
556
 
@@ -567,7 +567,7 @@ describe Puppet::Parser::Resource do
567
567
  end
568
568
 
569
569
  it "should fail when provided a parameter name but no value" do
570
- lambda { @resource.set_parameter("myparam") }.should raise_error(ArgumentError)
570
+ expect { @resource.set_parameter("myparam") }.to raise_error(ArgumentError)
571
571
  end
572
572
 
573
573
  it "should allow parameters to be set to 'false'" do
@@ -142,8 +142,8 @@ describe Puppet::Parser::Scope do
142
142
  end
143
143
 
144
144
  it "should fail if invoked with a non-string name" do
145
- expect { @scope[:foo] }.to raise_error Puppet::DevError
146
- expect { @scope[:foo] = 12 }.to raise_error Puppet::DevError
145
+ expect { @scope[:foo] }.to raise_error(Puppet::ParseError, /Scope variable name .* not a string/)
146
+ expect { @scope[:foo] = 12 }.to raise_error(Puppet::ParseError, /Scope variable name .* not a string/)
147
147
  end
148
148
 
149
149
  it "should return nil for unset variables" do
@@ -612,4 +612,47 @@ describe Puppet::Parser::Scope do
612
612
  end
613
613
  end
614
614
  end
615
+
616
+ context "when producing a hash of all variables (as used in templates)" do
617
+ it "should contain all defined variables in the scope" do
618
+ @scope.setvar("orange", :tangerine)
619
+ @scope.setvar("pear", :green)
620
+ @scope.to_hash.should == {'orange' => :tangerine, 'pear' => :green }
621
+ end
622
+
623
+ it "should contain variables in all local scopes (#21508)" do
624
+ @scope.new_ephemeral true
625
+ @scope.setvar("orange", :tangerine)
626
+ @scope.setvar("pear", :green)
627
+ @scope.new_ephemeral true
628
+ @scope.setvar("apple", :red)
629
+ @scope.to_hash.should == {'orange' => :tangerine, 'pear' => :green, 'apple' => :red }
630
+ end
631
+
632
+ it "should contain all defined variables in the scope and all local scopes" do
633
+ @scope.setvar("orange", :tangerine)
634
+ @scope.setvar("pear", :green)
635
+ @scope.new_ephemeral true
636
+ @scope.setvar("apple", :red)
637
+ @scope.to_hash.should == {'orange' => :tangerine, 'pear' => :green, 'apple' => :red }
638
+ end
639
+
640
+ it "should not contain varaibles in match scopes (non local emphemeral)" do
641
+ @scope.new_ephemeral true
642
+ @scope.setvar("orange", :tangerine)
643
+ @scope.setvar("pear", :green)
644
+ @scope.ephemeral_from(/(f)(o)(o)/.match('foo'))
645
+ @scope.to_hash.should == {'orange' => :tangerine, 'pear' => :green }
646
+ end
647
+
648
+ it "should delete values that are :undef in inner scope" do
649
+ @scope.new_ephemeral true
650
+ @scope.setvar("orange", :tangerine)
651
+ @scope.setvar("pear", :green)
652
+ @scope.new_ephemeral true
653
+ @scope.setvar("apple", :red)
654
+ @scope.setvar("orange", :undef)
655
+ @scope.to_hash.should == {'pear' => :green, 'apple' => :red }
656
+ end
657
+ end
615
658
  end
@@ -11,235 +11,219 @@ describe Puppet::Parser::TypeLoader do
11
11
  include PuppetSpec::Modules
12
12
  include PuppetSpec::Files
13
13
 
14
- shared_examples_for 'the typeloader' do
15
- before do
16
- @loader = Puppet::Parser::TypeLoader.new(:myenv)
17
- Puppet.expects(:deprecation_warning).never
18
- end
14
+ let(:empty_hostclass) { Puppet::Parser::AST::Hostclass.new('') }
15
+ let(:loader) { Puppet::Parser::TypeLoader.new(:myenv) }
19
16
 
20
- it "should support an environment" do
21
- loader = Puppet::Parser::TypeLoader.new(:myenv)
22
- loader.environment.name.should == :myenv
23
- end
17
+ it "should support an environment" do
18
+ loader = Puppet::Parser::TypeLoader.new(:myenv)
19
+ loader.environment.name.should == :myenv
20
+ end
21
+
22
+ it "should include the Environment Helper" do
23
+ loader.class.ancestors.should be_include(Puppet::Node::Environment::Helper)
24
+ end
24
25
 
25
- it "should include the Environment Helper" do
26
- @loader.class.ancestors.should be_include(Puppet::Node::Environment::Helper)
26
+ it "should delegate its known resource types to its environment" do
27
+ loader.known_resource_types.should be_instance_of(Puppet::Resource::TypeCollection)
28
+ end
29
+
30
+ describe "when loading names from namespaces" do
31
+ it "should do nothing if the name to import is an empty string" do
32
+ loader.try_load_fqname(:hostclass, "").should be_nil
27
33
  end
28
34
 
29
- it "should delegate its known resource types to its environment" do
30
- @loader.known_resource_types.should be_instance_of(Puppet::Resource::TypeCollection)
35
+ it "should attempt to import each generated name" do
36
+ loader.expects(:import_from_modules).with("foo/bar").returns([])
37
+ loader.expects(:import_from_modules).with("foo").returns([])
38
+ loader.try_load_fqname(:hostclass, "foo::bar")
31
39
  end
32
40
 
33
- describe "when loading names from namespaces" do
34
- it "should do nothing if the name to import is an empty string" do
35
- @loader.expects(:name2files).never
36
- @loader.try_load_fqname(:hostclass, "") { |filename, modname| raise :should_not_occur }.should be_nil
41
+ it "should attempt to load each possible name going from most to least specific" do
42
+ path_order = sequence('path')
43
+ ['foo/bar/baz', 'foo/bar', 'foo'].each do |path|
44
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).with(path, anything).returns([nil, []]).in_sequence(path_order)
37
45
  end
38
46
 
39
- it "should attempt to import each generated name" do
40
- @loader.expects(:import_from_modules).with("foo/bar").returns([])
41
- @loader.expects(:import_from_modules).with("foo").returns([])
42
- @loader.try_load_fqname(:hostclass, "foo::bar") { |f| false }
43
- end
47
+ loader.try_load_fqname(:hostclass, 'foo::bar::baz')
44
48
  end
49
+ end
45
50
 
46
- describe "when importing" do
47
- before do
48
- Puppet::Parser::Files.stubs(:find_manifests_in_modules).returns ["modname", %w{file}]
49
- parser_class.any_instance.stubs(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
50
- parser_class.any_instance.stubs(:file=)
51
- end
51
+ describe "when importing" do
52
+ let(:stub_parser) { stub 'Parser', :file= => nil, :parse => empty_hostclass }
52
53
 
53
- it "should return immediately when imports are being ignored" do
54
- Puppet::Parser::Files.expects(:find_manifests_in_modules).never
55
- Puppet[:ignoreimport] = true
56
- @loader.import("foo", "/path").should be_nil
57
- end
54
+ before(:each) do
55
+ Puppet::Parser::ParserFactory.stubs(:parser).with(anything).returns(stub_parser)
56
+ end
58
57
 
59
- it "should find all manifests matching the file or pattern" do
60
- Puppet::Parser::Files.expects(:find_manifests_in_modules).with("myfile", anything).returns ["modname", %w{one}]
61
- @loader.import("myfile", "/path")
62
- end
58
+ it "should return immediately when imports are being ignored" do
59
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).never
60
+ Puppet[:ignoreimport] = true
61
+ loader.import("foo", "/path").should be_nil
62
+ end
63
63
 
64
- it "should pass the environment when looking for files" do
65
- Puppet::Parser::Files.expects(:find_manifests_in_modules).with(anything, @loader.environment).returns ["modname", %w{one}]
66
- @loader.import("myfile", "/path")
67
- end
64
+ it "should find all manifests matching the file or pattern" do
65
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).with("myfile", anything).returns ["modname", %w{one}]
66
+ loader.import("myfile", "/path")
67
+ end
68
68
 
69
- it "should fail if no files are found" do
70
- Puppet::Parser::Files.expects(:find_manifests_in_modules).returns [nil, []]
71
- lambda { @loader.import("myfile", "/path") }.should raise_error(Puppet::ImportError)
72
- end
69
+ it "should pass the environment when looking for files" do
70
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).with(anything, loader.environment).returns ["modname", %w{one}]
71
+ loader.import("myfile", "/path")
72
+ end
73
73
 
74
- it "should parse each found file" do
75
- Puppet::Parser::Files.expects(:find_manifests_in_modules).returns ["modname", [make_absolute("/one")]]
76
- @loader.expects(:parse_file).with(make_absolute("/one")).returns(Puppet::Parser::AST::Hostclass.new(''))
77
- @loader.import("myfile", "/path")
78
- end
74
+ it "should fail if no files are found" do
75
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).returns [nil, []]
76
+ lambda { loader.import("myfile", "/path") }.should raise_error(Puppet::ImportError)
77
+ end
79
78
 
80
- it "should not attempt to import files that have already been imported" do
81
- @loader = Puppet::Parser::TypeLoader.new(:myenv)
79
+ it "should parse each found file" do
80
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).returns ["modname", [make_absolute("/one")]]
81
+ loader.expects(:parse_file).with(make_absolute("/one")).returns(Puppet::Parser::AST::Hostclass.new(''))
82
+ loader.import("myfile", "/path")
83
+ end
82
84
 
83
- Puppet::Parser::Files.expects(:find_manifests_in_modules).returns ["modname", %w{/one}]
84
- parser_class.any_instance.expects(:parse).once.returns(Puppet::Parser::AST::Hostclass.new(''))
85
- other_parser_class.any_instance.expects(:parse).never.returns(Puppet::Parser::AST::Hostclass.new(''))
86
- @loader.import("myfile", "/path")
85
+ it "should not attempt to import files that have already been imported" do
86
+ loader = Puppet::Parser::TypeLoader.new(:myenv)
87
87
 
88
- # This will fail if it tries to reimport the file.
89
- @loader.import("myfile", "/path")
90
- end
88
+ Puppet::Parser::Files.expects(:find_manifests_in_modules).twice.returns ["modname", %w{/one}]
89
+ loader.import("myfile", "/path").should_not be_empty
90
+
91
+ loader.import("myfile", "/path").should be_empty
91
92
  end
93
+ end
92
94
 
93
- describe "when importing all" do
94
- before do
95
- @base = tmpdir("base")
95
+ describe "when importing all" do
96
+ before do
97
+ @base = tmpdir("base")
96
98
 
97
- # Create two module path directories
98
- @modulebase1 = File.join(@base, "first")
99
- FileUtils.mkdir_p(@modulebase1)
100
- @modulebase2 = File.join(@base, "second")
101
- FileUtils.mkdir_p(@modulebase2)
99
+ # Create two module path directories
100
+ @modulebase1 = File.join(@base, "first")
101
+ FileUtils.mkdir_p(@modulebase1)
102
+ @modulebase2 = File.join(@base, "second")
103
+ FileUtils.mkdir_p(@modulebase2)
102
104
 
103
- Puppet[:modulepath] = "#{@modulebase1}#{File::PATH_SEPARATOR}#{@modulebase2}"
104
- end
105
+ Puppet[:modulepath] = "#{@modulebase1}#{File::PATH_SEPARATOR}#{@modulebase2}"
106
+ end
105
107
 
106
- def mk_module(basedir, name)
107
- PuppetSpec::Modules.create(name, basedir)
108
- end
108
+ def mk_module(basedir, name)
109
+ PuppetSpec::Modules.create(name, basedir)
110
+ end
109
111
 
110
- # We have to pass the base path so that we can
111
- # write to modules that are in the second search path
112
- def mk_manifests(base, mod, type, files)
113
- exts = {"ruby" => ".rb", "puppet" => ".pp"}
114
- files.collect do |file|
115
- name = mod.name + "::" + file.gsub("/", "::")
116
- path = File.join(base, mod.name, "manifests", file + exts[type])
117
- FileUtils.mkdir_p(File.split(path)[0])
118
-
119
- # write out the class
120
- if type == "ruby"
121
- File.open(path, "w") { |f| f.print "hostclass '#{name}' do\nend" }
122
- else
123
- File.open(path, "w") { |f| f.print "class #{name} {}" }
124
- end
125
- name
112
+ # We have to pass the base path so that we can
113
+ # write to modules that are in the second search path
114
+ def mk_manifests(base, mod, type, files)
115
+ exts = {"ruby" => ".rb", "puppet" => ".pp"}
116
+ files.collect do |file|
117
+ name = mod.name + "::" + file.gsub("/", "::")
118
+ path = File.join(base, mod.name, "manifests", file + exts[type])
119
+ FileUtils.mkdir_p(File.split(path)[0])
120
+
121
+ # write out the class
122
+ if type == "ruby"
123
+ File.open(path, "w") { |f| f.print "hostclass '#{name}' do\nend" }
124
+ else
125
+ File.open(path, "w") { |f| f.print "class #{name} {}" }
126
126
  end
127
+ name
127
128
  end
129
+ end
128
130
 
129
- it "should load all puppet manifests from all modules in the specified environment" do
130
- @module1 = mk_module(@modulebase1, "one")
131
- @module2 = mk_module(@modulebase2, "two")
131
+ it "should load all puppet manifests from all modules in the specified environment" do
132
+ @module1 = mk_module(@modulebase1, "one")
133
+ @module2 = mk_module(@modulebase2, "two")
132
134
 
133
- mk_manifests(@modulebase1, @module1, "puppet", %w{a b})
134
- mk_manifests(@modulebase2, @module2, "puppet", %w{c d})
135
+ mk_manifests(@modulebase1, @module1, "puppet", %w{a b})
136
+ mk_manifests(@modulebase2, @module2, "puppet", %w{c d})
135
137
 
136
- @loader.import_all
138
+ loader.import_all
137
139
 
138
- @loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
139
- @loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
140
- @loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
141
- @loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
142
- end
140
+ loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
141
+ loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
142
+ loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
143
+ loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
144
+ end
143
145
 
144
- it "should load all ruby manifests from all modules in the specified environment" do
145
- Puppet.expects(:deprecation_warning).at_least(1)
146
+ it "should load all ruby manifests from all modules in the specified environment" do
147
+ Puppet.expects(:deprecation_warning).at_least(1)
146
148
 
147
- @module1 = mk_module(@modulebase1, "one")
148
- @module2 = mk_module(@modulebase2, "two")
149
+ @module1 = mk_module(@modulebase1, "one")
150
+ @module2 = mk_module(@modulebase2, "two")
149
151
 
150
- mk_manifests(@modulebase1, @module1, "ruby", %w{a b})
151
- mk_manifests(@modulebase2, @module2, "ruby", %w{c d})
152
+ mk_manifests(@modulebase1, @module1, "ruby", %w{a b})
153
+ mk_manifests(@modulebase2, @module2, "ruby", %w{c d})
152
154
 
153
- @loader.import_all
155
+ loader.import_all
154
156
 
155
- @loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
156
- @loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
157
- @loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
158
- @loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
159
- end
157
+ loader.environment.known_resource_types.hostclass("one::a").should be_instance_of(Puppet::Resource::Type)
158
+ loader.environment.known_resource_types.hostclass("one::b").should be_instance_of(Puppet::Resource::Type)
159
+ loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
160
+ loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
161
+ end
160
162
 
161
- it "should not load manifests from duplicate modules later in the module path" do
162
- @module1 = mk_module(@modulebase1, "one")
163
+ it "should not load manifests from duplicate modules later in the module path" do
164
+ @module1 = mk_module(@modulebase1, "one")
163
165
 
164
- # duplicate
165
- @module2 = mk_module(@modulebase2, "one")
166
+ # duplicate
167
+ @module2 = mk_module(@modulebase2, "one")
166
168
 
167
- mk_manifests(@modulebase1, @module1, "puppet", %w{a})
168
- mk_manifests(@modulebase2, @module2, "puppet", %w{c})
169
+ mk_manifests(@modulebase1, @module1, "puppet", %w{a})
170
+ mk_manifests(@modulebase2, @module2, "puppet", %w{c})
169
171
 
170
- @loader.import_all
172
+ loader.import_all
171
173
 
172
- @loader.environment.known_resource_types.hostclass("one::c").should be_nil
173
- end
174
+ loader.environment.known_resource_types.hostclass("one::c").should be_nil
175
+ end
174
176
 
175
- it "should load manifests from subdirectories" do
176
- @module1 = mk_module(@modulebase1, "one")
177
+ it "should load manifests from subdirectories" do
178
+ @module1 = mk_module(@modulebase1, "one")
177
179
 
178
- mk_manifests(@modulebase1, @module1, "puppet", %w{a a/b a/b/c})
180
+ mk_manifests(@modulebase1, @module1, "puppet", %w{a a/b a/b/c})
179
181
 
180
- @loader.import_all
182
+ loader.import_all
181
183
 
182
- @loader.environment.known_resource_types.hostclass("one::a::b").should be_instance_of(Puppet::Resource::Type)
183
- @loader.environment.known_resource_types.hostclass("one::a::b::c").should be_instance_of(Puppet::Resource::Type)
184
- end
184
+ loader.environment.known_resource_types.hostclass("one::a::b").should be_instance_of(Puppet::Resource::Type)
185
+ loader.environment.known_resource_types.hostclass("one::a::b::c").should be_instance_of(Puppet::Resource::Type)
185
186
  end
186
187
 
187
- describe "when parsing a file" do
188
- before do
189
- @parser = Puppet::Parser::ParserFactory.parser(@loader.environment)
190
- @parser.class.should == parser_class
191
- @parser.stubs(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
192
- @parser.stubs(:file=)
193
- Puppet::Parser::ParserFactory.stubs(:parser).with(@loader.environment).returns @parser
194
- end
188
+ it "should skip modules that don't have manifests" do
189
+ @module1 = mk_module(@modulebase1, "one")
190
+ @module2 = mk_module(@modulebase2, "two")
191
+ mk_manifests(@modulebase2, @module2, "ruby", %w{c d})
195
192
 
196
- it "should create a new parser instance for each file using the current environment" do
197
- Puppet::Parser::ParserFactory.expects(:parser).with(@loader.environment).returns @parser
198
- @loader.parse_file("/my/file")
199
- end
193
+ loader.import_all
200
194
 
201
- it "should assign the parser its file and parse" do
202
- @parser.expects(:file=).with("/my/file")
203
- @parser.expects(:parse).returns(Puppet::Parser::AST::Hostclass.new(''))
204
- @loader.parse_file("/my/file")
205
- end
195
+ loader.environment.known_resource_types.hostclass("one::a").should be_nil
196
+ loader.environment.known_resource_types.hostclass("two::c").should be_instance_of(Puppet::Resource::Type)
197
+ loader.environment.known_resource_types.hostclass("two::d").should be_instance_of(Puppet::Resource::Type)
206
198
  end
199
+ end
207
200
 
208
- it "should be able to add classes to the current resource type collection" do
209
- file = tmpfile("simple_file.pp")
210
- File.open(file, "w") { |f| f.puts "class foo {}" }
211
- @loader.import(File.basename(file), File.dirname(file))
201
+ describe "when parsing a file" do
202
+ it "should create a new parser instance for each file using the current environment" do
203
+ parser = stub 'Parser', :file= => nil, :parse => empty_hostclass
212
204
 
213
- @loader.known_resource_types.hostclass("foo").should be_instance_of(Puppet::Resource::Type)
214
- end
205
+ Puppet::Parser::ParserFactory.expects(:parser).twice.with(loader.environment).returns(parser)
215
206
 
216
- describe "when deciding where to look for files" do
217
- { 'foo' => ['foo'],
218
- 'foo::bar' => ['foo/bar', 'foo'],
219
- 'foo::bar::baz' => ['foo/bar/baz', 'foo/bar', 'foo']
220
- }.each do |fqname, expected_paths|
221
- it "should look for #{fqname.inspect} in #{expected_paths.inspect}" do
222
- @loader.instance_eval { name2files(fqname) }.should == expected_paths
223
- end
224
- end
225
- end
226
- end
227
- describe 'when using the classic parser' do
228
- before :each do
229
- Puppet[:parser] = 'current'
207
+ loader.parse_file("/my/file")
208
+ loader.parse_file("/my/other_file")
230
209
  end
231
- it_should_behave_like 'the typeloader' do
232
- let(:parser_class) { Puppet::Parser::Parser}
233
- let(:other_parser_class) { Puppet::Parser::EParserAdapter}
210
+
211
+ it "should assign the parser its file and parse" do
212
+ parser = mock 'parser'
213
+
214
+ Puppet::Parser::ParserFactory.expects(:parser).with(loader.environment).returns(parser)
215
+ parser.expects(:file=).with("/my/file")
216
+ parser.expects(:parse).returns(empty_hostclass)
217
+
218
+ loader.parse_file("/my/file")
234
219
  end
235
220
  end
236
- describe 'when using the future parser' do
237
- before :each do
238
- Puppet[:parser] = 'future'
239
- end
240
- it_should_behave_like 'the typeloader' do
241
- let(:parser_class) { Puppet::Parser::EParserAdapter}
242
- let(:other_parser_class) { Puppet::Parser::Parser}
243
- end
221
+
222
+ it "should be able to add classes to the current resource type collection" do
223
+ file = tmpfile("simple_file.pp")
224
+ File.open(file, "w") { |f| f.puts "class foo {}" }
225
+ loader.import(File.basename(file), File.dirname(file))
226
+
227
+ loader.known_resource_types.hostclass("foo").should be_instance_of(Puppet::Resource::Type)
244
228
  end
245
229
  end