puppet 4.2.3 → 4.3.0

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
@@ -1,5 +1,7 @@
1
1
  #! /usr/bin/env ruby
2
2
  require 'spec_helper'
3
+ require 'puppet/network/http'
4
+ require 'puppet/network/http/api/indirected_routes'
3
5
  require 'puppet/network/authorization'
4
6
 
5
7
  describe Puppet::Network::Authorization do
@@ -9,7 +11,7 @@ describe Puppet::Network::Authorization do
9
11
 
10
12
  subject { AuthTest.new }
11
13
 
12
- describe "when creating an authconfig object" do
14
+ context "when creating an authconfig object" do
13
15
  before :each do
14
16
  # Other tests may have created an authconfig, so we have to undo that.
15
17
  @orig_auth_config = Puppet::Network::AuthConfigLoader.instance_variable_get(:@auth_config)
@@ -26,9 +28,35 @@ describe Puppet::Network::Authorization do
26
28
 
27
29
  it "creates default ACL entries if no file has been read" do
28
30
  Puppet::Network::AuthConfigParser.expects(:new_from_file).raises Errno::ENOENT
29
- Puppet::Network::AuthConfig.any_instance.expects(:insert_default_acl)
31
+ Puppet::Network::DefaultAuthProvider.any_instance.expects(:insert_default_acl)
30
32
 
31
33
  subject.authconfig
32
34
  end
33
35
  end
36
+
37
+ class TestAuthConfig
38
+ def check_authorization(method, path, params); end
39
+ end
40
+
41
+ class TestAuthConfigLoader
42
+ def self.authconfig
43
+ TestAuthConfig.new
44
+ end
45
+ end
46
+
47
+ context "when checking authorization" do
48
+ after :each do
49
+ Puppet::Network::Authorization.authconfigloader_class = nil
50
+ end
51
+
52
+ it "delegates to the authconfig object" do
53
+ Puppet::Network::Authorization.authconfigloader_class =
54
+ TestAuthConfigLoader
55
+ TestAuthConfig.any_instance.expects(:check_authorization).with(
56
+ :save, '/mypath', {:param1 => "value1"}).returns("yay, it worked!")
57
+ expect(subject.check_authorization(
58
+ :save, '/mypath',
59
+ {:param1 => "value1"})).to eq("yay, it worked!")
60
+ end
61
+ end
34
62
  end
@@ -42,31 +42,18 @@ describe Puppet::Network::HTTP::Connection do
42
42
  end
43
43
  end
44
44
 
45
- context "when methods that accept a block are called with a block" do
46
- let (:host) { "my_server" }
45
+ context "when handling requests", :vcr do
46
+ let (:host) { "my-server" }
47
47
  let (:port) { 8140 }
48
48
  let (:subject) { Puppet::Network::HTTP::Connection.new(host, port, :use_ssl => false, :verify => Puppet::SSL::Validator.no_validator) }
49
49
 
50
- before :each do
51
- httpok.stubs(:body).returns ""
52
-
53
- # This stubbing relies a bit more on knowledge of the internals of Net::HTTP
54
- # than I would prefer, but it works on ruby 1.8.7 and 1.9.3, and it seems
55
- # valuable enough to have tests for blocks that this is probably warranted.
56
- socket = stub_everything("socket")
57
- TCPSocket.stubs(:open).returns(socket)
58
-
59
- Net::HTTP::Post.any_instance.stubs(:exec).returns("")
60
- Net::HTTP::Head.any_instance.stubs(:exec).returns("")
61
- Net::HTTP::Get.any_instance.stubs(:exec).returns("")
62
- Net::HTTPResponse.stubs(:read_new).returns(httpok)
63
- end
64
-
65
- [:request_get, :request_head, :request_post].each do |method|
50
+ { :request_get => {},
51
+ :request_head => {},
52
+ :request_post => "param: value" }.each do |method,body|
66
53
  context "##{method}" do
67
54
  it "should yield to the block" do
68
55
  block_executed = false
69
- subject.send(method, "/foo", {}) do |response|
56
+ subject.send(method, "/foo", body) do |response|
70
57
  block_executed = true
71
58
  end
72
59
  expect(block_executed).to eq(true)
@@ -118,6 +105,14 @@ describe Puppet::Network::HTTP::Connection do
118
105
  let (:host) { "my_server" }
119
106
  let (:port) { 8140 }
120
107
 
108
+ before :all do
109
+ WebMock.disable!
110
+ end
111
+
112
+ after :all do
113
+ WebMock.enable!
114
+ end
115
+
121
116
  it "should provide a useful error message when one is available and certificate validation fails", :unless => Puppet.features.microsoft_windows? do
122
117
  connection = Puppet::Network::HTTP::Connection.new(
123
118
  host, port,
@@ -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
@@ -112,6 +116,7 @@ describe Puppet::Parser::Compiler do
112
116
  it "should set its node attribute" do
113
117
  expect(@compiler.node).to equal(@node)
114
118
  end
119
+
115
120
  it "should detect when ast nodes are absent" do
116
121
  expect(@compiler.ast_nodes?).to be_falsey
117
122
  end
@@ -141,11 +146,90 @@ describe Puppet::Parser::Compiler do
141
146
  expect(compiler.classlist).to match_array(['foo', 'bar'])
142
147
  end
143
148
 
149
+ it "should return a catalog with the specified code_id" do
150
+ node = Puppet::Node.new("mynode")
151
+ code_id = 'b59e5df0578ef411f773ee6c33d8073c50e7b8fe'
152
+ compiler = Puppet::Parser::Compiler.new(node, :code_id => code_id)
153
+
154
+ expect(compiler.catalog.code_id).to eq(code_id)
155
+ end
156
+
144
157
  it "should add a 'main' stage to the catalog" do
145
158
  expect(@compiler.catalog.resource(:stage, :main)).to be_instance_of(Puppet::Parser::Resource)
146
159
  end
147
160
  end
148
161
 
162
+ describe "sanitize_node" do
163
+ it "should delete trusted from parameters" do
164
+ node = Puppet::Node.new("mynode")
165
+ node.parameters['trusted'] = { :a => 42 }
166
+ node.parameters['preserve_me'] = 'other stuff'
167
+ compiler = Puppet::Parser::Compiler.new(node)
168
+ sanitized = compiler.node
169
+ expect(sanitized.parameters['trusted']).to eq(nil)
170
+ expect(sanitized.parameters['preserve_me']).to eq('other stuff')
171
+ end
172
+
173
+ it "should not report trusted_data if trusted is false" do
174
+ node = Puppet::Node.new("mynode")
175
+ node.parameters['trusted'] = false
176
+ compiler = Puppet::Parser::Compiler.new(node)
177
+ sanitized = compiler.node
178
+ expect(sanitized.trusted_data).to_not eq(false)
179
+ end
180
+
181
+ it "should not report trusted_data if trusted is not a hash" do
182
+ node = Puppet::Node.new("mynode")
183
+ node.parameters['trusted'] = 'not a hash'
184
+ compiler = Puppet::Parser::Compiler.new(node)
185
+ sanitized = compiler.node
186
+ expect(sanitized.trusted_data).to_not eq('not a hash')
187
+ end
188
+
189
+ it "should not report trusted_data if trusted hash doesn't include known keys" do
190
+ node = Puppet::Node.new("mynode")
191
+ node.parameters['trusted'] = { :a => 42 }
192
+ compiler = Puppet::Parser::Compiler.new(node)
193
+ sanitized = compiler.node
194
+ expect(sanitized.trusted_data).to_not eq({ :a => 42 })
195
+ end
196
+
197
+ it "should report 'trusted' parameters as trusted_data but as inauthentic if running as non-root" do
198
+ node = Puppet::Node.new("mynode")
199
+ node.parameters['trusted'] = { 'authenticated' => true,
200
+ 'certname' => 'foo',
201
+ 'extensions' => 'things' }
202
+
203
+ Puppet.features.stubs(:root?).returns(false)
204
+
205
+ Puppet.ignore(:trusted_information)
206
+ compiler = Puppet::Parser::Compiler.new(node)
207
+ Puppet.restore(:trusted_information)
208
+
209
+ sanitized = compiler.node
210
+ expect(sanitized.trusted_data).to eq({ 'authenticated' => false,
211
+ 'certname' => 'foo',
212
+ 'extensions' => 'things' })
213
+ end
214
+
215
+ it "should prefer trusted_data in the node above other plausible sources" do
216
+ node = Puppet::Node.new("mynode")
217
+ node.trusted_data = { 'authenticated' => true,
218
+ 'certname' => 'the real deal',
219
+ 'extensions' => 'things' }
220
+
221
+ node.parameters['trusted'] = { 'authenticated' => true,
222
+ 'certname' => 'not me',
223
+ 'extensions' => 'things' }
224
+
225
+ compiler = Puppet::Parser::Compiler.new(node)
226
+ sanitized = compiler.node
227
+ expect(sanitized.trusted_data).to eq({ 'authenticated' => true,
228
+ 'certname' => 'the real deal',
229
+ 'extensions' => 'things' })
230
+ end
231
+ end
232
+
149
233
  describe "when managing scopes" do
150
234
 
151
235
  it "should create a top scope" do
@@ -629,7 +713,7 @@ describe Puppet::Parser::Compiler do
629
713
  @node.classes = klass
630
714
  klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {'a' => nil, 'b' => nil})
631
715
  @compiler.topscope.known_resource_types.add klass
632
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Must pass b to Class[Foo]")
716
+ expect { @compiler.compile }.to raise_error(Puppet::PreformattedError, /Class\[Foo\]: expects a value for parameter 'b'/)
633
717
  end
634
718
 
635
719
  it "should fail if invalid parameters are passed" do
@@ -637,7 +721,7 @@ describe Puppet::Parser::Compiler do
637
721
  @node.classes = klass
638
722
  klass = Puppet::Resource::Type.new(:hostclass, 'foo', :arguments => {})
639
723
  @compiler.topscope.known_resource_types.add klass
640
- expect { @compiler.compile }.to raise_error(Puppet::ParseError, "Invalid parameter: '3' on Class[Foo]")
724
+ expect { @compiler.compile }.to raise_error(Puppet::PreformattedError, /Class\[Foo\]: has no parameter named '3'/)
641
725
  end
642
726
 
643
727
  it "should ensure class is in catalog without params" do
@@ -103,7 +103,7 @@ describe 'function for dynamically creating resources' do
103
103
 
104
104
  create_resources('foocreateresource', {'blah'=>{}})
105
105
  MANIFEST
106
- }.to raise_error(Puppet::Error, 'Must pass one to Foocreateresource[blah] on node foonode')
106
+ }.to raise_error(Puppet::Error, /Foocreateresource\[blah\]: expects a value for parameter 'one' on node foonode/)
107
107
  end
108
108
 
109
109
  it 'should be able to add multiple defines' do
@@ -105,9 +105,9 @@ describe Puppet::Parser::Resource do
105
105
  @arguments = {:scope => @scope}
106
106
  end
107
107
 
108
- it "should fail unless #{name.to_s} is specified" do
108
+ it "should fail unless hash is specified" do
109
109
  expect {
110
- Puppet::Parser::Resource.new('file', '/my/file')
110
+ Puppet::Parser::Resource.new('file', '/my/file', nil)
111
111
  }.to raise_error(ArgumentError, /Resources require a hash as last argument/)
112
112
  end
113
113
 
@@ -531,24 +531,6 @@ describe Puppet::Parser::Resource do
531
531
  end
532
532
  end
533
533
 
534
- describe "when validating" do
535
- it "should check each parameter" do
536
- resource = Puppet::Parser::Resource.new :foo, "bar", :scope => @scope, :source => stub("source")
537
- resource[:one] = :two
538
- resource[:three] = :four
539
- resource.expects(:validate_parameter).with(:one)
540
- resource.expects(:validate_parameter).with(:three)
541
- resource.send(:validate)
542
- end
543
-
544
- it "should raise a parse error when there's a failure" do
545
- resource = Puppet::Parser::Resource.new :foo, "bar", :scope => @scope, :source => stub("source")
546
- resource[:one] = :two
547
- resource.expects(:validate_parameter).with(:one).raises ArgumentError
548
- expect { resource.send(:validate) }.to raise_error(Puppet::ParseError)
549
- end
550
- end
551
-
552
534
  describe "when setting parameters" do
553
535
  before do
554
536
  @source = newclass "foobar"
@@ -16,7 +16,7 @@ describe 'BinderConfig' do
16
16
  expect(config.layering_config[0]['name']).to be == 'site'
17
17
  expect(config.layering_config[0]['include']).to be == ['confdir:/default?optional']
18
18
  expect(config.layering_config[1]['name']).to be == 'modules'
19
- expect(config.layering_config[1]['include']).to be == ['module:/*::default']
19
+ expect(config.layering_config[1]['include']).to be == ['module:/*::default', 'module:/*::metadata']
20
20
  end
21
21
 
22
22
  it 'should load binder_config.yaml if it exists in confdir)' do
@@ -594,11 +594,11 @@ describe 'Injector' do
594
594
  it "should fail attempts to append, perform uniq or flatten on type incompatible multibind hash" do
595
595
  hash_of_integer = type_factory.hash_of(type_factory.integer())
596
596
  ids = ["ducks1", "ducks2", "ducks3"]
597
- mb = bindings.multibind(ids[0]).type(hash_of_integer.copy).name('broken_family0')
597
+ mb = bindings.multibind(ids[0]).type(hash_of_integer).name('broken_family0')
598
598
  mb.producer_options(:conflict_resolution => :append)
599
- mb = bindings.multibind(ids[1]).type(hash_of_integer.copy).name('broken_family1')
599
+ mb = bindings.multibind(ids[1]).type(hash_of_integer).name('broken_family1')
600
600
  mb.producer_options(:flatten => :true)
601
- mb = bindings.multibind(ids[2]).type(hash_of_integer.copy).name('broken_family2')
601
+ mb = bindings.multibind(ids[2]).type(hash_of_integer).name('broken_family2')
602
602
  mb.producer_options(:uniq => :true)
603
603
 
604
604
  injector = injector(binder.new(factory.layered_bindings(test_layer_with_bindings(bindings.model))))
@@ -208,13 +208,11 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
208
208
 
209
209
  it 'produces a size constrained Array when the last two arguments specify this' do
210
210
  expr = fqr('Array')[fqr('String'), 1]
211
- expected_t = types.array_of(String)
212
- types.constrain_size(expected_t, 1, :default)
211
+ expected_t = types.array_of(String, types.range(1, :default))
213
212
  expect(evaluate(expr)).to be_the_type(expected_t)
214
213
 
215
214
  expr = fqr('Array')[fqr('String'), 1, 2]
216
- expected_t = types.array_of(String)
217
- types.constrain_size(expected_t, 1, 2)
215
+ expected_t = types.array_of(String, types.range(1, 2))
218
216
  expect(evaluate(expr)).to be_the_type(expected_t)
219
217
  end
220
218
 
@@ -227,11 +225,11 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
227
225
  #
228
226
  it 'produces a Tuple[String] from the expression Tuple[String]' do
229
227
  expr = fqr('Tuple')[fqr('String')]
230
- expect(evaluate(expr)).to be_the_type(types.tuple(String))
228
+ expect(evaluate(expr)).to be_the_type(types.tuple([String]))
231
229
 
232
230
  # arguments are flattened
233
231
  expr = fqr('Tuple')[[fqr('String')]]
234
- expect(evaluate(expr)).to be_the_type(types.tuple(String))
232
+ expect(evaluate(expr)).to be_the_type(types.tuple([String]))
235
233
  end
236
234
 
237
235
  it "Tuple parameterization gives an error if parameter is not a type" do
@@ -241,13 +239,11 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
241
239
 
242
240
  it 'produces a varargs Tuple when the last two arguments specify size constraint' do
243
241
  expr = fqr('Tuple')[fqr('String'), 1]
244
- expected_t = types.tuple(String)
245
- types.constrain_size(expected_t, 1, :default)
242
+ expected_t = types.tuple([String], types.range(1, :default))
246
243
  expect(evaluate(expr)).to be_the_type(expected_t)
247
244
 
248
245
  expr = fqr('Tuple')[fqr('String'), 1, 2]
249
- expected_t = types.tuple(String)
250
- types.constrain_size(expected_t, 1, 2)
246
+ expected_t = types.tuple([String], types.range(1, 2))
251
247
  expect(evaluate(expr)).to be_the_type(expected_t)
252
248
  end
253
249
 
@@ -416,7 +412,13 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
416
412
  it 'produces a NotUndef instance with String type when given a literal String' do
417
413
  type_expr = fqr('NotUndef')[literal('hey')]
418
414
  tf = Puppet::Pops::Types::TypeFactory
419
- expect(evaluate(type_expr)).to eql(tf.not_undef(tf.string('hey')))
415
+ expect(evaluate(type_expr)).to be_the_type(tf.not_undef(tf.string(nil, 'hey')))
416
+ end
417
+
418
+ it 'Produces Optional instance with String type when using a String argument' do
419
+ type_expr = fqr('Optional')[literal('hey')]
420
+ tf = Puppet::Pops::Types::TypeFactory
421
+ expect(evaluate(type_expr)).to be_the_type(tf.optional(tf.string(nil, 'hey')))
420
422
  end
421
423
 
422
424
  # Type Type
@@ -31,8 +31,7 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
31
31
  end
32
32
 
33
33
  it 'should evaluator types to types' do
34
- array_type = Puppet::Pops::Types::PArrayType.new()
35
- array_type.element_type = Puppet::Pops::Types::PDataType.new()
34
+ array_type = Puppet::Pops::Types::PArrayType::DATA
36
35
  expect(evaluate(fqr('Array'))).to eq(array_type)
37
36
  end
38
37
  end
@@ -685,23 +685,23 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
685
685
  # Type operations (full set tested by tests covering type calculator)
686
686
  {
687
687
  "Array[Integer]" => types.array_of(types.integer),
688
- "Array[Integer,1]" => types.constrain_size(types.array_of(types.integer),1, :default),
689
- "Array[Integer,1,2]" => types.constrain_size(types.array_of(types.integer),1, 2),
690
- "Array[Integer,Integer[1,2]]" => types.constrain_size(types.array_of(types.integer),1, 2),
691
- "Array[Integer,Integer[1]]" => types.constrain_size(types.array_of(types.integer),1, :default),
688
+ "Array[Integer,1]" => types.array_of(types.integer, types.range(1, :default)),
689
+ "Array[Integer,1,2]" => types.array_of(types.integer, types.range(1, 2)),
690
+ "Array[Integer,Integer[1,2]]" => types.array_of(types.integer, types.range(1, 2)),
691
+ "Array[Integer,Integer[1]]" => types.array_of(types.integer, types.range(1, :default)),
692
692
  "Hash[Integer,Integer]" => types.hash_of(types.integer, types.integer),
693
- "Hash[Integer,Integer,1]" => types.constrain_size(types.hash_of(types.integer, types.integer),1, :default),
694
- "Hash[Integer,Integer,1,2]" => types.constrain_size(types.hash_of(types.integer, types.integer),1, 2),
695
- "Hash[Integer,Integer,Integer[1,2]]" => types.constrain_size(types.hash_of(types.integer, types.integer),1, 2),
696
- "Hash[Integer,Integer,Integer[1]]" => types.constrain_size(types.hash_of(types.integer, types.integer),1, :default),
693
+ "Hash[Integer,Integer,1]" => types.hash_of(types.integer, types.integer, types.range(1, :default)),
694
+ "Hash[Integer,Integer,1,2]" => types.hash_of(types.integer, types.integer, types.range(1, 2)),
695
+ "Hash[Integer,Integer,Integer[1,2]]" => types.hash_of(types.integer, types.integer, types.range(1, 2)),
696
+ "Hash[Integer,Integer,Integer[1]]" => types.hash_of(types.integer, types.integer, types.range(1, :default)),
697
697
  "Resource[File]" => types.resource('File'),
698
698
  "Resource['File']" => types.resource(types.resource('File')),
699
699
  "File[foo]" => types.resource('file', 'foo'),
700
700
  "File[foo, bar]" => [types.resource('file', 'foo'), types.resource('file', 'bar')],
701
701
  "Pattern[a, /b/, Pattern[c], Regexp[d]]" => types.pattern('a', 'b', 'c', 'd'),
702
- "String[1,2]" => types.constrain_size(types.string,1, 2),
703
- "String[Integer[1,2]]" => types.constrain_size(types.string,1, 2),
704
- "String[Integer[1]]" => types.constrain_size(types.string,1, :default),
702
+ "String[1,2]" => types.string(types.range(1, 2)),
703
+ "String[Integer[1,2]]" => types.string(types.range(1, 2)),
704
+ "String[Integer[1]]" => types.string(types.range(1, :default)),
705
705
  }.each do |source, result|
706
706
  it "should parse and evaluate the expression '#{source}' to #{result}" do
707
707
  expect(parser.evaluate_string(scope, source, __FILE__)).to eq(result)
@@ -1195,6 +1195,14 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl' do
1195
1195
  expect(scope.compiler).to have_relationship(['File', 'b', '->', 'File', 'y'])
1196
1196
  end
1197
1197
 
1198
+ it 'should form a relation with 3.x resource -> resource' do
1199
+ # Create a 3.x resource since this is the value given as arguments to defined type
1200
+ scope['a_3x_resource']= Puppet::Parser::Resource.new('notify', 'a', {:scope => scope, :file => __FILE__, :line => 1})
1201
+ source = "$a_3x_resource -> notify{b:}"
1202
+ parser.evaluate_string(scope, source, __FILE__)
1203
+ expect(scope.compiler).to have_relationship(['Notify', 'a', '->', 'Notify', 'b'])
1204
+ end
1205
+
1198
1206
  it 'should tolerate (eliminate) duplicates in operands' do
1199
1207
  source = "[File[a], File[a]] -> File[x]"
1200
1208
  parser.evaluate_string(scope, source, __FILE__)
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ require 'puppet/pops'
4
+ require 'puppet/pops/evaluator/literal_evaluator'
5
+
6
+ describe "Puppet::Pops::Evaluator::LiteralEvaluator" do
7
+ let(:parser) { Puppet::Pops::Parser::EvaluatingParser.new }
8
+ let(:leval) { Puppet::Pops::Evaluator::LiteralEvaluator.new }
9
+
10
+ { "1" => 1,
11
+ "3.14" => 3.14,
12
+ "true" => true,
13
+ "false" => false,
14
+ "'1'" => '1',
15
+ "'a'" => 'a',
16
+ '"a"' => 'a',
17
+ 'a' => 'a',
18
+ 'a::b' => 'a::b',
19
+
20
+ # special values
21
+ 'default' => :default,
22
+ '/.*/' => /.*/,
23
+
24
+ # collections
25
+ '[1,2,3]' => [1,2,3],
26
+ '{a=>1,b=>2}' => {'a' => 1, 'b' => 2},
27
+
28
+ }.each do |source, result|
29
+ it "evaluates '#{source}' to #{result}" do
30
+ expect(leval.literal(parser.parse_string(source))).to eq(result)
31
+ end
32
+ end
33
+
34
+ it "evaluates undef to nil" do
35
+ expect(leval.literal(parser.parse_string('undef'))).to be_nil
36
+ end
37
+
38
+ ['1+1', 'File', '[1,2, 1+2]', '{a=>1+1}', 'Integer[1]', '"x$y"', '"x${y}z"'].each do |source|
39
+ it "throws :not_literal for non literal expression '#{source}'" do
40
+ expect{leval.literal(parser.parse_string('1+1'))}.to throw_symbol(:not_literal)
41
+ end
42
+ end
43
+ end