puppet 4.8.2 → 4.9.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 (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.rb +52 -0
  11. data/lib/puppet/application/face_base.rb +4 -0
  12. data/lib/puppet/application/lookup.rb +4 -2
  13. data/lib/puppet/application/resource.rb +1 -1
  14. data/lib/puppet/data_providers.rb +6 -3
  15. data/lib/puppet/data_providers/data_adapter.rb +6 -0
  16. data/lib/puppet/data_providers/data_function_support.rb +7 -0
  17. data/lib/puppet/data_providers/function_env_data_provider.rb +7 -0
  18. data/lib/puppet/data_providers/function_module_data_provider.rb +6 -0
  19. data/lib/puppet/data_providers/hiera_config.rb +31 -10
  20. data/lib/puppet/data_providers/hiera_env_data_provider.rb +6 -0
  21. data/lib/puppet/data_providers/hiera_interpolate.rb +2 -1
  22. data/lib/puppet/data_providers/hiera_module_data_provider.rb +6 -0
  23. data/lib/puppet/data_providers/hiera_support.rb +6 -0
  24. data/lib/puppet/data_providers/json_data_provider_factory.rb +12 -0
  25. data/lib/puppet/data_providers/yaml_data_provider_factory.rb +12 -0
  26. data/lib/puppet/defaults.rb +25 -4
  27. data/lib/puppet/face/ca.rb +2 -0
  28. data/lib/puppet/face/certificate_request.rb +2 -0
  29. data/lib/puppet/face/certificate_revocation_list.rb +2 -0
  30. data/lib/puppet/face/file.rb +3 -0
  31. data/lib/puppet/face/help.rb +19 -17
  32. data/lib/puppet/face/help/face.erb +3 -0
  33. data/lib/puppet/face/key.rb +1 -0
  34. data/lib/puppet/face/man.rb +4 -2
  35. data/lib/puppet/face/module/generate.rb +1 -1
  36. data/lib/puppet/face/status.rb +2 -0
  37. data/lib/puppet/feature/base.rb +9 -2
  38. data/lib/puppet/feature/hocon.rb +3 -0
  39. data/lib/puppet/file_system.rb +15 -3
  40. data/lib/puppet/file_system/windows.rb +8 -0
  41. data/lib/puppet/forge.rb +6 -6
  42. data/lib/puppet/forge/repository.rb +1 -2
  43. data/lib/puppet/functions/binary_file.rb +4 -10
  44. data/lib/puppet/functions/hiera_array.rb +1 -1
  45. data/lib/puppet/functions/hiera_include.rb +1 -1
  46. data/lib/puppet/functions/hocon_data.rb +24 -0
  47. data/lib/puppet/functions/json_data.rb +18 -0
  48. data/lib/puppet/functions/yaml_data.rb +21 -0
  49. data/lib/puppet/generate/type.rb +1 -1
  50. data/lib/puppet/graph/simple_graph.rb +4 -2
  51. data/lib/puppet/indirector/file_bucket_file/file.rb +10 -2
  52. data/lib/puppet/indirector/request.rb +5 -1
  53. data/lib/puppet/interface.rb +14 -2
  54. data/lib/puppet/interface/face_collection.rb +1 -1
  55. data/lib/puppet/module.rb +14 -2
  56. data/lib/puppet/module_tool.rb +4 -4
  57. data/lib/puppet/module_tool/applications/builder.rb +3 -2
  58. data/lib/puppet/module_tool/applications/installer.rb +14 -14
  59. data/lib/puppet/module_tool/applications/upgrader.rb +13 -13
  60. data/lib/puppet/module_tool/installed_modules.rb +7 -7
  61. data/lib/puppet/module_tool/local_tarball.rb +3 -3
  62. data/lib/puppet/module_tool/metadata.rb +1 -1
  63. data/lib/puppet/network/http/connection.rb +2 -0
  64. data/lib/puppet/network/http/webrick.rb +2 -1
  65. data/lib/puppet/parser/functions/hiera.rb +14 -0
  66. data/lib/puppet/parser/functions/hiera_array.rb +14 -0
  67. data/lib/puppet/parser/functions/hiera_hash.rb +14 -0
  68. data/lib/puppet/parser/functions/hiera_include.rb +14 -0
  69. data/lib/puppet/parser/scope.rb +14 -20
  70. data/lib/puppet/plugins/data_providers.rb +2 -0
  71. data/lib/puppet/plugins/data_providers/data_provider.rb +108 -17
  72. data/lib/puppet/plugins/data_providers/registry.rb +2 -36
  73. data/lib/puppet/pops.rb +6 -9
  74. data/lib/puppet/pops/adaptable.rb +0 -3
  75. data/lib/puppet/pops/binder/producers.rb +3 -3
  76. data/lib/puppet/pops/evaluator/access_operator.rb +4 -4
  77. data/lib/puppet/pops/evaluator/closure.rb +1 -1
  78. data/lib/puppet/pops/evaluator/compare_operator.rb +4 -4
  79. data/lib/puppet/pops/evaluator/evaluator_impl.rb +1 -1
  80. data/lib/puppet/pops/issues.rb +4 -0
  81. data/lib/puppet/pops/label_provider.rb +14 -0
  82. data/lib/puppet/pops/loader/loader_paths.rb +3 -1
  83. data/lib/puppet/pops/loader/module_loaders.rb +21 -7
  84. data/lib/puppet/pops/loader/typed_name.rb +0 -2
  85. data/lib/puppet/pops/loaders.rb +31 -12
  86. data/lib/puppet/pops/lookup.rb +4 -3
  87. data/lib/puppet/pops/lookup/configured_data_provider.rb +87 -0
  88. data/lib/puppet/pops/lookup/context.rb +121 -71
  89. data/lib/puppet/pops/lookup/data_adapter.rb +27 -0
  90. data/lib/puppet/pops/lookup/data_dig_function_provider.rb +55 -0
  91. data/lib/puppet/pops/lookup/data_hash_function_provider.rb +111 -0
  92. data/lib/puppet/pops/lookup/data_provider.rb +102 -0
  93. data/lib/puppet/pops/lookup/environment_data_provider.rb +27 -0
  94. data/lib/puppet/pops/lookup/explainer.rb +122 -82
  95. data/lib/puppet/pops/lookup/function_provider.rb +82 -0
  96. data/lib/puppet/pops/lookup/global_data_provider.rb +49 -0
  97. data/lib/puppet/pops/lookup/hiera_config.rb +601 -0
  98. data/lib/puppet/pops/lookup/interpolation.rb +56 -35
  99. data/lib/puppet/pops/lookup/invocation.rb +179 -101
  100. data/lib/puppet/pops/lookup/location_resolver.rb +72 -0
  101. data/lib/puppet/pops/lookup/lookup_adapter.rb +451 -0
  102. data/lib/puppet/pops/lookup/lookup_key.rb +99 -0
  103. data/lib/puppet/pops/lookup/lookup_key_function_provider.rb +119 -0
  104. data/lib/puppet/pops/lookup/module_data_provider.rb +58 -0
  105. data/lib/puppet/pops/lookup/sub_lookup.rb +8 -4
  106. data/lib/puppet/pops/merge_strategy.rb +120 -39
  107. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  108. data/lib/puppet/pops/parser/eparser.rb +816 -808
  109. data/lib/puppet/pops/parser/locator.rb +3 -3
  110. data/lib/puppet/pops/parser/slurp_support.rb +4 -3
  111. data/lib/puppet/pops/pcore.rb +21 -12
  112. data/lib/puppet/pops/serialization/abstract_reader.rb +17 -7
  113. data/lib/puppet/pops/serialization/abstract_writer.rb +27 -12
  114. data/lib/puppet/pops/serialization/deserializer.rb +17 -4
  115. data/lib/puppet/pops/serialization/extension.rb +37 -8
  116. data/lib/puppet/pops/serialization/object.rb +14 -6
  117. data/lib/puppet/pops/serialization/rgen.rb +2 -1
  118. data/lib/puppet/pops/serialization/serializer.rb +30 -7
  119. data/lib/puppet/pops/types/implementation_registry.rb +1 -1
  120. data/lib/puppet/pops/types/p_object_type.rb +55 -12
  121. data/lib/puppet/pops/types/p_sem_ver_range_type.rb +27 -27
  122. data/lib/puppet/pops/types/p_sem_ver_type.rb +12 -12
  123. data/lib/puppet/pops/types/p_timespan_type.rb +6 -6
  124. data/lib/puppet/pops/types/p_timestamp_type.rb +2 -2
  125. data/lib/puppet/pops/types/p_type_set_type.rb +7 -16
  126. data/lib/puppet/pops/types/recursion_guard.rb +64 -20
  127. data/lib/puppet/pops/types/ruby_generator.rb +10 -0
  128. data/lib/puppet/pops/types/type_calculator.rb +23 -13
  129. data/lib/puppet/pops/types/type_factory.rb +20 -9
  130. data/lib/puppet/pops/types/type_formatter.rb +37 -17
  131. data/lib/puppet/pops/types/type_mismatch_describer.rb +7 -6
  132. data/lib/puppet/pops/types/type_parser.rb +6 -0
  133. data/lib/puppet/pops/types/types.rb +225 -132
  134. data/lib/puppet/pops/validation.rb +1 -1
  135. data/lib/puppet/pops/validation/checker4_0.rb +12 -2
  136. data/lib/puppet/pops/validation/validator_factory_4_0.rb +1 -0
  137. data/lib/puppet/pops/visitor.rb +4 -3
  138. data/lib/puppet/provider/mcx/mcxcontent.rb +2 -1
  139. data/lib/puppet/provider/nameservice.rb +15 -0
  140. data/lib/puppet/provider/package/appdmg.rb +1 -1
  141. data/lib/puppet/provider/package/dnf.rb +1 -1
  142. data/lib/puppet/provider/package/pkg.rb +1 -1
  143. data/lib/puppet/provider/package/pkgdmg.rb +1 -1
  144. data/lib/puppet/provider/package/pkgng.rb +1 -1
  145. data/lib/puppet/provider/package/rpm.rb +2 -2
  146. data/lib/puppet/provider/service/smf.rb +3 -3
  147. data/lib/puppet/provider/service/systemd.rb +5 -1
  148. data/lib/puppet/provider/user/directoryservice.rb +1 -0
  149. data/lib/puppet/provider/user/user_role_add.rb +15 -0
  150. data/lib/puppet/provider/yumrepo/inifile.rb +2 -2
  151. data/lib/puppet/provider/zone/solaris.rb +4 -1
  152. data/lib/puppet/reference/indirection.rb +1 -1
  153. data/lib/puppet/resource.rb +2 -3
  154. data/lib/puppet/resource/catalog.rb +12 -4
  155. data/lib/puppet/resource/type.rb +3 -3
  156. data/lib/puppet/settings.rb +1 -1
  157. data/lib/puppet/settings/config_file.rb +2 -1
  158. data/lib/puppet/settings/directory_setting.rb +6 -0
  159. data/lib/puppet/settings/environment_conf.rb +6 -2
  160. data/lib/puppet/settings/file_or_directory_setting.rb +6 -0
  161. data/lib/puppet/settings/file_setting.rb +10 -0
  162. data/lib/puppet/ssl/certificate_authority.rb +13 -2
  163. data/lib/puppet/ssl/host.rb +23 -1
  164. data/lib/puppet/transaction/additional_resource_generator.rb +7 -0
  165. data/lib/puppet/type/user.rb +16 -3
  166. data/lib/puppet/util.rb +1 -0
  167. data/lib/puppet/util/execution.rb +3 -3
  168. data/lib/puppet/util/filetype.rb +11 -5
  169. data/lib/puppet/util/logging.rb +2 -1
  170. data/lib/puppet/util/network_device/config.rb +1 -1
  171. data/lib/puppet/util/plist.rb +6 -0
  172. data/lib/puppet/util/profiler/aggregate.rb +1 -1
  173. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +2 -2
  174. data/lib/puppet/util/rdoc/parser/puppet_parser_core.rb +2 -1
  175. data/lib/puppet/util/windows/adsi.rb +15 -12
  176. data/lib/puppet/vendor/load_semantic_puppet.rb +1 -0
  177. data/lib/puppet/vendor/pathspec/lib/pathspec.rb +2 -1
  178. data/lib/puppet/vendor/require_vendored.rb +0 -1
  179. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +17 -0
  180. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency.rb +7 -7
  181. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph.rb +2 -2
  182. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/graph_node.rb +2 -2
  183. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/dependency/module_release.rb +58 -0
  184. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/source.rb +2 -2
  185. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/dependency/unsatisfiable_graph.rb +2 -2
  186. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/gem_version.rb +3 -0
  187. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet/locales/config.yaml +21 -0
  188. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version.rb +48 -21
  189. data/lib/puppet/vendor/{semantic/lib/semantic → semantic_puppet/lib/semantic_puppet}/version_range.rb +15 -17
  190. data/lib/puppet/version.rb +1 -1
  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 -2593
  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.rb +0 -7
  338. data/lib/puppet/vendor/semantic/lib/semantic/dependency/module_release.rb +0 -60
  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
@@ -533,7 +533,7 @@ describe 'the new function' do
533
533
  { [] => 'Notify[Array[Unit], []]',
534
534
  [true] => 'Notify[Array[Boolean], [true]]',
535
535
  {'a'=>true, 'b' => false} => 'Notify[Array[Array[Scalar]], [[a, true], [b, false]]]',
536
- 'abc' => 'Notify[Array[String], [a, b, c]]',
536
+ 'abc' => 'Notify[Array[String[1, 1]], [a, b, c]]',
537
537
  3 => 'Notify[Array[Integer], [0, 1, 2]]',
538
538
  }.each do |input, result|
539
539
  it "produces #{result} when given the value #{input.inspect} and wrap is not given" do
@@ -591,7 +591,7 @@ describe 'the new function' do
591
591
  end
592
592
 
593
593
  context 'when invoked on Tuple' do
594
- { 'abc' => 'Notify[Array[String], [a, b, c]]',
594
+ { 'abc' => 'Notify[Array[String[1, 1]], [a, b, c]]',
595
595
  3 => 'Notify[Array[Integer], [0, 1, 2]]',
596
596
  }.each do |input, result|
597
597
  it "produces #{result} when given the value #{input.inspect} and wrap is not given" do
@@ -617,7 +617,7 @@ describe 'the new function' do
617
617
  {'a'=>true} => 'Notify[Hash[String, Boolean], {a => true}]',
618
618
  [1,2,3,4] => 'Notify[Hash[Integer, Integer], {1 => 2, 3 => 4}]',
619
619
  [[1,2],[3,4]] => 'Notify[Hash[Integer, Integer], {1 => 2, 3 => 4}]',
620
- 'abcd' => 'Notify[Hash[String, String], {a => b, c => d}]',
620
+ 'abcd' => 'Notify[Hash[String[1, 1], String[1, 1]], {a => b, c => d}]',
621
621
  4 => 'Notify[Hash[Integer, Integer], {0 => 1, 2 => 3}]',
622
622
 
623
623
  }.each do |input, result|
@@ -376,7 +376,7 @@ describe Puppet::Graph::RbTreeMap do
376
376
  describe "#each" do
377
377
  it "should yield each pair in the tree in order if a block is provided" do
378
378
  # Insert in reverse to demonstrate they aren't being yielded in insertion order
379
- (1..5).to_a.reverse.each {|i| subject[i] = i.to_s}
379
+ (1..5).to_a.reverse_each {|i| subject[i] = i.to_s}
380
380
 
381
381
  nodes = []
382
382
  subject.each do |key,value|
@@ -430,7 +430,7 @@ describe Puppet::Graph::SimpleGraph do
430
430
  end
431
431
 
432
432
  it "should write a dot file based on the passed name" do
433
- File.expects(:open).with(@file, "w").yields(stub("file", :puts => nil))
433
+ File.expects(:open).with(@file, "w:UTF-8").yields(stub("file", :puts => nil))
434
434
  @graph.expects(:to_dot).with("name" => @name.to_s.capitalize)
435
435
  Puppet[:graph] = true
436
436
  @graph.write_graph(@name)
@@ -74,14 +74,14 @@ describe Hiera::Scope do
74
74
  end
75
75
  end
76
76
 
77
- describe "#include?" do
77
+ describe "#exist?" do
78
78
  it "should correctly report missing data" do
79
79
  real["nil_value"] = nil
80
80
  real["blank_value"] = ""
81
81
 
82
- expect(scope.include?("nil_value")).to eq(true)
83
- expect(scope.include?("blank_value")).to eq(true)
84
- expect(scope.include?("missing_value")).to eq(false)
82
+ expect(scope.exist?("nil_value")).to eq(true)
83
+ expect(scope.exist?("blank_value")).to eq(true)
84
+ expect(scope.exist?("missing_value")).to eq(false)
85
85
  end
86
86
 
87
87
  it "should always return true for calling_class and calling_module" do
@@ -140,6 +140,15 @@ describe Puppet::Indirector::Request do
140
140
  expect(Puppet::Indirector::Request.new(:ind, :method, "http://host/stuff with spaces", nil).key).to eq("stuff with spaces")
141
141
  end
142
142
 
143
+ it "should set the request key to the unescaped path from the URI, in UTF-8 encoding" do
144
+ path = "\u4e07"
145
+ uri = "http://host/#{path}"
146
+ request = Puppet::Indirector::Request.new(:ind, :method, uri, nil)
147
+
148
+ expect(request.key).to eq(path)
149
+ expect(request.key.encoding).to eq(Encoding::UTF_8)
150
+ end
151
+
143
152
  it "should set the :uri attribute to the full URI" do
144
153
  expect(Puppet::Indirector::Request.new(:ind, :method, "http:///a/path/stu ff", nil).uri).to eq('http:///a/path/stu ff')
145
154
  end
@@ -132,6 +132,33 @@ describe Puppet::Interface do
132
132
  end
133
133
  end
134
134
 
135
+ context "when deprecating a face" do
136
+ let(:face) { subject.new(:foo, '0.0.1') }
137
+ describe "#deprecate" do
138
+ it "should respond to #deprecate" do
139
+ expect(subject.new(:foo, '0.0.1')).to respond_to(:deprecate)
140
+ end
141
+
142
+ it "should set the deprecated value to true" do
143
+ expect(face.deprecated?).to be_falsey
144
+ face.deprecate
145
+ expect(face.deprecated?).to be_truthy
146
+ end
147
+ end
148
+
149
+ describe "#deprecated?" do
150
+ it "should return a nil (falsey) value by default" do
151
+ expect(face.deprecated?).to be_falsey
152
+ end
153
+
154
+ it "should return true if the face has been deprecated" do
155
+ expect(face.deprecated?).to be_falsey
156
+ face.deprecate
157
+ expect(face.deprecated?).to be_truthy
158
+ end
159
+ end
160
+ end
161
+
135
162
  describe "with face-level display_global_options" do
136
163
  it "should not return any action level display_global_options" do
137
164
  face = subject.new(:with_display_global_options, '0.0.1') do
@@ -23,7 +23,7 @@ describe Puppet::Face[:man, :current] do
23
23
  app = klass.new(Puppet::Util::CommandLine.new('puppet', ['man', name]))
24
24
 
25
25
  expect do
26
- IO.stubs(:popen).with(pager, anything).yields($stdout)
26
+ IO.stubs(:popen).with(pager, 'w:UTF-8').yields($stdout)
27
27
 
28
28
  expect { app.run }.to exit_with(0)
29
29
  end.to_not have_printed(/undefined method `gsub'/)
@@ -730,7 +730,7 @@ describe Puppet::Module do
730
730
  it "should properly parse utf-8 contents" do
731
731
  rune_utf8 = "\u16A0\u16C7\u16BB" # ᚠᛇᚻ
732
732
  metadata_json = tmpfile('metadata.json')
733
- File.open(metadata_json, 'w') do |file|
733
+ File.open(metadata_json, 'w:UTF-8') do |file|
734
734
  file.puts <<-EOF
735
735
  {
736
736
  "license" : "GPL2",
@@ -358,6 +358,13 @@ symlinkfile
358
358
  end
359
359
 
360
360
  context 'with metadata.json' do
361
+ # different UTF-8 widths
362
+ # 1-byte A
363
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
364
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
365
+ # 4-byte 𠜎 - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
366
+ MIXED_UTF8 = "A\u06FF\u16A0\u{2070E}" # Aۿᚠ𠜎
367
+
361
368
  before :each do
362
369
  File.open(File.join(path, 'metadata.json'), 'w') do |f|
363
370
  f.puts({
@@ -366,7 +373,7 @@ symlinkfile
366
373
  "source" => "https://github.com/testing/#{module_name}",
367
374
  "author" => "testing",
368
375
  "license" => "Apache License Version 2.0",
369
- "summary" => "Puppet testing module",
376
+ "summary" => "#{MIXED_UTF8}",
370
377
  "description" => "This module can be used for basic testing",
371
378
  "project_page" => "https://github.com/testing/#{module_name}"
372
379
  }.to_json)
@@ -393,6 +400,14 @@ symlinkfile
393
400
  builder.run
394
401
  }.to raise_error Puppet::ModuleTool::Errors::ModuleToolError, /symlinks/i
395
402
  end
403
+
404
+ it "writes UTF-8 metdata correctly" do
405
+ # file is written initially in before block, then by builders write_json method
406
+ builder.run
407
+ metadata_path = File.join(path, 'metadata.json')
408
+ summary = JSON.parse(Puppet::FileSystem.read(metadata_path, :encoding => Encoding::UTF_8))["summary"]
409
+ expect(summary).to eq(MIXED_UTF8)
410
+ end
396
411
  end
397
412
 
398
413
  context 'with metadata.json containing checksums' do
@@ -29,7 +29,7 @@ describe Puppet::ModuleTool::Applications::Installer do
29
29
  end
30
30
 
31
31
  before do
32
- Semantic::Dependency.clear_sources
32
+ SemanticPuppet::Dependency.clear_sources
33
33
  installer = Puppet::ModuleTool::Applications::Installer.any_instance
34
34
  installer.stubs(:module_repository).returns(remote_source)
35
35
  end
@@ -27,7 +27,7 @@ describe Puppet::ModuleTool::Applications::Upgrader do
27
27
  end
28
28
 
29
29
  before do
30
- Semantic::Dependency.clear_sources
30
+ SemanticPuppet::Dependency.clear_sources
31
31
  installer = Puppet::ModuleTool::Applications::Upgrader.any_instance
32
32
  installer.stubs(:module_repository).returns(remote_source)
33
33
  end
@@ -19,21 +19,21 @@ describe Puppet::ModuleTool::InstalledModules do
19
19
  it 'works when given a semantic version' do
20
20
  mod = PuppetSpec::Modules.create('goodsemver', @modpath, :metadata => {:version => '1.2.3'})
21
21
  installed = described_class.new(@env)
22
- expect(installed.modules["puppetlabs-#{mod.name}"].version).to eq(Semantic::Version.parse('1.2.3'))
22
+ expect(installed.modules["puppetlabs-#{mod.name}"].version).to eq(SemanticPuppet::Version.parse('1.2.3'))
23
23
  end
24
24
 
25
25
  it 'defaults when not given a semantic version' do
26
26
  mod = PuppetSpec::Modules.create('badsemver', @modpath, :metadata => {:version => 'banana'})
27
27
  Puppet.expects(:warning).with(regexp_matches(/Semantic Version/))
28
28
  installed = described_class.new(@env)
29
- expect(installed.modules["puppetlabs-#{mod.name}"].version).to eq(Semantic::Version.parse('0.0.0'))
29
+ expect(installed.modules["puppetlabs-#{mod.name}"].version).to eq(SemanticPuppet::Version.parse('0.0.0'))
30
30
  end
31
31
 
32
32
  it 'defaults when not given a full semantic version' do
33
33
  mod = PuppetSpec::Modules.create('badsemver', @modpath, :metadata => {:version => '1.2'})
34
34
  Puppet.expects(:warning).with(regexp_matches(/Semantic Version/))
35
35
  installed = described_class.new(@env)
36
- expect(installed.modules["puppetlabs-#{mod.name}"].version).to eq(Semantic::Version.parse('0.0.0'))
36
+ expect(installed.modules["puppetlabs-#{mod.name}"].version).to eq(SemanticPuppet::Version.parse('0.0.0'))
37
37
  end
38
38
 
39
39
  it 'still works if there is an invalid version in one of the modules' do
@@ -42,8 +42,8 @@ describe Puppet::ModuleTool::InstalledModules do
42
42
  mod3 = PuppetSpec::Modules.create('notquitesemver', @modpath, :metadata => {:version => '1.2'})
43
43
  Puppet.expects(:warning).with(regexp_matches(/Semantic Version/)).twice
44
44
  installed = described_class.new(@env)
45
- expect(installed.modules["puppetlabs-#{mod1.name}"].version).to eq(Semantic::Version.parse('0.0.0'))
46
- expect(installed.modules["puppetlabs-#{mod2.name}"].version).to eq(Semantic::Version.parse('1.2.3'))
47
- expect(installed.modules["puppetlabs-#{mod3.name}"].version).to eq(Semantic::Version.parse('0.0.0'))
45
+ expect(installed.modules["puppetlabs-#{mod1.name}"].version).to eq(SemanticPuppet::Version.parse('0.0.0'))
46
+ expect(installed.modules["puppetlabs-#{mod2.name}"].version).to eq(SemanticPuppet::Version.parse('1.2.3'))
47
+ expect(installed.modules["puppetlabs-#{mod3.name}"].version).to eq(SemanticPuppet::Version.parse('0.0.0'))
48
48
  end
49
49
  end
@@ -288,21 +288,21 @@ TREE
288
288
  it 'parses a dependency without a version range expression' do
289
289
  name, range, expr = subject.parse_module_dependency('source', 'name' => 'foo-bar')
290
290
  expect(name).to eql('foo-bar')
291
- expect(range).to eql(Semantic::VersionRange.parse('>= 0.0.0'))
291
+ expect(range).to eql(SemanticPuppet::VersionRange.parse('>= 0.0.0'))
292
292
  expect(expr).to eql('>= 0.0.0')
293
293
  end
294
294
 
295
295
  it 'parses a dependency with a version range expression' do
296
296
  name, range, expr = subject.parse_module_dependency('source', 'name' => 'foo-bar', 'version_requirement' => '1.2.x')
297
297
  expect(name).to eql('foo-bar')
298
- expect(range).to eql(Semantic::VersionRange.parse('1.2.x'))
298
+ expect(range).to eql(SemanticPuppet::VersionRange.parse('1.2.x'))
299
299
  expect(expr).to eql('1.2.x')
300
300
  end
301
301
 
302
302
  it 'does not raise an error on invalid version range expressions' do
303
303
  name, range, expr = subject.parse_module_dependency('source', 'name' => 'foo-bar', 'version_requirement' => 'nope')
304
304
  expect(name).to eql('foo-bar')
305
- expect(range).to eql(Semantic::VersionRange::EMPTY_RANGE)
305
+ expect(range).to eql(SemanticPuppet::VersionRange::EMPTY_RANGE)
306
306
  expect(expr).to eql('nope')
307
307
  end
308
308
  end
@@ -296,4 +296,14 @@ describe Puppet::Network::HTTP::Connection do
296
296
  expect(request['authorization']).to match(/^Basic/)
297
297
  end.returns(httpok)
298
298
  end
299
+
300
+ it "sets HTTP User-Agent header" do
301
+ puppet_ua = "Puppet/#{Puppet.version} Ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} (#{RUBY_PLATFORM})"
302
+
303
+ Net::HTTP.any_instance.expects(:request).with do |request|
304
+ expect(request['User-Agent']).to eq(puppet_ua)
305
+ end.returns(httpok)
306
+
307
+ subject.get('/path')
308
+ end
299
309
  end
@@ -136,7 +136,7 @@ describe Puppet::Network::HTTP::WEBrick do
136
136
  log = make_absolute("/master/log")
137
137
  Puppet[:masterhttplog] = log
138
138
 
139
- File.expects(:open).with(log, "a+").returns @filehandle
139
+ File.expects(:open).with(log, "a+:UTF-8").returns @filehandle
140
140
 
141
141
  server.setup_logger
142
142
  end
@@ -492,13 +492,13 @@ describe 'Puppet::Pops::Evaluator::EvaluatorImpl/AccessOperator' do
492
492
  it 'produces a NotUndef instance with String type when given a literal String' do
493
493
  type_expr = fqr('NotUndef')[literal('hey')]
494
494
  tf = Puppet::Pops::Types::TypeFactory
495
- expect(evaluate(type_expr)).to be_the_type(tf.not_undef(tf.string(nil, 'hey')))
495
+ expect(evaluate(type_expr)).to be_the_type(tf.not_undef(tf.string('hey')))
496
496
  end
497
497
 
498
498
  it 'Produces Optional instance with String type when using a String argument' do
499
499
  type_expr = fqr('Optional')[literal('hey')]
500
500
  tf = Puppet::Pops::Types::TypeFactory
501
- expect(evaluate(type_expr)).to be_the_type(tf.optional(tf.string(nil, 'hey')))
501
+ expect(evaluate(type_expr)).to be_the_type(tf.optional(tf.string('hey')))
502
502
  end
503
503
 
504
504
  # Type Type
@@ -26,27 +26,27 @@ describe 'when converting to 3.x' do
26
26
  end
27
27
 
28
28
  it 'does not convert a SemVer instance to string' do
29
- v = Semantic::Version.parse('1.0.0')
29
+ v = SemanticPuppet::Version.parse('1.0.0')
30
30
  expect(converter.convert(v, {}, nil)).to equal(v)
31
31
  end
32
32
 
33
33
  it 'converts the symbol :undef to the undef value' do
34
- v = Semantic::Version.parse('1.0.0')
34
+ v = SemanticPuppet::Version.parse('1.0.0')
35
35
  expect(converter.convert(:undef, {}, 'undef value')).to eql('undef value')
36
36
  end
37
37
 
38
38
  it 'converts the nil to the undef value' do
39
- v = Semantic::Version.parse('1.0.0')
39
+ v = SemanticPuppet::Version.parse('1.0.0')
40
40
  expect(converter.convert(nil, {}, 'undef value')).to eql('undef value')
41
41
  end
42
42
 
43
43
  it 'does not convert a symbol nested in an array' do
44
- v = Semantic::Version.parse('1.0.0')
44
+ v = SemanticPuppet::Version.parse('1.0.0')
45
45
  expect(converter.convert({'foo' => :undef}, {}, 'undef value')).to eql({'foo' => :undef})
46
46
  end
47
47
 
48
48
  it 'converts nil to :undef when nested in an array' do
49
- v = Semantic::Version.parse('1.0.0')
49
+ v = SemanticPuppet::Version.parse('1.0.0')
50
50
  expect(converter.convert({'foo' => nil}, {}, 'undef value')).to eql({'foo' => :undef})
51
51
  end
52
52
 
@@ -56,12 +56,12 @@ describe 'when converting to 3.x' do
56
56
  end
57
57
 
58
58
  it 'does not convert a Version instance to string' do
59
- v = Semantic::Version.parse('1.0.0')
59
+ v = SemanticPuppet::Version.parse('1.0.0')
60
60
  expect(converter.convert(v, {}, nil)).to equal(v)
61
61
  end
62
62
 
63
63
  it 'does not convert a VersionRange instance to string' do
64
- v = Semantic::VersionRange.parse('>=1.0.0')
64
+ v = SemanticPuppet::VersionRange.parse('>=1.0.0')
65
65
  expect(converter.convert(v, {}, nil)).to equal(v)
66
66
  end
67
67
 
@@ -95,13 +95,13 @@ describe 'when converting to 3.x' do
95
95
  end
96
96
 
97
97
  it 'converts a Version instance to string' do
98
- c = converter.convert(Semantic::Version.parse('1.0.0'), {}, nil)
98
+ c = converter.convert(SemanticPuppet::Version.parse('1.0.0'), {}, nil)
99
99
  expect(c).to be_a(String)
100
100
  expect(c).to eql('1.0.0')
101
101
  end
102
102
 
103
103
  it 'converts a VersionRange instance to string' do
104
- c = converter.convert(Semantic::VersionRange.parse('>=1.0.0'), {}, nil)
104
+ c = converter.convert(SemanticPuppet::VersionRange.parse('>=1.0.0'), {}, nil)
105
105
  expect(c).to be_a(String)
106
106
  expect(c).to eql('>=1.0.0')
107
107
  end
@@ -0,0 +1,172 @@
1
+ require 'spec_helper'
2
+ require 'puppet_spec/files'
3
+ require 'puppet/pops'
4
+ require 'puppet/loaders'
5
+
6
+ describe 'Environment loader' do
7
+ include PuppetSpec::Files
8
+
9
+ let(:env_name) { 'spec' }
10
+ let(:code_dir) { Puppet[:environmentpath] }
11
+ let(:env_dir) { File.join(code_dir, env_name) }
12
+ let(:env) { Puppet::Node::Environment.create(env_name.to_sym, [File.join(populated_code_dir, env_name, 'modules')]) }
13
+ let(:populated_code_dir) do
14
+ dir_contained_in(code_dir, env_name => env_content)
15
+ PuppetSpec::Files.record_tmp(env_dir)
16
+ code_dir
17
+ end
18
+
19
+ let(:env_content) {
20
+ {
21
+ 'lib' => {
22
+ 'puppet' => {
23
+ 'functions' => {
24
+ 'ruby_foo.rb' => <<-RUBY.unindent,
25
+ Puppet::Functions.create_function(:ruby_foo) do
26
+ def ruby_foo()
27
+ 'ruby_foo'
28
+ end
29
+ end
30
+ RUBY
31
+ 'environment' => {
32
+ 'ruby_foo.rb' => <<-RUBY.unindent
33
+ Puppet::Functions.create_function(:'environment::ruby_foo') do
34
+ def ruby_foo()
35
+ 'environment::ruby_foo'
36
+ end
37
+ end
38
+ RUBY
39
+ },
40
+ 'someother' => {
41
+ 'ruby_foo.rb' => <<-RUBY.unindent
42
+ Puppet::Functions.create_function(:'someother::ruby_foo') do
43
+ def ruby_foo()
44
+ 'someother::ruby_foo'
45
+ end
46
+ end
47
+ RUBY
48
+ },
49
+ }
50
+ }
51
+ },
52
+ 'functions' => {
53
+ 'puppet_foo.pp' => <<-PUPPET.unindent,
54
+ function puppet_foo() {
55
+ 'puppet_foo'
56
+ }
57
+ PUPPET
58
+ 'environment' => {
59
+ 'puppet_foo.pp' => <<-PUPPET.unindent,
60
+ function environment::puppet_foo() {
61
+ 'environment::puppet_foo'
62
+ }
63
+ PUPPET
64
+ },
65
+ 'someother' => {
66
+ 'puppet_foo.pp' => <<-PUPPET.unindent,
67
+ function somether::puppet_foo() {
68
+ 'someother::puppet_foo'
69
+ }
70
+ PUPPET
71
+ }
72
+ },
73
+ 'types' => {
74
+ 'footype.pp' => <<-PUPPET.unindent,
75
+ type FooType = Enum['foo', 'bar', 'baz']
76
+ PUPPET
77
+ 'environment' => {
78
+ 'footype.pp' => <<-PUPPET.unindent,
79
+ type Environment::FooType = Integer[0,9]
80
+ PUPPET
81
+ },
82
+ 'someother' => {
83
+ 'footype.pp' => <<-PUPPET.unindent,
84
+ type SomeOther::FooType = Float[0.0,9.0]
85
+ PUPPET
86
+ }
87
+ }
88
+ }
89
+ }
90
+
91
+ before(:each) do
92
+ Puppet.push_context(:loaders => Puppet::Pops::Loaders.new(env))
93
+ end
94
+
95
+ after(:each) do
96
+ Puppet.pop_context
97
+ end
98
+
99
+ def load_or_nil(type, name)
100
+ found = Puppet::Pops::Loaders.find_loader(nil).load_typed(Puppet::Pops::Loader::TypedName.new(type, name))
101
+ found.nil? ? nil : found.value
102
+ end
103
+
104
+ context 'loading a Ruby function' do
105
+ it 'loads from global name space' do
106
+ function = load_or_nil(:function, 'ruby_foo')
107
+ expect(function).not_to be_nil
108
+
109
+ expect(function.class.name).to eq('ruby_foo')
110
+ expect(function).to be_a(Puppet::Functions::Function)
111
+ end
112
+
113
+ it 'loads from environment name space' do
114
+ function = load_or_nil(:function, 'environment::ruby_foo')
115
+ expect(function).not_to be_nil
116
+
117
+ expect(function.class.name).to eq('environment::ruby_foo')
118
+ expect(function).to be_a(Puppet::Functions::Function)
119
+ end
120
+
121
+ it 'fails to load from namespaces other than global or environment' do
122
+ function = load_or_nil(:function, 'someother::ruby_foo')
123
+ expect(function).to be_nil
124
+ end
125
+ end
126
+
127
+ context 'loading a Puppet function' do
128
+ it 'loads from global name space' do
129
+ function = load_or_nil(:function, 'puppet_foo')
130
+ expect(function).not_to be_nil
131
+
132
+ expect(function.class.name).to eq('puppet_foo')
133
+ expect(function).to be_a(Puppet::Functions::PuppetFunction)
134
+ end
135
+
136
+ it 'loads from environment name space' do
137
+ function = load_or_nil(:function, 'environment::puppet_foo')
138
+ expect(function).not_to be_nil
139
+
140
+ expect(function.class.name).to eq('environment::puppet_foo')
141
+ expect(function).to be_a(Puppet::Functions::PuppetFunction)
142
+ end
143
+
144
+ it 'fails to load from namespaces other than global or environment' do
145
+ function = load_or_nil(:function, 'someother::puppet_foo')
146
+ expect(function).to be_nil
147
+ end
148
+ end
149
+
150
+ context 'loading a Puppet type' do
151
+ it 'loads from global name space' do
152
+ type = load_or_nil(:type, 'footype')
153
+ expect(type).not_to be_nil
154
+
155
+ expect(type).to be_a(Puppet::Pops::Types::PTypeAliasType)
156
+ expect(type.name).to eq('FooType')
157
+ end
158
+
159
+ it 'loads from environment name space' do
160
+ type = load_or_nil(:type, 'environment::footype')
161
+ expect(type).not_to be_nil
162
+
163
+ expect(type).to be_a(Puppet::Pops::Types::PTypeAliasType)
164
+ expect(type.name).to eq('Environment::FooType')
165
+ end
166
+
167
+ it 'fails to load from namespaces other than global or environment' do
168
+ type = load_or_nil(:type, 'someother::footype')
169
+ expect(type).to be_nil
170
+ end
171
+ end
172
+ end