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
@@ -65,6 +65,11 @@ describe provider_class do
65
65
  expect(nmap.properties[:version]).to eq(nmap.properties[:latest])
66
66
  end
67
67
 
68
+ it "should return an empty array when pkg calls raise an exception" do
69
+ provider_class.stubs(:get_query).raises(Puppet::ExecutionFailure, 'An error occurred.')
70
+ expect(provider_class.instances).to eq([])
71
+ end
72
+
68
73
  describe "version" do
69
74
  it "should retrieve the correct version of the current package" do
70
75
  zsh = provider_class.instances.find {|i| i.properties[:origin] == 'shells/zsh' }
@@ -111,6 +116,13 @@ describe provider_class do
111
116
  end
112
117
  end
113
118
 
119
+ context "#prefetch" do
120
+ it "should fail gracefully when " do
121
+ provider_class.stubs(:instances).returns([])
122
+ expect{ provider_class.prefetch({}) }.to_not raise_error
123
+ end
124
+ end
125
+
114
126
  context "#query" do
115
127
  it "should return the installed version if present" do
116
128
  provider_class.prefetch({installed_name => installed_resource})
@@ -203,7 +203,7 @@ describe provider_class do
203
203
  describe "#latest" do
204
204
  it "retrieves version string after querying rpm for version from source file" do
205
205
  resource.expects(:[]).with(:source).returns('source-string')
206
- Puppet::Util::Execution.expects(:execfail).with(["/bin/rpm", "-q", "--qf", nevra_format, "-p", "source-string"], Puppet::Error).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
206
+ Puppet::Util::Execution.expects(:execfail).with(["/bin/rpm", "-q", "--qf", "'#{nevra_format}'", "-p", "source-string"], Puppet::Error).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
207
207
  expect(provider.latest).to eq("1.2.3.4-5.el4")
208
208
  end
209
209
  end
@@ -218,7 +218,7 @@ describe provider_class do
218
218
 
219
219
  describe "on a modern RPM" do
220
220
  before(:each) do
221
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '--nosignature', '--nodigest', "--qf", nevra_format], execute_options).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
221
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '--nosignature', '--nodigest', "--qf", "'#{nevra_format}'"], execute_options).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
222
222
  end
223
223
 
224
224
  let(:rpm_version) { "RPM version 4.10.0\n" }
@@ -231,7 +231,7 @@ describe provider_class do
231
231
 
232
232
  describe "on an ancient RPM" do
233
233
  before(:each) do
234
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '', '', '--qf', nevra_format], execute_options).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
234
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '', '', '--qf', "'#{nevra_format}'"], execute_options).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
235
235
  end
236
236
 
237
237
  let(:rpm_version) { "RPM version 3.0.6\n" }
@@ -244,7 +244,7 @@ describe provider_class do
244
244
 
245
245
  describe "when uninstalled with options" do
246
246
  before(:each) do
247
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '--nosignature', '--nodigest', "--qf", nevra_format], execute_options).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
247
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", "myresource", '--nosignature', '--nodigest', "--qf", "'#{nevra_format}'"], execute_options).returns("myresource 0 1.2.3.4 5.el4 noarch\n")
248
248
  end
249
249
 
250
250
  let(:resource) do
@@ -266,7 +266,7 @@ describe provider_class do
266
266
  describe "parsing" do
267
267
  def parser_test(rpm_output_string, gold_hash, number_of_debug_logs = 0)
268
268
  Puppet.expects(:debug).times(number_of_debug_logs)
269
- Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", resource_name, "--nosignature", "--nodigest", "--qf", nevra_format], execute_options).returns(rpm_output_string)
269
+ Puppet::Util::Execution.expects(:execute).with(["/bin/rpm", "-q", resource_name, "--nosignature", "--nodigest", "--qf", "'#{nevra_format}'"], execute_options).returns(rpm_output_string)
270
270
  expect(provider.query).to eq(gold_hash)
271
271
  end
272
272
 
@@ -306,7 +306,7 @@ describe provider_class do
306
306
  describe "when the package is not found" do
307
307
  before do
308
308
  Puppet.expects(:debug).never
309
- expected_args = ["/bin/rpm", "-q", resource_name, "--nosignature", "--nodigest", "--qf", nevra_format]
309
+ expected_args = ["/bin/rpm", "-q", resource_name, "--nosignature", "--nodigest", "--qf", "'#{nevra_format}'"]
310
310
  Puppet::Util::Execution.expects(:execute).with(expected_args, execute_options).raises Puppet::ExecutionFailure.new("package #{resource_name} is not installed")
311
311
  end
312
312
 
@@ -317,7 +317,7 @@ describe provider_class do
317
317
 
318
318
  it "does not log or fail if allow_virtual is true" do
319
319
  resource[:allow_virtual] = true
320
- expected_args = ['/bin/rpm', '-q', resource_name, '--nosignature', '--nodigest', '--qf', nevra_format, '--whatprovides']
320
+ expected_args = ['/bin/rpm', '-q', resource_name, '--nosignature', '--nodigest', '--qf', "'#{nevra_format}'", '--whatprovides']
321
321
  Puppet::Util::Execution.expects(:execute).with(expected_args, execute_options).raises Puppet::ExecutionFailure.new("package #{resource_name} is not provided")
322
322
  expect(provider.query).to be_nil
323
323
  end
@@ -325,7 +325,7 @@ describe provider_class do
325
325
 
326
326
  it "parses virtual package" do
327
327
  provider.resource[:allow_virtual] = true
328
- expected_args = ["/bin/rpm", "-q", resource_name, "--nosignature", "--nodigest", "--qf", nevra_format]
328
+ expected_args = ["/bin/rpm", "-q", resource_name, "--nosignature", "--nodigest", "--qf", "'#{nevra_format}'"]
329
329
  Puppet::Util::Execution.expects(:execute).with(expected_args, execute_options).raises Puppet::ExecutionFailure.new("package #{resource_name} is not installed")
330
330
  Puppet::Util::Execution.expects(:execute).with(expected_args + ["--whatprovides"], execute_options).returns "myresource 0 1.2.3.4 5.el4 noarch\n"
331
331
  expect(provider.query).to eq({
@@ -18,6 +18,8 @@ describe provider_class, :if => Puppet.features.posix? do
18
18
 
19
19
  FileTest.stubs(:file?).with('/usr/sbin/svcadm').returns true
20
20
  FileTest.stubs(:executable?).with('/usr/sbin/svcadm').returns true
21
+ FileTest.stubs(:file?).with('/usr/sbin/svccfg').returns true
22
+ FileTest.stubs(:executable?).with('/usr/sbin/svccfg').returns true
21
23
  FileTest.stubs(:file?).with('/usr/bin/svcs').returns true
22
24
  FileTest.stubs(:executable?).with('/usr/bin/svcs').returns true
23
25
  Facter.stubs(:value).with(:operatingsystem).returns('Solaris')
@@ -74,9 +76,9 @@ describe provider_class, :if => Puppet.features.posix? do
74
76
  @provider.expects(:svcs).with('-H', '-o', 'state,nstate', "/system/myservice").returns("online\t-")
75
77
  @provider.status
76
78
  end
77
- it "should return stopped if svcs can't find the service" do
79
+ it "should return absent if svcs can't find the service" do
78
80
  @provider.stubs(:svcs).raises(Puppet::ExecutionFailure.new("no svc found"))
79
- expect(@provider.status).to eq(:stopped)
81
+ expect(@provider.status).to eq(:absent)
80
82
  end
81
83
  it "should return running if online in svcs output" do
82
84
  @provider.stubs(:svcs).returns("online\t-")
@@ -107,14 +109,14 @@ describe provider_class, :if => Puppet.features.posix? do
107
109
  describe "when starting" do
108
110
  it "should enable the service if it is not enabled" do
109
111
  @provider.expects(:status).returns :stopped
110
- @provider.expects(:texecute).with(:start, ['/usr/sbin/svcadm', :enable, '-s', '/system/myservice'], true)
112
+ @provider.expects(:texecute).with(:start, ['/usr/sbin/svcadm', :enable, '-rs', '/system/myservice'], true)
111
113
  @provider.expects(:wait).with('online')
112
114
  @provider.start
113
115
  end
114
116
 
115
117
  it "should always execute external command 'svcadm enable /system/myservice'" do
116
118
  @provider.expects(:status).returns :running
117
- @provider.expects(:texecute).with(:start, ['/usr/sbin/svcadm', :enable, '-s', '/system/myservice'], true)
119
+ @provider.expects(:texecute).with(:start, ['/usr/sbin/svcadm', :enable, '-rs', '/system/myservice'], true)
118
120
  @provider.expects(:wait).with('online')
119
121
  @provider.start
120
122
  end
@@ -135,7 +137,7 @@ describe provider_class, :if => Puppet.features.posix? do
135
137
 
136
138
  it "should error if timeout occurs while starting the service" do
137
139
  @provider.expects(:status).returns :stopped
138
- @provider.expects(:texecute).with(:start, ["/usr/sbin/svcadm", :enable, "-s", "/system/myservice"], true)
140
+ @provider.expects(:texecute).with(:start, ["/usr/sbin/svcadm", :enable, '-rs', "/system/myservice"], true)
139
141
  Timeout.expects(:timeout).with(60).raises(Timeout::Error)
140
142
  expect { @provider.start }.to raise_error Puppet::Error, ('Timed out waiting for /system/myservice to transition states')
141
143
  end
@@ -150,7 +152,7 @@ describe provider_class, :if => Puppet.features.posix? do
150
152
 
151
153
  it "should import the manifest if service is missing" do
152
154
  @provider.expects(:svccfg).with(:import, "/tmp/myservice.xml")
153
- @provider.expects(:texecute).with(:start, ["/usr/sbin/svcadm", :enable, "-s", "/system/myservice"], true)
155
+ @provider.expects(:texecute).with(:start, ["/usr/sbin/svcadm", :enable, '-rs', "/system/myservice"], true)
154
156
  @provider.expects(:wait).with('online')
155
157
  @provider.expects(:svcs).with('-H', '-o', 'state,nstate', "/system/myservice").returns("online\t-")
156
158
  @provider.start
@@ -164,13 +166,13 @@ describe provider_class, :if => Puppet.features.posix? do
164
166
 
165
167
  describe "when stopping" do
166
168
  it "should execute external command 'svcadm disable /system/myservice'" do
167
- @provider.expects(:texecute).with(:stop, ["/usr/sbin/svcadm", :disable, "-s", "/system/myservice"], true)
169
+ @provider.expects(:texecute).with(:stop, ["/usr/sbin/svcadm", :disable, '-s', "/system/myservice"], true)
168
170
  @provider.expects(:wait).with('offline', 'disabled', 'uninitialized')
169
171
  @provider.stop
170
172
  end
171
173
 
172
174
  it "should error if timeout occurs while stopping the service" do
173
- @provider.expects(:texecute).with(:stop, ["/usr/sbin/svcadm", :disable, "-s", "/system/myservice"], true)
175
+ @provider.expects(:texecute).with(:stop, ["/usr/sbin/svcadm", :disable, '-s', "/system/myservice"], true)
174
176
  Timeout.expects(:timeout).with(60).raises(Timeout::Error)
175
177
  expect { @provider.stop }.to raise_error Puppet::Error, ('Timed out waiting for /system/myservice to transition states')
176
178
  end
@@ -179,7 +181,7 @@ describe provider_class, :if => Puppet.features.posix? do
179
181
  describe "when restarting" do
180
182
 
181
183
  it "should error if timeout occurs while restarting the service" do
182
- @provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "-s", "/system/myservice"], true)
184
+ @provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, '-s', "/system/myservice"], true)
183
185
  Timeout.expects(:timeout).with(60).raises(Timeout::Error)
184
186
  expect { @provider.restart }.to raise_error Puppet::Error, ('Timed out waiting for /system/myservice to transition states')
185
187
  end
@@ -196,7 +198,7 @@ describe provider_class, :if => Puppet.features.posix? do
196
198
  context 'with :operatingsystemrelease == 11.2' do
197
199
  it "should call 'svcadm restart -s /system/myservice'" do
198
200
  Facter.stubs(:value).with(:operatingsystemrelease).returns '11.2'
199
- @provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "-s", "/system/myservice"], true)
201
+ @provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, '-s', "/system/myservice"], true)
200
202
  @provider.expects(:wait).with('online')
201
203
  @provider.restart
202
204
  end
@@ -205,7 +207,7 @@ describe provider_class, :if => Puppet.features.posix? do
205
207
  context 'with :operatingsystemrelease > 11.2' do
206
208
  it "should call 'svcadm restart -s /system/myservice'" do
207
209
  Facter.stubs(:value).with(:operatingsystemrelease).returns '11.3'
208
- @provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, "-s", "/system/myservice"], true)
210
+ @provider.expects(:texecute).with(:restart, ["/usr/sbin/svcadm", :restart, '-s', "/system/myservice"], true)
209
211
  @provider.expects(:wait).with('online')
210
212
  @provider.restart
211
213
  end
@@ -21,7 +21,7 @@ describe Puppet::Type.type(:service).provider(:systemd) do
21
21
  described_class.new(:name => 'sshd.service')
22
22
  end
23
23
 
24
- osfamily = [ 'archlinux' ]
24
+ osfamily = [ 'archlinux', 'coreos' ]
25
25
 
26
26
  osfamily.each do |osfamily|
27
27
  it "should be the default provider on #{osfamily}" do
@@ -224,6 +224,13 @@ Jun 14 21:43:23 foo.example.com systemd[1]: sshd.service lacks both ExecStart= a
224
224
  expect(provider.enabled?).to eq(:false)
225
225
  end
226
226
 
227
+ it "should return :false if the service is indirect" do
228
+ provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service'))
229
+ provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "indirect\n"
230
+ $CHILD_STATUS.stubs(:exitstatus).returns(0)
231
+ expect(provider.enabled?).to eq(:false)
232
+ end
233
+
227
234
  it "should return :false if the service is masked and the resource is attempting to be disabled" do
228
235
  provider = described_class.new(Puppet::Type.type(:service).new(:name => 'sshd.service', :enable => false))
229
236
  provider.expects(:execute).with(['/bin/systemctl','is-enabled','sshd.service'], :failonfail => false).returns "masked\n"
@@ -438,6 +438,7 @@ describe Puppet::Type.type(:user).provider(:useradd) do
438
438
  end
439
439
 
440
440
  it "should raise an error if the shell is not executable" do
441
+ FileTest.stubs(:executable?).with('LICENSE').returns false
441
442
  resource[:shell] = 'LICENSE'
442
443
  expect { provider.check_valid_shell }.to raise_error(Puppet::Error, /Shell LICENSE must be executable/)
443
444
  end
@@ -39,6 +39,20 @@ describe Puppet do
39
39
  expect($LOAD_PATH).to include two
40
40
  end
41
41
 
42
+ context "Puppet::OLDEST_RECOMMENDED_RUBY_VERSION" do
43
+ it "should have an oldest recommended ruby version constant" do
44
+ expect(Puppet::OLDEST_RECOMMENDED_RUBY_VERSION).not_to be_nil
45
+ end
46
+
47
+ it "should be a string" do
48
+ expect(Puppet::OLDEST_RECOMMENDED_RUBY_VERSION).to be_a_kind_of(String)
49
+ end
50
+
51
+ it "should match a semver version" do
52
+ expect(SemVer).to be_valid(Puppet::OLDEST_RECOMMENDED_RUBY_VERSION)
53
+ end
54
+ end
55
+
42
56
  context "newtype" do
43
57
  it "should issue a deprecation warning" do
44
58
  subject.expects(:deprecation_warning).with("Creating sometype via Puppet.newtype is deprecated and will be removed in a future release. Use Puppet::Type.newtype instead.")
@@ -67,7 +67,8 @@ describe Puppet::Resource::Catalog, "when compiling" do
67
67
  Puppet[:classfile] = File.expand_path("/class/file")
68
68
 
69
69
  fh = mock 'filehandle'
70
- File.expects(:open).with(Puppet[:classfile], "w").yields fh
70
+ classfile = Puppet.settings.setting(:classfile)
71
+ Puppet::FileSystem.expects(:open).with(classfile.value, classfile.mode.to_i(8), "w:UTF-8").yields fh
71
72
 
72
73
  fh.expects(:puts).with "foo\nbar"
73
74
 
@@ -719,7 +720,7 @@ describe Puppet::Resource::Catalog, "when compiling" do
719
720
  end
720
721
 
721
722
  it "should only write when it is a host catalog" do
722
- File.expects(:open).with(@file).never
723
+ Puppet::FileSystem.expects(:open).with(@file, 0640, "w:UTF-8").never
723
724
  @catalog.host_config = false
724
725
  Puppet[:graph] = true
725
726
  @catalog.write_graph(@name)
@@ -850,10 +851,15 @@ describe Puppet::Resource::Catalog, "when converting a resource catalog to pson"
850
851
  Puppet[:rich_data] = true
851
852
  end
852
853
 
854
+ after(:each) do
855
+ Puppet[:rich_data] = false
856
+ end
857
+
858
+
853
859
  let(:catalog_w_regexp) { compile_to_catalog("notify {'foo': message => /[a-z]+/ }") }
854
860
 
855
861
  it 'should generate ext_parameters for parameter values that are not Data' do
856
- expect(catalog_w_regexp.to_json).to include('"ext_parameters":{"message":[48,"[a-z]+"]}')
862
+ expect(catalog_w_regexp.to_json).to include('"ext_parameters":{"message":[[48,"[a-z]+"]]}')
857
863
  end
858
864
 
859
865
  it 'should validate ext_parameters against the schema' do
@@ -871,16 +877,16 @@ describe Puppet::Resource::Catalog, "when converting a resource catalog to pson"
871
877
  catalog = compile_to_catalog("notify {'foo': message => SemVer('1.0.0') }")
872
878
  catalog2 = Puppet::Resource::Catalog.from_data_hash(JSON.parse(catalog.to_json))
873
879
  message = catalog2.resource('notify', 'foo')['message']
874
- expect(message).to be_a(Semantic::Version)
875
- expect(message).to eql(Semantic::Version.parse('1.0.0'))
880
+ expect(message).to be_a(SemanticPuppet::Version)
881
+ expect(message).to eql(SemanticPuppet::Version.parse('1.0.0'))
876
882
  end
877
883
 
878
884
  it 'should read and convert ext_parameters containing VersionRange from json' do
879
885
  catalog = compile_to_catalog("notify {'foo': message => SemVerRange('>=1.0.0') }")
880
886
  catalog2 = Puppet::Resource::Catalog.from_data_hash(JSON.parse(catalog.to_json))
881
887
  message = catalog2.resource('notify', 'foo')['message']
882
- expect(message).to be_a(Semantic::VersionRange)
883
- expect(message).to eql(Semantic::VersionRange.parse('>=1.0.0'))
888
+ expect(message).to be_a(SemanticPuppet::VersionRange)
889
+ expect(message).to eql(SemanticPuppet::VersionRange.parse('>=1.0.0'))
884
890
  end
885
891
 
886
892
  it 'should read and convert ext_parameters containing Timespan from json' do
@@ -904,7 +910,7 @@ describe Puppet::Resource::Catalog, "when converting a resource catalog to pson"
904
910
  catalog2 = Puppet::Resource::Catalog.from_data_hash(JSON.parse(catalog.to_json))
905
911
  message = catalog2.resource('notify', 'foo')['message']
906
912
  expect(message).to be_a(Hash)
907
- expect(message['version']).to eql(Semantic::Version.parse('1.0.0'))
913
+ expect(message['version']).to eql(SemanticPuppet::Version.parse('1.0.0'))
908
914
  expect(message['time']).to eql(Puppet::Pops::Time::Timestamp.parse('2016-09-15T08:32:16.123 UTC'))
909
915
  end
910
916
 
@@ -913,7 +919,7 @@ describe Puppet::Resource::Catalog, "when converting a resource catalog to pson"
913
919
  catalog2 = Puppet::Resource::Catalog.from_data_hash(JSON.parse(catalog.to_json))
914
920
  message = catalog2.resource('notify', 'foo')['message']
915
921
  expect(message).to be_a(Array)
916
- expect(message[0]).to eql(Semantic::Version.parse('1.0.0'))
922
+ expect(message[0]).to eql(SemanticPuppet::Version.parse('1.0.0'))
917
923
  expect(message[1]).to eql(Puppet::Pops::Time::Timestamp.parse('2016-09-15T08:32:16.123 UTC'))
918
924
  end
919
925
  end
@@ -8,6 +8,10 @@ describe Puppet::Resource do
8
8
  let(:basepath) { make_absolute("/somepath") }
9
9
  let(:environment) { Puppet::Node::Environment.create(:testing, []) }
10
10
 
11
+ def expect_lookup(key)
12
+ Puppet::Pops::Lookup::GlobalDataProvider.any_instance.expects(:unchecked_key_lookup).with(Puppet::Pops::Lookup::LookupKey.new(key), any_parameters)
13
+ end
14
+
11
15
  [:catalog, :file, :line].each do |attr|
12
16
  it "should have an #{attr} attribute" do
13
17
  resource = Puppet::Resource.new("file", "/my/file")
@@ -337,15 +341,14 @@ describe Puppet::Resource do
337
341
  end
338
342
 
339
343
  it "should query the data_binding terminus using a namespaced key" do
340
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
341
- Puppet::DataBinding.indirection.expects(:find).with(
342
- 'apache::port', all_of(has_key(:environment), has_key(:variables)))
344
+ expect_lookup('lookup_options').throws(:no_such_key)
345
+ expect_lookup('apache::port')
343
346
  inject_and_set_defaults(resource, scope)
344
347
  end
345
348
 
346
349
  it "should use the value from the data_binding terminus" do
347
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
348
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
350
+ expect_lookup('lookup_options').throws(:no_such_key)
351
+ expect_lookup('apache::port').returns('443')
349
352
 
350
353
  inject_and_set_defaults(resource, scope)
351
354
 
@@ -353,8 +356,8 @@ describe Puppet::Resource do
353
356
  end
354
357
 
355
358
  it 'should use the default value if no value is found using the data_binding terminus' do
356
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
357
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).throws(:no_such_key)
359
+ expect_lookup('lookup_options').throws(:no_such_key)
360
+ expect_lookup('apache::port').throws(:no_such_key)
358
361
 
359
362
  inject_and_set_defaults(resource, scope)
360
363
 
@@ -362,8 +365,8 @@ describe Puppet::Resource do
362
365
  end
363
366
 
364
367
  it 'should use the default value if an undef value is found using the data_binding terminus' do
365
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
366
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns(nil)
368
+ expect_lookup('lookup_options').throws(:no_such_key)
369
+ expect_lookup('apache::port').returns(nil)
367
370
 
368
371
  inject_and_set_defaults(resource, scope)
369
372
 
@@ -371,8 +374,8 @@ describe Puppet::Resource do
371
374
  end
372
375
 
373
376
  it "should fail with error message about data binding on a hiera failure" do
374
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
375
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).raises(Puppet::DataBinding::LookupError, 'Forgettabotit')
377
+ expect_lookup('lookup_options').throws(:no_such_key)
378
+ expect_lookup('apache::port').raises(Puppet::DataBinding::LookupError, 'Forgettabotit')
376
379
  expect {
377
380
  inject_and_set_defaults(resource, scope)
378
381
  }.to raise_error(Puppet::Error, /Lookup of key 'apache::port' failed: Forgettabotit/)
@@ -408,8 +411,8 @@ describe Puppet::Resource do
408
411
  end
409
412
 
410
413
  it "should use the value from the data_binding terminus when provided value is undef" do
411
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
412
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
414
+ expect_lookup('lookup_options').throws(:no_such_key)
415
+ expect_lookup('apache::port').returns('443')
413
416
 
414
417
  rs = Puppet::Parser::Resource.new("class", "apache", :scope => scope,
415
418
  :parameters => [Puppet::Parser::Resource::Param.new({ :name => 'port', :value => nil })])
@@ -425,8 +428,8 @@ describe Puppet::Resource do
425
428
  let(:resource) { Puppet::Parser::Resource.new("class", "apache", :scope => scope) }
426
429
 
427
430
  it "should use the value from the data_binding terminus" do
428
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
429
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns('443')
431
+ expect_lookup('lookup_options').throws(:no_such_key)
432
+ expect_lookup('apache::port').returns('443')
430
433
 
431
434
  inject_and_set_defaults(resource, scope)
432
435
 
@@ -434,8 +437,8 @@ describe Puppet::Resource do
434
437
  end
435
438
 
436
439
  it "should use an undef value from the data_binding terminus" do
437
- Puppet::DataBinding.indirection.expects(:find).with('lookup_options', any_parameters).throws(:no_such_key)
438
- Puppet::DataBinding.indirection.expects(:find).with('apache::port', any_parameters).returns(nil)
440
+ expect_lookup('lookup_options').throws(:no_such_key)
441
+ expect_lookup('apache::port').returns(nil)
439
442
 
440
443
  inject_and_set_defaults(resource, scope)
441
444
 
@@ -212,6 +212,20 @@ describe SemVer do
212
212
  expect(version.tiny).to eq(5)
213
213
  expect(version.special).to eq('-beta6')
214
214
  end
215
+
216
+ it 'should not log a deprecation warning when strict == off' do
217
+ Puppet[:strict] = :off
218
+ SemVer.new('1.2.3')
219
+ expect(@logs).to be_empty
220
+ end
221
+
222
+ it 'should log a deprecation warning unless strict == off' do
223
+ (Puppet.settings.setting(:strict).values - [:off]).each do |setting|
224
+ Puppet[:strict] = setting
225
+ SemVer.new('1.2.3')
226
+ expect(@logs.map(&:message)).to include(/Use of class Puppet::SemVer is deprecated. SemanticPuppet::Version or SemanticPuppet::VersionRange should be used instead/)
227
+ end
228
+ end
215
229
  end
216
230
 
217
231
  describe '#matched_by?' do
@@ -795,6 +795,12 @@ describe Puppet::SSL::CertificateAuthority do
795
795
  expect(@ca.list_certificates).to eq([cert1, cert2])
796
796
  end
797
797
 
798
+ it "should print a deprecation when using #list_certificates" do
799
+ Puppet::SSL::Certificate.indirection.stubs(:search).with("*").returns [:foo, :bar]
800
+ Puppet.expects(:deprecation_warning).with(regexp_matches(/list_certificates is deprecated/))
801
+ @ca.list_certificates
802
+ end
803
+
798
804
  describe "and printing certificates" do
799
805
  it "should return nil if the certificate cannot be found" do
800
806
  Puppet::SSL::Certificate.indirection.expects(:find).with("myhost").returns nil
@@ -927,7 +933,7 @@ describe Puppet::SSL::CertificateAuthority do
927
933
  expect(@ca.certificate_is_alive?(@cert)).to be_truthy
928
934
  end
929
935
 
930
- it "should used a cached instance of the x509 store" do
936
+ it "should use a cached instance of the x509 store" do
931
937
  OpenSSL::X509::Store.stubs(:new).returns(@store).once
932
938
 
933
939
  @cert.expects(:content).returns "mycert"
@@ -937,6 +943,11 @@ describe Puppet::SSL::CertificateAuthority do
937
943
  @ca.certificate_is_alive?(@cert)
938
944
  @ca.certificate_is_alive?(@cert)
939
945
  end
946
+
947
+ it "should be deprecated" do
948
+ Puppet.expects(:deprecation_warning).with(regexp_matches(/certificate_is_alive\? is deprecated/))
949
+ @ca.certificate_is_alive?(@cert)
950
+ end
940
951
  end
941
952
  end
942
953
 
@@ -182,6 +182,17 @@ describe Puppet::Transaction::AdditionalResourceGenerator do
182
182
  'Generator[thing]', 'Whit[completed_thing]')
183
183
  end
184
184
 
185
+ it "should tag the sentinel with the tags of the resource" do
186
+ graph = relationships_after_eval_generating(<<-MANIFEST, 'Generator[thing]')
187
+ generator { thing:
188
+ code => 'notify { hello: }',
189
+ tag => 'foo',
190
+ }
191
+ MANIFEST
192
+ whit = find_vertex(graph, :whit, "completed_thing")
193
+ expect(whit.tags).to be_superset(['thing', 'foo', 'generator'].to_set)
194
+ end
195
+
185
196
  it "should contain the generated resources in the same container as the generator" do
186
197
  catalog = compile_to_ral(<<-MANIFEST)
187
198
  class container {
@@ -351,13 +351,39 @@ describe Puppet::Type.type(:user) do
351
351
  @user = described_class.new(:name => 'foo', :comment => @value)
352
352
  end
353
353
 
354
- it "should be converted to ASCII_8BIT for ruby 1.9 / 2.0", :if => RUBY_VERSION < "2.1.0" && String.method_defined?(:encode) do
355
- expect(@user[:comment].encoding).to eq(Encoding::ASCII_8BIT)
356
- expect(@user[:comment]).to eq(@value.force_encoding(Encoding::ASCII_8BIT))
357
- end
354
+ describe "#insync" do
355
+ it "should delegate to the provider's #comments_insync? method if defined" do
356
+ # useradd subclasses nameservice and thus inherits #comments_insync?
357
+ user = described_class.new(:name => 'foo', :comment => @value, :provider => :useradd)
358
+ comment_property = user.properties.find {|p| p.name == :comment}
359
+ user.provider.expects(:comments_insync?)
360
+ comment_property.insync?('bar')
361
+ end
362
+
363
+ describe "#change_to_s" do
364
+ let(:is) { "\u2603" }
365
+ let(:should) { "\u06FF" }
366
+ let(:comment_property) { @user.properties.find { |p| p.name == :comment } }
367
+ context "given is and should strings with incompatible encoding" do
368
+ it "should return a formatted string" do
369
+ is.force_encoding(Encoding::ASCII_8BIT)
370
+ should.force_encoding(Encoding::UTF_8)
371
+ expect(Encoding.compatible?(is, should)).to be_falsey
372
+ # append Regexp with 'n' to set encoding to ASCII_8BIT
373
+ expect(comment_property.change_to_s(is,should)).to match(/changed '\xE2\x98\x83' to '\xDB\xBF'/n)
374
+ end
375
+ end
358
376
 
359
- it "must not be converted for ruby >= 2.1", :if => RUBY_VERSION >= "2.1.0" do
360
- expect(@user[:comment].encoding).to eq(Encoding::UTF_8)
377
+ context "given is and should strings with compatible encoding" do
378
+ it "should return a formatted string" do
379
+ is.force_encoding(Encoding::UTF_8)
380
+ should.force_encoding(Encoding::UTF_8)
381
+ expect(Encoding.compatible?(is, should)).to be_truthy
382
+ # append Regexp with 'u' to set encoding to UTF_8
383
+ expect(comment_property.change_to_s(is,should)).to match(/changed '\u2603' to '\u06FF'/u)
384
+ end
385
+ end
386
+ end
361
387
  end
362
388
  end
363
389
 
@@ -17,7 +17,7 @@ describe Puppet::Util::FileType do
17
17
  describe "when the file already exists" do
18
18
  it "should return the file's contents when asked to read it" do
19
19
  Puppet::FileSystem.expects(:exist?).with(path).returns true
20
- File.expects(:read).with(path).returns "my text"
20
+ Puppet::FileSystem.expects(:read).with(path, :encoding => Encoding.default_external).returns "my text"
21
21
 
22
22
  expect(file.read).to eq("my text")
23
23
  end
@@ -46,7 +46,7 @@ describe Puppet::Util::FileType do
46
46
  end
47
47
 
48
48
  it "should first create a temp file and copy its contents over to the file location" do
49
- Tempfile.expects(:new).with("puppet").returns tempfile
49
+ Tempfile.expects(:new).with("puppet", :encoding => Encoding.default_external).returns tempfile
50
50
  tempfile.expects(:print).with("my text")
51
51
  tempfile.expects(:flush)
52
52
  tempfile.expects(:close)
@@ -151,7 +151,7 @@ describe Puppet::Util::FileType do
151
151
  @tmp_cron = Tempfile.new("puppet_crontab_spec")
152
152
  @tmp_cron_path = @tmp_cron.path
153
153
  Puppet::Util.stubs(:uid).with(uid).returns 9000
154
- Tempfile.expects(:new).with("puppet_#{name}").returns @tmp_cron
154
+ Tempfile.expects(:new).with("puppet_#{name}", :encoding => Encoding.default_external).returns @tmp_cron
155
155
  end
156
156
 
157
157
  after :each do
@@ -60,7 +60,7 @@ describe Puppet::Util::Yaml do
60
60
  end
61
61
 
62
62
  def write_file(name, contents)
63
- File.open(name, "w") do |fh|
63
+ File.open(name, "w:UTF-8") do |fh|
64
64
  fh.write(contents)
65
65
  end
66
66
  end
@@ -181,15 +181,23 @@ describe Puppet::Util do
181
181
  end
182
182
  end
183
183
 
184
- # but in 2.3, the behavior is correct when external codepage is 65001 / UTF-8
184
+ # but in 2.3, the behavior is mostly correct when external codepage is 65001 / UTF-8
185
185
  it "works around Ruby bug 8822 (which fails to preserve UTF-8 properly when accessing ENV) (Ruby >= 2.3.x) ",
186
186
  :if => ((match = RUBY_VERSION.match(/^2\.(\d+)\./)) && match.captures[0].to_i >= 3 && Puppet.features.microsoft_windows?) do
187
187
 
188
+ raise 'This test requires a non-UTF8 codepage' if Encoding.default_external == Encoding::UTF_8
189
+
188
190
  withenv_utf8 do |utf_8_key, utf_8_value, codepage_key|
189
191
  # Ruby 2.3 fixes access by the original UTF-8 key, and behaves differently than 2.1
190
192
  # keying by local codepage will work only when the UTF-8 can be converted to local codepage
191
193
  # the key selected for this test contains characters unavailable to a local codepage, hence doesn't work
192
- expect(ENV.key?(codepage_key)).to eq(false)
194
+
195
+ # On Japanese Windows (Code Page 932) this test resolves as true.
196
+ # otherwise the key selected for this test contains characters
197
+ # unavailable to a local codepage, hence doesn't work
198
+ # HACK: tech debt to replace once PUP-7019 is understood
199
+ should_be_found = (Encoding.default_external == Encoding::CP932)
200
+ expect(ENV.key?(codepage_key)).to eq(should_be_found)
193
201
  expect(ENV.key?(utf_8_key)).to eq(true)
194
202
 
195
203
  # Ruby's ENV.keys has slightly different behavior than ENV.key?(key), and 2.3 differs from 2.1
data/tasks/i18n.rake ADDED
@@ -0,0 +1,20 @@
1
+ # These tasks wrap tasks from the gettext-setup gem, used when generating
2
+ # translation files. If you want to use a new task in the gettext-setup
3
+ # gem, add a wrapper for it here to expose it in the Puppet repo.
4
+ namespace :gettext do
5
+ task :load_gettext_tasks do
6
+ spec = Gem::Specification.find_by_name 'gettext-setup'
7
+ load "#{spec.gem_dir}/lib/tasks/gettext.rake"
8
+ GettextSetup.initialize(File.absolute_path('../locales', File.dirname(__FILE__)))
9
+ end
10
+
11
+ desc "Generate a new POT file"
12
+ task :generate_pot => :load_gettext_tasks do
13
+ Rake::Task["gettext:pot"].invoke
14
+ end
15
+
16
+ desc "Generate a PO file for the given locale"
17
+ task :generate_po, [:language] => :load_gettext_tasks do |t, args|
18
+ Rake::Task["gettext:po"].invoke(args[:language])
19
+ end
20
+ end