chef 12.4.3-universal-mingw32 → 12.5.1-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (320) hide show
  1. checksums.yaml +4 -4
  2. data/CONTRIBUTING.md +21 -25
  3. data/Gemfile +46 -0
  4. data/README.md +4 -4
  5. data/Rakefile +4 -110
  6. data/bin/chef-service-manager +3 -1
  7. data/distro/common/html/knife_cookbook_site.html +18 -18
  8. data/distro/common/man/man1/knife-cookbook-site.1 +11 -11
  9. data/lib/chef.rb +1 -1
  10. data/lib/chef/application.rb +1 -1
  11. data/lib/chef/application/apply.rb +19 -1
  12. data/lib/chef/application/client.rb +11 -5
  13. data/lib/chef/application/knife.rb +2 -2
  14. data/lib/chef/application/solo.rb +1 -1
  15. data/lib/chef/application/windows_service_manager.rb +19 -12
  16. data/lib/chef/chef_class.rb +46 -0
  17. data/lib/chef/chef_fs/config.rb +22 -24
  18. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +3 -1
  19. data/lib/chef/chef_fs/file_pattern.rb +4 -15
  20. data/lib/chef/chef_fs/file_system/acl_dir.rb +3 -4
  21. data/lib/chef/chef_fs/file_system/acls_dir.rb +5 -1
  22. data/lib/chef/chef_fs/file_system/base_fs_dir.rb +0 -5
  23. data/lib/chef/chef_fs/file_system/base_fs_object.rb +5 -2
  24. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +2 -9
  25. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_entry.rb +2 -9
  26. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbooks_dir.rb +10 -17
  27. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +1 -12
  28. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +15 -11
  29. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +8 -2
  30. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +4 -4
  31. data/lib/chef/chef_fs/file_system/cookbooks_acl_dir.rb +1 -1
  32. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -11
  33. data/lib/chef/chef_fs/file_system/data_bags_dir.rb +3 -5
  34. data/lib/chef/chef_fs/file_system/environments_dir.rb +1 -1
  35. data/lib/chef/chef_fs/file_system/file_system_entry.rb +7 -4
  36. data/lib/chef/chef_fs/file_system/memory_dir.rb +2 -3
  37. data/lib/chef/chef_fs/file_system/multiplexed_dir.rb +15 -0
  38. data/lib/chef/chef_fs/file_system/nodes_dir.rb +1 -1
  39. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +2 -2
  40. data/lib/chef/chef_fs/file_system/rest_list_dir.rb +4 -9
  41. data/lib/chef/chef_fs/knife.rb +35 -7
  42. data/lib/chef/chef_fs/path_utils.rb +65 -34
  43. data/lib/chef/client.rb +2 -3
  44. data/lib/chef/config.rb +34 -2
  45. data/lib/chef/{mixin/wstring.rb → constants.rb} +9 -13
  46. data/lib/chef/cookbook/metadata.rb +25 -3
  47. data/lib/chef/cookbook/synchronizer.rb +1 -1
  48. data/lib/chef/cookbook_site_streaming_uploader.rb +1 -1
  49. data/lib/chef/cookbook_version.rb +3 -3
  50. data/lib/chef/delayed_evaluator.rb +21 -0
  51. data/lib/chef/deprecation/mixin/template.rb +1 -2
  52. data/lib/chef/deprecation/provider/cookbook_file.rb +1 -1
  53. data/lib/chef/deprecation/provider/file.rb +1 -1
  54. data/lib/chef/deprecation/provider/remote_directory.rb +52 -0
  55. data/lib/chef/deprecation/provider/remote_file.rb +1 -2
  56. data/lib/chef/deprecation/provider/template.rb +1 -1
  57. data/lib/chef/deprecation/warnings.rb +3 -4
  58. data/lib/chef/dsl/reboot_pending.rb +3 -2
  59. data/lib/chef/dsl/recipe.rb +26 -7
  60. data/lib/chef/dsl/resources.rb +2 -2
  61. data/lib/chef/event_dispatch/base.rb +51 -22
  62. data/lib/chef/event_dispatch/dispatcher.rb +21 -6
  63. data/lib/chef/event_dispatch/dsl.rb +64 -0
  64. data/lib/chef/exceptions.rb +28 -1
  65. data/lib/chef/file_content_management/tempfile.rb +1 -1
  66. data/lib/chef/formatters/base.rb +3 -0
  67. data/lib/chef/formatters/doc.rb +56 -6
  68. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +36 -0
  69. data/lib/chef/formatters/minimal.rb +2 -2
  70. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +3 -1
  71. data/lib/chef/http/http_request.rb +1 -1
  72. data/lib/chef/knife.rb +35 -55
  73. data/lib/chef/knife/bootstrap.rb +41 -0
  74. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -0
  75. data/lib/chef/knife/bootstrap/client_builder.rb +16 -0
  76. data/lib/chef/knife/bootstrap/templates/README.md +3 -4
  77. data/lib/chef/knife/bootstrap/templates/chef-full.erb +1 -1
  78. data/lib/chef/knife/cookbook_create.rb +1 -1
  79. data/lib/chef/knife/cookbook_site_download.rb +1 -1
  80. data/lib/chef/knife/cookbook_site_install.rb +1 -1
  81. data/lib/chef/knife/cookbook_site_share.rb +6 -6
  82. data/lib/chef/knife/cookbook_site_unshare.rb +2 -2
  83. data/lib/chef/knife/core/bootstrap_context.rb +12 -4
  84. data/lib/chef/knife/core/custom_manifest_loader.rb +69 -0
  85. data/lib/chef/knife/core/gem_glob_loader.rb +138 -0
  86. data/lib/chef/knife/core/hashed_command_loader.rb +80 -0
  87. data/lib/chef/knife/core/node_presenter.rb +24 -1
  88. data/lib/chef/knife/core/object_loader.rb +1 -0
  89. data/lib/chef/knife/core/subcommand_loader.rb +131 -146
  90. data/lib/chef/knife/node_run_list_remove.rb +12 -1
  91. data/lib/chef/knife/null.rb +10 -0
  92. data/lib/chef/knife/rehash.rb +62 -0
  93. data/lib/chef/knife/search.rb +3 -3
  94. data/lib/chef/knife/ssh.rb +52 -30
  95. data/lib/chef/knife/ssl_check.rb +3 -2
  96. data/lib/chef/knife/user_edit.rb +1 -2
  97. data/lib/chef/local_mode.rb +5 -0
  98. data/lib/chef/log.rb +5 -1
  99. data/lib/chef/mixin/deprecation.rb +8 -8
  100. data/lib/chef/mixin/params_validate.rb +362 -135
  101. data/lib/chef/mixin/template.rb +48 -0
  102. data/lib/chef/mixin/which.rb +1 -1
  103. data/lib/chef/mixin/wide_string.rb +72 -0
  104. data/lib/chef/mixin/windows_architecture_helper.rb +15 -39
  105. data/lib/chef/mixin/windows_env_helper.rb +4 -1
  106. data/lib/chef/monkey_patches/webrick-utils.rb +51 -0
  107. data/lib/chef/monkey_patches/win32/registry.rb +72 -0
  108. data/lib/chef/node.rb +116 -3
  109. data/lib/chef/node_map.rb +2 -2
  110. data/lib/chef/platform/handler_map.rb +0 -5
  111. data/lib/chef/platform/provider_mapping.rb +5 -6
  112. data/lib/chef/platform/query_helpers.rb +46 -4
  113. data/lib/chef/platform/rebooter.rb +1 -1
  114. data/lib/chef/platform/service_helpers.rb +30 -32
  115. data/lib/chef/policy_builder.rb +1 -8
  116. data/lib/chef/policy_builder/dynamic.rb +186 -0
  117. data/lib/chef/policy_builder/expand_node_object.rb +30 -15
  118. data/lib/chef/policy_builder/policyfile.rb +155 -18
  119. data/lib/chef/property.rb +568 -0
  120. data/lib/chef/provider.rb +222 -13
  121. data/lib/chef/provider/batch.rb +8 -0
  122. data/lib/chef/provider/deploy.rb +5 -7
  123. data/lib/chef/provider/directory.rb +14 -2
  124. data/lib/chef/provider/dsc_resource.rb +5 -9
  125. data/lib/chef/provider/group/pw.rb +1 -1
  126. data/lib/chef/provider/ifconfig.rb +2 -2
  127. data/lib/chef/provider/lwrp_base.rb +1 -75
  128. data/lib/chef/provider/mount.rb +7 -3
  129. data/lib/chef/provider/package.rb +1 -1
  130. data/lib/chef/provider/package/dpkg.rb +5 -11
  131. data/lib/chef/provider/package/rpm.rb +2 -2
  132. data/lib/chef/provider/package/rubygems.rb +1 -1
  133. data/lib/chef/provider/package/windows/msi.rb +2 -2
  134. data/lib/chef/provider/package/yum.rb +17 -5
  135. data/lib/chef/provider/powershell_script.rb +59 -23
  136. data/lib/chef/provider/registry_key.rb +5 -5
  137. data/lib/chef/provider/remote_directory.rb +190 -102
  138. data/lib/chef/provider/service.rb +12 -2
  139. data/lib/chef/provider/service/aix.rb +1 -1
  140. data/lib/chef/provider/service/debian.rb +3 -5
  141. data/lib/chef/provider/service/freebsd.rb +1 -1
  142. data/lib/chef/provider/service/gentoo.rb +3 -3
  143. data/lib/chef/provider/service/init.rb +3 -3
  144. data/lib/chef/provider/service/insserv.rb +2 -4
  145. data/lib/chef/provider/service/invokercd.rb +2 -4
  146. data/lib/chef/provider/service/macosx.rb +5 -1
  147. data/lib/chef/provider/service/openbsd.rb +2 -1
  148. data/lib/chef/provider/service/redhat.rb +52 -16
  149. data/lib/chef/provider/service/simple.rb +2 -2
  150. data/lib/chef/provider/service/systemd.rb +3 -5
  151. data/lib/chef/provider/service/upstart.rb +4 -6
  152. data/lib/chef/provider/subversion.rb +13 -7
  153. data/lib/chef/provider/template/content.rb +16 -6
  154. data/lib/chef/provider/user/solaris.rb +32 -4
  155. data/lib/chef/provider/windows_script.rb +3 -5
  156. data/lib/chef/provider_resolver.rb +2 -2
  157. data/lib/chef/recipe.rb +1 -8
  158. data/lib/chef/resource.rb +563 -90
  159. data/lib/chef/resource/action_class.rb +83 -0
  160. data/lib/chef/resource/chef_gem.rb +3 -3
  161. data/lib/chef/resource/deploy.rb +8 -2
  162. data/lib/chef/resource/dsc_script.rb +2 -0
  163. data/lib/chef/resource/file/verification.rb +7 -1
  164. data/lib/chef/resource/lwrp_base.rb +1 -7
  165. data/lib/chef/resource/registry_key.rb +1 -1
  166. data/lib/chef/resource/service.rb +10 -2
  167. data/lib/chef/resource/subversion.rb +5 -0
  168. data/lib/chef/resource/windows_script.rb +6 -2
  169. data/lib/chef/resource/yum_package.rb +10 -1
  170. data/lib/chef/resource_resolver.rb +3 -3
  171. data/lib/chef/run_context.rb +402 -83
  172. data/lib/chef/run_list/versioned_recipe_list.rb +15 -0
  173. data/lib/chef/run_lock.rb +30 -21
  174. data/lib/chef/util/powershell/ps_credential.rb +4 -0
  175. data/lib/chef/util/windows.rb +0 -32
  176. data/lib/chef/util/windows/net_group.rb +85 -106
  177. data/lib/chef/util/windows/net_use.rb +35 -71
  178. data/lib/chef/util/windows/net_user.rb +0 -1
  179. data/lib/chef/util/windows/volume.rb +19 -19
  180. data/lib/chef/version.rb +3 -3
  181. data/lib/chef/win32/api.rb +1 -0
  182. data/lib/chef/win32/api/file.rb +20 -0
  183. data/lib/chef/win32/api/net.rb +163 -43
  184. data/lib/chef/win32/api/registry.rb +51 -0
  185. data/lib/chef/win32/api/system.rb +23 -0
  186. data/lib/chef/win32/api/unicode.rb +0 -43
  187. data/lib/chef/win32/crypto.rb +2 -1
  188. data/lib/chef/win32/file.rb +28 -3
  189. data/lib/chef/win32/mutex.rb +1 -2
  190. data/lib/chef/win32/net.rb +162 -8
  191. data/lib/chef/win32/process.rb +13 -0
  192. data/lib/chef/win32/registry.rb +35 -30
  193. data/lib/chef/win32/security.rb +1 -1
  194. data/lib/chef/win32/security/token.rb +1 -1
  195. data/lib/chef/win32/system.rb +62 -0
  196. data/lib/chef/win32/unicode.rb +7 -2
  197. data/lib/chef/win32/version.rb +0 -4
  198. data/lib/chef/workstation_config_loader.rb +3 -158
  199. data/spec/data/cookbooks/openldap/templates/default/helpers.erb +14 -0
  200. data/spec/data/cookbooks/openldap/templates/default/nested_openldap_partials.erb +1 -0
  201. data/spec/data/cookbooks/openldap/templates/default/nested_partial.erb +1 -0
  202. data/spec/data/dsc_lcm.pfx +0 -0
  203. data/spec/data/run_context/cookbooks/include/recipes/default.rb +24 -0
  204. data/spec/data/run_context/cookbooks/include/recipes/includee.rb +3 -0
  205. data/spec/functional/dsl/reboot_pending_spec.rb +33 -43
  206. data/spec/functional/knife/cookbook_delete_spec.rb +17 -7
  207. data/spec/functional/knife/ssh_spec.rb +16 -0
  208. data/spec/functional/rebooter_spec.rb +1 -1
  209. data/spec/functional/resource/deploy_revision_spec.rb +1 -1
  210. data/spec/functional/resource/dsc_resource_spec.rb +2 -0
  211. data/spec/functional/resource/dsc_script_spec.rb +91 -2
  212. data/spec/functional/resource/group_spec.rb +67 -44
  213. data/spec/functional/resource/{powershell_spec.rb → powershell_script_spec.rb} +107 -18
  214. data/spec/functional/resource/windows_service_spec.rb +1 -1
  215. data/spec/functional/run_lock_spec.rb +368 -189
  216. data/spec/functional/win32/{registry_helper_spec.rb → registry_spec.rb} +16 -23
  217. data/spec/functional/win32/service_manager_spec.rb +2 -2
  218. data/spec/integration/client/client_spec.rb +51 -0
  219. data/spec/integration/knife/chef_repo_path_spec.rb +13 -11
  220. data/spec/integration/knife/download_spec.rb +4 -0
  221. data/spec/integration/knife/list_spec.rb +8 -0
  222. data/spec/integration/knife/upload_spec.rb +1 -1
  223. data/spec/integration/recipes/recipe_dsl_spec.rb +1 -16
  224. data/spec/integration/recipes/remote_directory.rb +74 -0
  225. data/spec/integration/recipes/resource_action_spec.rb +363 -0
  226. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +423 -0
  227. data/spec/integration/recipes/resource_load_spec.rb +206 -0
  228. data/spec/spec_helper.rb +9 -0
  229. data/spec/support/platform_helpers.rb +13 -0
  230. data/spec/support/shared/context/win32.rb +34 -0
  231. data/spec/support/shared/functional/win32_service.rb +2 -1
  232. data/spec/support/shared/functional/windows_script.rb +63 -26
  233. data/spec/support/shared/unit/mock_shellout.rb +46 -0
  234. data/spec/support/shared/unit/provider/file.rb +10 -4
  235. data/spec/unit/application/client_spec.rb +16 -3
  236. data/spec/unit/application/knife_spec.rb +2 -2
  237. data/spec/unit/application/solo_spec.rb +4 -3
  238. data/spec/unit/chef_class_spec.rb +23 -4
  239. data/spec/unit/chef_fs/path_util_spec.rb +108 -0
  240. data/spec/unit/client_spec.rb +6 -1
  241. data/spec/unit/config_spec.rb +31 -0
  242. data/spec/unit/cookbook/metadata_spec.rb +23 -3
  243. data/spec/unit/cookbook/syntax_check_spec.rb +3 -0
  244. data/spec/unit/deprecation_spec.rb +3 -6
  245. data/spec/unit/dsl/reboot_pending_spec.rb +12 -6
  246. data/spec/unit/event_dispatch/dispatcher_spec.rb +65 -3
  247. data/spec/unit/event_dispatch/dsl_spec.rb +83 -0
  248. data/spec/unit/formatters/doc_spec.rb +32 -0
  249. data/spec/unit/formatters/error_inspectors/compile_error_inspector_spec.rb +26 -0
  250. data/spec/unit/json_compat_spec.rb +4 -3
  251. data/spec/unit/knife/bootstrap/client_builder_spec.rb +27 -0
  252. data/spec/unit/knife/bootstrap_spec.rb +55 -3
  253. data/spec/unit/knife/cookbook_site_share_spec.rb +3 -3
  254. data/spec/unit/knife/core/bootstrap_context_spec.rb +21 -4
  255. data/spec/unit/knife/core/custom_manifest_loader_spec.rb +41 -0
  256. data/spec/unit/knife/core/gem_glob_loader_spec.rb +210 -0
  257. data/spec/unit/knife/core/hashed_command_loader_spec.rb +93 -0
  258. data/spec/unit/knife/core/subcommand_loader_spec.rb +16 -192
  259. data/spec/unit/knife/node_run_list_remove_spec.rb +17 -0
  260. data/spec/unit/knife/ssl_check_spec.rb +4 -0
  261. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +10 -10
  262. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  263. data/spec/unit/mixin/template_spec.rb +5 -1
  264. data/spec/unit/mixin/windows_architecture_helper_spec.rb +13 -8
  265. data/spec/unit/node_spec.rb +220 -0
  266. data/spec/unit/platform/query_helpers_spec.rb +146 -3
  267. data/spec/unit/policy_builder/dynamic_spec.rb +275 -0
  268. data/spec/unit/policy_builder/expand_node_object_spec.rb +37 -38
  269. data/spec/unit/policy_builder/policyfile_spec.rb +260 -46
  270. data/spec/unit/property/state_spec.rb +506 -0
  271. data/spec/unit/property/validation_spec.rb +663 -0
  272. data/spec/unit/property_spec.rb +1094 -0
  273. data/spec/unit/provider/deploy_spec.rb +5 -5
  274. data/spec/unit/provider/directory_spec.rb +35 -0
  275. data/spec/unit/provider/dsc_resource_spec.rb +3 -10
  276. data/spec/unit/provider/ifconfig_spec.rb +22 -2
  277. data/spec/unit/provider/mount/aix_spec.rb +2 -1
  278. data/spec/unit/provider/mount/mount_spec.rb +6 -0
  279. data/spec/unit/provider/mount/windows_spec.rb +14 -0
  280. data/spec/unit/provider/mount_spec.rb +12 -1
  281. data/spec/unit/provider/package/dpkg_spec.rb +8 -1
  282. data/spec/unit/provider/package/rpm_spec.rb +18 -1
  283. data/spec/unit/provider/package/rubygems_spec.rb +18 -0
  284. data/spec/unit/provider/package/yum_spec.rb +97 -24
  285. data/spec/unit/provider/powershell_script_spec.rb +106 -0
  286. data/spec/unit/provider/registry_key_spec.rb +12 -0
  287. data/spec/unit/provider/remote_directory_spec.rb +1 -2
  288. data/spec/unit/provider/service/aix_service_spec.rb +3 -3
  289. data/spec/unit/provider/service/gentoo_service_spec.rb +4 -4
  290. data/spec/unit/provider/service/macosx_spec.rb +4 -4
  291. data/spec/unit/provider/service/openbsd_service_spec.rb +10 -8
  292. data/spec/unit/provider/service/redhat_spec.rb +88 -8
  293. data/spec/unit/provider/service/upstart_service_spec.rb +11 -7
  294. data/spec/unit/provider/service/windows_spec.rb +211 -200
  295. data/spec/unit/provider/subversion_spec.rb +50 -31
  296. data/spec/unit/provider/template/content_spec.rb +93 -2
  297. data/spec/unit/provider/user/solaris_spec.rb +66 -9
  298. data/spec/unit/provider_resolver_spec.rb +707 -650
  299. data/spec/unit/provider_spec.rb +1 -3
  300. data/spec/unit/recipe_spec.rb +0 -4
  301. data/spec/unit/resource/deploy_spec.rb +7 -1
  302. data/spec/unit/resource/dsc_script_spec.rb +4 -0
  303. data/spec/unit/resource/file/verification_spec.rb +33 -5
  304. data/spec/unit/resource/{powershell_spec.rb → powershell_script_spec.rb} +17 -13
  305. data/spec/unit/resource/service_spec.rb +4 -4
  306. data/spec/unit/resource/subversion_spec.rb +4 -0
  307. data/spec/unit/resource/yum_package_spec.rb +10 -1
  308. data/spec/unit/resource_spec.rb +2 -2
  309. data/spec/unit/run_context/child_run_context_spec.rb +133 -0
  310. data/spec/unit/run_context_spec.rb +7 -0
  311. data/spec/unit/run_list/versioned_recipe_list_spec.rb +5 -0
  312. data/spec/unit/win32/registry_spec.rb +394 -0
  313. data/tasks/external_tests.rb +47 -23
  314. data/tasks/maintainers.rb +155 -14
  315. metadata +64 -53
  316. data/lib/chef/knife/bootstrap/templates/archlinux-gems.erb +0 -76
  317. data/lib/chef/knife/bootstrap/templates/chef-aix.erb +0 -72
  318. data/spec/unit/provider/powershell_spec.rb +0 -80
  319. data/spec/unit/registry_helper_spec.rb +0 -376
  320. data/spec/unit/workstation_config_loader_spec.rb +0 -283
@@ -27,6 +27,7 @@ describe Chef::Provider::Subversion do
27
27
  @resource.revision "12345"
28
28
  @resource.svn_arguments(false)
29
29
  @resource.svn_info_args(false)
30
+ @resource.svn_binary "svn"
30
31
  @node = Chef::Node.new
31
32
  @events = Chef::EventDispatch::Dispatcher.new
32
33
  @run_context = Chef::RunContext.new(@node, {}, @events)
@@ -63,28 +64,18 @@ describe Chef::Provider::Subversion do
63
64
  "Last Changed Rev: 11410\n" + # Last Changed Rev is preferred to Revision
64
65
  "Last Changed Date: 2009-03-25 06:09:56 -0600 (Wed, 25 Mar 2009)\n\n"
65
66
  expect(::File).to receive(:exist?).at_least(1).times.with("/my/deploy/dir/.svn").and_return(true)
66
- expect(::File).to receive(:directory?).with("/my/deploy/dir").and_return(true)
67
- expect(::Dir).to receive(:chdir).with("/my/deploy/dir").and_yield
68
- allow(@stdout).to receive(:string).and_return(example_svn_info)
69
- allow(@stderr).to receive(:string).and_return("")
70
- allow(@exitstatus).to receive(:exitstatus).and_return(0)
71
- expected_command = ["svn info", {:cwd=>"/my/deploy/dir"}]
72
- expect(@provider).to receive(:popen4).with(*expected_command).
73
- and_yield("no-pid", "no-stdin", @stdout,@stderr).
74
- and_return(@exitstatus)
67
+ expected_command = ["svn info", {:cwd => '/my/deploy/dir', :returns => [0,1]}]
68
+ expect(@provider).to receive(:shell_out!).with(*expected_command).
69
+ and_return(double("ShellOut result", :stdout => example_svn_info, :stderr => ""))
75
70
  expect(@provider.find_current_revision).to eql("11410")
76
71
  end
77
72
 
78
73
  it "gives nil as the current revision if the deploy dir isn't a SVN working copy" do
79
74
  example_svn_info = "svn: '/tmp/deploydir' is not a working copy\n"
80
75
  expect(::File).to receive(:exist?).with("/my/deploy/dir/.svn").and_return(true)
81
- expect(::File).to receive(:directory?).with("/my/deploy/dir").and_return(true)
82
- expect(::Dir).to receive(:chdir).with("/my/deploy/dir").and_yield
83
- allow(@stdout).to receive(:string).and_return(example_svn_info)
84
- allow(@stderr).to receive(:string).and_return("")
85
- allow(@exitstatus).to receive(:exitstatus).and_return(1)
86
- expect(@provider).to receive(:popen4).and_yield("no-pid", "no-stdin", @stdout,@stderr).
87
- and_return(@exitstatus)
76
+ expected_command = ["svn info", {:cwd => '/my/deploy/dir', :returns => [0,1]}]
77
+ expect(@provider).to receive(:shell_out!).with(*expected_command).
78
+ and_return(double("ShellOut result", :stdout => example_svn_info, :stderr => ""))
88
79
  expect(@provider.find_current_revision).to be_nil
89
80
  end
90
81
 
@@ -127,28 +118,20 @@ describe Chef::Provider::Subversion do
127
118
  "Last Changed Author: codeninja\n" +
128
119
  "Last Changed Rev: 11410\n" + # Last Changed Rev is preferred to Revision
129
120
  "Last Changed Date: 2009-03-25 06:09:56 -0600 (Wed, 25 Mar 2009)\n\n"
130
- exitstatus = double("exitstatus")
131
- allow(exitstatus).to receive(:exitstatus).and_return(0)
132
121
  @resource.revision "HEAD"
133
- allow(@stdout).to receive(:string).and_return(example_svn_info)
134
- allow(@stderr).to receive(:string).and_return("")
135
- expected_command = ["svn info http://svn.example.org/trunk/ --no-auth-cache -rHEAD", {:cwd=>Dir.tmpdir}]
136
- expect(@provider).to receive(:popen4).with(*expected_command).
137
- and_yield("no-pid","no-stdin",@stdout,@stderr).
138
- and_return(exitstatus)
122
+ expected_command = ["svn info http://svn.example.org/trunk/ --no-auth-cache -rHEAD", {:cwd => '/my/deploy/dir', :returns => [0,1]}]
123
+ expect(@provider).to receive(:shell_out!).with(*expected_command).
124
+ and_return(double("ShellOut result", :stdout => example_svn_info, :stderr => ""))
139
125
  expect(@provider.revision_int).to eql("11410")
140
126
  end
141
127
 
142
128
  it "returns a helpful message if data from `svn info` can't be parsed" do
143
129
  example_svn_info = "some random text from an error message\n"
144
- exitstatus = double("exitstatus")
145
- allow(exitstatus).to receive(:exitstatus).and_return(0)
146
130
  @resource.revision "HEAD"
147
- allow(@stdout).to receive(:string).and_return(example_svn_info)
148
- allow(@stderr).to receive(:string).and_return("")
149
- expect(@provider).to receive(:popen4).and_yield("no-pid","no-stdin",@stdout,@stderr).
150
- and_return(exitstatus)
151
- expect {@provider.revision_int}.to raise_error(RuntimeError, "Could not parse `svn info` data: some random text from an error message")
131
+ expected_command = ["svn info http://svn.example.org/trunk/ --no-auth-cache -rHEAD", {:cwd => '/my/deploy/dir', :returns => [0,1]}]
132
+ expect(@provider).to receive(:shell_out!).with(*expected_command).
133
+ and_return(double("ShellOut result", :stdout => example_svn_info, :stderr => ""))
134
+ expect {@provider.revision_int}.to raise_error(RuntimeError, "Could not parse `svn info` data: some random text from an error message\n")
152
135
 
153
136
  end
154
137
 
@@ -277,4 +260,40 @@ describe Chef::Provider::Subversion do
277
260
  expect(@resource).to be_updated
278
261
  end
279
262
 
263
+ context "selects the correct svn binary" do
264
+ before do
265
+ end
266
+
267
+ it "selects 'svn' as the binary by default" do
268
+ @resource.svn_binary nil
269
+ allow(ChefConfig).to receive(:windows?) { false }
270
+ expect(@provider).to receive(:svn_binary).and_return('svn')
271
+ expect(@provider.export_command).to eql(
272
+ 'svn export --force -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir')
273
+ end
274
+
275
+ it "selects an svn binary with an exe extension on windows" do
276
+ @resource.svn_binary nil
277
+ allow(ChefConfig).to receive(:windows?) { true }
278
+ expect(@provider).to receive(:svn_binary).and_return('svn.exe')
279
+ expect(@provider.export_command).to eql(
280
+ 'svn.exe export --force -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir')
281
+ end
282
+
283
+ it "uses a custom svn binary as part of the svn command" do
284
+ @resource.svn_binary 'teapot'
285
+ expect(@provider).to receive(:svn_binary).and_return('teapot')
286
+ expect(@provider.export_command).to eql(
287
+ 'teapot export --force -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir')
288
+ end
289
+
290
+ it "wraps custom svn binary with quotes if it contains whitespace" do
291
+ @resource.svn_binary 'c:/program files (x86)/subversion/svn.exe'
292
+ expect(@provider).to receive(:svn_binary).and_return('c:/program files (x86)/subversion/svn.exe')
293
+ expect(@provider.export_command).to eql(
294
+ '"c:/program files (x86)/subversion/svn.exe" export --force -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir')
295
+ end
296
+
297
+ end
298
+
280
299
  end
@@ -20,10 +20,24 @@ require 'spec_helper'
20
20
 
21
21
  describe Chef::Provider::Template::Content do
22
22
 
23
+ let(:enclosing_directory) {
24
+ canonicalize_path(Dir.mktmpdir)
25
+ }
26
+
27
+ let(:resource_path) {
28
+ canonicalize_path(File.expand_path(File.join(enclosing_directory, "openldap_stuff.conf")))
29
+ }
30
+
23
31
  let(:new_resource) do
24
32
  double("Chef::Resource::Template (new)",
25
33
  :cookbook_name => 'openldap',
34
+ :recipe_name => 'default',
35
+ :source_line => "/Users/lamont/solo/cookbooks/openldap/recipes/default.rb:2:in `from_file'",
36
+ :source_line_file => "/Users/lamont/solo/cookbooks/openldap/recipes/default.rb",
37
+ :source_line_number => "2",
26
38
  :source => 'openldap_stuff.conf.erb',
39
+ :name => 'openldap_stuff.conf',
40
+ :path => resource_path,
27
41
  :local => false,
28
42
  :cookbook => nil,
29
43
  :variables => {},
@@ -32,7 +46,10 @@ describe Chef::Provider::Template::Content do
32
46
  :helper_modules => [])
33
47
  end
34
48
 
35
- let(:rendered_file_location) { Dir.tmpdir + '/openldap_stuff.conf' }
49
+ let(:rendered_file_locations) {
50
+ [Dir.tmpdir + '/openldap_stuff.conf',
51
+ enclosing_directory + '/openldap_stuff.conf']
52
+ }
36
53
 
37
54
  let(:run_context) do
38
55
  cookbook_repo = File.expand_path(File.join(CHEF_SPEC_DATA, "cookbooks"))
@@ -50,7 +67,9 @@ describe Chef::Provider::Template::Content do
50
67
  end
51
68
 
52
69
  after do
53
- FileUtils.rm(rendered_file_location) if ::File.exist?(rendered_file_location)
70
+ rendered_file_locations.each do |file|
71
+ FileUtils.rm(file) if ::File.exist?(file)
72
+ end
54
73
  end
55
74
 
56
75
  it "finds the template file in the cookbook cache if it isn't local" do
@@ -70,9 +89,81 @@ describe Chef::Provider::Template::Content do
70
89
  expect(content.template_location).to eq(CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/test.erb')
71
90
  end
72
91
 
92
+ it "returns a tempfile in the tempdir when :file_staging_uses_destdir is not set" do
93
+ Chef::Config[:file_staging_uses_destdir] = false
94
+ expect(content.tempfile.path.start_with?(Dir::tmpdir)).to be true
95
+ expect(canonicalize_path(content.tempfile.path).start_with?(enclosing_directory)).to be false
96
+ end
97
+
98
+ it "returns a tempfile in the destdir when :file_staging_uses_destdir is set" do
99
+ Chef::Config[:file_staging_uses_destdir] = true
100
+ expect(canonicalize_path(content.tempfile.path).start_with?(enclosing_directory)).to be true
101
+ end
102
+
103
+ context "when creating a tempfile in destdir fails" do
104
+ let(:enclosing_directory) {
105
+ canonicalize_path("/nonexisting/path")
106
+ }
107
+
108
+ it "returns a tempfile in the tempdir when :file_deployment_uses_destdir is set to :auto" do
109
+ Chef::Config[:file_staging_uses_destdir] = :auto
110
+ expect(content.tempfile.path.start_with?(Dir::tmpdir)).to be true
111
+ expect(canonicalize_path(content.tempfile.path).start_with?(enclosing_directory)).to be false
112
+ end
113
+
114
+ it "fails when :file_desployment_uses_destdir is set" do
115
+ Chef::Config[:file_staging_uses_destdir] = true
116
+ expect{content.tempfile}.to raise_error(Chef::Exceptions::FileContentStagingError)
117
+ end
118
+
119
+ it "returns a tempfile in the tempdir when :file_desployment_uses_destdir is not set" do
120
+ expect(content.tempfile.path.start_with?(Dir::tmpdir)).to be true
121
+ expect(canonicalize_path(content.tempfile.path).start_with?(enclosing_directory)).to be false
122
+ end
123
+ end
124
+
73
125
  it "creates the template with the rendered content" do
74
126
  run_context.node.normal[:slappiness] = "a warm gun"
75
127
  expect(IO.read(content.tempfile.path)).to eq("slappiness is a warm gun")
76
128
  end
77
129
 
130
+ describe "when using location helpers" do
131
+ let(:new_resource) do
132
+ double("Chef::Resource::Template (new)",
133
+ :cookbook_name => 'openldap',
134
+ :recipe_name => 'default',
135
+ :source_line => CHEF_SPEC_DATA + "/cookbooks/openldap/recipes/default.rb:2:in `from_file'",
136
+ :source_line_file => CHEF_SPEC_DATA + "/cookbooks/openldap/recipes/default.rb",
137
+ :source_line_number => "2",
138
+ :source => 'helpers.erb',
139
+ :name => 'helpers.erb',
140
+ :path => CHEF_SPEC_DATA + '/cookbooks/openldap/templates/default/helpers.erb',
141
+ :local => false,
142
+ :cookbook => nil,
143
+ :variables => {},
144
+ :inline_helper_blocks => {},
145
+ :inline_helper_modules => [],
146
+ :helper_modules => [])
147
+ end
148
+
149
+ it "creates the template with the rendered content" do
150
+ expect(IO.read(content.tempfile.path)).to eql <<EOF
151
+ openldap
152
+ default
153
+ #{CHEF_SPEC_DATA}/cookbooks/openldap/recipes/default.rb:2:in `from_file'
154
+ #{CHEF_SPEC_DATA}/cookbooks/openldap/recipes/default.rb
155
+ 2
156
+ helpers.erb
157
+ #{CHEF_SPEC_DATA}/cookbooks/openldap/templates/default/helpers.erb
158
+ openldap
159
+ default
160
+ #{CHEF_SPEC_DATA}/cookbooks/openldap/recipes/default.rb:2:in `from_file'
161
+ #{CHEF_SPEC_DATA}/cookbooks/openldap/recipes/default.rb
162
+ 2
163
+ helpers.erb
164
+ #{CHEF_SPEC_DATA}/cookbooks/openldap/templates/default/helpers.erb
165
+ EOF
166
+ end
167
+
168
+ end
78
169
  end
@@ -1,7 +1,9 @@
1
1
  #
2
2
  # Author:: Adam Jacob (<adam@opscode.com>)
3
3
  # Author:: Daniel DeLeo (<dan@opscode.com>)
4
+ # Author:: Dave Eddy (<dave@daveeddy.com>)
4
5
  # Copyright:: Copyright (c) 2008, 2010 Opscode, Inc.
6
+ # Copyright:: Copyright (c) 2015, Dave Eddy
5
7
  #
6
8
  # License:: Apache License, Version 2.0
7
9
  #
@@ -18,6 +20,9 @@
18
20
  # limitations under the License.
19
21
  #
20
22
 
23
+ ShellCmdResult = Struct.new(:stdout, :stderr, :exitstatus)
24
+
25
+ require 'mixlib/shellout'
21
26
  require 'spec_helper'
22
27
 
23
28
  describe Chef::Provider::User::Solaris do
@@ -31,15 +36,6 @@ describe Chef::Provider::User::Solaris do
31
36
  p
32
37
  end
33
38
 
34
- supported_useradd_options = {
35
- 'comment' => "-c",
36
- 'gid' => "-g",
37
- 'uid' => "-u",
38
- 'shell' => "-s"
39
- }
40
-
41
- include_examples "a useradd-based user provider", supported_useradd_options
42
-
43
39
  describe "when we want to set a password" do
44
40
  before(:each) do
45
41
  @node = Chef::Node.new
@@ -77,4 +73,65 @@ describe Chef::Provider::User::Solaris do
77
73
  end
78
74
  end
79
75
 
76
+ describe 'when managing user locked status' do
77
+ before(:each) do
78
+ @node = Chef::Node.new
79
+ @events = Chef::EventDispatch::Dispatcher.new
80
+ @run_context = Chef::RunContext.new(@node, {}, @events)
81
+
82
+ @new_resource = Chef::Resource::User.new('dave')
83
+ @current_resource = @new_resource.dup
84
+
85
+ @provider = Chef::Provider::User::Solaris.new(@new_resource, @run_context)
86
+ @provider.current_resource = @current_resource
87
+ end
88
+ describe 'when determining if the user is locked' do
89
+
90
+ # locked shadow lines
91
+ [
92
+ 'dave:LK:::::::',
93
+ 'dave:*LK*:::::::',
94
+ 'dave:*LK*foobar:::::::',
95
+ 'dave:*LK*bahamas10:::::::',
96
+ 'dave:*LK*L....:::::::',
97
+ ].each do |shadow|
98
+ it "should return true if user is locked with #{shadow}" do
99
+ shell_return = ShellCmdResult.new(shadow + "\n", '', 0)
100
+ expect(provider).to receive(:shell_out!).with('getent', 'shadow', @new_resource.username).and_return(shell_return)
101
+ expect(provider.check_lock).to eql(true)
102
+ end
103
+ end
104
+
105
+ # unlocked shadow lines
106
+ [
107
+ 'dave:NP:::::::',
108
+ 'dave:*NP*:::::::',
109
+ 'dave:foobar:::::::',
110
+ 'dave:bahamas10:::::::',
111
+ 'dave:L...:::::::',
112
+ ].each do |shadow|
113
+ it "should return false if user is unlocked with #{shadow}" do
114
+ shell_return = ShellCmdResult.new(shadow + "\n", '', 0)
115
+ expect(provider).to receive(:shell_out!).with('getent', 'shadow', @new_resource.username).and_return(shell_return)
116
+ expect(provider.check_lock).to eql(false)
117
+ end
118
+ end
119
+ end
120
+
121
+ describe 'when locking the user' do
122
+ it 'should run passwd -l with the new resources username' do
123
+ shell_return = ShellCmdResult.new('', '', 0)
124
+ expect(provider).to receive(:shell_out!).with('passwd', '-l', @new_resource.username).and_return(shell_return)
125
+ provider.lock_user
126
+ end
127
+ end
128
+
129
+ describe 'when unlocking the user' do
130
+ it 'should run passwd -u with the new resources username' do
131
+ shell_return = ShellCmdResult.new('', '', 0)
132
+ expect(provider).to receive(:shell_out!).with('passwd', '-u', @new_resource.username).and_return(shell_return)
133
+ provider.unlock_user
134
+ end
135
+ end
136
+ end
80
137
  end
@@ -20,6 +20,9 @@ require 'spec_helper'
20
20
  require 'chef/mixin/convert_to_class_name'
21
21
  require 'chef/provider_resolver'
22
22
  require 'chef/platform/service_helpers'
23
+ require 'support/shared/integration/integration_helper'
24
+ require 'tmpdir'
25
+ require 'fileutils'
23
26
 
24
27
  include Chef::Mixin::ConvertToClassName
25
28
 
@@ -27,833 +30,887 @@ include Chef::Mixin::ConvertToClassName
27
30
  #module Chef::Provider
28
31
 
29
32
  describe Chef::ProviderResolver do
33
+ include IntegrationSupport
30
34
 
31
- let(:resource_name) { :service }
32
- let(:provider) { nil }
33
- let(:action) { :start }
34
-
35
- let(:node) do
36
- node = Chef::Node.new
37
- node.automatic[:os] = os
38
- node.automatic[:platform_family] = platform_family
39
- node.automatic[:platform] = platform
40
- node.automatic[:platform_version] = platform_version
41
- node.automatic[:kernel] = { machine: 'i386' }
42
- node
43
- end
44
- let(:run_context) { Chef::RunContext.new(node, nil, nil) }
45
-
46
- let(:provider_resolver) { Chef::ProviderResolver.new(node, resource, action) }
47
- let(:resolved_provider) do
48
- begin
49
- resource ? resource.provider_for_action(action).class : nil
50
- rescue Chef::Exceptions::ProviderNotFound
51
- nil
35
+ # Root the filesystem under a temp directory so Chef.path_to will point at it
36
+ when_the_repository "is empty" do
37
+ before do
38
+ allow(Chef).to receive(:path_to) { |path| File.join(path_to(""), path) }
52
39
  end
53
- end
54
40
 
55
- let(:resource) do
56
- resource_class = Chef::ResourceResolver.resolve(resource_name, node: node)
57
- if resource_class
58
- resource = resource_class.new('test', run_context)
59
- resource.provider = provider if provider
41
+ let(:resource_name) { :service }
42
+ let(:provider) { nil }
43
+ let(:action) { :start }
44
+
45
+ let(:node) do
46
+ node = Chef::Node.new
47
+ node.automatic[:os] = os
48
+ node.automatic[:platform_family] = platform_family
49
+ node.automatic[:platform] = platform
50
+ node.automatic[:platform_version] = platform_version
51
+ node.automatic[:kernel] = { machine: 'i386' }
52
+ node
60
53
  end
61
- resource
62
- end
63
-
64
- def self.on_platform(platform, *tags,
65
- platform_version: '11.0.1',
66
- platform_family: nil,
67
- os: nil,
68
- &block)
69
- Array(platform).each do |platform|
70
- Array(platform_version).each do |platform_version|
71
- on_one_platform(platform, platform_version, platform_family || platform, os || platform_family || platform, *tags, &block)
54
+ let(:run_context) { Chef::RunContext.new(node, nil, nil) }
55
+
56
+ let(:provider_resolver) { Chef::ProviderResolver.new(node, resource, action) }
57
+ let(:resolved_provider) do
58
+ begin
59
+ resource ? resource.provider_for_action(action).class : nil
60
+ rescue Chef::Exceptions::ProviderNotFound
61
+ nil
72
62
  end
73
63
  end
74
- end
75
-
76
- def self.on_one_platform(platform, platform_version, platform_family, os, *tags, &block)
77
- describe "on #{platform} #{platform_version}, platform_family: #{platform_family}, os: #{os}", *tags do
78
- let(:os) { os }
79
- let(:platform) { platform }
80
- let(:platform_family) { platform_family }
81
- let(:platform_version) { platform_version }
82
64
 
83
- define_singleton_method(:os) { os }
84
- define_singleton_method(:platform) { platform }
85
- define_singleton_method(:platform_family) { platform_family }
86
- define_singleton_method(:platform_version) { platform_version }
87
-
88
- instance_eval(&block)
65
+ let(:service_name) { "test" }
66
+ let(:resource) do
67
+ resource_class = Chef::ResourceResolver.resolve(resource_name, node: node)
68
+ if resource_class
69
+ resource = resource_class.new(service_name, run_context)
70
+ resource.provider = provider if provider
71
+ end
72
+ resource
89
73
  end
90
- end
91
74
 
92
- def self.expect_providers(**providers)
93
- providers.each do |name, expected|
94
- describe name.to_s do
95
- let(:resource_name) { name }
96
-
97
- tags = []
98
- expected_provider = nil
99
- expected_resource = nil
100
- Array(expected).each do |p|
101
- if p.is_a?(Class) && p <= Chef::Provider
102
- expected_provider = p
103
- elsif p.is_a?(Class) && p <= Chef::Resource
104
- expected_resource = p
105
- else
106
- tags << p
107
- end
108
- end
109
-
110
- if expected_resource && expected_provider
111
- it "'#{name}' resolves to resource #{expected_resource} and provider #{expected_provider}", *tags do
112
- expect(resource.class).to eql(expected_resource)
113
- provider = double(expected_provider, class: expected_provider)
114
- expect(provider).to receive(:action=).with(action)
115
- expect(expected_provider).to receive(:new).with(resource, run_context).and_return(provider)
116
- expect(resolved_provider).to eql(expected_provider)
117
- end
118
- elsif expected_provider
119
- it "'#{name}' resolves to provider #{expected_provider}", *tags do
120
- provider = double(expected_provider)
121
- expect(provider).to receive(:action=).with(action)
122
- expect(expected_provider).to receive(:new).with(resource, run_context).and_return(provider)
123
- expect(resolved_provider).to eql(expected_provider)
124
- end
125
- else
126
- it "'#{name}' fails to resolve (since #{name.inspect} is unsupported on #{platform} #{platform_version})", *tags do
127
- expect(resolved_provider).to be_nil
128
- end
75
+ def self.on_platform(platform, *tags,
76
+ platform_version: '11.0.1',
77
+ platform_family: nil,
78
+ os: nil,
79
+ &block)
80
+ Array(platform).each do |platform|
81
+ Array(platform_version).each do |platform_version|
82
+ on_one_platform(platform, platform_version, platform_family || platform, os || platform_family || platform, *tags, &block)
129
83
  end
130
84
  end
131
85
  end
132
- end
133
-
134
- describe "resolving service resource" do
135
- def stub_service_providers(*services)
136
- services ||= []
137
- allow(Chef::Platform::ServiceHelpers).to receive(:service_resource_providers)
138
- .and_return(services)
139
- end
140
-
141
- def stub_service_configs(*configs)
142
- configs ||= []
143
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
144
- .and_return(configs)
145
- end
146
-
147
- before do
148
- allow(resource).to receive(:service_name).and_return("ntp")
149
- end
150
-
151
- shared_examples_for "an ubuntu platform with upstart, update-rc.d and systemd" do
152
- before do
153
- stub_service_providers(:debian, :invokercd, :upstart, :systemd)
154
- end
155
86
 
156
- it "when only the SysV init script exists, it returns a Service::Debian provider" do
157
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
158
- .and_return( [ :initd, :systemd ] )
159
- expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
160
- end
161
-
162
- it "when both SysV and Upstart scripts exist, it returns a Service::Upstart provider" do
163
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
164
- .and_return( [ :initd, :upstart, :systemd ] )
165
- expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
166
- end
87
+ def self.on_one_platform(platform, platform_version, platform_family, os, *tags, &block)
88
+ describe "on #{platform} #{platform_version}, platform_family: #{platform_family}, os: #{os}", *tags do
89
+ let(:os) { os }
90
+ let(:platform) { platform }
91
+ let(:platform_family) { platform_family }
92
+ let(:platform_version) { platform_version }
167
93
 
168
- it "when only the Upstart script exists, it returns a Service::Upstart provider" do
169
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
170
- .and_return( [ :upstart, :systemd ] )
171
- expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
172
- end
94
+ define_singleton_method(:os) { os }
95
+ define_singleton_method(:platform) { platform }
96
+ define_singleton_method(:platform_family) { platform_family }
97
+ define_singleton_method(:platform_version) { platform_version }
173
98
 
174
- it "when both do not exist, it calls the old style provider resolver and returns a Debian Provider" do
175
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
176
- .and_return( [ :systemd ] )
177
- expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
178
- end
179
- it "when only the SysV init script exists, it returns a Service::Debian provider" do
180
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
181
- .and_return( [ :initd ] )
182
- expect(resolved_provider).to eql(Chef::Provider::Service::Debian)
99
+ instance_eval(&block)
183
100
  end
101
+ end
184
102
 
185
- it "when both SysV and Upstart scripts exist, it returns a Service::Upstart provider" do
186
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
187
- .and_return( [ :initd, :upstart ] )
188
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
189
- end
103
+ def self.expect_providers(**providers)
104
+ providers.each do |name, expected|
105
+ describe name.to_s do
106
+ let(:resource_name) { name }
107
+
108
+ tags = []
109
+ expected_provider = nil
110
+ expected_resource = nil
111
+ Array(expected).each do |p|
112
+ if p.is_a?(Class) && p <= Chef::Provider
113
+ expected_provider = p
114
+ elsif p.is_a?(Class) && p <= Chef::Resource
115
+ expected_resource = p
116
+ else
117
+ tags << p
118
+ end
119
+ end
190
120
 
191
- it "when only the Upstart script exists, it returns a Service::Upstart provider" do
192
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
193
- .and_return( [ :upstart ] )
194
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
121
+ if expected_resource && expected_provider
122
+ it "'#{name}' resolves to resource #{expected_resource} and provider #{expected_provider}", *tags do
123
+ expect(resource.class).to eql(expected_resource)
124
+ provider = double(expected_provider, class: expected_provider)
125
+ expect(provider).to receive(:action=).with(action)
126
+ expect(expected_provider).to receive(:new).with(resource, run_context).and_return(provider)
127
+ expect(resolved_provider).to eql(expected_provider)
128
+ end
129
+ elsif expected_provider
130
+ it "'#{name}' resolves to provider #{expected_provider}", *tags do
131
+ provider = double(expected_provider)
132
+ expect(provider).to receive(:action=).with(action)
133
+ expect(expected_provider).to receive(:new).with(resource, run_context).and_return(provider)
134
+ expect(resolved_provider).to eql(expected_provider)
135
+ end
136
+ else
137
+ it "'#{name}' fails to resolve (since #{name.inspect} is unsupported on #{platform} #{platform_version})", *tags do
138
+ expect(resolved_provider).to be_nil
139
+ end
140
+ end
141
+ end
195
142
  end
143
+ end
196
144
 
197
- it "when both do not exist, it calls the old style provider resolver and returns a Debian Provider" do
198
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
199
- .and_return( [ ] )
200
- expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
145
+ describe "resolving service resource" do
146
+ def stub_service_providers(*services)
147
+ services.each do |service|
148
+ case service
149
+ when :debian
150
+ directory 'usr/sbin/update-rc.d'
151
+ when :invokercd
152
+ directory 'usr/sbin/invoke-rc.d'
153
+ when :insserv
154
+ directory 'sbin/insserv'
155
+ when :upstart
156
+ directory 'etc/init'
157
+ directory 'sbin/start'
158
+ when :redhat
159
+ directory 'sbin/chkconfig'
160
+ when :systemd
161
+ file 'bin/systemctl', ''
162
+ # Make systemctl executable
163
+ File.chmod(0755, path_to('bin/systemctl'))
164
+ # Windows doesn't respect executable bit, do this to let Windows users see if they've broken the resolver
165
+ allow(::File).to receive(:executable?) { |p| p == path_to('bin/systemctl') } if windows?
166
+ file 'proc/1/comm', "systemd\n"
167
+ mock_shellout_command("/bin/systemctl --all", stdout: "")
168
+ mock_shellout_command("/bin/systemctl list-unit-files", stdout: "")
169
+ else
170
+ raise ArgumentError, service
171
+ end
172
+ end
201
173
  end
202
- end
203
174
 
204
- shared_examples_for "an ubuntu platform with upstart and update-rc.d" do
205
- before do
206
- stub_service_providers(:debian, :invokercd, :upstart)
175
+ def stub_service_configs(*configs)
176
+ configs.each do |config|
177
+ case config
178
+ when :initd
179
+ file "etc/init.d/#{service_name}", ""
180
+ when :upstart
181
+ file "etc/init/#{service_name}.conf", ""
182
+ when :xinetd
183
+ file "etc/xinetd.d/#{service_name}", ""
184
+ when :etc_rcd
185
+ file "etc/rc.d/#{service_name}", ""
186
+ when :usr_local_etc_rcd
187
+ file "usr/local/etc/rc.d/#{service_name}", ""
188
+ when :systemd
189
+ file 'bin/systemctl', ''
190
+ # Make systemctl executable
191
+ File.chmod(0755, path_to("bin/systemctl"))
192
+ # Windows doesn't respect executable bit, do this to let Windows users see if they've broken the resolver
193
+ allow(::File).to receive(:executable?) { |p| p == path_to('bin/systemctl') } if windows?
194
+ file 'proc/1/comm', "systemd\n"
195
+ mock_shellout_command("/bin/systemctl --all", stdout: <<-EOM)
196
+ superv loaded
197
+ stinky something-else
198
+ #{service_name} loaded
199
+ blargh not-found
200
+ EOM
201
+ mock_shellout_command("/bin/systemctl list-unit-files", stdout: <<-EOM)
202
+ usuperv loaded
203
+ ustinky something-else
204
+ u#{service_name} loaded
205
+ ublargh not-found
206
+ EOM
207
+ else
208
+ raise ArgumentError, config
209
+ end
210
+ end
207
211
  end
208
212
 
209
- # needs to be handled by the highest priority init.d handler
210
- context "when only the SysV init script exists" do
213
+ shared_examples_for "an ubuntu platform with upstart, update-rc.d and systemd" do
211
214
  before do
212
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
213
- .and_return( [ :initd ] )
215
+ stub_service_providers(:debian, :invokercd, :upstart, :systemd)
214
216
  end
215
217
 
216
- it "enables init, invokercd, debian and upstart providers" do
217
- expect(provider_resolver.enabled_handlers).to include(
218
- Chef::Provider::Service::Debian,
219
- Chef::Provider::Service::Init,
220
- Chef::Provider::Service::Invokercd,
221
- Chef::Provider::Service::Upstart,
222
- )
218
+ it "when only the SysV init script exists, it returns a Service::Debian provider" do
219
+ stub_service_configs(:initd, :systemd)
220
+ expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
223
221
  end
224
222
 
225
- it "supports all the enabled handlers except for upstart" do
226
- expect(provider_resolver.supported_handlers).to include(
227
- Chef::Provider::Service::Debian,
228
- Chef::Provider::Service::Init,
229
- Chef::Provider::Service::Invokercd,
230
- )
231
- expect(provider_resolver.supported_handlers).to_not include(
232
- Chef::Provider::Service::Upstart,
233
- )
223
+ it "when both SysV and Upstart scripts exist, it returns a Service::Upstart provider" do
224
+ stub_service_configs(:initd, :upstart, :systemd)
225
+ expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
234
226
  end
235
227
 
236
- it "returns a Service::Debian provider" do
237
- expect(resolved_provider).to eql(Chef::Provider::Service::Debian)
228
+ it "when only the Upstart script exists, it returns a Service::Upstart provider" do
229
+ stub_service_configs(:upstart, :systemd)
230
+ expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
238
231
  end
239
- end
240
232
 
241
- # on ubuntu this must be handled by upstart, the init script will exit 1 and fail
242
- context "when both SysV and Upstart scripts exist" do
243
- before do
244
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
245
- .and_return( [ :initd, :upstart ] )
233
+ it "when both do not exist, it calls the old style provider resolver and returns a Debian Provider" do
234
+ stub_service_configs(:systemd)
235
+ expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
246
236
  end
247
237
 
248
- it "enables init, invokercd, debian and upstart providers" do
249
- expect(provider_resolver.enabled_handlers).to include(
250
- Chef::Provider::Service::Debian,
251
- Chef::Provider::Service::Init,
252
- Chef::Provider::Service::Invokercd,
253
- Chef::Provider::Service::Upstart,
254
- )
238
+ it "when only the SysV init script exists, it returns a Service::Debian provider" do
239
+ stub_service_configs(:initd)
240
+ expect(resolved_provider).to eql(Chef::Provider::Service::Debian)
255
241
  end
256
242
 
257
- it "supports all the enabled handlers" do
258
- expect(provider_resolver.supported_handlers).to include(
259
- Chef::Provider::Service::Debian,
260
- Chef::Provider::Service::Init,
261
- Chef::Provider::Service::Invokercd,
262
- Chef::Provider::Service::Upstart,
263
- )
243
+ it "when both SysV and Upstart scripts exist, it returns a Service::Upstart provider" do
244
+ stub_service_configs(:initd, :upstart)
245
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
264
246
  end
265
247
 
266
- it "returns a Service::Upstart provider" do
248
+ it "when only the Upstart script exists, it returns a Service::Upstart provider" do
249
+ stub_service_configs(:upstart)
267
250
  expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
268
251
  end
252
+
253
+ it "when both do not exist, it calls the old style provider resolver and returns a Debian Provider" do
254
+ stub_service_configs
255
+ expect(resolved_provider).to eql(Chef::Provider::Service::Systemd)
256
+ end
269
257
  end
270
258
 
271
- # this case is a pure-upstart script which is easy
272
- context "when only the Upstart script exists" do
259
+ shared_examples_for "an ubuntu platform with upstart and update-rc.d" do
273
260
  before do
274
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
275
- .and_return( [ :upstart ] )
261
+ stub_service_providers(:debian, :invokercd, :upstart)
276
262
  end
277
263
 
278
- it "enables init, invokercd, debian and upstart providers" do
279
- expect(provider_resolver.enabled_handlers).to include(
280
- Chef::Provider::Service::Debian,
281
- Chef::Provider::Service::Init,
282
- Chef::Provider::Service::Invokercd,
283
- Chef::Provider::Service::Upstart,
284
- )
285
- end
264
+ # needs to be handled by the highest priority init.d handler
265
+ context "when only the SysV init script exists" do
266
+ before do
267
+ stub_service_configs(:initd)
268
+ end
286
269
 
287
- it "supports only the upstart handler" do
288
- expect(provider_resolver.supported_handlers).to include(
289
- Chef::Provider::Service::Upstart,
290
- )
291
- expect(provider_resolver.supported_handlers).to_not include(
292
- Chef::Provider::Service::Debian,
293
- Chef::Provider::Service::Init,
294
- Chef::Provider::Service::Invokercd,
295
- )
296
- end
270
+ it "enables init, invokercd, debian and upstart providers" do
271
+ expect(provider_resolver.enabled_handlers).to include(
272
+ Chef::Provider::Service::Debian,
273
+ Chef::Provider::Service::Init,
274
+ Chef::Provider::Service::Invokercd,
275
+ Chef::Provider::Service::Upstart,
276
+ )
277
+ end
297
278
 
298
- it "returns a Service::Upstart provider" do
299
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
300
- end
301
- end
279
+ it "supports all the enabled handlers except for upstart" do
280
+ expect(provider_resolver.supported_handlers).to include(
281
+ Chef::Provider::Service::Debian,
282
+ Chef::Provider::Service::Init,
283
+ Chef::Provider::Service::Invokercd,
284
+ )
285
+ expect(provider_resolver.supported_handlers).to_not include(
286
+ Chef::Provider::Service::Upstart,
287
+ )
288
+ end
302
289
 
303
- # this case is important to get correct for why-run when no config is setup
304
- context "when both do not exist" do
305
- before do
306
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
307
- .and_return( [ ] )
290
+ it "returns a Service::Debian provider" do
291
+ expect(resolved_provider).to eql(Chef::Provider::Service::Debian)
292
+ end
308
293
  end
309
294
 
310
- it "enables init, invokercd, debian and upstart providers" do
311
- expect(provider_resolver.enabled_handlers).to include(
312
- Chef::Provider::Service::Debian,
313
- Chef::Provider::Service::Init,
314
- Chef::Provider::Service::Invokercd,
315
- Chef::Provider::Service::Upstart,
316
- )
317
- end
295
+ # on ubuntu this must be handled by upstart, the init script will exit 1 and fail
296
+ context "when both SysV and Upstart scripts exist" do
297
+ before do
298
+ stub_service_configs(:initd, :upstart)
299
+ end
318
300
 
319
- it "no providers claim to support the resource" do
320
- expect(provider_resolver.supported_handlers).to_not include(
321
- Chef::Provider::Service::Upstart,
322
- Chef::Provider::Service::Debian,
323
- Chef::Provider::Service::Init,
324
- Chef::Provider::Service::Invokercd,
325
- )
326
- end
301
+ it "enables init, invokercd, debian and upstart providers" do
302
+ expect(provider_resolver.enabled_handlers).to include(
303
+ Chef::Provider::Service::Debian,
304
+ Chef::Provider::Service::Init,
305
+ Chef::Provider::Service::Invokercd,
306
+ Chef::Provider::Service::Upstart,
307
+ )
308
+ end
327
309
 
328
- it "returns a Debian Provider" do
329
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
330
- end
331
- end
332
- end
310
+ it "supports all the enabled handlers" do
311
+ expect(provider_resolver.supported_handlers).to include(
312
+ Chef::Provider::Service::Debian,
313
+ Chef::Provider::Service::Init,
314
+ Chef::Provider::Service::Invokercd,
315
+ Chef::Provider::Service::Upstart,
316
+ )
317
+ end
333
318
 
334
- shared_examples_for "a debian platform using the insserv provider" do
335
- context "with a default install" do
336
- before do
337
- stub_service_providers(:debian, :invokercd, :insserv)
319
+ it "returns a Service::Upstart provider" do
320
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
321
+ end
338
322
  end
339
323
 
340
- it "uses the Service::Insserv Provider to manage sysv init scripts" do
341
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
342
- .and_return( [ :initd ] )
343
- expect(resolved_provider).to eql(Chef::Provider::Service::Insserv)
344
- end
324
+ # this case is a pure-upstart script which is easy
325
+ context "when only the Upstart script exists" do
326
+ before do
327
+ stub_service_configs(:upstart)
328
+ end
345
329
 
346
- it "uses the Service::Insserv Provider when there is no config" do
347
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
348
- .and_return( [ ] )
349
- expect(resolved_provider).to eql(Chef::Provider::Service::Insserv)
350
- end
351
- end
330
+ it "enables init, invokercd, debian and upstart providers" do
331
+ expect(provider_resolver.enabled_handlers).to include(
332
+ Chef::Provider::Service::Debian,
333
+ Chef::Provider::Service::Init,
334
+ Chef::Provider::Service::Invokercd,
335
+ Chef::Provider::Service::Upstart,
336
+ )
337
+ end
352
338
 
353
- context "when the user has installed upstart" do
354
- before do
355
- stub_service_providers(:debian, :invokercd, :insserv, :upstart)
356
- end
339
+ it "supports only the upstart handler" do
340
+ expect(provider_resolver.supported_handlers).to include(
341
+ Chef::Provider::Service::Upstart,
342
+ )
343
+ expect(provider_resolver.supported_handlers).to_not include(
344
+ Chef::Provider::Service::Debian,
345
+ Chef::Provider::Service::Init,
346
+ Chef::Provider::Service::Invokercd,
347
+ )
348
+ end
357
349
 
358
- it "when only the SysV init script exists, it returns an Insserv provider" do
359
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
360
- .and_return( [ :initd ] )
361
- expect(resolved_provider).to eql(Chef::Provider::Service::Insserv)
350
+ it "returns a Service::Upstart provider" do
351
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
352
+ end
362
353
  end
363
354
 
364
- it "when both SysV and Upstart scripts exist, it returns a Service::Upstart provider" do
365
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
366
- .and_return( [ :initd, :upstart ] )
367
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
368
- end
355
+ # this case is important to get correct for why-run when no config is setup
356
+ context "when both do not exist" do
357
+ before do
358
+ stub_service_configs
359
+ end
369
360
 
370
- it "when only the Upstart script exists, it returns a Service::Upstart provider" do
371
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
372
- .and_return( [ :upstart ] )
373
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
374
- end
361
+ it "enables init, invokercd, debian and upstart providers" do
362
+ expect(provider_resolver.enabled_handlers).to include(
363
+ Chef::Provider::Service::Debian,
364
+ Chef::Provider::Service::Init,
365
+ Chef::Provider::Service::Invokercd,
366
+ Chef::Provider::Service::Upstart,
367
+ )
368
+ end
375
369
 
376
- it "when both do not exist, it calls the old style provider resolver and returns a Debian Provider" do
377
- allow(Chef::Platform::ServiceHelpers).to receive(:config_for_service).with("ntp")
378
- .and_return( [ ] )
379
- expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
370
+ it "no providers claim to support the resource" do
371
+ expect(provider_resolver.supported_handlers).to_not include(
372
+ Chef::Provider::Service::Upstart,
373
+ Chef::Provider::Service::Debian,
374
+ Chef::Provider::Service::Init,
375
+ Chef::Provider::Service::Invokercd,
376
+ )
377
+ end
378
+
379
+ it "returns a Debian Provider" do
380
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
381
+ end
380
382
  end
381
383
  end
382
- end
383
384
 
384
- on_platform "ubuntu", platform_version: "14.10", platform_family: "debian", os: "linux" do
385
- it_behaves_like "an ubuntu platform with upstart, update-rc.d and systemd"
386
- end
385
+ shared_examples_for "a debian platform using the insserv provider" do
386
+ context "with a default install" do
387
+ before do
388
+ stub_service_providers(:debian, :invokercd, :insserv)
389
+ end
387
390
 
388
- on_platform "ubuntu", platform_version: "14.04", platform_family: "debian", os: "linux" do
389
- it_behaves_like "an ubuntu platform with upstart and update-rc.d"
390
- end
391
+ it "uses the Service::Insserv Provider to manage sysv init scripts" do
392
+ stub_service_configs(:initd)
393
+ expect(resolved_provider).to eql(Chef::Provider::Service::Insserv)
394
+ end
391
395
 
392
- on_platform "ubuntu", platform_version: "10.04", platform_family: "debian", os: "linux" do
393
- it_behaves_like "an ubuntu platform with upstart and update-rc.d"
394
- end
396
+ it "uses the Service::Insserv Provider when there is no config" do
397
+ stub_service_configs
398
+ expect(resolved_provider).to eql(Chef::Provider::Service::Insserv)
399
+ end
400
+ end
395
401
 
396
- # old debian uses the Debian provider (does not have insserv or upstart, or update-rc.d???)
397
- on_platform "debian", platform_version: "4.0", os: "linux" do
398
- #it_behaves_like "a debian platform using the debian provider"
399
- end
402
+ context "when the user has installed upstart" do
403
+ before do
404
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart)
405
+ end
400
406
 
401
- # Debian replaced the debian provider with insserv in the FIXME:VERSION distro
402
- on_platform "debian", platform_version: "7.0", os: "linux" do
403
- it_behaves_like "a debian platform using the insserv provider"
404
- end
407
+ it "when only the SysV init script exists, it returns an Insserv provider" do
408
+ stub_service_configs(:initd)
409
+ expect(resolved_provider).to eql(Chef::Provider::Service::Insserv)
410
+ end
411
+
412
+ it "when both SysV and Upstart scripts exist, it returns a Service::Upstart provider" do
413
+ stub_service_configs(:initd, :upstart)
414
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
415
+ end
416
+
417
+ it "when only the Upstart script exists, it returns a Service::Upstart provider" do
418
+ stub_service_configs(:upstart)
419
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
420
+ end
405
421
 
406
- on_platform %w{solaris2 openindiana opensolaris nexentacore omnios smartos}, os: "solaris2", platform_version: "5.11" do
407
- it "returns a Solaris provider" do
408
- stub_service_providers
409
- stub_service_configs
410
- expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
422
+ it "when both do not exist, it calls the old style provider resolver and returns a Debian Provider" do
423
+ stub_service_configs
424
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
425
+ end
426
+ end
411
427
  end
412
428
 
413
- it "always returns a Solaris provider" do
414
- # no matter what we stub on the next two lines we should get a Solaris provider
415
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
416
- stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
417
- expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
429
+ on_platform "ubuntu", platform_version: "15.10", platform_family: "debian", os: "linux" do
430
+ it_behaves_like "an ubuntu platform with upstart, update-rc.d and systemd"
431
+
432
+ it "when the unit-files are missing and system-ctl list-unit-files returns an error" do
433
+ stub_service_providers(:debian, :invokercd, :upstart, :systemd)
434
+ stub_service_configs(:initd, :upstart)
435
+ mock_shellout_command("/bin/systemctl list-unit-files", exitstatus: 1)
436
+ expect(resolved_provider).to eql(Chef::Provider::Service::Upstart)
437
+ end
418
438
  end
419
- end
420
439
 
421
- on_platform %w{mswin mingw32 windows}, platform_family: "windows", platform_version: "5.11" do
422
- it "returns a Windows provider" do
423
- stub_service_providers
424
- stub_service_configs
425
- expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
440
+ on_platform "ubuntu", platform_version: "14.10", platform_family: "debian", os: "linux" do
441
+ it_behaves_like "an ubuntu platform with upstart, update-rc.d and systemd"
426
442
  end
427
443
 
428
- it "always returns a Windows provider" do
429
- # no matter what we stub on the next two lines we should get a Windows provider
430
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
431
- stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
432
- expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
444
+ on_platform "ubuntu", platform_version: "14.04", platform_family: "debian", os: "linux" do
445
+ it_behaves_like "an ubuntu platform with upstart and update-rc.d"
433
446
  end
434
- end
435
447
 
436
- on_platform %w{mac_os_x mac_os_x_server}, os: "darwin", platform_family: "mac_os_x", platform_version: "10.9.2" do
437
- it "returns a Macosx provider" do
438
- stub_service_providers
439
- stub_service_configs
440
- expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
448
+ on_platform "ubuntu", platform_version: "10.04", platform_family: "debian", os: "linux" do
449
+ it_behaves_like "an ubuntu platform with upstart and update-rc.d"
441
450
  end
442
451
 
443
- it "always returns a Macosx provider" do
444
- # no matter what we stub on the next two lines we should get a Macosx provider
445
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
446
- stub_service_configs(:initd, :upstart, :xinetd, :user_local_etc_rcd, :systemd)
447
- expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
452
+ # old debian uses the Debian provider (does not have insserv or upstart, or update-rc.d???)
453
+ on_platform "debian", platform_version: "4.0", os: "linux" do
454
+ #it_behaves_like "a debian platform using the debian provider"
448
455
  end
449
- end
450
456
 
451
- on_platform %w(freebsd netbsd), platform_version: '3.1.4' do
452
- it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
453
- stub_service_providers
454
- stub_service_configs(:usr_local_etc_rcd)
455
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
457
+ # Debian replaced the debian provider with insserv in the FIXME:VERSION distro
458
+ on_platform "debian", platform_version: "7.0", os: "linux" do
459
+ it_behaves_like "a debian platform using the insserv provider"
456
460
  end
457
461
 
458
- it "returns a Freebsd provider if it finds the /etc/rc.d initscript" do
459
- stub_service_providers
460
- stub_service_configs(:etc_rcd)
461
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
462
+ on_platform %w{solaris2 openindiana opensolaris nexentacore omnios smartos}, os: "solaris2", platform_version: "5.11" do
463
+ it "returns a Solaris provider" do
464
+ stub_service_providers
465
+ stub_service_configs
466
+ expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
467
+ end
468
+
469
+ it "always returns a Solaris provider" do
470
+ # no matter what we stub on the next two lines we should get a Solaris provider
471
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
472
+ stub_service_configs(:initd, :upstart, :xinetd, :usr_local_etc_rcd, :systemd)
473
+ expect(resolved_provider).to eql(Chef::Provider::Service::Solaris)
474
+ end
462
475
  end
463
476
 
464
- it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
465
- # should only care about :usr_local_etc_rcd stub in the service configs
466
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
467
- stub_service_configs(:usr_local_etc_rcd, :initd, :upstart, :xinetd, :systemd)
468
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
477
+ on_platform %w{mswin mingw32 windows}, platform_family: "windows", platform_version: "5.11" do
478
+ it "returns a Windows provider" do
479
+ stub_service_providers
480
+ stub_service_configs
481
+ expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
482
+ end
483
+
484
+ it "always returns a Windows provider" do
485
+ # no matter what we stub on the next two lines we should get a Windows provider
486
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
487
+ stub_service_configs(:initd, :upstart, :xinetd, :usr_local_etc_rcd, :systemd)
488
+ expect(resolved_provider).to eql(Chef::Provider::Service::Windows)
489
+ end
469
490
  end
470
491
 
471
- it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
472
- # should only care about :etc_rcd stub in the service configs
473
- stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
474
- stub_service_configs(:etc_rcd, :initd, :upstart, :xinetd, :systemd)
475
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
492
+ on_platform %w{mac_os_x mac_os_x_server}, os: "darwin", platform_family: "mac_os_x", platform_version: "10.9.2" do
493
+ it "returns a Macosx provider" do
494
+ stub_service_providers
495
+ stub_service_configs
496
+ expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
497
+ end
498
+
499
+ it "always returns a Macosx provider" do
500
+ # no matter what we stub on the next two lines we should get a Macosx provider
501
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
502
+ stub_service_configs(:initd, :upstart, :xinetd, :usr_local_etc_rcd, :systemd)
503
+ expect(resolved_provider).to eql(Chef::Provider::Service::Macosx)
504
+ end
476
505
  end
477
506
 
478
- it "foo" do
479
- stub_service_providers
480
- stub_service_configs
481
- expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
507
+ on_platform %w(freebsd netbsd), platform_version: '3.1.4' do
508
+ it "returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
509
+ stub_service_providers
510
+ stub_service_configs(:usr_local_etc_rcd)
511
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
512
+ end
513
+
514
+ it "returns a Freebsd provider if it finds the /etc/rc.d initscript" do
515
+ stub_service_providers
516
+ stub_service_configs(:etc_rcd)
517
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
518
+ end
519
+
520
+ it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
521
+ # should only care about :usr_local_etc_rcd stub in the service configs
522
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
523
+ stub_service_configs(:usr_local_etc_rcd, :initd, :upstart, :xinetd, :systemd)
524
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
525
+ end
526
+
527
+ it "always returns a Freebsd provider if it finds the /usr/local/etc/rc.d initscript" do
528
+ # should only care about :etc_rcd stub in the service configs
529
+ stub_service_providers(:debian, :invokercd, :insserv, :upstart, :redhat, :systemd)
530
+ stub_service_configs(:etc_rcd, :initd, :upstart, :xinetd, :systemd)
531
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
532
+ end
533
+
534
+ it "foo" do
535
+ stub_service_providers
536
+ stub_service_configs
537
+ expect(resolved_provider).to eql(Chef::Provider::Service::Freebsd)
538
+ end
482
539
  end
483
- end
484
540
 
485
- end
541
+ end
486
542
 
487
- PROVIDERS =
488
- {
489
- bash: [ Chef::Resource::Bash, Chef::Provider::Script ],
490
- breakpoint: [ Chef::Resource::Breakpoint, Chef::Provider::Breakpoint ],
491
- chef_gem: [ Chef::Resource::ChefGem, Chef::Provider::Package::Rubygems ],
492
- cookbook_file: [ Chef::Resource::CookbookFile, Chef::Provider::CookbookFile ],
493
- csh: [ Chef::Resource::Csh, Chef::Provider::Script ],
494
- deploy: [ Chef::Resource::Deploy, Chef::Provider::Deploy::Timestamped ],
495
- deploy_revision: [ Chef::Resource::DeployRevision, Chef::Provider::Deploy::Revision ],
496
- directory: [ Chef::Resource::Directory, Chef::Provider::Directory ],
497
- easy_install_package: [ Chef::Resource::EasyInstallPackage, Chef::Provider::Package::EasyInstall ],
498
- erl_call: [ Chef::Resource::ErlCall, Chef::Provider::ErlCall ],
499
- execute: [ Chef::Resource::Execute, Chef::Provider::Execute ],
500
- file: [ Chef::Resource::File, Chef::Provider::File ],
501
- gem_package: [ Chef::Resource::GemPackage, Chef::Provider::Package::Rubygems ],
502
- git: [ Chef::Resource::Git, Chef::Provider::Git ],
503
- group: [ Chef::Resource::Group, Chef::Provider::Group::Gpasswd ],
504
- homebrew_package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
505
- http_request: [ Chef::Resource::HttpRequest, Chef::Provider::HttpRequest ],
506
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
507
- link: [ Chef::Resource::Link, Chef::Provider::Link ],
508
- log: [ Chef::Resource::Log, Chef::Provider::Log::ChefLog ],
509
- macports_package: [ Chef::Resource::MacportsPackage, Chef::Provider::Package::Macports ],
510
- mdadm: [ Chef::Resource::Mdadm, Chef::Provider::Mdadm ],
511
- mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Mount ],
512
- perl: [ Chef::Resource::Perl, Chef::Provider::Script ],
513
- portage_package: [ Chef::Resource::PortagePackage, Chef::Provider::Package::Portage ],
514
- python: [ Chef::Resource::Python, Chef::Provider::Script ],
515
- remote_directory: [ Chef::Resource::RemoteDirectory, Chef::Provider::RemoteDirectory ],
516
- route: [ Chef::Resource::Route, Chef::Provider::Route ],
517
- ruby: [ Chef::Resource::Ruby, Chef::Provider::Script ],
518
- ruby_block: [ Chef::Resource::RubyBlock, Chef::Provider::RubyBlock ],
519
- script: [ Chef::Resource::Script, Chef::Provider::Script ],
520
- subversion: [ Chef::Resource::Subversion, Chef::Provider::Subversion ],
521
- template: [ Chef::Resource::Template, Chef::Provider::Template ],
522
- timestamped_deploy: [ Chef::Resource::TimestampedDeploy, Chef::Provider::Deploy::Timestamped ],
523
- user: [ Chef::Resource::User, Chef::Provider::User::Useradd ],
524
- whyrun_safe_ruby_block: [ Chef::Resource::WhyrunSafeRubyBlock, Chef::Provider::WhyrunSafeRubyBlock ],
525
-
526
- # We want to check that these are unsupported:
527
- apt_package: nil,
528
- bff_package: nil,
529
- dpkg_package: nil,
530
- dsc_script: nil,
531
- ips_package: nil,
532
- pacman_package: nil,
533
- paludis_package: nil,
534
- rpm_package: nil,
535
- smartos_package: nil,
536
- solaris_package: nil,
537
- yum_package: nil,
538
- windows_package: nil,
539
- windows_service: nil,
540
-
541
- "linux" => {
542
- apt_package: [ Chef::Resource::AptPackage, Chef::Provider::Package::Apt ],
543
- dpkg_package: [ Chef::Resource::DpkgPackage, Chef::Provider::Package::Dpkg ],
544
- pacman_package: [ Chef::Resource::PacmanPackage, Chef::Provider::Package::Pacman ],
545
- paludis_package: [ Chef::Resource::PaludisPackage, Chef::Provider::Package::Paludis ],
546
- rpm_package: [ Chef::Resource::RpmPackage, Chef::Provider::Package::Rpm ],
547
- yum_package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
548
-
549
- "debian" => {
550
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Debian ],
551
- package: [ Chef::Resource::AptPackage, Chef::Provider::Package::Apt ],
552
- # service: [ Chef::Resource::DebianService, Chef::Provider::Service::Debian ],
543
+ PROVIDERS =
544
+ {
545
+ bash: [ Chef::Resource::Bash, Chef::Provider::Script ],
546
+ breakpoint: [ Chef::Resource::Breakpoint, Chef::Provider::Breakpoint ],
547
+ chef_gem: [ Chef::Resource::ChefGem, Chef::Provider::Package::Rubygems ],
548
+ cookbook_file: [ Chef::Resource::CookbookFile, Chef::Provider::CookbookFile ],
549
+ csh: [ Chef::Resource::Csh, Chef::Provider::Script ],
550
+ deploy: [ Chef::Resource::Deploy, Chef::Provider::Deploy::Timestamped ],
551
+ deploy_revision: [ Chef::Resource::DeployRevision, Chef::Provider::Deploy::Revision ],
552
+ directory: [ Chef::Resource::Directory, Chef::Provider::Directory ],
553
+ easy_install_package: [ Chef::Resource::EasyInstallPackage, Chef::Provider::Package::EasyInstall ],
554
+ erl_call: [ Chef::Resource::ErlCall, Chef::Provider::ErlCall ],
555
+ execute: [ Chef::Resource::Execute, Chef::Provider::Execute ],
556
+ file: [ Chef::Resource::File, Chef::Provider::File ],
557
+ gem_package: [ Chef::Resource::GemPackage, Chef::Provider::Package::Rubygems ],
558
+ git: [ Chef::Resource::Git, Chef::Provider::Git ],
559
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Gpasswd ],
560
+ homebrew_package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
561
+ http_request: [ Chef::Resource::HttpRequest, Chef::Provider::HttpRequest ],
562
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
563
+ link: [ Chef::Resource::Link, Chef::Provider::Link ],
564
+ log: [ Chef::Resource::Log, Chef::Provider::Log::ChefLog ],
565
+ macports_package: [ Chef::Resource::MacportsPackage, Chef::Provider::Package::Macports ],
566
+ mdadm: [ Chef::Resource::Mdadm, Chef::Provider::Mdadm ],
567
+ mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Mount ],
568
+ perl: [ Chef::Resource::Perl, Chef::Provider::Script ],
569
+ portage_package: [ Chef::Resource::PortagePackage, Chef::Provider::Package::Portage ],
570
+ python: [ Chef::Resource::Python, Chef::Provider::Script ],
571
+ remote_directory: [ Chef::Resource::RemoteDirectory, Chef::Provider::RemoteDirectory ],
572
+ route: [ Chef::Resource::Route, Chef::Provider::Route ],
573
+ ruby: [ Chef::Resource::Ruby, Chef::Provider::Script ],
574
+ ruby_block: [ Chef::Resource::RubyBlock, Chef::Provider::RubyBlock ],
575
+ script: [ Chef::Resource::Script, Chef::Provider::Script ],
576
+ subversion: [ Chef::Resource::Subversion, Chef::Provider::Subversion ],
577
+ template: [ Chef::Resource::Template, Chef::Provider::Template ],
578
+ timestamped_deploy: [ Chef::Resource::TimestampedDeploy, Chef::Provider::Deploy::Timestamped ],
579
+ user: [ Chef::Resource::User, Chef::Provider::User::Useradd ],
580
+ whyrun_safe_ruby_block: [ Chef::Resource::WhyrunSafeRubyBlock, Chef::Provider::WhyrunSafeRubyBlock ],
581
+
582
+ # We want to check that these are unsupported:
583
+ apt_package: nil,
584
+ bff_package: nil,
585
+ dpkg_package: nil,
586
+ dsc_script: nil,
587
+ ips_package: nil,
588
+ pacman_package: nil,
589
+ paludis_package: nil,
590
+ rpm_package: nil,
591
+ smartos_package: nil,
592
+ solaris_package: nil,
593
+ yum_package: nil,
594
+ windows_package: nil,
595
+ windows_service: nil,
596
+
597
+ "linux" => {
598
+ apt_package: [ Chef::Resource::AptPackage, Chef::Provider::Package::Apt ],
599
+ dpkg_package: [ Chef::Resource::DpkgPackage, Chef::Provider::Package::Dpkg ],
600
+ pacman_package: [ Chef::Resource::PacmanPackage, Chef::Provider::Package::Pacman ],
601
+ paludis_package: [ Chef::Resource::PaludisPackage, Chef::Provider::Package::Paludis ],
602
+ rpm_package: [ Chef::Resource::RpmPackage, Chef::Provider::Package::Rpm ],
603
+ yum_package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
553
604
 
554
605
  "debian" => {
555
- "7.0" => {
556
- },
557
- "6.0" => {
558
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
559
- # service: [ Chef::Resource::InsservService, Chef::Provider::Service::Insserv ],
560
- },
561
- "5.0" => {
562
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
606
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Debian ],
607
+ package: [ Chef::Resource::AptPackage, Chef::Provider::Package::Apt ],
608
+ # service: [ Chef::Resource::DebianService, Chef::Provider::Service::Debian ],
609
+
610
+ "debian" => {
611
+ "7.0" => {
612
+ },
613
+ "6.0" => {
614
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
615
+ # service: [ Chef::Resource::InsservService, Chef::Provider::Service::Insserv ],
616
+ },
617
+ "5.0" => {
618
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
619
+ },
620
+ },
621
+ "gcel" => {
622
+ "3.1.4" => {
623
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
624
+ },
625
+ },
626
+ "linaro" => {
627
+ "3.1.4" => {
628
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
629
+ },
630
+ },
631
+ "linuxmint" => {
632
+ "3.1.4" => {
633
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
634
+ # service: [ Chef::Resource::UpstartService, Chef::Provider::Service::Upstart ],
635
+ },
636
+ },
637
+ "raspbian" => {
638
+ "3.1.4" => {
639
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
640
+ },
641
+ },
642
+ "ubuntu" => {
643
+ "11.10" => {
644
+ },
645
+ "10.04" => {
646
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
647
+ },
563
648
  },
564
649
  },
565
- "gcel" => {
566
- "3.1.4" => {
567
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
568
- },
569
- },
570
- "linaro" => {
571
- "3.1.4" => {
572
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
573
- },
574
- },
575
- "linuxmint" => {
576
- "3.1.4" => {
577
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
578
- # service: [ Chef::Resource::UpstartService, Chef::Provider::Service::Upstart ],
579
- },
580
- },
581
- "raspbian" => {
582
- "3.1.4" => {
583
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
584
- },
585
- },
586
- "ubuntu" => {
587
- "11.10" => {
588
- },
589
- "10.04" => {
590
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig ],
591
- },
592
- },
593
- },
594
-
595
- "arch" => {
596
- # TODO should be Chef::Resource::PacmanPackage
597
- package: [ Chef::Resource::Package, Chef::Provider::Package::Pacman ],
598
650
 
599
651
  "arch" => {
600
- "3.1.4" => {
601
- }
602
- },
603
- },
652
+ # TODO should be Chef::Resource::PacmanPackage
653
+ package: [ Chef::Resource::Package, Chef::Provider::Package::Pacman ],
604
654
 
605
- "freebsd" => {
606
- group: [ Chef::Resource::Group, Chef::Provider::Group::Pw ],
607
- user: [ Chef::Resource::User, Chef::Provider::User::Pw ],
655
+ "arch" => {
656
+ "3.1.4" => {
657
+ }
658
+ },
659
+ },
608
660
 
609
661
  "freebsd" => {
610
- "3.1.4" => {
662
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Pw ],
663
+ user: [ Chef::Resource::User, Chef::Provider::User::Pw ],
664
+
665
+ "freebsd" => {
666
+ "3.1.4" => {
667
+ },
611
668
  },
612
669
  },
613
- },
614
- "suse" => {
615
- group: [ Chef::Resource::Group, Chef::Provider::Group::Gpasswd ],
616
670
  "suse" => {
617
- "12.0" => {
618
- },
619
- %w(11.1 11.2 11.3) => {
620
- group: [ Chef::Resource::Group, Chef::Provider::Group::Suse ],
621
- },
622
- },
623
- "opensuse" => {
624
- # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
625
- package: [ Chef::Resource::ZypperPackage, Chef::Provider::Package::Zypper ],
626
- group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ],
627
- "12.3" => {
628
- },
629
- "12.2" => {
630
- group: [ Chef::Resource::Group, Chef::Provider::Group::Suse ],
671
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Gpasswd ],
672
+ "suse" => {
673
+ "12.0" => {
674
+ },
675
+ %w(11.1 11.2 11.3) => {
676
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Suse ],
677
+ },
678
+ },
679
+ "opensuse" => {
680
+ # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
681
+ package: [ Chef::Resource::ZypperPackage, Chef::Provider::Package::Zypper ],
682
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ],
683
+ "12.3" => {
684
+ },
685
+ "12.2" => {
686
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Suse ],
687
+ },
631
688
  },
632
689
  },
633
- },
634
-
635
- "gentoo" => {
636
- # TODO should be Chef::Resource::PortagePackage
637
- package: [ Chef::Resource::Package, Chef::Provider::Package::Portage ],
638
- portage_package: [ Chef::Resource::PortagePackage, Chef::Provider::Package::Portage ],
639
- # service: [ Chef::Resource::GentooService, Chef::Provider::Service::Gentoo ],
640
690
 
641
691
  "gentoo" => {
642
- "3.1.4" => {
643
- },
644
- },
645
- },
692
+ # TODO should be Chef::Resource::PortagePackage
693
+ package: [ Chef::Resource::Package, Chef::Provider::Package::Portage ],
694
+ portage_package: [ Chef::Resource::PortagePackage, Chef::Provider::Package::Portage ],
695
+ # service: [ Chef::Resource::GentooService, Chef::Provider::Service::Gentoo ],
646
696
 
647
- "rhel" => {
648
- # service: [ Chef::Resource::SystemdService, Chef::Provider::Service::Systemd ],
649
- package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
650
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Redhat ],
651
-
652
- %w(amazon xcp xenserver ibm_powerkvm cloudlinux parallels) => {
653
- "3.1.4" => {
654
- # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
697
+ "gentoo" => {
698
+ "3.1.4" => {
699
+ },
655
700
  },
656
701
  },
657
- %w(redhat centos scientific oracle) => {
658
- "7.0" => {
659
- },
660
- "6.0" => {
661
- # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
662
- },
663
- },
664
- "fedora" => {
665
- "15.0" => {
666
- },
667
- "14.0" => {
668
- # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
702
+
703
+ "rhel" => {
704
+ # service: [ Chef::Resource::SystemdService, Chef::Provider::Service::Systemd ],
705
+ package: [ Chef::Resource::YumPackage, Chef::Provider::Package::Yum ],
706
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Redhat ],
707
+
708
+ %w(amazon xcp xenserver ibm_powerkvm cloudlinux parallels) => {
709
+ "3.1.4" => {
710
+ # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
711
+ },
712
+ },
713
+ %w(redhat centos scientific oracle) => {
714
+ "7.0" => {
715
+ },
716
+ "6.0" => {
717
+ # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
718
+ },
719
+ },
720
+ "fedora" => {
721
+ "15.0" => {
722
+ },
723
+ "14.0" => {
724
+ # service: [ Chef::Resource::RedhatService, Chef::Provider::Service::Redhat ],
725
+ },
669
726
  },
670
727
  },
671
- },
672
728
 
673
- },
729
+ },
674
730
 
675
- "darwin" => {
676
- %w(mac_os_x mac_os_x_server) => {
677
- group: [ Chef::Resource::Group, Chef::Provider::Group::Dscl ],
678
- package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
679
- user: [ Chef::Resource::User, Chef::Provider::User::Dscl ],
731
+ "darwin" => {
732
+ %w(mac_os_x mac_os_x_server) => {
733
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Dscl ],
734
+ package: [ Chef::Resource::HomebrewPackage, Chef::Provider::Package::Homebrew ],
735
+ user: [ Chef::Resource::User, Chef::Provider::User::Dscl ],
680
736
 
681
- "mac_os_x" => {
682
- "10.9.2" => {
737
+ "mac_os_x" => {
738
+ "10.9.2" => {
739
+ },
683
740
  },
684
741
  },
685
742
  },
686
- },
687
-
688
- "windows" => {
689
- batch: [ Chef::Resource::Batch, Chef::Provider::Batch ],
690
- dsc_script: [ Chef::Resource::DscScript, Chef::Provider::DscScript ],
691
- env: [ Chef::Resource::Env, Chef::Provider::Env::Windows ],
692
- group: [ Chef::Resource::Group, Chef::Provider::Group::Windows ],
693
- mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Windows ],
694
- package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ],
695
- powershell_script: [ Chef::Resource::PowershellScript, Chef::Provider::PowershellScript ],
696
- service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ],
697
- user: [ Chef::Resource::User, Chef::Provider::User::Windows ],
698
- windows_package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ],
699
- windows_service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ],
700
743
 
701
744
  "windows" => {
702
- %w(mswin mingw32 windows) => {
703
- "10.9.2" => {
745
+ batch: [ Chef::Resource::Batch, Chef::Provider::Batch ],
746
+ dsc_script: [ Chef::Resource::DscScript, Chef::Provider::DscScript ],
747
+ env: [ Chef::Resource::Env, Chef::Provider::Env::Windows ],
748
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Windows ],
749
+ mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Windows ],
750
+ package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ],
751
+ powershell_script: [ Chef::Resource::PowershellScript, Chef::Provider::PowershellScript ],
752
+ service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ],
753
+ user: [ Chef::Resource::User, Chef::Provider::User::Windows ],
754
+ windows_package: [ Chef::Resource::WindowsPackage, Chef::Provider::Package::Windows ],
755
+ windows_service: [ Chef::Resource::WindowsService, Chef::Provider::Service::Windows ],
756
+
757
+ "windows" => {
758
+ %w(mswin mingw32 windows) => {
759
+ "10.9.2" => {
760
+ },
704
761
  },
705
762
  },
706
763
  },
707
- },
708
-
709
- "aix" => {
710
- bff_package: [ Chef::Resource::BffPackage, Chef::Provider::Package::Aix ],
711
- cron: [ Chef::Resource::Cron, Chef::Provider::Cron::Aix ],
712
- group: [ Chef::Resource::Group, Chef::Provider::Group::Aix ],
713
- ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Aix ],
714
- mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Aix ],
715
- # TODO should be Chef::Resource::BffPackage
716
- package: [ Chef::Resource::Package, Chef::Provider::Package::Aix ],
717
- rpm_package: [ Chef::Resource::RpmPackage, Chef::Provider::Package::Rpm ],
718
- user: [ Chef::Resource::User, Chef::Provider::User::Aix ],
719
- # service: [ Chef::Resource::AixService, Chef::Provider::Service::Aix ],
720
764
 
721
765
  "aix" => {
766
+ bff_package: [ Chef::Resource::BffPackage, Chef::Provider::Package::Aix ],
767
+ cron: [ Chef::Resource::Cron, Chef::Provider::Cron::Aix ],
768
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Aix ],
769
+ ifconfig: [ Chef::Resource::Ifconfig, Chef::Provider::Ifconfig::Aix ],
770
+ mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Aix ],
771
+ # TODO should be Chef::Resource::BffPackage
772
+ package: [ Chef::Resource::Package, Chef::Provider::Package::Aix ],
773
+ rpm_package: [ Chef::Resource::RpmPackage, Chef::Provider::Package::Rpm ],
774
+ user: [ Chef::Resource::User, Chef::Provider::User::Aix ],
775
+ # service: [ Chef::Resource::AixService, Chef::Provider::Service::Aix ],
776
+
722
777
  "aix" => {
723
- "5.6" => {
778
+ "aix" => {
779
+ "5.6" => {
780
+ },
724
781
  },
725
782
  },
726
783
  },
727
- },
728
784
 
729
- "hpux" => {
730
785
  "hpux" => {
731
786
  "hpux" => {
732
- "3.1.4" => {
733
- group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ]
787
+ "hpux" => {
788
+ "3.1.4" => {
789
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ]
790
+ }
734
791
  }
735
792
  }
736
- }
737
- },
793
+ },
738
794
 
739
- "netbsd" => {
740
795
  "netbsd" => {
741
796
  "netbsd" => {
742
- "3.1.4" => {
743
- group: [ Chef::Resource::Group, Chef::Provider::Group::Groupmod ],
797
+ "netbsd" => {
798
+ "3.1.4" => {
799
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Groupmod ],
800
+ },
744
801
  },
745
802
  },
746
803
  },
747
- },
748
-
749
- "openbsd" => {
750
- group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ],
751
- package: [ Chef::Resource::OpenbsdPackage, Chef::Provider::Package::Openbsd ],
752
804
 
753
805
  "openbsd" => {
806
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ],
807
+ package: [ Chef::Resource::OpenbsdPackage, Chef::Provider::Package::Openbsd ],
808
+
754
809
  "openbsd" => {
755
- "3.1.4" => {
810
+ "openbsd" => {
811
+ "3.1.4" => {
812
+ },
756
813
  },
757
814
  },
758
815
  },
759
- },
760
816
 
761
- "solaris2" => {
762
- group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ],
763
- ips_package: [ Chef::Resource::IpsPackage, Chef::Provider::Package::Ips ],
764
- package: [ Chef::Resource::SolarisPackage, Chef::Provider::Package::Solaris ],
765
- mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Solaris ],
766
- solaris_package: [ Chef::Resource::SolarisPackage, Chef::Provider::Package::Solaris ],
767
-
768
- "smartos" => {
769
- smartos_package: [ Chef::Resource::SmartosPackage, Chef::Provider::Package::SmartOS ],
770
- package: [ Chef::Resource::SmartosPackage, Chef::Provider::Package::SmartOS ],
817
+ "solaris2" => {
818
+ group: [ Chef::Resource::Group, Chef::Provider::Group::Usermod ],
819
+ ips_package: [ Chef::Resource::IpsPackage, Chef::Provider::Package::Ips ],
820
+ package: [ Chef::Resource::SolarisPackage, Chef::Provider::Package::Solaris ],
821
+ mount: [ Chef::Resource::Mount, Chef::Provider::Mount::Solaris ],
822
+ solaris_package: [ Chef::Resource::SolarisPackage, Chef::Provider::Package::Solaris ],
771
823
 
772
824
  "smartos" => {
773
- "3.1.4" => {
825
+ smartos_package: [ Chef::Resource::SmartosPackage, Chef::Provider::Package::SmartOS ],
826
+ package: [ Chef::Resource::SmartosPackage, Chef::Provider::Package::SmartOS ],
827
+
828
+ "smartos" => {
829
+ "3.1.4" => {
830
+ },
774
831
  },
775
832
  },
776
- },
777
833
 
778
- "solaris2" => {
779
- "nexentacore" => {
780
- "3.1.4" => {
834
+ "solaris2" => {
835
+ "nexentacore" => {
836
+ "3.1.4" => {
837
+ },
781
838
  },
782
- },
783
- "omnios" => {
784
- "3.1.4" => {
785
- user: [ Chef::Resource::User, Chef::Provider::User::Solaris ],
786
- }
787
- },
788
- "openindiana" => {
789
- "3.1.4" => {
839
+ "omnios" => {
840
+ "3.1.4" => {
841
+ user: [ Chef::Resource::User, Chef::Provider::User::Solaris ],
842
+ }
790
843
  },
791
- },
792
- "opensolaris" => {
793
- "3.1.4" => {
844
+ "openindiana" => {
845
+ "3.1.4" => {
846
+ },
794
847
  },
795
- },
796
- "solaris2" => {
797
- user: [ Chef::Resource::User, Chef::Provider::User::Solaris ],
798
- "5.11" => {
799
- package: [ Chef::Resource::IpsPackage, Chef::Provider::Package::Ips ],
848
+ "opensolaris" => {
849
+ "3.1.4" => {
850
+ },
800
851
  },
801
- "5.9" => {
852
+ "solaris2" => {
853
+ user: [ Chef::Resource::User, Chef::Provider::User::Solaris ],
854
+ "5.11" => {
855
+ package: [ Chef::Resource::IpsPackage, Chef::Provider::Package::Ips ],
856
+ },
857
+ "5.9" => {
858
+ },
802
859
  },
803
860
  },
804
- },
805
861
 
806
- },
862
+ },
807
863
 
808
- "solaris" => {
809
864
  "solaris" => {
810
865
  "solaris" => {
811
- "3.1.4" => {
866
+ "solaris" => {
867
+ "3.1.4" => {
868
+ },
812
869
  },
813
870
  },
814
871
  },
815
- },
816
872
 
817
- "exherbo" => {
818
873
  "exherbo" => {
819
874
  "exherbo" => {
820
- "3.1.4" => {
821
- # TODO should be Chef::Resource::PaludisPackage
822
- package: [ Chef::Resource::Package, Chef::Provider::Package::Paludis ]
875
+ "exherbo" => {
876
+ "3.1.4" => {
877
+ # TODO should be Chef::Resource::PaludisPackage
878
+ package: [ Chef::Resource::Package, Chef::Provider::Package::Paludis ]
879
+ }
823
880
  }
824
881
  }
825
882
  }
826
883
  }
827
- }
828
-
829
- def self.create_provider_tests(providers, test, expected, filter)
830
- expected = expected.merge(providers.select { |key, value| key.is_a?(Symbol) })
831
- providers.each do |key, value|
832
- if !key.is_a?(Symbol)
833
- next_test = test.merge({ filter => key })
834
- next_filter =
835
- case filter
836
- when :os
837
- :platform_family
838
- when :platform_family
839
- :platform
840
- when :platform
841
- :platform_version
842
- when :platform_version
843
- nil
844
- else
845
- raise "Hash too deep; only os, platform_family, platform and platform_version supported"
846
- end
847
- create_provider_tests(value, next_test, expected, next_filter)
884
+
885
+ def self.create_provider_tests(providers, test, expected, filter)
886
+ expected = expected.merge(providers.select { |key, value| key.is_a?(Symbol) })
887
+ providers.each do |key, value|
888
+ if !key.is_a?(Symbol)
889
+ next_test = test.merge({ filter => key })
890
+ next_filter =
891
+ case filter
892
+ when :os
893
+ :platform_family
894
+ when :platform_family
895
+ :platform
896
+ when :platform
897
+ :platform_version
898
+ when :platform_version
899
+ nil
900
+ else
901
+ raise "Hash too deep; only os, platform_family, platform and platform_version supported"
902
+ end
903
+ create_provider_tests(value, next_test, expected, next_filter)
904
+ end
848
905
  end
849
- end
850
- # If there is no filter, we're as deep as we need to go
851
- if !filter
852
- on_platform test.delete(:platform), test do
853
- expect_providers(expected)
906
+ # If there is no filter, we're as deep as we need to go
907
+ if !filter
908
+ on_platform test.delete(:platform), test do
909
+ expect_providers(expected)
910
+ end
854
911
  end
855
912
  end
856
- end
857
913
 
858
- create_provider_tests(PROVIDERS, {}, {}, :os)
914
+ create_provider_tests(PROVIDERS, {}, {}, :os)
915
+ end
859
916
  end