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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,46 @@
1
+ #
2
+ # Author:: John Keiser <jkeiser@chef.io>
3
+ # Copyright:: Copyright (c) 2015 John Keiser.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ #
20
+ # Mocks shellout results. Examples:
21
+ # mock_shellout_command("systemctl --all", exitstatus: 1)
22
+ #
23
+ class MockShellout
24
+ module RSpec
25
+ def mock_shellout_command(command, **result)
26
+ allow(::Mixlib::ShellOut).to receive(:new).with(command, anything).and_return MockShellout.new(result)
27
+ end
28
+ end
29
+
30
+ def initialize(**properties)
31
+ @properties = {
32
+ stdout: "",
33
+ stderr: "",
34
+ exitstatus: 0
35
+ }.merge(properties)
36
+ end
37
+ def method_missing(name, *args)
38
+ @properties[name.to_sym]
39
+ end
40
+ def error?
41
+ exitstatus != 0
42
+ end
43
+ def error!
44
+ raise Mixlib::ShellOut::ShellCommandFailed, "Expected process to exit with 0, but received #{exitstatus}" if error?
45
+ end
46
+ end
@@ -465,11 +465,13 @@ shared_examples_for Chef::Provider::File do
465
465
  t
466
466
  }
467
467
 
468
- let(:verification) { double("Verification") }
468
+ let(:verification) { instance_double(Chef::Resource::File::Verification) }
469
+ let(:verification_fail) { instance_double(Chef::Resource::File::Verification) }
469
470
 
470
471
  context "with user-supplied verifications" do
471
472
  it "calls #verify on each verification with tempfile path" do
472
- allow(Chef::Resource::File::Verification).to receive(:new).and_return(verification)
473
+ allow(Chef::Resource::File::Verification).to(
474
+ receive(:new).with(anything(), "true", anything()).and_return(verification))
473
475
  provider.new_resource.verify "true"
474
476
  provider.new_resource.verify "true"
475
477
  expect(verification).to receive(:verify).with(tempfile.path).twice.and_return(true)
@@ -477,10 +479,14 @@ shared_examples_for Chef::Provider::File do
477
479
  end
478
480
 
479
481
  it "raises an exception if any verification fails" do
482
+ allow(Chef::Resource::File::Verification).to(
483
+ receive(:new).with(anything(), "true", anything()).and_return(verification))
484
+ allow(Chef::Resource::File::Verification).to(
485
+ receive(:new).with(anything(), "false", anything()).and_return(verification_fail))
480
486
  provider.new_resource.verify "true"
481
487
  provider.new_resource.verify "false"
482
- allow(verification).to receive(:verify).with("true").and_return(true)
483
- allow(verification).to receive(:verify).with("false").and_return(false)
488
+ expect(verification).to receive(:verify).with(tempfile.path).and_return(true)
489
+ expect(verification_fail).to receive(:verify).with(tempfile.path).and_return(false)
484
490
  expect{provider.send(:do_validate_content)}.to raise_error(Chef::Exceptions::ValidationFailed)
485
491
  end
486
492
  end
@@ -47,6 +47,19 @@ describe Chef::Application::Client, "reconfigure" do
47
47
  expect(app).to receive(:set_specific_recipes).and_return(true)
48
48
  app.reconfigure
49
49
  end
50
+
51
+ context "when given a named_run_list" do
52
+
53
+ before do
54
+ ARGV.replace( %w[ --named-run-list arglebargle-example ] )
55
+ app.reconfigure
56
+ end
57
+
58
+ it "sets named_run_list in Chef::Config" do
59
+ expect(Chef::Config[:named_run_list]).to eq("arglebargle-example")
60
+ end
61
+
62
+ end
50
63
  end
51
64
 
52
65
  describe "when configured to not fork the client process" do
@@ -237,7 +250,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
237
250
  end
238
251
 
239
252
  it "should throw an exception" do
240
- expect { @app.reconfigure }.to raise_error
253
+ expect { app.reconfigure }.to raise_error(Chef::Exceptions::PIDFileLockfileMatch)
241
254
  end
242
255
  end
243
256
  end
@@ -275,9 +288,9 @@ describe Chef::Application::Client, "configure_chef" do
275
288
  ARGV.replace(@original_argv)
276
289
  end
277
290
 
278
- it "should set the colored output to false by default on windows and true otherwise" do
291
+ it "should set the colored output to true by default on windows and true on all other platforms as well" do
279
292
  if windows?
280
- expect(Chef::Config[:color]).to be_falsey
293
+ expect(Chef::Config[:color]).to be_truthy
281
294
  else
282
295
  expect(Chef::Config[:color]).to be_truthy
283
296
  end
@@ -70,13 +70,13 @@ describe Chef::Application::Knife do
70
70
  end
71
71
  end
72
72
 
73
- it "should set the colored output to false by default on windows and true otherwise" do
73
+ it "should set the colored output to true by default on windows and true on all other platforms as well" do
74
74
  with_argv(*%w{noop knife command}) do
75
75
  expect(@knife).to receive(:exit).with(0)
76
76
  @knife.run
77
77
  end
78
78
  if windows?
79
- expect(Chef::Config[:color]).to be_falsey
79
+ expect(Chef::Config[:color]).to be_truthy
80
80
  else
81
81
  expect(Chef::Config[:color]).to be_truthy
82
82
  end
@@ -106,7 +106,8 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
106
106
  describe "when the recipe_url configuration option is specified" do
107
107
  let(:tarfile) { StringIO.new("remote_tarball_content") }
108
108
  let(:target_file) { StringIO.new }
109
-
109
+ let(:shellout) { double(run_command: nil, error!: nil, stdout: '') }
110
+
110
111
  before do
111
112
  Chef::Config[:cookbook_path] = "#{Dir.tmpdir}/chef-solo/cookbooks"
112
113
  Chef::Config[:recipe_url] = "http://junglist.gen.nz/recipes.tgz"
@@ -117,7 +118,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
117
118
  allow(app).to receive(:open).with("http://junglist.gen.nz/recipes.tgz").and_yield(tarfile)
118
119
  allow(File).to receive(:open).with("#{Dir.tmpdir}/chef-solo/recipes.tgz", "wb").and_yield(target_file)
119
120
 
120
- allow(Chef::Mixin::Command).to receive(:run_command).and_return(true)
121
+ allow(Mixlib::ShellOut).to receive(:new).and_return(shellout)
121
122
  end
122
123
 
123
124
  it "should create the recipes path based on the parent of the cookbook path" do
@@ -136,7 +137,7 @@ Enable chef-client interval runs by setting `:client_fork = true` in your config
136
137
  end
137
138
 
138
139
  it "should untar the target file to the parent of the cookbook path" do
139
- expect(Chef::Mixin::Command).to receive(:run_command).with({:command => "tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo"}).and_return(true)
140
+ expect(Mixlib::ShellOut).to receive(:new).with("tar zxvf #{Dir.tmpdir}/chef-solo/recipes.tgz -C #{Dir.tmpdir}/chef-solo")
140
141
  app.reconfigure
141
142
  end
142
143
  end
@@ -46,10 +46,6 @@ describe "Chef class" do
46
46
  Chef.set_provider_priority_map(provider_priority_map)
47
47
  end
48
48
 
49
- after do
50
- Chef.reset!
51
- end
52
-
53
49
  context "priority maps" do
54
50
  context "#get_provider_priority_array" do
55
51
  it "should use the current node to get the right priority_map" do
@@ -88,4 +84,27 @@ describe "Chef class" do
88
84
  expect(Chef.node).to eql(node)
89
85
  end
90
86
  end
87
+
88
+ context '#event_handler' do
89
+ it 'adds a new handler' do
90
+ x = 1
91
+ Chef.event_handler do
92
+ on :converge_start do
93
+ x = 2
94
+ end
95
+ end
96
+ expect(Chef::Config[:event_handlers]).to_not be_empty
97
+ Chef::Config[:event_handlers].first.send(:converge_start)
98
+ expect(x).to eq(2)
99
+ end
100
+
101
+ it 'raise error if unknown event type is passed' do
102
+ expect do
103
+ Chef.event_handler do
104
+ on :yolo do
105
+ end
106
+ end
107
+ end.to raise_error(Chef::Exceptions::InvalidEventType)
108
+ end
109
+ end
91
110
  end
@@ -0,0 +1,108 @@
1
+ #
2
+ # Author:: Kartik Null Cating-Subramanian (<ksubramanian@chef.io>)
3
+ # Copyright:: Copyright (c) 2015 Opscode, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+ require 'chef/chef_fs/path_utils'
21
+
22
+ describe Chef::ChefFS::PathUtils do
23
+ context 'invoking join' do
24
+ it 'joins well-behaved distinct path elements' do
25
+ expect(Chef::ChefFS::PathUtils.join('a', 'b', 'c')).to eq('a/b/c')
26
+ end
27
+
28
+ it 'strips extraneous slashes in the middle of paths' do
29
+ expect(Chef::ChefFS::PathUtils.join('a/', '/b', '/c/')).to eq('a/b/c')
30
+ expect(Chef::ChefFS::PathUtils.join('a/', '/b', '///c/')).to eq('a/b/c')
31
+ end
32
+
33
+ it 'preserves the whether the first element was absolute or not' do
34
+ expect(Chef::ChefFS::PathUtils.join('/a/', '/b', 'c/')).to eq('/a/b/c')
35
+ expect(Chef::ChefFS::PathUtils.join('///a/', '/b', 'c/')).to eq('/a/b/c')
36
+ end
37
+ end
38
+
39
+ context 'invoking is_absolute?' do
40
+ it 'confirms that paths starting with / are absolute' do
41
+ expect(Chef::ChefFS::PathUtils.is_absolute?('/foo/bar/baz')).to be true
42
+ expect(Chef::ChefFS::PathUtils.is_absolute?('/foo')).to be true
43
+ end
44
+
45
+ it 'confirms that paths starting with // are absolute even though that looks like some windows network path' do
46
+ expect(Chef::ChefFS::PathUtils.is_absolute?('//foo/bar/baz')).to be true
47
+ end
48
+
49
+ it 'confirms that root is indeed absolute' do
50
+ expect(Chef::ChefFS::PathUtils.is_absolute?('/')).to be true
51
+ end
52
+
53
+ it 'confirms that paths starting without / are relative' do
54
+ expect(Chef::ChefFS::PathUtils.is_absolute?('foo/bar/baz')).to be false
55
+ expect(Chef::ChefFS::PathUtils.is_absolute?('a')).to be false
56
+ end
57
+
58
+ it 'returns false for an empty path.' do
59
+ expect(Chef::ChefFS::PathUtils.is_absolute?('')).to be false
60
+ end
61
+ end
62
+
63
+ context 'invoking realest_path' do
64
+ let(:good_path) { File.dirname(__FILE__) }
65
+ let(:parent_path) { File.dirname(good_path) }
66
+
67
+ it 'handles paths with no wildcards or globs' do
68
+ expect(Chef::ChefFS::PathUtils.realest_path(good_path)).to eq(File.expand_path(good_path))
69
+ end
70
+
71
+ it 'handles paths with .. and .' do
72
+ expect(Chef::ChefFS::PathUtils.realest_path(good_path+'/../.')).to eq(File.expand_path(parent_path))
73
+ end
74
+
75
+ it 'handles paths with *' do
76
+ expect(Chef::ChefFS::PathUtils.realest_path(good_path + '/*/foo')).to eq(File.expand_path(good_path + '/*/foo'))
77
+ end
78
+
79
+ it 'handles directories that do not exist' do
80
+ expect(Chef::ChefFS::PathUtils.realest_path(good_path + '/something/or/other')).to eq(File.expand_path(good_path + '/something/or/other'))
81
+ end
82
+
83
+ it 'handles root correctly' do
84
+ if Chef::Platform.windows?
85
+ expect(Chef::ChefFS::PathUtils.realest_path('C:/')).to eq('C:/')
86
+ else
87
+ expect(Chef::ChefFS::PathUtils.realest_path('/')).to eq('/')
88
+ end
89
+ end
90
+ end
91
+
92
+ context 'invoking descendant_path' do
93
+ it 'handles paths with various casing on windows' do
94
+ allow(Chef::ChefFS).to receive(:windows?) { true }
95
+ expect(Chef::ChefFS::PathUtils.descendant_path('C:/ab/b/c', 'C:/AB/B')).to eq('c')
96
+ expect(Chef::ChefFS::PathUtils.descendant_path('C:/ab/b/c', 'c:/ab/B')).to eq('c')
97
+ end
98
+
99
+ it 'returns nil if the path does not have the given ancestor' do
100
+ expect(Chef::ChefFS::PathUtils.descendant_path('/D/E/F', '/A/B/C')).to be_nil
101
+ expect(Chef::ChefFS::PathUtils.descendant_path('/A/B/D', '/A/B/C')).to be_nil
102
+ end
103
+
104
+ it 'returns blank if the ancestor equals the path' do
105
+ expect(Chef::ChefFS::PathUtils.descendant_path('/A/B/D', '/A/B/D')).to eq('')
106
+ end
107
+ end
108
+ end
@@ -364,6 +364,8 @@ describe Chef::Client do
364
364
  expect(node[:expanded_run_list]).to be_nil
365
365
 
366
366
  allow(client.policy_builder).to receive(:node).and_return(node)
367
+ client.policy_builder.select_implementation(node)
368
+ allow(client.policy_builder.implementation).to receive(:node).and_return(node)
367
369
 
368
370
  # chefspec and possibly others use the return value of this method
369
371
  expect(client.build_node).to eq(node)
@@ -373,7 +375,8 @@ describe Chef::Client do
373
375
  expect(node[:roles].length).to eq(1)
374
376
  expect(node[:roles]).to include("role_containing_cookbook1")
375
377
  expect(node[:recipes]).not_to be_nil
376
- expect(node[:recipes].length).to eq(1)
378
+ expect(node[:recipes].length).to eq(2)
379
+ expect(node[:recipes]).to include("cookbook1")
377
380
  expect(node[:recipes]).to include("cookbook1::default")
378
381
  expect(node[:expanded_run_list]).not_to be_nil
379
382
  expect(node[:expanded_run_list].length).to eq(1)
@@ -391,6 +394,8 @@ describe Chef::Client do
391
394
  expect(mock_chef_rest).to receive(:get_rest).with("environments/A").and_return(test_env)
392
395
  expect(Chef::REST).to receive(:new).and_return(mock_chef_rest)
393
396
  allow(client.policy_builder).to receive(:node).and_return(node)
397
+ client.policy_builder.select_implementation(node)
398
+ allow(client.policy_builder.implementation).to receive(:node).and_return(node)
394
399
  expect(client.build_node).to eq(node)
395
400
 
396
401
  expect(node.chef_environment).to eq("A")
@@ -0,0 +1,31 @@
1
+
2
+ require 'spec_helper'
3
+
4
+ require 'chef/config'
5
+
6
+ RSpec.describe Chef::Config do
7
+
8
+ shared_examples_for "deprecated by ohai but not deprecated" do
9
+ it "does not emit a deprecation warning when set" do
10
+ expect(Chef::Log).to_not receive(:warn).
11
+ with(/Ohai::Config\[:#{option}\] is deprecated/)
12
+ Chef::Config[option] = value
13
+ expect(Chef::Config[option]).to eq(value)
14
+ end
15
+ end
16
+
17
+ describe ":log_level" do
18
+ include_examples "deprecated by ohai but not deprecated" do
19
+ let(:option) { :log_level }
20
+ let(:value) { :debug }
21
+ end
22
+ end
23
+
24
+ describe ":log_location" do
25
+ include_examples "deprecated by ohai but not deprecated" do
26
+ let(:option) { :log_location }
27
+ let(:value) { "path/to/log" }
28
+ end
29
+ end
30
+
31
+ end
@@ -30,7 +30,7 @@ describe Chef::Cookbook::Metadata do
30
30
  :maintainer_email, :license, :platforms, :dependencies,
31
31
  :recommendations, :suggestions, :conflicting, :providing,
32
32
  :replacing, :attributes, :groupings, :recipes, :version,
33
- :source_url, :issues_url ]
33
+ :source_url, :issues_url, :privacy ]
34
34
  end
35
35
 
36
36
  it "does not depend on object identity for equality" do
@@ -148,6 +148,10 @@ describe Chef::Cookbook::Metadata do
148
148
  it "has an empty issues_url string" do
149
149
  expect(metadata.issues_url).to eq('')
150
150
  end
151
+
152
+ it "is not private" do
153
+ expect(metadata.privacy).to eq(false)
154
+ end
151
155
  end
152
156
 
153
157
  describe "validation" do
@@ -198,7 +202,8 @@ describe Chef::Cookbook::Metadata do
198
202
  :long_description => "Much Longer\nSeriously",
199
203
  :version => "0.6.0",
200
204
  :source_url => "http://example.com",
201
- :issues_url => "http://example.com/issues"
205
+ :issues_url => "http://example.com/issues",
206
+ :privacy => true
202
207
  }
203
208
  params.sort { |a,b| a.to_s <=> b.to_s }.each do |field, field_value|
204
209
  describe field do
@@ -360,7 +365,8 @@ describe Chef::Cookbook::Metadata do
360
365
  "recipes" => [ "mysql::server", "mysql::master" ],
361
366
  "default" => [ ],
362
367
  "source_url" => "http://example.com",
363
- "issues_url" => "http://example.com/issues"
368
+ "issues_url" => "http://example.com/issues",
369
+ "privacy" => true
364
370
  }
365
371
  expect(metadata.attribute("/db/mysql/databases", attrs)).to eq(attrs)
366
372
  end
@@ -401,6 +407,18 @@ describe Chef::Cookbook::Metadata do
401
407
  }.to raise_error(ArgumentError)
402
408
  end
403
409
 
410
+ it "should not accept anything but true or false for the privacy flag" do
411
+ expect {
412
+ metadata.attribute("db/mysql/databases", :privacy => true)
413
+ }.not_to raise_error
414
+ expect {
415
+ metadata.attribute("db/mysql/databases", :privacy => false)
416
+ }.not_to raise_error
417
+ expect {
418
+ metadata.attribute("db/mysql/databases", :privacy => 'true')
419
+ }.to raise_error(ArgumentError)
420
+ end
421
+
404
422
  it "should not accept anything but an array of strings for choice" do
405
423
  expect {
406
424
  metadata.attribute("db/mysql/databases", :choice => ['dedicated', 'shared'])
@@ -699,6 +717,7 @@ describe Chef::Cookbook::Metadata do
699
717
  version
700
718
  source_url
701
719
  issues_url
720
+ privacy
702
721
  }.each do |t|
703
722
  it "should include '#{t}'" do
704
723
  expect(deserialized_metadata[t]).to eq(metadata.send(t.to_sym))
@@ -734,6 +753,7 @@ describe Chef::Cookbook::Metadata do
734
753
  version
735
754
  source_url
736
755
  issues_url
756
+ privacy
737
757
  }.each do |t|
738
758
  it "should match '#{t}'" do
739
759
  expect(deserialized_metadata.send(t.to_sym)).to eq(metadata.send(t.to_sym))
@@ -53,7 +53,10 @@ describe Chef::Cookbook::SyntaxCheck do
53
53
  @ruby_files = @attr_files + @libr_files + @defn_files + @recipes + [File.join(cookbook_path, "metadata.rb")]
54
54
  basenames = %w{ helpers_via_partial_test.erb
55
55
  helper_test.erb
56
+ helpers.erb
56
57
  openldap_stuff.conf.erb
58
+ nested_openldap_partials.erb
59
+ nested_partial.erb
57
60
  openldap_variable_stuff.conf.erb
58
61
  test.erb
59
62
  some_windows_line_endings.erb