chef 16.4.41 → 16.5.64

Sign up to get free protection for your applications and to get access to all the features.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Rakefile +2 -2
  4. data/bin/knife +1 -1
  5. data/chef.gemspec +2 -1
  6. data/lib/chef/application.rb +18 -16
  7. data/lib/chef/application/apply.rb +12 -7
  8. data/lib/chef/application/base.rb +26 -23
  9. data/lib/chef/application/client.rb +10 -4
  10. data/lib/chef/application/exit_code.rb +13 -4
  11. data/lib/chef/application/knife.rb +22 -11
  12. data/lib/chef/application/solo.rb +2 -1
  13. data/lib/chef/application/windows_service.rb +14 -14
  14. data/lib/chef/application/windows_service_manager.rb +6 -6
  15. data/lib/chef/chef_fs/knife.rb +2 -2
  16. data/lib/chef/chef_fs/parallelizer.rb +0 -1
  17. data/lib/chef/client.rb +10 -11
  18. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  19. data/lib/chef/cookbook/synchronizer.rb +2 -2
  20. data/lib/chef/cookbook_site_streaming_uploader.rb +13 -11
  21. data/lib/chef/cookbook_uploader.rb +1 -1
  22. data/lib/chef/data_collector.rb +6 -5
  23. data/lib/chef/data_collector/config_validation.rb +22 -13
  24. data/lib/chef/data_collector/run_end_message.rb +2 -2
  25. data/lib/chef/data_collector/run_start_message.rb +1 -1
  26. data/lib/chef/deprecated.rb +1 -1
  27. data/lib/chef/deprecation/warnings.rb +2 -2
  28. data/lib/chef/digester.rb +2 -2
  29. data/lib/chef/dsl/chef_vault.rb +1 -1
  30. data/lib/chef/dsl/data_query.rb +2 -2
  31. data/lib/chef/dsl/platform_introspection.rb +1 -1
  32. data/lib/chef/encrypted_data_bag_item.rb +3 -4
  33. data/lib/chef/encrypted_data_bag_item/decryptor.rb +3 -3
  34. data/lib/chef/encrypted_data_bag_item/encryptor.rb +3 -3
  35. data/lib/chef/environment.rb +2 -2
  36. data/lib/chef/event_loggers/windows_eventlog.rb +2 -2
  37. data/lib/chef/exceptions.rb +4 -4
  38. data/lib/chef/file_access_control/windows.rb +5 -1
  39. data/lib/chef/formatters/doc.rb +7 -6
  40. data/lib/chef/formatters/error_inspectors/api_error_formatting.rb +6 -5
  41. data/lib/chef/formatters/error_inspectors/node_load_error_inspector.rb +3 -3
  42. data/lib/chef/formatters/error_inspectors/registration_error_inspector.rb +9 -9
  43. data/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb +2 -2
  44. data/lib/chef/formatters/error_inspectors/run_list_expansion_error_inspector.rb +3 -3
  45. data/lib/chef/formatters/minimal.rb +5 -4
  46. data/lib/chef/http.rb +6 -4
  47. data/lib/chef/http/auth_credentials.rb +5 -1
  48. data/lib/chef/http/authenticator.rb +1 -1
  49. data/lib/chef/http/basic_client.rb +4 -2
  50. data/lib/chef/http/decompressor.rb +1 -1
  51. data/lib/chef/http/http_request.rb +7 -5
  52. data/lib/chef/http/socketless_chef_zero_client.rb +5 -2
  53. data/lib/chef/http/ssl_policies.rb +1 -1
  54. data/lib/chef/json_compat.rb +1 -1
  55. data/lib/chef/knife.rb +4 -4
  56. data/lib/chef/knife/bootstrap.rb +16 -14
  57. data/lib/chef/knife/bootstrap/chef_vault_handler.rb +1 -1
  58. data/lib/chef/knife/bootstrap/templates/chef-full.erb +3 -3
  59. data/lib/chef/knife/bootstrap/templates/windows-chef-client-msi.erb +7 -7
  60. data/lib/chef/knife/client_create.rb +3 -3
  61. data/lib/chef/knife/config_get.rb +8 -97
  62. data/lib/chef/knife/config_get_profile.rb +9 -9
  63. data/lib/chef/knife/config_list.rb +139 -0
  64. data/lib/chef/knife/config_list_profiles.rb +8 -98
  65. data/lib/chef/knife/config_show.rb +127 -0
  66. data/lib/chef/knife/config_use.rb +61 -0
  67. data/lib/chef/knife/config_use_profile.rb +9 -24
  68. data/lib/chef/knife/configure.rb +2 -2
  69. data/lib/chef/knife/core/bootstrap_context.rb +2 -2
  70. data/lib/chef/knife/core/object_loader.rb +1 -1
  71. data/lib/chef/knife/core/windows_bootstrap_context.rb +11 -11
  72. data/lib/chef/knife/exec.rb +2 -2
  73. data/lib/chef/knife/node_show.rb +2 -2
  74. data/lib/chef/knife/serve.rb +3 -3
  75. data/lib/chef/knife/ssh.rb +16 -1
  76. data/lib/chef/knife/ssl_check.rb +3 -3
  77. data/lib/chef/knife/status.rb +2 -2
  78. data/lib/chef/knife/user_create.rb +2 -2
  79. data/lib/chef/knife/yaml_convert.rb +1 -1
  80. data/lib/chef/local_mode.rb +2 -2
  81. data/lib/chef/log/syslog.rb +2 -2
  82. data/lib/chef/log/winevt.rb +2 -2
  83. data/lib/chef/mixin/deep_merge.rb +0 -12
  84. data/lib/chef/mixin/openssl_helper.rb +1 -4
  85. data/lib/chef/mixin/template.rb +2 -2
  86. data/lib/chef/mixin/uris.rb +2 -2
  87. data/lib/chef/mixin/versioned_api.rb +1 -2
  88. data/lib/chef/monkey_patches/net_http.rb +4 -4
  89. data/lib/chef/node_map.rb +2 -2
  90. data/lib/chef/policy_builder/policyfile.rb +2 -2
  91. data/lib/chef/provider.rb +0 -4
  92. data/lib/chef/provider/file.rb +2 -2
  93. data/lib/chef/provider/ifconfig.rb +1 -1
  94. data/lib/chef/provider/launchd.rb +2 -2
  95. data/lib/chef/provider/mount/linux.rb +63 -0
  96. data/lib/chef/provider/package/rubygems.rb +21 -18
  97. data/lib/chef/provider/package/snap.rb +0 -1
  98. data/lib/chef/provider/package/windows.rb +2 -2
  99. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +3 -1
  100. data/lib/chef/provider/package/zypper.rb +1 -1
  101. data/lib/chef/provider/remote_file/content.rb +3 -0
  102. data/lib/chef/provider/remote_file/ftp.rb +6 -4
  103. data/lib/chef/provider/remote_file/sftp.rb +6 -4
  104. data/lib/chef/provider/route.rb +2 -6
  105. data/lib/chef/provider/service/macosx.rb +2 -2
  106. data/lib/chef/provider/template_finder.rb +2 -10
  107. data/lib/chef/provider/user/dscl.rb +3 -3
  108. data/lib/chef/provider/user/mac.rb +1 -1
  109. data/lib/chef/provider/windows_task.rb +1 -2
  110. data/lib/chef/provider/zypper_repository.rb +2 -2
  111. data/lib/chef/provider_resolver.rb +1 -1
  112. data/lib/chef/providers.rb +1 -0
  113. data/lib/chef/recipe.rb +2 -2
  114. data/lib/chef/resource.rb +1 -1
  115. data/lib/chef/resource/apt_repository.rb +1 -1
  116. data/lib/chef/resource/bff_package.rb +22 -0
  117. data/lib/chef/resource/breakpoint.rb +57 -2
  118. data/lib/chef/resource/build_essential.rb +1 -1
  119. data/lib/chef/resource/cab_package.rb +29 -0
  120. data/lib/chef/resource/chef_client_cron.rb +32 -25
  121. data/lib/chef/resource/chef_client_launchd.rb +194 -0
  122. data/lib/chef/resource/chef_client_scheduled_task.rb +21 -18
  123. data/lib/chef/resource/chef_client_systemd_timer.rb +24 -17
  124. data/lib/chef/resource/chef_client_trusted_certificate.rb +101 -0
  125. data/lib/chef/resource/chef_gem.rb +10 -10
  126. data/lib/chef/resource/chef_handler.rb +148 -4
  127. data/lib/chef/resource/chef_sleep.rb +2 -2
  128. data/lib/chef/resource/chef_vault_secret.rb +1 -1
  129. data/lib/chef/resource/cookbook_file.rb +2 -2
  130. data/lib/chef/resource/cron/cron_d.rb +0 -1
  131. data/lib/chef/resource/dnf_package.rb +2 -2
  132. data/lib/chef/resource/dsc_resource.rb +0 -1
  133. data/lib/chef/resource/dsc_script.rb +2 -2
  134. data/lib/chef/resource/execute.rb +6 -6
  135. data/lib/chef/resource/file.rb +4 -4
  136. data/lib/chef/resource/gem_package.rb +5 -5
  137. data/lib/chef/resource/homebrew_package.rb +3 -3
  138. data/lib/chef/resource/homebrew_update.rb +5 -5
  139. data/lib/chef/resource/hostname.rb +2 -2
  140. data/lib/chef/resource/launchd.rb +2 -1
  141. data/lib/chef/resource/locale.rb +2 -2
  142. data/lib/chef/resource/macos_userdefaults.rb +3 -3
  143. data/lib/chef/resource/notify_group.rb +0 -1
  144. data/lib/chef/resource/ohai.rb +46 -3
  145. data/lib/chef/resource/ohai_hint.rb +33 -0
  146. data/lib/chef/resource/openssl_dhparam.rb +27 -5
  147. data/lib/chef/resource/openssl_ec_private_key.rb +6 -3
  148. data/lib/chef/resource/openssl_ec_public_key.rb +2 -2
  149. data/lib/chef/resource/openssl_rsa_private_key.rb +6 -3
  150. data/lib/chef/resource/openssl_x509_certificate.rb +14 -14
  151. data/lib/chef/resource/openssl_x509_crl.rb +19 -10
  152. data/lib/chef/resource/openssl_x509_request.rb +14 -16
  153. data/lib/chef/resource/osx_profile.rb +77 -13
  154. data/lib/chef/resource/plist.rb +1 -1
  155. data/lib/chef/resource/powershell_package_source.rb +5 -5
  156. data/lib/chef/resource/reboot.rb +2 -2
  157. data/lib/chef/resource/remote_file.rb +3 -3
  158. data/lib/chef/resource/rhsm_register.rb +22 -10
  159. data/lib/chef/resource/ruby_block.rb +2 -2
  160. data/lib/chef/resource/scm/subversion.rb +2 -2
  161. data/lib/chef/resource/service.rb +3 -3
  162. data/lib/chef/resource/ssh_known_hosts_entry.rb +2 -2
  163. data/lib/chef/resource/support/cron.d.erb +1 -1
  164. data/lib/chef/resource/support/cron_access.erb +1 -1
  165. data/lib/chef/resource/support/sudoer.erb +1 -1
  166. data/lib/chef/resource/support/ulimit.erb +1 -1
  167. data/lib/chef/resource/sysctl.rb +1 -5
  168. data/lib/chef/resource/systemd_unit.rb +2 -2
  169. data/lib/chef/resource/template.rb +2 -2
  170. data/lib/chef/resource/windows_ad_join.rb +10 -3
  171. data/lib/chef/resource/windows_certificate.rb +6 -4
  172. data/lib/chef/resource/windows_firewall_profile.rb +22 -20
  173. data/lib/chef/resource/windows_package.rb +28 -5
  174. data/lib/chef/resource/windows_printer.rb +5 -3
  175. data/lib/chef/resource/windows_printer_port.rb +6 -4
  176. data/lib/chef/resource/windows_user_privilege.rb +53 -54
  177. data/lib/chef/resource/windows_workgroup.rb +3 -3
  178. data/lib/chef/resource/yum_package.rb +2 -2
  179. data/lib/chef/resources.rb +3 -1
  180. data/lib/chef/run_context.rb +2 -2
  181. data/lib/chef/run_context/cookbook_compiler.rb +1 -1
  182. data/lib/chef/run_lock.rb +2 -2
  183. data/lib/chef/search/query.rb +4 -5
  184. data/lib/chef/shell.rb +31 -26
  185. data/lib/chef/shell/ext.rb +11 -11
  186. data/lib/chef/shell/shell_session.rb +2 -2
  187. data/lib/chef/train_transport.rb +5 -104
  188. data/lib/chef/util/diff.rb +3 -3
  189. data/lib/chef/util/powershell/cmdlet.rb +3 -1
  190. data/lib/chef/util/powershell/ps_credential.rb +18 -14
  191. data/lib/chef/util/threaded_job_queue.rb +0 -2
  192. data/lib/chef/version.rb +1 -1
  193. data/lib/chef/win32/crypto.rb +1 -1
  194. data/lib/chef/win32/registry.rb +1 -2
  195. data/spec/data/shef-config.rb +1 -1
  196. data/spec/functional/event_loggers/windows_eventlog_spec.rb +6 -5
  197. data/spec/functional/resource/aix_service_spec.rb +2 -2
  198. data/spec/functional/resource/aixinit_service_spec.rb +1 -1
  199. data/spec/functional/resource/insserv_spec.rb +1 -1
  200. data/spec/functional/resource/user/dscl_spec.rb +1 -1
  201. data/spec/functional/resource/user/mac_user_spec.rb +1 -1
  202. data/spec/functional/resource/windows_task_spec.rb +13 -13
  203. data/spec/functional/version_spec.rb +3 -3
  204. data/spec/integration/client/client_spec.rb +4 -4
  205. data/spec/integration/client/exit_code_spec.rb +3 -2
  206. data/spec/integration/client/ipv6_spec.rb +1 -1
  207. data/spec/integration/knife/{config_list_profiles_spec.rb → config_list_spec.rb} +30 -29
  208. data/spec/integration/knife/{config_get_spec.rb → config_show_spec.rb} +3 -3
  209. data/spec/integration/knife/{config_use_profile_spec.rb → config_use_spec.rb} +53 -10
  210. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +1 -1
  211. data/spec/integration/ohai/ohai_spec.rb +61 -0
  212. data/spec/integration/recipes/remote_directory.rb +1 -1
  213. data/spec/integration/solo/solo_spec.rb +5 -5
  214. data/spec/spec_helper.rb +6 -3
  215. data/spec/stress/win32/file_spec.rb +1 -1
  216. data/spec/support/chef_helpers.rb +2 -2
  217. data/spec/support/matchers/leak.rb +2 -2
  218. data/spec/support/platform_helpers.rb +16 -34
  219. data/spec/support/shared/functional/securable_resource.rb +108 -27
  220. data/spec/support/shared/functional/win32_service.rb +1 -1
  221. data/spec/support/shared/unit/application_dot_d.rb +5 -3
  222. data/spec/tiny_server.rb +0 -1
  223. data/spec/unit/application/client_spec.rb +2 -2
  224. data/spec/unit/application/exit_code_spec.rb +10 -0
  225. data/spec/unit/application_spec.rb +4 -6
  226. data/spec/unit/chef_fs/parallelizer_spec.rb +5 -1
  227. data/spec/unit/chef_fs/path_util_spec.rb +1 -1
  228. data/spec/unit/cookbook/synchronizer_spec.rb +2 -2
  229. data/spec/unit/cookbook_spec.rb +2 -2
  230. data/spec/unit/data_collector/config_validation_spec.rb +208 -0
  231. data/spec/unit/data_collector_spec.rb +0 -113
  232. data/spec/unit/dsl/declare_resource_spec.rb +1 -1
  233. data/spec/unit/file_access_control_spec.rb +1 -1
  234. data/spec/unit/knife/bootstrap_spec.rb +6 -6
  235. data/spec/unit/knife/core/ui_spec.rb +1 -0
  236. data/spec/unit/knife/ssh_spec.rb +2 -2
  237. data/spec/unit/lwrp_spec.rb +3 -3
  238. data/spec/unit/mixin/deep_merge_spec.rb +15 -0
  239. data/spec/unit/mixin/openssl_helper_spec.rb +1 -1
  240. data/spec/unit/mixin/powershell_exec_spec.rb +1 -1
  241. data/spec/unit/mixin/securable_spec.rb +2 -2
  242. data/spec/unit/node/immutable_collections_spec.rb +2 -2
  243. data/spec/unit/provider/mount/linux_spec.rb +97 -0
  244. data/spec/unit/provider/package/chocolatey_spec.rb +1 -1
  245. data/spec/unit/provider/package/powershell_spec.rb +1 -1
  246. data/spec/unit/provider/package/rubygems_spec.rb +4 -1
  247. data/spec/unit/provider/route_spec.rb +0 -2
  248. data/spec/unit/recipe_spec.rb +1 -1
  249. data/spec/unit/resource/chef_client_cron_spec.rb +35 -14
  250. data/spec/unit/resource/chef_client_launchd_spec.rb +127 -0
  251. data/spec/unit/resource/chef_client_systemd_timer_spec.rb +36 -1
  252. data/spec/unit/resource/chef_client_trusted_certificate_spec.rb +54 -0
  253. data/spec/unit/resource/launchd_spec.rb +8 -0
  254. data/spec/unit/resource/osx_profile_spec.rb +67 -1
  255. data/spec/unit/resource/rhsm_register_spec.rb +56 -18
  256. data/spec/unit/resource/windows_uac_spec.rb +1 -1
  257. data/spec/unit/resource/windows_user_privilege_spec.rb +55 -0
  258. data/spec/unit/run_lock_spec.rb +5 -1
  259. data/spec/unit/runner_spec.rb +1 -2
  260. data/spec/unit/shell/shell_ext_spec.rb +46 -3
  261. data/spec/unit/shell/shell_session_spec.rb +35 -64
  262. data/spec/unit/shell_spec.rb +16 -19
  263. data/spec/unit/train_transport_spec.rb +14 -13
  264. data/spec/unit/util/selinux_spec.rb +2 -0
  265. data/tasks/rspec.rb +0 -2
  266. metadata +41 -17
  267. data/lib/chef/dist.rb +0 -68
  268. data/spec/integration/knife/config_get_profile_spec.rb +0 -114
@@ -0,0 +1,55 @@
1
+ #
2
+ # Copyright:: Copyright (c) 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
+
20
+ describe Chef::Resource::WindowsUserPrivilege do
21
+ let(:resource) { Chef::Resource::WindowsUserPrivilege.new("fakey_fakerton") }
22
+
23
+ it "sets resource name as :windows_user_privilege" do
24
+ expect(resource.resource_name).to eql(:windows_user_privilege)
25
+ end
26
+
27
+ it "the principal property is the name_property" do
28
+ expect(resource.principal).to eql("fakey_fakerton")
29
+ end
30
+
31
+ it "the users property coerces to an array" do
32
+ resource.users "Administrator"
33
+ expect(resource.users).to eql(["Administrator"])
34
+ end
35
+
36
+ it "the privilege property coerces to an array" do
37
+ resource.privilege "SeDenyRemoteInteractiveLogonRight"
38
+ expect(resource.privilege).to eql(["SeDenyRemoteInteractiveLogonRight"])
39
+ end
40
+
41
+ it "the privilege property validates inputs against the allowed list of privs" do
42
+ expect { resource.privilege "invalidPriv" }.to raise_error(Chef::Exceptions::ValidationFailed)
43
+ end
44
+
45
+ it "sets the default action as :add" do
46
+ expect(resource.action).to eql([:add])
47
+ end
48
+
49
+ it "supports :add, :set, :clear, :remove actions" do
50
+ expect { resource.action :add }.not_to raise_error
51
+ expect { resource.action :set }.not_to raise_error
52
+ expect { resource.action :clear }.not_to raise_error
53
+ expect { resource.action :remove }.not_to raise_error
54
+ end
55
+ end
@@ -18,7 +18,11 @@
18
18
  require "spec_helper"
19
19
  require "chef/client"
20
20
 
21
- describe Chef::RunLock do
21
+ # FIXME: these are disabled on MacOS due to timing issues in our anka build cluster
22
+ # these issues should be fixed and the tests should be re-eenabled. If we are getting
23
+ # omnibus test phases on mac tests which are reasonable and not ~3 hours long, then the
24
+ # condition to avoid this testing on macs can be deleted
25
+ describe Chef::RunLock, :not_supported_on_macos do
22
26
 
23
27
  default_cache_path = windows? ? 'C:\chef' : "/var/chef"
24
28
  default_pid_location = windows? ? 'C:\chef\cache\chef-client-running.pid' : "/var/chef/cache/chef-client-running.pid"
@@ -111,8 +111,7 @@ describe Chef::Runner do
111
111
 
112
112
  it "should use the provider specified by the resource (if it has one)" do
113
113
  provider = Chef::Provider::Easy.new(run_context.resource_collection[0], run_context)
114
- # Expect provider to be called twice, because will fall back to old provider lookup
115
- expect(run_context.resource_collection[0]).to receive(:provider).twice.and_return(Chef::Provider::Easy)
114
+ expect(run_context.resource_collection[0]).to receive(:provider).once.and_return(Chef::Provider::Easy)
116
115
  expect(Chef::Provider::Easy).to receive(:new).once.and_return(provider)
117
116
  runner.converge
118
117
  end
@@ -19,14 +19,57 @@
19
19
  require "spec_helper"
20
20
 
21
21
  describe Shell::Extensions do
22
+ let(:test_shell_session) do
23
+ Class.new(Shell::ShellSession) do
24
+ def rebuild_node
25
+ nil
26
+ end
27
+
28
+ def rebuild_collection
29
+ nil
30
+ end
31
+
32
+ def loading
33
+ nil
34
+ end
35
+
36
+ def loading_complete
37
+ nil
38
+ end
39
+ end
40
+ end
41
+
42
+ let(:test_job_manager) do
43
+ Class.new do
44
+ attr_accessor :jobs
45
+ end
46
+ end
47
+
48
+ let(:object_test_harness) do
49
+ Proc.new do
50
+ extend Shell::Extensions::ObjectCoreExtensions
51
+
52
+ def conf=(new_conf)
53
+ @conf = new_conf
54
+ end
55
+
56
+ def conf
57
+ @conf
58
+ end
59
+
60
+ desc "rspecin'"
61
+ def rspec_method; end
62
+ end
63
+ end
64
+
22
65
  describe "extending object for top level methods" do
23
66
 
24
67
  before do
25
- @shell_client = TestableShellSession.instance
68
+ @shell_client = test_shell_session.instance
26
69
  allow(Shell).to receive(:session).and_return(@shell_client)
27
- @job_manager = TestJobManager.new
70
+ @job_manager = test_job_manager.new
28
71
  @root_context = Object.new
29
- @root_context.instance_eval(&ObjectTestHarness)
72
+ @root_context.instance_eval(&object_test_harness)
30
73
  Shell::Extensions.extend_context_object(@root_context)
31
74
  @root_context.conf = double("irbconf")
32
75
  end
@@ -18,32 +18,10 @@
18
18
  require "spec_helper"
19
19
  require "ostruct"
20
20
 
21
- class TestableShellSession < Shell::ShellSession
22
-
23
- def rebuild_node
24
- nil
25
- end
26
-
27
- def rebuild_collection
28
- nil
29
- end
30
-
31
- def loading
32
- nil
33
- end
34
-
35
- def loading_complete
36
- nil
37
- end
38
-
39
- end
40
-
41
21
  describe Shell::ShellSession do
42
-
43
22
  it "is a singleton object" do
44
23
  expect(Shell::ShellSession).to include(Singleton)
45
24
  end
46
-
47
25
  end
48
26
 
49
27
  describe Shell::ClientSession do
@@ -120,20 +98,10 @@ end
120
98
 
121
99
  describe Shell::StandAloneSession do
122
100
  let(:json_attribs) { { "a" => "b" } }
123
- let(:chef_rest) { double("Chef::ServerAPI") }
124
101
  let(:node) { Chef::Node.new }
125
- let(:events) { Chef::EventDispatch::Dispatcher.new }
126
102
  let(:session) { Shell::StandAloneSession.instance }
127
- let(:client) do
128
- double("Chef::Client.new",
129
- run_ohai: true,
130
- load_node: true,
131
- build_node: true,
132
- register: true,
133
- sync_cookbooks: {})
134
- end
135
103
  let(:recipe) { Chef::Recipe.new(nil, nil, run_context) }
136
- let(:run_context) { Chef::RunContext.new(node, {}, events) }
104
+ let(:run_context) { Chef::RunContext.new(node, {}, Chef::EventDispatch::Dispatcher.new) }
137
105
 
138
106
  before do
139
107
  Chef::Config[:shell_config] = { override_runlist: [Chef::RunList::RunListItem.new("shell::override")] }
@@ -172,6 +140,12 @@ describe Shell::StandAloneSession do
172
140
  end
173
141
 
174
142
  it "passes the shell CLI args to the client" do
143
+ client = double("Chef::Client.new",
144
+ run_ohai: true,
145
+ load_node: true,
146
+ build_node: true,
147
+ register: true,
148
+ sync_cookbooks: {})
175
149
  expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
176
150
  session.send(:rebuild_node)
177
151
  end
@@ -180,68 +154,65 @@ end
180
154
 
181
155
  describe Shell::SoloLegacySession do
182
156
  let(:json_attribs) { { "a" => "b" } }
157
+ let(:node) { Chef::Node.new }
158
+ let(:session) { Shell::SoloLegacySession.instance }
159
+ let(:recipe) { Chef::Recipe.new(nil, nil, run_context) }
160
+ let(:run_context) { Chef::RunContext.new(node, {}, Chef::EventDispatch::Dispatcher.new) }
183
161
 
184
162
  before do
185
163
  Chef::Config[:shell_config] = { override_runlist: [Chef::RunList::RunListItem.new("shell::override")] }
186
- Chef::Config[:shell_solo] = true
187
- @session = Shell::SoloLegacySession.instance
188
- @node = Chef::Node.new
189
- @events = Chef::EventDispatch::Dispatcher.new
190
- @run_context = @session.run_context = Chef::RunContext.new(@node, {}, @events)
191
- @session.node = @node
192
- @recipe = @session.recipe = Chef::Recipe.new(nil, nil, @run_context)
193
- Shell::Extensions.extend_context_recipe(@recipe)
194
- end
195
-
196
- after do
197
- Chef::Config[:shell_solo] = nil
164
+ Chef::Config[:solo_legacy_shell] = true
165
+ session.node = node
166
+ session.json_configuration = json_attribs
167
+ session.run_context = run_context
168
+ session.recipe = recipe
169
+ Shell::Extensions.extend_context_recipe(recipe)
198
170
  end
199
171
 
200
172
  it "returns a collection based on it's compilation object and the extra recipe provided by chef-shell" do
201
- allow(@session).to receive(:node_built?).and_return(true)
173
+ allow(session).to receive(:node_built?).and_return(true)
202
174
  kitteh = Chef::Resource::Cat.new("keyboard")
203
- @recipe.run_context.resource_collection << kitteh
204
- expect(@session.resource_collection.include?(kitteh)).to be true
175
+ recipe.run_context.resource_collection << kitteh
176
+ expect(session.resource_collection.include?(kitteh)).to be true
205
177
  end
206
178
 
207
179
  it "returns definitions from its compilation object" do
208
- expect(@session.definitions).to eq(@run_context.definitions)
180
+ expect(session.definitions).to eq(run_context.definitions)
209
181
  end
210
182
 
211
183
  it "keeps json attribs and passes them to the node for consumption" do
212
- @session.node_attributes = { "besnard_lakes" => "are_the_dark_horse" }
213
- expect(@session.node["besnard_lakes"]).to eq("are_the_dark_horse")
184
+ session.node_attributes = { "besnard_lakes" => "are_the_dark_horse" }
185
+ expect(session.node["besnard_lakes"]).to eq("are_the_dark_horse")
214
186
  # pending "1) keep attribs in an ivar 2) pass them to the node 3) feed them to the node on reset"
215
187
  end
216
188
 
217
189
  it "generates its resource collection from the compiled cookbooks and the ad hoc recipe" do
218
- allow(@session).to receive(:node_built?).and_return(true)
190
+ allow(session).to receive(:node_built?).and_return(true)
219
191
  kitteh_cat = Chef::Resource::Cat.new("kitteh")
220
- @run_context.resource_collection << kitteh_cat
192
+ run_context.resource_collection << kitteh_cat
221
193
  keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
222
- @recipe.run_context.resource_collection << keyboard_cat
223
- # @session.rebuild_collection
224
- expect(@session.resource_collection.include?(kitteh_cat)).to be true
225
- expect(@session.resource_collection.include?(keyboard_cat)).to be true
194
+ recipe.run_context.resource_collection << keyboard_cat
195
+ # session.rebuild_collection
196
+ expect(session.resource_collection.include?(kitteh_cat)).to be true
197
+ expect(session.resource_collection.include?(keyboard_cat)).to be true
226
198
  end
227
199
 
228
200
  it "runs chef with a resource collection from the compiled cookbooks" do
229
- allow(@session).to receive(:node_built?).and_return(true)
201
+ allow(session).to receive(:node_built?).and_return(true)
230
202
  chef_runner = double("Chef::Runner.new", converge: :converged)
231
- expect(Chef::Runner).to receive(:new).with(an_instance_of(Chef::RunContext)).and_return(chef_runner)
203
+ expect(Chef::Runner).to receive(:new).with(session.recipe.run_context).and_return(chef_runner)
232
204
 
233
- expect(@recipe.run_chef).to eq(:converged)
205
+ expect(recipe.run_chef).to eq(:converged)
234
206
  end
235
207
 
236
208
  it "passes the shell CLI args to the client" do
237
- @client = double("Chef::Client.new",
209
+ client = double("Chef::Client.new",
238
210
  run_ohai: true,
239
211
  load_node: true,
240
212
  build_node: true,
241
213
  register: true,
242
214
  sync_cookbooks: {})
243
- expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(@client)
244
- @session.json_configuration = json_attribs
245
- @session.send(:rebuild_node)
215
+ expect(Chef::Client).to receive(:new).with(json_attribs, Chef::Config[:shell_config]).and_return(client)
216
+ session.send(:rebuild_node)
246
217
  end
247
218
  end
@@ -18,26 +18,23 @@
18
18
  require "spec_helper"
19
19
  require "ostruct"
20
20
 
21
- ObjectTestHarness = Proc.new do
22
- extend Shell::Extensions::ObjectCoreExtensions
23
-
24
- def conf=(new_conf)
25
- @conf = new_conf
26
- end
27
-
28
- def conf
29
- @conf
30
- end
21
+ describe Shell do
22
+ let(:object_test_harness) do
23
+ Proc.new do
24
+ extend Shell::Extensions::ObjectCoreExtensions
31
25
 
32
- desc "rspecin'"
33
- def rspec_method; end
34
- end
26
+ def conf=(new_conf)
27
+ @conf = new_conf
28
+ end
35
29
 
36
- class TestJobManager
37
- attr_accessor :jobs
38
- end
30
+ def conf
31
+ @conf
32
+ end
39
33
 
40
- describe Shell do
34
+ desc "rspecin'"
35
+ def rspec_method; end
36
+ end
37
+ end
41
38
 
42
39
  before do
43
40
  Shell.irb_conf = {}
@@ -66,7 +63,7 @@ describe Shell do
66
63
 
67
64
  conf = OpenStruct.new
68
65
  conf.main = Object.new
69
- conf.main.instance_eval(&ObjectTestHarness)
66
+ conf.main.instance_eval(&object_test_harness)
70
67
  Shell.irb_conf[:IRB_RC].call(conf)
71
68
  expect(conf.prompt_c).to eq("chef > ")
72
69
  expect(conf.return_format).to eq(" => %s \n")
@@ -107,7 +104,7 @@ describe Shell do
107
104
 
108
105
  before do
109
106
  @chef_object = Object.new
110
- @chef_object.instance_eval(&ObjectTestHarness)
107
+ @chef_object.instance_eval(&object_test_harness)
111
108
  end
112
109
 
113
110
  it "creates help text for methods with descriptions" do
@@ -19,32 +19,33 @@
19
19
  require "spec_helper"
20
20
 
21
21
  describe Chef::TrainTransport do
22
+ let(:transport) { Chef::TrainTransport.new(Chef::Log) }
23
+
22
24
  describe "load_credentials" do
23
- let(:transport) { Chef::TrainTransport.new }
24
25
  let(:good_credentials) { { "switch.cisco.com" => { "user" => "cisco", "password" => "cisco", "enable_password" => "secret" } } }
25
26
 
26
27
  before do
27
- allow(Chef::TrainTransport).to receive(:parse_credentials_file).and_return(good_credentials)
28
+ allow(transport).to receive(:parse_credentials_file).and_return(good_credentials)
28
29
  end
29
30
 
30
31
  it "matches credentials when they exist" do
31
- expect(Chef::TrainTransport.load_credentials("switch.cisco.com")[:user]).to eq("cisco")
32
- expect(Chef::TrainTransport.load_credentials("switch.cisco.com")[:password]).to eq("cisco")
33
- expect(Chef::TrainTransport.load_credentials("switch.cisco.com")[:enable_password]).to eq("secret")
32
+ expect(transport.load_credentials("switch.cisco.com")[:user]).to eq("cisco")
33
+ expect(transport.load_credentials("switch.cisco.com")[:password]).to eq("cisco")
34
+ expect(transport.load_credentials("switch.cisco.com")[:enable_password]).to eq("secret")
34
35
  end
35
36
 
36
37
  it "returns nil if there is no match" do
37
- expect(Chef::TrainTransport.load_credentials("router.unicorns.com")).to be_nil
38
+ expect(transport.load_credentials("router.unicorns.com")).to be_nil
38
39
  end
39
40
 
40
41
  # [foo.example.org] => {"foo"=>{"example"=>{"org"=>{}}}}
41
42
  # ['foo.example.org'] => {"foo.example.org"=>{}}
42
43
  it "warns if the host has been split by toml" do
43
- allow(Chef::TrainTransport).to receive(:credentials_file_path).and_return("/Users/scotthourglass/.chef/credentials")
44
- allow(Chef::TrainTransport).to receive(:parse_credentials_file).and_return({ "foo" => { "example" => { "org" => {} } } })
44
+ allow(transport).to receive(:credentials_file_path).and_return("/Users/scotthourglass/.chef/credentials")
45
+ allow(transport).to receive(:parse_credentials_file).and_return({ "foo" => { "example" => { "org" => {} } } })
45
46
  expect(Chef::Log).to receive(:warn).with(/as a Hash/)
46
47
  expect(Chef::Log).to receive(:warn).with(/Hostnames must be surrounded by single quotes/)
47
- expect(Chef::TrainTransport.load_credentials("foo.example.org")).to be_nil
48
+ expect(transport.load_credentials("foo.example.org")).to be_nil
48
49
  end
49
50
  end
50
51
 
@@ -60,25 +61,25 @@ describe Chef::TrainTransport do
60
61
 
61
62
  it "returns the path if it exists" do
62
63
  allow(File).to receive(:exist?).with(config_cred_file_path).and_return(true)
63
- expect(Chef::TrainTransport.credentials_file_path).to eq(config_cred_file_path)
64
+ expect(transport.credentials_file_path).to eq(config_cred_file_path)
64
65
  end
65
66
 
66
67
  it "raises an error if it does not exist" do
67
68
  allow(File).to receive(:exist?).and_return(false)
68
- expect { Chef::TrainTransport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
69
+ expect { transport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
69
70
  end
70
71
  end
71
72
 
72
73
  it "raises an error if the default creds files do not exist" do
73
74
  allow(File).to receive(:exist?).and_return(false)
74
- expect { Chef::TrainTransport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
75
+ expect { transport.credentials_file_path }.to raise_error(ArgumentError, /does not exist/)
75
76
  end
76
77
 
77
78
  it "returns the path to the default config file if it exists" do
78
79
  tm_config = double("Config Context", host: "foo.example.org", credentials_file: nil)
79
80
  allow(Chef::Config).to receive(:target_mode).and_return(tm_config)
80
81
  allow(File).to receive(:exist?).with(host_cred_file_path).and_return(true)
81
- expect(Chef::TrainTransport.credentials_file_path).to eq(host_cred_file_path)
82
+ expect(transport.credentials_file_path).to eq(host_cred_file_path)
82
83
  end
83
84
  end
84
85
  end
@@ -31,6 +31,8 @@ describe Chef::Util::Selinux do
31
31
 
32
32
  before do
33
33
  allow(ChefUtils).to receive(:windows?).and_return(false)
34
+ allow(ENV).to receive(:[]).with("PATHEXT").and_return(nil)
35
+ allow(ENV).to receive(:[]).with("PATH").and_call_original
34
36
  TestClass.reset_state
35
37
  @test_instance = TestClass.new
36
38
  end
@@ -20,8 +20,6 @@
20
20
  require "rubygems"
21
21
  require "rake"
22
22
 
23
- CHEF_ROOT = File.join(File.dirname(__FILE__), "..")
24
-
25
23
  begin
26
24
  require "rspec/core/rake_task"
27
25