puppet 4.2.3-x64-mingw32 → 4.3.0-x64-mingw32

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 (337) hide show
  1. data/Gemfile +3 -0
  2. data/README.md +1 -1
  3. data/ext/debian/puppet.init +0 -1
  4. data/ext/debian/puppet.logrotate +14 -5
  5. data/ext/osx/puppet.plist +0 -2
  6. data/ext/redhat/client.init +13 -5
  7. data/ext/redhat/logrotate +15 -3
  8. data/ext/redhat/puppet.spec.erb +5 -1
  9. data/ext/redhat/server.init +1 -1
  10. data/ext/systemd/puppet.service +1 -0
  11. data/lib/puppet.rb +12 -0
  12. data/lib/puppet/agent.rb +4 -4
  13. data/lib/puppet/agent/locker.rb +11 -2
  14. data/lib/puppet/application/agent.rb +5 -1
  15. data/lib/puppet/application/apply.rb +4 -0
  16. data/lib/puppet/application/filebucket.rb +78 -4
  17. data/lib/puppet/application/lookup.rb +356 -0
  18. data/lib/puppet/application/master.rb +3 -0
  19. data/lib/puppet/configurer.rb +9 -5
  20. data/lib/puppet/context.rb +16 -1
  21. data/lib/puppet/context/trusted_information.rb +21 -1
  22. data/lib/puppet/daemon.rb +17 -13
  23. data/lib/puppet/data_binding.rb +4 -2
  24. data/lib/puppet/data_providers.rb +12 -13
  25. data/lib/puppet/data_providers/data_adapter.rb +7 -68
  26. data/lib/puppet/data_providers/data_function_support.rb +5 -26
  27. data/lib/puppet/data_providers/function_env_data_provider.rb +0 -10
  28. data/lib/puppet/data_providers/function_module_data_provider.rb +0 -22
  29. data/lib/puppet/data_providers/hiera_config.rb +106 -0
  30. data/lib/puppet/data_providers/hiera_env_data_provider.rb +18 -0
  31. data/lib/puppet/data_providers/hiera_interpolate.rb +97 -0
  32. data/lib/puppet/data_providers/hiera_module_data_provider.rb +23 -0
  33. data/lib/puppet/data_providers/hiera_support.rb +37 -0
  34. data/lib/puppet/data_providers/json_data_provider_factory.rb +31 -0
  35. data/lib/puppet/data_providers/lookup_adapter.rb +200 -0
  36. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +32 -0
  37. data/lib/puppet/defaults.rb +12 -2
  38. data/lib/puppet/error.rb +4 -0
  39. data/lib/puppet/face/module/changes.rb +2 -1
  40. data/lib/puppet/feature/cfacter.rb +1 -0
  41. data/lib/puppet/file_bucket/dipper.rb +58 -2
  42. data/lib/puppet/functions.rb +2 -4
  43. data/lib/puppet/functions/assert_type.rb +48 -12
  44. data/lib/puppet/functions/defined.rb +79 -48
  45. data/lib/puppet/functions/each.rb +85 -27
  46. data/lib/puppet/functions/filter.rb +58 -23
  47. data/lib/puppet/functions/hiera.rb +76 -3
  48. data/lib/puppet/functions/hiera_array.rb +65 -3
  49. data/lib/puppet/functions/hiera_hash.rb +74 -2
  50. data/lib/puppet/functions/hiera_include.rb +75 -2
  51. data/lib/puppet/functions/lookup.rb +19 -17
  52. data/lib/puppet/functions/map.rb +56 -21
  53. data/lib/puppet/functions/match.rb +29 -12
  54. data/lib/puppet/functions/reduce.rb +95 -58
  55. data/lib/puppet/functions/versioncmp.rb +36 -0
  56. data/lib/puppet/functions/with.rb +15 -7
  57. data/lib/puppet/indirector/catalog/compiler.rb +3 -3
  58. data/lib/puppet/indirector/catalog/static_compiler.rb +46 -30
  59. data/lib/puppet/indirector/data_binding/none.rb +4 -1
  60. data/lib/puppet/indirector/file_bucket_file/file.rb +58 -1
  61. data/lib/puppet/indirector/hiera.rb +4 -0
  62. data/lib/puppet/indirector/json.rb +1 -1
  63. data/lib/puppet/indirector/msgpack.rb +1 -1
  64. data/lib/puppet/indirector/request.rb +7 -8
  65. data/lib/puppet/indirector/resource_type/parser.rb +5 -3
  66. data/lib/puppet/info_service.rb +7 -0
  67. data/lib/puppet/info_service/class_information_service.rb +111 -0
  68. data/lib/puppet/module_tool/metadata.rb +32 -9
  69. data/lib/puppet/module_tool/skeleton/templates/generator/README.md.erb +42 -38
  70. data/lib/puppet/network/authconfig.rb +21 -1
  71. data/lib/puppet/network/authorization.rb +8 -1
  72. data/lib/puppet/network/http/api/master/v3.rb +7 -1
  73. data/lib/puppet/network/http/api/master/v3/environment.rb +59 -0
  74. data/lib/puppet/node/environment.rb +9 -2
  75. data/lib/puppet/parser.rb +3 -0
  76. data/lib/puppet/parser/ast/pops_bridge.rb +39 -1
  77. data/lib/puppet/parser/compiler.rb +302 -12
  78. data/lib/puppet/parser/compiler/catalog_validator.rb +33 -0
  79. data/lib/puppet/parser/compiler/catalog_validator/env_relationship_validator.rb +64 -0
  80. data/lib/puppet/parser/compiler/catalog_validator/relationship_validator.rb +38 -0
  81. data/lib/puppet/parser/compiler/catalog_validator/site_validator.rb +20 -0
  82. data/lib/puppet/parser/environment_compiler.rb +165 -0
  83. data/lib/puppet/parser/functions/assert_type.rb +46 -16
  84. data/lib/puppet/parser/functions/defined.rb +105 -68
  85. data/lib/puppet/parser/functions/each.rb +85 -27
  86. data/lib/puppet/parser/functions/filter.rb +59 -23
  87. data/lib/puppet/parser/functions/hiera.rb +83 -27
  88. data/lib/puppet/parser/functions/hiera_array.rb +71 -28
  89. data/lib/puppet/parser/functions/hiera_hash.rb +81 -30
  90. data/lib/puppet/parser/functions/hiera_include.rb +81 -40
  91. data/lib/puppet/parser/functions/map.rb +55 -20
  92. data/lib/puppet/parser/functions/match.rb +27 -12
  93. data/lib/puppet/parser/functions/reduce.rb +97 -60
  94. data/lib/puppet/parser/functions/with.rb +16 -8
  95. data/lib/puppet/parser/resource.rb +98 -19
  96. data/lib/puppet/plugins/configuration.rb +3 -2
  97. data/lib/puppet/plugins/data_providers.rb +12 -60
  98. data/lib/puppet/plugins/data_providers/data_provider.rb +283 -0
  99. data/lib/puppet/plugins/data_providers/registry.rb +84 -0
  100. data/lib/puppet/pops.rb +19 -17
  101. data/lib/puppet/pops/adapters.rb +12 -0
  102. data/lib/puppet/pops/binder/binder.rb +2 -2
  103. data/lib/puppet/pops/binder/bindings_checker.rb +1 -1
  104. data/lib/puppet/pops/binder/bindings_label_provider.rb +3 -1
  105. data/lib/puppet/pops/binder/bindings_loader.rb +6 -2
  106. data/lib/puppet/pops/binder/bindings_model_meta.rb +2 -2
  107. data/lib/puppet/pops/binder/config/binder_config.rb +1 -1
  108. data/lib/puppet/pops/binder/injector.rb +4 -4
  109. data/lib/puppet/pops/binder/key_factory.rb +3 -9
  110. data/lib/puppet/pops/binder/scheme_handler/module_scheme.rb +68 -9
  111. data/lib/puppet/pops/evaluator/access_operator.rb +27 -60
  112. data/lib/puppet/pops/evaluator/closure.rb +8 -8
  113. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  114. data/lib/puppet/pops/evaluator/evaluator_impl.rb +5 -5
  115. data/lib/puppet/pops/evaluator/literal_evaluator.rb +87 -0
  116. data/lib/puppet/pops/evaluator/relationship_operator.rb +7 -1
  117. data/lib/puppet/pops/functions/dispatcher.rb +3 -3
  118. data/lib/puppet/pops/issues.rb +1 -1
  119. data/lib/puppet/pops/label_provider.rb +1 -1
  120. data/lib/puppet/pops/lookup.rb +25 -47
  121. data/lib/puppet/pops/lookup/explainer.rb +402 -0
  122. data/lib/puppet/pops/lookup/invocation.rb +117 -0
  123. data/lib/puppet/pops/merge_strategy.rb +73 -5
  124. data/lib/puppet/pops/model/factory.rb +34 -0
  125. data/lib/puppet/pops/model/model_label_provider.rb +10 -1
  126. data/lib/puppet/pops/model/model_meta.rb +15 -0
  127. data/lib/puppet/pops/model/model_tree_dumper.rb +18 -0
  128. data/lib/puppet/pops/parser/code_merger.rb +13 -1
  129. data/lib/puppet/pops/parser/egrammar.ra +56 -3
  130. data/lib/puppet/pops/parser/eparser.rb +1549 -1352
  131. data/lib/puppet/pops/parser/lexer2.rb +31 -6
  132. data/lib/puppet/pops/parser/locator.rb +1 -1
  133. data/lib/puppet/pops/parser/parser_support.rb +25 -13
  134. data/lib/puppet/pops/types/enumeration.rb +1 -2
  135. data/lib/puppet/pops/types/type_asserter.rb +16 -15
  136. data/lib/puppet/pops/types/type_assertion_error.rb +1 -0
  137. data/lib/puppet/pops/types/type_calculator.rb +171 -1020
  138. data/lib/puppet/pops/types/type_factory.rb +87 -148
  139. data/lib/puppet/pops/types/type_mismatch_describer.rb +743 -0
  140. data/lib/puppet/pops/types/type_parser.rb +116 -127
  141. data/lib/puppet/pops/types/types.rb +1394 -255
  142. data/lib/puppet/pops/types/types_meta.rb +0 -234
  143. data/lib/puppet/pops/validation.rb +7 -2
  144. data/lib/puppet/pops/validation/checker4_0.rb +28 -0
  145. data/lib/puppet/provider/augeas/augeas.rb +50 -0
  146. data/lib/puppet/provider/group/directoryservice.rb +10 -0
  147. data/lib/puppet/provider/package/dnf.rb +41 -0
  148. data/lib/puppet/provider/package/gem.rb +7 -2
  149. data/lib/puppet/provider/package/rpm.rb +1 -0
  150. data/lib/puppet/provider/package/windows/exe_package.rb +10 -8
  151. data/lib/puppet/provider/package/windows/msi_package.rb +4 -3
  152. data/lib/puppet/provider/package/windows/package.rb +9 -1
  153. data/lib/puppet/provider/package/yum.rb +14 -9
  154. data/lib/puppet/provider/service/bsd.rb +1 -1
  155. data/lib/puppet/provider/service/debian.rb +21 -0
  156. data/lib/puppet/provider/service/init.rb +6 -0
  157. data/lib/puppet/provider/service/rcng.rb +51 -0
  158. data/lib/puppet/provider/service/redhat.rb +2 -1
  159. data/lib/puppet/provider/service/smf.rb +43 -2
  160. data/lib/puppet/provider/service/src.rb +27 -0
  161. data/lib/puppet/provider/service/systemd.rb +15 -3
  162. data/lib/puppet/provider/sshkey/parsed.rb +19 -9
  163. data/lib/puppet/reference/report.rb +9 -12
  164. data/lib/puppet/reports.rb +5 -1
  165. data/lib/puppet/resource.rb +50 -73
  166. data/lib/puppet/resource/capability_finder.rb +95 -0
  167. data/lib/puppet/resource/catalog.rb +47 -7
  168. data/lib/puppet/resource/status.rb +0 -2
  169. data/lib/puppet/resource/type.rb +238 -44
  170. data/lib/puppet/resource/type_collection.rb +60 -2
  171. data/lib/puppet/settings.rb +2 -2
  172. data/lib/puppet/ssl/certificate_authority/interface.rb +2 -2
  173. data/lib/puppet/ssl/oids.rb +9 -1
  174. data/lib/puppet/transaction.rb +4 -1
  175. data/lib/puppet/transaction/additional_resource_generator.rb +71 -8
  176. data/lib/puppet/transaction/resource_harness.rb +9 -4
  177. data/lib/puppet/type.rb +74 -3
  178. data/lib/puppet/type/augeas.rb +8 -0
  179. data/lib/puppet/type/file/source.rb +14 -12
  180. data/lib/puppet/type/user.rb +4 -2
  181. data/lib/puppet/util/windows/security.rb +4 -1
  182. data/lib/puppet/util/windows/taskscheduler.rb +1 -1
  183. data/lib/puppet/version.rb +1 -1
  184. data/spec/fixtures/unit/application/environments/production/data/common.yaml +3 -0
  185. data/spec/fixtures/unit/application/environments/production/environment.conf +1 -0
  186. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/data/bad.json +3 -0
  187. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/environment.conf +2 -0
  188. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/hiera.yaml +5 -0
  189. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_json/manifests/site.pp +5 -0
  190. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/data/bad.yaml +3 -0
  191. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/environment.conf +2 -0
  192. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/hiera.yaml +5 -0
  193. data/spec/fixtures/unit/data_providers/environments/hiera_bad_syntax_yaml/manifests/site.pp +5 -0
  194. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/data/common.yaml +2 -0
  195. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/environment.conf +2 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/manifests/site.pp +1 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/data/common.yaml +2 -0
  198. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/manifests/init.pp +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/hiera_defaults/modules/one/metadata.json +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/first.json +3 -0
  201. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/name.yaml +2 -0
  202. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/second.json +3 -0
  203. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data1/single.yaml +2 -0
  204. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/data2/single.yaml +2 -0
  205. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/environment.conf +2 -0
  206. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/hiera.yaml +18 -0
  207. data/spec/fixtures/unit/data_providers/environments/hiera_env_config/manifests/site.pp +5 -0
  208. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +46 -0
  209. data/spec/fixtures/unit/data_providers/environments/hiera_misc/environment.conf +2 -0
  210. data/spec/fixtures/unit/data_providers/environments/hiera_misc/manifests/site.pp +1 -0
  211. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/data/common.yaml +30 -0
  212. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/manifests/init.pp +13 -0
  213. data/spec/fixtures/unit/data_providers/environments/hiera_misc/modules/one/metadata.json +9 -0
  214. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/environment.conf +2 -0
  215. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/manifests/site.pp +1 -0
  216. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/first.json +3 -0
  217. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/name.yaml +1 -0
  218. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/second.json +3 -0
  219. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data1/single.yaml +2 -0
  220. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/data2/single.yaml +2 -0
  221. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/hiera.yaml +18 -0
  222. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/manifests/init.pp +5 -0
  223. data/spec/fixtures/unit/data_providers/environments/hiera_module_config/modules/one/metadata.json +9 -0
  224. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  225. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_module_data.rb +1 -0
  226. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/data/first.json +3 -0
  227. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/hiera.yaml +8 -0
  228. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/manifests/init.pp +5 -0
  229. data/spec/fixtures/unit/functions/lookup/environments/production/modules/hieraprovider/metadata.json +9 -0
  230. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +9 -0
  231. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/manifests/init.pp +3 -0
  232. data/spec/fixtures/unit/functions/lookup/environments/production/modules/meta/metadata.json +9 -0
  233. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +10 -0
  234. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +23 -0
  235. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/manifests/init.pp +3 -0
  236. data/spec/fixtures/unit/functions/lookup/environments/production/modules/metawcp/metadata.json +9 -0
  237. data/spec/fixtures/unit/provider/package/yum/yum-check-update-security.txt +184 -0
  238. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +24 -0
  239. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +24 -0
  240. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +24 -0
  241. data/spec/integration/data_binding_spec.rb +229 -0
  242. data/spec/integration/file_bucket/file_spec.rb +2 -2
  243. data/spec/integration/parser/compiler_spec.rb +23 -19
  244. data/spec/integration/parser/resource_expressions_spec.rb +4 -4
  245. data/spec/integration/parser/undef_param_spec.rb +1 -1
  246. data/spec/integration/resource/catalog_spec.rb +1 -1
  247. data/spec/integration/type/package_spec.rb +2 -0
  248. data/spec/integration/util/windows/security_spec.rb +18 -0
  249. data/spec/lib/matchers/include_in_order.rb +2 -2
  250. data/spec/shared_behaviours/iterative_functions.rb +8 -8
  251. data/spec/spec_helper.rb +7 -0
  252. data/spec/unit/agent/locker_spec.rb +4 -4
  253. data/spec/unit/agent_spec.rb +0 -8
  254. data/spec/unit/application/agent_spec.rb +5 -0
  255. data/spec/unit/application/apply_spec.rb +8 -0
  256. data/spec/unit/application/filebucket_spec.rb +87 -1
  257. data/spec/unit/application/lookup_spec.rb +195 -0
  258. data/spec/unit/appmgmt_spec.rb +657 -0
  259. data/spec/unit/capability_spec.rb +414 -0
  260. data/spec/unit/configurer_spec.rb +7 -1
  261. data/spec/unit/context/trusted_information_spec.rb +24 -1
  262. data/spec/unit/daemon_spec.rb +18 -8
  263. data/spec/unit/data_providers/hiera_data_provider_spec.rb +201 -0
  264. data/spec/unit/file_bucket/dipper_spec.rb +210 -1
  265. data/spec/unit/functions/assert_type_spec.rb +5 -7
  266. data/spec/unit/functions/defined_spec.rb +2 -2
  267. data/spec/unit/functions/epp_spec.rb +2 -2
  268. data/spec/unit/functions/lookup_spec.rb +200 -9
  269. data/spec/unit/functions/regsubst_spec.rb +17 -8
  270. data/spec/unit/functions/scanf_spec.rb +1 -1
  271. data/spec/unit/functions/split_spec.rb +2 -2
  272. data/spec/unit/functions/versioncmp_spec.rb +36 -0
  273. data/spec/unit/functions4_spec.rb +58 -72
  274. data/spec/unit/indirector/catalog/compiler_spec.rb +28 -8
  275. data/spec/unit/indirector/catalog/static_compiler_spec.rb +38 -20
  276. data/spec/unit/indirector/data_binding/none_spec.rb +2 -2
  277. data/spec/unit/indirector/file_bucket_file/file_spec.rb +52 -1
  278. data/spec/unit/indirector/request_spec.rb +8 -8
  279. data/spec/unit/info_service_spec.rb +236 -0
  280. data/spec/unit/module_tool/metadata_spec.rb +31 -2
  281. data/spec/unit/network/authconfig_spec.rb +62 -32
  282. data/spec/unit/network/authorization_spec.rb +30 -2
  283. data/spec/unit/network/http/connection_spec.rb +14 -19
  284. data/spec/unit/parser/compiler_spec.rb +86 -2
  285. data/spec/unit/parser/functions/create_resources_spec.rb +1 -1
  286. data/spec/unit/parser/resource_spec.rb +2 -20
  287. data/spec/unit/pops/binder/config/binder_config_spec.rb +1 -1
  288. data/spec/unit/pops/binder/injector_spec.rb +3 -3
  289. data/spec/unit/pops/evaluator/access_ops_spec.rb +13 -11
  290. data/spec/unit/pops/evaluator/basic_expressions_spec.rb +1 -2
  291. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +19 -11
  292. data/spec/unit/pops/evaluator/literal_evaluator_spec.rb +43 -0
  293. data/spec/unit/pops/label_provider_spec.rb +5 -1
  294. data/spec/unit/pops/parser/lexer2_spec.rb +33 -7
  295. data/spec/unit/pops/parser/parse_application_spec.rb +40 -0
  296. data/spec/unit/pops/parser/parse_basic_expressions_spec.rb +4 -0
  297. data/spec/unit/pops/parser/parse_capabilities_spec.rb +47 -0
  298. data/spec/unit/pops/parser/parse_site_spec.rb +38 -0
  299. data/spec/unit/pops/parser/parser_rspec_helper.rb +5 -0
  300. data/spec/unit/pops/parser/parser_spec.rb +18 -0
  301. data/spec/unit/pops/types/type_calculator_spec.rb +427 -444
  302. data/spec/unit/pops/types/type_factory_spec.rb +12 -12
  303. data/spec/unit/pops/types/type_parser_spec.rb +7 -12
  304. data/spec/unit/pops/validator/validator_spec.rb +25 -0
  305. data/spec/unit/provider/augeas/augeas_spec.rb +50 -0
  306. data/spec/unit/provider/group/directoryservice_spec.rb +33 -0
  307. data/spec/unit/provider/group/windows_adsi_spec.rb +3 -0
  308. data/spec/unit/provider/package/dnf_spec.rb +92 -0
  309. data/spec/unit/provider/package/gem_spec.rb +7 -0
  310. data/spec/unit/provider/package/rpm_spec.rb +25 -2
  311. data/spec/unit/provider/package/windows/package_spec.rb +41 -0
  312. data/spec/unit/provider/package/yum_spec.rb +21 -13
  313. data/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb +10 -0
  314. data/spec/unit/provider/service/debian_spec.rb +27 -0
  315. data/spec/unit/provider/service/rcng_spec.rb +41 -0
  316. data/spec/unit/provider/service/redhat_spec.rb +8 -1
  317. data/spec/unit/provider/service/smf_spec.rb +30 -5
  318. data/spec/unit/provider/service/src_spec.rb +19 -4
  319. data/spec/unit/provider/service/systemd_spec.rb +78 -29
  320. data/spec/unit/provider/sshkey/parsed_spec.rb +23 -0
  321. data/spec/unit/reports_spec.rb +10 -0
  322. data/spec/unit/resource/capability_finder_spec.rb +56 -0
  323. data/spec/unit/resource/catalog_spec.rb +31 -8
  324. data/spec/unit/resource/type_collection_spec.rb +23 -2
  325. data/spec/unit/resource/type_spec.rb +1 -1
  326. data/spec/unit/resource_spec.rb +22 -4
  327. data/spec/unit/settings_spec.rb +90 -1
  328. data/spec/unit/ssl/certificate_authority/interface_spec.rb +4 -3
  329. data/spec/unit/ssl/oids_spec.rb +8 -0
  330. data/spec/unit/transaction/additional_resource_generator_spec.rb +78 -5
  331. data/spec/unit/transaction/report_spec.rb +24 -1
  332. data/spec/unit/type/package_spec.rb +1 -0
  333. data/spec/unit/type/user_spec.rb +14 -7
  334. data/spec/unit/type_spec.rb +1 -1
  335. metadata +169 -5
  336. data/lib/puppet/pops/evaluator/callable_mismatch_describer.rb +0 -175
  337. data/spec/integration/data_binding.rb +0 -104
@@ -60,7 +60,7 @@ describe 'The type factory' do
60
60
  end
61
61
 
62
62
  it 'tuple() returns PTupleType' do
63
- expect(Puppet::Pops::Types::TypeFactory.tuple().class()).to eq(Puppet::Pops::Types::PTupleType)
63
+ expect(Puppet::Pops::Types::TypeFactory.tuple.class()).to eq(Puppet::Pops::Types::PTupleType)
64
64
  end
65
65
 
66
66
  it 'undef() returns PUndefType' do
@@ -136,7 +136,7 @@ describe 'The type factory' do
136
136
  end
137
137
 
138
138
  it 'array_of(PIntegerType) returns PArrayType[PIntegerType]' do
139
- at = Puppet::Pops::Types::TypeFactory.array_of(Puppet::Pops::Types::PIntegerType.new())
139
+ at = Puppet::Pops::Types::TypeFactory.array_of(Puppet::Pops::Types::PIntegerType::DEFAULT)
140
140
  expect(at.class()).to eq(Puppet::Pops::Types::PArrayType)
141
141
  expect(at.element_type.class).to eq(Puppet::Pops::Types::PIntegerType)
142
142
  end
@@ -162,16 +162,14 @@ describe 'The type factory' do
162
162
  end
163
163
 
164
164
  it 'a size constrained collection can be created from array' do
165
- t = Puppet::Pops::Types::TypeFactory.array_of_data()
166
- expect(Puppet::Pops::Types::TypeFactory.constrain_size(t, 1,2)).to eq(t)
165
+ t = Puppet::Pops::Types::TypeFactory.array_of(Puppet::Pops::Types::TypeFactory.data, Puppet::Pops::Types::TypeFactory.range(1,2))
167
166
  expect(t.size_type.class).to eq(Puppet::Pops::Types::PIntegerType)
168
167
  expect(t.size_type.from).to eq(1)
169
168
  expect(t.size_type.to).to eq(2)
170
169
  end
171
170
 
172
171
  it 'a size constrained collection can be created from hash' do
173
- t = Puppet::Pops::Types::TypeFactory.hash_of_data()
174
- expect(Puppet::Pops::Types::TypeFactory.constrain_size(t, 1,2)).to eq(t)
172
+ t = Puppet::Pops::Types::TypeFactory.hash_of(Puppet::Pops::Types::TypeFactory.scalar, Puppet::Pops::Types::TypeFactory.data, Puppet::Pops::Types::TypeFactory.range(1,2))
175
173
  expect(t.size_type.class).to eq(Puppet::Pops::Types::PIntegerType)
176
174
  expect(t.size_type.from).to eq(1)
177
175
  expect(t.size_type.to).to eq(2)
@@ -252,11 +250,11 @@ describe 'The type factory' do
252
250
  end
253
251
 
254
252
  it 'the with_block methods decorates a Callable with a block_type' do
255
- t = Puppet::Pops::Types::TypeFactory.callable()
256
- t2 = Puppet::Pops::Types::TypeFactory.with_block(t)
253
+ t = Puppet::Pops::Types::TypeFactory.callable
254
+ t2 = Puppet::Pops::Types::TypeFactory.callable(t)
257
255
  block_t = t2.block_type
258
256
  # given t is returned after mutation
259
- expect(t2).to be(t)
257
+ expect(block_t).to be(t)
260
258
  expect(block_t.class).to be(Puppet::Pops::Types::PCallableType)
261
259
  expect(block_t.param_types.class).to be(Puppet::Pops::Types::PTupleType)
262
260
  expect(block_t.param_types.types).to be_empty
@@ -264,13 +262,15 @@ describe 'The type factory' do
264
262
  end
265
263
 
266
264
  it 'the with_optional_block methods decorates a Callable with an optional block_type' do
267
- t = Puppet::Pops::Types::TypeFactory.callable()
268
- t2 = Puppet::Pops::Types::TypeFactory.with_optional_block(t)
265
+ b = Puppet::Pops::Types::TypeFactory.callable
266
+ t = Puppet::Pops::Types::TypeFactory.optional(b)
267
+ t2 = Puppet::Pops::Types::TypeFactory.callable(t)
269
268
  opt_t = t2.block_type
270
269
  expect(opt_t.class).to be(Puppet::Pops::Types::POptionalType)
271
270
  block_t = opt_t.optional_type
272
271
  # given t is returned after mutation
273
- expect(t2).to be(t)
272
+ expect(opt_t).to be(t)
273
+ expect(block_t).to be(b)
274
274
  expect(block_t.class).to be(Puppet::Pops::Types::PCallableType)
275
275
  expect(block_t.param_types.class).to be(Puppet::Pops::Types::PTupleType)
276
276
  expect(block_t.param_types.types).to be_empty
@@ -83,20 +83,16 @@ describe Puppet::Pops::Types::TypeParser do
83
83
  end
84
84
 
85
85
  it "parses a size constrained collection using capped range" do
86
- parameterized_array = types.array_of(types.integer)
87
- types.constrain_size(parameterized_array, 1,2)
88
- parameterized_hash = types.hash_of(types.integer, types.boolean)
89
- types.constrain_size(parameterized_hash, 1,2)
86
+ parameterized_array = types.array_of(types.integer, types.range(1,2))
87
+ parameterized_hash = types.hash_of(types.integer, types.boolean, types.range(1,2))
90
88
 
91
89
  expect(the_type_parsed_from(parameterized_array)).to be_the_type(parameterized_array)
92
90
  expect(the_type_parsed_from(parameterized_hash)).to be_the_type(parameterized_hash)
93
91
  end
94
92
 
95
93
  it "parses a size constrained collection with open range" do
96
- parameterized_array = types.array_of(types.integer)
97
- types.constrain_size(parameterized_array, 1,:default)
98
- parameterized_hash = types.hash_of(types.integer, types.boolean)
99
- types.constrain_size(parameterized_hash, 1,:default)
94
+ parameterized_array = types.array_of(types.integer, types.range(1, :default))
95
+ parameterized_hash = types.hash_of(types.integer, types.boolean, types.range(1, :default))
100
96
 
101
97
  expect(the_type_parsed_from(parameterized_array)).to be_the_type(parameterized_array)
102
98
  expect(the_type_parsed_from(parameterized_hash)).to be_the_type(parameterized_hash)
@@ -108,13 +104,12 @@ describe Puppet::Pops::Types::TypeParser do
108
104
  end
109
105
 
110
106
  it "parses tuple type" do
111
- tuple_t = types.tuple(Integer, String)
107
+ tuple_t = types.tuple([Integer, String])
112
108
  expect(the_type_parsed_from(tuple_t)).to be_the_type(tuple_t)
113
109
  end
114
110
 
115
111
  it "parses tuple type with occurrence constraint" do
116
- tuple_t = types.tuple(Integer, String)
117
- types.constrain_size(tuple_t, 2, 5)
112
+ tuple_t = types.tuple([Integer, String], types.range(2, 5))
118
113
  expect(the_type_parsed_from(tuple_t)).to be_the_type(tuple_t)
119
114
  end
120
115
 
@@ -173,7 +168,7 @@ describe Puppet::Pops::Types::TypeParser do
173
168
  end
174
169
 
175
170
  it 'parses a collection size range' do
176
- expect(parser.parse("Collection[1,2]")).to be_the_type(types.constrain_size(types.collection,1,2))
171
+ expect(parser.parse("Collection[1,2]")).to be_the_type(types.collection(types.range(1,2)))
177
172
  end
178
173
 
179
174
  it 'parses a type type' do
@@ -243,6 +243,31 @@ describe "validating 4x" do
243
243
  end
244
244
  end
245
245
 
246
+ context "capability annotations" do
247
+ before(:each) do
248
+ with_app_management(true)
249
+ end
250
+
251
+ after(:each) do
252
+ with_app_management(false)
253
+ end
254
+
255
+ ['produces', 'consumes'].each do |word|
256
+ it "rejects illegal resource types in #{word} clauses" do
257
+ expect(validate(parse("foo produces Bar {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
258
+ end
259
+
260
+ it "accepts legal resource and capability types in #{word} clauses" do
261
+ expect(validate(parse("Foo produces Bar {}"))).to_not have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
262
+ expect(validate(parse("Mod::Foo produces ::Mod2::Bar {}"))).to_not have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
263
+ end
264
+
265
+ it "rejects illegal capability types in #{word} clauses" do
266
+ expect(validate(parse("Foo produces bar {}"))).to have_issue(Puppet::Pops::Issues::ILLEGAL_CLASSREF)
267
+ end
268
+ end
269
+ end
270
+
246
271
  def parse(source)
247
272
  Puppet::Pops::Parser::Parser.new().parse_string(source)
248
273
  end
@@ -195,6 +195,56 @@ describe provider_class do
195
195
  end
196
196
  end
197
197
 
198
+ describe "values filters" do
199
+ before do
200
+ augeas = stub("augeas", :match => ["set", "of", "values"])
201
+ augeas.stubs(:get).returns('set').then.returns('of').then.returns('values')
202
+ augeas.stubs("close")
203
+ @provider = provider_class.new(@resource)
204
+ @provider.aug = augeas
205
+ end
206
+
207
+ it "should return true for includes match" do
208
+ command = ["values", "fake value", "include values"]
209
+ expect(@provider.process_values(command)).to eq(true)
210
+ end
211
+
212
+ it "should return false for includes non match" do
213
+ command = ["values", "fake value", "include JarJar"]
214
+ expect(@provider.process_values(command)).to eq(false)
215
+ end
216
+
217
+ it "should return true for includes match" do
218
+ command = ["values", "fake value", "not_include JarJar"]
219
+ expect(@provider.process_values(command)).to eq(true)
220
+ end
221
+
222
+ it "should return false for includes non match" do
223
+ command = ["values", "fake value", "not_include values"]
224
+ expect(@provider.process_values(command)).to eq(false)
225
+ end
226
+
227
+ it "should return true for an array match" do
228
+ command = ["values", "fake value", "== ['set', 'of', 'values']"]
229
+ expect(@provider.process_values(command)).to eq(true)
230
+ end
231
+
232
+ it "should return false for an array non match" do
233
+ command = ["values", "fake value", "== ['this', 'should', 'not', 'match']"]
234
+ expect(@provider.process_values(command)).to eq(false)
235
+ end
236
+
237
+ it "should return false for an array match with noteq" do
238
+ command = ["values", "fake value", "!= ['set', 'of', 'values']"]
239
+ expect(@provider.process_values(command)).to eq(false)
240
+ end
241
+
242
+ it "should return true for an array non match with noteq" do
243
+ command = ["values", "fake value", "!= ['this', 'should', 'not', 'match']"]
244
+ expect(@provider.process_values(command)).to eq(true)
245
+ end
246
+ end
247
+
198
248
  describe "match filters" do
199
249
  before do
200
250
  augeas = stub("augeas", :match => ["set", "of", "values"])
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Puppet::Type.type(:group).provider(:directoryservice) do
4
+ let :resource do
5
+ Puppet::Type.type(:group).new(
6
+ :title => 'testgroup',
7
+ :provider => :directoryservice,
8
+ )
9
+ end
10
+
11
+ let(:provider) { resource.provider }
12
+
13
+ it 'should return true for same lists of unordered members' do
14
+ expect(provider.members_insync?(['user1', 'user2'], ['user2', 'user1'])).to be_truthy
15
+ end
16
+
17
+ it 'should return false when the group currently has no members' do
18
+ expect(provider.members_insync?([], ['user2', 'user1'])).to be_falsey
19
+ end
20
+
21
+ it 'should return true for the same lists of members irrespective of duplicates' do
22
+ expect(provider.members_insync?(['user1', 'user2', 'user2'], ['user1', 'user2'])).to be_truthy
23
+ end
24
+
25
+ it "should return true when current and should members are empty lists" do
26
+ expect(provider.members_insync?([], [])).to be_truthy
27
+ end
28
+
29
+ it "should return true when current is :absent and should members is empty list" do
30
+ expect(provider.members_insync?(:absent, [])).to be_truthy
31
+ end
32
+
33
+ end
@@ -162,6 +162,9 @@ describe Puppet::Type.type(:group).provider(:windows_adsi), :if => Puppet.featur
162
162
  it "should return the username when it cannot be resolved to a SID (for the sake of resource_harness error messages)" do
163
163
  expect(provider.members_to_s([invalid_user])).to eq("#{invalid_user}")
164
164
  end
165
+ it "should return the username when it cannot be resolved to a SID (for the sake of resource_harness error messages)" do
166
+ expect(provider.members_to_s([invalid_user])).to eq("#{invalid_user}")
167
+ end
165
168
  end
166
169
  end
167
170
 
@@ -0,0 +1,92 @@
1
+ require 'spec_helper'
2
+
3
+ # Note that much of the functionality of the dnf provider is already tested with yum provider tests,
4
+ # as yum is the parent provider.
5
+
6
+ provider_class = Puppet::Type.type(:package).provider(:dnf)
7
+
8
+ describe provider_class do
9
+ let(:name) { 'mypackage' }
10
+ let(:resource) do
11
+ Puppet::Type.type(:package).new(
12
+ :name => name,
13
+ :ensure => :installed,
14
+ :provider => 'dnf'
15
+ )
16
+ end
17
+
18
+ let(:provider) do
19
+ provider = provider_class.new
20
+ provider.resource = resource
21
+ provider
22
+ end
23
+
24
+ before do
25
+ provider_class.stubs(:command).with(:cmd).returns('/usr/bin/dnf')
26
+ provider.stubs(:rpm).returns 'rpm'
27
+ provider.stubs(:get).with(:version).returns '1'
28
+ provider.stubs(:get).with(:release).returns '1'
29
+ provider.stubs(:get).with(:arch).returns 'i386'
30
+ end
31
+
32
+ describe 'provider features' do
33
+ it { is_expected.to be_versionable }
34
+ it { is_expected.to be_install_options }
35
+ it { is_expected.to be_virtual_packages }
36
+ end
37
+
38
+ # provider should repond to the following methods
39
+ [:install, :latest, :update, :purge, :install_options].each do |method|
40
+ it "should have a(n) #{method}" do
41
+ expect(provider).to respond_to(method)
42
+ end
43
+ end
44
+
45
+ describe 'when installing' do
46
+ before(:each) do
47
+ Puppet::Util.stubs(:which).with("rpm").returns("/bin/rpm")
48
+ provider.stubs(:which).with("rpm").returns("/bin/rpm")
49
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "--version"], {:combine => true, :custom_environment => {}, :failonfail => true}).returns("4.10.1\n").at_most_once
50
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns('22')
51
+ end
52
+
53
+ it 'should call dnf install for :installed' do
54
+ resource.stubs(:should).with(:ensure).returns :installed
55
+ Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-d', '0', '-e', '1', '-y', :install, 'mypackage'])
56
+ provider.install
57
+ end
58
+
59
+ it 'should be able to downgrade' do
60
+ current_version = '1.2'
61
+ version = '1.0'
62
+ resource[:ensure] = '1.0'
63
+ Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-d', '0', '-e', '1', '-y', :downgrade, "#{name}-#{version}"])
64
+ provider.stubs(:query).returns(:ensure => current_version).then.returns(:ensure => version)
65
+ provider.install
66
+ end
67
+
68
+ it 'should accept install options' do
69
+ resource[:ensure] = :installed
70
+ resource[:install_options] = ['-t', {'-x' => 'expackage'}]
71
+
72
+ Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-d', '0', '-e', '1', '-y', ['-t', '-x=expackage'], :install, name])
73
+ provider.install
74
+ end
75
+ end
76
+
77
+ describe 'when uninstalling' do
78
+ it 'should use erase to purge' do
79
+ Puppet::Util::Execution.expects(:execute).with(['/usr/bin/dnf', '-y', :erase, name])
80
+ provider.purge
81
+ end
82
+ end
83
+
84
+ describe "executing yum check-update" do
85
+ it "passes repos to enable to 'yum check-update'" do
86
+ Puppet::Util::Execution.expects(:execute).with do |args, *rest|
87
+ expect(args).to eq %w[/usr/bin/dnf check-update --enablerepo=updates --enablerepo=fedoraplus]
88
+ end.returns(stub(:exitstatus => 0))
89
+ described_class.check_updates(%w[updates fedoraplus], [], [])
90
+ end
91
+ end
92
+ end
@@ -88,6 +88,13 @@ context 'installing myresource' do
88
88
  provider.install
89
89
  end
90
90
  end
91
+ describe "as a windows path on windows", :if => Puppet.features.microsoft_windows? do
92
+ it "should treat the source as a local path" do
93
+ resource[:source] = "c:/this/is/a/path/to/a/gem.gem"
94
+ provider.expects(:execute).with { |args| args[2] == "c:/this/is/a/path/to/a/gem.gem" }.returns ""
95
+ provider.install
96
+ end
97
+ end
91
98
  describe "with an invalid uri" do
92
99
  it "should fail" do
93
100
  URI.expects(:parse).raises(ArgumentError)
@@ -12,6 +12,7 @@ describe provider_class do
12
12
  chkconfig 0 1.3.30.2 2.el5 x86_64
13
13
  myresource 0 1.2.3.4 5.el4 noarch
14
14
  mysummaryless 0 1.2.3.4 5.el4 noarch
15
+ tomcat 1 1.2.3.4 5.fc22 noarch
15
16
  RPM_OUTPUT
16
17
  end
17
18
 
@@ -116,7 +117,18 @@ describe provider_class do
116
117
  :ensure => "1.3.30.2-2.el5",
117
118
  }
118
119
  )
119
- expect(installed_packages.last.properties).to eq(
120
+ expect(installed_packages[3].properties).to eq(
121
+ {
122
+ :provider => :rpm,
123
+ :name => "myresource",
124
+ :epoch => "0",
125
+ :version => "1.2.3.4",
126
+ :release => "5.el4",
127
+ :arch => "noarch",
128
+ :ensure => "1.2.3.4-5.el4",
129
+ }
130
+ )
131
+ expect(installed_packages[4].properties).to eq(
120
132
  {
121
133
  :provider => :rpm,
122
134
  :name => "mysummaryless",
@@ -127,6 +139,17 @@ describe provider_class do
127
139
  :ensure => "1.2.3.4-5.el4",
128
140
  }
129
141
  )
142
+ expect(installed_packages[5].properties).to eq(
143
+ {
144
+ :provider => :rpm,
145
+ :name => "tomcat",
146
+ :epoch => "1",
147
+ :version => "1.2.3.4",
148
+ :release => "5.fc22",
149
+ :arch => "noarch",
150
+ :ensure => "1:1.2.3.4-5.fc22",
151
+ }
152
+ )
130
153
  end
131
154
  end
132
155
 
@@ -269,7 +292,7 @@ describe provider_class do
269
292
  line.gsub(field, delimiter),
270
293
  package_hash.merge(
271
294
  field.to_sym => delimiter,
272
- :ensure => 'version-release'.gsub(field, delimiter)
295
+ :ensure => 'epoch:version-release'.gsub(field, delimiter)
273
296
  )
274
297
  )
275
298
  end
@@ -132,6 +132,47 @@ describe Puppet::Provider::Package::Windows::Package do
132
132
  end
133
133
  end
134
134
 
135
+ context '::get_display_name' do
136
+ it 'should return nil if values is nil' do
137
+ expect(subject.get_display_name(nil)).to be_nil
138
+ end
139
+
140
+ it 'should return empty if values is empty' do
141
+ reg_values = {}
142
+ expect(subject.get_display_name(reg_values)).to eq('')
143
+ end
144
+
145
+ it 'should return DisplayName when available' do
146
+ reg_values = { 'DisplayName' => 'Google' }
147
+ expect(subject.get_display_name(reg_values)).to eq('Google')
148
+ end
149
+
150
+ it 'should return DisplayName when available, even when QuietDisplayName is also available' do
151
+ reg_values = { 'DisplayName' => 'Google', 'QuietDisplayName' => 'Google Quiet' }
152
+ expect(subject.get_display_name(reg_values)).to eq('Google')
153
+ end
154
+
155
+ it 'should return QuietDisplayName when available if DisplayName is empty' do
156
+ reg_values = { 'DisplayName' => '', 'QuietDisplayName' =>'Google Quiet' }
157
+ expect(subject.get_display_name(reg_values)).to eq('Google Quiet')
158
+ end
159
+
160
+ it 'should return QuietDisplayName when DisplayName is not available' do
161
+ reg_values = { 'QuietDisplayName' =>'Google Quiet' }
162
+ expect(subject.get_display_name(reg_values)).to eq('Google Quiet')
163
+ end
164
+
165
+ it 'should return empty when DisplayName is empty and QuietDisplay name is not available' do
166
+ reg_values = { 'DisplayName' => '' }
167
+ expect(subject.get_display_name(reg_values)).to eq('')
168
+ end
169
+
170
+ it 'should return empty when DisplayName is empty and QuietDisplay name is empty' do
171
+ reg_values = { 'DisplayName' => '', 'QuietDisplayName' =>'' }
172
+ expect(subject.get_display_name(reg_values)).to eq('')
173
+ end
174
+ end
175
+
135
176
  it 'should implement instance methods' do
136
177
  pkg = subject.new('orca', '5.0')
137
178