puppet 4.8.2-x86-mingw32 → 4.9.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (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 -2607
  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
@@ -82,7 +82,7 @@ describe 'The type factory' do
82
82
  end
83
83
 
84
84
  it 'sem_ver(r1, r2) returns constrained PSemVerType' do
85
- expect(TypeFactory.sem_ver('1.x', '3.x').ranges).to include(Semantic::VersionRange.parse('1.x'), Semantic::VersionRange.parse('3.x'))
85
+ expect(TypeFactory.sem_ver('1.x', '3.x').ranges).to include(SemanticPuppet::VersionRange.parse('1.x'), SemanticPuppet::VersionRange.parse('3.x'))
86
86
  end
87
87
 
88
88
  it 'sem_ver_range() returns PSemVerRangeType' do
@@ -173,7 +173,7 @@ describe 'The type factory' do
173
173
  ht = TypeFactory.hash_of_data
174
174
  expect(ht.class()).to eq(PHashType)
175
175
  expect(ht.key_type.class).to eq(PScalarType)
176
- expect(ht.element_type.class).to eq(PDataType)
176
+ expect(ht.value_type.class).to eq(PDataType)
177
177
  end
178
178
 
179
179
  it 'ruby(1) returns PRuntimeType[ruby, \'Fixnum\']' do
@@ -211,7 +211,7 @@ describe 'The type factory' do
211
211
  expect(t.size_type.from).to eq(0)
212
212
  expect(t.size_type.to).to eq(0)
213
213
  expect(t.key_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
214
- expect(t.element_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
214
+ expect(t.value_type).to eq(Puppet::Pops::Types::PUnitType::DEFAULT)
215
215
  end
216
216
 
217
217
  context 'callable types' do
@@ -75,7 +75,7 @@ end
75
75
  expect(s.string(f.type_type)).to eq('Type')
76
76
  end
77
77
 
78
- it "should yield 'Object' for PAnyType" do
78
+ it "should yield 'Any' for PAnyType" do
79
79
  expect(s.string(f.any)).to eq('Any')
80
80
  end
81
81
 
@@ -119,8 +119,12 @@ end
119
119
  expect(s.string(f.string)).to eq('String')
120
120
  end
121
121
 
122
- it "should yield 'String' for PStringType with multiple values" do
123
- expect(s.string(f.string(nil, 'a', 'b', 'c'))).to eq('String')
122
+ it "should yield 'String' for PStringType with value" do
123
+ expect(s.string(f.string('a'))).to eq('String')
124
+ end
125
+
126
+ it "should yield 'String['a']' for PStringType with value if printed with debug_string" do
127
+ expect(s.debug_string(f.string('a'))).to eq("String['a']")
124
128
  end
125
129
 
126
130
  it "should yield 'String' and from/to for PStringType" do
@@ -87,7 +87,7 @@ describe 'the type mismatch describer' do
87
87
  check_port({ 34 => 'some service'})
88
88
  CODE
89
89
  expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
90
- /parameter 'ports' expects a PortMap = Hash\[UnprivilegedPort = Integer\[1024, 65537\], String\] value, got Hash\[Integer\[34, 34\], String\[12, 12\]\]/))
90
+ /parameter 'ports' expects a PortMap = Hash\[UnprivilegedPort = Integer\[1024, 65537\], String\] value, got Hash\[Integer\[34, 34\], String\]/))
91
91
  end
92
92
 
93
93
  it 'will not include the aliased type more than once when reporting a mismatch that involves an alias that is self recursive' do
@@ -98,7 +98,7 @@ describe 'the type mismatch describer' do
98
98
  check_tree({ 'x' => {'y' => {32 => 'n'}}})
99
99
  CODE
100
100
  expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
101
- /parameter 'tree' entry 'x' entry 'y' expects a Tree = Hash\[String, Tree\] value, got Hash\[Integer\[32, 32\], String\[1, 1\]\]/))
101
+ /parameter 'tree' entry 'x' entry 'y' expects a Tree = Hash\[String, Tree\] value, got Hash\[Integer\[32, 32\], String\]/))
102
102
  end
103
103
 
104
104
  it 'will use type normalization' do
@@ -130,6 +130,17 @@ describe 'the type mismatch describer' do
130
130
  /parameter 'arg' expects a match for Enum\['a', 'b'\], got Sensitive/))
131
131
  end
132
132
 
133
+ it "reports errors on the first failing parameter when that parameter is not the first in order" do
134
+ code = <<-CODE
135
+ type Abc = Enum['a', 'b', 'c']
136
+ type Cde = Enum['c', 'd', 'e']
137
+ function two_params(Abc $a, Cde $b) {}
138
+ two_params('a', 'x')
139
+ CODE
140
+ expect { eval_and_collect_notices(code) }.to(raise_error(Puppet::Error,
141
+ /parameter 'b' expects a match for Cde = Enum\['c', 'd', 'e'\], got 'x'/))
142
+ end
143
+
133
144
  it "will not generalize a string that doesn't match an enum in a define call" do
134
145
  code = <<-CODE
135
146
  define check_enums(Enum[a,b] $arg) {}
@@ -386,7 +386,7 @@ describe 'Puppet Type System' do
386
386
  type Bar = Fee
387
387
  notice(0 =~ Bar)
388
388
  CODE
389
- expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
389
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Bar' cannot be resolved to a real type/)
390
390
  end
391
391
 
392
392
  it 'will not allow an alias chain that contains nothing but aliases and variants' do
@@ -396,7 +396,7 @@ describe 'Puppet Type System' do
396
396
  type Bar = Variant[Fee,Foo]
397
397
  notice(0 =~ Bar)
398
398
  CODE
399
- expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Foo' cannot be resolved to a real type/)
399
+ expect { eval_and_collect_notices(code) }.to raise_error(Puppet::Error, /Type alias 'Bar' cannot be resolved to a real type/)
400
400
  end
401
401
 
402
402
  it 'will not allow an alias to directly reference itself' do
@@ -572,6 +572,29 @@ describe 'Puppet Type System' do
572
572
  end
573
573
  end
574
574
 
575
+ context 'instantiation via ruby create function' do
576
+ around(:each) do |example|
577
+ Puppet.override(:loaders => Loaders.new(Puppet::Node::Environment.create(:testing, []))) do
578
+ example.run
579
+ end
580
+ end
581
+
582
+ it 'is supported by Integer' do
583
+ int = tf.integer.create('32')
584
+ expect(int).to eq(32)
585
+ end
586
+
587
+ it 'is supported by Optional[Integer]' do
588
+ int = tf.optional(tf.integer).create('32')
589
+ expect(int).to eq(32)
590
+ end
591
+
592
+ it 'is not supported by Any, Scalar, Collection' do
593
+ [tf.any, tf.scalar, tf.collection ].each do |t|
594
+ expect { t.create }.to raise_error(ArgumentError, /Creation of new instance of type '#{t.to_s}' is not supported/)
595
+ end
596
+ end
597
+ end
575
598
  end
576
599
  end
577
600
  end
@@ -50,42 +50,98 @@ describe "validating 4x" do
50
50
  end
51
51
 
52
52
  context 'with the default settings for --strict' do
53
- it 'produces a warning for duplicate keyes in a literal hash' do
53
+ it 'produces a warning for duplicate keys in a literal hash' do
54
54
  acceptor = validate(parse('{ a => 1, a => 2 }'))
55
55
  expect(acceptor.warning_count).to eql(1)
56
56
  expect(acceptor.error_count).to eql(0)
57
57
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
58
58
  end
59
+
60
+ it 'produces a warning for duplicate default in a case expression' do
61
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
62
+ expect(acceptor.warning_count).to eql(1)
63
+ expect(acceptor.error_count).to eql(0)
64
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
65
+ end
66
+
67
+ it 'produces a warning for duplicate default in a selector expression' do
68
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
69
+ expect(acceptor.warning_count).to eql(1)
70
+ expect(acceptor.error_count).to eql(0)
71
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
72
+ end
59
73
  end
60
74
 
61
75
  context 'with --strict set to warning' do
62
76
  before(:each) { Puppet[:strict] = :warning }
63
- it 'produces a warning for duplicate keyes in a literal hash' do
77
+ it 'produces a warning for duplicate keys in a literal hash' do
64
78
  acceptor = validate(parse('{ a => 1, a => 2 }'))
65
79
  expect(acceptor.warning_count).to eql(1)
66
80
  expect(acceptor.error_count).to eql(0)
67
81
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
68
82
  end
83
+
84
+ it 'produces a warning for duplicate default in a case expression' do
85
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
86
+ expect(acceptor.warning_count).to eql(1)
87
+ expect(acceptor.error_count).to eql(0)
88
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
89
+ end
90
+
91
+ it 'produces a warning for duplicate default in a selector expression' do
92
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
93
+ expect(acceptor.warning_count).to eql(1)
94
+ expect(acceptor.error_count).to eql(0)
95
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
96
+ end
69
97
  end
70
98
 
71
99
  context 'with --strict set to error' do
72
100
  before(:each) { Puppet[:strict] = :error }
73
- it 'produces an error for duplicate keyes in a literal hash' do
101
+ it 'produces an error for duplicate keys in a literal hash' do
74
102
  acceptor = validate(parse('{ a => 1, a => 2 }'))
75
103
  expect(acceptor.warning_count).to eql(0)
76
104
  expect(acceptor.error_count).to eql(1)
77
105
  expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
78
106
  end
107
+
108
+ it 'produces an error for duplicate default in a case expression' do
109
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
110
+ expect(acceptor.warning_count).to eql(0)
111
+ expect(acceptor.error_count).to eql(1)
112
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
113
+ end
114
+
115
+ it 'produces an error for duplicate default in a selector expression' do
116
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
117
+ expect(acceptor.warning_count).to eql(0)
118
+ expect(acceptor.error_count).to eql(1)
119
+ expect(acceptor).to have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
120
+ end
79
121
  end
80
122
 
81
123
  context 'with --strict set to off' do
82
124
  before(:each) { Puppet[:strict] = :off }
83
- it 'does not produce an error or warning for duplicate keyes in a literal hash' do
125
+ it 'does not produce an error or warning for duplicate keys in a literal hash' do
84
126
  acceptor = validate(parse('{ a => 1, a => 2 }'))
85
127
  expect(acceptor.warning_count).to eql(0)
86
128
  expect(acceptor.error_count).to eql(0)
87
129
  expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_KEY)
88
130
  end
131
+
132
+ it 'does not produce an error for duplicate default in a case expression' do
133
+ acceptor = validate(parse('case 1 { default: {1} default : {2} }'))
134
+ expect(acceptor.warning_count).to eql(0)
135
+ expect(acceptor.error_count).to eql(0)
136
+ expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
137
+ end
138
+
139
+ it 'does not produce an error for duplicate default in a selector expression' do
140
+ acceptor = validate(parse(' 1 ? { default => 1, default => 2 }'))
141
+ expect(acceptor.warning_count).to eql(0)
142
+ expect(acceptor.error_count).to eql(0)
143
+ expect(acceptor).to_not have_issue(Puppet::Pops::Issues::DUPLICATE_DEFAULT)
144
+ end
89
145
  end
90
146
 
91
147
  context 'for non productive expressions' do
@@ -301,4 +301,46 @@ describe Puppet::Provider::NameService do
301
301
  end
302
302
  end
303
303
 
304
+ describe "comments_insync?" do
305
+ # comments_insync? overrides Puppet::Property#insync? and will act on an
306
+ # array containing a should value (the expected value of Puppet::Property
307
+ # @should)
308
+ context "given strings with compatible encodings" do
309
+ it "should return false if the is-value and should-value are not equal" do
310
+ is_value = "foo"
311
+ should_value = ["bar"]
312
+ expect(provider.comments_insync?(is_value, should_value)).to be_falsey
313
+ end
314
+
315
+ it "should return true if the is-value and should-value are equal" do
316
+ is_value = "foo"
317
+ should_value = ["foo"]
318
+ expect(provider.comments_insync?(is_value, should_value)).to be_truthy
319
+ end
320
+ end
321
+
322
+ context "given strings with incompatible encodings" do
323
+ let(:snowman_iso) { "\u2603".force_encoding(Encoding::ISO_8859_1) }
324
+ let(:snowman_utf8) { "\u2603".force_encoding(Encoding::UTF_8) }
325
+ let(:snowman_binary) { "\u2603".force_encoding(Encoding::ASCII_8BIT) }
326
+ let(:arabic_heh_utf8) { "\u06FF".force_encoding(Encoding::UTF_8) }
327
+
328
+ it "should be able to compare unequal strings and return false" do
329
+ expect(Encoding.compatible?(snowman_iso, arabic_heh_utf8)).to be_falsey
330
+ expect(provider.comments_insync?(snowman_iso, [arabic_heh_utf8])).to be_falsey
331
+ end
332
+
333
+ it "should be able to compare equal strings and return true" do
334
+ expect(Encoding.compatible?(snowman_binary, snowman_utf8)).to be_falsey
335
+ expect(provider.comments_insync?(snowman_binary, [snowman_utf8])).to be_truthy
336
+ end
337
+
338
+ it "should not manipulate the actual encoding of either string" do
339
+ expect(Encoding.compatible?(snowman_binary, snowman_utf8)).to be_falsey
340
+ provider.comments_insync?(snowman_binary, [snowman_utf8])
341
+ expect(snowman_binary.encoding).to eq(Encoding::ASCII_8BIT)
342
+ expect(snowman_utf8.encoding).to eq(Encoding::UTF_8)
343
+ end
344
+ end
345
+ end
304
346
  end
@@ -17,7 +17,7 @@ describe Puppet::Type.type(:package).provider(:aptrpm) do
17
17
  end
18
18
 
19
19
  def rpm_args
20
- ['-q', 'faff', '--nosignature', '--nodigest', '--qf', "%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n"]
20
+ ['-q', 'faff', '--nosignature', '--nodigest', '--qf', "'%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH}\\n'"]
21
21
  end
22
22
 
23
23
  def rpm(args = rpm_args)
@@ -25,6 +25,28 @@ describe Puppet::Type.type(:package).provider(:pkg) do
25
25
 
26
26
  it_should_respond_to :install, :uninstall, :update, :query, :latest
27
27
 
28
+ context 'default' do
29
+ [ 10 ].each do |ver|
30
+ it "should not be the default provider on Solaris #{ver}" do
31
+ Facter.stubs(:value).with(:osfamily).returns(:Solaris)
32
+ Facter.stubs(:value).with(:kernelrelease).returns("5.#{ver}")
33
+ Facter.stubs(:value).with(:operatingsystem).returns(:Solaris)
34
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
35
+ expect(described_class).to_not be_default
36
+ end
37
+ end
38
+
39
+ [ 11, 12 ].each do |ver|
40
+ it "should be the default provider on Solaris #{ver}" do
41
+ Facter.stubs(:value).with(:osfamily).returns(:Solaris)
42
+ Facter.stubs(:value).with(:kernelrelease).returns("5.#{ver}")
43
+ Facter.stubs(:value).with(:operatingsystem).returns(:Solaris)
44
+ Facter.stubs(:value).with(:operatingsystemmajrelease).returns("#{ver}")
45
+ expect(described_class).to be_default
46
+ end
47
+ end
48
+ end
49
+
28
50
  it "should be versionable" do
29
51
  expect(described_class).to be_versionable
30
52
  end
@@ -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