puppet 3.8.7 → 4.0.0.rc1

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 (1586) hide show
  1. data/CONTRIBUTING.md +26 -11
  2. data/Gemfile +13 -25
  3. data/LICENSE +1 -1
  4. data/Rakefile +9 -0
  5. data/bin/puppet +7 -6
  6. data/conf/auth.conf +30 -26
  7. data/conf/environment.conf +16 -0
  8. data/conf/fileserver.conf +2 -2
  9. data/conf/puppet.conf +6 -0
  10. data/ext/README.environment +1 -1
  11. data/ext/build_defaults.yaml +16 -7
  12. data/ext/debian/control +5 -5
  13. data/ext/debian/puppet-common.manpages +0 -5
  14. data/ext/debian/puppet-common.postinst +3 -3
  15. data/ext/debian/puppet.init +23 -12
  16. data/ext/debian/puppet.logrotate +1 -2
  17. data/ext/debian/puppetmaster-common.postinst +6 -0
  18. data/ext/debian/puppetmaster.init +5 -5
  19. data/ext/debian/rules +4 -1
  20. data/ext/debian/vim-puppet.dirs +2 -0
  21. data/ext/debian/vim-puppet.yaml +2 -0
  22. data/ext/emacs/puppet-mode.el +0 -1
  23. data/ext/gentoo/conf.d/puppet +1 -1
  24. data/ext/gentoo/conf.d/puppetmaster +1 -1
  25. data/ext/nagios/check_puppet.rb +1 -1
  26. data/ext/project_data.yaml +6 -7
  27. data/ext/puppet-nm-dispatcher +13 -0
  28. data/ext/puppet-test +0 -66
  29. data/ext/puppetlisten/puppetlisten.rb +7 -5
  30. data/ext/rack/config.ru +12 -5
  31. data/ext/redhat/client.init +3 -3
  32. data/ext/redhat/logrotate +1 -2
  33. data/ext/redhat/puppet.spec.erb +12 -8
  34. data/ext/redhat/server.init +1 -1
  35. data/ext/regexp_nodes/regexp_nodes.rb +1 -1
  36. data/ext/solaris/smf/svc-puppetd +1 -1
  37. data/ext/solaris/smf/svc-puppetmasterd +1 -1
  38. data/ext/suse/client.init +1 -1
  39. data/ext/suse/server.init +1 -1
  40. data/ext/systemd/puppet.service +1 -3
  41. data/ext/vim/syntax/puppet.vim +1 -1
  42. data/ext/windows/service/daemon.rb +19 -2
  43. data/install.rb +63 -7
  44. data/lib/hiera/puppet_function.rb +7 -18
  45. data/lib/hiera/scope.rb +4 -1
  46. data/lib/puppet.rb +19 -51
  47. data/lib/puppet/agent.rb +2 -6
  48. data/lib/puppet/application.rb +14 -65
  49. data/lib/puppet/application/agent.rb +7 -56
  50. data/lib/puppet/application/apply.rb +1 -6
  51. data/lib/puppet/application/ca.rb +5 -0
  52. data/lib/puppet/application/cert.rb +7 -3
  53. data/lib/puppet/application/certificate.rb +2 -0
  54. data/lib/puppet/application/device.rb +10 -36
  55. data/lib/puppet/application/doc.rb +16 -63
  56. data/lib/puppet/application/epp.rb +5 -0
  57. data/lib/puppet/application/face_base.rb +24 -5
  58. data/lib/puppet/application/master.rb +2 -5
  59. data/lib/puppet/application/resource.rb +17 -17
  60. data/lib/puppet/application_support.rb +57 -0
  61. data/lib/puppet/configurer.rb +3 -7
  62. data/lib/puppet/configurer/downloader.rb +1 -0
  63. data/lib/puppet/configurer/fact_handler.rb +1 -1
  64. data/lib/puppet/daemon.rb +6 -15
  65. data/lib/puppet/data_providers.rb +28 -0
  66. data/lib/puppet/data_providers/data_adapter.rb +86 -0
  67. data/lib/puppet/data_providers/data_function_support.rb +32 -0
  68. data/lib/puppet/data_providers/function_env_data_provider.rb +28 -0
  69. data/lib/puppet/data_providers/function_module_data_provider.rb +44 -0
  70. data/lib/puppet/defaults.rb +135 -530
  71. data/lib/puppet/environments.rb +10 -156
  72. data/lib/puppet/error.rb +4 -30
  73. data/lib/puppet/external/nagios/base.rb +2 -2
  74. data/lib/puppet/external/pson/common.rb +2 -17
  75. data/lib/puppet/external/pson/pure/generator.rb +1 -0
  76. data/lib/puppet/external/pson/pure/parser.rb +0 -11
  77. data/lib/puppet/face/catalog.rb +4 -4
  78. data/lib/puppet/face/certificate.rb +2 -3
  79. data/lib/puppet/face/certificate_request.rb +4 -3
  80. data/lib/puppet/face/certificate_revocation_list.rb +5 -9
  81. data/lib/puppet/face/config.rb +2 -2
  82. data/lib/puppet/face/epp.rb +479 -0
  83. data/lib/puppet/face/facts.rb +6 -49
  84. data/lib/puppet/face/file.rb +2 -2
  85. data/lib/puppet/face/file/download.rb +1 -2
  86. data/lib/puppet/face/help.rb +2 -3
  87. data/lib/puppet/face/module/build.rb +5 -5
  88. data/lib/puppet/face/module/changes.rb +1 -1
  89. data/lib/puppet/face/module/generate.rb +6 -6
  90. data/lib/puppet/face/module/install.rb +16 -16
  91. data/lib/puppet/face/module/list.rb +9 -9
  92. data/lib/puppet/face/module/uninstall.rb +5 -5
  93. data/lib/puppet/face/module/upgrade.rb +3 -3
  94. data/lib/puppet/face/node.rb +3 -4
  95. data/lib/puppet/face/node/clean.rb +5 -68
  96. data/lib/puppet/face/parser.rb +6 -8
  97. data/lib/puppet/face/report.rb +4 -4
  98. data/lib/puppet/face/resource.rb +1 -1
  99. data/lib/puppet/face/resource_type.rb +7 -4
  100. data/lib/puppet/face/status.rb +6 -12
  101. data/lib/puppet/feature/base.rb +0 -7
  102. data/lib/puppet/file_bucket/dipper.rb +1 -2
  103. data/lib/puppet/file_bucket/file.rb +12 -25
  104. data/lib/puppet/file_serving/base.rb +1 -11
  105. data/lib/puppet/file_serving/content.rb +5 -7
  106. data/lib/puppet/file_serving/metadata.rb +4 -61
  107. data/lib/puppet/file_serving/mount/pluginfacts.rb +1 -1
  108. data/lib/puppet/file_serving/mount/plugins.rb +1 -1
  109. data/lib/puppet/file_serving/terminus_helper.rb +16 -5
  110. data/lib/puppet/file_system.rb +6 -22
  111. data/lib/puppet/file_system/file_impl.rb +0 -4
  112. data/lib/puppet/file_system/memory_file.rb +0 -5
  113. data/lib/puppet/file_system/memory_impl.rb +0 -4
  114. data/lib/puppet/file_system/{file19.rb → posix.rb} +1 -1
  115. data/lib/puppet/file_system/{file19windows.rb → windows.rb} +2 -10
  116. data/lib/puppet/forge/repository.rb +12 -8
  117. data/lib/puppet/functions.rb +17 -51
  118. data/lib/puppet/functions/assert_type.rb +7 -7
  119. data/lib/puppet/functions/each.rb +1 -3
  120. data/lib/puppet/functions/epp.rb +3 -3
  121. data/lib/puppet/functions/filter.rb +3 -5
  122. data/lib/puppet/functions/hiera.rb +2 -23
  123. data/lib/puppet/functions/hiera_array.rb +3 -25
  124. data/lib/puppet/functions/hiera_hash.rb +2 -26
  125. data/lib/puppet/functions/hiera_include.rb +4 -37
  126. data/lib/puppet/functions/inline_epp.rb +1 -2
  127. data/lib/puppet/functions/lookup.rb +234 -0
  128. data/lib/puppet/functions/map.rb +1 -3
  129. data/lib/puppet/functions/match.rb +5 -5
  130. data/lib/puppet/functions/reduce.rb +1 -3
  131. data/lib/puppet/functions/regsubst.rb +79 -0
  132. data/lib/puppet/functions/scanf.rb +4 -3
  133. data/lib/puppet/functions/slice.rb +1 -3
  134. data/lib/puppet/functions/split.rb +47 -0
  135. data/lib/puppet/functions/with.rb +1 -1
  136. data/lib/puppet/graph/relationship_graph.rb +41 -13
  137. data/lib/puppet/graph/simple_graph.rb +6 -10
  138. data/lib/puppet/indirector/catalog/compiler.rb +0 -2
  139. data/lib/puppet/indirector/catalog/static_compiler.rb +4 -5
  140. data/lib/puppet/indirector/direct_file_server.rb +1 -3
  141. data/lib/puppet/indirector/face.rb +11 -2
  142. data/lib/puppet/indirector/facts/facter.rb +5 -1
  143. data/lib/puppet/indirector/facts/network_device.rb +5 -2
  144. data/lib/puppet/indirector/facts/store_configs.rb +3 -0
  145. data/lib/puppet/indirector/facts/yaml.rb +4 -0
  146. data/lib/puppet/indirector/file_metadata/file.rb +0 -15
  147. data/lib/puppet/indirector/file_server.rb +2 -16
  148. data/lib/puppet/indirector/hiera.rb +39 -1
  149. data/lib/puppet/indirector/indirection.rb +2 -9
  150. data/lib/puppet/indirector/node/ldap.rb +1 -1
  151. data/lib/puppet/indirector/request.rb +21 -81
  152. data/lib/puppet/indirector/resource/ral.rb +1 -2
  153. data/lib/puppet/indirector/resource/store_configs.rb +1 -2
  154. data/lib/puppet/indirector/resource_type/parser.rb +1 -1
  155. data/lib/puppet/indirector/rest.rb +21 -33
  156. data/lib/puppet/interface.rb +0 -7
  157. data/lib/puppet/interface/action_builder.rb +1 -1
  158. data/lib/puppet/interface/action_manager.rb +9 -13
  159. data/lib/puppet/interface/face_collection.rb +2 -2
  160. data/lib/puppet/interface/option_builder.rb +1 -3
  161. data/lib/puppet/metatype/manager.rb +1 -7
  162. data/lib/puppet/module.rb +42 -35
  163. data/lib/puppet/module_tool.rb +5 -7
  164. data/lib/puppet/module_tool/applications/application.rb +3 -10
  165. data/lib/puppet/module_tool/applications/installer.rb +13 -15
  166. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  167. data/lib/puppet/module_tool/applications/upgrader.rb +9 -11
  168. data/lib/puppet/module_tool/contents_description.rb +17 -13
  169. data/lib/puppet/module_tool/installed_modules.rb +4 -6
  170. data/lib/puppet/module_tool/metadata.rb +3 -14
  171. data/lib/puppet/module_tool/skeleton/templates/generator/Gemfile +3 -3
  172. data/lib/puppet/module_tool/skeleton/templates/generator/Rakefile +0 -1
  173. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +1 -1
  174. data/lib/puppet/module_tool/tar/gnu.rb +1 -1
  175. data/lib/puppet/module_tool/tar/mini.rb +2 -2
  176. data/lib/puppet/network/auth_config_parser.rb +2 -2
  177. data/lib/puppet/network/authconfig.rb +32 -16
  178. data/lib/puppet/network/format_handler.rb +7 -7
  179. data/lib/puppet/network/format_support.rb +4 -0
  180. data/lib/puppet/network/formats.rb +6 -62
  181. data/lib/puppet/network/http.rb +12 -2
  182. data/lib/puppet/network/http/api.rb +42 -0
  183. data/lib/puppet/network/http/api/ca.rb +2 -0
  184. data/lib/puppet/network/http/api/ca/v1.rb +11 -0
  185. data/lib/puppet/network/http/api/{v1.rb → indirected_routes.rb} +57 -29
  186. data/lib/puppet/network/http/api/indirection_type.rb +32 -0
  187. data/lib/puppet/network/http/api/master.rb +2 -0
  188. data/lib/puppet/network/http/api/master/v3.rb +22 -0
  189. data/lib/puppet/network/http/api/master/v3/authorization.rb +18 -0
  190. data/lib/puppet/network/http/api/{v2 → master/v3}/environments.rb +2 -2
  191. data/lib/puppet/network/http/compression.rb +3 -5
  192. data/lib/puppet/network/http/connection.rb +1 -8
  193. data/lib/puppet/network/http/factory.rb +2 -3
  194. data/lib/puppet/network/http/handler.rb +3 -11
  195. data/lib/puppet/network/http/rack/rest.rb +4 -4
  196. data/lib/puppet/network/http/request.rb +4 -4
  197. data/lib/puppet/network/http/webrick.rb +1 -6
  198. data/lib/puppet/network/http/webrick/rest.rb +15 -8
  199. data/lib/puppet/network/resolver.rb +2 -2
  200. data/lib/puppet/network/rights.rb +2 -2
  201. data/lib/puppet/node.rb +2 -29
  202. data/lib/puppet/node/environment.rb +92 -184
  203. data/lib/puppet/node/facts.rb +22 -44
  204. data/lib/puppet/parameter.rb +3 -16
  205. data/lib/puppet/parameter/value.rb +1 -3
  206. data/lib/puppet/parameter/value_collection.rb +12 -11
  207. data/lib/puppet/parser.rb +12 -2
  208. data/lib/puppet/parser/ast.rb +9 -78
  209. data/lib/puppet/parser/ast/block_expression.rb +11 -36
  210. data/lib/puppet/parser/ast/branch.rb +15 -18
  211. data/lib/puppet/parser/ast/hostclass.rb +1 -3
  212. data/lib/puppet/parser/ast/leaf.rb +55 -212
  213. data/lib/puppet/parser/ast/node.rb +3 -11
  214. data/lib/puppet/parser/ast/pops_bridge.rb +2 -7
  215. data/lib/puppet/parser/ast/resource.rb +14 -20
  216. data/lib/puppet/parser/ast/resource_instance.rb +4 -7
  217. data/lib/puppet/parser/ast/resourceparam.rb +21 -22
  218. data/lib/puppet/parser/compiler.rb +41 -70
  219. data/lib/puppet/parser/e4_parser_adapter.rb +2 -23
  220. data/lib/puppet/parser/files.rb +22 -67
  221. data/lib/puppet/parser/functions.rb +1 -3
  222. data/lib/puppet/parser/functions/assert_type.rb +1 -2
  223. data/lib/puppet/parser/functions/contain.rb +5 -3
  224. data/lib/puppet/parser/functions/create_resources.rb +9 -1
  225. data/lib/puppet/parser/functions/defined.rb +33 -61
  226. data/lib/puppet/parser/functions/each.rb +1 -3
  227. data/lib/puppet/parser/functions/epp.rb +1 -2
  228. data/lib/puppet/parser/functions/file.rb +1 -3
  229. data/lib/puppet/parser/functions/filter.rb +1 -3
  230. data/lib/puppet/parser/functions/hiera.rb +4 -6
  231. data/lib/puppet/parser/functions/hiera_array.rb +4 -6
  232. data/lib/puppet/parser/functions/hiera_hash.rb +6 -8
  233. data/lib/puppet/parser/functions/hiera_include.rb +2 -10
  234. data/lib/puppet/parser/functions/include.rb +4 -2
  235. data/lib/puppet/parser/functions/lookup.rb +115 -105
  236. data/lib/puppet/parser/functions/map.rb +1 -3
  237. data/lib/puppet/parser/functions/match.rb +1 -2
  238. data/lib/puppet/parser/functions/realize.rb +1 -6
  239. data/lib/puppet/parser/functions/reduce.rb +1 -3
  240. data/lib/puppet/parser/functions/regsubst.rb +1 -57
  241. data/lib/puppet/parser/functions/require.rb +6 -4
  242. data/lib/puppet/parser/functions/scanf.rb +1 -1
  243. data/lib/puppet/parser/functions/slice.rb +1 -3
  244. data/lib/puppet/parser/functions/split.rb +1 -1
  245. data/lib/puppet/parser/functions/with.rb +1 -2
  246. data/lib/puppet/parser/parser_factory.rb +5 -21
  247. data/lib/puppet/parser/relationship.rb +14 -37
  248. data/lib/puppet/parser/resource.rb +11 -22
  249. data/lib/puppet/parser/scope.rb +45 -135
  250. data/lib/puppet/parser/templatewrapper.rb +1 -29
  251. data/lib/puppet/parser/type_loader.rb +12 -15
  252. data/lib/puppet/plugins.rb +9 -0
  253. data/lib/{puppetx/puppet/bindings_scheme_handler.rb → puppet/plugins/binding_schemes.rb} +14 -4
  254. data/lib/puppet/plugins/configuration.rb +68 -0
  255. data/lib/puppet/plugins/data_providers.rb +90 -0
  256. data/lib/{puppetx/puppet/syntax_checker.rb → puppet/plugins/syntax_checkers.rb} +14 -2
  257. data/lib/puppet/pops.rb +6 -7
  258. data/lib/puppet/pops/adaptable.rb +16 -5
  259. data/lib/puppet/pops/binder/binder.rb +5 -4
  260. data/lib/puppet/pops/binder/bindings_composer.rb +6 -4
  261. data/lib/puppet/pops/binder/bindings_factory.rb +4 -0
  262. data/lib/puppet/pops/binder/bindings_label_provider.rb +1 -1
  263. data/lib/puppet/pops/binder/bindings_loader.rb +3 -8
  264. data/lib/puppet/pops/binder/bindings_model_dumper.rb +36 -8
  265. data/lib/puppet/pops/binder/config/binder_config.rb +2 -2
  266. data/lib/puppet/pops/binder/config/binder_config_checker.rb +1 -1
  267. data/lib/puppet/pops/binder/config/issues.rb +4 -0
  268. data/lib/puppet/pops/binder/injector.rb +0 -1
  269. data/lib/puppet/pops/binder/scheme_handler/symbolic_scheme.rb +1 -1
  270. data/lib/puppet/pops/evaluator/access_operator.rb +18 -50
  271. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +5 -5
  272. data/lib/puppet/pops/evaluator/callable_signature.rb +2 -2
  273. data/lib/puppet/pops/evaluator/closure.rb +16 -21
  274. data/lib/puppet/pops/evaluator/collector_transformer.rb +11 -1
  275. data/lib/puppet/pops/evaluator/compare_operator.rb +0 -43
  276. data/lib/puppet/pops/evaluator/epp_evaluator.rb +1 -1
  277. data/lib/puppet/pops/evaluator/evaluator_impl.rb +36 -152
  278. data/lib/puppet/pops/evaluator/external_syntax_support.rb +6 -3
  279. data/lib/puppet/pops/evaluator/relationship_operator.rb +1 -1
  280. data/lib/puppet/pops/evaluator/runtime3_converter.rb +1 -1
  281. data/lib/puppet/pops/evaluator/runtime3_support.rb +9 -57
  282. data/lib/puppet/pops/functions/dispatch.rb +1 -6
  283. data/lib/puppet/pops/issue_reporter.rb +16 -42
  284. data/lib/puppet/pops/issues.rb +13 -128
  285. data/lib/puppet/pops/loader/dependency_loader.rb +3 -3
  286. data/lib/puppet/pops/loader/loader.rb +21 -20
  287. data/lib/puppet/pops/loaders.rb +13 -8
  288. data/lib/puppet/pops/lookup.rb +96 -0
  289. data/lib/puppet/pops/merge_strategy.rb +283 -0
  290. data/lib/puppet/pops/model/ast_transformer.rb +4 -522
  291. data/lib/puppet/pops/model/factory.rb +20 -21
  292. data/lib/puppet/pops/model/model.rb +1 -1
  293. data/lib/puppet/pops/model/model_label_provider.rb +1 -1
  294. data/lib/puppet/pops/model/model_meta.rb +10 -7
  295. data/lib/puppet/pops/model/tree_dumper.rb +1 -1
  296. data/lib/puppet/pops/parser/egrammar.ra +1 -13
  297. data/lib/puppet/pops/parser/eparser.rb +1132 -1272
  298. data/lib/puppet/pops/parser/epp_support.rb +11 -22
  299. data/lib/puppet/pops/parser/evaluating_parser.rb +11 -10
  300. data/lib/puppet/pops/parser/heredoc_support.rb +12 -13
  301. data/lib/puppet/pops/parser/interpolation_support.rb +1 -7
  302. data/lib/puppet/pops/parser/lexer2.rb +33 -36
  303. data/lib/puppet/pops/parser/lexer_support.rb +20 -46
  304. data/lib/puppet/pops/parser/locator.rb +6 -30
  305. data/lib/puppet/pops/parser/parser_support.rb +14 -11
  306. data/lib/puppet/pops/parser/slurp_support.rb +6 -22
  307. data/lib/puppet/pops/patterns.rb +0 -3
  308. data/lib/puppet/pops/types/class_loader.rb +8 -8
  309. data/lib/puppet/pops/types/enumeration.rb +1 -1
  310. data/lib/puppet/pops/types/type_asserter.rb +45 -0
  311. data/lib/puppet/pops/types/type_assertion_error.rb +26 -0
  312. data/lib/puppet/pops/types/type_calculator.rb +110 -212
  313. data/lib/puppet/pops/types/type_factory.rb +15 -74
  314. data/lib/puppet/pops/types/type_parser.rb +15 -24
  315. data/lib/puppet/pops/types/types.rb +25 -35
  316. data/lib/puppet/pops/types/types_meta.rb +2 -13
  317. data/lib/puppet/pops/utils.rb +1 -1
  318. data/lib/puppet/pops/validation.rb +3 -26
  319. data/lib/puppet/pops/validation/checker4_0.rb +6 -56
  320. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -3
  321. data/lib/puppet/pops/visitor.rb +10 -7
  322. data/lib/puppet/property.rb +44 -124
  323. data/lib/puppet/provider.rb +0 -52
  324. data/lib/puppet/provider/aixobject.rb +2 -2
  325. data/lib/puppet/provider/augeas/augeas.rb +9 -6
  326. data/lib/puppet/provider/command.rb +1 -1
  327. data/lib/puppet/provider/cron/crontab.rb +37 -0
  328. data/lib/puppet/provider/exec.rb +2 -16
  329. data/lib/puppet/provider/file/posix.rb +1 -1
  330. data/lib/puppet/provider/file/windows.rb +1 -1
  331. data/lib/puppet/provider/group/aix.rb +1 -1
  332. data/lib/puppet/provider/group/pw.rb +0 -1
  333. data/lib/puppet/provider/group/windows_adsi.rb +4 -18
  334. data/lib/puppet/provider/host/parsed.rb +4 -2
  335. data/lib/puppet/provider/macauthorization/macauthorization.rb +0 -12
  336. data/lib/puppet/provider/mailalias/aliases.rb +23 -12
  337. data/lib/puppet/provider/mount/parsed.rb +2 -145
  338. data/lib/puppet/provider/nameservice/directoryservice.rb +57 -131
  339. data/lib/puppet/provider/network_device.rb +3 -0
  340. data/lib/puppet/provider/package/appdmg.rb +5 -2
  341. data/lib/puppet/provider/package/apt.rb +1 -1
  342. data/lib/puppet/provider/package/fink.rb +1 -1
  343. data/lib/puppet/provider/package/openbsd.rb +26 -12
  344. data/lib/puppet/provider/package/opkg.rb +6 -1
  345. data/lib/puppet/provider/package/pacman.rb +159 -127
  346. data/lib/puppet/provider/package/pip.rb +1 -11
  347. data/lib/puppet/provider/package/pkg.rb +73 -29
  348. data/lib/puppet/provider/package/pkgdmg.rb +2 -2
  349. data/lib/puppet/provider/package/pkgin.rb +1 -1
  350. data/lib/puppet/provider/package/portage.rb +5 -1
  351. data/lib/puppet/provider/package/portupgrade.rb +0 -2
  352. data/lib/puppet/provider/package/rpm.rb +109 -0
  353. data/lib/puppet/provider/package/rug.rb +0 -1
  354. data/lib/puppet/provider/package/windows/package.rb +1 -1
  355. data/lib/puppet/provider/package/yum.rb +121 -30
  356. data/lib/puppet/provider/package/zypper.rb +8 -17
  357. data/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb +7 -32
  358. data/lib/puppet/provider/service/base.rb +17 -3
  359. data/lib/puppet/provider/service/bsd.rb +1 -1
  360. data/lib/puppet/provider/service/daemontools.rb +1 -1
  361. data/lib/puppet/provider/service/init.rb +0 -7
  362. data/lib/puppet/provider/service/launchd.rb +11 -89
  363. data/lib/puppet/provider/service/openbsd.rb +56 -298
  364. data/lib/puppet/provider/service/runit.rb +1 -1
  365. data/lib/puppet/provider/service/systemd.rb +1 -0
  366. data/lib/puppet/provider/service/upstart.rb +4 -2
  367. data/lib/puppet/provider/ssh_authorized_key/parsed.rb +1 -1
  368. data/lib/puppet/provider/user/aix.rb +1 -1
  369. data/lib/puppet/provider/user/directoryservice.rb +40 -70
  370. data/lib/puppet/provider/user/hpux.rb +31 -2
  371. data/lib/puppet/provider/user/openbsd.rb +74 -0
  372. data/lib/puppet/provider/user/pw.rb +0 -1
  373. data/lib/puppet/provider/user/user_role_add.rb +1 -3
  374. data/lib/puppet/provider/user/windows_adsi.rb +2 -9
  375. data/lib/puppet/provider/yumrepo/inifile.rb +1 -3
  376. data/lib/puppet/provider/zfs/zfs.rb +3 -2
  377. data/lib/puppet/provider/zone/solaris.rb +3 -3
  378. data/lib/puppet/reference/configuration.rb +4 -3
  379. data/lib/puppet/reference/metaparameter.rb +0 -9
  380. data/lib/puppet/reference/providers.rb +1 -1
  381. data/lib/puppet/reference/type.rb +8 -10
  382. data/lib/puppet/relationship.rb +4 -17
  383. data/lib/puppet/resource.rb +132 -114
  384. data/lib/puppet/resource/catalog.rb +23 -30
  385. data/lib/puppet/resource/status.rb +74 -22
  386. data/lib/puppet/resource/type.rb +12 -52
  387. data/lib/puppet/resource/type_collection.rb +26 -73
  388. data/lib/puppet/settings.rb +94 -153
  389. data/lib/puppet/settings/base_setting.rb +6 -30
  390. data/lib/puppet/settings/config_file.rb +14 -11
  391. data/lib/puppet/settings/duration_setting.rb +1 -1
  392. data/lib/puppet/settings/environment_conf.rb +14 -12
  393. data/lib/puppet/settings/file_setting.rb +9 -10
  394. data/lib/puppet/settings/ttl_setting.rb +1 -3
  395. data/lib/puppet/ssl/certificate.rb +38 -8
  396. data/lib/puppet/ssl/certificate_authority/interface.rb +7 -1
  397. data/lib/puppet/ssl/certificate_factory.rb +3 -3
  398. data/lib/puppet/ssl/certificate_request.rb +36 -8
  399. data/lib/puppet/ssl/configuration.rb +2 -8
  400. data/lib/puppet/ssl/host.rb +1 -8
  401. data/lib/puppet/ssl/inventory.rb +0 -7
  402. data/lib/puppet/ssl/oids.rb +72 -3
  403. data/lib/puppet/ssl/validator/default_validator.rb +0 -1
  404. data/lib/puppet/status.rb +0 -5
  405. data/lib/puppet/syntax_checkers.rb +3 -0
  406. data/lib/{puppetx/puppetlabs → puppet}/syntax_checkers/json.rb +2 -2
  407. data/lib/puppet/test/test_helper.rb +11 -12
  408. data/lib/puppet/transaction.rb +12 -9
  409. data/lib/puppet/transaction/event.rb +4 -5
  410. data/lib/puppet/transaction/event_manager.rb +50 -5
  411. data/lib/puppet/transaction/report.rb +5 -10
  412. data/lib/puppet/transaction/resource_harness.rb +7 -2
  413. data/lib/puppet/type.rb +113 -29
  414. data/lib/puppet/type/augeas.rb +1 -0
  415. data/lib/puppet/type/exec.rb +2 -2
  416. data/lib/puppet/type/file.rb +8 -9
  417. data/lib/puppet/type/file/content.rb +19 -15
  418. data/lib/puppet/type/file/mode.rb +16 -11
  419. data/lib/puppet/type/file/selcontext.rb +1 -1
  420. data/lib/puppet/type/file/source.rb +15 -15
  421. data/lib/puppet/type/filebucket.rb +2 -2
  422. data/lib/puppet/type/group.rb +5 -17
  423. data/lib/puppet/type/host.rb +12 -3
  424. data/lib/puppet/type/k5login.rb +1 -1
  425. data/lib/puppet/type/mailalias.rb +20 -6
  426. data/lib/puppet/type/maillist.rb +1 -1
  427. data/lib/puppet/type/mount.rb +6 -16
  428. data/lib/puppet/type/notify.rb +1 -1
  429. data/lib/puppet/type/package.rb +91 -16
  430. data/lib/puppet/type/resources.rb +0 -7
  431. data/lib/puppet/type/router.rb +1 -1
  432. data/lib/puppet/type/schedule.rb +1 -1
  433. data/lib/puppet/type/scheduled_task.rb +0 -13
  434. data/lib/puppet/type/selboolean.rb +2 -2
  435. data/lib/puppet/type/service.rb +1 -1
  436. data/lib/puppet/type/ssh_authorized_key.rb +1 -1
  437. data/lib/puppet/type/sshkey.rb +1 -1
  438. data/lib/puppet/type/tidy.rb +4 -1
  439. data/lib/puppet/type/user.rb +16 -3
  440. data/lib/puppet/type/yumrepo.rb +26 -0
  441. data/lib/puppet/type/zfs.rb +1 -1
  442. data/lib/puppet/type/zpool.rb +1 -1
  443. data/lib/puppet/util.rb +2 -85
  444. data/lib/puppet/util/autoload.rb +3 -13
  445. data/lib/puppet/util/checksums.rb +59 -22
  446. data/lib/puppet/util/classgen.rb +1 -9
  447. data/lib/puppet/util/colors.rb +0 -117
  448. data/lib/puppet/util/command_line.rb +1 -23
  449. data/lib/puppet/util/errors.rb +2 -4
  450. data/lib/puppet/util/execution.rb +19 -22
  451. data/lib/puppet/util/feature.rb +2 -4
  452. data/lib/puppet/util/fileparsing.rb +3 -2
  453. data/lib/puppet/util/log.rb +13 -56
  454. data/lib/puppet/util/log/destinations.rb +17 -36
  455. data/lib/puppet/util/logging.rb +52 -37
  456. data/lib/puppet/util/metric.rb +0 -149
  457. data/lib/puppet/util/monkey_patches.rb +1 -94
  458. data/lib/puppet/util/network_device/base.rb +1 -5
  459. data/lib/puppet/util/network_device/cisco/interface.rb +2 -2
  460. data/lib/puppet/util/network_device/config.rb +0 -5
  461. data/lib/puppet/util/network_device/transport/ssh.rb +2 -2
  462. data/lib/puppet/util/profiler.rb +1 -1
  463. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  464. data/lib/puppet/util/profiler/around_profiler.rb +1 -1
  465. data/lib/puppet/util/psych_support.rb +38 -0
  466. data/lib/puppet/util/rdoc.rb +6 -42
  467. data/lib/puppet/util/rdoc/code_objects.rb +5 -45
  468. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  469. data/lib/puppet/util/rdoc/parser.rb +5 -15
  470. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +8 -227
  471. data/lib/puppet/util/retry_action.rb +46 -0
  472. data/lib/puppet/util/run_mode.rb +31 -7
  473. data/lib/puppet/util/selinux.rb +2 -2
  474. data/lib/puppet/util/ssl.rb +11 -11
  475. data/lib/puppet/util/suidmanager.rb +4 -31
  476. data/lib/puppet/util/tag_set.rb +0 -11
  477. data/lib/puppet/util/tagging.rb +50 -19
  478. data/lib/puppet/util/warnings.rb +1 -0
  479. data/lib/puppet/util/windows/adsi.rb +13 -60
  480. data/lib/puppet/util/windows/api_types.rb +16 -2
  481. data/lib/puppet/util/windows/file.rb +2 -8
  482. data/lib/puppet/util/windows/process.rb +58 -0
  483. data/lib/puppet/util/windows/registry.rb +319 -31
  484. data/lib/puppet/util/windows/security.rb +1 -68
  485. data/lib/puppet/util/windows/taskscheduler.rb +0 -21
  486. data/lib/puppet/util/windows/user.rb +2 -3
  487. data/lib/puppet/vendor/deep_merge/CHANGELOG +45 -0
  488. data/lib/puppet/vendor/deep_merge/Gemfile +3 -0
  489. data/lib/puppet/vendor/deep_merge/LICENSE +21 -0
  490. data/lib/puppet/vendor/deep_merge/README.md +113 -0
  491. data/lib/puppet/vendor/deep_merge/Rakefile +19 -0
  492. data/lib/puppet/vendor/deep_merge/deep_merge.gemspec +35 -0
  493. data/lib/puppet/vendor/deep_merge/lib/deep_merge.rb +2 -0
  494. data/lib/puppet/vendor/deep_merge/lib/deep_merge/core.rb +210 -0
  495. data/lib/puppet/vendor/deep_merge/lib/deep_merge/deep_merge_hash.rb +28 -0
  496. data/lib/puppet/vendor/deep_merge/lib/deep_merge/rails_compat.rb +27 -0
  497. data/lib/puppet/vendor/deep_merge/test/test_deep_merge.rb +608 -0
  498. data/lib/puppet/vendor/load_deep_merge.rb +1 -0
  499. data/lib/puppet/vendor/load_rgen.rb +1 -0
  500. data/lib/puppet/vendor/require_vendored.rb +1 -3
  501. data/lib/puppet/vendor/rgen_patch.rb +132 -0
  502. data/lib/puppet/version.rb +1 -1
  503. data/lib/puppet_x.rb +8 -0
  504. data/lib/semver.rb +0 -1
  505. data/man/man5/puppet.conf.5 +432 -287
  506. data/man/man8/extlookup2hiera.8 +2 -15
  507. data/man/man8/puppet-agent.8 +14 -14
  508. data/man/man8/puppet-apply.8 +29 -30
  509. data/man/man8/puppet-ca.8 +29 -17
  510. data/man/man8/puppet-catalog.8 +5 -34
  511. data/man/man8/puppet-cert.8 +8 -4
  512. data/man/man8/puppet-certificate.8 +15 -29
  513. data/man/man8/puppet-certificate_request.8 +9 -16
  514. data/man/man8/puppet-certificate_revocation_list.8 +5 -31
  515. data/man/man8/puppet-config.8 +52 -11
  516. data/man/man8/puppet-describe.8 +1 -1
  517. data/man/man8/puppet-device.8 +5 -16
  518. data/man/man8/puppet-doc.8 +7 -80
  519. data/man/man8/puppet-epp.8 +349 -0
  520. data/man/man8/puppet-facts.8 +5 -95
  521. data/man/man8/puppet-file.8 +2 -28
  522. data/man/man8/puppet-filebucket.8 +2 -2
  523. data/man/man8/puppet-help.8 +2 -2
  524. data/man/man8/puppet-inspect.8 +1 -1
  525. data/man/man8/puppet-key.8 +6 -3
  526. data/man/man8/puppet-man.8 +2 -2
  527. data/man/man8/puppet-master.8 +11 -7
  528. data/man/man8/puppet-module.8 +75 -49
  529. data/man/man8/puppet-node.8 +8 -56
  530. data/man/man8/puppet-parser.8 +38 -4
  531. data/man/man8/puppet-plugin.8 +2 -2
  532. data/man/man8/puppet-report.8 +8 -70
  533. data/man/man8/puppet-resource.8 +7 -3
  534. data/man/man8/puppet-resource_type.8 +2 -28
  535. data/man/man8/puppet-status.8 +5 -47
  536. data/man/man8/puppet.8 +2 -2
  537. data/spec/fixtures/integration/provider/mailalias/aliases/test1 +3 -0
  538. data/spec/fixtures/integration/provider/sshkey/sample +21 -0
  539. data/spec/fixtures/unit/data_providers/environments/production/environment.conf +2 -0
  540. data/spec/fixtures/unit/data_providers/environments/production/lib/puppet/functions/environment/data.rb +7 -0
  541. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +9 -0
  542. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +8 -0
  543. data/spec/fixtures/unit/data_providers/environments/production/modules/abc/manifests/init.pp +9 -0
  544. data/spec/fixtures/unit/data_providers/environments/sample/environment.conf +2 -0
  545. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +6 -0
  546. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet/bindings/dataprovider/default.rb +54 -0
  547. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +31 -0
  548. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +32 -0
  549. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +5 -0
  550. data/spec/fixtures/unit/functions/lookup/environments/production/environment.conf +2 -0
  551. data/spec/fixtures/unit/functions/lookup/environments/production/lib/puppet/functions/environment/data.rb +11 -0
  552. data/spec/fixtures/unit/functions/lookup/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +9 -0
  553. data/spec/fixtures/unit/functions/lookup/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +9 -0
  554. data/spec/fixtures/unit/functions/lookup/environments/production/modules/abc/manifests/init.pp +8 -0
  555. data/spec/fixtures/unit/parser/lexer/subclass_name_duplication.pp +0 -0
  556. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/binder_config.yaml +1 -1
  557. data/spec/fixtures/unit/pops/binder/bindings_composer/ok/modules/awesome2/lib/{puppetx → puppet_x}/awesome2/echo_scheme_handler.rb +3 -3
  558. data/spec/fixtures/unit/pops/binder/config/binder_config/nolayer/binder_config.yaml +6 -0
  559. data/spec/fixtures/unit/pops/parser/lexer/subclass_name_duplication.pp +0 -0
  560. data/spec/fixtures/unit/provider/mount/parsed/aix.filesystems +85 -93
  561. data/spec/fixtures/unit/provider/mount/parsed/aix.mount +7 -11
  562. data/spec/fixtures/unit/provider/package/pkg/dummy_implicit_version +3 -0
  563. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris10 +1 -1
  564. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.certificate_warning +1 -1
  565. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.ifo.installed +1 -1
  566. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.ifo.known +1 -1
  567. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.installed +1 -1
  568. data/spec/fixtures/unit/provider/package/pkg/dummy_solaris11.known +1 -1
  569. data/spec/fixtures/unit/provider/package/pkg/incomplete +1 -1
  570. data/spec/fixtures/unit/provider/package/pkg/solaris11 +2 -2
  571. data/spec/fixtures/unit/provider/package/pkg/unknown_status +12 -12
  572. data/spec/fixtures/unit/provider/package/yum/yum-check-update-multiline.txt +201 -0
  573. data/spec/fixtures/unit/provider/package/yum/yum-check-update-simple.txt +12 -0
  574. data/spec/fixtures/unit/provider/parsedfile/simple.txt +3 -0
  575. data/spec/fixtures/unit/provider/service/openbsd/rcctl_getall +6 -0
  576. data/spec/fixtures/unit/ssl/certificate/old-style-cert-exts.pem +33 -0
  577. data/spec/fixtures/unit/ssl/certificate_request/old-style-cert-request.pem +28 -0
  578. data/spec/integration/agent/logging_spec.rb +1 -5
  579. data/spec/integration/application/apply_spec.rb +1 -1
  580. data/spec/integration/application/doc_spec.rb +1 -43
  581. data/spec/integration/configurer_spec.rb +5 -5
  582. data/spec/integration/data_binding.rb +4 -0
  583. data/spec/integration/defaults_spec.rb +42 -143
  584. data/spec/integration/directory_environments_spec.rb +3 -3
  585. data/spec/integration/environments/default_manifest_spec.rb +3 -51
  586. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  587. data/spec/integration/environments/settings_interpolation_spec.rb +50 -105
  588. data/spec/integration/environments/settings_spec.rb +100 -0
  589. data/spec/integration/faces/ca_spec.rb +51 -51
  590. data/spec/integration/faces/documentation_spec.rb +6 -6
  591. data/spec/integration/file_bucket/file_spec.rb +5 -16
  592. data/spec/integration/file_serving/fileset_spec.rb +1 -1
  593. data/spec/integration/file_serving/terminus_helper_spec.rb +1 -1
  594. data/spec/integration/indirector/catalog/compiler_spec.rb +6 -6
  595. data/spec/integration/indirector/direct_file_server_spec.rb +40 -12
  596. data/spec/integration/indirector/facts/facter_spec.rb +1 -1
  597. data/spec/integration/indirector/file_content/file_server_spec.rb +23 -21
  598. data/spec/integration/indirector/file_metadata/file_server_spec.rb +53 -0
  599. data/spec/integration/indirector/node/ldap_spec.rb +0 -0
  600. data/spec/integration/network/authconfig_spec.rb +26 -26
  601. data/spec/integration/network/formats_spec.rb +12 -12
  602. data/spec/integration/network/http/api/indirected_routes_spec.rb +56 -0
  603. data/spec/integration/node/environment_spec.rb +12 -15
  604. data/spec/integration/node/facts_spec.rb +3 -3
  605. data/spec/integration/node_spec.rb +8 -8
  606. data/spec/integration/parser/catalog_spec.rb +1 -32
  607. data/spec/integration/parser/class_spec.rb +0 -4
  608. data/spec/integration/parser/{collector_spec.rb → collection_spec.rb} +3 -27
  609. data/spec/integration/parser/compiler_spec.rb +769 -385
  610. data/spec/integration/parser/conditionals_spec.rb +2 -27
  611. data/spec/integration/parser/functions/require_spec.rb +8 -8
  612. data/spec/integration/parser/node_spec.rb +29 -42
  613. data/spec/integration/parser/resource_expressions_spec.rb +125 -210
  614. data/spec/integration/parser/scope_spec.rb +168 -319
  615. data/spec/integration/parser/undef_param_spec.rb +5 -5
  616. data/spec/integration/provider/cron/crontab_spec.rb +3 -3
  617. data/spec/integration/provider/mailalias/aliases_spec.rb +0 -0
  618. data/spec/integration/provider/mount_spec.rb +33 -28
  619. data/spec/integration/provider/package_spec.rb +3 -14
  620. data/spec/integration/provider/service/init_spec.rb +4 -4
  621. data/spec/integration/provider/service/systemd_spec.rb +3 -3
  622. data/spec/integration/provider/ssh_authorized_key_spec.rb +12 -12
  623. data/spec/integration/provider/sshkey_spec.rb +159 -0
  624. data/spec/integration/reference/providers_spec.rb +1 -1
  625. data/spec/integration/reports_spec.rb +1 -1
  626. data/spec/integration/resource/catalog_spec.rb +3 -3
  627. data/spec/integration/resource/type_collection_spec.rb +10 -25
  628. data/spec/integration/ssl/autosign_spec.rb +1 -1
  629. data/spec/integration/ssl/certificate_authority_spec.rb +8 -8
  630. data/spec/integration/ssl/certificate_request_spec.rb +2 -2
  631. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -0
  632. data/spec/integration/ssl/host_spec.rb +7 -7
  633. data/spec/integration/transaction/report_spec.rb +0 -0
  634. data/spec/integration/transaction_spec.rb +86 -50
  635. data/spec/integration/type/exec_spec.rb +5 -5
  636. data/spec/integration/type/file_spec.rb +277 -280
  637. data/spec/integration/type/package_spec.rb +105 -6
  638. data/spec/integration/type/tidy_spec.rb +1 -1
  639. data/spec/integration/type/user_spec.rb +4 -4
  640. data/spec/integration/type_spec.rb +2 -2
  641. data/spec/integration/util/autoload_spec.rb +7 -12
  642. data/spec/integration/util/rdoc/parser_spec.rb +13 -99
  643. data/spec/integration/util/settings_spec.rb +1 -1
  644. data/spec/integration/util/windows/process_spec.rb +6 -6
  645. data/spec/integration/util/windows/security_spec.rb +79 -105
  646. data/spec/integration/util/windows/user_spec.rb +12 -12
  647. data/spec/integration/util_spec.rb +8 -8
  648. data/spec/lib/matchers/containment_matchers.rb +1 -1
  649. data/spec/lib/matchers/include.rb +3 -3
  650. data/spec/lib/matchers/include_in_order.rb +2 -2
  651. data/spec/lib/matchers/json.rb +5 -35
  652. data/spec/lib/matchers/match_tokens2.rb +1 -1
  653. data/spec/lib/matchers/relationship_graph_matchers.rb +1 -1
  654. data/spec/lib/matchers/resource.rb +8 -23
  655. data/spec/lib/puppet/face/1.0.0/huzzah.rb +2 -2
  656. data/spec/lib/puppet/face/basetest.rb +0 -0
  657. data/spec/lib/puppet/face/huzzah.rb +2 -2
  658. data/spec/lib/puppet/face/version_matching.rb +1 -1
  659. data/spec/lib/puppet/indirector_proxy.rb +34 -0
  660. data/spec/lib/puppet/indirector_testing.rb +1 -11
  661. data/spec/lib/puppet_spec/files.rb +1 -1
  662. data/spec/lib/puppet_spec/fixtures.rb +0 -0
  663. data/spec/lib/puppet_spec/handler.rb +53 -0
  664. data/spec/lib/puppet_spec/matchers.rb +12 -5
  665. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +3 -3
  666. data/spec/lib/puppet_spec/modules.rb +11 -0
  667. data/spec/lib/puppet_spec/network.rb +101 -0
  668. data/spec/lib/puppet_spec/pops.rb +2 -2
  669. data/spec/lib/puppet_spec/settings.rb +17 -0
  670. data/spec/lib/puppet_spec/verbose.rb +0 -0
  671. data/spec/shared_behaviours/all_parsedfile_providers.rb +1 -1
  672. data/spec/shared_behaviours/an_indirector_face.rb +2 -2
  673. data/spec/shared_behaviours/documentation_on_faces.rb +46 -46
  674. data/spec/shared_behaviours/file_server_terminus.rb +1 -1
  675. data/spec/shared_behaviours/file_serving.rb +0 -0
  676. data/spec/shared_behaviours/hiera_indirections.rb +10 -10
  677. data/spec/shared_behaviours/iterative_functions.rb +1 -1
  678. data/spec/shared_behaviours/memory_terminus.rb +5 -5
  679. data/spec/shared_behaviours/path_parameters.rb +8 -8
  680. data/spec/shared_behaviours/store_configs_terminus.rb +3 -3
  681. data/spec/shared_behaviours/things_that_declare_options.rb +25 -25
  682. data/spec/shared_contexts/checksum.rb +62 -0
  683. data/spec/shared_contexts/{checksums.rb → digests.rb} +2 -2
  684. data/spec/spec_helper.rb +14 -5
  685. data/spec/unit/agent/disabler_spec.rb +3 -3
  686. data/spec/unit/agent/locker_spec.rb +9 -9
  687. data/spec/unit/agent_spec.rb +18 -18
  688. data/spec/unit/application/agent_spec.rb +25 -92
  689. data/spec/unit/application/apply_spec.rb +16 -16
  690. data/spec/unit/application/cert_spec.rb +15 -15
  691. data/spec/unit/application/certificate_spec.rb +2 -2
  692. data/spec/unit/application/config_spec.rb +1 -1
  693. data/spec/unit/application/describe_spec.rb +6 -6
  694. data/spec/unit/application/device_spec.rb +25 -63
  695. data/spec/unit/application/doc_spec.rb +22 -31
  696. data/spec/unit/application/face_base_spec.rb +88 -59
  697. data/spec/unit/application/facts_spec.rb +2 -11
  698. data/spec/unit/application/filebucket_spec.rb +7 -7
  699. data/spec/unit/application/indirection_base_spec.rb +0 -4
  700. data/spec/unit/application/inspect_spec.rb +21 -21
  701. data/spec/unit/application/master_spec.rb +8 -9
  702. data/spec/unit/application/resource_spec.rb +27 -79
  703. data/spec/unit/application_spec.rb +54 -58
  704. data/spec/unit/configurer/downloader_factory_spec.rb +0 -0
  705. data/spec/unit/configurer/downloader_spec.rb +26 -20
  706. data/spec/unit/configurer/fact_handler_spec.rb +19 -12
  707. data/spec/unit/configurer/plugin_handler_spec.rb +0 -0
  708. data/spec/unit/configurer_spec.rb +44 -44
  709. data/spec/unit/confine/exists_spec.rb +10 -10
  710. data/spec/unit/confine/false_spec.rb +7 -7
  711. data/spec/unit/confine/feature_spec.rb +7 -7
  712. data/spec/unit/confine/true_spec.rb +7 -7
  713. data/spec/unit/confine/variable_spec.rb +13 -13
  714. data/spec/unit/confine_collection_spec.rb +12 -12
  715. data/spec/unit/confine_spec.rb +10 -10
  716. data/spec/unit/confiner_spec.rb +8 -8
  717. data/spec/unit/context/trusted_information_spec.rb +9 -2
  718. data/spec/unit/daemon_spec.rb +10 -21
  719. data/spec/unit/data_binding_spec.rb +1 -1
  720. data/spec/unit/data_providers/function_data_provider_spec.rb +96 -0
  721. data/spec/unit/data_providers/sample_data_provider_spec.rb +52 -0
  722. data/spec/unit/defaults_spec.rb +6 -6
  723. data/spec/unit/environments_spec.rb +4 -6
  724. data/spec/unit/{util → external}/pson_spec.rb +15 -25
  725. data/spec/unit/face/catalog_spec.rb +0 -0
  726. data/spec/unit/face/certificate_spec.rb +19 -19
  727. data/spec/unit/face/config_spec.rb +2 -7
  728. data/spec/unit/face/epp_face_spec.rb +303 -0
  729. data/spec/unit/face/facts_spec.rb +1 -15
  730. data/spec/unit/face/file_spec.rb +3 -5
  731. data/spec/unit/face/help_spec.rb +17 -16
  732. data/spec/unit/face/module/build_spec.rb +2 -2
  733. data/spec/unit/face/module/list_spec.rb +11 -11
  734. data/spec/unit/face/module/search_spec.rb +17 -17
  735. data/spec/unit/face/node_spec.rb +4 -122
  736. data/spec/unit/face/parser_spec.rb +1 -1
  737. data/spec/unit/face/plugin_spec.rb +2 -2
  738. data/spec/unit/face_spec.rb +0 -0
  739. data/spec/unit/file_bucket/dipper_spec.rb +23 -23
  740. data/spec/unit/file_bucket/file_spec.rb +12 -28
  741. data/spec/unit/file_serving/base_spec.rb +26 -26
  742. data/spec/unit/file_serving/configuration/parser_spec.rb +10 -10
  743. data/spec/unit/file_serving/configuration_spec.rb +17 -17
  744. data/spec/unit/file_serving/content_spec.rb +19 -31
  745. data/spec/unit/file_serving/fileset_spec.rb +32 -33
  746. data/spec/unit/file_serving/metadata_spec.rb +115 -71
  747. data/spec/unit/file_serving/mount/file_spec.rb +15 -15
  748. data/spec/unit/file_serving/mount/modules_spec.rb +2 -2
  749. data/spec/unit/file_serving/mount/pluginfacts_spec.rb +5 -5
  750. data/spec/unit/file_serving/mount/plugins_spec.rb +5 -5
  751. data/spec/unit/file_serving/mount_spec.rb +5 -5
  752. data/spec/unit/file_serving/terminus_helper_spec.rb +19 -0
  753. data/spec/unit/file_serving/terminus_selector_spec.rb +6 -6
  754. data/spec/unit/file_system/uniquefile_spec.rb +2 -2
  755. data/spec/unit/file_system_spec.rb +79 -117
  756. data/spec/unit/forge/errors_spec.rb +8 -8
  757. data/spec/unit/forge/module_release_spec.rb +2 -4
  758. data/spec/unit/forge/repository_spec.rb +38 -44
  759. data/spec/unit/forge_spec.rb +1 -1
  760. data/spec/unit/functions/assert_type_spec.rb +1 -1
  761. data/spec/unit/functions/each_spec.rb +19 -23
  762. data/spec/unit/functions/epp_spec.rb +9 -17
  763. data/spec/unit/functions/filter_spec.rb +0 -22
  764. data/spec/unit/functions/hiera_spec.rb +18 -24
  765. data/spec/unit/functions/inline_epp_spec.rb +8 -16
  766. data/spec/unit/functions/lookup_spec.rb +324 -0
  767. data/spec/unit/functions/map_spec.rb +1 -7
  768. data/spec/unit/functions/reduce_spec.rb +0 -11
  769. data/spec/unit/functions/regsubst_spec.rb +94 -0
  770. data/spec/unit/functions/scanf_spec.rb +0 -4
  771. data/spec/unit/functions/slice_spec.rb +0 -12
  772. data/spec/unit/functions/split_spec.rb +46 -0
  773. data/spec/unit/functions/with_spec.rb +4 -13
  774. data/spec/unit/functions4_spec.rb +57 -162
  775. data/spec/unit/graph/rb_tree_map_spec.rb +78 -78
  776. data/spec/unit/graph/relationship_graph_spec.rb +17 -17
  777. data/spec/unit/graph/{simple_graph.rb → simple_graph_spec.rb} +122 -126
  778. data/spec/unit/hiera/scope_spec.rb +13 -12
  779. data/spec/unit/hiera_puppet_spec.rb +12 -12
  780. data/spec/unit/indirector/catalog/compiler_spec.rb +10 -15
  781. data/spec/unit/indirector/catalog/json_spec.rb +2 -2
  782. data/spec/unit/indirector/catalog/msgpack_spec.rb +2 -2
  783. data/spec/unit/indirector/catalog/rest_spec.rb +1 -1
  784. data/spec/unit/indirector/catalog/static_compiler_spec.rb +14 -14
  785. data/spec/unit/indirector/catalog/store_configs_spec.rb +0 -0
  786. data/spec/unit/indirector/catalog/yaml_spec.rb +4 -4
  787. data/spec/unit/indirector/certificate/ca_spec.rb +3 -3
  788. data/spec/unit/indirector/certificate/disabled_ca_spec.rb +0 -0
  789. data/spec/unit/indirector/certificate/file_spec.rb +3 -3
  790. data/spec/unit/indirector/certificate/rest_spec.rb +6 -6
  791. data/spec/unit/indirector/certificate_request/ca_spec.rb +8 -8
  792. data/spec/unit/indirector/certificate_request/disabled_ca_spec.rb +0 -0
  793. data/spec/unit/indirector/certificate_request/file_spec.rb +2 -2
  794. data/spec/unit/indirector/certificate_request/rest_spec.rb +4 -4
  795. data/spec/unit/indirector/certificate_revocation_list/ca_spec.rb +2 -2
  796. data/spec/unit/indirector/certificate_revocation_list/disabled_ca_spec.rb +0 -0
  797. data/spec/unit/indirector/certificate_revocation_list/file_spec.rb +2 -2
  798. data/spec/unit/indirector/certificate_revocation_list/rest_spec.rb +4 -4
  799. data/spec/unit/indirector/certificate_status/file_spec.rb +18 -18
  800. data/spec/unit/indirector/certificate_status/rest_spec.rb +2 -2
  801. data/spec/unit/indirector/code_spec.rb +3 -3
  802. data/spec/unit/indirector/data_binding/hiera_spec.rb +3 -3
  803. data/spec/unit/indirector/data_binding/none_spec.rb +5 -5
  804. data/spec/unit/indirector/direct_file_server_spec.rb +14 -4
  805. data/spec/unit/indirector/envelope_spec.rb +4 -4
  806. data/spec/unit/indirector/exec_spec.rb +4 -4
  807. data/spec/unit/indirector/face_spec.rb +13 -8
  808. data/spec/unit/indirector/facts/facter_spec.rb +10 -20
  809. data/spec/unit/indirector/facts/network_device_spec.rb +10 -20
  810. data/spec/unit/indirector/facts/store_configs_spec.rb +0 -0
  811. data/spec/unit/indirector/facts/yaml_spec.rb +6 -6
  812. data/spec/unit/indirector/file_bucket_file/file_spec.rb +34 -34
  813. data/spec/unit/indirector/file_bucket_file/rest_spec.rb +1 -1
  814. data/spec/unit/indirector/file_content/file_server_spec.rb +2 -2
  815. data/spec/unit/indirector/file_content/file_spec.rb +2 -2
  816. data/spec/unit/indirector/file_content/rest_spec.rb +1 -1
  817. data/spec/unit/indirector/file_metadata/file_server_spec.rb +2 -2
  818. data/spec/unit/indirector/file_metadata/file_spec.rb +13 -5
  819. data/spec/unit/indirector/file_metadata/rest_spec.rb +1 -1
  820. data/spec/unit/indirector/file_server_spec.rb +35 -17
  821. data/spec/unit/indirector/indirection_spec.rb +56 -56
  822. data/spec/unit/indirector/json_spec.rb +15 -16
  823. data/spec/unit/indirector/key/ca_spec.rb +3 -3
  824. data/spec/unit/indirector/key/disabled_ca_spec.rb +0 -0
  825. data/spec/unit/indirector/key/file_spec.rb +5 -5
  826. data/spec/unit/indirector/ldap_spec.rb +13 -13
  827. data/spec/unit/indirector/memory_spec.rb +0 -0
  828. data/spec/unit/indirector/msgpack_spec.rb +15 -15
  829. data/spec/unit/indirector/node/exec_spec.rb +20 -9
  830. data/spec/unit/indirector/node/ldap_spec.rb +48 -48
  831. data/spec/unit/indirector/node/memory_spec.rb +0 -0
  832. data/spec/unit/indirector/node/msgpack_spec.rb +4 -4
  833. data/spec/unit/indirector/node/plain_spec.rb +2 -2
  834. data/spec/unit/indirector/node/rest_spec.rb +0 -0
  835. data/spec/unit/indirector/node/store_configs_spec.rb +0 -0
  836. data/spec/unit/indirector/node/yaml_spec.rb +4 -4
  837. data/spec/unit/indirector/none_spec.rb +2 -2
  838. data/spec/unit/indirector/plain_spec.rb +1 -1
  839. data/spec/unit/indirector/report/msgpack_spec.rb +5 -5
  840. data/spec/unit/indirector/report/processor_spec.rb +4 -4
  841. data/spec/unit/indirector/report/rest_spec.rb +8 -8
  842. data/spec/unit/indirector/report/yaml_spec.rb +5 -5
  843. data/spec/unit/indirector/request_spec.rb +103 -206
  844. data/spec/unit/indirector/resource/ral_spec.rb +8 -10
  845. data/spec/unit/indirector/resource/store_configs_spec.rb +2 -4
  846. data/spec/unit/indirector/resource_type/parser_spec.rb +37 -37
  847. data/spec/unit/indirector/resource_type/rest_spec.rb +2 -2
  848. data/spec/unit/indirector/rest_spec.rb +70 -55
  849. data/spec/unit/indirector/ssl_file_spec.rb +13 -13
  850. data/spec/unit/indirector/status/rest_spec.rb +1 -1
  851. data/spec/unit/indirector/store_configs_spec.rb +0 -0
  852. data/spec/unit/indirector/terminus_spec.rb +17 -17
  853. data/spec/unit/indirector/yaml_spec.rb +12 -12
  854. data/spec/unit/indirector_spec.rb +7 -7
  855. data/spec/unit/interface/action_builder_spec.rb +15 -15
  856. data/spec/unit/interface/action_manager_spec.rb +31 -56
  857. data/spec/unit/interface/action_spec.rb +62 -65
  858. data/spec/unit/interface/documentation_spec.rb +2 -2
  859. data/spec/unit/interface/face_collection_spec.rb +33 -33
  860. data/spec/unit/interface/option_builder_spec.rb +8 -8
  861. data/spec/unit/interface/option_spec.rb +23 -23
  862. data/spec/unit/interface_spec.rb +19 -24
  863. data/spec/unit/man_spec.rb +0 -0
  864. data/spec/unit/module_spec.rb +163 -115
  865. data/spec/unit/module_tool/applications/builder_spec.rb +0 -19
  866. data/spec/unit/module_tool/applications/installer_spec.rb +29 -29
  867. data/spec/unit/module_tool/applications/searcher_spec.rb +4 -4
  868. data/spec/unit/module_tool/applications/uninstaller_spec.rb +15 -15
  869. data/spec/unit/module_tool/applications/unpacker_spec.rb +3 -3
  870. data/spec/unit/module_tool/applications/upgrader_spec.rb +28 -28
  871. data/spec/unit/module_tool/install_directory_spec.rb +3 -3
  872. data/spec/unit/module_tool/metadata_spec.rb +26 -26
  873. data/spec/unit/module_tool/tar/gnu_spec.rb +1 -1
  874. data/spec/unit/module_tool/tar/mini_spec.rb +2 -2
  875. data/spec/unit/module_tool/tar_spec.rb +2 -2
  876. data/spec/unit/module_tool_spec.rb +13 -34
  877. data/spec/unit/network/auth_config_parser_spec.rb +7 -7
  878. data/spec/unit/network/authconfig_spec.rb +9 -9
  879. data/spec/unit/network/authstore_spec.rb +38 -39
  880. data/spec/unit/network/format_handler_spec.rb +14 -14
  881. data/spec/unit/network/format_spec.rb +34 -34
  882. data/spec/unit/network/format_support_spec.rb +10 -10
  883. data/spec/unit/network/formats_spec.rb +50 -136
  884. data/spec/unit/network/http/api/ca/v1_spec.rb +26 -0
  885. data/spec/unit/network/http/api/{v1_spec.rb → indirected_routes_spec.rb} +128 -184
  886. data/spec/unit/network/http/api/{v2 → master/v3}/authorization_spec.rb +23 -21
  887. data/spec/unit/network/http/api/{v2 → master/v3}/environments_spec.rb +5 -5
  888. data/spec/unit/network/http/api/master/v3_spec.rb +39 -0
  889. data/spec/unit/network/http/api_spec.rb +127 -0
  890. data/spec/unit/network/http/compression_spec.rb +20 -26
  891. data/spec/unit/network/http/connection_spec.rb +2 -5
  892. data/spec/unit/network/http/factory_spec.rb +6 -8
  893. data/spec/unit/network/http/handler_spec.rb +31 -84
  894. data/spec/unit/network/http/nocache_pool_spec.rb +0 -0
  895. data/spec/unit/network/http/pool_spec.rb +0 -0
  896. data/spec/unit/network/http/rack/rest_spec.rb +38 -39
  897. data/spec/unit/network/http/rack_spec.rb +1 -1
  898. data/spec/unit/network/http/route_spec.rb +3 -3
  899. data/spec/unit/network/http/session_spec.rb +4 -4
  900. data/spec/unit/network/http/site_spec.rb +1 -1
  901. data/spec/unit/network/http/webrick/rest_spec.rb +36 -55
  902. data/spec/unit/network/http/webrick_spec.rb +16 -27
  903. data/spec/unit/network/http_pool_spec.rb +11 -11
  904. data/spec/unit/network/http_spec.rb +0 -0
  905. data/spec/unit/network/resolver_spec.rb +10 -10
  906. data/spec/unit/network/rights_spec.rb +67 -67
  907. data/spec/unit/network/server_spec.rb +3 -3
  908. data/spec/unit/node/environment_spec.rb +177 -273
  909. data/spec/unit/node/facts_spec.rb +71 -33
  910. data/spec/unit/node_spec.rb +150 -158
  911. data/spec/unit/other/selinux_spec.rb +6 -6
  912. data/spec/unit/parameter/boolean_spec.rb +4 -3
  913. data/spec/unit/parameter/package_options_spec.rb +5 -5
  914. data/spec/unit/parameter/path_spec.rb +1 -1
  915. data/spec/unit/parameter/value_collection_spec.rb +23 -28
  916. data/spec/unit/parameter/value_spec.rb +20 -24
  917. data/spec/unit/parameter_spec.rb +26 -26
  918. data/spec/unit/parser/ast/block_expression_spec.rb +3 -2
  919. data/spec/unit/parser/ast/leaf_spec.rb +5 -378
  920. data/spec/unit/parser/compiler_spec.rb +84 -74
  921. data/spec/unit/parser/files_spec.rb +55 -121
  922. data/spec/unit/parser/functions/contain_spec.rb +8 -11
  923. data/spec/unit/parser/functions/create_resources_spec.rb +29 -29
  924. data/spec/unit/parser/functions/defined_spec.rb +52 -51
  925. data/spec/unit/parser/functions/digest_spec.rb +2 -2
  926. data/spec/unit/parser/functions/fail_spec.rb +1 -1
  927. data/spec/unit/parser/functions/file_spec.rb +7 -13
  928. data/spec/unit/parser/functions/fqdn_rand_spec.rb +5 -5
  929. data/spec/unit/parser/functions/generate_spec.rb +20 -20
  930. data/spec/unit/parser/functions/hiera_array_spec.rb +2 -16
  931. data/spec/unit/parser/functions/hiera_hash_spec.rb +2 -12
  932. data/spec/unit/parser/functions/hiera_include_spec.rb +2 -29
  933. data/spec/unit/parser/functions/hiera_spec.rb +2 -12
  934. data/spec/unit/parser/functions/include_spec.rb +9 -19
  935. data/spec/unit/parser/functions/inline_template_spec.rb +3 -3
  936. data/spec/unit/parser/functions/lookup_spec.rb +3 -140
  937. data/spec/unit/parser/functions/realize_spec.rb +0 -0
  938. data/spec/unit/parser/functions/regsubst_spec.rb +7 -179
  939. data/spec/unit/parser/functions/require_spec.rb +14 -21
  940. data/spec/unit/parser/functions/scanf_spec.rb +0 -0
  941. data/spec/unit/parser/functions/shellquote_spec.rb +20 -20
  942. data/spec/unit/parser/functions/split_spec.rb +2 -37
  943. data/spec/unit/parser/functions/sprintf_spec.rb +7 -11
  944. data/spec/unit/parser/functions/tag_spec.rb +3 -3
  945. data/spec/unit/parser/functions/template_spec.rb +10 -10
  946. data/spec/unit/parser/functions/versioncmp_spec.rb +3 -3
  947. data/spec/unit/parser/functions_spec.rb +8 -8
  948. data/spec/unit/parser/relationship_spec.rb +14 -32
  949. data/spec/unit/parser/resource/param_spec.rb +0 -0
  950. data/spec/unit/parser/resource_spec.rb +57 -57
  951. data/spec/unit/parser/scope_spec.rb +89 -101
  952. data/spec/unit/parser/templatewrapper_spec.rb +15 -32
  953. data/spec/unit/parser/type_loader_spec.rb +53 -73
  954. data/spec/unit/pops/adaptable_spec.rb +22 -22
  955. data/spec/unit/pops/binder/bindings_checker_spec.rb +14 -14
  956. data/spec/unit/pops/binder/bindings_composer_spec.rb +4 -6
  957. data/spec/unit/pops/binder/bindings_validator_factory_spec.rb +3 -3
  958. data/spec/unit/pops/binder/config/binder_config_spec.rb +8 -1
  959. data/spec/unit/pops/binder/injector_spec.rb +92 -92
  960. data/spec/unit/pops/containment_spec.rb +4 -4
  961. data/spec/unit/pops/evaluator/access_ops_spec.rb +5 -24
  962. data/spec/unit/pops/evaluator/arithmetic_ops_spec.rb +23 -23
  963. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +22 -22
  964. data/spec/unit/pops/evaluator/collections_ops_spec.rb +1 -3
  965. data/spec/unit/pops/evaluator/comparison_ops_spec.rb +104 -107
  966. data/spec/unit/pops/evaluator/conditionals_spec.rb +39 -39
  967. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +75 -143
  968. data/spec/unit/pops/evaluator/evaluator_rspec_helper.rb +1 -5
  969. data/spec/unit/pops/evaluator/logical_ops_spec.rb +15 -15
  970. data/spec/unit/pops/evaluator/string_interpolation_spec.rb +5 -5
  971. data/spec/unit/pops/evaluator/variables_spec.rb +18 -18
  972. data/spec/unit/pops/factory_rspec_helper.rb +0 -8
  973. data/spec/unit/pops/factory_spec.rb +104 -104
  974. data/spec/unit/pops/issues_spec.rb +21 -21
  975. data/spec/unit/pops/label_provider_spec.rb +6 -6
  976. data/spec/unit/pops/loaders/loaders_spec.rb +3 -3
  977. data/spec/unit/pops/model/model_spec.rb +10 -10
  978. data/spec/unit/pops/parser/epp_parser_spec.rb +20 -20
  979. data/spec/unit/pops/parser/evaluating_parser_spec.rb +2 -2
  980. data/spec/unit/pops/parser/lexer2_spec.rb +65 -276
  981. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +91 -91
  982. data/spec/unit/pops/parser/parse_calls_spec.rb +19 -19
  983. data/spec/unit/pops/parser/parse_conditionals_spec.rb +38 -22
  984. data/spec/unit/pops/parser/parse_containers_spec.rb +47 -47
  985. data/spec/unit/pops/parser/parse_heredoc_spec.rb +15 -62
  986. data/spec/unit/pops/parser/parse_resource_spec.rb +75 -70
  987. data/spec/unit/pops/parser/parser_rspec_helper.rb +0 -5
  988. data/spec/unit/pops/parser/parser_spec.rb +7 -7
  989. data/spec/unit/pops/parser/parsing_typed_parameters_spec.rb +0 -7
  990. data/spec/unit/pops/parser/rgen_sanitycheck_spec.rb +2 -2
  991. data/spec/unit/pops/types/class_loader_spec.rb +10 -0
  992. data/spec/unit/pops/types/type_calculator_spec.rb +456 -651
  993. data/spec/unit/pops/types/type_factory_spec.rb +59 -59
  994. data/spec/unit/pops/types/type_parser_spec.rb +2 -10
  995. data/spec/unit/pops/validator/validator_spec.rb +3 -57
  996. data/spec/unit/pops/visitor_spec.rb +4 -4
  997. data/spec/unit/property/boolean_spec.rb +2 -2
  998. data/spec/unit/property/ensure_spec.rb +1 -1
  999. data/spec/unit/property/keyvalue_spec.rb +16 -16
  1000. data/spec/unit/property/list_spec.rb +18 -18
  1001. data/spec/unit/property/ordered_list_spec.rb +7 -7
  1002. data/spec/unit/property_spec.rb +72 -96
  1003. data/spec/unit/provider/aixobject_spec.rb +12 -12
  1004. data/spec/unit/provider/augeas/augeas_spec.rb +171 -149
  1005. data/spec/unit/provider/cisco_spec.rb +2 -2
  1006. data/spec/unit/provider/command_spec.rb +1 -1
  1007. data/spec/unit/provider/cron/crontab_spec.rb +9 -9
  1008. data/spec/unit/provider/cron/parsed_spec.rb +59 -38
  1009. data/spec/unit/provider/exec/posix_spec.rb +9 -19
  1010. data/spec/unit/provider/exec/shell_spec.rb +13 -13
  1011. data/spec/unit/provider/exec/windows_spec.rb +10 -10
  1012. data/spec/unit/provider/exec_spec.rb +2 -2
  1013. data/spec/unit/provider/file/posix_spec.rb +27 -27
  1014. data/spec/unit/provider/file/windows_spec.rb +15 -15
  1015. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  1016. data/spec/unit/provider/group/ldap_spec.rb +11 -11
  1017. data/spec/unit/provider/group/pw_spec.rb +3 -3
  1018. data/spec/unit/provider/group/windows_adsi_spec.rb +48 -62
  1019. data/spec/unit/provider/host/parsed_spec.rb +58 -22
  1020. data/spec/unit/provider/interface/cisco_spec.rb +3 -3
  1021. data/spec/unit/provider/ldap_spec.rb +23 -23
  1022. data/spec/unit/provider/macauthorization_spec.rb +6 -6
  1023. data/spec/unit/provider/mcx/mcxcontent_spec.rb +6 -6
  1024. data/spec/unit/provider/mount/parsed_spec.rb +101 -119
  1025. data/spec/unit/provider/mount_spec.rb +0 -0
  1026. data/spec/unit/provider/naginator_spec.rb +8 -8
  1027. data/spec/unit/provider/nameservice/directoryservice_spec.rb +5 -27
  1028. data/spec/unit/provider/nameservice_spec.rb +26 -26
  1029. data/spec/unit/provider/network_device_spec.rb +11 -11
  1030. data/spec/unit/provider/package/aix_spec.rb +3 -3
  1031. data/spec/unit/provider/package/appdmg_spec.rb +1 -1
  1032. data/spec/unit/provider/package/apt_spec.rb +4 -4
  1033. data/spec/unit/provider/package/aptitude_spec.rb +1 -1
  1034. data/spec/unit/provider/package/aptrpm_spec.rb +3 -3
  1035. data/spec/unit/provider/package/dpkg_spec.rb +0 -0
  1036. data/spec/unit/provider/package/freebsd_spec.rb +1 -1
  1037. data/spec/unit/provider/package/gem_spec.rb +12 -12
  1038. data/spec/unit/provider/package/hpux_spec.rb +3 -3
  1039. data/spec/unit/provider/package/macports_spec.rb +15 -15
  1040. data/spec/unit/provider/package/nim_spec.rb +11 -11
  1041. data/spec/unit/provider/package/openbsd_spec.rb +72 -37
  1042. data/spec/unit/provider/package/opkg_spec.rb +14 -11
  1043. data/spec/unit/provider/package/pacman_spec.rb +185 -86
  1044. data/spec/unit/provider/package/pip_spec.rb +25 -54
  1045. data/spec/unit/provider/package/pkg_spec.rb +145 -71
  1046. data/spec/unit/provider/package/pkgdmg_spec.rb +9 -9
  1047. data/spec/unit/provider/package/pkgin_spec.rb +18 -18
  1048. data/spec/unit/provider/package/pkgutil_spec.rb +19 -19
  1049. data/spec/unit/provider/package/portage_spec.rb +8 -4
  1050. data/spec/unit/provider/package/rpm_spec.rb +103 -9
  1051. data/spec/unit/provider/package/sun_spec.rb +14 -14
  1052. data/spec/unit/provider/package/up2date_spec.rb +1 -1
  1053. data/spec/unit/provider/package/{urpmi.rb → urpmi_spec.rb} +3 -3
  1054. data/spec/unit/provider/package/windows/exe_package_spec.rb +15 -13
  1055. data/spec/unit/provider/package/windows/msi_package_spec.rb +16 -16
  1056. data/spec/unit/provider/package/windows/package_spec.rb +14 -14
  1057. data/spec/unit/provider/package/windows_spec.rb +26 -26
  1058. data/spec/unit/provider/package/yum_spec.rb +292 -98
  1059. data/spec/unit/provider/package/zypper_spec.rb +20 -31
  1060. data/spec/unit/provider/parsedfile_spec.rb +9 -9
  1061. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +192 -434
  1062. data/spec/unit/provider/selboolean_spec.rb +2 -2
  1063. data/spec/unit/provider/selmodule_spec.rb +8 -8
  1064. data/spec/unit/provider/service/base_spec.rb +27 -38
  1065. data/spec/unit/provider/service/daemontools_spec.rb +11 -11
  1066. data/spec/unit/provider/service/debian_spec.rb +8 -8
  1067. data/spec/unit/provider/service/freebsd_spec.rb +7 -8
  1068. data/spec/unit/provider/service/gentoo_spec.rb +12 -13
  1069. data/spec/unit/provider/service/init_spec.rb +25 -38
  1070. data/spec/unit/provider/service/launchd_spec.rb +19 -125
  1071. data/spec/unit/provider/service/openbsd_spec.rb +90 -144
  1072. data/spec/unit/provider/service/openrc_spec.rb +14 -14
  1073. data/spec/unit/provider/service/openwrt_spec.rb +9 -9
  1074. data/spec/unit/provider/service/redhat_spec.rb +14 -15
  1075. data/spec/unit/provider/service/runit_spec.rb +11 -11
  1076. data/spec/unit/provider/service/smf_spec.rb +19 -19
  1077. data/spec/unit/provider/service/src_spec.rb +9 -9
  1078. data/spec/unit/provider/service/systemd_spec.rb +33 -15
  1079. data/spec/unit/provider/service/upstart_spec.rb +59 -59
  1080. data/spec/unit/provider/service/windows_spec.rb +6 -6
  1081. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +18 -18
  1082. data/spec/unit/provider/sshkey/parsed_spec.rb +11 -11
  1083. data/spec/unit/provider/user/aix_spec.rb +19 -19
  1084. data/spec/unit/provider/user/directoryservice_spec.rb +51 -95
  1085. data/spec/unit/provider/user/hpux_spec.rb +24 -3
  1086. data/spec/unit/provider/user/ldap_spec.rb +12 -12
  1087. data/spec/unit/provider/user/openbsd_spec.rb +77 -0
  1088. data/spec/unit/provider/user/pw_spec.rb +5 -5
  1089. data/spec/unit/provider/user/user_role_add_spec.rb +20 -20
  1090. data/spec/unit/provider/user/useradd_spec.rb +48 -32
  1091. data/spec/unit/provider/user/windows_adsi_spec.rb +9 -31
  1092. data/spec/unit/provider/vlan/cisco_spec.rb +3 -3
  1093. data/spec/unit/provider/yumrepo/inifile_spec.rb +3 -3
  1094. data/spec/unit/provider/zfs/zfs_spec.rb +11 -11
  1095. data/spec/unit/provider/zone/solaris_spec.rb +22 -55
  1096. data/spec/unit/provider/zpool/zpool_spec.rb +22 -22
  1097. data/spec/unit/provider_spec.rb +110 -102
  1098. data/spec/unit/puppet_spec.rb +15 -8
  1099. data/spec/unit/relationship_spec.rb +37 -41
  1100. data/spec/unit/reports/http_spec.rb +0 -0
  1101. data/spec/unit/reports/store_spec.rb +3 -3
  1102. data/spec/unit/reports_spec.rb +5 -5
  1103. data/spec/unit/resource/catalog_spec.rb +93 -111
  1104. data/spec/unit/resource/status_spec.rb +49 -75
  1105. data/spec/unit/resource/type_collection_helper_spec.rb +1 -1
  1106. data/spec/unit/resource/type_collection_spec.rb +59 -164
  1107. data/spec/unit/resource/type_spec.rb +115 -120
  1108. data/spec/unit/resource_spec.rb +176 -159
  1109. data/spec/unit/scheduler/job_spec.rb +12 -12
  1110. data/spec/unit/scheduler/scheduler_spec.rb +8 -8
  1111. data/spec/unit/scheduler/splay_job_spec.rb +4 -4
  1112. data/spec/unit/semver_spec.rb +66 -64
  1113. data/spec/unit/settings/autosign_setting_spec.rb +1 -0
  1114. data/spec/unit/settings/config_file_spec.rb +13 -40
  1115. data/spec/unit/settings/directory_setting_spec.rb +1 -1
  1116. data/spec/unit/settings/duration_setting_spec.rb +9 -5
  1117. data/spec/unit/settings/environment_conf_spec.rb +0 -11
  1118. data/spec/unit/settings/file_setting_spec.rb +38 -69
  1119. data/spec/unit/settings/ini_file_spec.rb +2 -2
  1120. data/spec/unit/settings/path_setting_spec.rb +5 -5
  1121. data/spec/unit/settings/priority_setting_spec.rb +7 -7
  1122. data/spec/unit/settings/string_setting_spec.rb +7 -7
  1123. data/spec/unit/settings/terminus_setting_spec.rb +4 -4
  1124. data/spec/unit/settings/value_translator_spec.rb +22 -22
  1125. data/spec/unit/settings_spec.rb +189 -338
  1126. data/spec/unit/ssl/base_spec.rb +5 -5
  1127. data/spec/unit/ssl/certificate_authority/autosign_command_spec.rb +2 -2
  1128. data/spec/unit/ssl/certificate_authority/interface_spec.rb +40 -13
  1129. data/spec/unit/ssl/certificate_authority_spec.rb +23 -23
  1130. data/spec/unit/ssl/certificate_factory_spec.rb +39 -26
  1131. data/spec/unit/ssl/certificate_request_attributes_spec.rb +2 -2
  1132. data/spec/unit/ssl/certificate_request_spec.rb +52 -40
  1133. data/spec/unit/ssl/certificate_revocation_list_spec.rb +10 -10
  1134. data/spec/unit/ssl/certificate_spec.rb +35 -38
  1135. data/spec/unit/ssl/configuration_spec.rb +12 -14
  1136. data/spec/unit/ssl/digest_spec.rb +5 -5
  1137. data/spec/unit/ssl/host_spec.rb +91 -91
  1138. data/spec/unit/ssl/inventory_spec.rb +11 -34
  1139. data/spec/unit/ssl/key_spec.rb +23 -23
  1140. data/spec/unit/ssl/oids_spec.rb +28 -15
  1141. data/spec/unit/ssl/validator_spec.rb +16 -17
  1142. data/spec/unit/status_spec.rb +6 -12
  1143. data/spec/unit/transaction/additional_resource_generator_spec.rb +2 -2
  1144. data/spec/unit/transaction/event_manager_spec.rb +38 -8
  1145. data/spec/unit/transaction/event_spec.rb +29 -29
  1146. data/spec/unit/transaction/report_spec.rb +76 -90
  1147. data/spec/unit/transaction/resource_harness_spec.rb +42 -42
  1148. data/spec/unit/transaction_spec.rb +66 -59
  1149. data/spec/unit/type/augeas_spec.rb +20 -20
  1150. data/spec/unit/type/component_spec.rb +10 -10
  1151. data/spec/unit/type/computer_spec.rb +10 -10
  1152. data/spec/unit/type/cron_spec.rb +21 -21
  1153. data/spec/unit/type/exec_spec.rb +65 -73
  1154. data/spec/unit/type/file/checksum_spec.rb +8 -8
  1155. data/spec/unit/type/file/content_spec.rb +144 -85
  1156. data/spec/unit/type/file/ctime_spec.rb +4 -4
  1157. data/spec/unit/type/file/ensure_spec.rb +11 -11
  1158. data/spec/unit/type/file/group_spec.rb +5 -5
  1159. data/spec/unit/type/file/mode_spec.rb +30 -28
  1160. data/spec/unit/type/file/mtime_spec.rb +4 -4
  1161. data/spec/unit/type/file/owner_spec.rb +5 -5
  1162. data/spec/unit/type/file/selinux_spec.rb +8 -8
  1163. data/spec/unit/type/file/source_spec.rb +118 -135
  1164. data/spec/unit/type/file/type_spec.rb +2 -2
  1165. data/spec/unit/type/file_spec.rb +161 -160
  1166. data/spec/unit/type/filebucket_spec.rb +8 -8
  1167. data/spec/unit/type/group_spec.rb +12 -12
  1168. data/spec/unit/type/host_spec.rb +41 -25
  1169. data/spec/unit/type/interface_spec.rb +6 -6
  1170. data/spec/unit/type/k5login_spec.rb +18 -18
  1171. data/spec/unit/type/macauthorization_spec.rb +17 -17
  1172. data/spec/unit/type/mailalias_spec.rb +34 -6
  1173. data/spec/unit/type/maillist_spec.rb +2 -2
  1174. data/spec/unit/type/mcx_spec.rb +13 -13
  1175. data/spec/unit/type/mount_spec.rb +40 -40
  1176. data/spec/unit/type/nagios_spec.rb +23 -23
  1177. data/spec/unit/type/noop_metaparam_spec.rb +5 -5
  1178. data/spec/unit/type/package/package_settings_spec.rb +9 -9
  1179. data/spec/unit/type/package_spec.rb +87 -18
  1180. data/spec/unit/type/resources_spec.rb +46 -46
  1181. data/spec/unit/type/schedule_spec.rb +83 -83
  1182. data/spec/unit/type/scheduled_task_spec.rb +15 -15
  1183. data/spec/unit/type/selboolean_spec.rb +2 -2
  1184. data/spec/unit/type/selmodule_spec.rb +2 -2
  1185. data/spec/unit/type/service_spec.rb +24 -24
  1186. data/spec/unit/type/ssh_authorized_key_spec.rb +2 -2
  1187. data/spec/unit/type/sshkey_spec.rb +0 -0
  1188. data/spec/unit/type/stage_spec.rb +1 -1
  1189. data/spec/unit/type/tidy_spec.rb +58 -39
  1190. data/spec/unit/type/user_spec.rb +56 -56
  1191. data/spec/unit/type/vlan_spec.rb +6 -6
  1192. data/spec/unit/type/whit_spec.rb +1 -1
  1193. data/spec/unit/type/yumrepo_spec.rb +15 -0
  1194. data/spec/unit/type/zfs_spec.rb +3 -3
  1195. data/spec/unit/type/zone_spec.rb +19 -19
  1196. data/spec/unit/type/zpool_spec.rb +15 -15
  1197. data/spec/unit/type_spec.rb +236 -163
  1198. data/spec/unit/util/autoload_spec.rb +31 -25
  1199. data/spec/unit/util/backups_spec.rb +4 -4
  1200. data/spec/unit/util/checksums_spec.rb +55 -27
  1201. data/spec/unit/util/colors_spec.rb +6 -50
  1202. data/spec/unit/util/command_line_spec.rb +13 -41
  1203. data/spec/unit/util/command_line_utils/puppet_option_parser_spec.rb +2 -2
  1204. data/spec/unit/util/constant_inflector_spec.rb +12 -12
  1205. data/spec/unit/util/diff_spec.rb +4 -4
  1206. data/spec/unit/util/errors_spec.rb +5 -5
  1207. data/spec/unit/util/execution_spec.rb +74 -29
  1208. data/spec/unit/util/execution_stub_spec.rb +10 -10
  1209. data/spec/unit/util/feature_spec.rb +15 -19
  1210. data/spec/unit/util/filetype_spec.rb +9 -9
  1211. data/spec/unit/util/http_proxy_spec.rb +18 -18
  1212. data/spec/unit/util/inifile_spec.rb +2 -2
  1213. data/spec/unit/util/json_lockfile_spec.rb +1 -1
  1214. data/spec/unit/util/ldap/connection_spec.rb +6 -6
  1215. data/spec/unit/util/ldap/generator_spec.rb +8 -8
  1216. data/spec/unit/util/ldap/manager_spec.rb +40 -40
  1217. data/spec/unit/util/lockfile_spec.rb +13 -13
  1218. data/spec/unit/util/log/destinations_spec.rb +52 -49
  1219. data/spec/unit/util/log_spec.rb +48 -173
  1220. data/spec/unit/util/logging_spec.rb +120 -3
  1221. data/spec/unit/util/metric_spec.rb +18 -33
  1222. data/spec/unit/util/monkey_patches_spec.rb +18 -139
  1223. data/spec/unit/util/nagios_maker_spec.rb +2 -2
  1224. data/spec/unit/util/network_device/cisco/device_spec.rb +23 -23
  1225. data/spec/unit/util/network_device/cisco/facts_spec.rb +3 -3
  1226. data/spec/unit/util/network_device/cisco/interface_spec.rb +0 -0
  1227. data/spec/unit/util/network_device/config_spec.rb +10 -16
  1228. data/spec/unit/util/network_device/ipcalc_spec.rb +10 -10
  1229. data/spec/unit/util/network_device/transport/base_spec.rb +2 -2
  1230. data/spec/unit/util/network_device/transport/ssh_spec.rb +10 -10
  1231. data/spec/unit/util/network_device/transport/telnet_spec.rb +3 -3
  1232. data/spec/unit/util/network_device_spec.rb +2 -2
  1233. data/spec/unit/util/package_spec.rb +2 -2
  1234. data/spec/unit/util/pidlock_spec.rb +38 -38
  1235. data/spec/unit/util/posix_spec.rb +25 -25
  1236. data/spec/unit/util/profiler/aggregate_spec.rb +14 -18
  1237. data/spec/unit/util/profiler/around_profiler_spec.rb +6 -6
  1238. data/spec/unit/util/profiler/logging_spec.rb +8 -8
  1239. data/spec/unit/util/profiler/object_counts_spec.rb +3 -5
  1240. data/spec/unit/util/profiler/wall_clock_spec.rb +1 -1
  1241. data/spec/unit/util/profiler_spec.rb +6 -14
  1242. data/spec/unit/util/rdoc_spec.rb +0 -85
  1243. data/spec/unit/util/reference_spec.rb +1 -1
  1244. data/spec/unit/util/resource_template_spec.rb +2 -2
  1245. data/spec/unit/util/{retryaction_spec.rb → retry_action_spec.rb} +25 -2
  1246. data/spec/unit/util/rubygems_spec.rb +8 -8
  1247. data/spec/unit/util/run_mode_spec.rb +159 -17
  1248. data/spec/unit/util/selinux_spec.rb +61 -39
  1249. data/spec/unit/util/ssl_spec.rb +13 -13
  1250. data/spec/unit/util/storage_spec.rb +27 -27
  1251. data/spec/unit/util/suidmanager_spec.rb +56 -67
  1252. data/spec/unit/util/symbolic_file_mode_spec.rb +15 -16
  1253. data/spec/unit/util/tag_set_spec.rb +5 -5
  1254. data/spec/unit/util/tagging_spec.rb +0 -0
  1255. data/spec/unit/util/terminal_spec.rb +5 -5
  1256. data/spec/unit/util/user_attr_spec.rb +6 -6
  1257. data/spec/unit/util/warnings_spec.rb +9 -1
  1258. data/spec/unit/util/watcher_spec.rb +1 -1
  1259. data/spec/unit/util/windows/access_control_entry_spec.rb +9 -9
  1260. data/spec/unit/util/windows/access_control_list_spec.rb +21 -21
  1261. data/spec/unit/util/windows/adsi_spec.rb +71 -209
  1262. data/spec/unit/util/windows/api_types_spec.rb +3 -3
  1263. data/spec/unit/util/windows/registry_spec.rb +71 -46
  1264. data/spec/unit/util/windows/root_certs_spec.rb +1 -1
  1265. data/spec/unit/util/windows/security_descriptor_spec.rb +18 -18
  1266. data/spec/unit/util/windows/sid_spec.rb +40 -20
  1267. data/spec/unit/util/windows/string_spec.rb +4 -4
  1268. data/spec/unit/util/yaml_spec.rb +1 -1
  1269. data/spec/unit/util_spec.rb +73 -124
  1270. data/spec/unit/version_spec.rb +4 -4
  1271. data/spec/watchr.rb +1 -5
  1272. data/tasks/benchmark.rake +1 -6
  1273. data/tasks/ci.rake +1 -1
  1274. data/tasks/manpages.rake +0 -9
  1275. data/tasks/parallel.rake +4 -7
  1276. data/tasks/parser.rake +0 -5
  1277. metadata +175 -461
  1278. data/conf/tagmail.conf +0 -16
  1279. data/ext/debian/puppet.conf +0 -14
  1280. data/ext/debian/puppetmaster-common.puppetqd.default +0 -27
  1281. data/ext/debian/puppetmaster-common.puppetqd.init +0 -84
  1282. data/ext/gentoo/puppet/puppet.conf +0 -25
  1283. data/ext/ips/puppet.conf +0 -29
  1284. data/ext/nagios/naggen +0 -309
  1285. data/ext/puppet-load.rb +0 -393
  1286. data/ext/redhat/puppet.conf +0 -25
  1287. data/ext/redhat/queue.init +0 -105
  1288. data/lib/hiera/backend/puppet_backend.rb +0 -103
  1289. data/lib/puppet/application/instrumentation_data.rb +0 -7
  1290. data/lib/puppet/application/instrumentation_listener.rb +0 -7
  1291. data/lib/puppet/application/instrumentation_probe.rb +0 -7
  1292. data/lib/puppet/application/kick.rb +0 -351
  1293. data/lib/puppet/application/queue.rb +0 -161
  1294. data/lib/puppet/application/secret_agent.rb +0 -9
  1295. data/lib/puppet/dsl.rb +0 -7
  1296. data/lib/puppet/dsl/resource_api.rb +0 -120
  1297. data/lib/puppet/dsl/resource_type_api.rb +0 -34
  1298. data/lib/puppet/face/instrumentation_data.rb +0 -30
  1299. data/lib/puppet/face/instrumentation_listener.rb +0 -98
  1300. data/lib/puppet/face/instrumentation_probe.rb +0 -79
  1301. data/lib/puppet/face/secret_agent.rb +0 -54
  1302. data/lib/puppet/feature/pson.rb +0 -4
  1303. data/lib/puppet/feature/rails.rb +0 -47
  1304. data/lib/puppet/feature/rdoc1.rb +0 -16
  1305. data/lib/puppet/feature/rubygems.rb +0 -7
  1306. data/lib/puppet/feature/stomp.rb +0 -5
  1307. data/lib/puppet/file_collection.rb +0 -19
  1308. data/lib/puppet/file_collection/lookup.rb +0 -10
  1309. data/lib/puppet/file_system/file18.rb +0 -5
  1310. data/lib/puppet/functions/defined.rb +0 -130
  1311. data/lib/puppet/indirector/active_record.rb +0 -29
  1312. data/lib/puppet/indirector/catalog/active_record.rb +0 -39
  1313. data/lib/puppet/indirector/catalog/queue.rb +0 -9
  1314. data/lib/puppet/indirector/couch.rb +0 -78
  1315. data/lib/puppet/indirector/facts/active_record.rb +0 -44
  1316. data/lib/puppet/indirector/facts/couch.rb +0 -36
  1317. data/lib/puppet/indirector/facts/inventory_active_record.rb +0 -110
  1318. data/lib/puppet/indirector/facts/inventory_service.rb +0 -20
  1319. data/lib/puppet/indirector/facts/rest.rb +0 -8
  1320. data/lib/puppet/indirector/instrumentation_data.rb +0 -3
  1321. data/lib/puppet/indirector/instrumentation_data/local.rb +0 -22
  1322. data/lib/puppet/indirector/instrumentation_data/rest.rb +0 -8
  1323. data/lib/puppet/indirector/instrumentation_listener.rb +0 -3
  1324. data/lib/puppet/indirector/instrumentation_listener/local.rb +0 -26
  1325. data/lib/puppet/indirector/instrumentation_listener/rest.rb +0 -8
  1326. data/lib/puppet/indirector/instrumentation_probe.rb +0 -3
  1327. data/lib/puppet/indirector/instrumentation_probe/local.rb +0 -27
  1328. data/lib/puppet/indirector/instrumentation_probe/rest.rb +0 -8
  1329. data/lib/puppet/indirector/node/active_record.rb +0 -22
  1330. data/lib/puppet/indirector/queue.rb +0 -80
  1331. data/lib/puppet/indirector/resource/active_record.rb +0 -104
  1332. data/lib/puppet/indirector/resource/rest.rb +0 -17
  1333. data/lib/puppet/indirector/run/local.rb +0 -15
  1334. data/lib/puppet/indirector/run/rest.rb +0 -12
  1335. data/lib/puppet/module_tool/modulefile.rb +0 -78
  1336. data/lib/puppet/network/authentication.rb +0 -35
  1337. data/lib/puppet/network/http/api/v2.rb +0 -32
  1338. data/lib/puppet/network/http/api/v2/authorization.rb +0 -15
  1339. data/lib/puppet/parser/ast/arithmetic_operator.rb +0 -91
  1340. data/lib/puppet/parser/ast/astarray.rb +0 -50
  1341. data/lib/puppet/parser/ast/asthash.rb +0 -37
  1342. data/lib/puppet/parser/ast/boolean_operator.rb +0 -46
  1343. data/lib/puppet/parser/ast/caseopt.rb +0 -52
  1344. data/lib/puppet/parser/ast/casestatement.rb +0 -41
  1345. data/lib/puppet/parser/ast/collection.rb +0 -53
  1346. data/lib/puppet/parser/ast/collexpr.rb +0 -109
  1347. data/lib/puppet/parser/ast/comparison_operator.rb +0 -38
  1348. data/lib/puppet/parser/ast/definition.rb +0 -17
  1349. data/lib/puppet/parser/ast/else.rb +0 -22
  1350. data/lib/puppet/parser/ast/function.rb +0 -59
  1351. data/lib/puppet/parser/ast/ifstatement.rb +0 -34
  1352. data/lib/puppet/parser/ast/in_operator.rb +0 -24
  1353. data/lib/puppet/parser/ast/lambda.rb +0 -135
  1354. data/lib/puppet/parser/ast/match_operator.rb +0 -28
  1355. data/lib/puppet/parser/ast/method_call.rb +0 -77
  1356. data/lib/puppet/parser/ast/minus.rb +0 -23
  1357. data/lib/puppet/parser/ast/nop.rb +0 -11
  1358. data/lib/puppet/parser/ast/not.rb +0 -19
  1359. data/lib/puppet/parser/ast/relationship.rb +0 -47
  1360. data/lib/puppet/parser/ast/resource_defaults.rb +0 -24
  1361. data/lib/puppet/parser/ast/resource_override.rb +0 -62
  1362. data/lib/puppet/parser/ast/resource_reference.rb +0 -28
  1363. data/lib/puppet/parser/ast/selector.rb +0 -50
  1364. data/lib/puppet/parser/ast/vardef.rb +0 -38
  1365. data/lib/puppet/parser/code_merger.rb +0 -13
  1366. data/lib/puppet/parser/collector.rb +0 -177
  1367. data/lib/puppet/parser/functions/extlookup.rb +0 -153
  1368. data/lib/puppet/parser/functions/search.rb +0 -12
  1369. data/lib/puppet/parser/grammar.ra +0 -806
  1370. data/lib/puppet/parser/lexer.rb +0 -608
  1371. data/lib/puppet/parser/makefile +0 -8
  1372. data/lib/puppet/parser/methods.rb +0 -69
  1373. data/lib/puppet/parser/parser.rb +0 -2559
  1374. data/lib/puppet/parser/parser_support.rb +0 -195
  1375. data/lib/puppet/pops/binder/lookup.rb +0 -216
  1376. data/lib/puppet/pops/migration/migration_checker.rb +0 -45
  1377. data/lib/puppet/pops/model/ast_tree_dumper.rb +0 -386
  1378. data/lib/puppet/provider/package/msi.rb +0 -125
  1379. data/lib/puppet/provider/package/yumhelper.py +0 -159
  1380. data/lib/puppet/rails.rb +0 -139
  1381. data/lib/puppet/rails/benchmark.rb +0 -63
  1382. data/lib/puppet/rails/database/001_add_created_at_to_all_tables.rb +0 -13
  1383. data/lib/puppet/rails/database/002_remove_duplicated_index_on_all_tables.rb +0 -13
  1384. data/lib/puppet/rails/database/003_add_environment_to_host.rb +0 -9
  1385. data/lib/puppet/rails/database/004_add_inventory_service_tables.rb +0 -36
  1386. data/lib/puppet/rails/database/schema.rb +0 -136
  1387. data/lib/puppet/rails/fact_name.rb +0 -7
  1388. data/lib/puppet/rails/fact_value.rb +0 -10
  1389. data/lib/puppet/rails/host.rb +0 -258
  1390. data/lib/puppet/rails/inventory_fact.rb +0 -5
  1391. data/lib/puppet/rails/inventory_node.rb +0 -43
  1392. data/lib/puppet/rails/param_name.rb +0 -25
  1393. data/lib/puppet/rails/param_value.rb +0 -74
  1394. data/lib/puppet/rails/puppet_tag.rb +0 -10
  1395. data/lib/puppet/rails/resource.rb +0 -235
  1396. data/lib/puppet/rails/resource_tag.rb +0 -26
  1397. data/lib/puppet/rails/source_file.rb +0 -8
  1398. data/lib/puppet/reports/rrdgraph.rb +0 -128
  1399. data/lib/puppet/reports/tagmail.rb +0 -179
  1400. data/lib/puppet/run.rb +0 -109
  1401. data/lib/puppet/util/cacher.rb +0 -74
  1402. data/lib/puppet/util/inline_docs.rb +0 -26
  1403. data/lib/puppet/util/instrumentation.rb +0 -152
  1404. data/lib/puppet/util/instrumentation/data.rb +0 -46
  1405. data/lib/puppet/util/instrumentation/indirection_probe.rb +0 -41
  1406. data/lib/puppet/util/instrumentation/instrumentable.rb +0 -136
  1407. data/lib/puppet/util/instrumentation/listener.rb +0 -72
  1408. data/lib/puppet/util/instrumentation/listeners/log.rb +0 -23
  1409. data/lib/puppet/util/instrumentation/listeners/performance.rb +0 -24
  1410. data/lib/puppet/util/log/rate_limited_logger.rb +0 -40
  1411. data/lib/puppet/util/monkey_patches/lines.rb +0 -13
  1412. data/lib/puppet/util/plugins.rb +0 -82
  1413. data/lib/puppet/util/pson.rb +0 -13
  1414. data/lib/puppet/util/queue.rb +0 -96
  1415. data/lib/puppet/util/queue/stomp.rb +0 -60
  1416. data/lib/puppet/util/rails/cache_accumulator.rb +0 -65
  1417. data/lib/puppet/util/rails/collection_merger.rb +0 -17
  1418. data/lib/puppet/util/rails/reference_serializer.rb +0 -32
  1419. data/lib/puppet/util/rdoc/parser/puppet_parser_rdoc1.rb +0 -19
  1420. data/lib/puppet/util/retryaction.rb +0 -47
  1421. data/lib/puppet/util/zaml.rb +0 -419
  1422. data/lib/puppet/vendor/load_safe_yaml.rb +0 -1
  1423. data/lib/puppet/vendor/safe_yaml/CHANGES.md +0 -104
  1424. data/lib/puppet/vendor/safe_yaml/Gemfile +0 -11
  1425. data/lib/puppet/vendor/safe_yaml/LICENSE.txt +0 -22
  1426. data/lib/puppet/vendor/safe_yaml/PUPPET_README.md +0 -6
  1427. data/lib/puppet/vendor/safe_yaml/README.md +0 -179
  1428. data/lib/puppet/vendor/safe_yaml/Rakefile +0 -6
  1429. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml.rb +0 -253
  1430. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/deep.rb +0 -34
  1431. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/date.rb +0 -27
  1432. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/hexadecimal.rb +0 -12
  1433. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/parse/sexagesimal.rb +0 -26
  1434. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/psych_handler.rb +0 -92
  1435. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/psych_resolver.rb +0 -52
  1436. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/resolver.rb +0 -94
  1437. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/safe_to_ruby_visitor.rb +0 -17
  1438. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_hack.rb +0 -36
  1439. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_node_monkeypatch.rb +0 -43
  1440. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/syck_resolver.rb +0 -38
  1441. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform.rb +0 -41
  1442. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_boolean.rb +0 -21
  1443. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_date.rb +0 -11
  1444. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_float.rb +0 -33
  1445. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_integer.rb +0 -25
  1446. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_nil.rb +0 -18
  1447. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/to_symbol.rb +0 -13
  1448. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/transform/transformation_map.rb +0 -47
  1449. data/lib/puppet/vendor/safe_yaml/lib/safe_yaml/version.rb +0 -3
  1450. data/lib/puppet/vendor/safe_yaml/run_specs_all_ruby_versions.sh +0 -21
  1451. data/lib/puppet/vendor/safe_yaml/safe_yaml.gemspec +0 -18
  1452. data/lib/puppet/vendor/safe_yaml/spec/exploit.1.9.2.yaml +0 -2
  1453. data/lib/puppet/vendor/safe_yaml/spec/exploit.1.9.3.yaml +0 -2
  1454. data/lib/puppet/vendor/safe_yaml/spec/psych_resolver_spec.rb +0 -10
  1455. data/lib/puppet/vendor/safe_yaml/spec/resolver_specs.rb +0 -250
  1456. data/lib/puppet/vendor/safe_yaml/spec/safe_yaml_spec.rb +0 -702
  1457. data/lib/puppet/vendor/safe_yaml/spec/spec_helper.rb +0 -18
  1458. data/lib/puppet/vendor/safe_yaml/spec/support/exploitable_back_door.rb +0 -29
  1459. data/lib/puppet/vendor/safe_yaml/spec/syck_resolver_spec.rb +0 -10
  1460. data/lib/puppet/vendor/safe_yaml/spec/transform/base64_spec.rb +0 -11
  1461. data/lib/puppet/vendor/safe_yaml/spec/transform/to_date_spec.rb +0 -34
  1462. data/lib/puppet/vendor/safe_yaml/spec/transform/to_float_spec.rb +0 -42
  1463. data/lib/puppet/vendor/safe_yaml/spec/transform/to_integer_spec.rb +0 -59
  1464. data/lib/puppet/vendor/safe_yaml/spec/transform/to_symbol_spec.rb +0 -49
  1465. data/lib/puppet/vendor/safe_yaml_patches.rb +0 -9
  1466. data/lib/puppetx.rb +0 -89
  1467. data/man/man8/puppet-instrumentation_data.8 +0 -141
  1468. data/man/man8/puppet-instrumentation_listener.8 +0 -218
  1469. data/man/man8/puppet-instrumentation_probe.8 +0 -203
  1470. data/man/man8/puppet-kick.8 +0 -131
  1471. data/man/man8/puppet-queue.8 +0 -55
  1472. data/man/man8/puppet-secret_agent.8 +0 -70
  1473. data/spec/fixtures/module.tar.gz +0 -0
  1474. data/spec/fixtures/unit/provider/package/pkg/publisher +0 -2
  1475. data/spec/fixtures/unit/provider/package/pkg/simple +0 -2
  1476. data/spec/fixtures/yaml/report0.25.x.yaml +0 -64
  1477. data/spec/integration/indirector/catalog/queue_spec.rb +0 -55
  1478. data/spec/integration/module_tool/tar/mini_spec.rb +0 -28
  1479. data/spec/integration/parser/dynamic_scoping_spec.rb +0 -131
  1480. data/spec/integration/parser/future_compiler_spec.rb +0 -822
  1481. data/spec/integration/parser/parser_spec.rb +0 -207
  1482. data/spec/integration/parser/ruby_manifest_spec.rb +0 -119
  1483. data/spec/integration/type/sshkey_spec.rb +0 -22
  1484. data/spec/integration/util/feature_spec.rb +0 -53
  1485. data/spec/lib/puppet_spec/database.rb +0 -29
  1486. data/spec/monkey_patches/alias_should_to_must.rb +0 -21
  1487. data/spec/shared_contexts/platform.rb +0 -52
  1488. data/spec/unit/application/kick_spec.rb +0 -296
  1489. data/spec/unit/application/queue_spec.rb +0 -168
  1490. data/spec/unit/application/secret_agent_spec.rb +0 -34
  1491. data/spec/unit/dsl/resource_api_spec.rb +0 -180
  1492. data/spec/unit/dsl/resource_type_api_spec.rb +0 -53
  1493. data/spec/unit/face/instrumentation_data_spec.rb +0 -7
  1494. data/spec/unit/face/instrumentation_listener_spec.rb +0 -38
  1495. data/spec/unit/face/instrumentation_probe_spec.rb +0 -21
  1496. data/spec/unit/face/secret_agent_spec.rb +0 -27
  1497. data/spec/unit/functions/defined_spec.rb +0 -291
  1498. data/spec/unit/hiera/backend/puppet_backend_spec.rb +0 -148
  1499. data/spec/unit/indirector/active_record_spec.rb +0 -75
  1500. data/spec/unit/indirector/catalog/active_record_spec.rb +0 -107
  1501. data/spec/unit/indirector/catalog/queue_spec.rb +0 -19
  1502. data/spec/unit/indirector/facts/active_record_spec.rb +0 -113
  1503. data/spec/unit/indirector/facts/couch_spec.rb +0 -102
  1504. data/spec/unit/indirector/facts/inventory_active_record_spec.rb +0 -175
  1505. data/spec/unit/indirector/facts/inventory_service_spec.rb +0 -21
  1506. data/spec/unit/indirector/facts/rest_spec.rb +0 -10
  1507. data/spec/unit/indirector/instrumentation_data/local_spec.rb +0 -52
  1508. data/spec/unit/indirector/instrumentation_data/rest_spec.rb +0 -11
  1509. data/spec/unit/indirector/instrumentation_listener/local_spec.rb +0 -65
  1510. data/spec/unit/indirector/instrumentation_listener/rest_spec.rb +0 -11
  1511. data/spec/unit/indirector/instrumentation_probe/local_spec.rb +0 -65
  1512. data/spec/unit/indirector/instrumentation_probe/rest_spec.rb +0 -11
  1513. data/spec/unit/indirector/node/active_record_spec.rb +0 -48
  1514. data/spec/unit/indirector/queue_spec.rb +0 -115
  1515. data/spec/unit/indirector/resource/active_record_spec.rb +0 -166
  1516. data/spec/unit/indirector/resource/rest_spec.rb +0 -10
  1517. data/spec/unit/indirector/run/local_spec.rb +0 -21
  1518. data/spec/unit/indirector/run/rest_spec.rb +0 -10
  1519. data/spec/unit/network/authentication_spec.rb +0 -104
  1520. data/spec/unit/network/http/api/v2_spec.rb +0 -14
  1521. data/spec/unit/parser/ast/arithmetic_operator_spec.rb +0 -160
  1522. data/spec/unit/parser/ast/astarray_spec.rb +0 -56
  1523. data/spec/unit/parser/ast/asthash_spec.rb +0 -98
  1524. data/spec/unit/parser/ast/boolean_operator_spec.rb +0 -54
  1525. data/spec/unit/parser/ast/casestatement_spec.rb +0 -168
  1526. data/spec/unit/parser/ast/collection_spec.rb +0 -70
  1527. data/spec/unit/parser/ast/collexpr_spec.rb +0 -120
  1528. data/spec/unit/parser/ast/comparison_operator_spec.rb +0 -118
  1529. data/spec/unit/parser/ast/definition_spec.rb +0 -21
  1530. data/spec/unit/parser/ast/function_spec.rb +0 -92
  1531. data/spec/unit/parser/ast/hostclass_spec.rb +0 -72
  1532. data/spec/unit/parser/ast/ifstatement_spec.rb +0 -77
  1533. data/spec/unit/parser/ast/in_operator_spec.rb +0 -61
  1534. data/spec/unit/parser/ast/match_operator_spec.rb +0 -51
  1535. data/spec/unit/parser/ast/minus_spec.rb +0 -37
  1536. data/spec/unit/parser/ast/node_spec.rb +0 -30
  1537. data/spec/unit/parser/ast/nop_spec.rb +0 -19
  1538. data/spec/unit/parser/ast/not_spec.rb +0 -31
  1539. data/spec/unit/parser/ast/relationship_spec.rb +0 -87
  1540. data/spec/unit/parser/ast/resource_defaults_spec.rb +0 -21
  1541. data/spec/unit/parser/ast/resource_override_spec.rb +0 -50
  1542. data/spec/unit/parser/ast/resource_reference_spec.rb +0 -56
  1543. data/spec/unit/parser/ast/resource_spec.rb +0 -183
  1544. data/spec/unit/parser/ast/resourceparam_spec.rb +0 -51
  1545. data/spec/unit/parser/ast/selector_spec.rb +0 -88
  1546. data/spec/unit/parser/ast/vardef_spec.rb +0 -68
  1547. data/spec/unit/parser/ast_spec.rb +0 -76
  1548. data/spec/unit/parser/collector_spec.rb +0 -438
  1549. data/spec/unit/parser/functions/extlookup_spec.rb +0 -102
  1550. data/spec/unit/parser/functions/search_spec.rb +0 -28
  1551. data/spec/unit/parser/lexer_spec.rb +0 -877
  1552. data/spec/unit/parser/parser_spec.rb +0 -535
  1553. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +0 -19
  1554. data/spec/unit/pops/migration_spec.rb +0 -180
  1555. data/spec/unit/pops/model/ast_transformer_spec.rb +0 -76
  1556. data/spec/unit/pops/transformer/transform_basic_expressions_spec.rb +0 -243
  1557. data/spec/unit/pops/transformer/transform_calls_spec.rb +0 -115
  1558. data/spec/unit/pops/transformer/transform_conditionals_spec.rb +0 -123
  1559. data/spec/unit/pops/transformer/transform_containers_spec.rb +0 -190
  1560. data/spec/unit/pops/transformer/transformer_rspec_helper.rb +0 -27
  1561. data/spec/unit/pops/validation_spec.rb +0 -66
  1562. data/spec/unit/provider/package/msi_spec.rb +0 -229
  1563. data/spec/unit/rails/host_spec.rb +0 -162
  1564. data/spec/unit/rails/param_value_spec.rb +0 -46
  1565. data/spec/unit/rails/resource_spec.rb +0 -115
  1566. data/spec/unit/rails_spec.rb +0 -244
  1567. data/spec/unit/reports/rrdgraph_spec.rb +0 -29
  1568. data/spec/unit/reports/tagmail_spec.rb +0 -218
  1569. data/spec/unit/run_spec.rb +0 -175
  1570. data/spec/unit/util/cache_accumulator_spec.rb +0 -74
  1571. data/spec/unit/util/cacher_spec.rb +0 -107
  1572. data/spec/unit/util/inline_docs_spec.rb +0 -31
  1573. data/spec/unit/util/instrumentation/data_spec.rb +0 -46
  1574. data/spec/unit/util/instrumentation/indirection_probe_spec.rb +0 -21
  1575. data/spec/unit/util/instrumentation/instrumentable_spec.rb +0 -186
  1576. data/spec/unit/util/instrumentation/listener_spec.rb +0 -101
  1577. data/spec/unit/util/instrumentation/listeners/log_spec.rb +0 -34
  1578. data/spec/unit/util/instrumentation/listeners/performance_spec.rb +0 -36
  1579. data/spec/unit/util/instrumentation_spec.rb +0 -181
  1580. data/spec/unit/util/log/rate_limited_logger_spec.rb +0 -51
  1581. data/spec/unit/util/monkey_patches/lines_spec.rb +0 -83
  1582. data/spec/unit/util/queue/stomp_spec.rb +0 -137
  1583. data/spec/unit/util/queue_spec.rb +0 -94
  1584. data/spec/unit/util/rdoc/parser_spec.rb +0 -608
  1585. data/spec/unit/util/reference_serializer_spec.rb +0 -51
  1586. data/spec/unit/util/zaml_spec.rb +0 -308
@@ -36,11 +36,11 @@ describe Puppet::Network::FormatHandler.format(:s) do
36
36
  end
37
37
 
38
38
  it "should support certificates" do
39
- @format.should be_supported(Puppet::SSL::Certificate)
39
+ expect(@format).to be_supported(Puppet::SSL::Certificate)
40
40
  end
41
41
 
42
42
  it "should not support catalogs" do
43
- @format.should_not be_supported(Puppet::Resource::Catalog)
43
+ expect(@format).not_to be_supported(Puppet::Resource::Catalog)
44
44
  end
45
45
  end
46
46
 
@@ -51,41 +51,41 @@ describe Puppet::Network::FormatHandler.format(:pson) do
51
51
 
52
52
  it "should be able to render an instance to pson" do
53
53
  instance = PsonIntTest.new("foo")
54
- PsonIntTest.canonical_order(@pson.render(instance)).should == PsonIntTest.canonical_order('{"type":"PsonIntTest","data":["foo"]}' )
54
+ expect(PsonIntTest.canonical_order(@pson.render(instance))).to eq(PsonIntTest.canonical_order('{"type":"PsonIntTest","data":["foo"]}' ))
55
55
  end
56
56
 
57
57
  it "should be able to render arrays to pson" do
58
- @pson.render([1,2]).should == '[1,2]'
58
+ expect(@pson.render([1,2])).to eq('[1,2]')
59
59
  end
60
60
 
61
61
  it "should be able to render arrays containing hashes to pson" do
62
- @pson.render([{"one"=>1},{"two"=>2}]).should == '[{"one":1},{"two":2}]'
62
+ expect(@pson.render([{"one"=>1},{"two"=>2}])).to eq('[{"one":1},{"two":2}]')
63
63
  end
64
64
 
65
65
  it "should be able to render multiple instances to pson" do
66
66
  one = PsonIntTest.new("one")
67
67
  two = PsonIntTest.new("two")
68
68
 
69
- PsonIntTest.canonical_order(@pson.render([one,two])).should == PsonIntTest.canonical_order('[{"type":"PsonIntTest","data":["one"]},{"type":"PsonIntTest","data":["two"]}]')
69
+ expect(PsonIntTest.canonical_order(@pson.render([one,two]))).to eq(PsonIntTest.canonical_order('[{"type":"PsonIntTest","data":["one"]},{"type":"PsonIntTest","data":["two"]}]'))
70
70
  end
71
71
 
72
72
  it "should be able to intern pson into an instance" do
73
- @pson.intern(PsonIntTest, '{"type":"PsonIntTest","data":["foo"]}').should == PsonIntTest.new("foo")
73
+ expect(@pson.intern(PsonIntTest, '{"type":"PsonIntTest","data":["foo"]}')).to eq(PsonIntTest.new("foo"))
74
74
  end
75
75
 
76
76
  it "should be able to intern pson with no class information into an instance" do
77
- @pson.intern(PsonIntTest, '["foo"]').should == PsonIntTest.new("foo")
77
+ expect(@pson.intern(PsonIntTest, '["foo"]')).to eq(PsonIntTest.new("foo"))
78
78
  end
79
79
 
80
80
  it "should be able to intern multiple instances from pson" do
81
- @pson.intern_multiple(PsonIntTest, '[{"type": "PsonIntTest", "data": ["one"]},{"type": "PsonIntTest", "data": ["two"]}]').should == [
81
+ expect(@pson.intern_multiple(PsonIntTest, '[{"type": "PsonIntTest", "data": ["one"]},{"type": "PsonIntTest", "data": ["two"]}]')).to eq([
82
82
  PsonIntTest.new("one"), PsonIntTest.new("two")
83
- ]
83
+ ])
84
84
  end
85
85
 
86
86
  it "should be able to intern multiple instances from pson with no class information" do
87
- @pson.intern_multiple(PsonIntTest, '[["one"],["two"]]').should == [
87
+ expect(@pson.intern_multiple(PsonIntTest, '[["one"],["two"]]')).to eq([
88
88
  PsonIntTest.new("one"), PsonIntTest.new("two")
89
- ]
89
+ ])
90
90
  end
91
91
  end
@@ -0,0 +1,56 @@
1
+ #! /usr/bin/env ruby
2
+ require 'spec_helper'
3
+ require 'puppet/network/http'
4
+ require 'puppet/network/http/api/indirected_routes'
5
+ require 'puppet/indirector_proxy'
6
+ require 'puppet_spec/files'
7
+ require 'puppet_spec/network'
8
+ require 'json'
9
+
10
+ describe Puppet::Network::HTTP::API::IndirectedRoutes do
11
+ include PuppetSpec::Files
12
+ include PuppetSpec::Network
13
+ include_context 'with supported checksum types'
14
+
15
+ describe "when running the master application" do
16
+ before :each do
17
+ Puppet::Application[:master].setup_terminuses
18
+ end
19
+
20
+ describe "using Puppet API to request file metadata" do
21
+ let(:handler) { Puppet::Network::HTTP::API::IndirectedRoutes.new }
22
+ let(:response) { Puppet::Network::HTTP::MemoryResponse.new }
23
+
24
+ with_checksum_types 'file_content', 'lib/files/file.rb' do
25
+ before :each do
26
+ Puppet.settings[:modulepath] = env_path
27
+ end
28
+
29
+ it "should find the file metadata with expected checksum" do
30
+ request = a_request_that_finds(Puppet::IndirectorProxy.new("modules/lib/file.rb", "file_metadata"),
31
+ {:accept_header => 'unknown, text/pson'},
32
+ {:environment => 'production', :checksum_type => checksum_type})
33
+ handler.call(request, response)
34
+ resp = JSON.parse(response.body)
35
+
36
+ expect(resp['checksum']['type']).to eq(checksum_type)
37
+ expect(checksum_valid(checksum_type, checksum, resp['checksum']['value'])).to be_truthy
38
+ end
39
+
40
+ it "should search for the file metadata with expected checksum" do
41
+ request = a_request_that_searches(Puppet::IndirectorProxy.new("modules/lib", "file_metadata"),
42
+ {:accept_header => 'unknown, text/pson'},
43
+ {:environment => 'production', :checksum_type => checksum_type, :recurse => 'yes'})
44
+ handler.call(request, response)
45
+ resp = JSON.parse(response.body)
46
+
47
+ expect(resp.length).to eq(2)
48
+ file = resp.find {|x| x['relative_path'] == 'file.rb'}
49
+
50
+ expect(file['checksum']['type']).to eq(checksum_type)
51
+ expect(checksum_valid(checksum_type, checksum, file['checksum']['value'])).to be_truthy
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -32,8 +32,8 @@ describe Puppet::Node::Environment do
32
32
  environment = Puppet::Node::Environment.create(:foo, dirs)
33
33
 
34
34
  environment.modules.each do |mod|
35
- mod.environment.should == environment
36
- mod.path.should == mods[mod.name]
35
+ expect(mod.environment).to eq(environment)
36
+ expect(mod.path).to eq(mods[mod.name])
37
37
  end
38
38
  end
39
39
 
@@ -52,8 +52,8 @@ describe Puppet::Node::Environment do
52
52
  environment = Puppet::Node::Environment.create(:foo, dirs)
53
53
 
54
54
  mods = environment.modules
55
- mods.length.should == 1
56
- mods[0].path.should == File.join(base, "dir1", "mod")
55
+ expect(mods.length).to eq(1)
56
+ expect(mods[0].path).to eq(File.join(base, "dir1", "mod"))
57
57
  end
58
58
 
59
59
  shared_examples_for "the environment's initial import" do |settings|
@@ -80,7 +80,7 @@ describe Puppet::Node::Environment do
80
80
  end
81
81
  end
82
82
 
83
- shared_examples_for "the environment's initial import in the future" do |settings|
83
+ shared_examples_for "the environment's initial import in 4x" do |settings|
84
84
  it "a manifest referring to a directory invokes recursive parsing of all its files in sorted order" do
85
85
  settings.each do |name, value|
86
86
  Puppet[name] = value
@@ -104,22 +104,19 @@ describe Puppet::Node::Environment do
104
104
  end
105
105
  end
106
106
 
107
- describe 'using classic parser' do
107
+ describe 'using 4x parser' do
108
108
  it_behaves_like "the environment's initial import",
109
- :parser => 'current',
110
109
  # fixture uses variables that are set in a particular order (this ensures
111
110
  # that files are parsed and combined in the right order or an error will
112
111
  # be raised if 'b' is evaluated before 'a').
113
112
  :strict_variables => true
114
113
  end
115
114
 
116
- describe 'using future parser' do
117
- it_behaves_like "the environment's initial import",
118
- :parser => 'future',
119
- # Turned off because currently future parser turns on the binder which
120
- # causes lookup of facts that are uninitialized and it will fail with
121
- # errors for 'osfamily' etc. This can be turned back on when the binder
122
- # is taken out of the equation.
123
- :strict_variables => false
115
+ describe 'using 4x parser' do
116
+ it_behaves_like "the environment's initial import in 4x",
117
+ # fixture uses variables that are set in a particular order (this ensures
118
+ # that files are parsed and combined in the right order or an error will
119
+ # be raised if 'b' is evaluated before 'a').
120
+ :strict_variables => true
124
121
  end
125
122
  end
@@ -6,7 +6,7 @@ describe Puppet::Node::Facts do
6
6
  it "should expire any cached node instances when it is saved" do
7
7
  Puppet::Node::Facts.indirection.stubs(:terminus_class).returns :yaml
8
8
 
9
- Puppet::Node::Facts.indirection.terminus(:yaml).should equal(Puppet::Node::Facts.indirection.terminus(:yaml))
9
+ expect(Puppet::Node::Facts.indirection.terminus(:yaml)).to equal(Puppet::Node::Facts.indirection.terminus(:yaml))
10
10
  terminus = Puppet::Node::Facts.indirection.terminus(:yaml)
11
11
  terminus.stubs :save
12
12
 
@@ -25,7 +25,7 @@ describe Puppet::Node::Facts do
25
25
  terminus.expects(:path).with("me").returns "/my/yaml/file"
26
26
  Puppet::FileSystem.expects(:exist?).with("/my/yaml/file").returns false
27
27
 
28
- Puppet::Node::Facts.indirection.find("me").should be_nil
28
+ expect(Puppet::Node::Facts.indirection.find("me")).to be_nil
29
29
  end
30
30
 
31
31
  it "should be able to delegate to the :facter terminus" do
@@ -35,7 +35,7 @@ describe Puppet::Node::Facts do
35
35
  facts = Puppet::Node::Facts.new("me")
36
36
  Puppet::Node::Facts.expects(:new).with("me", "facter_hash").returns facts
37
37
 
38
- Puppet::Node::Facts.indirection.find("me").should equal(facts)
38
+ expect(Puppet::Node::Facts.indirection.find("me")).to equal(facts)
39
39
  end
40
40
  end
41
41
  end
@@ -22,11 +22,11 @@ describe Puppet::Node do
22
22
  terminus.expects(:path).with(@name).returns "/my/yaml/file"
23
23
 
24
24
  Puppet::FileSystem.expects(:exist?).with("/my/yaml/file").returns false
25
- Puppet::Node.indirection.find(@name).should be_nil
25
+ expect(Puppet::Node.indirection.find(@name)).to be_nil
26
26
  end
27
27
 
28
28
  it "should have an ldap terminus" do
29
- Puppet::Node.indirection.terminus(:ldap).should_not be_nil
29
+ expect(Puppet::Node.indirection.terminus(:ldap)).not_to be_nil
30
30
  end
31
31
 
32
32
  it "should be able to use the plain terminus" do
@@ -37,7 +37,7 @@ describe Puppet::Node do
37
37
 
38
38
  Puppet::Node.expects(:new).with(@name).returns @node
39
39
 
40
- Puppet::Node.indirection.find(@name).should equal(@node)
40
+ expect(Puppet::Node.indirection.find(@name)).to equal(@node)
41
41
  end
42
42
 
43
43
  describe "and using the memory terminus" do
@@ -53,29 +53,29 @@ describe Puppet::Node do
53
53
  end
54
54
 
55
55
  it "should find no nodes by default" do
56
- Puppet::Node.indirection.find(@name).should be_nil
56
+ expect(Puppet::Node.indirection.find(@name)).to be_nil
57
57
  end
58
58
 
59
59
  it "should be able to find nodes that were previously saved" do
60
60
  Puppet::Node.indirection.save(@node)
61
- Puppet::Node.indirection.find(@name).should equal(@node)
61
+ expect(Puppet::Node.indirection.find(@name)).to equal(@node)
62
62
  end
63
63
 
64
64
  it "should replace existing saved nodes when a new node with the same name is saved" do
65
65
  Puppet::Node.indirection.save(@node)
66
66
  two = Puppet::Node.new(@name)
67
67
  Puppet::Node.indirection.save(two)
68
- Puppet::Node.indirection.find(@name).should equal(two)
68
+ expect(Puppet::Node.indirection.find(@name)).to equal(two)
69
69
  end
70
70
 
71
71
  it "should be able to remove previously saved nodes" do
72
72
  Puppet::Node.indirection.save(@node)
73
73
  Puppet::Node.indirection.destroy(@node.name)
74
- Puppet::Node.indirection.find(@name).should be_nil
74
+ expect(Puppet::Node.indirection.find(@name)).to be_nil
75
75
  end
76
76
 
77
77
  it "should fail when asked to destroy a node that does not exist" do
78
- proc { Puppet::Node.indirection.destroy(@node) }.should raise_error(ArgumentError)
78
+ expect { Puppet::Node.indirection.destroy(@node) }.to raise_error(ArgumentError)
79
79
  end
80
80
  end
81
81
  end
@@ -6,7 +6,7 @@ require 'puppet/indirector/catalog/compiler'
6
6
  describe "A catalog" do
7
7
  include PuppetSpec::Compiler
8
8
 
9
- shared_examples_for "when compiled" do
9
+ context "when compiled" do
10
10
  context "when transmitted to the agent" do
11
11
 
12
12
  it "preserves the order in which the resources are added to the catalog" do
@@ -77,37 +77,6 @@ describe "A catalog" do
77
77
  end
78
78
  end
79
79
 
80
- describe 'using classic parser' do
81
- before :each do
82
- Puppet[:parser] = 'current'
83
- end
84
- it_behaves_like 'when compiled' do
85
- end
86
-
87
- it "compiles resource creation from appended array as two separate resources" do
88
- # moved here from acceptance test "jeff_append_to_array.rb"
89
- master_catalog = master_catalog_for(<<-EOM)
90
- class parent {
91
- $arr1 = [ "parent array element" ]
92
- }
93
- class parent::child inherits parent {
94
- $arr1 += ["child array element"]
95
- notify { $arr1: }
96
- }
97
- include parent::child
98
- EOM
99
- expect(resources_in(master_catalog)).to include('Notify[parent array element]', 'Notify[child array element]')
100
- end
101
- end
102
-
103
- describe 'using future parser' do
104
- before :each do
105
- Puppet[:parser] = 'future'
106
- end
107
- it_behaves_like 'when compiled' do
108
- end
109
- end
110
-
111
80
  def master_catalog_for(manifest)
112
81
  master_catalog = Puppet::Resource::Catalog::Compiler.new.filter(compile_to_catalog(manifest))
113
82
  end
@@ -4,10 +4,6 @@ require 'puppet_spec/language'
4
4
  describe "Class expressions" do
5
5
  extend PuppetSpec::Language
6
6
 
7
- before :each do
8
- Puppet[:parser] = 'future'
9
- end
10
-
11
7
  produces(
12
8
  "class hi { }" => '!defined(Class[Hi])',
13
9
 
@@ -2,19 +2,17 @@
2
2
  require 'spec_helper'
3
3
  require 'puppet_spec/compiler'
4
4
 
5
- require 'puppet/parser/collector'
6
-
7
- describe Puppet::Parser::Collector do
5
+ describe 'collectors' do
8
6
  include PuppetSpec::Compiler
9
7
 
10
8
  def expect_the_message_to_be(expected_messages, code, node = Puppet::Node.new('the node'))
11
9
  catalog = compile_to_catalog(code, node)
12
10
  messages = catalog.resources.find_all { |resource| resource.type == 'Notify' }.
13
11
  collect { |notify| notify[:message] }
14
- messages.should include(*expected_messages)
12
+ expect(messages).to include(*expected_messages)
15
13
  end
16
14
 
17
- shared_examples_for "virtual resource collection" do
15
+ context "virtual resource collection" do
18
16
  it "matches everything when no query given" do
19
17
  expect_the_message_to_be(["the other message", "the message"], <<-MANIFEST)
20
18
  @notify { "testing": message => "the message" }
@@ -299,26 +297,4 @@ describe Puppet::Parser::Collector do
299
297
  end
300
298
  end
301
299
 
302
- describe "in the current parser" do
303
- before :each do
304
- Puppet[:parser] = 'current'
305
- end
306
-
307
- it_behaves_like "virtual resource collection"
308
- end
309
-
310
- describe "in the future parser" do
311
- before :each do
312
- Puppet[:parser] = 'future'
313
- end
314
-
315
- it_behaves_like "virtual resource collection"
316
-
317
- it "collects and overrides attributes specified with a * => hash" do
318
- expect_the_message_to_be(["overridden1"], <<-MANIFEST)
319
- notify { "testing": message => "original" }
320
- Notify <| |> { * => { message => 'overridden1' }}
321
- MANIFEST
322
- end
323
- end
324
300
  end
@@ -1,527 +1,911 @@
1
- #! /usr/bin/env ruby
2
1
  require 'spec_helper'
3
- require 'puppet/parser/parser_factory'
4
2
  require 'puppet_spec/compiler'
5
3
  require 'matchers/resource'
6
4
 
7
- describe "Puppet::Parser::Compiler" do
8
- include PuppetSpec::Compiler
5
+ class CompilerTestResource
6
+ attr_accessor :builtin, :virtual, :evaluated, :type, :title
7
+
8
+ def initialize(type, title)
9
+ @type = type
10
+ @title = title
11
+ end
12
+
13
+ def [](attr)
14
+ return nil if attr == :stage
15
+ :main
16
+ end
17
+
18
+ def ref
19
+ "#{type.to_s.capitalize}[#{title}]"
20
+ end
21
+
22
+ def evaluated?
23
+ @evaluated
24
+ end
25
+
26
+ def builtin_type?
27
+ @builtin
28
+ end
29
+
30
+ def virtual?
31
+ @virtual
32
+ end
33
+
34
+ def class?
35
+ false
36
+ end
37
+
38
+ def stage?
39
+ false
40
+ end
41
+
42
+ def evaluate
43
+ end
44
+
45
+ def file
46
+ "/fake/file/goes/here"
47
+ end
48
+
49
+ def line
50
+ "42"
51
+ end
52
+ end
53
+
54
+ describe Puppet::Parser::Compiler do
55
+ include PuppetSpec::Files
9
56
  include Matchers::Resource
10
57
 
58
+ def resource(type, title)
59
+ Puppet::Parser::Resource.new(type, title, :scope => @scope)
60
+ end
61
+
62
+ let(:environment) { Puppet::Node::Environment.create(:testing, []) }
63
+
11
64
  before :each do
12
- @node = Puppet::Node.new "testnode"
65
+ # Push me faster, I wanna go back in time! (Specifically, freeze time
66
+ # across the test since we have a bunch of version == timestamp code
67
+ # hidden away in the implementation and we keep losing the race.)
68
+ # --daniel 2011-04-21
69
+ now = Time.now
70
+ Time.stubs(:now).returns(now)
71
+
72
+ @node = Puppet::Node.new("testnode",
73
+ :facts => Puppet::Node::Facts.new("facts", {}),
74
+ :environment => environment)
75
+ @known_resource_types = environment.known_resource_types
76
+ @compiler = Puppet::Parser::Compiler.new(@node)
77
+ @scope = Puppet::Parser::Scope.new(@compiler, :source => stub('source'))
78
+ @scope_resource = Puppet::Parser::Resource.new(:file, "/my/file", :scope => @scope)
79
+ @scope.resource = @scope_resource
80
+ end
81
+
82
+ it "should fail intelligently when a class-level compile fails" do
83
+ Puppet::Parser::Compiler.expects(:new).raises ArgumentError
84
+ expect { Puppet::Parser::Compiler.compile(@node) }.to raise_error(Puppet::Error)
85
+ end
86
+
87
+ it "should use the node's environment as its environment" do
88
+ expect(@compiler.environment).to equal(@node.environment)
89
+ end
90
+
91
+ it "fails if the node's environment has validation errors" do
92
+ conflicted_environment = Puppet::Node::Environment.create(:testing, [], '/some/environment.conf/manifest.pp')
93
+ conflicted_environment.stubs(:validation_errors).returns(['bad environment'])
94
+ @node.environment = conflicted_environment
95
+ expect { Puppet::Parser::Compiler.compile(@node) }.to raise_error(Puppet::Error, /Compilation has been halted because.*bad environment/)
96
+ end
13
97
 
14
- @scope_resource = stub 'scope_resource', :builtin? => true, :finish => nil, :ref => 'Class[main]'
15
- @scope = stub 'scope', :resource => @scope_resource, :source => mock("source")
98
+ it "should include the resource type collection helper" do
99
+ expect(Puppet::Parser::Compiler.ancestors).to be_include(Puppet::Resource::TypeCollectionHelper)
16
100
  end
17
101
 
18
- it "should be able to determine the configuration version from a local version control repository" do
19
- pending("Bug #14071 about semantics of Puppet::Util::Execute on Windows", :if => Puppet.features.microsoft_windows?) do
20
- # This should always work, because we should always be
21
- # in the puppet repo when we run this.
22
- version = %x{git rev-parse HEAD}.chomp
102
+ it "should be able to return a class list containing all added classes" do
103
+ @compiler.add_class ""
104
+ @compiler.add_class "one"
105
+ @compiler.add_class "two"
106
+
107
+ expect(@compiler.classlist.sort).to eq(%w{one two}.sort)
108
+ end
23
109
 
24
- Puppet.settings[:config_version] = 'git rev-parse HEAD'
110
+ describe "when initializing" do
25
111
 
26
- @parser = Puppet::Parser::ParserFactory.parser "development"
27
- @compiler = Puppet::Parser::Compiler.new(@node)
112
+ it "should set its node attribute" do
113
+ expect(@compiler.node).to equal(@node)
114
+ end
115
+ it "should detect when ast nodes are absent" do
116
+ expect(@compiler.ast_nodes?).to be_falsey
117
+ end
28
118
 
29
- @compiler.catalog.version.should == version
119
+ it "should detect when ast nodes are present" do
120
+ @known_resource_types.expects(:nodes?).returns true
121
+ expect(@compiler.ast_nodes?).to be_truthy
122
+ end
123
+
124
+ it "should copy the known_resource_types version to the catalog" do
125
+ expect(@compiler.catalog.version).to eq(@known_resource_types.version)
126
+ end
127
+
128
+ it "should copy any node classes into the class list" do
129
+ node = Puppet::Node.new("mynode")
130
+ node.classes = %w{foo bar}
131
+ compiler = Puppet::Parser::Compiler.new(node)
132
+
133
+ expect(compiler.classlist).to match_array(['foo', 'bar'])
134
+ end
135
+
136
+ it "should transform node class hashes into a class list" do
137
+ node = Puppet::Node.new("mynode")
138
+ node.classes = {'foo'=>{'one'=>'p1'}, 'bar'=>{'two'=>'p2'}}
139
+ compiler = Puppet::Parser::Compiler.new(node)
140
+
141
+ expect(compiler.classlist).to match_array(['foo', 'bar'])
142
+ end
143
+
144
+ it "should add a 'main' stage to the catalog" do
145
+ expect(@compiler.catalog.resource(:stage, :main)).to be_instance_of(Puppet::Parser::Resource)
30
146
  end
31
147
  end
32
148
 
33
- it "should not create duplicate resources when a class is referenced both directly and indirectly by the node classifier (4792)" do
34
- Puppet[:code] = <<-PP
35
- class foo
36
- {
37
- notify { foo_notify: }
38
- include bar
39
- }
40
- class bar
41
- {
42
- notify { bar_notify: }
43
- }
44
- PP
149
+ describe "when managing scopes" do
45
150
 
46
- @node.stubs(:classes).returns(['foo', 'bar'])
151
+ it "should create a top scope" do
152
+ expect(@compiler.topscope).to be_instance_of(Puppet::Parser::Scope)
153
+ end
154
+
155
+ it "should be able to create new scopes" do
156
+ expect(@compiler.newscope(@compiler.topscope)).to be_instance_of(Puppet::Parser::Scope)
157
+ end
158
+
159
+ it "should set the parent scope of the new scope to be the passed-in parent" do
160
+ scope = mock 'scope'
161
+ newscope = @compiler.newscope(scope)
47
162
 
48
- catalog = Puppet::Parser::Compiler.compile(@node)
163
+ expect(newscope.parent).to equal(scope)
164
+ end
165
+
166
+ it "should set the parent scope of the new scope to its topscope if the parent passed in is nil" do
167
+ scope = mock 'scope'
168
+ newscope = @compiler.newscope(nil)
49
169
 
50
- catalog.resource("Notify[foo_notify]").should_not be_nil
51
- catalog.resource("Notify[bar_notify]").should_not be_nil
170
+ expect(newscope.parent).to equal(@compiler.topscope)
171
+ end
52
172
  end
53
173
 
54
- describe "when resolving class references" do
55
- it "should favor local scope, even if there's an included class in topscope" do
56
- Puppet[:code] = <<-PP
57
- class experiment {
58
- class baz {
59
- }
60
- notify {"x" : require => Class[Baz] }
61
- }
62
- class baz {
63
- }
64
- include baz
65
- include experiment
66
- include experiment::baz
67
- PP
174
+ describe "when compiling" do
68
175
 
69
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
176
+ def compile_methods
177
+ [:set_node_parameters, :evaluate_main, :evaluate_ast_node, :evaluate_node_classes, :evaluate_generators, :fail_on_unevaluated,
178
+ :finish, :store, :extract, :evaluate_relationships]
179
+ end
70
180
 
71
- notify_resource = catalog.resource( "Notify[x]" )
181
+ # Stub all of the main compile methods except the ones we're specifically interested in.
182
+ def compile_stub(*except)
183
+ (compile_methods - except).each { |m| @compiler.stubs(m) }
184
+ end
72
185
 
73
- notify_resource[:require].title.should == "Experiment::Baz"
186
+ it "should set node parameters as variables in the top scope" do
187
+ params = {"a" => "b", "c" => "d"}
188
+ @node.stubs(:parameters).returns(params)
189
+ compile_stub(:set_node_parameters)
190
+ @compiler.compile
191
+ expect(@compiler.topscope['a']).to eq("b")
192
+ expect(@compiler.topscope['c']).to eq("d")
74
193
  end
75
194
 
76
- it "should favor local scope, even if there's an unincluded class in topscope" do
77
- Puppet[:code] = <<-PP
78
- class experiment {
79
- class baz {
80
- }
81
- notify {"x" : require => Class[Baz] }
82
- }
83
- class baz {
84
- }
85
- include experiment
86
- include experiment::baz
87
- PP
195
+ it "should set the client and server versions on the catalog" do
196
+ params = {"clientversion" => "2", "serverversion" => "3"}
197
+ @node.stubs(:parameters).returns(params)
198
+ compile_stub(:set_node_parameters)
199
+ @compiler.compile
200
+ expect(@compiler.catalog.client_version).to eq("2")
201
+ expect(@compiler.catalog.server_version).to eq("3")
202
+ end
88
203
 
89
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
204
+ it "should evaluate the main class if it exists" do
205
+ compile_stub(:evaluate_main)
206
+ main_class = @known_resource_types.add Puppet::Resource::Type.new(:hostclass, "")
207
+ main_class.expects(:evaluate_code).with { |r| r.is_a?(Puppet::Parser::Resource) }
208
+ @compiler.topscope.expects(:source=).with(main_class)
90
209
 
91
- notify_resource = catalog.resource( "Notify[x]" )
210
+ @compiler.compile
211
+ end
92
212
 
93
- notify_resource[:require].title.should == "Experiment::Baz"
213
+ it "should create a new, empty 'main' if no main class exists" do
214
+ compile_stub(:evaluate_main)
215
+ @compiler.compile
216
+ expect(@known_resource_types.find_hostclass("")).to be_instance_of(Puppet::Resource::Type)
94
217
  end
95
- end
96
- describe "(ticket #13349) when explicitly specifying top scope" do
97
- ["class {'::bar::baz':}", "include ::bar::baz"].each do |include|
98
- describe "with #{include}" do
99
- it "should find the top level class" do
100
- Puppet[:code] = <<-MANIFEST
101
- class { 'foo::test': }
102
- class foo::test {
103
- #{include}
104
- }
105
- class bar::baz {
106
- notify { 'good!': }
107
- }
108
- class foo::bar::baz {
109
- notify { 'bad!': }
110
- }
111
- MANIFEST
112
218
 
113
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
219
+ it "should add an edge between the main stage and main class" do
220
+ @compiler.compile
221
+ expect(stage = @compiler.catalog.resource(:stage, "main")).to be_instance_of(Puppet::Parser::Resource)
222
+ expect(klass = @compiler.catalog.resource(:class, "")).to be_instance_of(Puppet::Parser::Resource)
114
223
 
115
- catalog.resource("Class[Bar::Baz]").should_not be_nil
116
- catalog.resource("Notify[good!]").should_not be_nil
117
- catalog.resource("Class[Foo::Bar::Baz]").should be_nil
118
- catalog.resource("Notify[bad!]").should be_nil
119
- end
120
- end
224
+ expect(@compiler.catalog.edge?(stage, klass)).to be_truthy
121
225
  end
122
- end
123
226
 
124
- it 'should recompute the version after input files are re-parsed' do
125
- Puppet[:code] = 'class foo { }'
126
- first_time = Time.at(1)
127
- second_time = Time.at(200)
128
- Time.stubs(:now).returns(first_time)
129
- node = Puppet::Node.new('mynode')
130
- expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i)
131
- Time.stubs(:now).returns(second_time)
132
- expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i) # no change because files didn't change
133
- Puppet[:code] = nil
134
- expect(Puppet::Parser::Compiler.compile(node).version).to eq(second_time.to_i)
135
- end
227
+ it "should evaluate all added collections" do
228
+ colls = []
229
+ # And when the collections fail to evaluate.
230
+ colls << mock("coll1-false")
231
+ colls << mock("coll2-false")
232
+ colls.each { |c| c.expects(:evaluate).returns(false) }
136
233
 
137
- ['class', 'define', 'node'].each do |thing|
138
- it "should not allow '#{thing}' inside evaluated conditional constructs" do
139
- Puppet[:code] = <<-PP
140
- if true {
141
- #{thing} foo {
142
- }
143
- notify { decoy: }
144
- }
145
- PP
146
-
147
- begin
148
- Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
149
- raise "compilation should have raised Puppet::Error"
150
- rescue Puppet::Error => e
151
- e.message.should =~ /at line 2/
152
- end
234
+ @compiler.add_collection(colls[0])
235
+ @compiler.add_collection(colls[1])
236
+
237
+ compile_stub(:evaluate_generators)
238
+ @compiler.compile
153
239
  end
154
- end
155
240
 
156
- it "should not allow classes inside unevaluated conditional constructs" do
157
- Puppet[:code] = <<-PP
158
- if false {
159
- class foo {
160
- }
161
- }
162
- PP
241
+ it "should ignore builtin resources" do
242
+ resource = resource(:file, "testing")
163
243
 
164
- lambda { Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode")) }.should raise_error(Puppet::Error)
165
- end
244
+ @compiler.add_resource(@scope, resource)
245
+ resource.expects(:evaluate).never
166
246
 
167
- describe "when defining relationships" do
168
- def extract_name(ref)
169
- ref.sub(/File\[(\w+)\]/, '\1')
247
+ @compiler.compile
170
248
  end
171
249
 
172
- let(:node) { Puppet::Node.new('mynode') }
173
- let(:code) do
174
- <<-MANIFEST
175
- file { [a,b,c]:
176
- mode => '0644',
177
- }
178
- file { [d,e]:
179
- mode => '0755',
180
- }
181
- MANIFEST
250
+ it "should evaluate unevaluated resources" do
251
+ resource = CompilerTestResource.new(:file, "testing")
252
+
253
+ @compiler.add_resource(@scope, resource)
254
+
255
+ # We have to now mark the resource as evaluated
256
+ resource.expects(:evaluate).with { |*whatever| resource.evaluated = true }
257
+
258
+ @compiler.compile
182
259
  end
183
- let(:expected_relationships) { [] }
184
- let(:expected_subscriptions) { [] }
185
260
 
186
- before :each do
187
- Puppet[:code] = code
261
+ it "should not evaluate already-evaluated resources" do
262
+ resource = resource(:file, "testing")
263
+ resource.stubs(:evaluated?).returns true
264
+
265
+ @compiler.add_resource(@scope, resource)
266
+ resource.expects(:evaluate).never
267
+
268
+ @compiler.compile
188
269
  end
189
270
 
190
- after :each do
191
- catalog = Puppet::Parser::Compiler.compile(node)
271
+ it "should evaluate unevaluated resources created by evaluating other resources" do
272
+ resource = CompilerTestResource.new(:file, "testing")
273
+ @compiler.add_resource(@scope, resource)
274
+
275
+ resource2 = CompilerTestResource.new(:file, "other")
192
276
 
193
- resources = catalog.resources.select { |res| res.type == 'File' }
277
+ # We have to now mark the resource as evaluated
278
+ resource.expects(:evaluate).with { |*whatever| resource.evaluated = true; @compiler.add_resource(@scope, resource2) }
279
+ resource2.expects(:evaluate).with { |*whatever| resource2.evaluated = true }
194
280
 
195
- actual_relationships, actual_subscriptions = [:before, :notify].map do |relation|
196
- resources.map do |res|
197
- dependents = Array(res[relation])
198
- dependents.map { |ref| [res.title, extract_name(ref)] }
199
- end.inject(&:concat)
281
+
282
+ @compiler.compile
283
+ end
284
+
285
+ describe "when finishing" do
286
+ before do
287
+ @compiler.send(:evaluate_main)
288
+ @catalog = @compiler.catalog
289
+ end
290
+
291
+ def add_resource(name, parent = nil)
292
+ resource = Puppet::Parser::Resource.new "file", name, :scope => @scope
293
+ @compiler.add_resource(@scope, resource)
294
+ @catalog.add_edge(parent, resource) if parent
295
+ resource
296
+ end
297
+
298
+ it "should call finish() on all resources" do
299
+ # Add a resource that does respond to :finish
300
+ resource = Puppet::Parser::Resource.new "file", "finish", :scope => @scope
301
+ resource.expects(:finish)
302
+
303
+ @compiler.add_resource(@scope, resource)
304
+
305
+ # And one that does not
306
+ dnf_resource = stub_everything "dnf", :ref => "File[dnf]", :type => "file"
307
+
308
+ @compiler.add_resource(@scope, dnf_resource)
309
+
310
+ @compiler.send(:finish)
311
+ end
312
+
313
+ it "should call finish() in add_resource order" do
314
+ resources = sequence('resources')
315
+
316
+ resource1 = add_resource("finish1")
317
+ resource1.expects(:finish).in_sequence(resources)
318
+
319
+ resource2 = add_resource("finish2")
320
+ resource2.expects(:finish).in_sequence(resources)
321
+
322
+ @compiler.send(:finish)
200
323
  end
201
324
 
202
- actual_relationships.should =~ expected_relationships
203
- actual_subscriptions.should =~ expected_subscriptions
325
+ it "should add each container's metaparams to its contained resources" do
326
+ main = @catalog.resource(:class, :main)
327
+ main[:noop] = true
328
+
329
+ resource1 = add_resource("meh", main)
330
+
331
+ @compiler.send(:finish)
332
+ expect(resource1[:noop]).to be_truthy
333
+ end
334
+
335
+ it "should add metaparams recursively" do
336
+ main = @catalog.resource(:class, :main)
337
+ main[:noop] = true
338
+
339
+ resource1 = add_resource("meh", main)
340
+ resource2 = add_resource("foo", resource1)
341
+
342
+ @compiler.send(:finish)
343
+ expect(resource2[:noop]).to be_truthy
344
+ end
345
+
346
+ it "should prefer metaparams from immediate parents" do
347
+ main = @catalog.resource(:class, :main)
348
+ main[:noop] = true
349
+
350
+ resource1 = add_resource("meh", main)
351
+ resource2 = add_resource("foo", resource1)
352
+
353
+ resource1[:noop] = false
354
+
355
+ @compiler.send(:finish)
356
+ expect(resource2[:noop]).to be_falsey
357
+ end
358
+
359
+ it "should merge tags downward" do
360
+ main = @catalog.resource(:class, :main)
361
+ main.tag("one")
362
+
363
+ resource1 = add_resource("meh", main)
364
+ resource1.tag "two"
365
+ resource2 = add_resource("foo", resource1)
366
+
367
+ @compiler.send(:finish)
368
+ expect(resource2.tags).to be_include("one")
369
+ expect(resource2.tags).to be_include("two")
370
+ end
371
+
372
+ it "should work if only middle resources have metaparams set" do
373
+ main = @catalog.resource(:class, :main)
374
+
375
+ resource1 = add_resource("meh", main)
376
+ resource1[:noop] = true
377
+ resource2 = add_resource("foo", resource1)
378
+
379
+ @compiler.send(:finish)
380
+ expect(resource2[:noop]).to be_truthy
381
+ end
204
382
  end
205
383
 
206
- it "should create a relationship" do
207
- code << "File[a] -> File[b]"
384
+ it "should return added resources in add order" do
385
+ resource1 = resource(:file, "yay")
386
+ @compiler.add_resource(@scope, resource1)
387
+ resource2 = resource(:file, "youpi")
388
+ @compiler.add_resource(@scope, resource2)
208
389
 
209
- expected_relationships << ['a','b']
390
+ expect(@compiler.resources).to eq([resource1, resource2])
210
391
  end
211
392
 
212
- it "should create a subscription" do
213
- code << "File[a] ~> File[b]"
393
+ it "should add resources that do not conflict with existing resources" do
394
+ resource = resource(:file, "yay")
395
+ @compiler.add_resource(@scope, resource)
214
396
 
215
- expected_subscriptions << ['a', 'b']
397
+ expect(@compiler.catalog).to be_vertex(resource)
216
398
  end
217
399
 
218
- it "should create relationships using title arrays" do
219
- code << "File[a,b] -> File[c,d]"
400
+ it "should fail to add resources that conflict with existing resources" do
401
+ path = make_absolute("/foo")
402
+ file1 = resource(:file, path)
403
+ file2 = resource(:file, path)
220
404
 
221
- expected_relationships.concat [
222
- ['a', 'c'],
223
- ['b', 'c'],
224
- ['a', 'd'],
225
- ['b', 'd'],
226
- ]
405
+ @compiler.add_resource(@scope, file1)
406
+ expect { @compiler.add_resource(@scope, file2) }.to raise_error(Puppet::Resource::Catalog::DuplicateResourceError)
227
407
  end
228
408
 
229
- it "should create relationships using collection expressions" do
230
- code << "File <| mode == 0644 |> -> File <| mode == 0755 |>"
409
+ it "should add an edge from the scope resource to the added resource" do
410
+ resource = resource(:file, "yay")
411
+ @compiler.add_resource(@scope, resource)
231
412
 
232
- expected_relationships.concat [
233
- ['a', 'd'],
234
- ['b', 'd'],
235
- ['c', 'd'],
236
- ['a', 'e'],
237
- ['b', 'e'],
238
- ['c', 'e'],
239
- ]
413
+ expect(@compiler.catalog).to be_edge(@scope.resource, resource)
240
414
  end
241
415
 
242
- it "should create relationships using resource names" do
243
- code << "'File[a]' -> 'File[b]'"
416
+ it "should not add non-class resources that don't specify a stage to the 'main' stage" do
417
+ main = @compiler.catalog.resource(:stage, :main)
418
+ resource = resource(:file, "foo")
419
+ @compiler.add_resource(@scope, resource)
244
420
 
245
- expected_relationships << ['a', 'b']
421
+ expect(@compiler.catalog).not_to be_edge(main, resource)
246
422
  end
247
423
 
248
- it "should create relationships using variables" do
249
- code << <<-MANIFEST
250
- $var = File[a]
251
- $var -> File[b]
252
- MANIFEST
424
+ it "should not add any parent-edges to stages" do
425
+ stage = resource(:stage, "other")
426
+ @compiler.add_resource(@scope, stage)
253
427
 
254
- expected_relationships << ['a', 'b']
428
+ @scope.resource = resource(:class, "foo")
429
+
430
+ expect(@compiler.catalog.edge?(@scope.resource, stage)).to be_falsey
255
431
  end
256
432
 
257
- it "should create relationships using case statements" do
258
- code << <<-MANIFEST
259
- $var = 10
260
- case $var {
261
- 10: {
262
- file { s1: }
263
- }
264
- 12: {
265
- file { s2: }
266
- }
267
- }
268
- ->
269
- case $var + 2 {
270
- 10: {
271
- file { t1: }
272
- }
273
- 12: {
274
- file { t2: }
275
- }
276
- }
277
- MANIFEST
433
+ it "should not attempt to add stages to other stages" do
434
+ other_stage = resource(:stage, "other")
435
+ second_stage = resource(:stage, "second")
436
+ @compiler.add_resource(@scope, other_stage)
437
+ @compiler.add_resource(@scope, second_stage)
438
+
439
+ second_stage[:stage] = "other"
440
+
441
+ expect(@compiler.catalog.edge?(other_stage, second_stage)).to be_falsey
442
+ end
443
+
444
+ it "should have a method for looking up resources" do
445
+ resource = resource(:yay, "foo")
446
+ @compiler.add_resource(@scope, resource)
447
+ expect(@compiler.findresource("Yay[foo]")).to equal(resource)
448
+ end
449
+
450
+ it "should be able to look resources up by type and title" do
451
+ resource = resource(:yay, "foo")
452
+ @compiler.add_resource(@scope, resource)
453
+ expect(@compiler.findresource("Yay", "foo")).to equal(resource)
454
+ end
455
+
456
+ it "should not evaluate virtual defined resources" do
457
+ resource = resource(:file, "testing")
458
+ resource.virtual = true
459
+ @compiler.add_resource(@scope, resource)
460
+
461
+ resource.expects(:evaluate).never
278
462
 
279
- expected_relationships << ['s1', 't2']
463
+ @compiler.compile
280
464
  end
465
+ end
466
+
467
+ describe "when evaluating collections" do
468
+
469
+ it "should evaluate each collection" do
470
+ 2.times { |i|
471
+ coll = mock 'coll%s' % i
472
+ @compiler.add_collection(coll)
281
473
 
282
- it "should create relationships using array members" do
283
- code << <<-MANIFEST
284
- $var = [ [ [ File[a], File[b] ] ] ]
285
- $var[0][0][0] -> $var[0][0][1]
286
- MANIFEST
474
+ # This is the hard part -- we have to emulate the fact that
475
+ # collections delete themselves if they are done evaluating.
476
+ coll.expects(:evaluate).with do
477
+ @compiler.delete_collection(coll)
478
+ end
479
+ }
287
480
 
288
- expected_relationships << ['a', 'b']
481
+ @compiler.compile
289
482
  end
290
483
 
291
- it "should create relationships using hash members" do
292
- code << <<-MANIFEST
293
- $var = {'foo' => {'bar' => {'source' => File[a], 'target' => File[b]}}}
294
- $var[foo][bar][source] -> $var[foo][bar][target]
295
- MANIFEST
484
+ it "should not fail when there are unevaluated resource collections that do not refer to specific resources" do
485
+ coll = stub 'coll', :evaluate => false
486
+ coll.expects(:unresolved_resources).returns(nil)
296
487
 
297
- expected_relationships << ['a', 'b']
488
+ @compiler.add_collection(coll)
489
+
490
+ expect { @compiler.compile }.not_to raise_error
298
491
  end
299
492
 
300
- it "should create relationships using resource declarations" do
301
- code << "file { l: } -> file { r: }"
493
+ it "should fail when there are unevaluated resource collections that refer to a specific resource" do
494
+ coll = stub 'coll', :evaluate => false
495
+ coll.expects(:unresolved_resources).returns(:something)
496
+
497
+ @compiler.add_collection(coll)
302
498
 
303
- expected_relationships << ['l', 'r']
499
+ expect { @compiler.compile }.to raise_error(Puppet::ParseError, 'Failed to realize virtual resources something')
304
500
  end
305
501
 
306
- it "should chain relationships" do
307
- code << "File[a] -> File[b] ~> File[c] <- File[d] <~ File[e]"
502
+ it "should fail when there are unevaluated resource collections that refer to multiple specific resources" do
503
+ coll = stub 'coll', :evaluate => false
504
+ coll.expects(:unresolved_resources).returns([:one, :two])
308
505
 
309
- expected_relationships << ['a', 'b'] << ['d', 'c']
310
- expected_subscriptions << ['b', 'c'] << ['e', 'd']
506
+ @compiler.add_collection(coll)
507
+
508
+ expect { @compiler.compile }.to raise_error(Puppet::ParseError, 'Failed to realize virtual resources one, two')
311
509
  end
312
510
  end
313
511
 
314
- context 'when working with immutable node data' do
315
- context 'and have opted in to immutable_node_data' do
316
- before :each do
317
- Puppet[:immutable_node_data] = true
512
+ describe "when evaluating relationships" do
513
+ it "should evaluate each relationship with its catalog" do
514
+ dep = stub 'dep'
515
+ dep.expects(:evaluate).with(@compiler.catalog)
516
+ @compiler.add_relationship dep
517
+ @compiler.evaluate_relationships
518
+ end
519
+ end
520
+
521
+ describe "when told to evaluate missing classes" do
522
+
523
+ it "should fail if there's no source listed for the scope" do
524
+ scope = stub 'scope', :source => nil
525
+ expect { @compiler.evaluate_classes(%w{one two}, scope) }.to raise_error(Puppet::DevError)
526
+ end
527
+
528
+ it "should raise an error if a class is not found" do
529
+ @scope.expects(:find_hostclass).with("notfound").returns(nil)
530
+ expect{ @compiler.evaluate_classes(%w{notfound}, @scope) }.to raise_error(Puppet::Error, /Could not find class/)
531
+ end
532
+
533
+ it "should raise an error when it can't find class" do
534
+ klasses = {'foo'=>nil}
535
+ @node.classes = klasses
536
+ @compiler.topscope.expects(:find_hostclass).with('foo').returns(nil)
537
+ expect{ @compiler.compile }.to raise_error(Puppet::Error, /Could not find class foo for testnode/)
538
+ end
539
+ end
540
+
541
+ describe "when evaluating found classes" do
542
+
543
+ before do
544
+ Puppet.settings[:data_binding_terminus] = "none"
545
+ @class = stub 'class', :name => "my::class"
546
+ @scope.stubs(:find_hostclass).with("myclass").returns(@class)
547
+
548
+ @resource = stub 'resource', :ref => "Class[myclass]", :type => "file"
549
+ end
550
+
551
+ around do |example|
552
+ Puppet.override(
553
+ :environments => Puppet::Environments::Static.new(environment),
554
+ :description => "Static loader for specs"
555
+ ) do
556
+ example.run
318
557
  end
558
+ end
559
+
560
+ it "should evaluate each class" do
561
+ @compiler.catalog.stubs(:tag)
319
562
 
320
- def node_with_facts(facts)
321
- Puppet[:facts_terminus] = :memory
322
- Puppet::Node::Facts.indirection.save(Puppet::Node::Facts.new("testing", facts))
323
- node = Puppet::Node.new("testing")
324
- node.fact_merge
325
- node
563
+ @class.expects(:ensure_in_catalog).with(@scope)
564
+ @scope.stubs(:class_scope).with(@class)
565
+
566
+ @compiler.evaluate_classes(%w{myclass}, @scope)
567
+ end
568
+
569
+ describe "and the classes are specified as a hash with parameters" do
570
+ before do
571
+ @node.classes = {}
572
+ @ast_obj = Puppet::Parser::AST::Leaf.new(:value => 'foo')
326
573
  end
327
574
 
328
- matcher :fail_compile_with do |node, message_regex|
329
- match do |manifest|
330
- @error = nil
331
- begin
332
- PuppetSpec::Compiler.compile_to_catalog(manifest, node)
333
- false
334
- rescue Puppet::Error => e
335
- @error = e
336
- message_regex.match(e.message)
337
- end
338
- end
575
+ # Define the given class with default parameters
576
+ def define_class(name, parameters)
577
+ @node.classes[name] = parameters
578
+ klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'p1' => @ast_obj, 'p2' => @ast_obj})
579
+ @compiler.topscope.known_resource_types.add klass
580
+ end
339
581
 
340
- failure_message_for_should do
341
- if @error
342
- "failed with #{@error}\n#{@error.backtrace}"
343
- else
344
- "did not fail"
345
- end
346
- end
582
+ def compile
583
+ @catalog = @compiler.compile
347
584
  end
348
585
 
349
- it 'should make $facts available' do
350
- node = node_with_facts('the_facts' => 'straight')
586
+ it "should record which classes are evaluated" do
587
+ classes = {'foo'=>{}, 'bar::foo'=>{}, 'bar'=>{}}
588
+ classes.each { |c, params| define_class(c, params) }
589
+ compile()
590
+ classes.each { |name, p| expect(@catalog.classes).to include(name) }
591
+ end
351
592
 
352
- catalog = compile_to_catalog(<<-MANIFEST, node)
353
- notify { 'test': message => $facts[the_facts] }
354
- MANIFEST
593
+ it "should provide default values for parameters that have no values specified" do
594
+ define_class('foo', {})
595
+ compile()
596
+ expect(@catalog.resource(:class, 'foo')['p1']).to eq("foo")
597
+ end
355
598
 
356
- catalog.resource("Notify[test]")[:message].should == "straight"
599
+ it "should use any provided values" do
600
+ define_class('foo', {'p1' => 'real_value'})
601
+ compile()
602
+ expect(@catalog.resource(:class, 'foo')['p1']).to eq("real_value")
357
603
  end
358
604
 
359
- it 'should make $facts reserved' do
360
- node = node_with_facts('the_facts' => 'straight')
605
+ it "should support providing some but not all values" do
606
+ define_class('foo', {'p1' => 'real_value'})
607
+ compile()
608
+ expect(@catalog.resource(:class, 'Foo')['p1']).to eq("real_value")
609
+ expect(@catalog.resource(:class, 'Foo')['p2']).to eq("foo")
610
+ end
361
611
 
362
- expect('$facts = {}').to fail_compile_with(node, /assign to a reserved variable name: 'facts'/)
363
- expect('class a { $facts = {} } include a').to fail_compile_with(node, /assign to a reserved variable name: 'facts'/)
612
+ it "should ensure each node class is in catalog and has appropriate tags" do
613
+ klasses = ['bar::foo']
614
+ @node.classes = klasses
615
+ ast_obj = Puppet::Parser::AST::Leaf.new(:value => 'foo')
616
+ klasses.each do |name|
617
+ klass = Puppet::Resource::Type.new(:hostclass, name, :arguments => {'p1' => ast_obj, 'p2' => ast_obj})
618
+ @compiler.topscope.known_resource_types.add klass
619
+ end
620
+ catalog = @compiler.compile
621
+
622
+ r2 = catalog.resources.detect {|r| r.title == 'Bar::Foo' }
623
+ expect(r2.tags).to eq(Puppet::Util::TagSet.new(['bar::foo', 'class', 'bar', 'foo']))
364
624
  end
625
+ end
365
626
 
366
- it 'should make $facts immutable' do
367
- node = node_with_facts('string' => 'value', 'array' => ['string'], 'hash' => { 'a' => 'string' }, 'number' => 1, 'boolean' => true)
627
+ it "should fail if required parameters are missing" do
628
+ klass = {'foo'=>{'a'=>'one'}}
629
+ @node.classes = klass
630
+ klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'a' => nil, 'b' => nil})
631
+ @compiler.topscope.known_resource_types.add klass
632
+ expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Must pass b to Class[Foo]")
633
+ end
368
634
 
369
- expect('$i=inline_template("<% @facts[%q{new}] = 2 %>")').to fail_compile_with(node, /frozen Hash/i)
370
- expect('$i=inline_template("<% @facts[%q{string}].chop! %>")').to fail_compile_with(node, /frozen String/i)
635
+ it "should fail if invalid parameters are passed" do
636
+ klass = {'foo'=>{'3'=>'one'}}
637
+ @node.classes = klass
638
+ klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {})
639
+ @compiler.topscope.known_resource_types.add klass
640
+ expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Invalid parameter: '3' on Class[Foo]")
641
+ end
371
642
 
372
- expect('$i=inline_template("<% @facts[%q{array}][0].chop! %>")').to fail_compile_with(node, /frozen String/i)
373
- expect('$i=inline_template("<% @facts[%q{array}][1] = 2 %>")').to fail_compile_with(node, /frozen Array/i)
643
+ it "should ensure class is in catalog without params" do
644
+ @node.classes = klasses = {'foo'=>nil}
645
+ foo = Puppet::Resource::Type.new(:hostclass, 'foo')
646
+ @compiler.topscope.known_resource_types.add foo
647
+ catalog = @compiler.compile
648
+ expect(catalog.classes).to include 'foo'
649
+ end
374
650
 
375
- expect('$i=inline_template("<% @facts[%q{hash}][%q{a}].chop! %>")').to fail_compile_with(node, /frozen String/i)
376
- expect('$i=inline_template("<% @facts[%q{hash}][%q{b}] = 2 %>")').to fail_compile_with(node, /frozen Hash/i)
377
- end
651
+ it "should not evaluate the resources created for found classes unless asked" do
652
+ @compiler.catalog.stubs(:tag)
378
653
 
379
- it 'should make $facts available even if there are no facts' do
380
- Puppet[:facts_terminus] = :memory
381
- node = Puppet::Node.new("testing2")
382
- node.fact_merge
654
+ @resource.expects(:evaluate).never
383
655
 
384
- catalog = compile_to_catalog(<<-MANIFEST, node)
385
- notify { 'test': message => $facts }
386
- MANIFEST
656
+ @class.expects(:ensure_in_catalog).returns(@resource)
657
+ @scope.stubs(:class_scope).with(@class)
387
658
 
388
- expect(catalog).to have_resource("Notify[test]").with_parameter(:message, {})
389
- end
659
+ @compiler.evaluate_classes(%w{myclass}, @scope)
390
660
  end
391
661
 
392
- context 'and have not opted in to immutable_node_data' do
393
- before :each do
394
- Puppet[:immutable_node_data] = false
395
- end
662
+ it "should immediately evaluate the resources created for found classes when asked" do
663
+ @compiler.catalog.stubs(:tag)
396
664
 
397
- it 'should not make $facts available' do
398
- Puppet[:facts_terminus] = :memory
399
- facts = Puppet::Node::Facts.new("testing", 'the_facts' => 'straight')
400
- Puppet::Node::Facts.indirection.save(facts)
401
- node = Puppet::Node.new("testing")
402
- node.fact_merge
665
+ @resource.expects(:evaluate)
666
+ @class.expects(:ensure_in_catalog).returns(@resource)
667
+ @scope.stubs(:class_scope).with(@class)
403
668
 
404
- catalog = compile_to_catalog(<<-MANIFEST, node)
405
- notify { 'test': message => "An $facts space" }
406
- MANIFEST
669
+ @compiler.evaluate_classes(%w{myclass}, @scope, false)
670
+ end
407
671
 
408
- catalog.resource("Notify[test]")[:message].should == "An space"
409
- end
672
+ it "should skip classes that have already been evaluated" do
673
+ @compiler.catalog.stubs(:tag)
674
+
675
+ @scope.stubs(:class_scope).with(@class).returns(@scope)
676
+
677
+ @compiler.expects(:add_resource).never
678
+
679
+ @resource.expects(:evaluate).never
680
+
681
+ Puppet::Parser::Resource.expects(:new).never
682
+ @compiler.evaluate_classes(%w{myclass}, @scope, false)
683
+ end
684
+
685
+ it "should skip classes previously evaluated with different capitalization" do
686
+ @compiler.catalog.stubs(:tag)
687
+ @scope.stubs(:find_hostclass).with("MyClass").returns(@class)
688
+ @scope.stubs(:class_scope).with(@class).returns(@scope)
689
+ @compiler.expects(:add_resource).never
690
+ @resource.expects(:evaluate).never
691
+ Puppet::Parser::Resource.expects(:new).never
692
+ @compiler.evaluate_classes(%w{MyClass}, @scope, false)
410
693
  end
411
694
  end
412
695
 
413
- context 'when working with the trusted data hash' do
414
- context 'and have opted in to trusted_node_data' do
415
- before :each do
416
- Puppet[:trusted_node_data] = true
417
- end
696
+ describe "when evaluating AST nodes with no AST nodes present" do
418
697
 
419
- it 'should make $trusted available' do
420
- node = Puppet::Node.new("testing")
421
- node.trusted_data = { "data" => "value" }
698
+ it "should do nothing" do
699
+ @compiler.expects(:ast_nodes?).returns(false)
700
+ @compiler.known_resource_types.expects(:nodes).never
701
+ Puppet::Parser::Resource.expects(:new).never
422
702
 
423
- catalog = compile_to_catalog(<<-MANIFEST, node)
424
- notify { 'test': message => $trusted[data] }
425
- MANIFEST
703
+ @compiler.send(:evaluate_ast_node)
704
+ end
705
+ end
426
706
 
427
- catalog.resource("Notify[test]")[:message].should == "value"
428
- end
707
+ describe "when evaluating AST nodes with AST nodes present" do
429
708
 
430
- it 'should not allow assignment to $trusted' do
431
- node = Puppet::Node.new("testing")
432
- node.trusted_data = { "data" => "value" }
709
+ before do
710
+ @compiler.known_resource_types.stubs(:nodes?).returns true
433
711
 
434
- expect do
435
- catalog = compile_to_catalog(<<-MANIFEST, node)
436
- $trusted = 'changed'
437
- notify { 'test': message => $trusted == 'changed' }
438
- MANIFEST
439
- catalog.resource("Notify[test]")[:message].should == true
440
- end.to raise_error(Puppet::Error, /Attempt to assign to a reserved variable name: 'trusted'/)
441
- end
712
+ # Set some names for our test
713
+ @node.stubs(:names).returns(%w{a b c})
714
+ @compiler.known_resource_types.stubs(:node).with("a").returns(nil)
715
+ @compiler.known_resource_types.stubs(:node).with("b").returns(nil)
716
+ @compiler.known_resource_types.stubs(:node).with("c").returns(nil)
442
717
 
443
- it 'should not allow addition to $trusted hash' do
444
- node = Puppet::Node.new("testing")
445
- node.trusted_data = { "data" => "value" }
718
+ # It should check this last, of course.
719
+ @compiler.known_resource_types.stubs(:node).with("default").returns(nil)
720
+ end
446
721
 
447
- expect do
448
- catalog = compile_to_catalog(<<-MANIFEST, node)
449
- $trusted['extra'] = 'added'
450
- notify { 'test': message => $trusted['extra'] == 'added' }
451
- MANIFEST
452
- catalog.resource("Notify[test]")[:message].should == true
453
- # different errors depending on regular or future parser
454
- end.to raise_error(Puppet::Error, /(can't modify frozen [hH]ash)|(Illegal attempt to assign)/)
455
- end
722
+ it "should fail if the named node cannot be found" do
723
+ expect { @compiler.send(:evaluate_ast_node) }.to raise_error(Puppet::ParseError)
724
+ end
725
+
726
+ it "should evaluate the first node class matching the node name" do
727
+ node_class = stub 'node', :name => "c", :evaluate_code => nil
728
+ @compiler.known_resource_types.stubs(:node).with("c").returns(node_class)
729
+
730
+ node_resource = stub 'node resource', :ref => "Node[c]", :evaluate => nil, :type => "node"
731
+ node_class.expects(:ensure_in_catalog).returns(node_resource)
732
+
733
+ @compiler.compile
734
+ end
735
+
736
+ it "should match the default node if no matching node can be found" do
737
+ node_class = stub 'node', :name => "default", :evaluate_code => nil
738
+ @compiler.known_resource_types.stubs(:node).with("default").returns(node_class)
739
+
740
+ node_resource = stub 'node resource', :ref => "Node[default]", :evaluate => nil, :type => "node"
741
+ node_class.expects(:ensure_in_catalog).returns(node_resource)
742
+
743
+ @compiler.compile
744
+ end
456
745
 
457
- it 'should not allow addition to $trusted hash via Ruby inline template' do
458
- node = Puppet::Node.new("testing")
459
- node.trusted_data = { "data" => "value" }
746
+ it "should evaluate the node resource immediately rather than using lazy evaluation" do
747
+ node_class = stub 'node', :name => "c"
748
+ @compiler.known_resource_types.stubs(:node).with("c").returns(node_class)
460
749
 
461
- expect do
462
- catalog = compile_to_catalog(<<-MANIFEST, node)
463
- $dummy = inline_template("<% @trusted['extra'] = 'added' %> lol")
464
- notify { 'test': message => $trusted['extra'] == 'added' }
750
+ node_resource = stub 'node resource', :ref => "Node[c]", :type => "node"
751
+ node_class.expects(:ensure_in_catalog).returns(node_resource)
752
+
753
+ node_resource.expects(:evaluate)
754
+
755
+ @compiler.send(:evaluate_ast_node)
756
+ end
757
+ end
758
+
759
+ describe "when evaluating node classes" do
760
+ include PuppetSpec::Compiler
761
+
762
+ describe "when provided classes in array format" do
763
+ let(:node) { Puppet::Node.new('someone', :classes => ['something']) }
764
+
765
+ describe "when the class exists" do
766
+ it "should succeed if the class is already included" do
767
+ manifest = <<-MANIFEST
768
+ class something {}
769
+ include something
465
770
  MANIFEST
466
- catalog.resource("Notify[test]")[:message].should == true
467
- end.to raise_error(Puppet::Error, /can't modify frozen [hH]ash/)
771
+
772
+ catalog = compile_to_catalog(manifest, node)
773
+
774
+ expect(catalog.resource('Class', 'Something')).not_to be_nil
775
+ end
776
+
777
+ it "should evaluate the class without parameters if it's not already included" do
778
+ manifest = "class something {}"
779
+
780
+ catalog = compile_to_catalog(manifest, node)
781
+
782
+ expect(catalog.resource('Class', 'Something')).not_to be_nil
783
+ end
468
784
  end
469
- end
470
785
 
471
- context 'and have not opted in to trusted_node_data' do
472
- before :each do
473
- Puppet[:trusted_node_data] = false
786
+ it "should fail if the class doesn't exist" do
787
+ expect { compile_to_catalog('', node) }.to raise_error(Puppet::Error, /Could not find class something/)
474
788
  end
789
+ end
475
790
 
476
- it 'should not make $trusted available' do
477
- node = Puppet::Node.new("testing")
478
- node.trusted_data = { "data" => "value" }
791
+ describe "when provided classes in hash format" do
792
+ describe "for classes without parameters" do
793
+ let(:node) { Puppet::Node.new('someone', :classes => {'something' => {}}) }
479
794
 
480
- catalog = compile_to_catalog(<<-MANIFEST, node)
481
- notify { 'test': message => $trusted == undef }
482
- MANIFEST
795
+ describe "when the class exists" do
796
+ it "should succeed if the class is already included" do
797
+ manifest = <<-MANIFEST
798
+ class something {}
799
+ include something
800
+ MANIFEST
801
+
802
+ catalog = compile_to_catalog(manifest, node)
803
+
804
+ expect(catalog.resource('Class', 'Something')).not_to be_nil
805
+ end
483
806
 
484
- catalog.resource("Notify[test]")[:message].should == true
807
+ it "should evaluate the class if it's not already included" do
808
+ manifest = <<-MANIFEST
809
+ class something {}
810
+ MANIFEST
811
+
812
+ catalog = compile_to_catalog(manifest, node)
813
+
814
+ expect(catalog.resource('Class', 'Something')).not_to be_nil
815
+ end
816
+ end
817
+
818
+ it "should fail if the class doesn't exist" do
819
+ expect { compile_to_catalog('', node) }.to raise_error(Puppet::Error, /Could not find class something/)
820
+ end
485
821
  end
486
822
 
487
- it 'should allow assignment to $trusted' do
488
- node = Puppet::Node.new("testing")
823
+ describe "for classes with parameters" do
824
+ let(:node) { Puppet::Node.new('someone', :classes => {'something' => {'configuron' => 'defrabulated'}}) }
489
825
 
490
- catalog = compile_to_catalog(<<-MANIFEST, node)
491
- $trusted = 'changed'
492
- notify { 'test': message => $trusted == 'changed' }
493
- MANIFEST
826
+ describe "when the class exists" do
827
+ it "should fail if the class is already included" do
828
+ manifest = <<-MANIFEST
829
+ class something($configuron=frabulated) {}
830
+ include something
831
+ MANIFEST
832
+
833
+ expect { compile_to_catalog(manifest, node) }.to raise_error(Puppet::Error, /Class\[Something\] is already declared/)
834
+ end
835
+
836
+ it "should evaluate the class if it's not already included" do
837
+ manifest = <<-MANIFEST
838
+ class something($configuron=frabulated) {}
839
+ MANIFEST
840
+
841
+ catalog = compile_to_catalog(manifest, node)
842
+
843
+ resource = catalog.resource('Class', 'Something')
844
+ expect(resource['configuron']).to eq('defrabulated')
845
+ end
846
+ end
847
+
848
+ it "should fail if the class doesn't exist" do
849
+ expect { compile_to_catalog('', node) }.to raise_error(Puppet::Error, /Could not find class something/)
850
+ end
851
+
852
+ it 'evaluates classes declared with parameters before unparameterized classes' do
853
+ node = Puppet::Node.new('someone', :classes => { 'app::web' => {}, 'app' => { 'port' => 8080 } })
854
+ manifest = <<-MANIFEST
855
+ class app($port = 80) { }
856
+
857
+ class app::web($port = $app::port) inherits app {
858
+ notify { expected: message => "$port" }
859
+ }
860
+ MANIFEST
494
861
 
495
- catalog.resource("Notify[test]")[:message].should == true
862
+ catalog = compile_to_catalog(manifest, node)
863
+
864
+ expect(catalog).to have_resource("Class[App]").with_parameter(:port, 8080)
865
+ expect(catalog).to have_resource("Class[App::Web]")
866
+ expect(catalog).to have_resource("Notify[expected]").with_parameter(:message, "8080")
867
+ end
496
868
  end
497
869
  end
498
870
  end
499
871
 
500
- context 'when evaluating collection' do
501
- it 'matches on container inherited tags' do
502
- Puppet[:code] = <<-MANIFEST
503
- class xport_test {
504
- tag 'foo_bar'
505
- @notify { 'nbr1':
506
- message => 'explicitly tagged',
507
- tag => 'foo_bar'
508
- }
509
-
510
- @notify { 'nbr2':
511
- message => 'implicitly tagged'
512
- }
513
-
514
- Notify <| tag == 'foo_bar' |> {
515
- message => 'overridden'
516
- }
517
- }
518
- include xport_test
519
- MANIFEST
872
+ describe "when managing resource overrides" do
873
+
874
+ before do
875
+ @override = stub 'override', :ref => "File[/foo]", :type => "my"
876
+ @resource = resource(:file, "/foo")
877
+ end
878
+
879
+ it "should be able to store overrides" do
880
+ expect { @compiler.add_override(@override) }.not_to raise_error
881
+ end
882
+
883
+ it "should apply overrides to the appropriate resources" do
884
+ @compiler.add_resource(@scope, @resource)
885
+ @resource.expects(:merge).with(@override)
886
+
887
+ @compiler.add_override(@override)
888
+
889
+ @compiler.compile
890
+ end
891
+
892
+ it "should accept overrides before the related resource has been created" do
893
+ @resource.expects(:merge).with(@override)
894
+
895
+ # First store the override
896
+ @compiler.add_override(@override)
897
+
898
+ # Then the resource
899
+ @compiler.add_resource(@scope, @resource)
900
+
901
+ # And compile, so they get resolved
902
+ @compiler.compile
903
+ end
520
904
 
521
- catalog = Puppet::Parser::Compiler.compile(Puppet::Node.new("mynode"))
905
+ it "should fail if the compile is finished and resource overrides have not been applied" do
906
+ @compiler.add_override(@override)
522
907
 
523
- expect(catalog).to have_resource("Notify[nbr1]").with_parameter(:message, 'overridden')
524
- expect(catalog).to have_resource("Notify[nbr2]").with_parameter(:message, 'overridden')
908
+ expect { @compiler.compile }.to raise_error Puppet::ParseError, 'Could not find resource(s) File[/foo] for overriding'
525
909
  end
526
910
  end
527
911