puppet 4.8.2-universal-darwin → 4.9.0-universal-darwin

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 (348) hide show
  1. checksums.yaml +15 -0
  2. data/CONTRIBUTING.md +25 -1
  3. data/Gemfile +6 -0
  4. data/Rakefile +1 -0
  5. data/ext/project_data.yaml +5 -1
  6. data/ext/windows/service/daemon.rb +2 -1
  7. data/install.rb +43 -6
  8. data/lib/hiera/puppet_function.rb +15 -17
  9. data/lib/hiera/scope.rb +12 -14
  10. data/lib/puppet/application/face_base.rb +4 -0
  11. data/lib/puppet/application/lookup.rb +4 -2
  12. data/lib/puppet/application/resource.rb +1 -1
  13. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  14. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  15. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  16. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  17. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  18. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  20. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  22. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  23. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  24. data/lib/puppet/data_providers.rb +6 -3
  25. data/lib/puppet/defaults.rb +25 -4
  26. data/lib/puppet/face/ca.rb +2 -0
  27. data/lib/puppet/face/certificate_request.rb +2 -0
  28. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  29. data/lib/puppet/face/file.rb +3 -0
  30. data/lib/puppet/face/help/face.erb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/key.rb +1 -0
  33. data/lib/puppet/face/man.rb +4 -2
  34. data/lib/puppet/face/module/generate.rb +1 -1
  35. data/lib/puppet/face/status.rb +2 -0
  36. data/lib/puppet/feature/base.rb +9 -2
  37. data/lib/puppet/feature/hocon.rb +3 -0
  38. data/lib/puppet/file_system/windows.rb +8 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/forge/repository.rb +1 -2
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/functions/binary_file.rb +4 -10
  43. data/lib/puppet/functions/hiera_array.rb +1 -1
  44. data/lib/puppet/functions/hiera_include.rb +1 -1
  45. data/lib/puppet/functions/hocon_data.rb +24 -0
  46. data/lib/puppet/functions/json_data.rb +18 -0
  47. data/lib/puppet/functions/yaml_data.rb +21 -0
  48. data/lib/puppet/generate/type.rb +1 -1
  49. data/lib/puppet/graph/simple_graph.rb +4 -2
  50. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  51. data/lib/puppet/indirector/request.rb +5 -1
  52. data/lib/puppet/interface/face_collection.rb +1 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/module.rb +14 -2
  55. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  56. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  57. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  58. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  59. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  60. data/lib/puppet/module_tool/metadata.rb +1 -1
  61. data/lib/puppet/module_tool.rb +4 -4
  62. data/lib/puppet/network/http/connection.rb +2 -0
  63. data/lib/puppet/network/http/webrick.rb +2 -1
  64. data/lib/puppet/parser/functions/hiera.rb +14 -0
  65. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  68. data/lib/puppet/parser/scope.rb +14 -20
  69. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  70. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  71. data/lib/puppet/plugins/data_providers.rb +2 -0
  72. data/lib/puppet/pops/adaptable.rb +0 -3
  73. data/lib/puppet/pops/binder/producers.rb +3 -3
  74. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  75. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  76. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  78. data/lib/puppet/pops/issues.rb +4 -0
  79. data/lib/puppet/pops/label_provider.rb +14 -0
  80. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  81. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  82. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  83. data/lib/puppet/pops/loaders.rb +31 -12
  84. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  85. data/lib/puppet/pops/lookup/context.rb +121 -71
  86. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  87. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  88. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  89. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  90. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  91. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  92. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  93. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  94. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  95. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  96. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  97. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  98. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  99. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  100. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  101. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  102. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  103. data/lib/puppet/pops/lookup.rb +4 -3
  104. data/lib/puppet/pops/merge_strategy.rb +120 -39
  105. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  106. data/lib/puppet/pops/parser/eparser.rb +816 -808
  107. data/lib/puppet/pops/parser/locator.rb +3 -3
  108. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  109. data/lib/puppet/pops/pcore.rb +21 -12
  110. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  111. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  112. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  113. data/lib/puppet/pops/serialization/extension.rb +37 -8
  114. data/lib/puppet/pops/serialization/object.rb +14 -6
  115. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  116. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  117. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  118. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  119. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  120. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  121. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  122. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  123. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  124. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  125. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  126. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  127. data/lib/puppet/pops/types/type_factory.rb +20 -9
  128. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  129. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  130. data/lib/puppet/pops/types/type_parser.rb +6 -0
  131. data/lib/puppet/pops/types/types.rb +225 -132
  132. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  133. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/visitor.rb +4 -3
  136. data/lib/puppet/pops.rb +6 -9
  137. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  138. data/lib/puppet/provider/nameservice.rb +15 -0
  139. data/lib/puppet/provider/package/appdmg.rb +1 -1
  140. data/lib/puppet/provider/package/dnf.rb +1 -1
  141. data/lib/puppet/provider/package/pkg.rb +1 -1
  142. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgng.rb +1 -1
  144. data/lib/puppet/provider/package/rpm.rb +2 -2
  145. data/lib/puppet/provider/service/smf.rb +3 -3
  146. data/lib/puppet/provider/service/systemd.rb +5 -1
  147. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  148. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  149. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  150. data/lib/puppet/provider/zone/solaris.rb +4 -1
  151. data/lib/puppet/reference/indirection.rb +1 -1
  152. data/lib/puppet/resource/catalog.rb +12 -4
  153. data/lib/puppet/resource/type.rb +3 -3
  154. data/lib/puppet/resource.rb +2 -3
  155. data/lib/puppet/settings/config_file.rb +2 -1
  156. data/lib/puppet/settings/directory_setting.rb +6 -0
  157. data/lib/puppet/settings/environment_conf.rb +6 -2
  158. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  159. data/lib/puppet/settings/file_setting.rb +10 -0
  160. data/lib/puppet/settings.rb +1 -1
  161. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  162. data/lib/puppet/ssl/host.rb +23 -1
  163. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  164. data/lib/puppet/type/user.rb +16 -3
  165. data/lib/puppet/util/execution.rb +3 -3
  166. data/lib/puppet/util/filetype.rb +11 -5
  167. data/lib/puppet/util/logging.rb +2 -1
  168. data/lib/puppet/util/network_device/config.rb +1 -1
  169. data/lib/puppet/util/plist.rb +6 -0
  170. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  171. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  172. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  173. data/lib/puppet/util/windows/adsi.rb +15 -12
  174. data/lib/puppet/util.rb +1 -0
  175. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  176. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  177. data/lib/puppet/vendor/require_vendored.rb +0 -1
  178. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  179. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  180. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  183. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  184. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  185. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  186. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  187. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  188. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  189. data/lib/puppet/version.rb +1 -1
  190. data/lib/puppet.rb +52 -0
  191. data/lib/semver.rb +19 -12
  192. data/locales/config.yaml +29 -0
  193. data/locales/puppet.pot +79 -0
  194. data/man/man5/puppet.conf.5 +1 -1
  195. data/spec/fixtures/unit/application/environments/puppet_func_provider/functions/{data.pp → environment/data.pp} +0 -0
  196. data/spec/fixtures/unit/data_providers/environments/hiera_misc/data/common.yaml +2 -0
  197. data/spec/fixtures/unit/data_providers/environments/hiera_modules/modules/two/data/common.yaml +1 -1
  198. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/hiera.yaml +5 -0
  199. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet/bindings/backend/default.rb +9 -0
  200. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/lib/puppet_x/backend/special_data_provider_factory.rb +23 -0
  201. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/manifests/init.pp +5 -0
  202. data/spec/fixtures/unit/data_providers/environments/sample/modules/backend/metadata.json +9 -0
  203. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/lib/puppet_x/helindbe/sample_env_data.rb +1 -0
  204. data/spec/fixtures/unit/data_providers/environments/sample/modules/dataprovider/manifests/init.pp +1 -1
  205. data/spec/fixtures/unit/functions/lookup/data/common.yaml +19 -0
  206. data/spec/fixtures/unit/functions/lookup_fixture/data/common.yaml +19 -0
  207. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/environment.conf +0 -0
  208. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/lib/puppet/functions/environment/data.rb +0 -0
  209. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/bindings/abc/default.rb +0 -0
  210. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/lib/puppet/functions/abc/data.rb +0 -0
  211. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/abc/manifests/init.pp +0 -0
  212. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/bindings/bad_data/default.rb +0 -0
  213. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/lib/puppet/functions/bad_data/data.rb +0 -0
  214. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bad_data/manifests/init.pp +0 -0
  215. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/bindings/bca/default.rb +0 -0
  216. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/lib/puppet/functions/bca/data.rb +0 -0
  217. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/bca/manifests/init.pp +0 -0
  218. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/data/empty.json +0 -0
  219. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/hiera.yaml +0 -0
  220. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/manifests/init.pp +0 -0
  221. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_json/metadata.json +0 -0
  222. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/data/empty_key.json +0 -0
  223. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/hiera.yaml +0 -0
  224. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/manifests/init.pp +0 -0
  225. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_json/metadata.json +0 -0
  226. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/data/empty_key.yaml +0 -0
  227. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/hiera.yaml +0 -0
  228. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/manifests/init.pp +0 -0
  229. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_key_yaml/metadata.json +0 -0
  230. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/data/empty.yaml +0 -0
  231. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/hiera.yaml +0 -0
  232. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/manifests/init.pp +0 -0
  233. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/empty_yaml/metadata.json +0 -0
  234. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/data/first.json +0 -0
  235. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/hiera.yaml +0 -0
  236. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/manifests/init.pp +0 -0
  237. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/hieraprovider/metadata.json +0 -0
  238. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/lib/puppet/functions/meta/data.rb +0 -0
  239. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/manifests/init.pp +0 -0
  240. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/meta/metadata.json +0 -0
  241. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet/bindings/metawcp/default.rb +0 -0
  242. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/lib/puppet_x/thallgren/sample_module_data.rb +0 -0
  243. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/manifests/init.pp +0 -0
  244. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/metawcp/metadata.json +0 -0
  245. data/spec/fixtures/unit/functions/{lookup → lookup_fixture}/environments/production/modules/no_provider/manifests/init.pp +0 -0
  246. data/spec/integration/application/apply_spec.rb +88 -2
  247. data/spec/integration/application/lookup_spec.rb +155 -0
  248. data/spec/integration/data_binding_spec.rb +5 -5
  249. data/spec/integration/defaults_spec.rb +13 -0
  250. data/spec/integration/environments/default_manifest_spec.rb +16 -16
  251. data/spec/integration/environments/setting_hooks_spec.rb +1 -1
  252. data/spec/integration/test/test_helper_spec.rb +6 -2
  253. data/spec/integration/transaction_spec.rb +74 -0
  254. data/spec/integration/util/execution_spec.rb +8 -0
  255. data/spec/lib/puppet_spec/module_tool/shared_functions.rb +2 -2
  256. data/spec/lib/puppet_spec/module_tool/stub_source.rb +1 -1
  257. data/spec/lib/puppet_spec/unindent.rb +2 -2
  258. data/spec/unit/application/face_base_spec.rb +16 -0
  259. data/spec/unit/application/lookup_spec.rb +262 -227
  260. data/spec/unit/data_providers/{sample_data_provider_spec.rb → custom_data_provider_spec.rb} +14 -16
  261. data/spec/unit/data_providers/function_data_provider_spec.rb +2 -2
  262. data/spec/unit/data_providers/hiera_data_provider_spec.rb +60 -97
  263. data/spec/unit/defaults_spec.rb +1 -1
  264. data/spec/unit/face/ca_spec.rb +10 -0
  265. data/spec/unit/face/certificate_request_spec.rb +10 -0
  266. data/spec/unit/face/certificate_revocation_list_spec.rb +10 -0
  267. data/spec/unit/face/file_spec.rb +4 -0
  268. data/spec/unit/face/help_spec.rb +17 -0
  269. data/spec/unit/face/key_spec.rb +10 -0
  270. data/spec/unit/face/status_spec.rb +10 -0
  271. data/spec/unit/file_system_spec.rb +143 -6
  272. data/spec/unit/functions/binary_file_spec.rb +1 -1
  273. data/spec/unit/functions/hiera_spec.rb +257 -47
  274. data/spec/unit/functions/lookup_fixture_spec.rb +693 -0
  275. data/spec/unit/functions/lookup_spec.rb +1319 -608
  276. data/spec/unit/functions/new_spec.rb +3 -3
  277. data/spec/unit/graph/rb_tree_map_spec.rb +1 -1
  278. data/spec/unit/graph/simple_graph_spec.rb +1 -1
  279. data/spec/unit/hiera/scope_spec.rb +4 -4
  280. data/spec/unit/indirector/request_spec.rb +9 -0
  281. data/spec/unit/interface_spec.rb +27 -0
  282. data/spec/unit/man_spec.rb +1 -1
  283. data/spec/unit/module_spec.rb +1 -1
  284. data/spec/unit/module_tool/applications/builder_spec.rb +16 -1
  285. data/spec/unit/module_tool/applications/installer_spec.rb +1 -1
  286. data/spec/unit/module_tool/applications/upgrader_spec.rb +1 -1
  287. data/spec/unit/module_tool/installed_modules_spec.rb +6 -6
  288. data/spec/unit/module_tool_spec.rb +3 -3
  289. data/spec/unit/network/http/connection_spec.rb +10 -0
  290. data/spec/unit/network/http/webrick_spec.rb +1 -1
  291. data/spec/unit/pops/evaluator/access_ops_spec.rb +2 -2
  292. data/spec/unit/pops/evaluator/runtime3_converter_spec.rb +9 -9
  293. data/spec/unit/pops/loaders/environment_loader_spec.rb +172 -0
  294. data/spec/unit/pops/lookup/context_spec.rb +45 -16
  295. data/spec/unit/pops/lookup/interpolation_spec.rb +28 -20
  296. data/spec/unit/pops/lookup/lookup_spec.rb +197 -0
  297. data/spec/unit/pops/merge_strategy_spec.rb +18 -0
  298. data/spec/unit/pops/parser/lexer2_spec.rb +16 -1
  299. data/spec/unit/pops/parser/parse_site_spec.rb +4 -0
  300. data/spec/unit/pops/serialization/packer_spec.rb +4 -23
  301. data/spec/unit/pops/serialization/serialization_spec.rb +32 -8
  302. data/spec/unit/pops/types/p_object_type_spec.rb +68 -3
  303. data/spec/unit/pops/types/p_sem_ver_type_spec.rb +4 -4
  304. data/spec/unit/pops/types/p_type_set_type_spec.rb +31 -2
  305. data/spec/unit/pops/types/type_acceptor_spec.rb +18 -17
  306. data/spec/unit/pops/types/type_calculator_spec.rb +39 -40
  307. data/spec/unit/pops/types/type_factory_spec.rb +3 -3
  308. data/spec/unit/pops/types/type_formatter_spec.rb +7 -3
  309. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +13 -2
  310. data/spec/unit/pops/types/types_spec.rb +25 -2
  311. data/spec/unit/pops/validator/validator_spec.rb +60 -4
  312. data/spec/unit/provider/nameservice_spec.rb +42 -0
  313. data/spec/unit/provider/package/aptrpm_spec.rb +1 -1
  314. data/spec/unit/provider/package/pkg_spec.rb +22 -0
  315. data/spec/unit/provider/package/pkgng_spec.rb +12 -0
  316. data/spec/unit/provider/package/rpm_spec.rb +8 -8
  317. data/spec/unit/provider/service/smf_spec.rb +13 -11
  318. data/spec/unit/provider/service/systemd_spec.rb +8 -1
  319. data/spec/unit/provider/user/useradd_spec.rb +1 -0
  320. data/spec/unit/puppet_spec.rb +14 -0
  321. data/spec/unit/resource/catalog_spec.rb +15 -9
  322. data/spec/unit/resource_spec.rb +20 -17
  323. data/spec/unit/semver_spec.rb +14 -0
  324. data/spec/unit/ssl/certificate_authority_spec.rb +12 -1
  325. data/spec/unit/transaction/additional_resource_generator_spec.rb +11 -0
  326. data/spec/unit/type/user_spec.rb +32 -6
  327. data/spec/unit/util/filetype_spec.rb +3 -3
  328. data/spec/unit/util/yaml_spec.rb +1 -1
  329. data/spec/unit/util_spec.rb +10 -2
  330. data/tasks/i18n.rake +20 -0
  331. metadata +2661 -2595
  332. data/lib/puppet/data_providers/lookup_adapter.rb +0 -254
  333. data/lib/puppet/vendor/load_semantic.rb +0 -1
  334. data/lib/puppet/vendor/semantic/Gemfile +0 -20
  335. data/lib/puppet/vendor/semantic/PUPPET_README.md +0 -6
  336. data/lib/puppet/vendor/semantic/Rakefile +0 -69
  337. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  338. data/lib/puppet/vendor/semantic/lib/semantic.rb +0 -7
  339. data/lib/puppet/vendor/semantic/spec/spec_helper.rb +0 -24
  340. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_node_spec.rb +0 -141
  341. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/graph_spec.rb +0 -162
  342. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/module_release_spec.rb +0 -143
  343. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/source_spec.rb +0 -5
  344. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency/unsatisfiable_graph_spec.rb +0 -44
  345. data/lib/puppet/vendor/semantic/spec/unit/semantic/dependency_spec.rb +0 -383
  346. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_range_spec.rb +0 -307
  347. data/lib/puppet/vendor/semantic/spec/unit/semantic/version_spec.rb +0 -608
  348. data/spec/fixtures/unit/data_providers/environments/sample/manifests/site.pp +0 -6
@@ -123,7 +123,7 @@ module Puppet::Pops
123
123
  version => '1.x',
124
124
  pcore_version => '1.0.0',
125
125
  OBJECT
126
- expect { parse_type_set('MySet', ts) }.to raise_error(Semantic::Version::ValidationFailure)
126
+ expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
127
127
  end
128
128
 
129
129
  it 'the pcore_version is an invalid semantic version' do
@@ -131,7 +131,7 @@ module Puppet::Pops
131
131
  version => '1.0.0',
132
132
  pcore_version => '1.x',
133
133
  OBJECT
134
- expect { parse_type_set('MySet', ts) }.to raise_error(Semantic::Version::ValidationFailure)
134
+ expect { parse_type_set('MySet', ts) }.to raise_error(SemanticPuppet::Version::ValidationFailure)
135
135
  end
136
136
 
137
137
  it 'the pcore_version is outside of the range of that is parsable by this runtime' do
@@ -419,6 +419,35 @@ module Puppet::Pops
419
419
  OBJECT
420
420
  end
421
421
  end
422
+
423
+ it '#name_for method reports the name of deeply nested type correctly' do
424
+ tv = parse_type_set('Vehicles', <<-OBJECT)
425
+ version => '1.0.0',
426
+ pcore_version => '1.0.0',
427
+ types => { Car => Object[{}] }
428
+ OBJECT
429
+ tt = parse_type_set('Transports', <<-OBJECT)
430
+ version => '1.0.0',
431
+ pcore_version => '1.0.0',
432
+ references => {
433
+ Vecs => {
434
+ name => 'Vehicles',
435
+ version_range => '1.x'
436
+ }
437
+ }
438
+ OBJECT
439
+ ts = parse_type_set('TheSet', <<-OBJECT)
440
+ version => '1.0.0',
441
+ pcore_version => '1.0.0',
442
+ references => {
443
+ T => {
444
+ name => 'Transports',
445
+ version_range => '1.x'
446
+ }
447
+ }
448
+ OBJECT
449
+ expect(ts.name_for(tv['Car'], nil)).to eql('T::Vecs::Car')
450
+ end
422
451
  end
423
452
  end
424
453
  end
@@ -1,24 +1,25 @@
1
1
  require 'spec_helper'
2
2
  require 'puppet/pops/types/type_acceptor'
3
3
 
4
+ class PuppetSpec::TestTypeAcceptor
5
+ include Puppet::Pops::Types::TypeAcceptor
6
+ attr_reader :visitors, :guard
7
+
8
+ def initialize
9
+ @visitors = []
10
+ @guard = nil
11
+ end
12
+
13
+ def visit(type, guard)
14
+ @visitors << type
15
+ @guard = guard
16
+ end
17
+ end
18
+
4
19
  module Puppet::Pops::Types
5
20
  describe 'the Puppet::Pops::Types::TypeAcceptor' do
6
- let!(:acceptor_class) do
7
- Class.new do
8
- include TypeAcceptor
9
- attr_reader :visitors, :guard
10
-
11
- def initialize
12
- @visitors = []
13
- @guard = nil
14
- end
15
-
16
- def visit(type, guard)
17
- @visitors << type
18
- @guard = guard
19
- end
20
- end
21
- end
21
+
22
+ let!(:acceptor_class) { PuppetSpec::TestTypeAcceptor }
22
23
 
23
24
  let(:acceptor) { acceptor_class.new }
24
25
  let(:guard) { RecursionGuard.new }
@@ -102,4 +103,4 @@ describe 'the Puppet::Pops::Types::TypeAcceptor' do
102
103
  expect(acceptor.visitors).to include(t, PStringType::DEFAULT, PIntegerType::DEFAULT)
103
104
  end
104
105
  end
105
- end
106
+ end
@@ -18,12 +18,12 @@ describe 'The type calculator' do
18
18
  TypeFactory.regexp(pattern)
19
19
  end
20
20
 
21
- def string_t(*strings)
22
- TypeFactory.string(nil, *strings)
21
+ def string_t(string = nil)
22
+ TypeFactory.string(string)
23
23
  end
24
24
 
25
- def constrained_string_t(size_type, *strings)
26
- TypeFactory.string(size_type, *strings)
25
+ def constrained_string_t(size_type)
26
+ TypeFactory.string(size_type)
27
27
  end
28
28
 
29
29
  def callable_t(*params)
@@ -141,7 +141,7 @@ describe 'The type calculator' do
141
141
  it 'inferred string type knows the string value' do
142
142
  t = calculator.infer('foo')
143
143
  expect(t.class).to eq(PStringType)
144
- expect(t.values).to eq(['foo'])
144
+ expect(t.value).to eq('foo')
145
145
  end
146
146
 
147
147
  it 'boolean true translates to PBooleanType' do
@@ -222,15 +222,15 @@ describe 'The type calculator' do
222
222
 
223
223
  context 'version' do
224
224
  it 'translates to PVersionType' do
225
- expect(calculator.infer(Semantic::Version.new(1,0,0)).class).to eq(PSemVerType)
225
+ expect(calculator.infer(SemanticPuppet::Version.new(1,0,0)).class).to eq(PSemVerType)
226
226
  end
227
227
 
228
228
  it 'range translates to PVersionRangeType' do
229
- expect(calculator.infer(Semantic::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
229
+ expect(calculator.infer(SemanticPuppet::VersionRange.parse('1.x')).class).to eq(PSemVerRangeType)
230
230
  end
231
231
 
232
232
  it 'translates to a limited PVersionType by infer_set' do
233
- v = Semantic::Version.new(1,0,0)
233
+ v = SemanticPuppet::Version.new(1,0,0)
234
234
  t = calculator.infer_set(v)
235
235
  expect(t.class).to eq(PSemVerType)
236
236
  expect(t.ranges.size).to eq(1)
@@ -287,9 +287,9 @@ describe 'The type calculator' do
287
287
  expect(t.to).to eq(42)
288
288
  end
289
289
 
290
- it 'Compound string values are computed' do
290
+ it 'Compound string values are converted to enums' do
291
291
  t = calculator.infer(['a','b', 'c']).element_type
292
- expect(t.class).to eq(PStringType)
292
+ expect(t.class).to eq(PEnumType)
293
293
  expect(t.values).to eq(['a', 'b', 'c'])
294
294
  end
295
295
 
@@ -326,16 +326,16 @@ describe 'The type calculator' do
326
326
  end
327
327
 
328
328
  it 'with arrays of string values translates to PArrayType[PArrayType[PStringType]]' do
329
- et = calculator.infer([['first' 'array'], ['second','array']])
329
+ et = calculator.infer([['first', 'array'], ['second','array']])
330
330
  expect(et.class).to eq(PArrayType)
331
331
  et = et.element_type
332
332
  expect(et.class).to eq(PArrayType)
333
333
  et = et.element_type
334
- expect(et.class).to eq(PStringType)
334
+ expect(et.class).to eq(PEnumType)
335
335
  end
336
336
 
337
337
  it 'with array of string values and array of fixnums translates to PArrayType[PArrayType[PScalarType]]' do
338
- et = calculator.infer([['first' 'array'], [1,2]])
338
+ et = calculator.infer([['first', 'array'], [1,2]])
339
339
  expect(et.class).to eq(PArrayType)
340
340
  et = et.element_type
341
341
  expect(et.class).to eq(PArrayType)
@@ -343,13 +343,13 @@ describe 'The type calculator' do
343
343
  expect(et.class).to eq(PScalarType)
344
344
  end
345
345
 
346
- it 'with hashes of string values translates to PArrayType[PHashType[PStringType]]' do
346
+ it 'with hashes of string values translates to PArrayType[PHashType[PEnumType]]' do
347
347
  et = calculator.infer([{:first => 'first', :second => 'second' }, {:first => 'first', :second => 'second' }])
348
348
  expect(et.class).to eq(PArrayType)
349
349
  et = et.element_type
350
350
  expect(et.class).to eq(PHashType)
351
- et = et.element_type
352
- expect(et.class).to eq(PStringType)
351
+ et = et.value_type
352
+ expect(et.class).to eq(PEnumType)
353
353
  end
354
354
 
355
355
  it 'with hash of string values and hash of fixnums translates to PArrayType[PHashType[PScalarType]]' do
@@ -357,7 +357,7 @@ describe 'The type calculator' do
357
357
  expect(et.class).to eq(PArrayType)
358
358
  et = et.element_type
359
359
  expect(et.class).to eq(PHashType)
360
- et = et.element_type
360
+ et = et.value_type
361
361
  expect(et.class).to eq(PScalarType)
362
362
  end
363
363
  end
@@ -374,12 +374,12 @@ describe 'The type calculator' do
374
374
  expect(k.runtime_type_name).to eq('Symbol')
375
375
  end
376
376
 
377
- it 'with string keys translates to PHashType[PStringType, value]' do
378
- expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PStringType)
377
+ it 'with string keys translates to PHashType[PEnumType, value]' do
378
+ expect(calculator.infer({'first' => 1, 'second' => 2}).key_type.class).to eq(PEnumType)
379
379
  end
380
380
 
381
381
  it 'with fixnum values translates to PHashType[key, PIntegerType]' do
382
- expect(calculator.infer({:first => 1, :second => 2}).element_type.class).to eq(PIntegerType)
382
+ expect(calculator.infer({:first => 1, :second => 2}).value_type.class).to eq(PIntegerType)
383
383
  end
384
384
 
385
385
  it 'when empty infers a type that answers true to is_the_empty_hash?' do
@@ -435,8 +435,8 @@ describe 'The type calculator' do
435
435
  expect(t.patterns[0].regexp.match('abc')[1]).to eq('b')
436
436
  end
437
437
 
438
- it 'constructs a PStringType with multiple strings' do
439
- t = string_t('a', 'b', 'c', 'abc')
438
+ it 'constructs a PEnumType with multiple strings' do
439
+ t = enum_t('a', 'b', 'c', 'abc')
440
440
  expect(t.values).to eq(['a', 'b', 'c', 'abc'].sort)
441
441
  end
442
442
  end
@@ -482,7 +482,7 @@ describe 'The type calculator' do
482
482
  t1 = string_t('abc')
483
483
  t2 = string_t('xyz')
484
484
  common_t = calculator.common_type(t1,t2)
485
- expect(common_t.class).to eq(PStringType)
485
+ expect(common_t.class).to eq(PEnumType)
486
486
  expect(common_t.values).to eq(['abc', 'xyz'])
487
487
  end
488
488
 
@@ -503,11 +503,11 @@ describe 'The type calculator' do
503
503
  end
504
504
 
505
505
  it 'computes values to be empty if the one has empty values' do
506
- t1 = constrained_string_t(range_t(3,6), 'apa')
506
+ t1 = string_t('apa')
507
507
  t2 = constrained_string_t(range_t(2,4))
508
508
  common_t = calculator.common_type(t1,t2)
509
509
  expect(common_t.class).to eq(PStringType)
510
- expect(common_t.values).to be_empty
510
+ expect(common_t.value).to be_nil
511
511
  end
512
512
  end
513
513
 
@@ -1154,7 +1154,7 @@ describe 'The type calculator' do
1154
1154
 
1155
1155
  it 'should accept multiple strings if they all match any patterns' do
1156
1156
  p_t = pattern_t('X', 'Y', 'abc')
1157
- p_s = string_t('Xa', 'aY', 'abc')
1157
+ p_s = enum_t('Xa', 'aY', 'abc')
1158
1158
  expect(calculator.assignable?(p_t, p_s)).to eq(true)
1159
1159
  end
1160
1160
 
@@ -1166,7 +1166,7 @@ describe 'The type calculator' do
1166
1166
 
1167
1167
  it 'should reject multiple strings if not all match any patterns' do
1168
1168
  p_t = pattern_t('abc', 'ab', 'c', 'q')
1169
- p_s = string_t('X', 'Y', 'Z')
1169
+ p_s = enum_t('X', 'Y', 'Z')
1170
1170
  expect(calculator.assignable?(p_t, p_s)).to eq(false)
1171
1171
  end
1172
1172
 
@@ -1661,9 +1661,8 @@ describe 'The type calculator' do
1661
1661
  end
1662
1662
 
1663
1663
  it 'should consider string values' do
1664
- string = string_t('a', 'b')
1664
+ string = string_t('a')
1665
1665
  expect(calculator.instance?(string, 'a')).to eq(true)
1666
- expect(calculator.instance?(string, 'b')).to eq(true)
1667
1666
  expect(calculator.instance?(string, 'c')).to eq(false)
1668
1667
  end
1669
1668
 
@@ -1936,7 +1935,7 @@ describe 'The type calculator' do
1936
1935
  t = calculator.type(Hash)
1937
1936
  expect(t.class).to eq(PHashType)
1938
1937
  expect(t.key_type.class).to eq(PScalarType)
1939
- expect(t.element_type.class).to eq(PDataType)
1938
+ expect(t.value_type.class).to eq(PDataType)
1940
1939
  end
1941
1940
  end
1942
1941
 
@@ -2066,25 +2065,25 @@ describe 'The type calculator' do
2066
2065
  end
2067
2066
 
2068
2067
  it 'a generic inference is produced using infer_generic' do
2069
- expect(calculator.infer_generic(['a','b']).element_type.values).to eq([])
2068
+ expect(calculator.infer_generic(['a','b']).element_type).to eql(string_t(range_t(1,1)))
2070
2069
  end
2071
2070
 
2072
2071
  it 'a generic result is created by generalize given an instance specific result for an Array' do
2073
2072
  generic = calculator.infer(['a','b'])
2074
- expect(generic.element_type.values).to eq(['a', 'b'])
2073
+ expect(generic.element_type.values).to eq(['a','b'])
2075
2074
  generic = generic.generalize
2076
- expect(generic.element_type.values).to eq([])
2075
+ expect(generic.element_type).to eql(string_t(range_t(1,1)))
2077
2076
  end
2078
2077
 
2079
2078
  it 'a generic result is created by generalize given an instance specific result for a Hash' do
2080
- generic = calculator.infer({'a' =>1,'b' => 2})
2081
- expect(generic.key_type.values.sort).to eq(['a', 'b'])
2082
- expect(generic.element_type.from).to eq(1)
2083
- expect(generic.element_type.to).to eq(2)
2079
+ generic = calculator.infer({'a' =>1,'bcd' => 2})
2080
+ expect(generic.key_type.values.sort).to eq(['a', 'bcd'])
2081
+ expect(generic.value_type.from).to eq(1)
2082
+ expect(generic.value_type.to).to eq(2)
2084
2083
  generic = generic.generalize
2085
- expect(generic.key_type.values).to eq([])
2086
- expect(generic.element_type.from).to eq(nil)
2087
- expect(generic.element_type.to).to eq(nil)
2084
+ expect(generic.key_type.size_type).to eq(range_t(1,3))
2085
+ expect(generic.value_type.from).to eq(nil)
2086
+ expect(generic.value_type.to).to eq(nil)
2088
2087
  end
2089
2088
 
2090
2089
  it 'ensures that Struct key types are not generalized' do
@@ -82,7 +82,7 @@ describe 'The type factory' do
82
82
  end
83
83
 
84
84
  it 'sem_ver(r1, r2) returns constrained PSemVerType' do
85
- expect(TypeFactory.sem_ver('1.x', '3.x').ranges).to include(Semantic::VersionRange.parse('1.x'), Semantic::VersionRange.parse('3.x'))
85
+ expect(TypeFactory.sem_ver('1.x', '3.x').ranges).to include(SemanticPuppet::VersionRange.parse('1.x'), SemanticPuppet::VersionRange.parse('3.x'))
86
86
  end
87
87
 
88
88
  it 'sem_ver_range() returns PSemVerRangeType' do
@@ -173,7 +173,7 @@ describe 'The type factory' do
173
173
  ht = TypeFactory.hash_of_data
174
174
  expect(ht.class()).to eq(PHashType)
175
175
  expect(ht.key_type.class).to eq(PScalarType)
176
- expect(ht.element_type.class).to eq(PDataType)
176
+ expect(ht.value_type.class).to eq(PDataType)
177
177
  end
178
178
 
179
179
  it 'ruby(1) returns PRuntimeType[ruby, \'Fixnum\']' do
@@ -211,7 +211,7 @@ describe 'The type factory' do
211
211
  expect(t.size_type.from).to eq(0)
212
212
  expect(t.size_type.to).to eq(0)
213
213
  expect(t.key_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
214
- expect(t.element_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
214
+ expect(t.value_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
215
215
  end
216
216
 
217
217
  context 'callable types' do
@@ -75,7 +75,7 @@ end
75
75
  expect(s.string(f.type_type)).to eq('Type')
76
76
  end
77
77
 
78
- it "should yield 'Object' for PAnyType" do
78
+ it "should yield 'Any' for PAnyType" do
79
79
  expect(s.string(f.any)).to eq('Any')
80
80
  end
81
81
 
@@ -119,8 +119,12 @@ end
119
119
  expect(s.string(f.string)).to eq('String')
120
120
  end
121
121
 
122
- it "should yield 'String' for PStringType with multiple values" do
123
- expect(s.string(f.string(nil, 'a', 'b', 'c'))).to eq('String')
122
+ it "should yield 'String' for PStringType with value" do
123
+ expect(s.string(f.string('a'))).to eq('String')
124
+ end
125
+
126
+ it "should yield 'String['a']' for PStringType with value if printed with debug_string" do
127
+ expect(s.debug_string(f.string('a'))).to eq("String['a']")
124
128
  end
125
129
 
126
130
  it "should yield 'String' and from/to for PStringType" do
@@ -87,7 +87,7 @@ describe 'the type mismatch describer' do
87
87
  check_port({ 34 => 'some service'})
88
88
  CODE
89
89
  expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
90
- /parameter 'ports' expects a PortMap = Hash\[UnprivilegedPort = Integer\[1024, 65537\], String\] value, got Hash\[Integer\[34, 34\], String\[12, 12\]\]/))
90
+ /parameter 'ports' expects a PortMap = Hash\[UnprivilegedPort = Integer\[1024, 65537\], String\] value, got Hash\[Integer\[34, 34\], String\]/))
91
91
  end
92
92
 
93
93
  it 'will not include the aliased type more than once when reporting a mismatch that involves an alias that is self recursive' do
@@ -98,7 +98,7 @@ describe 'the type mismatch describer' do
98
98
  check_tree({ 'x' => {'y' => {32 => 'n'}}})
99
99
  CODE
100
100
  expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
101
- /parameter 'tree' entry 'x' entry 'y' expects a Tree = Hash\[String, Tree\] value, got Hash\[Integer\[32, 32\], String\[1, 1\]\]/))
101
+ /parameter 'tree' entry 'x' entry 'y' expects a Tree = Hash\[String, Tree\] value, got Hash\[Integer\[32, 32\], String\]/))
102
102
  end
103
103
 
104
104
  it 'will use type normalization' do
@@ -130,6 +130,17 @@ describe 'the type mismatch describer' do
130
130
  /parameter 'arg' expects a match for Enum\['a', 'b'\], got Sensitive/))
131
131
  end
132
132
 
133
+ it "reports errors on the first failing parameter when that parameter is not the first in order" do
134
+ code = <<-CODE
135
+ type Abc = Enum['a', 'b', 'c']
136
+ type Cde = Enum['c', 'd', 'e']
137
+ function two_params(Abc $a, Cde $b) {}
138
+ two_params('a', 'x')
139
+ CODE
140
+ expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
141
+ /parameter 'b' expects a match for Cde = Enum\['c', 'd', 'e'\], got 'x'/))
142
+ end
143
+
133
144
  it "will not generalize a string that doesn't match an enum in a define call" do
134
145
  code = <<-CODE
135
146
  define check_enums(Enum[a,b] $arg) {}
@@ -386,7 +386,7 @@ describe 'Puppet Type System' do
386
386
  type Bar = Fee
387
387
  notice(0 =~ Bar)
388
388
  CODE
389
- expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
389
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Bar' cannot be resolved to a real type/)
390
390
  end
391
391
 
392
392
  it 'will not allow an alias chain that contains nothing but aliases and variants' do
@@ -396,7 +396,7 @@ describe 'Puppet Type System' do
396
396
  type Bar = Variant[Fee,Foo]
397
397
  notice(0 =~ Bar)
398
398
  CODE
399
- expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
399
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Bar' cannot be resolved to a real type/)
400
400
  end
401
401
 
402
402
  it 'will not allow an alias to directly reference itself' do
@@ -572,6 +572,29 @@ describe 'Puppet Type System' do
572
572
  end
573
573
  end
574
574
 
575
+ context 'instantiation via ruby create function' do
576
+ around(:each) do |example|
577
+ Puppet.override(:loaders => Loaders.new(Puppet::Node::Environment.create(:testing, []))) do
578
+ example.run
579
+ end
580
+ end
581
+
582
+ it 'is supported by Integer' do
583
+ int = tf.integer.create('32')
584
+ expect(int).to eq(32)
585
+ end
586
+
587
+ it 'is supported by Optional[Integer]' do
588
+ int = tf.optional(tf.integer).create('32')
589
+ expect(int).to eq(32)
590
+ end
591
+
592
+ it 'is not supported by Any, Scalar, Collection' do
593
+ [tf.any, tf.scalar, tf.collection ].each do |t|
594
+ expect { t.create }.to raise_error(ArgumentError, /Creation of new instance of type '#{t.to_s}' is not supported/)
595
+ end
596
+ end
597
+ end
575
598
  end
576
599
  end
577
600
  end
@@ -50,42 +50,98 @@ describe "validating 4x" do
50
50
  end
51
51
 
52
52
  context 'with the default settings for --strict' do
53
- it 'produces a warning for duplicate keyes in a literal hash' do
53
+ it 'produces a warning for duplicate keys in a literal hash' do
54
54
  acceptor = validate(parse('{ a => 1, a => 2 }'))
55
55
  expect(acceptor.warning_count).to eql(1)
56
56
  expect(acceptor.error_count).to eql(0)
57
57
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
58
58
  end
59
+
60
+ it 'produces a warning for duplicate default in a case expression' do
61
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
62
+ expect(acceptor.warning_count).to eql(1)
63
+ expect(acceptor.error_count).to eql(0)
64
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
65
+ end
66
+
67
+ it 'produces a warning for duplicate default in a selector expression' do
68
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
69
+ expect(acceptor.warning_count).to eql(1)
70
+ expect(acceptor.error_count).to eql(0)
71
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
72
+ end
59
73
  end
60
74
 
61
75
  context 'with --strict set to warning' do
62
76
  before(:each) { Puppet[:strict] = :warning }
63
- it 'produces a warning for duplicate keyes in a literal hash' do
77
+ it 'produces a warning for duplicate keys in a literal hash' do
64
78
  acceptor = validate(parse('{ a => 1, a => 2 }'))
65
79
  expect(acceptor.warning_count).to eql(1)
66
80
  expect(acceptor.error_count).to eql(0)
67
81
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
68
82
  end
83
+
84
+ it 'produces a warning for duplicate default in a case expression' do
85
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
86
+ expect(acceptor.warning_count).to eql(1)
87
+ expect(acceptor.error_count).to eql(0)
88
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
89
+ end
90
+
91
+ it 'produces a warning for duplicate default in a selector expression' do
92
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
93
+ expect(acceptor.warning_count).to eql(1)
94
+ expect(acceptor.error_count).to eql(0)
95
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
96
+ end
69
97
  end
70
98
 
71
99
  context 'with --strict set to error' do
72
100
  before(:each) { Puppet[:strict] = :error }
73
- it 'produces an error for duplicate keyes in a literal hash' do
101
+ it 'produces an error for duplicate keys in a literal hash' do
74
102
  acceptor = validate(parse('{ a => 1, a => 2 }'))
75
103
  expect(acceptor.warning_count).to eql(0)
76
104
  expect(acceptor.error_count).to eql(1)
77
105
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
78
106
  end
107
+
108
+ it 'produces an error for duplicate default in a case expression' do
109
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
110
+ expect(acceptor.warning_count).to eql(0)
111
+ expect(acceptor.error_count).to eql(1)
112
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
113
+ end
114
+
115
+ it 'produces an error for duplicate default in a selector expression' do
116
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
117
+ expect(acceptor.warning_count).to eql(0)
118
+ expect(acceptor.error_count).to eql(1)
119
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
120
+ end
79
121
  end
80
122
 
81
123
  context 'with --strict set to off' do
82
124
  before(:each) { Puppet[:strict] = :off }
83
- it 'does not produce an error or warning for duplicate keyes in a literal hash' do
125
+ it 'does not produce an error or warning for duplicate keys in a literal hash' do
84
126
  acceptor = validate(parse('{ a => 1, a => 2 }'))
85
127
  expect(acceptor.warning_count).to eql(0)
86
128
  expect(acceptor.error_count).to eql(0)
87
129
  expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
88
130
  end
131
+
132
+ it 'does not produce an error for duplicate default in a case expression' do
133
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
134
+ expect(acceptor.warning_count).to eql(0)
135
+ expect(acceptor.error_count).to eql(0)
136
+ expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
137
+ end
138
+
139
+ it 'does not produce an error for duplicate default in a selector expression' do
140
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
141
+ expect(acceptor.warning_count).to eql(0)
142
+ expect(acceptor.error_count).to eql(0)
143
+ expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
144
+ end
89
145
  end
90
146
 
91
147
  context 'for non productive expressions' do
@@ -301,4 +301,46 @@ describe Puppet::Provider::NameService do
301
301
  end
302
302
  end
303
303
 
304
+ describe "comments_insync?" do
305
+ # comments_insync? overrides Puppet::Property#insync? and will act on an
306
+ # array containing a should value (the expected value of Puppet::Property
307
+ # @should)
308
+ context "given strings with compatible encodings" do
309
+ it "should return false if the is-value and should-value are not equal" do
310
+ is_value = "foo"
311
+ should_value = ["bar"]
312
+ expect(provider.comments_insync?(is_value, should_value)).to be_falsey
313
+ end
314
+
315
+ it "should return true if the is-value and should-value are equal" do
316
+ is_value = "foo"
317
+ should_value = ["foo"]
318
+ expect(provider.comments_insync?(is_value, should_value)).to be_truthy
319
+ end
320
+ end
321
+
322
+ context "given strings with incompatible encodings" do
323
+ let(:snowman_iso) { "\u2603".force_encoding(Encoding::ISO_8859_1) }
324
+ let(:snowman_utf8) { "\u2603".force_encoding(Encoding::UTF_8) }
325
+ let(:snowman_binary) { "\u2603".force_encoding(Encoding::ASCII_8BIT) }
326
+ let(:arabic_heh_utf8) { "\u06FF".force_encoding(Encoding::UTF_8) }
327
+
328
+ it "should be able to compare unequal strings and return false" do
329
+ expect(Encoding.compatible?(snowman_iso, arabic_heh_utf8)).to be_falsey
330
+ expect(provider.comments_insync?(snowman_iso, [arabic_heh_utf8])).to be_falsey
331
+ end
332
+
333
+ it "should be able to compare equal strings and return true" do
334
+ expect(Encoding.compatible?(snowman_binary, snowman_utf8)).to be_falsey
335
+ expect(provider.comments_insync?(snowman_binary, [snowman_utf8])).to be_truthy
336
+ end
337
+
338
+ it "should not manipulate the actual encoding of either string" do
339
+ expect(Encoding.compatible?(snowman_binary, snowman_utf8)).to be_falsey
340
+ provider.comments_insync?(snowman_binary, [snowman_utf8])
341
+ expect(snowman_binary.encoding).to eq(Encoding::ASCII_8BIT)
342
+ expect(snowman_utf8.encoding).to eq(Encoding::UTF_8)
343
+ end
344
+ end
345
+ end
304
346
  end
@@ -17,7 +17,7 @@ describe Puppet::Type.type(:package).provider(:aptrpm) do
17
17
  end
18
18
 
19
19
  def rpm_args
20
- ['-q', 'faff', '--nosignature', '--nodigest', '--qf', "%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n"]
20
+ ['-q', 'faff', '--nosignature', '--nodigest', '--qf', "'%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n'"]
21
21
  end
22
22
 
23
23
  def rpm(args = rpm_args)
@@ -25,6 +25,28 @@ describe Puppet::Type.type(:package).provider(:pkg) do
25
25
 
26
26
  it_should_respond_to :install, :uninstall, :update, :query, :latest
27
27
 
28
+ context 'default' do
29
+ [ 10 ].each do |ver|
30
+ it "should not be the default provider on Solaris #{ver}" do
31
+ Facter.stubs(:value).with(:osfamily).returns(:Solaris)
32
+ Facter.stubs(:value).with(:kernelrelease).returns("5.#{ver}")
33
+ Facter.stubs(:value).with(:operatingsystem).returns(:Solaris)
34
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
35
+ expect(described_class).to_not be_default
36
+ end
37
+ end
38
+
39
+ [ 11, 12 ].each do |ver|
40
+ it "should be the default provider on Solaris #{ver}" do
41
+ Facter.stubs(:value).with(:osfamily).returns(:Solaris)
42
+ Facter.stubs(:value).with(:kernelrelease).returns("5.#{ver}")
43
+ Facter.stubs(:value).with(:operatingsystem).returns(:Solaris)
44
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
45
+ expect(described_class).to be_default
46
+ end
47
+ end
48
+ end
49
+
28
50
  it "should be versionable" do
29
51
  expect(described_class).to be_versionable
30
52
  end