chef 12.4.0.rc.0-universal-mingw32 → 12.4.0.rc.2-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 (298) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +12 -1
  3. data/lib/chef/api_client.rb +130 -26
  4. data/lib/chef/application.rb +0 -1
  5. data/lib/chef/application/client.rb +8 -19
  6. data/lib/chef/audit/audit_reporter.rb +12 -7
  7. data/lib/chef/audit/logger.rb +36 -0
  8. data/lib/chef/audit/runner.rb +4 -2
  9. data/lib/chef/chef_class.rb +62 -11
  10. data/lib/chef/client.rb +587 -207
  11. data/lib/chef/config.rb +0 -1
  12. data/lib/chef/dsl/recipe.rb +45 -56
  13. data/lib/chef/dsl/resources.rb +3 -2
  14. data/lib/chef/event_dispatch/base.rb +7 -2
  15. data/lib/chef/exceptions.rb +4 -1
  16. data/lib/chef/file_content_management/deploy/mv_windows.rb +16 -6
  17. data/lib/chef/formatters/doc.rb +15 -7
  18. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +10 -7
  19. data/lib/chef/guard_interpreter/default_guard_interpreter.rb +2 -0
  20. data/lib/chef/guard_interpreter/resource_guard_interpreter.rb +4 -1
  21. data/lib/chef/http/authenticator.rb +7 -2
  22. data/lib/chef/knife.rb +16 -4
  23. data/lib/chef/knife/client_create.rb +55 -31
  24. data/lib/chef/knife/core/generic_presenter.rb +1 -1
  25. data/lib/chef/knife/core/subcommand_loader.rb +1 -1
  26. data/lib/chef/knife/osc_user_create.rb +97 -0
  27. data/lib/chef/knife/osc_user_delete.rb +51 -0
  28. data/lib/chef/knife/osc_user_edit.rb +58 -0
  29. data/lib/chef/knife/osc_user_list.rb +47 -0
  30. data/lib/chef/knife/osc_user_reregister.rb +64 -0
  31. data/lib/chef/knife/osc_user_show.rb +54 -0
  32. data/lib/chef/knife/user_create.rb +95 -36
  33. data/lib/chef/knife/user_delete.rb +52 -2
  34. data/lib/chef/knife/user_edit.rb +37 -7
  35. data/lib/chef/knife/user_list.rb +3 -0
  36. data/lib/chef/knife/user_reregister.rb +39 -8
  37. data/lib/chef/knife/user_show.rb +30 -1
  38. data/lib/chef/mixin/api_version_request_handling.rb +66 -0
  39. data/lib/chef/mixin/convert_to_class_name.rb +10 -4
  40. data/lib/chef/mixin/deprecation.rb +24 -0
  41. data/lib/chef/mixin/powershell_out.rb +98 -0
  42. data/lib/chef/mixin/provides.rb +5 -18
  43. data/lib/chef/mixin/uris.rb +11 -0
  44. data/lib/chef/mixin/windows_architecture_helper.rb +5 -2
  45. data/lib/chef/mixin/windows_env_helper.rb +11 -2
  46. data/lib/chef/node_map.rb +130 -75
  47. data/lib/chef/osc_user.rb +194 -0
  48. data/lib/chef/platform/provider_mapping.rb +2 -269
  49. data/lib/chef/platform/provider_priority_map.rb +6 -69
  50. data/lib/chef/platform/query_helpers.rb +5 -0
  51. data/lib/chef/platform/resource_priority_map.rb +12 -15
  52. data/lib/chef/policy_builder/policyfile.rb +1 -0
  53. data/lib/chef/provider.rb +19 -0
  54. data/lib/chef/provider/directory.rb +3 -0
  55. data/lib/chef/provider/dsc_resource.rb +8 -1
  56. data/lib/chef/provider/file.rb +1 -0
  57. data/lib/chef/provider/group/aix.rb +1 -0
  58. data/lib/chef/provider/group/dscl.rb +1 -1
  59. data/lib/chef/provider/group/gpasswd.rb +1 -0
  60. data/lib/chef/provider/group/groupmod.rb +1 -1
  61. data/lib/chef/provider/group/pw.rb +1 -0
  62. data/lib/chef/provider/group/suse.rb +2 -0
  63. data/lib/chef/provider/group/usermod.rb +2 -1
  64. data/lib/chef/provider/group/windows.rb +1 -1
  65. data/lib/chef/provider/ifconfig.rb +2 -0
  66. data/lib/chef/provider/ifconfig/aix.rb +1 -0
  67. data/lib/chef/provider/ifconfig/debian.rb +2 -0
  68. data/lib/chef/provider/ifconfig/redhat.rb +1 -0
  69. data/lib/chef/provider/lwrp_base.rb +4 -0
  70. data/lib/chef/provider/mount.rb +0 -1
  71. data/lib/chef/provider/mount/aix.rb +1 -0
  72. data/lib/chef/provider/mount/mount.rb +2 -0
  73. data/lib/chef/provider/mount/solaris.rb +2 -0
  74. data/lib/chef/provider/package.rb +55 -0
  75. data/lib/chef/provider/package/aix.rb +7 -7
  76. data/lib/chef/provider/package/apt.rb +3 -3
  77. data/lib/chef/provider/package/dpkg.rb +4 -4
  78. data/lib/chef/provider/package/easy_install.rb +5 -5
  79. data/lib/chef/provider/package/freebsd/base.rb +2 -2
  80. data/lib/chef/provider/package/freebsd/pkg.rb +6 -6
  81. data/lib/chef/provider/package/freebsd/pkgng.rb +5 -5
  82. data/lib/chef/provider/package/freebsd/port.rb +4 -4
  83. data/lib/chef/provider/package/homebrew.rb +2 -2
  84. data/lib/chef/provider/package/ips.rb +4 -4
  85. data/lib/chef/provider/package/macports.rb +5 -6
  86. data/lib/chef/provider/package/openbsd.rb +4 -5
  87. data/lib/chef/provider/package/pacman.rb +4 -4
  88. data/lib/chef/provider/package/portage.rb +2 -0
  89. data/lib/chef/provider/package/rpm.rb +7 -8
  90. data/lib/chef/provider/package/rubygems.rb +5 -12
  91. data/lib/chef/provider/package/smartos.rb +4 -4
  92. data/lib/chef/provider/package/solaris.rb +7 -7
  93. data/lib/chef/provider/package/windows/msi.rb +1 -1
  94. data/lib/chef/provider/package/yum.rb +4 -6
  95. data/lib/chef/provider/package/zypper.rb +16 -14
  96. data/lib/chef/provider/powershell_script.rb +129 -47
  97. data/lib/chef/provider/remote_file/content.rb +4 -1
  98. data/lib/chef/provider/remote_file/local_file.rb +10 -4
  99. data/lib/chef/provider/service.rb +44 -0
  100. data/lib/chef/provider/service/freebsd.rb +1 -1
  101. data/lib/chef/provider/service/init.rb +1 -0
  102. data/lib/chef/provider/service/macosx.rb +1 -1
  103. data/lib/chef/provider/service/windows.rb +0 -1
  104. data/lib/chef/provider/user.rb +1 -1
  105. data/lib/chef/provider/user/aix.rb +3 -2
  106. data/lib/chef/provider/user/pw.rb +1 -0
  107. data/lib/chef/provider/user/solaris.rb +2 -0
  108. data/lib/chef/provider/user/useradd.rb +1 -0
  109. data/lib/chef/provider_resolver.rb +87 -134
  110. data/lib/chef/resource.rb +274 -68
  111. data/lib/chef/resource/apt_package.rb +0 -2
  112. data/lib/chef/resource/bash.rb +0 -2
  113. data/lib/chef/resource/batch.rb +1 -1
  114. data/lib/chef/resource/bff_package.rb +0 -7
  115. data/lib/chef/resource/breakpoint.rb +3 -6
  116. data/lib/chef/resource/chef_gem.rb +0 -3
  117. data/lib/chef/resource/cookbook_file.rb +1 -3
  118. data/lib/chef/resource/cron.rb +2 -4
  119. data/lib/chef/resource/csh.rb +0 -2
  120. data/lib/chef/resource/deploy.rb +9 -6
  121. data/lib/chef/resource/deploy_revision.rb +0 -14
  122. data/lib/chef/resource/directory.rb +2 -4
  123. data/lib/chef/resource/dpkg_package.rb +0 -5
  124. data/lib/chef/resource/dsc_resource.rb +2 -3
  125. data/lib/chef/resource/dsc_script.rb +2 -3
  126. data/lib/chef/resource/easy_install_package.rb +0 -7
  127. data/lib/chef/resource/env.rb +3 -3
  128. data/lib/chef/resource/erl_call.rb +2 -5
  129. data/lib/chef/resource/execute.rb +2 -4
  130. data/lib/chef/resource/file.rb +2 -4
  131. data/lib/chef/resource/freebsd_package.rb +0 -5
  132. data/lib/chef/resource/gem_package.rb +0 -3
  133. data/lib/chef/resource/git.rb +0 -3
  134. data/lib/chef/resource/group.rb +2 -4
  135. data/lib/chef/resource/homebrew_package.rb +0 -2
  136. data/lib/chef/resource/http_request.rb +3 -4
  137. data/lib/chef/resource/ifconfig.rb +3 -4
  138. data/lib/chef/resource/ips_package.rb +2 -2
  139. data/lib/chef/resource/link.rb +3 -5
  140. data/lib/chef/resource/log.rb +2 -4
  141. data/lib/chef/resource/lwrp_base.rb +10 -61
  142. data/lib/chef/resource/macosx_service.rb +1 -2
  143. data/lib/chef/resource/macports_package.rb +0 -7
  144. data/lib/chef/resource/mdadm.rb +2 -5
  145. data/lib/chef/resource/mount.rb +2 -4
  146. data/lib/chef/resource/ohai.rb +2 -4
  147. data/lib/chef/resource/openbsd_package.rb +0 -6
  148. data/lib/chef/resource/package.rb +9 -6
  149. data/lib/chef/resource/pacman_package.rb +0 -7
  150. data/lib/chef/resource/paludis_package.rb +2 -3
  151. data/lib/chef/resource/perl.rb +0 -3
  152. data/lib/chef/resource/portage_package.rb +0 -3
  153. data/lib/chef/resource/powershell_script.rb +1 -2
  154. data/lib/chef/resource/python.rb +0 -3
  155. data/lib/chef/resource/reboot.rb +1 -3
  156. data/lib/chef/resource/registry_key.rb +3 -5
  157. data/lib/chef/resource/remote_directory.rb +3 -5
  158. data/lib/chef/resource/remote_file.rb +4 -5
  159. data/lib/chef/resource/route.rb +3 -5
  160. data/lib/chef/resource/rpm_package.rb +0 -2
  161. data/lib/chef/resource/ruby.rb +0 -4
  162. data/lib/chef/resource/ruby_block.rb +2 -4
  163. data/lib/chef/resource/scm.rb +3 -5
  164. data/lib/chef/resource/script.rb +0 -3
  165. data/lib/chef/resource/service.rb +3 -5
  166. data/lib/chef/resource/smartos_package.rb +0 -9
  167. data/lib/chef/resource/solaris_package.rb +0 -10
  168. data/lib/chef/resource/subversion.rb +1 -3
  169. data/lib/chef/resource/template.rb +0 -4
  170. data/lib/chef/resource/timestamped_deploy.rb +0 -4
  171. data/lib/chef/resource/user.rb +2 -5
  172. data/lib/chef/resource/whyrun_safe_ruby_block.rb +0 -7
  173. data/lib/chef/resource/windows_package.rb +3 -3
  174. data/lib/chef/resource/windows_script.rb +2 -2
  175. data/lib/chef/resource/windows_service.rb +3 -3
  176. data/lib/chef/resource/yum_package.rb +0 -3
  177. data/lib/chef/resource/zypper_package.rb +27 -0
  178. data/lib/chef/resource_builder.rb +7 -0
  179. data/lib/chef/resource_reporter.rb +1 -1
  180. data/lib/chef/resource_resolver.rb +108 -62
  181. data/lib/chef/resources.rb +1 -0
  182. data/lib/chef/rest.rb +1 -0
  183. data/lib/chef/server_api.rb +2 -0
  184. data/lib/chef/user.rb +193 -42
  185. data/lib/chef/util/backup.rb +9 -1
  186. data/lib/chef/util/path_helper.rb +0 -1
  187. data/lib/chef/version.rb +1 -1
  188. data/spec/functional/audit/runner_spec.rb +22 -42
  189. data/spec/functional/mixin/powershell_out_spec.rb +43 -0
  190. data/spec/functional/resource/execute_spec.rb +9 -2
  191. data/spec/functional/resource/file_spec.rb +25 -0
  192. data/spec/functional/resource/group_spec.rb +5 -0
  193. data/spec/functional/resource/link_spec.rb +5 -11
  194. data/spec/functional/resource/powershell_spec.rb +40 -5
  195. data/spec/functional/resource/user/useradd_spec.rb +10 -18
  196. data/spec/integration/recipes/lwrp_spec.rb +57 -0
  197. data/spec/integration/recipes/provider_choice.rb +2 -7
  198. data/spec/integration/recipes/recipe_dsl_spec.rb +517 -19
  199. data/spec/spec_helper.rb +1 -1
  200. data/spec/support/lib/chef/provider/openldap_includer.rb +29 -0
  201. data/spec/support/lib/chef/resource/cat.rb +0 -2
  202. data/spec/support/lib/chef/resource/one_two_three_four.rb +0 -6
  203. data/spec/support/lib/chef/resource/openldap_includer.rb +27 -0
  204. data/spec/support/lib/chef/resource/with_state.rb +0 -9
  205. data/spec/support/lib/chef/resource/zen_follower.rb +0 -6
  206. data/spec/support/lib/chef/resource/zen_master.rb +1 -6
  207. data/spec/support/shared/context/client.rb +277 -0
  208. data/spec/support/shared/examples/client.rb +53 -0
  209. data/spec/support/shared/functional/file_resource.rb +0 -4
  210. data/spec/support/shared/functional/securable_resource.rb +0 -24
  211. data/spec/support/shared/functional/securable_resource_with_reporting.rb +4 -4
  212. data/spec/support/shared/functional/windows_script.rb +1 -1
  213. data/spec/support/shared/unit/api_versioning.rb +77 -0
  214. data/spec/support/shared/unit/knife_shared.rb +40 -0
  215. data/spec/support/shared/unit/user_and_client_shared.rb +115 -0
  216. data/spec/unit/api_client_spec.rb +189 -14
  217. data/spec/unit/application/client_spec.rb +0 -5
  218. data/spec/unit/audit/audit_reporter_spec.rb +58 -14
  219. data/spec/unit/audit/logger_spec.rb +42 -0
  220. data/spec/unit/audit/runner_spec.rb +2 -2
  221. data/spec/unit/chef_fs/file_pattern_spec.rb +3 -15
  222. data/spec/unit/client_spec.rb +58 -374
  223. data/spec/unit/cookbook_spec.rb +0 -9
  224. data/spec/unit/cookbook_version_spec.rb +0 -20
  225. data/spec/unit/deprecation_spec.rb +55 -0
  226. data/spec/unit/dsl/resources_spec.rb +85 -0
  227. data/spec/unit/exceptions_spec.rb +2 -2
  228. data/spec/unit/file_content_management/deploy/mv_windows_spec.rb +60 -0
  229. data/spec/unit/formatters/doc_spec.rb +46 -0
  230. data/spec/unit/formatters/error_inspectors/api_error_formatting_spec.rb +12 -10
  231. data/spec/unit/guard_interpreter/resource_guard_interpreter_spec.rb +8 -0
  232. data/spec/unit/http/authenticator_spec.rb +11 -2
  233. data/spec/unit/knife/client_create_spec.rb +122 -51
  234. data/spec/unit/knife/core/subcommand_loader_spec.rb +19 -3
  235. data/spec/unit/knife/core/ui_spec.rb +14 -0
  236. data/spec/unit/knife/osc_user_create_spec.rb +93 -0
  237. data/spec/unit/knife/osc_user_delete_spec.rb +44 -0
  238. data/spec/unit/knife/osc_user_edit_spec.rb +52 -0
  239. data/spec/unit/knife/osc_user_list_spec.rb +37 -0
  240. data/spec/unit/knife/osc_user_reregister_spec.rb +58 -0
  241. data/spec/unit/knife/osc_user_show_spec.rb +46 -0
  242. data/spec/unit/knife/user_create_spec.rb +177 -51
  243. data/spec/unit/knife/user_delete_spec.rb +34 -8
  244. data/spec/unit/knife/user_edit_spec.rb +31 -12
  245. data/spec/unit/knife/user_list_spec.rb +7 -3
  246. data/spec/unit/knife/user_reregister_spec.rb +38 -17
  247. data/spec/unit/knife/user_show_spec.rb +35 -11
  248. data/spec/unit/knife_spec.rb +10 -4
  249. data/spec/unit/lwrp_spec.rb +228 -54
  250. data/spec/unit/mixin/api_version_request_handling_spec.rb +127 -0
  251. data/spec/unit/mixin/command_spec.rb +1 -2
  252. data/spec/unit/mixin/powershell_out_spec.rb +70 -0
  253. data/spec/unit/mixin/uris_spec.rb +23 -11
  254. data/spec/unit/node_map_spec.rb +4 -1
  255. data/spec/unit/osc_user_spec.rb +276 -0
  256. data/spec/unit/platform_spec.rb +0 -60
  257. data/spec/unit/provider/deploy_spec.rb +1 -1
  258. data/spec/unit/provider/directory_spec.rb +199 -135
  259. data/spec/unit/provider/ifconfig/debian_spec.rb +0 -10
  260. data/spec/unit/provider/package/aix_spec.rb +16 -16
  261. data/spec/unit/provider/package/dpkg_spec.rb +2 -2
  262. data/spec/unit/provider/package/freebsd/pkg_spec.rb +13 -13
  263. data/spec/unit/provider/package/freebsd/pkgng_spec.rb +9 -9
  264. data/spec/unit/provider/package/freebsd/port_spec.rb +7 -7
  265. data/spec/unit/provider/package/ips_spec.rb +22 -22
  266. data/spec/unit/provider/package/macports_spec.rb +10 -10
  267. data/spec/unit/provider/package/openbsd_spec.rb +4 -26
  268. data/spec/unit/provider/package/pacman_spec.rb +5 -5
  269. data/spec/unit/provider/package/rpm_spec.rb +14 -14
  270. data/spec/unit/provider/package/rubygems_spec.rb +10 -44
  271. data/spec/unit/provider/package/smartos_spec.rb +4 -4
  272. data/spec/unit/provider/package/solaris_spec.rb +11 -11
  273. data/spec/unit/provider/package/zypper_spec.rb +125 -90
  274. data/spec/unit/provider/package_spec.rb +34 -0
  275. data/spec/unit/provider/powershell_spec.rb +53 -11
  276. data/spec/unit/provider/remote_directory_spec.rb +2 -2
  277. data/spec/unit/provider/remote_file/local_file_spec.rb +25 -6
  278. data/spec/unit/provider/service/freebsd_service_spec.rb +0 -12
  279. data/spec/unit/provider/user_spec.rb +3 -3
  280. data/spec/unit/provider_resolver_spec.rb +463 -327
  281. data/spec/unit/recipe_spec.rb +42 -15
  282. data/spec/unit/resource/breakpoint_spec.rb +1 -1
  283. data/spec/unit/resource/erl_call_spec.rb +1 -1
  284. data/spec/unit/resource/file_spec.rb +1 -1
  285. data/spec/unit/resource/ifconfig_spec.rb +10 -6
  286. data/spec/unit/resource/remote_file_spec.rb +5 -0
  287. data/spec/unit/resource/route_spec.rb +1 -1
  288. data/spec/unit/resource/ruby_block_spec.rb +2 -2
  289. data/spec/unit/resource/template_spec.rb +1 -1
  290. data/spec/unit/resource/timestamped_deploy_spec.rb +1 -2
  291. data/spec/unit/resource/windows_service_spec.rb +1 -1
  292. data/spec/unit/resource_spec.rb +99 -13
  293. data/spec/unit/rest_spec.rb +5 -5
  294. data/spec/unit/run_context_spec.rb +41 -0
  295. data/spec/unit/runner_spec.rb +2 -2
  296. data/spec/unit/user_spec.rb +406 -93
  297. data/tasks/maintainers.rb +69 -0
  298. metadata +37 -4
@@ -0,0 +1,127 @@
1
+ #
2
+ # Author:: Tyler Cloke (tyler@chef.io)
3
+ # Copyright:: Copyright 2015 Chef Software, 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
+
21
+ describe Chef::Mixin::ApiVersionRequestHandling do
22
+ let(:dummy_class) { Class.new { include Chef::Mixin::ApiVersionRequestHandling } }
23
+ let(:object) { dummy_class.new }
24
+
25
+ describe ".server_client_api_version_intersection" do
26
+ let(:default_supported_client_versions) { [0,1,2] }
27
+
28
+
29
+ context "when the response code is not 406" do
30
+ let(:response) { OpenStruct.new(:code => '405') }
31
+ let(:exception) { Net::HTTPServerException.new("405 Something Else", response) }
32
+
33
+ it "returns nil" do
34
+ expect(object.server_client_api_version_intersection(exception, default_supported_client_versions)).
35
+ to be_nil
36
+ end
37
+
38
+ end # when the response code is not 406
39
+
40
+ context "when the response code is 406" do
41
+ let(:response) { OpenStruct.new(:code => '406') }
42
+ let(:exception) { Net::HTTPServerException.new("406 Not Acceptable", response) }
43
+
44
+ context "when x-ops-server-api-version header does not exist" do
45
+ it "returns nil" do
46
+ expect(object.server_client_api_version_intersection(exception, default_supported_client_versions)).
47
+ to be_nil
48
+ end
49
+ end # when x-ops-server-api-version header does not exist
50
+
51
+ context "when x-ops-server-api-version header exists" do
52
+ let(:min_server_version) { 2 }
53
+ let(:max_server_version) { 4 }
54
+ let(:return_hash) {
55
+ {
56
+ "min_version" => min_server_version,
57
+ "max_version" => max_server_version
58
+ }
59
+ }
60
+
61
+ before(:each) do
62
+ allow(response).to receive(:[]).with('x-ops-server-api-version').and_return(Chef::JSONCompat.to_json(return_hash))
63
+ end
64
+
65
+ context "when there is no intersection between client and server versions" do
66
+ shared_examples_for "no intersection between client and server versions" do
67
+ it "return an array" do
68
+ expect(object.server_client_api_version_intersection(exception, supported_client_versions)).
69
+ to be_a_kind_of(Array)
70
+ end
71
+
72
+ it "returns an empty array" do
73
+ expect(object.server_client_api_version_intersection(exception, supported_client_versions).length).
74
+ to eq(0)
75
+ end
76
+
77
+ end
78
+
79
+ context "when all the versions are higher than the max" do
80
+ it_should_behave_like "no intersection between client and server versions" do
81
+ let(:supported_client_versions) { [5,6,7] }
82
+ end
83
+ end
84
+
85
+ context "when all the versions are lower than the min" do
86
+ it_should_behave_like "no intersection between client and server versions" do
87
+ let(:supported_client_versions) { [0,1] }
88
+ end
89
+ end
90
+
91
+ end # when there is no intersection between client and server versions
92
+
93
+ context "when there is an intersection between client and server versions" do
94
+ context "when multiple versions intersect" do
95
+ let(:supported_client_versions) { [1,2,3,4,5] }
96
+
97
+ it "includes all of the intersection" do
98
+ expect(object.server_client_api_version_intersection(exception, supported_client_versions)).
99
+ to eq([2,3,4])
100
+ end
101
+ end # when multiple versions intersect
102
+
103
+ context "when only the min client version intersects" do
104
+ let(:supported_client_versions) { [0,1,2] }
105
+
106
+ it "includes the intersection" do
107
+ expect(object.server_client_api_version_intersection(exception, supported_client_versions)).
108
+ to eq([2])
109
+ end
110
+ end # when only the min client version intersects
111
+
112
+ context "when only the max client version intersects" do
113
+ let(:supported_client_versions) { [4,5,6] }
114
+
115
+ it "includes the intersection" do
116
+ expect(object.server_client_api_version_intersection(exception, supported_client_versions)).
117
+ to eq([4])
118
+ end
119
+ end # when only the max client version intersects
120
+
121
+ end # when there is an intersection between client and server versions
122
+
123
+ end # when x-ops-server-api-version header exists
124
+ end # when the response code is 406
125
+
126
+ end # .server_client_api_version_intersection
127
+ end # Chef::Mixin::ApiVersionRequestHandling
@@ -22,7 +22,7 @@ describe Chef::Mixin::Command, :volatile do
22
22
 
23
23
  if windows?
24
24
 
25
- pending("TODO MOVE: this is a platform specific integration test.")
25
+ skip("TODO MOVE: this is a platform specific integration test.")
26
26
 
27
27
  else
28
28
 
@@ -61,7 +61,6 @@ describe Chef::Mixin::Command, :volatile do
61
61
 
62
62
  it "returns immediately after the first child process exits" do
63
63
  expect {Timeout.timeout(10) do
64
- pid, stdin,stdout,stderr = nil,nil,nil,nil
65
64
  evil_forker="exit if fork; 10.times { sleep 1}"
66
65
  popen4("ruby -e '#{evil_forker}'") do |pid,stdin,stdout,stderr|
67
66
  end
@@ -0,0 +1,70 @@
1
+ #
2
+ # Copyright:: Copyright (c) 2015 Chef Software, Inc.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require 'spec_helper'
19
+ require 'chef/mixin/powershell_out'
20
+
21
+ describe Chef::Mixin::PowershellOut do
22
+ let(:shell_out_class) { Class.new { include Chef::Mixin::PowershellOut } }
23
+ subject(:object) { shell_out_class.new }
24
+ let(:architecture) { "something" }
25
+ let(:flags) {
26
+ "-NoLogo -NonInteractive -NoProfile -ExecutionPolicy Unrestricted -InputFormat None"
27
+ }
28
+
29
+ describe "#powershell_out" do
30
+ it "runs a command and returns the shell_out object" do
31
+ ret = double("Mixlib::ShellOut")
32
+ expect(object).to receive(:shell_out).with(
33
+ "powershell.exe #{flags} -Command \"Get-Process\"",
34
+ {}
35
+ ).and_return(ret)
36
+ expect(object.powershell_out("Get-Process")).to eql(ret)
37
+ end
38
+
39
+ it "passes options" do
40
+ ret = double("Mixlib::ShellOut")
41
+ expect(object).to receive(:shell_out).with(
42
+ "powershell.exe #{flags} -Command \"Get-Process\"",
43
+ timeout: 600
44
+ ).and_return(ret)
45
+ expect(object.powershell_out("Get-Process", timeout: 600)).to eql(ret)
46
+ end
47
+ end
48
+
49
+ describe "#powershell_out!" do
50
+ it "runs a command and returns the shell_out object" do
51
+ mixlib_shellout = double("Mixlib::ShellOut")
52
+ expect(object).to receive(:shell_out).with(
53
+ "powershell.exe #{flags} -Command \"Get-Process\"",
54
+ {}
55
+ ).and_return(mixlib_shellout)
56
+ expect(mixlib_shellout).to receive(:error!)
57
+ expect(object.powershell_out!("Get-Process")).to eql(mixlib_shellout)
58
+ end
59
+
60
+ it "passes options" do
61
+ mixlib_shellout = double("Mixlib::ShellOut")
62
+ expect(object).to receive(:shell_out).with(
63
+ "powershell.exe #{flags} -Command \"Get-Process\"",
64
+ timeout: 600
65
+ ).and_return(mixlib_shellout)
66
+ expect(mixlib_shellout).to receive(:error!)
67
+ expect(object.powershell_out!("Get-Process", timeout: 600)).to eql(mixlib_shellout)
68
+ end
69
+ end
70
+ end
@@ -26,20 +26,32 @@ end
26
26
  describe Chef::Mixin::Uris do
27
27
  let (:uris) { Chef::UrisTest.new }
28
28
 
29
- it "matches 'scheme://foo.com'" do
30
- expect(uris.uri_scheme?('scheme://foo.com')).to eq(true)
29
+ describe "#uri_scheme?" do
30
+ it "matches 'scheme://foo.com'" do
31
+ expect(uris.uri_scheme?('scheme://foo.com')).to eq(true)
32
+ end
33
+
34
+ it "does not match 'c:/foo.com'" do
35
+ expect(uris.uri_scheme?('c:/foo.com')).to eq(false)
36
+ end
37
+
38
+ it "does not match '/usr/bin/foo.com'" do
39
+ expect(uris.uri_scheme?('/usr/bin/foo.com')).to eq(false)
40
+ end
41
+
42
+ it "does not match 'c:/foo.com://bar.com'" do
43
+ expect(uris.uri_scheme?('c:/foo.com://bar.com')).to eq(false)
44
+ end
31
45
  end
32
46
 
33
- it "does not match 'c:/foo.com'" do
34
- expect(uris.uri_scheme?('c:/foo.com')).to eq(false)
35
- end
36
-
37
- it "does not match '/usr/bin/foo.com'" do
38
- expect(uris.uri_scheme?('/usr/bin/foo.com')).to eq(false)
39
- end
47
+ describe "#as_uri" do
48
+ it "parses a file scheme uri with spaces" do
49
+ expect{ uris.as_uri("file:///c:/foo bar.txt") }.not_to raise_exception
50
+ end
40
51
 
41
- it "does not match 'c:/foo.com://bar.com'" do
42
- expect(uris.uri_scheme?('c:/foo.com://bar.com')).to eq(false)
52
+ it "returns a URI object" do
53
+ expect( uris.as_uri("file:///c:/foo bar.txt") ).to be_a(URI)
54
+ end
43
55
  end
44
56
 
45
57
  end
@@ -134,6 +134,10 @@ describe Chef::NodeMap do
134
134
  end
135
135
 
136
136
  describe "resource back-compat testing" do
137
+ before :each do
138
+ Chef::Config[:treat_deprecation_warnings_as_errors] = false
139
+ end
140
+
137
141
  it "should handle :on_platforms => :all" do
138
142
  node_map.set(:chef_gem, :foo, :on_platforms => :all)
139
143
  allow(node).to receive(:[]).with(:platform).and_return("windows")
@@ -152,4 +156,3 @@ describe Chef::NodeMap do
152
156
  end
153
157
 
154
158
  end
155
-
@@ -0,0 +1,276 @@
1
+ #
2
+ # Author:: Steven Danna (steve@opscode.com)
3
+ # Copyright:: Copyright (c) 2012 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
+ # DEPRECATION NOTE
20
+ # This code only remains to support users still operating with
21
+ # Open Source Chef Server 11 and should be removed once support
22
+ # for OSC 11 ends. New development should occur in user_spec.rb.
23
+
24
+ require 'spec_helper'
25
+
26
+ require 'chef/osc_user'
27
+ require 'tempfile'
28
+
29
+ describe Chef::OscUser do
30
+ before(:each) do
31
+ @user = Chef::OscUser.new
32
+ end
33
+
34
+ describe "initialize" do
35
+ it "should be a Chef::OscUser" do
36
+ expect(@user).to be_a_kind_of(Chef::OscUser)
37
+ end
38
+ end
39
+
40
+ describe "name" do
41
+ it "should let you set the name to a string" do
42
+ expect(@user.name("ops_master")).to eq("ops_master")
43
+ end
44
+
45
+ it "should return the current name" do
46
+ @user.name "ops_master"
47
+ expect(@user.name).to eq("ops_master")
48
+ end
49
+
50
+ # It is not feasible to check all invalid characters. Here are a few
51
+ # that we probably care about.
52
+ it "should not accept invalid characters" do
53
+ # capital letters
54
+ expect { @user.name "Bar" }.to raise_error(ArgumentError)
55
+ # slashes
56
+ expect { @user.name "foo/bar" }.to raise_error(ArgumentError)
57
+ # ?
58
+ expect { @user.name "foo?" }.to raise_error(ArgumentError)
59
+ # &
60
+ expect { @user.name "foo&" }.to raise_error(ArgumentError)
61
+ end
62
+
63
+
64
+ it "should not accept spaces" do
65
+ expect { @user.name "ops master" }.to raise_error(ArgumentError)
66
+ end
67
+
68
+ it "should throw an ArgumentError if you feed it anything but a string" do
69
+ expect { @user.name Hash.new }.to raise_error(ArgumentError)
70
+ end
71
+ end
72
+
73
+ describe "admin" do
74
+ it "should let you set the admin bit" do
75
+ expect(@user.admin(true)).to eq(true)
76
+ end
77
+
78
+ it "should return the current admin value" do
79
+ @user.admin true
80
+ expect(@user.admin).to eq(true)
81
+ end
82
+
83
+ it "should default to false" do
84
+ expect(@user.admin).to eq(false)
85
+ end
86
+
87
+ it "should throw an ArgumentError if you feed it anything but true or false" do
88
+ expect { @user.name Hash.new }.to raise_error(ArgumentError)
89
+ end
90
+ end
91
+
92
+ describe "public_key" do
93
+ it "should let you set the public key" do
94
+ expect(@user.public_key("super public")).to eq("super public")
95
+ end
96
+
97
+ it "should return the current public key" do
98
+ @user.public_key("super public")
99
+ expect(@user.public_key).to eq("super public")
100
+ end
101
+
102
+ it "should throw an ArgumentError if you feed it something lame" do
103
+ expect { @user.public_key Hash.new }.to raise_error(ArgumentError)
104
+ end
105
+ end
106
+
107
+ describe "private_key" do
108
+ it "should let you set the private key" do
109
+ expect(@user.private_key("super private")).to eq("super private")
110
+ end
111
+
112
+ it "should return the private key" do
113
+ @user.private_key("super private")
114
+ expect(@user.private_key).to eq("super private")
115
+ end
116
+
117
+ it "should throw an ArgumentError if you feed it something lame" do
118
+ expect { @user.private_key Hash.new }.to raise_error(ArgumentError)
119
+ end
120
+ end
121
+
122
+ describe "when serializing to JSON" do
123
+ before(:each) do
124
+ @user.name("black")
125
+ @user.public_key("crowes")
126
+ @json = @user.to_json
127
+ end
128
+
129
+ it "serializes as a JSON object" do
130
+ expect(@json).to match(/^\{.+\}$/)
131
+ end
132
+
133
+ it "includes the name value" do
134
+ expect(@json).to include(%q{"name":"black"})
135
+ end
136
+
137
+ it "includes the public key value" do
138
+ expect(@json).to include(%{"public_key":"crowes"})
139
+ end
140
+
141
+ it "includes the 'admin' flag" do
142
+ expect(@json).to include(%q{"admin":false})
143
+ end
144
+
145
+ it "includes the private key when present" do
146
+ @user.private_key("monkeypants")
147
+ expect(@user.to_json).to include(%q{"private_key":"monkeypants"})
148
+ end
149
+
150
+ it "does not include the private key if not present" do
151
+ expect(@json).not_to include("private_key")
152
+ end
153
+
154
+ it "includes the password if present" do
155
+ @user.password "password"
156
+ expect(@user.to_json).to include(%q{"password":"password"})
157
+ end
158
+
159
+ it "does not include the password if not present" do
160
+ expect(@json).not_to include("password")
161
+ end
162
+
163
+ include_examples "to_json equalivent to Chef::JSONCompat.to_json" do
164
+ let(:jsonable) { @user }
165
+ end
166
+ end
167
+
168
+ describe "when deserializing from JSON" do
169
+ before(:each) do
170
+ user = { "name" => "mr_spinks",
171
+ "public_key" => "turtles",
172
+ "private_key" => "pandas",
173
+ "password" => "password",
174
+ "admin" => true }
175
+ @user = Chef::OscUser.from_json(Chef::JSONCompat.to_json(user))
176
+ end
177
+
178
+ it "should deserialize to a Chef::OscUser object" do
179
+ expect(@user).to be_a_kind_of(Chef::OscUser)
180
+ end
181
+
182
+ it "preserves the name" do
183
+ expect(@user.name).to eq("mr_spinks")
184
+ end
185
+
186
+ it "preserves the public key" do
187
+ expect(@user.public_key).to eq("turtles")
188
+ end
189
+
190
+ it "preserves the admin status" do
191
+ expect(@user.admin).to be_truthy
192
+ end
193
+
194
+ it "includes the private key if present" do
195
+ expect(@user.private_key).to eq("pandas")
196
+ end
197
+
198
+ it "includes the password if present" do
199
+ expect(@user.password).to eq("password")
200
+ end
201
+
202
+ end
203
+
204
+ describe "API Interactions" do
205
+ before (:each) do
206
+ @user = Chef::OscUser.new
207
+ @user.name "foobar"
208
+ @http_client = double("Chef::REST mock")
209
+ allow(Chef::REST).to receive(:new).and_return(@http_client)
210
+ end
211
+
212
+ describe "list" do
213
+ before(:each) do
214
+ Chef::Config[:chef_server_url] = "http://www.example.com"
215
+ @osc_response = { "admin" => "http://www.example.com/users/admin"}
216
+ @ohc_response = [ { "user" => { "username" => "admin" }} ]
217
+ allow(Chef::OscUser).to receive(:load).with("admin").and_return(@user)
218
+ @osc_inflated_response = { "admin" => @user }
219
+ end
220
+
221
+ it "lists all clients on an OSC server" do
222
+ allow(@http_client).to receive(:get_rest).with("users").and_return(@osc_response)
223
+ expect(Chef::OscUser.list).to eq(@osc_response)
224
+ end
225
+
226
+ it "inflate all clients on an OSC server" do
227
+ allow(@http_client).to receive(:get_rest).with("users").and_return(@osc_response)
228
+ expect(Chef::OscUser.list(true)).to eq(@osc_inflated_response)
229
+ end
230
+
231
+ it "lists all clients on an OHC/OPC server" do
232
+ allow(@http_client).to receive(:get_rest).with("users").and_return(@ohc_response)
233
+ # We expect that Chef::OscUser.list will give a consistent response
234
+ # so OHC API responses should be transformed to OSC-style output.
235
+ expect(Chef::OscUser.list).to eq(@osc_response)
236
+ end
237
+
238
+ it "inflate all clients on an OHC/OPC server" do
239
+ allow(@http_client).to receive(:get_rest).with("users").and_return(@ohc_response)
240
+ expect(Chef::OscUser.list(true)).to eq(@osc_inflated_response)
241
+ end
242
+ end
243
+
244
+ describe "create" do
245
+ it "creates a new user via the API" do
246
+ @user.password "password"
247
+ expect(@http_client).to receive(:post_rest).with("users", {:name => "foobar", :admin => false, :password => "password"}).and_return({})
248
+ @user.create
249
+ end
250
+ end
251
+
252
+ describe "read" do
253
+ it "loads a named user from the API" do
254
+ expect(@http_client).to receive(:get_rest).with("users/foobar").and_return({"name" => "foobar", "admin" => true, "public_key" => "pubkey"})
255
+ user = Chef::OscUser.load("foobar")
256
+ expect(user.name).to eq("foobar")
257
+ expect(user.admin).to eq(true)
258
+ expect(user.public_key).to eq("pubkey")
259
+ end
260
+ end
261
+
262
+ describe "update" do
263
+ it "updates an existing user on via the API" do
264
+ expect(@http_client).to receive(:put_rest).with("users/foobar", {:name => "foobar", :admin => false}).and_return({})
265
+ @user.update
266
+ end
267
+ end
268
+
269
+ describe "destroy" do
270
+ it "deletes the specified user via the API" do
271
+ expect(@http_client).to receive(:delete_rest).with("users/foobar")
272
+ @user.destroy
273
+ end
274
+ end
275
+ end
276
+ end