puppet 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. data/CONTRIBUTING.md +1 -1
  2. data/Gemfile +5 -7
  3. data/README.md +1 -1
  4. data/Rakefile +20 -0
  5. data/ext/debian/puppet.init +0 -1
  6. data/ext/debian/puppet.logrotate +14 -5
  7. data/ext/osx/puppet.plist +2 -4
  8. data/ext/project_data.yaml +1 -1
  9. data/ext/redhat/client.init +65 -12
  10. data/ext/redhat/logrotate +15 -3
  11. data/ext/redhat/puppet.spec.erb +5 -1
  12. data/ext/redhat/server.init +1 -1
  13. data/ext/solaris/smf/puppet +44 -0
  14. data/ext/solaris/smf/puppet.xml +44 -0
  15. data/ext/suse/client.init +27 -27
  16. data/ext/suse/server.init +2 -2
  17. data/ext/systemd/puppet.service +1 -0
  18. data/install.rb +21 -39
  19. data/lib/hiera/puppet_function.rb +5 -5
  20. data/lib/puppet/agent/locker.rb +11 -2
  21. data/lib/puppet/agent.rb +4 -4
  22. data/lib/puppet/application/agent.rb +28 -14
  23. data/lib/puppet/application/apply.rb +17 -4
  24. data/lib/puppet/application/cert.rb +16 -0
  25. data/lib/puppet/application/filebucket.rb +78 -4
  26. data/lib/puppet/application/lookup.rb +356 -0
  27. data/lib/puppet/application/master.rb +5 -1
  28. data/lib/puppet/configurer.rb +9 -5
  29. data/lib/puppet/context/trusted_information.rb +21 -1
  30. data/lib/puppet/context.rb +16 -1
  31. data/lib/puppet/daemon.rb +17 -13
  32. data/lib/puppet/data_binding.rb +4 -2
  33. data/lib/puppet/data_providers/data_adapter.rb +7 -68
  34. data/lib/puppet/data_providers/data_function_support.rb +5 -26
  35. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
  36. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
  37. data/lib/puppet/data_providers/hiera_config.rb +106 -0
  38. data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
  39. data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
  40. data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
  41. data/lib/puppet/data_providers/hiera_support.rb +37 -0
  42. data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
  43. data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
  44. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
  45. data/lib/puppet/data_providers.rb +12 -13
  46. data/lib/puppet/defaults.rb +14 -3
  47. data/lib/puppet/environments.rb +94 -6
  48. data/lib/puppet/error.rb +4 -0
  49. data/lib/puppet/face/module/changes.rb +2 -1
  50. data/lib/puppet/feature/cfacter.rb +1 -0
  51. data/lib/puppet/file_bucket/dipper.rb +58 -2
  52. data/lib/puppet/file_system/windows.rb +3 -1
  53. data/lib/puppet/functions/assert_type.rb +48 -12
  54. data/lib/puppet/functions/defined.rb +79 -48
  55. data/lib/puppet/functions/each.rb +85 -27
  56. data/lib/puppet/functions/epp.rb +29 -37
  57. data/lib/puppet/functions/filter.rb +60 -25
  58. data/lib/puppet/functions/hiera.rb +76 -3
  59. data/lib/puppet/functions/hiera_array.rb +65 -3
  60. data/lib/puppet/functions/hiera_hash.rb +74 -2
  61. data/lib/puppet/functions/hiera_include.rb +77 -4
  62. data/lib/puppet/functions/inline_epp.rb +44 -71
  63. data/lib/puppet/functions/lookup.rb +19 -17
  64. data/lib/puppet/functions/map.rb +56 -21
  65. data/lib/puppet/functions/match.rb +29 -12
  66. data/lib/puppet/functions/reduce.rb +95 -58
  67. data/lib/puppet/functions/versioncmp.rb +36 -0
  68. data/lib/puppet/functions/with.rb +15 -7
  69. data/lib/puppet/functions.rb +2 -4
  70. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  71. data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
  72. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  73. data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
  74. data/lib/puppet/indirector/hiera.rb +4 -0
  75. data/lib/puppet/indirector/indirection.rb +6 -1
  76. data/lib/puppet/indirector/json.rb +1 -1
  77. data/lib/puppet/indirector/msgpack.rb +1 -1
  78. data/lib/puppet/indirector/request.rb +7 -8
  79. data/lib/puppet/indirector/resource_type/parser.rb +5 -3
  80. data/lib/puppet/info_service/class_information_service.rb +111 -0
  81. data/lib/puppet/info_service.rb +7 -0
  82. data/lib/puppet/module_tool/applications/unpacker.rb +1 -1
  83. data/lib/puppet/module_tool/metadata.rb +32 -9
  84. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  85. data/lib/puppet/module_tool/skeleton/templates/generator/manifests/init.pp.erb +25 -18
  86. data/lib/puppet/network/authconfig.rb +21 -1
  87. data/lib/puppet/network/authorization.rb +8 -1
  88. data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
  89. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  90. data/lib/puppet/node/environment.rb +9 -2
  91. data/lib/puppet/node.rb +11 -5
  92. data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
  93. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  94. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
  95. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  96. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  97. data/lib/puppet/parser/compiler.rb +300 -12
  98. data/lib/puppet/parser/environment_compiler.rb +165 -0
  99. data/lib/puppet/parser/functions/assert_type.rb +46 -16
  100. data/lib/puppet/parser/functions/defined.rb +105 -68
  101. data/lib/puppet/parser/functions/each.rb +85 -27
  102. data/lib/puppet/parser/functions/epp.rb +29 -37
  103. data/lib/puppet/parser/functions/filter.rb +59 -23
  104. data/lib/puppet/parser/functions/hiera.rb +83 -27
  105. data/lib/puppet/parser/functions/hiera_array.rb +71 -28
  106. data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
  107. data/lib/puppet/parser/functions/hiera_include.rb +81 -40
  108. data/lib/puppet/parser/functions/inline_epp.rb +35 -60
  109. data/lib/puppet/parser/functions/inline_template.rb +2 -2
  110. data/lib/puppet/parser/functions/map.rb +55 -20
  111. data/lib/puppet/parser/functions/match.rb +27 -12
  112. data/lib/puppet/parser/functions/reduce.rb +97 -60
  113. data/lib/puppet/parser/functions/with.rb +16 -8
  114. data/lib/puppet/parser/resource.rb +103 -21
  115. data/lib/puppet/parser.rb +3 -0
  116. data/lib/puppet/plugins/configuration.rb +3 -2
  117. data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
  118. data/lib/puppet/plugins/data_providers/registry.rb +84 -0
  119. data/lib/puppet/plugins/data_providers.rb +12 -60
  120. data/lib/puppet/pops/adapters.rb +12 -0
  121. data/lib/puppet/pops/binder/binder.rb +2 -2
  122. data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
  123. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  124. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  125. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  126. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  127. data/lib/puppet/pops/binder/injector.rb +4 -4
  128. data/lib/puppet/pops/binder/key_factory.rb +3 -9
  129. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  130. data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
  131. data/lib/puppet/pops/evaluator/closure.rb +8 -8
  132. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  133. data/lib/puppet/pops/evaluator/evaluator_impl.rb +10 -6
  134. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  135. data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
  136. data/lib/puppet/pops/functions/dispatcher.rb +3 -3
  137. data/lib/puppet/pops/issues.rb +11 -3
  138. data/lib/puppet/pops/label_provider.rb +1 -1
  139. data/lib/puppet/pops/lookup/explainer.rb +402 -0
  140. data/lib/puppet/pops/lookup/invocation.rb +117 -0
  141. data/lib/puppet/pops/lookup.rb +25 -47
  142. data/lib/puppet/pops/merge_strategy.rb +73 -5
  143. data/lib/puppet/pops/model/factory.rb +38 -3
  144. data/lib/puppet/pops/model/model_label_provider.rb +10 -1
  145. data/lib/puppet/pops/model/model_meta.rb +19 -1
  146. data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
  147. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  148. data/lib/puppet/pops/parser/egrammar.ra +65 -2
  149. data/lib/puppet/pops/parser/eparser.rb +1569 -1241
  150. data/lib/puppet/pops/parser/lexer2.rb +32 -1
  151. data/lib/puppet/pops/parser/locator.rb +1 -1
  152. data/lib/puppet/pops/parser/parser_support.rb +25 -13
  153. data/lib/puppet/pops/patterns.rb +3 -0
  154. data/lib/puppet/pops/types/enumeration.rb +1 -2
  155. data/lib/puppet/pops/types/type_asserter.rb +16 -15
  156. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  157. data/lib/puppet/pops/types/type_calculator.rb +171 -1020
  158. data/lib/puppet/pops/types/type_factory.rb +87 -148
  159. data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
  160. data/lib/puppet/pops/types/type_parser.rb +118 -129
  161. data/lib/puppet/pops/types/types.rb +1394 -255
  162. data/lib/puppet/pops/types/types_meta.rb +0 -234
  163. data/lib/puppet/pops/validation/checker4_0.rb +49 -1
  164. data/lib/puppet/pops/validation/validator_factory_4_0.rb +3 -1
  165. data/lib/puppet/pops/validation.rb +7 -2
  166. data/lib/puppet/pops.rb +19 -17
  167. data/lib/puppet/provider/augeas/augeas.rb +50 -0
  168. data/lib/puppet/provider/exec.rb +6 -1
  169. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  170. data/lib/puppet/provider/package/dnf.rb +41 -0
  171. data/lib/puppet/provider/package/gem.rb +7 -2
  172. data/lib/puppet/provider/package/nim.rb +1 -1
  173. data/lib/puppet/provider/package/rpm.rb +1 -0
  174. data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
  175. data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
  176. data/lib/puppet/provider/package/windows/package.rb +9 -1
  177. data/lib/puppet/provider/package/yum.rb +20 -9
  178. data/lib/puppet/provider/service/bsd.rb +1 -1
  179. data/lib/puppet/provider/service/debian.rb +21 -0
  180. data/lib/puppet/provider/service/init.rb +6 -0
  181. data/lib/puppet/provider/service/launchd.rb +36 -7
  182. data/lib/puppet/provider/service/rcng.rb +51 -0
  183. data/lib/puppet/provider/service/redhat.rb +2 -1
  184. data/lib/puppet/provider/service/smf.rb +43 -2
  185. data/lib/puppet/provider/service/src.rb +27 -0
  186. data/lib/puppet/provider/service/systemd.rb +25 -5
  187. data/lib/puppet/provider/sshkey/parsed.rb +19 -9
  188. data/lib/puppet/provider/zone/solaris.rb +2 -2
  189. data/lib/puppet/reference/configuration.rb +10 -4
  190. data/lib/puppet/reference/report.rb +9 -12
  191. data/lib/puppet/reports.rb +5 -1
  192. data/lib/puppet/resource/capability_finder.rb +95 -0
  193. data/lib/puppet/resource/catalog.rb +47 -7
  194. data/lib/puppet/resource/status.rb +0 -2
  195. data/lib/puppet/resource/type.rb +238 -44
  196. data/lib/puppet/resource/type_collection.rb +60 -2
  197. data/lib/puppet/resource.rb +50 -73
  198. data/lib/puppet/settings/file_setting.rb +10 -9
  199. data/lib/puppet/settings.rb +2 -2
  200. data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
  201. data/lib/puppet/ssl/oids.rb +9 -1
  202. data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
  203. data/lib/puppet/transaction/resource_harness.rb +9 -4
  204. data/lib/puppet/transaction.rb +8 -1
  205. data/lib/puppet/type/augeas.rb +8 -0
  206. data/lib/puppet/type/file/source.rb +14 -12
  207. data/lib/puppet/type/package.rb +9 -6
  208. data/lib/puppet/type/user.rb +4 -2
  209. data/lib/puppet/type.rb +78 -7
  210. data/lib/puppet/util/command_line.rb +4 -0
  211. data/lib/puppet/util/execution.rb +18 -2
  212. data/lib/puppet/util/tagging.rb +7 -1
  213. data/lib/puppet/util/windows/adsi.rb +5 -2
  214. data/lib/puppet/util/windows/security.rb +4 -1
  215. data/lib/puppet/util/windows/taskscheduler.rb +1 -1
  216. data/lib/puppet/util.rb +9 -1
  217. data/lib/puppet/version.rb +1 -1
  218. data/lib/puppet.rb +12 -0
  219. data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
  220. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  221. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  222. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  223. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  224. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  225. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  226. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  227. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  228. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  229. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  230. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  231. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  232. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  233. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  234. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  235. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  236. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  237. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  238. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  239. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  240. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  241. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
  242. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  243. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
  244. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  245. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  246. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  247. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  248. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  249. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  250. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  251. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  252. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
  253. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  254. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  255. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  256. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
  257. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  258. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  259. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  260. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  261. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
  262. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  263. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  264. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
  265. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  266. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
  267. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
  268. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  269. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  270. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
  271. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
  272. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  273. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  274. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  275. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  276. data/spec/integration/data_binding_spec.rb +229 -0
  277. data/spec/integration/file_bucket/file_spec.rb +2 -2
  278. data/spec/integration/parser/compiler_spec.rb +30 -24
  279. data/spec/integration/parser/resource_expressions_spec.rb +4 -4
  280. data/spec/integration/parser/undef_param_spec.rb +1 -1
  281. data/spec/integration/provider/package_spec.rb +3 -1
  282. data/spec/integration/resource/catalog_spec.rb +1 -1
  283. data/spec/integration/ssl/certificate_authority_spec.rb +0 -1
  284. data/spec/integration/ssl/certificate_request_spec.rb +0 -1
  285. data/spec/integration/ssl/certificate_revocation_list_spec.rb +0 -1
  286. data/spec/integration/ssl/host_spec.rb +0 -1
  287. data/spec/integration/type/package_spec.rb +2 -0
  288. data/spec/integration/util/rdoc/parser_spec.rb +1 -1
  289. data/spec/integration/util/windows/security_spec.rb +18 -0
  290. data/spec/lib/matchers/include_in_order.rb +2 -2
  291. data/spec/shared_behaviours/iterative_functions.rb +8 -8
  292. data/spec/spec_helper.rb +7 -0
  293. data/spec/unit/agent/locker_spec.rb +4 -4
  294. data/spec/unit/agent_spec.rb +0 -8
  295. data/spec/unit/application/agent_spec.rb +5 -0
  296. data/spec/unit/application/apply_spec.rb +9 -1
  297. data/spec/unit/application/filebucket_spec.rb +88 -2
  298. data/spec/unit/application/lookup_spec.rb +195 -0
  299. data/spec/unit/application/master_spec.rb +2 -2
  300. data/spec/unit/application_spec.rb +3 -3
  301. data/spec/unit/appmgmt_spec.rb +657 -0
  302. data/spec/unit/capability_spec.rb +414 -0
  303. data/spec/unit/configurer_spec.rb +7 -1
  304. data/spec/unit/context/trusted_information_spec.rb +24 -1
  305. data/spec/unit/daemon_spec.rb +18 -8
  306. data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
  307. data/spec/unit/environments_spec.rb +2 -0
  308. data/spec/unit/face/node_spec.rb +1 -1
  309. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  310. data/spec/unit/file_serving/configuration_spec.rb +1 -1
  311. data/spec/unit/file_system_spec.rb +20 -0
  312. data/spec/unit/functions/assert_type_spec.rb +5 -7
  313. data/spec/unit/functions/defined_spec.rb +2 -2
  314. data/spec/unit/functions/epp_spec.rb +2 -2
  315. data/spec/unit/functions/filter_spec.rb +18 -0
  316. data/spec/unit/functions/hiera_spec.rb +2 -2
  317. data/spec/unit/functions/lookup_spec.rb +200 -9
  318. data/spec/unit/functions/regsubst_spec.rb +17 -8
  319. data/spec/unit/functions/scanf_spec.rb +1 -1
  320. data/spec/unit/functions/split_spec.rb +2 -2
  321. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  322. data/spec/unit/functions4_spec.rb +58 -72
  323. data/spec/unit/graph/sequential_prioritizer_spec.rb +1 -1
  324. data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
  325. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  326. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  327. data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
  328. data/spec/unit/indirector/indirection_spec.rb +13 -2
  329. data/spec/unit/indirector/request_spec.rb +8 -8
  330. data/spec/unit/indirector/ssl_file_spec.rb +1 -1
  331. data/spec/unit/indirector/yaml_spec.rb +1 -1
  332. data/spec/unit/info_service_spec.rb +236 -0
  333. data/spec/unit/module_tool/application_spec.rb +1 -1
  334. data/spec/unit/module_tool/applications/builder_spec.rb +1 -1
  335. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  336. data/spec/unit/network/authconfig_spec.rb +62 -32
  337. data/spec/unit/network/authorization_spec.rb +30 -2
  338. data/spec/unit/network/authstore_spec.rb +1 -1
  339. data/spec/unit/network/http/compression_spec.rb +1 -1
  340. data/spec/unit/network/http/connection_spec.rb +14 -19
  341. data/spec/unit/network/http/handler_spec.rb +0 -5
  342. data/spec/unit/network/rights_spec.rb +3 -3
  343. data/spec/unit/node_spec.rb +27 -0
  344. data/spec/unit/parser/ast/leaf_spec.rb +1 -1
  345. data/spec/unit/parser/compiler_spec.rb +86 -2
  346. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  347. data/spec/unit/parser/resource_spec.rb +2 -20
  348. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  349. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  350. data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
  351. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  352. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +20 -11
  353. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  354. data/spec/unit/pops/label_provider_spec.rb +5 -1
  355. data/spec/unit/pops/parser/lexer2_spec.rb +39 -0
  356. data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
  357. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
  358. data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
  359. data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
  360. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  361. data/spec/unit/pops/parser/parser_spec.rb +18 -0
  362. data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
  363. data/spec/unit/pops/types/type_factory_spec.rb +12 -12
  364. data/spec/unit/pops/types/type_parser_spec.rb +15 -12
  365. data/spec/unit/pops/validator/validator_spec.rb +68 -0
  366. data/spec/unit/property_spec.rb +1 -1
  367. data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
  368. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  369. data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
  370. data/spec/unit/provider/package/dnf_spec.rb +92 -0
  371. data/spec/unit/provider/package/gem_spec.rb +7 -0
  372. data/spec/unit/provider/package/nim_spec.rb +6 -6
  373. data/spec/unit/provider/package/rpm_spec.rb +25 -2
  374. data/spec/unit/provider/package/windows/package_spec.rb +41 -0
  375. data/spec/unit/provider/package/yum_spec.rb +35 -12
  376. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
  377. data/spec/unit/provider/service/debian_spec.rb +28 -0
  378. data/spec/unit/provider/service/gentoo_spec.rb +1 -0
  379. data/spec/unit/provider/service/init_spec.rb +6 -0
  380. data/spec/unit/provider/service/launchd_spec.rb +85 -10
  381. data/spec/unit/provider/service/openrc_spec.rb +1 -0
  382. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  383. data/spec/unit/provider/service/redhat_spec.rb +8 -1
  384. data/spec/unit/provider/service/smf_spec.rb +30 -5
  385. data/spec/unit/provider/service/src_spec.rb +20 -4
  386. data/spec/unit/provider/service/systemd_spec.rb +79 -29
  387. data/spec/unit/provider/ssh_authorized_key/parsed_spec.rb +1 -1
  388. data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
  389. data/spec/unit/provider/user/windows_adsi_spec.rb +2 -1
  390. data/spec/unit/provider/zone/solaris_spec.rb +19 -0
  391. data/spec/unit/reports_spec.rb +10 -0
  392. data/spec/unit/resource/capability_finder_spec.rb +56 -0
  393. data/spec/unit/resource/catalog_spec.rb +31 -8
  394. data/spec/unit/resource/type_collection_spec.rb +23 -2
  395. data/spec/unit/resource/type_spec.rb +1 -1
  396. data/spec/unit/resource_spec.rb +23 -5
  397. data/spec/unit/settings/file_setting_spec.rb +31 -0
  398. data/spec/unit/settings_spec.rb +91 -2
  399. data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
  400. data/spec/unit/ssl/certificate_authority_spec.rb +5 -3
  401. data/spec/unit/ssl/host_spec.rb +2 -2
  402. data/spec/unit/ssl/oids_spec.rb +8 -0
  403. data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
  404. data/spec/unit/transaction/report_spec.rb +24 -1
  405. data/spec/unit/transaction_spec.rb +7 -0
  406. data/spec/unit/type/exec_spec.rb +16 -8
  407. data/spec/unit/type/host_spec.rb +4 -4
  408. data/spec/unit/type/package_spec.rb +1 -0
  409. data/spec/unit/type/tidy_spec.rb +4 -4
  410. data/spec/unit/type/user_spec.rb +14 -7
  411. data/spec/unit/type/vlan_spec.rb +1 -1
  412. data/spec/unit/type_spec.rb +1 -1
  413. data/spec/unit/util/ldap/generator_spec.rb +1 -1
  414. data/spec/unit/util/network_device/cisco/device_spec.rb +1 -1
  415. data/spec/unit/util/network_device/transport/ssh_spec.rb +1 -1
  416. data/spec/unit/util/network_device_spec.rb +1 -1
  417. data/spec/unit/util/storage_spec.rb +5 -1
  418. data/spec/unit/util/windows/adsi_spec.rb +13 -0
  419. data/spec/unit/util_spec.rb +21 -2
  420. metadata +173 -7
  421. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  422. data/spec/integration/data_binding.rb +0 -104
@@ -49,6 +49,10 @@ class CompilerTestResource
49
49
  def line
50
50
  "42"
51
51
  end
52
+
53
+ def resource_type
54
+ self.class
55
+ end
52
56
  end
53
57
 
54
58
  describe Puppet::Parser::Compiler do
@@ -655,7 +659,7 @@ describe Puppet::Parser::Compiler do
655
659
  @node.classes = klass
656
660
  klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'a' => nil, 'b' => nil})
657
661
  @compiler.topscope.known_resource_types.add klass
658
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Must pass b to Class[Foo]")
662
+ expect { @compiler.compile }.to raise_error(Puppet::PreformattedError, /Class\[Foo\]: expects a value for parameter 'b'/)
659
663
  end
660
664
 
661
665
  it "should fail if invalid parameters are passed" do
@@ -663,7 +667,7 @@ describe Puppet::Parser::Compiler do
663
667
  @node.classes = klass
664
668
  klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {})
665
669
  @compiler.topscope.known_resource_types.add klass
666
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Invalid parameter: '3' on Class[Foo]")
670
+ expect { @compiler.compile }.to raise_error(Puppet::PreformattedError, /Class\[Foo\]: has no parameter named '3'/)
667
671
  end
668
672
 
669
673
  it "should ensure class is in catalog without params" do
@@ -1202,13 +1206,15 @@ describe Puppet::Parser::Compiler do
1202
1206
 
1203
1207
  it 'should recompute the version after input files are re-parsed' do
1204
1208
  Puppet[:code] = 'class foo { }'
1205
- Time.stubs(:now).returns(1)
1209
+ first_time = Time.at(1)
1210
+ second_time = Time.at(200)
1211
+ Time.stubs(:now).returns(first_time)
1206
1212
  node = Puppet::Node.new('mynode')
1207
- expect(Puppet::Parser::Compiler.compile(node).version).to eq(1)
1208
- Time.stubs(:now).returns(2)
1209
- expect(Puppet::Parser::Compiler.compile(node).version).to eq(1) # no change because files didn't change
1213
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i)
1214
+ Time.stubs(:now).returns(second_time)
1215
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(first_time.to_i) # no change because files didn't change
1210
1216
  Puppet[:code] = nil
1211
- expect(Puppet::Parser::Compiler.compile(node).version).to eq(2)
1217
+ expect(Puppet::Parser::Compiler.compile(node).version).to eq(second_time.to_i)
1212
1218
  end
1213
1219
 
1214
1220
  ['define', 'class', 'node'].each do |thing|
@@ -1450,7 +1456,7 @@ describe Puppet::Parser::Compiler do
1450
1456
  define foo(Integer $x) { }
1451
1457
  foo { 'test': x =>'say friend' }
1452
1458
  MANIFEST
1453
- end.to raise_error(/type Integer, got String/)
1459
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got String/)
1454
1460
  end
1455
1461
 
1456
1462
  it 'denies undef for a non-optional type' do
@@ -1459,7 +1465,7 @@ describe Puppet::Parser::Compiler do
1459
1465
  define foo(Integer $x) { }
1460
1466
  foo { 'test': x => undef }
1461
1467
  MANIFEST
1462
- end.to raise_error(/type Integer, got Undef/)
1468
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got Undef/)
1463
1469
  end
1464
1470
 
1465
1471
  it 'denies non type compliant default argument' do
@@ -1468,7 +1474,7 @@ describe Puppet::Parser::Compiler do
1468
1474
  define foo(Integer $x = 'pow') { }
1469
1475
  foo { 'test': }
1470
1476
  MANIFEST
1471
- end.to raise_error(/type Integer, got String/)
1477
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got String/)
1472
1478
  end
1473
1479
 
1474
1480
  it 'denies undef as the default for a non-optional type' do
@@ -1477,7 +1483,7 @@ describe Puppet::Parser::Compiler do
1477
1483
  define foo(Integer $x = undef) { }
1478
1484
  foo { 'test': }
1479
1485
  MANIFEST
1480
- end.to raise_error(/type Integer, got Undef/)
1486
+ end.to raise_error(/Foo\[test\]: parameter 'x' expects an Integer value, got Undef/)
1481
1487
  end
1482
1488
 
1483
1489
  it 'accepts a Resource as a Type' do
@@ -1498,7 +1504,7 @@ describe Puppet::Parser::Compiler do
1498
1504
  define foo(Struct[{b => Integer, d=>String}] $a) { }
1499
1505
  foo{ bar: a => {b => 5, c => 'stuff'}}
1500
1506
  MANIFEST
1501
- end.to raise_error(/got Struct\[\{'b'=>Integer, 'c'=>String\}\]/)
1507
+ end.to raise_error(/Foo\[bar\]:\s+parameter 'a' expects a value for key 'd'\s+parameter 'a' has no 'c' key/m)
1502
1508
  end
1503
1509
  end
1504
1510
 
@@ -1536,7 +1542,7 @@ describe Puppet::Parser::Compiler do
1536
1542
  class foo(Integer $x) { }
1537
1543
  class { 'foo': x =>'say friend' }
1538
1544
  MANIFEST
1539
- end.to raise_error(/type Integer, got String/)
1545
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got String/)
1540
1546
  end
1541
1547
 
1542
1548
  it 'denies undef for a non-optional type' do
@@ -1545,7 +1551,7 @@ describe Puppet::Parser::Compiler do
1545
1551
  class foo(Integer $x) { }
1546
1552
  class { 'foo': x => undef }
1547
1553
  MANIFEST
1548
- end.to raise_error(/type Integer, got Undef/)
1554
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got Undef/)
1549
1555
  end
1550
1556
 
1551
1557
  it 'denies non type compliant default argument' do
@@ -1554,7 +1560,7 @@ describe Puppet::Parser::Compiler do
1554
1560
  class foo(Integer $x = 'pow') { }
1555
1561
  class { 'foo': }
1556
1562
  MANIFEST
1557
- end.to raise_error(/type Integer, got String/)
1563
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got String/)
1558
1564
  end
1559
1565
 
1560
1566
  it 'denies undef as the default for a non-optional type' do
@@ -1563,7 +1569,7 @@ describe Puppet::Parser::Compiler do
1563
1569
  class foo(Integer $x = undef) { }
1564
1570
  class { 'foo': }
1565
1571
  MANIFEST
1566
- end.to raise_error(/type Integer, got Undef/)
1572
+ end.to raise_error(/Class\[Foo\]: parameter 'x' expects an Integer value, got Undef/)
1567
1573
  end
1568
1574
 
1569
1575
  it 'accepts a Resource as a Type' do
@@ -1630,7 +1636,7 @@ describe Puppet::Parser::Compiler do
1630
1636
  compile_to_catalog(<<-MANIFEST)
1631
1637
  with(1) |String $x| { }
1632
1638
  MANIFEST
1633
- end.to raise_error(/expected.*String.*actual.*Integer/m)
1639
+ end.to raise_error(/block parameter 'x' expects a String value, got Integer/m)
1634
1640
  end
1635
1641
 
1636
1642
  it 'denies non-type-compliant, slurped arguments' do
@@ -1638,7 +1644,7 @@ describe Puppet::Parser::Compiler do
1638
1644
  compile_to_catalog(<<-MANIFEST)
1639
1645
  with(1, "hello") |Integer *$x| { }
1640
1646
  MANIFEST
1641
- end.to raise_error(/called with mis-matched arguments.*expected.*Integer.*actual.*Integer, String/m)
1647
+ end.to raise_error(/block parameter 'x' expects an Integer value, got String/m)
1642
1648
  end
1643
1649
 
1644
1650
  it 'denies non-type-compliant default argument' do
@@ -1646,7 +1652,7 @@ describe Puppet::Parser::Compiler do
1646
1652
  compile_to_catalog(<<-MANIFEST)
1647
1653
  with(1) |$x, String $defaulted = 1| { notify { "${$x + $defaulted}": }}
1648
1654
  MANIFEST
1649
- end.to raise_error(/expected.*Any.*String.*actual.*Integer.*Integer/m)
1655
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
1650
1656
  end
1651
1657
 
1652
1658
  it 'raises an error when a default argument value is an incorrect type and there are no arguments passed' do
@@ -1654,7 +1660,7 @@ describe Puppet::Parser::Compiler do
1654
1660
  compile_to_catalog(<<-MANIFEST)
1655
1661
  with() |String $defaulted = 1| {}
1656
1662
  MANIFEST
1657
- end.to raise_error(/expected.*String.*actual.*Integer/m)
1663
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
1658
1664
  end
1659
1665
 
1660
1666
  it 'raises an error when the default argument for a slurped parameter is an incorrect type' do
@@ -1662,7 +1668,7 @@ describe Puppet::Parser::Compiler do
1662
1668
  compile_to_catalog(<<-MANIFEST)
1663
1669
  with() |String *$defaulted = 1| {}
1664
1670
  MANIFEST
1665
- end.to raise_error(/expected.*String.*actual.*Integer/m)
1671
+ end.to raise_error(/block parameter 'defaulted' expects a String value, got Integer/m)
1666
1672
  end
1667
1673
 
1668
1674
  it 'allows using an array as the default slurped value' do
@@ -1694,7 +1700,7 @@ describe Puppet::Parser::Compiler do
1694
1700
  compile_to_catalog(<<-MANIFEST)
1695
1701
  with() |Array[String, 2] *$defaulted = hi| { }
1696
1702
  MANIFEST
1697
- end.to raise_error(/expected.*arg count \{2,\}.*actual.*arg count \{1\}/m)
1703
+ end.to raise_error(/block expects at least 2 arguments, got 1/m)
1698
1704
  end
1699
1705
 
1700
1706
  it 'raises an error when the number of passed values does not match the parameter\'s size specification' do
@@ -1702,7 +1708,7 @@ describe Puppet::Parser::Compiler do
1702
1708
  compile_to_catalog(<<-MANIFEST)
1703
1709
  with(hi) |Array[String, 2] *$passed| { }
1704
1710
  MANIFEST
1705
- end.to raise_error(/expected.*arg count \{2,\}.*actual.*arg count \{1\}/m)
1711
+ end.to raise_error(/block expects at least 2 arguments, got 1/m)
1706
1712
  end
1707
1713
 
1708
1714
  it 'matches when the number of arguments passed for a slurp parameter match the size specification' do
@@ -1721,7 +1727,7 @@ describe Puppet::Parser::Compiler do
1721
1727
  compile_to_catalog(<<-MANIFEST)
1722
1728
  with(hi, bye) |Array[String, 1, 1] *$passed| { }
1723
1729
  MANIFEST
1724
- end.to raise_error(/expected.*arg count \{1\}.*actual.*arg count \{2\}/m)
1730
+ end.to raise_error(/block expects 1 argument, got 2/m)
1725
1731
  end
1726
1732
 
1727
1733
  it 'allows passing slurped arrays by specifying an array of arrays' do
@@ -167,15 +167,15 @@ describe "Puppet resource expressions" do
167
167
  produces("notify{title:}; Notify[title] { * => { message => set}}" => "Notify[title][message] == 'set'")
168
168
  produces("Notify { * => { message => set}}; notify{title:}" => "Notify[title][message] == 'set'")
169
169
 
170
- fails("notify { title: unknown => value }" => /Invalid parameter: 'unknown'/)
170
+ fails("notify { title: unknown => value }" => /no parameter named 'unknown'/)
171
171
 
172
172
  # this really needs to be a better error message.
173
- fails("notify { title: * => { hash => value }, message => oops }" => /Invalid parameter: 'hash'/)
173
+ fails("notify { title: * => { hash => value }, message => oops }" => /no parameter named 'hash'/)
174
174
 
175
175
  # should this be a better error message?
176
- fails("notify { title: message => oops, * => { hash => value } }" => /Invalid parameter: 'hash'/)
176
+ fails("notify { title: message => oops, * => { hash => value } }" => /no parameter named 'hash'/)
177
177
 
178
- fails("notify { title: * => { unknown => value } }" => /Invalid parameter: 'unknown'/)
178
+ fails("notify { title: * => { unknown => value } }" => /no parameter named 'unknown'/)
179
179
  fails("
180
180
  $x = { mode => '0666' }
181
181
  $y = { owner => the_y }
@@ -78,7 +78,7 @@ describe "Parameter passing" do
78
78
  end
79
79
 
80
80
  it "errors when no parameter is provided and there is no default" do
81
- expect_puppet_error(/^Must pass x to A\[a\].*/) do <<-MANIFEST
81
+ expect_puppet_error(/A\[a\]: expects a value for parameter 'x'/) do <<-MANIFEST
82
82
  define a($x) { notify { 'something': message => $x }}
83
83
  a {'a': }
84
84
  MANIFEST
@@ -12,7 +12,9 @@ describe "Package provider" do
12
12
  options = {:name => "nosuch#{provider.name}", :provider => provider.name}
13
13
 
14
14
  pkg = Puppet::Type.newpackage(options)
15
- expect { pkg.provider.install }.to raise_error
15
+ expect { pkg.provider.install }.to raise_error { |error|
16
+ expect(error).not_to eq("")
17
+ }
16
18
  end
17
19
 
18
20
  it "should be able to get a list of existing packages" do
@@ -35,7 +35,7 @@ describe Puppet::Resource::Catalog do
35
35
  node.stub_everything
36
36
 
37
37
  Puppet::Node.indirection.expects(:find).returns(node)
38
- compiler.expects(:compile).with(node).returns nil
38
+ compiler.expects(:compile).with(node, anything).returns nil
39
39
 
40
40
  expect(Puppet::Resource::Catalog.indirection.find("me")).to be_nil
41
41
  end
@@ -13,7 +13,6 @@ describe Puppet::SSL::CertificateAuthority, :unless => Puppet.features.microsoft
13
13
 
14
14
  Puppet.settings[:confdir] = dir
15
15
  Puppet.settings[:vardir] = dir
16
- Puppet.settings[:group] = Process.gid
17
16
 
18
17
  Puppet::SSL::Host.ca_location = :local
19
18
 
@@ -12,7 +12,6 @@ describe Puppet::SSL::CertificateRequest do
12
12
 
13
13
  Puppet.settings[:confdir] = dir
14
14
  Puppet.settings[:vardir] = dir
15
- Puppet.settings[:group] = Process.gid
16
15
 
17
16
  Puppet::SSL::Host.ca_location = :none
18
17
 
@@ -12,7 +12,6 @@ describe Puppet::SSL::CertificateRevocationList do
12
12
 
13
13
  Puppet.settings[:confdir] = dir
14
14
  Puppet.settings[:vardir] = dir
15
- Puppet.settings[:group] = Process.gid
16
15
 
17
16
  Puppet::SSL::Host.ca_location = :local
18
17
  end
@@ -12,7 +12,6 @@ describe Puppet::SSL::Host do
12
12
 
13
13
  Puppet.settings[:confdir] = dir
14
14
  Puppet.settings[:vardir] = dir
15
- Puppet.settings[:group] = Process.gid
16
15
 
17
16
  Puppet::SSL::Host.ca_location = :local
18
17
 
@@ -54,6 +54,7 @@ end
54
54
 
55
55
  describe Puppet::Type.type(:package), "when packages with the same name are sourced" do
56
56
  before :each do
57
+ Process.stubs(:euid).returns 0
57
58
  @provider = stub(
58
59
  'provider',
59
60
  :class => Puppet::Type.type(:package).defaultprovider,
@@ -131,6 +132,7 @@ describe Puppet::Type.type(:package), 'logging package state transitions' do
131
132
  let(:provider) { stub('provider', :class => Puppet::Type.type(:package).defaultprovider, :clear => nil, :validate_source => nil) }
132
133
 
133
134
  before :each do
135
+ Process.stubs(:euid).returns 0
134
136
  provider.stubs(:satisfies?).with([:purgeable]).returns(true)
135
137
  provider.class.stubs(:instances).returns([])
136
138
  provider.stubs(:install).returns nil
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
  require 'puppet/util/rdoc'
4
4
 
5
- describe "RDoc::Parser" do
5
+ describe "RDoc::Parser", :unless => Puppet.features.microsoft_windows? do
6
6
  require 'puppet_spec/files'
7
7
  include PuppetSpec::Files
8
8
 
@@ -238,6 +238,24 @@ describe "Puppet::Util::Windows::Security", :if => Puppet.features.microsoft_win
238
238
  expect(ace.mask).to eq(klass::FILE_ALL_ACCESS)
239
239
  expect(ace).not_to be_inherited
240
240
  end
241
+
242
+ if Puppet::FileSystem.directory?(path)
243
+ system_aces.each do |ace|
244
+ expect(ace).to be_object_inherit
245
+ expect(ace).to be_container_inherit
246
+ end
247
+
248
+ # it's critically important that this file be default created
249
+ # and that this file not have it's owner / group / mode set by winsec
250
+ nested_file = File.join(path, 'nested_file')
251
+ File.new(nested_file, 'w').close
252
+
253
+ system_aces = winsec.get_aces_for_path_by_sid(nested_file, sids[:system])
254
+ # even when SYSTEM is the owner (in CI), there should be an inherited SYSTEM
255
+ expect(system_aces.any? do |ace|
256
+ ace.mask == klass::FILE_ALL_ACCESS && ace.inherited?
257
+ end).to be_truthy
258
+ end
241
259
  end
242
260
 
243
261
  describe "for modes that require deny aces" do
@@ -11,10 +11,10 @@ RSpec::Matchers.define :include_in_order do |*expected|
11
11
  end
12
12
 
13
13
  def failure_message
14
- "expected #{@actual.inspect} to include#{expected_to_sentence} in order"
14
+ "expected #{@actual.inspect} to include#{expected} in order"
15
15
  end
16
16
 
17
17
  def failure_message_when_negated
18
- "expected #{@actual.inspect} not to include#{expected_to_sentence} in order"
18
+ "expected #{@actual.inspect} not to include#{expected} in order"
19
19
  end
20
20
  end
@@ -22,25 +22,25 @@ shared_examples_for 'all iterative functions argument checks' do |func|
22
22
  it 'raises an error when called with any parameters besides a block' do
23
23
  expect do
24
24
  compile_to_catalog(<<-MANIFEST)
25
- [1].#{func}(1) |$v| { }
25
+ [1].#{func}(1,2) |$v,$y| { }
26
26
  MANIFEST
27
- end.to raise_error(Puppet::Error, /mis-matched arguments.*expected.*arg count \{2\}.*actual.*arg count \{3\}/m)
27
+ end.to raise_error(Puppet::Error, /expects (?:between 1 and 2 arguments|1 argument), got 3/)
28
28
  end
29
29
 
30
30
  it 'raises an error when called without a block' do
31
31
  expect do
32
32
  compile_to_catalog(<<-MANIFEST)
33
- [1].#{func}()
33
+ [1].#{func}
34
34
  MANIFEST
35
- end.to raise_error(Puppet::Error, /mis-matched arguments.*expected.*arg count \{2\}.*actual.*arg count \{1\}/m)
35
+ end.to raise_error(Puppet::Error, /expects a block/)
36
36
  end
37
37
 
38
38
  it 'raises an error when called with something that is not a block' do
39
39
  expect do
40
40
  compile_to_catalog(<<-MANIFEST)
41
- [1].#{func}(1)
41
+ [1].#{func}(1,2)
42
42
  MANIFEST
43
- end.to raise_error(Puppet::Error, /mis-matched arguments.*expected.*Callable.*actual(?!Callable\)).*/m)
43
+ end.to raise_error(Puppet::Error, /expects (?:between 1 and 2 arguments|1 argument), got 3/)
44
44
  end
45
45
 
46
46
  it 'raises an error when called with a block with too many required parameters' do
@@ -48,7 +48,7 @@ shared_examples_for 'all iterative functions argument checks' do |func|
48
48
  compile_to_catalog(<<-MANIFEST)
49
49
  [1].#{func}() |$v1, $v2, $v3| { }
50
50
  MANIFEST
51
- end.to raise_error(Puppet::Error, /mis-matched arguments.*expected.*arg count \{2\}.*actual.*Callable\[Any, Any, Any\]/m)
51
+ end.to raise_error(Puppet::Error, /block expects(?: between 1 and)? 2 arguments, got 3/)
52
52
  end
53
53
 
54
54
  it 'raises an error when called with a block with too few parameters' do
@@ -56,7 +56,7 @@ shared_examples_for 'all iterative functions argument checks' do |func|
56
56
  compile_to_catalog(<<-MANIFEST)
57
57
  [1].#{func}() | | { }
58
58
  MANIFEST
59
- end.to raise_error(Puppet::Error, /mis-matched arguments.*expected.*arg count \{2\}.*actual.*Callable\[0, 0\]/m)
59
+ end.to raise_error(Puppet::Error, /block expects(?: between 1 and)? 2 arguments, got none/)
60
60
  end
61
61
 
62
62
  it 'does not raise an error when called with a block with too many but optional arguments' do
data/spec/spec_helper.rb CHANGED
@@ -43,6 +43,13 @@ Pathname.glob("#{dir}/shared_behaviours/**/*.rb") do |behaviour|
43
43
  require behaviour.relative_path_from(Pathname.new(dir))
44
44
  end
45
45
 
46
+ require 'vcr'
47
+ VCR.configure do |vcr|
48
+ vcr.cassette_library_dir = File.expand_path('vcr/cassettes', PuppetSpec::FIXTURE_DIR)
49
+ vcr.hook_into :webmock
50
+ vcr.configure_rspec_metadata!
51
+ end
52
+
46
53
  RSpec.configure do |config|
47
54
  include PuppetSpec::Fixtures
48
55
 
@@ -58,17 +58,17 @@ describe Puppet::Agent::Locker do
58
58
  expect(@locker.lock { :result }).to eq(:result)
59
59
  end
60
60
 
61
- it "should return nil when the lock method does not receive the lock" do
61
+ it "should raise LockError when the lock method does not receive the lock" do
62
62
  @locker.send(:lockfile).expects(:lock).returns false
63
63
 
64
- expect(@locker.lock {}).to be_nil
64
+ expect { @locker.lock {} }.to raise_error(Puppet::LockError)
65
65
  end
66
66
 
67
67
  it "should not yield when the lock method does not receive the lock" do
68
68
  @locker.send(:lockfile).expects(:lock).returns false
69
69
 
70
70
  yielded = false
71
- @locker.lock { yielded = true }
71
+ expect { @locker.lock { yielded = true } }.to raise_error(Puppet::LockError)
72
72
  expect(yielded).to be_falsey
73
73
  end
74
74
 
@@ -76,7 +76,7 @@ describe Puppet::Agent::Locker do
76
76
  @locker.send(:lockfile).expects(:lock).returns false
77
77
  @locker.send(:lockfile).expects(:unlock).never
78
78
 
79
- @locker.lock {}
79
+ expect { @locker.lock {} }.to raise_error(Puppet::LockError)
80
80
  end
81
81
 
82
82
  it "should unlock after yielding upon obtaining a lock" do
@@ -58,7 +58,6 @@ describe Puppet::Agent do
58
58
 
59
59
  client.expects(:run)
60
60
 
61
- @agent.stubs(:running?).returns false
62
61
  @agent.stubs(:disabled?).returns false
63
62
  @agent.run
64
63
  end
@@ -75,7 +74,6 @@ describe Puppet::Agent do
75
74
  describe "when being run" do
76
75
  before do
77
76
  AgentTestClient.stubs(:lockfile_path).returns "/my/lock"
78
- @agent.stubs(:running?).returns false
79
77
  @agent.stubs(:disabled?).returns false
80
78
  end
81
79
 
@@ -85,12 +83,6 @@ describe Puppet::Agent do
85
83
  @agent.run
86
84
  end
87
85
 
88
- it "should do nothing if already running" do
89
- @agent.expects(:running?).returns true
90
- AgentTestClient.expects(:new).never
91
- @agent.run
92
- end
93
-
94
86
  it "should do nothing if disabled" do
95
87
  @agent.expects(:disabled?).returns(true)
96
88
  AgentTestClient.expects(:new).never
@@ -197,6 +197,11 @@ describe Puppet::Application::Agent do
197
197
  Puppet.stubs(:settraps)
198
198
  end
199
199
 
200
+ it "should not run with extra arguments" do
201
+ @puppetd.command_line.stubs(:args).returns(%w{disable})
202
+ expect{@puppetd.setup}.to raise_error ArgumentError, /does not take parameters/
203
+ end
204
+
200
205
  describe "with --test" do
201
206
  it "should call setup_test" do
202
207
  @puppetd.options[:test] = true
@@ -359,7 +359,7 @@ describe Puppet::Application::Apply do
359
359
  it "should raise an error if we can't find the facts" do
360
360
  Puppet::Node::Facts.indirection.expects(:find).returns(nil)
361
361
 
362
- expect { @apply.main }.to raise_error
362
+ expect { @apply.main }.to raise_error(RuntimeError, /Could not find facts/)
363
363
  end
364
364
  end
365
365
 
@@ -470,4 +470,12 @@ describe Puppet::Application::Apply do
470
470
  @apply.send(:apply_catalog, catalog)
471
471
  end
472
472
  end
473
+
474
+ it "should honor the catalog_cache_terminus setting" do
475
+ Puppet.settings[:catalog_cache_terminus] = "json"
476
+ Puppet::Resource::Catalog.indirection.expects(:cache_class=).with(:json)
477
+
478
+ @apply.initialize_app_defaults
479
+ @apply.setup
480
+ end
473
481
  end
@@ -21,7 +21,15 @@ describe Puppet::Application::Filebucket do
21
21
  expect(@filebucket).to respond_to(:restore)
22
22
  end
23
23
 
24
- [:bucket, :debug, :local, :remote, :verbose].each do |option|
24
+ it "should declare a diff command" do
25
+ expect(@filebucket).to respond_to(:diff)
26
+ end
27
+
28
+ it "should declare a list command" do
29
+ expect(@filebucket).to respond_to(:list)
30
+ end
31
+
32
+ [:bucket, :debug, :local, :remote, :verbose, :fromdate, :todate].each do |option|
25
33
  it "should declare handle_#{option} method" do
26
34
  expect(@filebucket).to respond_to("handle_#{option}".to_sym)
27
35
  end
@@ -173,7 +181,7 @@ describe Puppet::Application::Filebucket do
173
181
  describe "the command backup" do
174
182
  it "should fail if no arguments are specified" do
175
183
  @filebucket.stubs(:args).returns([])
176
- expect { @filebucket.backup }.to raise_error
184
+ expect { @filebucket.backup }.to raise_error(RuntimeError, /You must specify a file to back up/)
177
185
  end
178
186
 
179
187
  it "should call the client backup method for each given parameter" do
@@ -201,6 +209,84 @@ describe Puppet::Application::Filebucket do
201
209
  end
202
210
  end
203
211
 
212
+ describe "the command diff" do
213
+ it "should call the client diff method with 2 given checksums" do
214
+ md5a="DEADBEEF"
215
+ md5b="BEEF"
216
+ Puppet::FileSystem.stubs(:exist?).returns(false)
217
+ @filebucket.stubs(:args).returns([md5a, md5b])
218
+
219
+ @client.expects(:diff).with(md5a,md5b, nil, nil)
220
+
221
+ @filebucket.diff
222
+ end
223
+
224
+ it "should call the clien diff with a path if the second argument is a file" do
225
+ md5a="DEADBEEF"
226
+ md5b="BEEF"
227
+ Puppet::FileSystem.stubs(:exist?).with(md5a).returns(false)
228
+ Puppet::FileSystem.stubs(:exist?).with(md5b).returns(true)
229
+ @filebucket.stubs(:args).returns([md5a, md5b])
230
+
231
+ @client.expects(:diff).with(md5a, nil, nil, md5b)
232
+
233
+ @filebucket.diff
234
+ end
235
+
236
+ it "should call the clien diff with a path if the first argument is a file" do
237
+ md5a="DEADBEEF"
238
+ md5b="BEEF"
239
+ Puppet::FileSystem.stubs(:exist?).with(md5a).returns(true)
240
+ Puppet::FileSystem.stubs(:exist?).with(md5b).returns(false)
241
+ @filebucket.stubs(:args).returns([md5a, md5b])
242
+
243
+ @client.expects(:diff).with(nil, md5b, md5a, nil)
244
+
245
+ @filebucket.diff
246
+ end
247
+
248
+ it "should call the clien diff with paths if the both arguments are files" do
249
+ md5a="DEADBEEF"
250
+ md5b="BEEF"
251
+ Puppet::FileSystem.stubs(:exist?).with(md5a).returns(true)
252
+ Puppet::FileSystem.stubs(:exist?).with(md5b).returns(true)
253
+ @filebucket.stubs(:args).returns([md5a, md5b])
254
+
255
+ @client.expects(:diff).with(nil, nil, md5a, md5b)
256
+
257
+ @filebucket.diff
258
+ end
259
+
260
+ it "should fail if only one checksum is given" do
261
+ md5a="DEADBEEF"
262
+ @filebucket.stubs(:args).returns([md5a])
263
+
264
+ expect { @filebucket.diff }.to raise_error Puppet::Error
265
+ end
266
+ end
267
+ describe "the command list" do
268
+ it "should call the client list method with nil dates" do
269
+ @client.expects(:list).with(nil, nil)
270
+
271
+ @filebucket.list
272
+ end
273
+ it "should call the client list method with the given dates" do
274
+ # 3 Hours ago
275
+ threehours = 60*60*3
276
+ fromdate = (Time.now - threehours).strftime("%F %T")
277
+ # 1 Hour ago
278
+ onehour = 60*60
279
+ todate = (Time.now - onehour).strftime("%F %T")
280
+
281
+ @filebucket.options.stubs(:[]).with(:fromdate).returns(fromdate)
282
+ @filebucket.options.stubs(:[]).with(:todate).returns(todate)
283
+
284
+ @client.expects(:list).with(fromdate, todate)
285
+
286
+ @filebucket.list
287
+ end
288
+ end
289
+
204
290
  end
205
291
 
206
292