chef 12.0.0.alpha.1-x86-mingw32 → 12.0.0.alpha.2-x86-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 (180) hide show
  1. checksums.yaml +4 -4
  2. data/lib/chef/application.rb +8 -1
  3. data/lib/chef/application/apply.rb +4 -0
  4. data/lib/chef/application/client.rb +7 -7
  5. data/lib/chef/application/solo.rb +21 -13
  6. data/lib/chef/chef_fs/chef_fs_data_store.rb +60 -6
  7. data/lib/chef/chef_fs/config.rb +78 -4
  8. data/lib/chef/chef_fs/data_handler/acl_data_handler.rb +2 -2
  9. data/lib/chef/chef_fs/data_handler/client_data_handler.rb +1 -1
  10. data/lib/chef/chef_fs/data_handler/container_data_handler.rb +1 -1
  11. data/lib/chef/chef_fs/data_handler/cookbook_data_handler.rb +1 -1
  12. data/lib/chef/chef_fs/data_handler/data_bag_item_data_handler.rb +1 -1
  13. data/lib/chef/chef_fs/data_handler/data_handler_base.rb +76 -2
  14. data/lib/chef/chef_fs/data_handler/environment_data_handler.rb +1 -1
  15. data/lib/chef/chef_fs/data_handler/group_data_handler.rb +1 -1
  16. data/lib/chef/chef_fs/data_handler/node_data_handler.rb +1 -1
  17. data/lib/chef/chef_fs/data_handler/organization_data_handler.rb +30 -0
  18. data/lib/chef/chef_fs/data_handler/organization_invites_data_handler.rb +17 -0
  19. data/lib/chef/chef_fs/data_handler/organization_members_data_handler.rb +17 -0
  20. data/lib/chef/chef_fs/data_handler/role_data_handler.rb +1 -1
  21. data/lib/chef/chef_fs/data_handler/user_data_handler.rb +2 -1
  22. data/lib/chef/chef_fs/file_system.rb +0 -1
  23. data/lib/chef/chef_fs/file_system/acl_entry.rb +1 -1
  24. data/lib/chef/chef_fs/file_system/chef_repository_file_system_cookbook_dir.rb +1 -1
  25. data/lib/chef/chef_fs/file_system/chef_repository_file_system_entry.rb +5 -1
  26. data/lib/chef/chef_fs/file_system/chef_repository_file_system_root_dir.rb +73 -13
  27. data/lib/chef/chef_fs/file_system/chef_server_root_dir.rb +44 -5
  28. data/lib/chef/chef_fs/file_system/cookbook_dir.rb +1 -1
  29. data/lib/chef/chef_fs/file_system/cookbooks_dir.rb +3 -3
  30. data/lib/chef/chef_fs/file_system/org_entry.rb +34 -0
  31. data/lib/chef/chef_fs/file_system/organization_invites_entry.rb +58 -0
  32. data/lib/chef/chef_fs/file_system/organization_members_entry.rb +57 -0
  33. data/lib/chef/chef_fs/file_system/rest_list_entry.rb +13 -4
  34. data/lib/chef/chef_fs/knife.rb +1 -1
  35. data/lib/chef/client.rb +8 -2
  36. data/lib/chef/config.rb +75 -57
  37. data/lib/chef/config_fetcher.rb +6 -21
  38. data/lib/chef/dsl/data_query.rb +48 -3
  39. data/lib/chef/dsl/platform_introspection.rb +42 -0
  40. data/lib/chef/dsl/reboot_pending.rb +6 -3
  41. data/lib/chef/encrypted_data_bag_item.rb +1 -1
  42. data/lib/chef/encrypted_data_bag_item/encryptor.rb +12 -0
  43. data/lib/chef/exceptions.rb +2 -0
  44. data/lib/chef/http/basic_client.rb +14 -0
  45. data/lib/chef/http/json_output.rb +7 -2
  46. data/lib/chef/knife.rb +36 -121
  47. data/lib/chef/knife/bootstrap.rb +68 -54
  48. data/lib/chef/knife/bootstrap/archlinux-gems.erb +6 -1
  49. data/lib/chef/knife/bootstrap/chef-aix.erb +5 -0
  50. data/lib/chef/knife/bootstrap/chef-full.erb +5 -1
  51. data/lib/chef/knife/core/bootstrap_context.rb +70 -29
  52. data/lib/chef/knife/search.rb +56 -12
  53. data/lib/chef/knife/serve.rb +1 -1
  54. data/lib/chef/local_mode.rb +10 -4
  55. data/lib/chef/mixin/deep_merge.rb +6 -3
  56. data/lib/chef/mixin/shell_out.rb +33 -17
  57. data/lib/chef/null_logger.rb +72 -0
  58. data/lib/chef/platform.rb +2 -1
  59. data/lib/chef/platform/provider_mapping.rb +1 -1
  60. data/lib/chef/platform/rebooter.rb +54 -0
  61. data/lib/chef/provider/ifconfig.rb +15 -16
  62. data/lib/chef/provider/link.rb +1 -1
  63. data/lib/chef/provider/mount/mount.rb +1 -1
  64. data/lib/chef/provider/mount/solaris.rb +102 -64
  65. data/lib/chef/provider/package/aix.rb +4 -12
  66. data/lib/chef/provider/package/ips.rb +8 -12
  67. data/lib/chef/provider/package/macports.rb +4 -12
  68. data/lib/chef/provider/package/pacman.rb +2 -6
  69. data/lib/chef/provider/package/portage.rb +2 -6
  70. data/lib/chef/provider/package/rpm.rb +4 -12
  71. data/lib/chef/provider/package/solaris.rb +4 -12
  72. data/lib/chef/provider/reboot.rb +69 -0
  73. data/lib/chef/provider/service/debian.rb +10 -10
  74. data/lib/chef/provider/service/freebsd.rb +89 -73
  75. data/lib/chef/provider/service/gentoo.rb +2 -2
  76. data/lib/chef/provider/service/init.rb +6 -4
  77. data/lib/chef/provider/service/insserv.rb +3 -3
  78. data/lib/chef/provider/service/macosx.rb +2 -2
  79. data/lib/chef/provider/service/simple.rb +6 -4
  80. data/lib/chef/provider/service/solaris.rb +1 -1
  81. data/lib/chef/provider/service/systemd.rb +9 -9
  82. data/lib/chef/provider/service/upstart.rb +6 -6
  83. data/lib/chef/provider/subversion.rb +6 -6
  84. data/lib/chef/provider/user/dscl.rb +32 -28
  85. data/lib/chef/provider/user/windows.rb +6 -6
  86. data/lib/chef/provider/whyrun_safe_ruby_block.rb +1 -1
  87. data/lib/chef/providers.rb +1 -0
  88. data/lib/chef/recipe.rb +0 -1
  89. data/lib/chef/resource.rb +3 -5
  90. data/lib/chef/resource/mount.rb +9 -0
  91. data/lib/chef/resource/reboot.rb +48 -0
  92. data/lib/chef/resources.rb +1 -0
  93. data/lib/chef/run_context.rb +25 -0
  94. data/lib/chef/search/query.rb +122 -14
  95. data/lib/chef/util/path_helper.rb +54 -6
  96. data/lib/chef/util/windows/net_user.rb +4 -1
  97. data/lib/chef/version.rb +1 -1
  98. data/lib/chef/win32/api/file.rb +1 -5
  99. data/lib/chef/win32/api/net.rb +1 -0
  100. data/lib/chef/workstation_config_loader.rb +177 -0
  101. data/spec/functional/http/simple_spec.rb +57 -1
  102. data/spec/functional/mixin/shell_out_spec.rb +2 -2
  103. data/spec/functional/provider/whyrun_safe_ruby_block_spec.rb +51 -0
  104. data/spec/functional/rebooter_spec.rb +105 -0
  105. data/spec/functional/resource/deploy_revision_spec.rb +0 -4
  106. data/spec/functional/resource/file_spec.rb +26 -3
  107. data/spec/functional/resource/group_spec.rb +5 -3
  108. data/spec/functional/resource/link_spec.rb +16 -16
  109. data/spec/functional/resource/reboot_spec.rb +103 -0
  110. data/spec/integration/client/client_spec.rb +4 -8
  111. data/spec/integration/client/ipv6_spec.rb +1 -1
  112. data/spec/integration/knife/cookbook_api_ipv6_spec.rb +3 -2
  113. data/spec/integration/knife/delete_spec.rb +39 -0
  114. data/spec/integration/knife/deps_spec.rb +30 -20
  115. data/spec/integration/knife/download_spec.rb +77 -1
  116. data/spec/integration/knife/list_spec.rb +221 -0
  117. data/spec/integration/knife/raw_spec.rb +1 -1
  118. data/spec/integration/knife/show_spec.rb +2 -2
  119. data/spec/integration/knife/upload_spec.rb +154 -1
  120. data/spec/support/pedant/run_pedant.rb +0 -1
  121. data/spec/support/shared/functional/http.rb +8 -1
  122. data/spec/support/shared/integration/integration_helper.rb +11 -19
  123. data/spec/support/shared/unit/platform_introspector.rb +22 -0
  124. data/spec/unit/application/apply.rb +11 -1
  125. data/spec/unit/application/solo_spec.rb +19 -3
  126. data/spec/unit/chef_fs/config_spec.rb +58 -0
  127. data/spec/unit/config_fetcher_spec.rb +1 -3
  128. data/spec/unit/config_spec.rb +247 -220
  129. data/spec/unit/dsl/data_query_spec.rb +165 -23
  130. data/spec/unit/dsl/reboot_pending_spec.rb +1 -7
  131. data/spec/unit/encrypted_data_bag_item_spec.rb +1 -1
  132. data/spec/unit/knife/bootstrap_spec.rb +354 -182
  133. data/spec/unit/knife/core/bootstrap_context_spec.rb +67 -30
  134. data/spec/unit/knife_spec.rb +3 -30
  135. data/spec/unit/mixin/deep_merge_spec.rb +14 -0
  136. data/spec/unit/mixin/shell_out_spec.rb +134 -64
  137. data/spec/unit/provider/ifconfig/debian_spec.rb +19 -9
  138. data/spec/unit/provider/ifconfig/redhat_spec.rb +16 -14
  139. data/spec/unit/provider/ifconfig_spec.rb +3 -3
  140. data/spec/unit/provider/link_spec.rb +5 -5
  141. data/spec/unit/provider/mount/mount_spec.rb +10 -1
  142. data/spec/unit/provider/mount/solaris_spec.rb +185 -11
  143. data/spec/unit/provider/package/aix_spec.rb +5 -17
  144. data/spec/unit/provider/package/ips_spec.rb +8 -21
  145. data/spec/unit/provider/package/macports_spec.rb +12 -12
  146. data/spec/unit/provider/package/pacman_spec.rb +4 -12
  147. data/spec/unit/provider/package/portage_spec.rb +5 -15
  148. data/spec/unit/provider/package/rpm_spec.rb +7 -22
  149. data/spec/unit/provider/package/solaris_spec.rb +5 -16
  150. data/spec/unit/provider/service/arch_service_spec.rb +8 -14
  151. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  152. data/spec/unit/provider/service/freebsd_service_spec.rb +457 -225
  153. data/spec/unit/provider/service/gentoo_service_spec.rb +2 -2
  154. data/spec/unit/provider/service/init_service_spec.rb +10 -10
  155. data/spec/unit/provider/service/insserv_service_spec.rb +3 -4
  156. data/spec/unit/provider/service/invokercd_service_spec.rb +8 -9
  157. data/spec/unit/provider/service/macosx_spec.rb +5 -5
  158. data/spec/unit/provider/service/simple_service_spec.rb +4 -6
  159. data/spec/unit/provider/service/solaris_smf_service_spec.rb +1 -3
  160. data/spec/unit/provider/service/systemd_service_spec.rb +20 -20
  161. data/spec/unit/provider/service/upstart_service_spec.rb +15 -17
  162. data/spec/unit/provider/subversion_spec.rb +5 -6
  163. data/spec/unit/provider/user/dscl_spec.rb +2 -1
  164. data/spec/unit/provider/user/windows_spec.rb +7 -0
  165. data/spec/unit/provider/whyrun_safe_ruby_block_spec.rb +2 -2
  166. data/spec/unit/resource/mount_spec.rb +9 -0
  167. data/spec/unit/resource_spec.rb +0 -4
  168. data/spec/unit/rest_spec.rb +1 -1
  169. data/spec/unit/run_context_spec.rb +15 -0
  170. data/spec/unit/search/query_spec.rb +196 -40
  171. data/spec/unit/util/path_helper_spec.rb +111 -28
  172. data/spec/unit/workstation_config_loader_spec.rb +283 -0
  173. metadata +36 -20
  174. data/lib/chef/knife/bootstrap/centos5-gems.erb +0 -62
  175. data/lib/chef/knife/bootstrap/fedora13-gems.erb +0 -44
  176. data/lib/chef/knife/bootstrap/ubuntu10.04-apt.erb +0 -53
  177. data/lib/chef/knife/bootstrap/ubuntu10.04-gems.erb +0 -48
  178. data/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb +0 -46
  179. data/spec/support/shared/integration/chef_zero_support.rb +0 -130
  180. data/spec/unit/knife/config_file_selection_spec.rb +0 -135
@@ -161,7 +161,6 @@ describe Chef::Provider::Service::Upstart do
161
161
  @provider.load_current_resource
162
162
  end
163
163
 
164
-
165
164
  it "should track state when the upstart configuration file fails to load" do
166
165
  File.should_receive(:exists?).and_return false
167
166
  @provider.load_current_resource
@@ -174,19 +173,19 @@ describe Chef::Provider::Service::Upstart do
174
173
  end
175
174
 
176
175
  it "should run the services status command if one has been specified" do
177
- @provider.stub(:run_command_with_systems_locale).with({:command => "/bin/chefhasmonkeypants status"}).and_return(0)
176
+ @provider.stub(:shell_out!).with("/bin/chefhasmonkeypants status").and_return(0)
178
177
  @current_resource.should_receive(:running).with(true)
179
178
  @provider.load_current_resource
180
179
  end
181
180
 
182
181
  it "should track state when the user-provided status command fails" do
183
- @provider.stub(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_raise(Chef::Exceptions::Exec)
182
+ @provider.stub(:shell_out!).and_raise(Errno::ENOENT)
184
183
  @provider.load_current_resource
185
184
  @provider.instance_variable_get("@command_success").should == false
186
185
  end
187
186
 
188
187
  it "should set running to false if it catches a Chef::Exceptions::Exec when using a status command" do
189
- @provider.stub(:popen4).and_yield(@pid, @stdin, @stdout, @stderr).and_raise(Chef::Exceptions::Exec)
188
+ @provider.stub(:shell_out!).and_raise(Errno::ENOENT)
190
189
  @current_resource.should_receive(:running).with(false)
191
190
  @provider.load_current_resource
192
191
  end
@@ -202,7 +201,6 @@ describe Chef::Provider::Service::Upstart do
202
201
  @provider.load_current_resource.should eql(@current_resource)
203
202
  end
204
203
 
205
-
206
204
  end
207
205
 
208
206
  describe "enable and disable service" do
@@ -243,18 +241,18 @@ describe Chef::Provider::Service::Upstart do
243
241
 
244
242
  it "should call the start command if one is specified" do
245
243
  @new_resource.stub(:start_command).and_return("/sbin/rsyslog startyousillysally")
246
- @provider.should_receive(:shell_out!).with("/sbin/rsyslog startyousillysally")
244
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/rsyslog startyousillysally")
247
245
  @provider.start_service()
248
246
  end
249
247
 
250
248
  it "should call '/sbin/start service_name' if no start command is specified" do
251
- @provider.should_receive(:run_command_with_systems_locale).with({:command => "/sbin/start #{@new_resource.service_name}"}).and_return(0)
249
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/start #{@new_resource.service_name}").and_return(0)
252
250
  @provider.start_service()
253
251
  end
254
252
 
255
253
  it "should not call '/sbin/start service_name' if it is already running" do
256
254
  @current_resource.stub(:running).and_return(true)
257
- @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/sbin/start #{@new_resource.service_name}"})
255
+ @provider.should_not_receive(:shell_out_with_systems_locale!)
258
256
  @provider.start_service()
259
257
  end
260
258
 
@@ -263,58 +261,58 @@ describe Chef::Provider::Service::Upstart do
263
261
  @new_resource.parameters({ "OSD_ID" => "2" })
264
262
  @provider = Chef::Provider::Service::Upstart.new(@new_resource, @run_context)
265
263
  @provider.current_resource = @current_resource
266
- @provider.should_receive(:run_command_with_systems_locale).with({:command => "/sbin/start rsyslog OSD_ID=2"}).and_return(0)
264
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/start rsyslog OSD_ID=2").and_return(0)
267
265
  @provider.start_service()
268
266
  end
269
267
 
270
268
  it "should call the restart command if one is specified" do
271
269
  @current_resource.stub(:running).and_return(true)
272
270
  @new_resource.stub(:restart_command).and_return("/sbin/rsyslog restartyousillysally")
273
- @provider.should_receive(:shell_out!).with("/sbin/rsyslog restartyousillysally")
271
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/rsyslog restartyousillysally")
274
272
  @provider.restart_service()
275
273
  end
276
274
 
277
275
  it "should call '/sbin/restart service_name' if no restart command is specified" do
278
276
  @current_resource.stub(:running).and_return(true)
279
- @provider.should_receive(:run_command_with_systems_locale).with({:command => "/sbin/restart #{@new_resource.service_name}"}).and_return(0)
277
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/restart #{@new_resource.service_name}").and_return(0)
280
278
  @provider.restart_service()
281
279
  end
282
280
 
283
281
  it "should call '/sbin/start service_name' if restart_service is called for a stopped service" do
284
282
  @current_resource.stub(:running).and_return(false)
285
- @provider.should_receive(:run_command_with_systems_locale).with({:command => "/sbin/start #{@new_resource.service_name}"}).and_return(0)
283
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/start #{@new_resource.service_name}").and_return(0)
286
284
  @provider.restart_service()
287
285
  end
288
286
 
289
287
  it "should call the reload command if one is specified" do
290
288
  @current_resource.stub(:running).and_return(true)
291
289
  @new_resource.stub(:reload_command).and_return("/sbin/rsyslog reloadyousillysally")
292
- @provider.should_receive(:shell_out!).with("/sbin/rsyslog reloadyousillysally")
290
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/rsyslog reloadyousillysally")
293
291
  @provider.reload_service()
294
292
  end
295
293
 
296
294
  it "should call '/sbin/reload service_name' if no reload command is specified" do
297
295
  @current_resource.stub(:running).and_return(true)
298
- @provider.should_receive(:run_command_with_systems_locale).with({:command => "/sbin/reload #{@new_resource.service_name}"}).and_return(0)
296
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/reload #{@new_resource.service_name}").and_return(0)
299
297
  @provider.reload_service()
300
298
  end
301
299
 
302
300
  it "should call the stop command if one is specified" do
303
301
  @current_resource.stub(:running).and_return(true)
304
302
  @new_resource.stub(:stop_command).and_return("/sbin/rsyslog stopyousillysally")
305
- @provider.should_receive(:shell_out!).with("/sbin/rsyslog stopyousillysally")
303
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/rsyslog stopyousillysally")
306
304
  @provider.stop_service()
307
305
  end
308
306
 
309
307
  it "should call '/sbin/stop service_name' if no stop command is specified" do
310
308
  @current_resource.stub(:running).and_return(true)
311
- @provider.should_receive(:run_command_with_systems_locale).with({:command => "/sbin/stop #{@new_resource.service_name}"}).and_return(0)
309
+ @provider.should_receive(:shell_out_with_systems_locale!).with("/sbin/stop #{@new_resource.service_name}").and_return(0)
312
310
  @provider.stop_service()
313
311
  end
314
312
 
315
313
  it "should not call '/sbin/stop service_name' if it is already stopped" do
316
314
  @current_resource.stub(:running).and_return(false)
317
- @provider.should_not_receive(:run_command_with_systems_locale).with({:command => "/sbin/stop #{@new_resource.service_name}"})
315
+ @provider.should_not_receive(:shell_out_with_systems_locale!).with("/sbin/stop #{@new_resource.service_name}")
318
316
  @provider.stop_service()
319
317
  end
320
318
  end
@@ -16,7 +16,6 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
-
20
19
  require 'spec_helper'
21
20
 
22
21
  describe Chef::Provider::Subversion do
@@ -199,7 +198,7 @@ describe Chef::Provider::Subversion do
199
198
  it "runs an export with the --force option" do
200
199
  ::File.stub(:directory?).with("/my/deploy").and_return(true)
201
200
  expected_cmd = "svn export --force -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir"
202
- @provider.should_receive(:run_command).with(:command => expected_cmd)
201
+ @provider.should_receive(:shell_out!).with(command: expected_cmd)
203
202
  @provider.run_action(:force_export)
204
203
  @resource.should be_updated
205
204
  end
@@ -207,7 +206,7 @@ describe Chef::Provider::Subversion do
207
206
  it "runs the checkout command for action_checkout" do
208
207
  ::File.stub(:directory?).with("/my/deploy").and_return(true)
209
208
  expected_cmd = "svn checkout -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir"
210
- @provider.should_receive(:run_command).with(:command => expected_cmd)
209
+ @provider.should_receive(:shell_out!).with(command: expected_cmd)
211
210
  @provider.run_action(:checkout)
212
211
  @resource.should be_updated
213
212
  end
@@ -231,7 +230,7 @@ describe Chef::Provider::Subversion do
231
230
  @resource.user "whois"
232
231
  @resource.group "thisis"
233
232
  expected_cmd = "svn checkout -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir"
234
- @provider.should_receive(:run_command).with(:command => expected_cmd, :user => "whois", :group => "thisis")
233
+ @provider.should_receive(:shell_out!).with(command: expected_cmd, user: "whois", group: "thisis")
235
234
  @provider.run_action(:checkout)
236
235
  @resource.should be_updated
237
236
  end
@@ -256,7 +255,7 @@ describe Chef::Provider::Subversion do
256
255
  @provider.stub(:find_current_revision).and_return("11410")
257
256
  @provider.stub(:current_revision_matches_target_revision?).and_return(false)
258
257
  expected_cmd = "svn update -q -r12345 /my/deploy/dir"
259
- @provider.should_receive(:run_command).with(:command => expected_cmd)
258
+ @provider.should_receive(:shell_out!).with(command: expected_cmd)
260
259
  @provider.run_action(:sync)
261
260
  @resource.should be_updated
262
261
  end
@@ -273,7 +272,7 @@ describe Chef::Provider::Subversion do
273
272
  it "runs the export_command on action_export" do
274
273
  ::File.stub(:directory?).with("/my/deploy").and_return(true)
275
274
  expected_cmd = "svn export --force -q -r12345 http://svn.example.org/trunk/ /my/deploy/dir"
276
- @provider.should_receive(:run_command).with(:command => expected_cmd)
275
+ @provider.should_receive(:shell_out!).with(command: expected_cmd)
277
276
  @provider.run_action(:export)
278
277
  @resource.should be_updated
279
278
  end
@@ -376,6 +376,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30"
376
376
  let(:user_plist_file) { nil }
377
377
 
378
378
  before do
379
+ provider.should_receive(:shell_out).with("dscacheutil '-flushcache'")
379
380
  provider.should_receive(:shell_out).with("plutil -convert xml1 -o - /var/db/dslocal/nodes/Default/users/toor.plist") do
380
381
  if user_plist_file.nil?
381
382
  ShellCmdResult.new('Can not find the file', 'Sorry!!', 1)
@@ -715,7 +716,6 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
715
716
  provider.should_receive(:read_user_info)
716
717
  provider.should_receive(:dscl_set)
717
718
  provider.should_receive(:sleep).with(3)
718
- provider.should_receive(:shell_out).with("dscacheutil '-flushcache'")
719
719
  provider.should_receive(:save_user_info)
720
720
  provider.set_password
721
721
  end
@@ -822,6 +822,7 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
822
822
 
823
823
  describe "when the user exists" do
824
824
  before do
825
+ provider.should_receive(:shell_out).with("dscacheutil '-flushcache'")
825
826
  provider.should_receive(:shell_out).with("plutil -convert xml1 -o - /var/db/dslocal/nodes/Default/users/toor.plist") do
826
827
  ShellCmdResult.new(File.read(File.join(CHEF_SPEC_DATA, "mac_users/10.9.plist.xml")), "", 0)
827
828
  end
@@ -42,6 +42,12 @@ describe Chef::Provider::User::Windows do
42
42
  @provider.current_resource = @current_resource
43
43
  end
44
44
 
45
+ it "creates a net_user object with the provided username" do
46
+ @new_resource.username "not-monkey"
47
+ expect(Chef::Util::Windows::NetUser).to receive(:new).with("not-monkey")
48
+ @provider = Chef::Provider::User::Windows.new(@new_resource, @run_context)
49
+ end
50
+
45
51
  describe "when comparing the user's current attributes to the desired attributes" do
46
52
  before do
47
53
  @new_resource.comment "Adam Jacob"
@@ -53,6 +59,7 @@ describe Chef::Provider::User::Windows do
53
59
 
54
60
  @provider.current_resource = @new_resource.clone
55
61
  end
62
+
56
63
  describe "and the attributes match" do
57
64
  it "doesn't set the comment field to be updated" do
58
65
  @provider.set_options.should_not have_key(:full_name)
@@ -30,14 +30,14 @@ describe Chef::Provider::WhyrunSafeRubyBlock, "initialize" do
30
30
  end
31
31
 
32
32
  it "should call the block and flag the resource as updated" do
33
- @provider.run_action(:create)
33
+ @provider.run_action(:run)
34
34
  $evil_global_evil_laugh.should == :mwahahaha
35
35
  @new_resource.should be_updated
36
36
  end
37
37
 
38
38
  it "should call the block and flat the resource as updated - even in whyrun" do
39
39
  Chef::Config[:why_run] = true
40
- @provider.run_action(:create)
40
+ @provider.run_action(:run)
41
41
  $evil_global_evil_laugh.should == :mwahahaha
42
42
  @new_resource.should be_updated
43
43
  Chef::Config[:why_run] = false
@@ -53,6 +53,15 @@ describe Chef::Resource::Mount do
53
53
  @resource.device.should eql("/dev/sdb3")
54
54
  end
55
55
 
56
+ it "should set fsck_device to '-' by default" do
57
+ @resource.fsck_device.should eql('-')
58
+ end
59
+
60
+ it "should allow you to set the fsck_device attribute" do
61
+ @resource.fsck_device "/dev/rdsk/sdb3"
62
+ @resource.fsck_device.should eql("/dev/rdsk/sdb3")
63
+ end
64
+
56
65
  it "should allow you to set the fstype attribute" do
57
66
  @resource.fstype "nfs"
58
67
  @resource.fstype.should eql("nfs")
@@ -421,10 +421,6 @@ describe Chef::Resource do
421
421
 
422
422
  end
423
423
 
424
- it "supports accessing the node via the @node instance variable [DEPRECATED]" do
425
- @resource.instance_variable_get(:@node).inspect.should == @node.inspect
426
- end
427
-
428
424
  it "runs an action by finding its provider, loading the current resource and then running the action" do
429
425
  pending
430
426
  end
@@ -540,7 +540,7 @@ describe Chef::REST do
540
540
  let(:request_mock) { {} }
541
541
 
542
542
  let(:http_response) do
543
- http_response = Net::HTTPSuccess.new("1.1",200, "it-works")
543
+ http_response = Net::HTTPSuccess.new("1.1",'200', "it-works")
544
544
 
545
545
  http_response.stub(:read_body)
546
546
  http_response.should_not_receive(:body)
@@ -134,4 +134,19 @@ describe Chef::RunContext do
134
134
  end
135
135
  end
136
136
 
137
+ describe "handling reboot requests" do
138
+ let(:expected) do
139
+ { :reason => "spec tests require a reboot" }
140
+ end
141
+
142
+ it "stores and deletes the reboot request" do
143
+ @run_context.request_reboot(expected)
144
+ expect(@run_context.reboot_info).to eq(expected)
145
+ expect(@run_context.reboot_requested?).to be_true
146
+
147
+ @run_context.cancel_reboot
148
+ expect(@run_context.reboot_info).to eq({})
149
+ expect(@run_context.reboot_requested?).to be_false
150
+ end
151
+ end
137
152
  end
@@ -20,80 +20,236 @@ require 'spec_helper'
20
20
  require 'chef/search/query'
21
21
 
22
22
  describe Chef::Search::Query do
23
- before(:each) do
24
- @rest = double("Chef::REST")
25
- Chef::REST.stub(:new).and_return(@rest)
26
- @query = Chef::Search::Query.new
27
- end
23
+ let(:rest) { double("Chef::REST") }
24
+ let(:query) { Chef::Search::Query.new }
28
25
 
29
- describe "search" do
30
- before(:each) do
31
- @response = {
26
+ shared_context "filtered search" do
27
+ let(:query_string) { "search/node?q=platform:rhel&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000" }
28
+ let(:server_url) { "https://api.opscode.com/organizations/opscode/nodes" }
29
+ let(:args) { { filter_key => filter_hash } }
30
+ let(:filter_hash) {
31
+ {
32
+ 'env' => [ 'chef_environment' ],
33
+ 'ruby_plat' => [ 'languages', 'ruby', 'platform' ]
34
+ }
35
+ }
36
+ let(:response) {
37
+ {
32
38
  "rows" => [
33
- { "id" => "for you" },
34
- { "id" => "hip hop" },
35
- { "id" => "thought was down by law for you" },
36
- { "id" => "kept it hard core for you" },
39
+ { "url" => "#{server_url}/my-name-is-node",
40
+ "data" => {
41
+ "env" => "elysium",
42
+ "ruby_plat" => "nudibranch"
43
+ }
44
+ },
45
+ { "url" => "#{server_url}/my-name-is-jonas",
46
+ "data" => {
47
+ "env" => "hades",
48
+ "ruby_plat" => "i386-mingw32"
49
+ }
50
+ },
51
+ { "url" => "#{server_url}/my-name-is-flipper",
52
+ "data" => {
53
+ "env" => "elysium",
54
+ "ruby_plat" => "centos"
55
+ }
56
+ },
57
+ { "url" => "#{server_url}/my-name-is-butters",
58
+ "data" => {
59
+ "env" => "moon",
60
+ "ruby_plat" => "solaris2",
61
+ }
62
+ }
37
63
  ],
38
64
  "start" => 0,
39
65
  "total" => 4
40
66
  }
41
- @rest.stub(:get_rest).and_return(@response)
42
- end
67
+ }
68
+ end
69
+
70
+ before(:each) do
71
+ Chef::REST.stub(:new).and_return(rest)
72
+ rest.stub(:get_rest).and_return(response)
73
+ end
74
+
75
+ describe "search" do
76
+ let(:response) { {
77
+ "rows" => [
78
+ { "name" => "my-name-is-node",
79
+ "chef_environment" => "elysium",
80
+ "platform" => "rhel",
81
+ "automatic" => {
82
+ "languages" => {
83
+ "ruby" => {
84
+ "platform" => "nudibranch",
85
+ "version" => "1.9.3",
86
+ "target" => "ming-the-merciless"
87
+ }
88
+ }
89
+ }
90
+ },
91
+ { "name" => "my-name-is-jonas",
92
+ "chef_environment" => "hades",
93
+ "platform" => "rhel",
94
+ "automatic" => {
95
+ "languages" => {
96
+ "ruby" => {
97
+ "platform" => "i386-mingw32",
98
+ "version" => "1.9.3",
99
+ "target" => "bilbo"
100
+ }
101
+ }
102
+ }
103
+ },
104
+ { "name" => "my-name-is-flipper",
105
+ "chef_environment" => "elysium",
106
+ "platform" => "rhel",
107
+ "automatic" => {
108
+ "languages" => {
109
+ "ruby" => {
110
+ "platform" => "centos",
111
+ "version" => "2.0.0",
112
+ "target" => "uno"
113
+ }
114
+ }
115
+ }
116
+ },
117
+ { "name" => "my-name-is-butters",
118
+ "chef_environment" => "moon",
119
+ "platform" => "rhel",
120
+ "automatic" => {
121
+ "languages" => {
122
+ "ruby" => {
123
+ "platform" => "solaris2",
124
+ "version" => "2.1.2",
125
+ "target" => "random"
126
+ }
127
+ }
128
+ }
129
+ },
130
+ ],
131
+ "start" => 0,
132
+ "total" => 4
133
+ } }
43
134
 
44
135
  it "should accept a type as the first argument" do
45
- lambda { @query.search("foo") }.should_not raise_error
46
- lambda { @query.search(:foo) }.should_not raise_error
47
- lambda { @query.search(Hash.new) }.should raise_error(ArgumentError)
136
+ lambda { query.search("node") }.should_not raise_error
137
+ lambda { query.search(:node) }.should_not raise_error
138
+ lambda { query.search(Hash.new) }.should raise_error(Chef::Exceptions::InvalidSearchQuery, /(Hash)/)
48
139
  end
49
140
 
50
141
  it "should query for every object of a type by default" do
51
- @rest.should_receive(:get_rest).with("search/foo?q=*:*&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000").and_return(@response)
52
- @query = Chef::Search::Query.new
53
- @query.search(:foo)
142
+ rest.should_receive(:get_rest).with("search/node?q=*:*&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000").and_return(response)
143
+ query.search(:node)
54
144
  end
55
145
 
56
146
  it "should allow a custom query" do
57
- @rest.should_receive(:get_rest).with("search/foo?q=gorilla:dundee&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000").and_return(@response)
58
- @query = Chef::Search::Query.new
59
- @query.search(:foo, "gorilla:dundee")
147
+ rest.should_receive(:get_rest).with("search/node?q=platform:rhel&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=1000").and_return(response)
148
+ query.search(:node, "platform:rhel")
60
149
  end
61
150
 
62
151
  it "should let you set a sort order" do
63
- @rest.should_receive(:get_rest).with("search/foo?q=gorilla:dundee&sort=id%20desc&start=0&rows=1000").and_return(@response)
64
- @query = Chef::Search::Query.new
65
- @query.search(:foo, "gorilla:dundee", "id desc")
152
+ rest.should_receive(:get_rest).with("search/node?q=platform:rhel&sort=id%20desc&start=0&rows=1000").and_return(response)
153
+ query.search(:node, "platform:rhel", "id desc")
66
154
  end
67
155
 
68
156
  it "should let you set a starting object" do
69
- @rest.should_receive(:get_rest).with("search/foo?q=gorilla:dundee&sort=id%20desc&start=2&rows=1000").and_return(@response)
70
- @query = Chef::Search::Query.new
71
- @query.search(:foo, "gorilla:dundee", "id desc", 2)
157
+ rest.should_receive(:get_rest).with("search/node?q=platform:rhel&sort=id%20desc&start=2&rows=1000").and_return(response)
158
+ query.search(:node, "platform:rhel", "id desc", 2)
72
159
  end
73
160
 
74
161
  it "should let you set how many rows to return" do
75
- @rest.should_receive(:get_rest).with("search/foo?q=gorilla:dundee&sort=id%20desc&start=2&rows=40").and_return(@response)
76
- @query = Chef::Search::Query.new
77
- @query.search(:foo, "gorilla:dundee", "id desc", 2, 40)
162
+ rest.should_receive(:get_rest).with("search/node?q=platform:rhel&sort=id%20desc&start=2&rows=40").and_return(response)
163
+ query.search(:node, "platform:rhel", "id desc", 2, 40)
164
+ end
165
+
166
+ it "should throw an exception if you pass to many options" do
167
+ lambda { query.search(:node, "platform:rhel", "id desc", 2, 40, "wrong") }
168
+ .should raise_error(Chef::Exceptions::InvalidSearchQuery, "Too many arguments! (4 for <= 3)")
78
169
  end
79
170
 
80
171
  it "should return the raw rows, start, and total if no block is passed" do
81
- rows, start, total = @query.search(:foo)
82
- rows.should equal(@response["rows"])
83
- start.should equal(@response["start"])
84
- total.should equal(@response["total"])
172
+ rows, start, total = query.search(:node)
173
+ rows.should equal(response["rows"])
174
+ start.should equal(response["start"])
175
+ total.should equal(response["total"])
85
176
  end
86
177
 
87
178
  it "should call a block for each object in the response" do
88
179
  @call_me = double("blocky")
89
- @response["rows"].each { |r| @call_me.should_receive(:do).with(r) }
90
- @query.search(:foo) { |r| @call_me.do(r) }
180
+ response["rows"].each { |r| @call_me.should_receive(:do).with(r) }
181
+ query.search(:node) { |r| @call_me.do(r) }
91
182
  end
92
183
 
93
184
  it "should page through the responses" do
94
185
  @call_me = double("blocky")
95
- @response["rows"].each { |r| @call_me.should_receive(:do).with(r) }
96
- @query.search(:foo, "*:*", nil, 0, 1) { |r| @call_me.do(r) }
186
+ response["rows"].each { |r| @call_me.should_receive(:do).with(r) }
187
+ query.search(:node, "*:*", nil, 0, 1) { |r| @call_me.do(r) }
188
+ end
189
+
190
+ context "when :filter_result is provided as a result" do
191
+ include_context "filtered search" do
192
+ let(:filter_key) { :filter_result }
193
+
194
+ before(:each) do
195
+ rest.should_receive(:post_rest).with(query_string, args[filter_key]).and_return(response)
196
+ end
197
+
198
+ it "should return start" do
199
+ start = query.search(:node, "platform:rhel", args)[1]
200
+ start.should == response['start']
201
+ end
202
+
203
+ it "should return total" do
204
+ total = query.search(:node, "platform:rhel", args)[2]
205
+ total.should == response['total']
206
+ end
207
+
208
+ it "should return rows with the filter applied" do
209
+ results = query.search(:node, "platform:rhel", args)[0]
210
+
211
+ results.each_with_index do |result, idx|
212
+ expected = response["rows"][idx]
213
+
214
+ result.should have_key("url")
215
+ result["url"].should == expected["url"]
216
+
217
+ result.should have_key("data")
218
+ filter_hash.keys.each do |filter_key|
219
+ result["data"].should have_key(filter_key)
220
+ result["data"][filter_key].should == expected["data"][filter_key]
221
+ end
222
+ end
223
+ end
224
+
225
+ end
226
+ end
227
+ end
228
+
229
+ describe "#partial_search" do
230
+ include_context "filtered search" do
231
+ let(:filter_key) { :keys }
232
+
233
+ it "should emit a deprecation warning" do
234
+ # partial_search calls search, so we'll stub search to return empty
235
+ query.stub(:search).and_return( [ [], 0, 0 ] )
236
+ Chef::Log.should_receive(:warn).with("DEPRECATED: The 'partial_search' api is deprecated, please use the search api with 'filter_result'")
237
+ query.partial_search(:node, "platform:rhel", args)
238
+ end
239
+
240
+ it "should return an array of filtered hashes" do
241
+ rest.should_receive(:post_rest).with(query_string, args[filter_key]).and_return(response)
242
+ results = query.partial_search(:node, "platform:rhel", args)
243
+
244
+ results.each_with_index do |result, idx|
245
+ expected = response["rows"][idx]
246
+
247
+ filter_hash.keys.each do |filter_key|
248
+ result.should have_key(filter_key)
249
+ result[filter_key].should == expected["data"][filter_key]
250
+ end
251
+ end
252
+ end
97
253
  end
98
254
  end
99
255
  end