microwave 1.0.4 → 11.400.2

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 (249) hide show
  1. data/CONTRIBUTING.md +155 -0
  2. data/README.md +89 -0
  3. data/Rakefile +2 -2
  4. data/bin/chef-apply +25 -0
  5. data/bin/chef-shell +34 -0
  6. data/bin/chef-solo +0 -2
  7. data/bin/shef +6 -5
  8. data/lib/chef.rb +2 -4
  9. data/spec/data/big_json.json +2 -1
  10. data/spec/data/big_json_plus_one.json +2 -1
  11. data/spec/data/cookbooks/chefignore +2 -0
  12. data/spec/data/cookbooks/openldap/attributes/default.rb +10 -9
  13. data/spec/data/cookbooks/openldap/attributes/smokey.rb +1 -1
  14. data/spec/data/git_bundles/sinatra-test-app-with-callback-files.gitbundle +0 -0
  15. data/spec/data/git_bundles/sinatra-test-app-with-symlinks.gitbundle +0 -0
  16. data/spec/data/git_bundles/sinatra-test-app.gitbundle +0 -0
  17. data/spec/data/lwrp/providers/inline_compiler.rb +26 -0
  18. data/spec/data/nodes/default.rb +3 -3
  19. data/spec/data/nodes/test.example.com.rb +3 -3
  20. data/spec/data/nodes/test.rb +3 -3
  21. data/spec/data/partial_one.erb +1 -0
  22. data/spec/data/run_context/cookbooks/circular-dep1/attributes/default.rb +4 -0
  23. data/spec/data/run_context/cookbooks/circular-dep1/definitions/circular_dep1_res.rb +1 -0
  24. data/spec/data/run_context/cookbooks/circular-dep1/libraries/lib.rb +2 -0
  25. data/spec/data/run_context/cookbooks/circular-dep1/metadata.rb +2 -0
  26. data/spec/data/run_context/cookbooks/circular-dep1/providers/provider.rb +1 -0
  27. data/spec/data/run_context/cookbooks/circular-dep1/recipes/default.rb +0 -0
  28. data/spec/data/run_context/cookbooks/circular-dep1/resources/resource.rb +1 -0
  29. data/spec/data/run_context/cookbooks/circular-dep2/attributes/default.rb +3 -0
  30. data/spec/data/run_context/cookbooks/circular-dep2/definitions/circular_dep2_res.rb +1 -0
  31. data/spec/data/run_context/cookbooks/circular-dep2/libraries/lib.rb +2 -0
  32. data/spec/data/run_context/cookbooks/circular-dep2/metadata.rb +2 -0
  33. data/spec/data/run_context/cookbooks/circular-dep2/providers/provider.rb +1 -0
  34. data/spec/data/run_context/cookbooks/circular-dep2/recipes/default.rb +0 -0
  35. data/spec/data/run_context/cookbooks/circular-dep2/resources/resource.rb +1 -0
  36. data/spec/data/run_context/cookbooks/dependency1/attributes/aa_first.rb +2 -0
  37. data/spec/data/run_context/cookbooks/dependency1/attributes/default.rb +2 -0
  38. data/spec/data/run_context/cookbooks/dependency1/attributes/zz_last.rb +3 -0
  39. data/spec/data/run_context/cookbooks/dependency1/definitions/dependency1_res.rb +1 -0
  40. data/spec/data/run_context/cookbooks/dependency1/libraries/lib.rb +2 -0
  41. data/spec/data/run_context/cookbooks/dependency1/providers/provider.rb +1 -0
  42. data/spec/data/run_context/cookbooks/dependency1/recipes/default.rb +0 -0
  43. data/spec/data/run_context/cookbooks/dependency1/resources/resource.rb +1 -0
  44. data/spec/data/run_context/cookbooks/dependency2/attributes/default.rb +3 -0
  45. data/spec/data/run_context/cookbooks/dependency2/definitions/dependency2_res.rb +1 -0
  46. data/spec/data/run_context/cookbooks/dependency2/libraries/lib.rb +2 -0
  47. data/spec/data/run_context/cookbooks/dependency2/providers/provider.rb +1 -0
  48. data/spec/data/run_context/cookbooks/dependency2/recipes/default.rb +0 -0
  49. data/spec/data/run_context/cookbooks/dependency2/resources/resource.rb +1 -0
  50. data/spec/data/run_context/cookbooks/no-default-attr/attributes/server.rb +3 -0
  51. data/spec/data/run_context/cookbooks/no-default-attr/definitions/no_default-attr_res.rb +1 -0
  52. data/spec/data/run_context/cookbooks/no-default-attr/providers/provider.rb +1 -0
  53. data/spec/data/run_context/cookbooks/no-default-attr/recipes/default.rb +0 -0
  54. data/spec/data/run_context/cookbooks/no-default-attr/resources/resource.rb +1 -0
  55. data/spec/data/run_context/cookbooks/test-with-circular-deps/attributes/default.rb +3 -0
  56. data/spec/data/run_context/cookbooks/test-with-circular-deps/definitions/test_with-circular-deps_res.rb +1 -0
  57. data/spec/data/run_context/cookbooks/test-with-circular-deps/libraries/lib.rb +2 -0
  58. data/spec/data/run_context/cookbooks/test-with-circular-deps/metadata.rb +2 -0
  59. data/spec/data/run_context/cookbooks/test-with-circular-deps/providers/provider.rb +1 -0
  60. data/spec/data/run_context/cookbooks/test-with-circular-deps/recipes/default.rb +0 -0
  61. data/spec/data/run_context/cookbooks/test-with-circular-deps/resources/resource.rb +1 -0
  62. data/spec/data/run_context/cookbooks/test-with-deps/attributes/default.rb +3 -0
  63. data/spec/data/run_context/cookbooks/test-with-deps/definitions/test_with-deps_res.rb +1 -0
  64. data/spec/data/run_context/cookbooks/test-with-deps/libraries/lib.rb +1 -0
  65. data/spec/data/run_context/cookbooks/test-with-deps/metadata.rb +3 -0
  66. data/spec/data/run_context/cookbooks/test-with-deps/providers/provider.rb +1 -0
  67. data/spec/data/run_context/cookbooks/test-with-deps/recipes/default.rb +0 -0
  68. data/spec/data/run_context/cookbooks/test-with-deps/recipes/server.rb +0 -0
  69. data/spec/data/run_context/cookbooks/test-with-deps/resources/resource.rb +1 -0
  70. data/spec/data/run_context/cookbooks/test/attributes/default.rb +0 -0
  71. data/spec/data/run_context/cookbooks/test/attributes/george.rb +1 -1
  72. data/spec/data/run_context/cookbooks/test/definitions/test_res.rb +1 -0
  73. data/spec/data/run_context/cookbooks/test/providers/provider.rb +1 -0
  74. data/spec/data/run_context/cookbooks/test/resources/resource.rb +1 -0
  75. data/spec/data/shef-config.rb +10 -0
  76. data/spec/functional/dsl/registry_helper_spec.rb +63 -0
  77. data/spec/functional/knife/cookbook_delete_spec.rb +0 -2
  78. data/spec/functional/knife/exec_spec.rb +4 -6
  79. data/spec/functional/knife/smoke_test.rb +34 -0
  80. data/spec/functional/knife/ssh_spec.rb +64 -3
  81. data/spec/functional/resource/cookbook_file_spec.rb +33 -2
  82. data/spec/functional/resource/deploy_revision_spec.rb +515 -0
  83. data/spec/functional/resource/directory_spec.rb +4 -0
  84. data/spec/functional/resource/file_spec.rb +56 -22
  85. data/spec/functional/resource/link_spec.rb +12 -10
  86. data/spec/functional/resource/registry_spec.rb +572 -0
  87. data/spec/functional/resource/remote_directory_spec.rb +142 -36
  88. data/spec/functional/resource/remote_file_spec.rb +28 -3
  89. data/spec/functional/resource/template_spec.rb +23 -2
  90. data/spec/functional/run_lock_spec.rb +238 -0
  91. data/spec/functional/shell_spec.rb +101 -0
  92. data/spec/functional/tiny_server_spec.rb +5 -4
  93. data/spec/functional/win32/registry_helper_spec.rb +632 -0
  94. data/spec/functional/win32/security_spec.rb +37 -0
  95. data/spec/spec_helper.rb +15 -3
  96. data/spec/stress/win32/security_spec.rb +5 -5
  97. data/spec/support/chef_helpers.rb +14 -3
  98. data/spec/support/lib/chef/resource/cat.rb +3 -5
  99. data/spec/support/lib/chef/resource/one_two_three_four.rb +8 -10
  100. data/spec/support/lib/chef/resource/zen_master.rb +8 -10
  101. data/spec/support/matchers/leak.rb +1 -1
  102. data/spec/support/platform_helpers.rb +18 -0
  103. data/spec/support/shared/functional/directory_resource.rb +85 -23
  104. data/spec/support/shared/functional/file_resource.rb +198 -53
  105. data/spec/support/shared/functional/securable_resource.rb +140 -105
  106. data/spec/support/shared/functional/securable_resource_with_reporting.rb +375 -0
  107. data/spec/support/shared/unit/file_system_support.rb +110 -0
  108. data/spec/support/shared/unit/platform_introspector.rb +162 -0
  109. data/spec/tiny_server.rb +29 -10
  110. data/spec/unit/api_client/registration_spec.rb +172 -0
  111. data/spec/unit/api_client_spec.rb +156 -103
  112. data/spec/unit/application/apply.rb +84 -0
  113. data/spec/unit/application/knife_spec.rb +5 -0
  114. data/spec/unit/application_spec.rb +57 -2
  115. data/spec/unit/chef_fs/diff_spec.rb +329 -0
  116. data/spec/unit/chef_fs/file_pattern_spec.rb +526 -0
  117. data/spec/unit/chef_fs/file_system/chef_server_root_dir_spec.rb +237 -0
  118. data/spec/unit/chef_fs/file_system/cookbooks_dir_spec.rb +568 -0
  119. data/spec/unit/chef_fs/file_system/data_bags_dir_spec.rb +220 -0
  120. data/spec/unit/chef_fs/file_system_spec.rb +136 -0
  121. data/spec/unit/client_spec.rb +188 -16
  122. data/spec/unit/config_spec.rb +54 -4
  123. data/spec/unit/cookbook/chefignore_spec.rb +2 -1
  124. data/spec/unit/cookbook/syntax_check_spec.rb +48 -109
  125. data/spec/unit/cookbook_loader_spec.rb +153 -91
  126. data/spec/unit/cookbook_manifest_spec.rb +81 -81
  127. data/spec/unit/cookbook_spec.rb +3 -20
  128. data/spec/unit/cookbook_version_spec.rb +23 -122
  129. data/spec/unit/digester_spec.rb +50 -0
  130. data/spec/unit/dsl/data_query_spec.rb +66 -0
  131. data/spec/unit/dsl/platform_introspection_spec.rb +130 -0
  132. data/spec/unit/dsl/regsitry_helper_spec.rb +55 -0
  133. data/spec/unit/encrypted_data_bag_item_spec.rb +126 -10
  134. data/spec/unit/environment_spec.rb +0 -130
  135. data/spec/unit/exceptions_spec.rb +2 -3
  136. data/spec/unit/formatters/error_inspectors/resource_failure_inspector_spec.rb +23 -3
  137. data/spec/unit/json_compat_spec.rb +69 -0
  138. data/spec/unit/knife/bootstrap_spec.rb +81 -28
  139. data/spec/unit/knife/client_reregister_spec.rb +23 -22
  140. data/spec/unit/knife/configure_spec.rb +29 -26
  141. data/spec/unit/knife/cookbook_metadata_spec.rb +11 -4
  142. data/spec/unit/knife/cookbook_site_install_spec.rb +12 -2
  143. data/spec/unit/knife/cookbook_test_spec.rb +1 -0
  144. data/spec/unit/knife/cookbook_upload_spec.rb +41 -2
  145. data/spec/unit/knife/core/bootstrap_context_spec.rb +8 -1
  146. data/spec/unit/knife/core/ui_spec.rb +156 -7
  147. data/spec/unit/knife/data_bag_create_spec.rb +14 -0
  148. data/spec/unit/knife/data_bag_edit_spec.rb +14 -4
  149. data/spec/unit/knife/data_bag_from_file_spec.rb +17 -5
  150. data/spec/unit/knife/data_bag_show_spec.rb +11 -4
  151. data/spec/unit/knife/index_rebuild_spec.rb +96 -33
  152. data/spec/unit/knife/knife_help.rb +7 -7
  153. data/spec/unit/knife/node_run_list_remove_spec.rb +2 -1
  154. data/spec/unit/knife/ssh_spec.rb +121 -15
  155. data/spec/unit/knife/status_spec.rb +2 -2
  156. data/spec/unit/knife/user_create_spec.rb +86 -0
  157. data/spec/unit/knife/user_delete_spec.rb +39 -0
  158. data/spec/unit/knife/user_edit_spec.rb +42 -0
  159. data/spec/unit/knife/user_list_spec.rb +32 -0
  160. data/spec/unit/knife/user_reregister_spec.rb +53 -0
  161. data/spec/unit/knife/user_show_spec.rb +41 -0
  162. data/spec/unit/knife_spec.rb +53 -0
  163. data/spec/unit/lwrp_spec.rb +59 -17
  164. data/spec/unit/mixin/checksum_spec.rb +2 -2
  165. data/spec/unit/mixin/deep_merge_spec.rb +56 -491
  166. data/spec/unit/mixin/deprecation_spec.rb +23 -0
  167. data/spec/unit/mixin/enforce_ownership_and_permissions_spec.rb +6 -1
  168. data/spec/unit/mixin/params_validate_spec.rb +4 -2
  169. data/spec/unit/mixin/securable_spec.rb +5 -3
  170. data/spec/unit/mixin/template_spec.rb +119 -0
  171. data/spec/unit/node/attribute_spec.rb +272 -137
  172. data/spec/unit/node/immutable_collections_spec.rb +139 -0
  173. data/spec/unit/node_spec.rb +411 -339
  174. data/spec/unit/platform_spec.rb +8 -8
  175. data/spec/unit/provider/breakpoint_spec.rb +8 -8
  176. data/spec/unit/provider/cookbook_file_spec.rb +4 -8
  177. data/spec/unit/provider/deploy/revision_spec.rb +2 -8
  178. data/spec/unit/provider/deploy_spec.rb +6 -40
  179. data/spec/unit/provider/directory_spec.rb +103 -68
  180. data/spec/unit/provider/erl_call_spec.rb +0 -2
  181. data/spec/unit/provider/file_spec.rb +69 -59
  182. data/spec/unit/provider/git_spec.rb +0 -10
  183. data/spec/unit/provider/group/groupadd_spec.rb +1 -1
  184. data/spec/unit/provider/group/usermod_spec.rb +2 -2
  185. data/spec/unit/provider/http_request_spec.rb +28 -69
  186. data/spec/unit/provider/ifconfig_spec.rb +2 -2
  187. data/spec/unit/provider/link_spec.rb +1 -1
  188. data/spec/unit/provider/ohai_spec.rb +4 -4
  189. data/spec/unit/provider/package/apt_spec.rb +0 -1
  190. data/spec/unit/provider/package/ips_spec.rb +0 -1
  191. data/spec/unit/provider/package/rubygems_spec.rb +0 -18
  192. data/spec/unit/provider/package/yum_spec.rb +79 -15
  193. data/spec/unit/provider/package_spec.rb +7 -5
  194. data/spec/unit/provider/registry_key_spec.rb +269 -0
  195. data/spec/unit/provider/remote_directory_spec.rb +24 -7
  196. data/spec/unit/provider/remote_file_spec.rb +36 -0
  197. data/spec/unit/provider/route_spec.rb +3 -6
  198. data/spec/unit/provider/ruby_block_spec.rb +8 -0
  199. data/spec/unit/provider/service/arch_service_spec.rb +4 -4
  200. data/spec/unit/provider/service/debian_service_spec.rb +1 -1
  201. data/spec/unit/provider/service/freebsd_service_spec.rb +4 -4
  202. data/spec/unit/provider/service/init_service_spec.rb +26 -3
  203. data/spec/unit/provider/service/insserv_service_spec.rb +1 -1
  204. data/spec/unit/provider/service/invokercd_service_spec.rb +3 -3
  205. data/spec/unit/provider/service/redhat_spec.rb +1 -1
  206. data/spec/unit/provider/service/simple_service_spec.rb +3 -3
  207. data/spec/unit/provider/service/upstart_service_spec.rb +7 -7
  208. data/spec/unit/provider/service_spec.rb +2 -2
  209. data/spec/unit/provider/subversion_spec.rb +1 -1
  210. data/spec/unit/provider/template_spec.rb +35 -11
  211. data/spec/unit/provider/user/dscl_spec.rb +57 -31
  212. data/spec/unit/provider/user_spec.rb +7 -16
  213. data/spec/unit/provider_spec.rb +4 -3
  214. data/spec/unit/recipe_spec.rb +10 -8
  215. data/spec/unit/registry_helper_spec.rb +376 -0
  216. data/spec/unit/resource/log_spec.rb +9 -0
  217. data/spec/unit/resource/registry_key_spec.rb +171 -0
  218. data/spec/unit/resource/remote_file_spec.rb +21 -23
  219. data/spec/unit/resource/ruby_block_spec.rb +7 -3
  220. data/spec/unit/resource/service_spec.rb +11 -0
  221. data/spec/unit/resource_spec.rb +27 -4
  222. data/spec/unit/rest/auth_credentials_spec.rb +2 -14
  223. data/spec/unit/rest_spec.rb +122 -187
  224. data/spec/unit/run_context/cookbook_compiler_spec.rb +181 -0
  225. data/spec/unit/run_context_spec.rb +18 -4
  226. data/spec/unit/run_list_spec.rb +0 -209
  227. data/spec/unit/run_lock_spec.rb +37 -0
  228. data/spec/unit/runner_spec.rb +101 -2
  229. data/spec/unit/scan_access_control_spec.rb +4 -4
  230. data/spec/unit/{shef → shell}/model_wrapper_spec.rb +5 -5
  231. data/spec/unit/{shef/shef_ext_spec.rb → shell/shell_ext_spec.rb} +21 -21
  232. data/spec/unit/{shef/shef_session_spec.rb → shell/shell_session_spec.rb} +12 -12
  233. data/spec/unit/shell_out_spec.rb +18 -0
  234. data/spec/unit/{shef_spec.rb → shell_spec.rb} +20 -20
  235. data/spec/unit/user_spec.rb +255 -0
  236. metadata +162 -157
  237. data/README.rdoc +0 -177
  238. data/spec/unit/certificate_spec.rb +0 -76
  239. data/spec/unit/checksum_cache_spec.rb +0 -209
  240. data/spec/unit/checksum_spec.rb +0 -94
  241. data/spec/unit/couchdb_spec.rb +0 -274
  242. data/spec/unit/index_queue_spec.rb +0 -391
  243. data/spec/unit/json_compat_spect.rb +0 -53
  244. data/spec/unit/mixin/language_spec.rb +0 -305
  245. data/spec/unit/openid_registration_spec.rb +0 -153
  246. data/spec/unit/solr_query/query_transform_spec.rb +0 -454
  247. data/spec/unit/solr_query/solr_http_request_spec.rb +0 -244
  248. data/spec/unit/solr_query_spec.rb +0 -203
  249. data/spec/unit/webui_user_spec.rb +0 -238
@@ -60,7 +60,6 @@ describe Chef::Provider::ErlCall do
60
60
  Process.should_receive(:wait).with(@pid)
61
61
 
62
62
  @provider.action_run
63
- @provider.converge
64
63
 
65
64
  @stdin.string.should == "#{@new_resource.code}\n"
66
65
  end
@@ -78,7 +77,6 @@ describe Chef::Provider::ErlCall do
78
77
  Process.should_receive(:wait).with(@pid)
79
78
 
80
79
  @provider.action_run
81
- @provider.converge
82
80
 
83
81
  @stdin.string.should == "#{@new_resource.code}\n"
84
82
  end
@@ -53,80 +53,86 @@ describe Chef::Provider::File do
53
53
  @provider.current_resource.content.should eql(nil)
54
54
  end
55
55
 
56
- context "load_current_resource_attrs", :unix_only do
56
+ describe "examining file security metadata on Unix" do
57
+ before do
58
+ Chef::Platform.stub!(:windows?).and_return(false)
59
+ end
57
60
  it "should collect the current state of the file on the filesystem and populate current_resource" do
58
61
  # test setup
59
- stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
60
- ::File.should_receive(:stat).exactly(3).with(@resource.path).and_return(stat_struct)
61
-
62
+ stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
63
+ ::File.should_receive(:stat).exactly(1).times.with(@resource.path).and_return(stat_struct)
64
+
65
+ # test execution
66
+
67
+ Etc.should_receive(:getgrgid).with(0).and_return(mock("Group Ent", :name => "wheel"))
68
+ Etc.should_receive(:getpwuid).with(0).and_return(mock("User Ent", :name => "root"))
69
+
62
70
  # test execution
63
71
  @provider.load_current_resource
64
-
72
+
65
73
  # post-condition checks
66
- @provider.current_resource.mode.should == 0600
67
- @provider.current_resource.owner.should == 0
68
- @provider.current_resource.group.should == 0
74
+ @provider.current_resource.mode.should == "0600"
75
+ @provider.current_resource.owner.should == "root"
76
+ @provider.current_resource.group.should == "wheel"
69
77
  end
70
-
78
+
71
79
  it "should NOT update the new_resource state with the current_resourse state if new_resource state is already specified" do
72
80
  # test setup
73
- stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
74
- ::File.should_receive(:stat).exactly(3).with(@resource.path).and_return(stat_struct)
75
-
81
+ stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
82
+ ::File.should_receive(:stat).exactly(1).times.with(@resource.path).and_return(stat_struct)
83
+
76
84
  @provider.new_resource.group(1)
77
85
  @provider.new_resource.owner(1)
78
86
  @provider.new_resource.mode(0644)
79
-
80
- # test execution
87
+
88
+ # test execution
81
89
  @provider.load_current_resource
82
-
90
+
83
91
  # post-condition checks
84
92
  @provider.new_resource.group.should == 1
85
93
  @provider.new_resource.owner.should == 1
86
94
  @provider.new_resource.mode.should == 0644
87
95
  end
88
-
89
- it "should update the new_resource state with the current_resource state if the new_resource state is not specified." do
90
- # test setup
91
- stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
92
- ::File.should_receive(:stat).exactly(3).with(@resource.path).and_return(stat_struct)
93
-
94
- @provider.new_resource.group(nil)
95
- @provider.new_resource.owner(nil)
96
- @provider.new_resource.mode(nil)
97
-
98
- # test execution
99
- @provider.load_current_resource
100
-
101
- # post-condition checks
102
- @provider.new_resource.group.should eql(@provider.current_resource.group)
103
- @provider.new_resource.owner.should eql(@provider.current_resource.owner)
104
- @provider.new_resource.mode.should eql(@provider.current_resource.mode)
105
- end
106
-
107
- it "should update the new_resource when attempting to set the new state" do
108
- # test setup
109
- stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
110
- # called once in update_new_file_state and once in checksum
111
- ::File.should_receive(:stat).twice.with(@provider.new_resource.path).and_return(stat_struct)
112
- ::File.should_receive(:directory?).once.with(@provider.new_resource.path).and_return(false)
113
-
114
- @provider.new_resource.group(nil)
115
- @provider.new_resource.owner(nil)
116
- @provider.new_resource.mode(nil)
117
-
118
- # test exectution
119
- @provider.update_new_file_state
120
-
121
- # post-condition checks
122
- @provider.new_resource.group.should == 0
123
- @provider.new_resource.owner.should == 0
124
- @provider.new_resource.mode.should == 0600
96
+
97
+ context "when the new_resource does not specify the desired access control" do
98
+ it "records access control information in the new resource after modifying the file" do
99
+ # test setup
100
+ stat_struct = mock("::File.stat", :mode => 0600, :uid => 0, :gid => 0, :mtime => 10000)
101
+ # called once in update_new_file_state and once in checksum
102
+ ::File.should_receive(:stat).once.with(@provider.new_resource.path).and_return(stat_struct)
103
+ ::File.should_receive(:directory?).once.with(@provider.new_resource.path).and_return(false)
104
+
105
+ Etc.should_receive(:getpwuid).with(0).and_return(mock("User Ent", :name => "root"))
106
+ Etc.should_receive(:getgrgid).with(0).and_return(mock("Group Ent", :name => "wheel"))
107
+
108
+ @provider.new_resource.group(nil)
109
+ @provider.new_resource.owner(nil)
110
+ @provider.new_resource.mode(nil)
111
+
112
+ # test exectution
113
+ @provider.update_new_file_state
114
+
115
+ # post-condition checks
116
+ @provider.new_resource.group.should == "wheel"
117
+ @provider.new_resource.owner.should == "root"
118
+ @provider.new_resource.mode.should == "0600"
119
+ end
125
120
  end
126
121
  end
127
122
 
128
- context "load_current_resource_attrs", :windows_only do
129
- pending "CHEF-3557: Fix implicit resource change collection on Windows"
123
+ describe "when reporting security metadata on windows" do
124
+
125
+ it "records the file owner" do
126
+ pending
127
+ end
128
+
129
+ it "records rights for each user in the ACL" do
130
+ pending
131
+ end
132
+
133
+ it "records deny_rights for each user in the ACL" do
134
+ pending
135
+ end
130
136
  end
131
137
 
132
138
  it "should load a mostly blank current resource if the file specified in new_resource doesn't exist/isn't readable" do
@@ -174,16 +180,18 @@ describe Chef::Provider::File do
174
180
  @provider.new_resource.content "foobar"
175
181
  @provider.should_receive(:diff_current_from_content).and_return("")
176
182
  @provider.should_receive(:backup)
183
+ # checksum check
184
+ File.should_receive(:open).with(@provider.new_resource.path, "rb").and_yield(io)
177
185
  File.should_receive(:open).with(@provider.new_resource.path, "w").and_yield(io)
178
186
  @provider.set_content
179
- lambda { @provider.send(:converge_actions).converge! }.should_not raise_error
180
187
  io.string.should == "foobar"
181
188
  end
182
189
 
183
190
  it "should not set the content of the file if it already matches the requested content" do
184
191
  @provider.load_current_resource
185
192
  @provider.new_resource.content IO.read(@resource.path)
186
- File.stub!(:open).and_return(1)
193
+ # Checksum check:
194
+ File.should_receive(:open).with(@resource.path, "rb").and_yield(StringIO.new(@resource.content))
187
195
  File.should_not_receive(:open).with(@provider.new_resource.path, "w")
188
196
  lambda { @provider.set_content }.should_not raise_error
189
197
  @resource.should_not be_updated_by_last_action
@@ -343,10 +351,12 @@ describe Chef::Provider::File do
343
351
  end
344
352
 
345
353
  it "should call action create if the does not file exist" do
346
- @resource.path("/tmp/non_existant_file")
354
+ @resource.path("/tmp/example-dir/non_existant_file")
347
355
  @provider = Chef::Provider::File.new(@resource, @run_context)
348
356
  @provider.should_receive(:diff_current_from_content).and_return("")
349
357
  ::File.stub!(:exists?).with(@resource.path).and_return(false)
358
+ ::File.stub!(:directory?).with("/tmp/example-dir/non_existant_file").and_return(false)
359
+ ::File.stub!(:directory?).with("/tmp/example-dir").and_return(true)
350
360
  @provider.stub!(:update_new_file_state)
351
361
  io = StringIO.new
352
362
  File.should_receive(:open).with(@provider.new_resource.path, "w+").and_yield(io)
@@ -356,7 +366,7 @@ describe Chef::Provider::File do
356
366
  end
357
367
  end
358
368
 
359
- describe "when a diff is requested" do
369
+ describe "when a diff is requested", :uses_diff => true do
360
370
 
361
371
  before(:each) do
362
372
  @original_config = Chef::Config.hash_dup
@@ -486,7 +496,7 @@ describe Chef::Provider::File do
486
496
  it "should return valid diff output when content does not match the string content provided" do
487
497
  Tempfile.open("some-temp") do |file|
488
498
  @resource.path file.path
489
- @provider = Chef::Provider::File.new(@resource, @run_context)
499
+ @provider = Chef::Provider::File.new(@resource, @run_context)
490
500
  @provider.load_current_resource
491
501
  result = @provider.diff_current_from_content "foo baz"
492
502
  # remove the file name info which varies.
@@ -163,7 +163,6 @@ SHAS
163
163
  :environment =>{"GIT_SSH"=>"do_it_this_way.sh"}, :log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT)
164
164
 
165
165
  @provider.clone
166
- @provider.converge
167
166
  end
168
167
 
169
168
  it "runs a clone command with escaped destination" do
@@ -174,7 +173,6 @@ SHAS
174
173
  @provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja",
175
174
  :environment =>{"GIT_SSH"=>"do_it_this_way.sh"}, :log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT)
176
175
  @provider.clone
177
- @provider.converge
178
176
  end
179
177
 
180
178
  it "compiles a clone command using --depth for shallow cloning" do
@@ -182,7 +180,6 @@ SHAS
182
180
  expected_cmd = 'git clone --depth 5 git://github.com/opscode/chef.git /my/deploy/dir'
183
181
  @provider.should_receive(:shell_out!).with(expected_cmd, {:log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT})
184
182
  @provider.clone
185
- @provider.converge
186
183
  end
187
184
 
188
185
  it "compiles a clone command with a remote other than ``origin''" do
@@ -190,14 +187,12 @@ SHAS
190
187
  expected_cmd = 'git clone -o opscode git://github.com/opscode/chef.git /my/deploy/dir'
191
188
  @provider.should_receive(:shell_out!).with(expected_cmd, {:log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT})
192
189
  @provider.clone
193
- @provider.converge
194
190
  end
195
191
 
196
192
  it "runs a checkout command with default options" do
197
193
  expected_cmd = 'git checkout -b deploy d35af14d41ae22b19da05d7d03a0bafc321b244c'
198
194
  @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_level => :debug, :log_tag => "git[web2.0 app]")
199
195
  @provider.checkout
200
- @provider.converge
201
196
  end
202
197
 
203
198
  it "runs an enable_submodule command" do
@@ -205,20 +200,17 @@ SHAS
205
200
  expected_cmd = "git submodule update --init --recursive"
206
201
  @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir", :log_level => :info, :log_tag => "git[web2.0 app]", :live_stream => STDOUT)
207
202
  @provider.enable_submodules
208
- @provider.converge
209
203
  end
210
204
 
211
205
  it "does nothing for enable_submodules if resource.enable_submodules #=> false" do
212
206
  @provider.should_not_receive(:shell_out!)
213
207
  @provider.enable_submodules
214
- @provider.converge
215
208
  end
216
209
 
217
210
  it "runs a sync command with default options" do
218
211
  expected_cmd = "git fetch origin && git fetch origin --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
219
212
  @provider.should_receive(:shell_out!).with(expected_cmd, :cwd=> "/my/deploy/dir", :log_level => :debug, :log_tag => "git[web2.0 app]")
220
213
  @provider.fetch_updates
221
- @provider.converge
222
214
  end
223
215
 
224
216
  it "runs a sync command with the user and group specified in the resource" do
@@ -228,7 +220,6 @@ SHAS
228
220
  @provider.should_receive(:shell_out!).with(expected_cmd, :cwd => "/my/deploy/dir",
229
221
  :user => "whois", :group => "thisis", :log_level => :debug, :log_tag => "git[web2.0 app]")
230
222
  @provider.fetch_updates
231
- @provider.converge
232
223
  end
233
224
 
234
225
  it "configures remote tracking branches when remote is not ``origin''" do
@@ -239,7 +230,6 @@ SHAS
239
230
  fetch_command = "git fetch opscode && git fetch opscode --tags && git reset --hard d35af14d41ae22b19da05d7d03a0bafc321b244c"
240
231
  @provider.should_receive(:shell_out!).with(fetch_command, :cwd => "/my/deploy/dir", :log_level => :debug, :log_tag => "git[web2.0 app]")
241
232
  @provider.fetch_updates
242
- @provider.converge
243
233
  end
244
234
 
245
235
  it "raises an error if the git clone command would fail because the enclosing directory doesn't exist" do
@@ -132,7 +132,7 @@ describe Chef::Provider::Group::Groupadd do
132
132
  describe "modify_group_members" do
133
133
 
134
134
  it "should raise an error when calling modify_group_members" do
135
- lambda { @provider.modify_group_members ; @provider.converge }.should raise_error(Chef::Exceptions::Group, "you must override modify_group_members in #{@provider.to_s}")
135
+ lambda { @provider.modify_group_members }.should raise_error(Chef::Exceptions::Group, "you must override modify_group_members in #{@provider.to_s}")
136
136
  end
137
137
  end
138
138
 
@@ -64,7 +64,7 @@ describe Chef::Provider::Group::Usermod do
64
64
 
65
65
  platforms.each do |platform, flags|
66
66
  it "should usermod each user when the append option is set on #{platform}" do
67
- @node[:platform] = platform
67
+ @node.automatic_attrs[:platform] = platform
68
68
  @new_resource.stub!(:append).and_return(true)
69
69
  @provider.should_receive(:run_command).with({:command => "usermod #{flags} wheel all"})
70
70
  @provider.should_receive(:run_command).with({:command => "usermod #{flags} wheel your"})
@@ -76,7 +76,7 @@ describe Chef::Provider::Group::Usermod do
76
76
  end
77
77
 
78
78
  describe "when loading the current resource" do
79
- before (:each) do
79
+ before(:each) do
80
80
  File.stub!(:exists?).and_return(false)
81
81
  @provider.define_resource_requirements
82
82
  end
@@ -6,9 +6,9 @@
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
7
7
  # you may not use this file except in compliance with the License.
8
8
  # You may obtain a copy of the License at
9
- #
9
+ #
10
10
  # http://www.apache.org/licenses/LICENSE-2.0
11
- #
11
+ #
12
12
  # Unless required by applicable law or agreed to in writing, software
13
13
  # distributed under the License is distributed on an "AS IS" BASIS,
14
14
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -26,13 +26,13 @@ describe Chef::Provider::HttpRequest do
26
26
 
27
27
  @new_resource = Chef::Resource::HttpRequest.new('adam')
28
28
  @new_resource.name "adam"
29
- @new_resource.url "http://www.opscode.com"
29
+ @new_resource.url "http://www.opscode.com/"
30
30
  @new_resource.message "is cool"
31
31
 
32
32
  @provider = Chef::Provider::HttpRequest.new(@new_resource, @run_context)
33
33
  end
34
34
 
35
- describe "load_current_resource" do
35
+ describe "load_current_resource" do
36
36
 
37
37
  it "should set up a Chef::REST client, with no authentication" do
38
38
  Chef::REST.should_receive(:new).with(@new_resource.url, nil, nil)
@@ -45,91 +45,59 @@ describe Chef::Provider::HttpRequest do
45
45
  # run_action(x) forces load_current_resource to run;
46
46
  # that would overwrite our supplied mock Chef::Rest # object
47
47
  @provider.stub!(:load_current_resource).and_return(true)
48
- @rest = mock("Chef::REST", :create_url => "http://www.opscode.com", :run_request => "you made it!" )
48
+ @rest = mock("Chef::REST")
49
49
  @provider.rest = @rest
50
50
  end
51
51
 
52
- describe "action_get" do
53
- it "should create the url with a message argument" do
54
- @rest.should_receive(:create_url).with("#{@new_resource.url}?message=#{@new_resource.message}")
55
- @provider.run_action(:get)
56
- end
52
+ describe "action_get" do
57
53
 
58
54
  it "should inflate a message block at runtime" do
59
- @new_resource.stub!(:message).and_return(lambda { "return" })
60
- @rest.should_receive(:create_url).with("#{@new_resource.url}?message=return")
55
+ @new_resource.message { "return" }
56
+ @rest.should_receive(:get).with("http://www.opscode.com/?message=return", false, {})
61
57
  @provider.run_action(:get)
58
+ @new_resource.should be_updated
62
59
  end
63
60
 
64
61
  it "should run a GET request" do
65
- @rest.should_receive(:run_request).with(:GET, @rest.create_url, {}, false, 10, false)
66
- @provider.run_action(:get)
67
- end
68
-
69
- it "should update the resource" do
62
+ @rest.should_receive(:get).with("http://www.opscode.com/?message=is cool", false, {})
70
63
  @provider.run_action(:get)
71
64
  @new_resource.should be_updated
72
65
  end
73
66
  end
74
67
 
75
- describe "action_put" do
76
- it "should create the url" do
77
- @rest.should_receive(:create_url).with("#{@new_resource.url}")
78
- @provider.run_action(:put)
79
- end
80
-
68
+ describe "action_put" do
81
69
  it "should run a PUT request with the message as the payload" do
82
- @rest.should_receive(:run_request).with(:PUT, @rest.create_url, {}, @new_resource.message, 10, false)
70
+ @rest.should_receive(:put).with("http://www.opscode.com/", @new_resource.message, {})
83
71
  @provider.run_action(:put)
72
+ @new_resource.should be_updated
84
73
  end
85
74
 
86
75
  it "should inflate a message block at runtime" do
87
76
  @new_resource.stub!(:message).and_return(lambda { "return" })
88
- @rest.should_receive(:run_request).with(:PUT, @rest.create_url, {}, "return", 10, false)
89
- @provider.run_action(:put)
90
- end
91
-
92
- it "should update the resource" do
77
+ @rest.should_receive(:put).with("http://www.opscode.com/", "return", {})
93
78
  @provider.run_action(:put)
94
79
  @new_resource.should be_updated
95
80
  end
96
81
  end
97
82
 
98
- describe "action_post" do
99
- it "should create the url" do
100
- @rest.should_receive(:create_url).with("#{@new_resource.url}")
101
- @provider.run_action(:post)
102
- end
103
-
83
+ describe "action_post" do
104
84
  it "should run a PUT request with the message as the payload" do
105
- @rest.should_receive(:run_request).with(:POST, @rest.create_url, {}, @new_resource.message, 10, false)
85
+ @rest.should_receive(:post).with("http://www.opscode.com/", @new_resource.message, {})
106
86
  @provider.run_action(:post)
87
+ @new_resource.should be_updated
107
88
  end
108
-
89
+
109
90
  it "should inflate a message block at runtime" do
110
- @new_resource.stub!(:message).and_return(lambda { "return" })
111
- @rest.should_receive(:run_request).with(:POST, @rest.create_url, {}, "return", 10, false)
112
- @provider.run_action(:post)
113
- end
114
-
115
- it "should update the resource" do
91
+ @new_resource.message { "return" }
92
+ @rest.should_receive(:post).with("http://www.opscode.com/", "return", {})
116
93
  @provider.run_action(:post)
117
94
  @new_resource.should be_updated
118
95
  end
119
96
  end
120
97
 
121
- describe "action_delete" do
122
- it "should create the url" do
123
- @rest.should_receive(:create_url).with("#{@new_resource.url}")
124
- @provider.run_action(:delete)
125
- end
126
-
98
+ describe "action_delete" do
127
99
  it "should run a DELETE request" do
128
- @rest.should_receive(:run_request).with(:DELETE, @rest.create_url, {}, false, 10, false)
129
- @provider.run_action(:delete)
130
- end
131
-
132
- it "should update the resource" do
100
+ @rest.should_receive(:delete).with("http://www.opscode.com/", {})
133
101
  @provider.run_action(:delete)
134
102
  @new_resource.should be_updated
135
103
  end
@@ -137,39 +105,30 @@ describe Chef::Provider::HttpRequest do
137
105
 
138
106
  describe "action_head" do
139
107
  before do
140
- @rest = mock("Chef::REST", :create_url => "http://www.opscode.com", :run_request => true)
141
108
  @provider.rest = @rest
142
109
  end
143
110
 
144
- it "should create the url with a message argument" do
145
- @rest.should_receive(:create_url).with("#{@new_resource.url}?message=#{@new_resource.message}")
146
- @provider.run_action(:head)
147
- end
148
-
149
111
  it "should inflate a message block at runtime" do
150
- @new_resource.stub!(:message).and_return(lambda { "return" })
151
- @rest.should_receive(:create_url).with("#{@new_resource.url}?message=return")
112
+ @new_resource.message { "return" }
113
+ @rest.should_receive(:head).with("http://www.opscode.com/?message=return", {}).and_return("")
152
114
  @provider.run_action(:head)
115
+ @new_resource.should be_updated
153
116
  end
154
117
 
155
118
  it "should run a HEAD request" do
156
- @rest.should_receive(:run_request).with(:HEAD, @rest.create_url, {}, false, 10, false)
157
- @provider.run_action(:head)
158
- end
159
-
160
- it "should update the resource" do
119
+ @rest.should_receive(:head).with("http://www.opscode.com/?message=is cool", {}).and_return("")
161
120
  @provider.run_action(:head)
162
121
  @new_resource.should be_updated
163
122
  end
164
123
 
165
124
  it "should run a HEAD request with If-Modified-Since header" do
166
125
  @new_resource.headers "If-Modified-Since" => File.mtime(__FILE__).httpdate
167
- @rest.should_receive(:run_request).with(:HEAD, @rest.create_url, @new_resource.headers, false, 10, false)
126
+ @rest.should_receive(:head).with("http://www.opscode.com/?message=is cool", @new_resource.headers)
168
127
  @provider.run_action(:head)
169
128
  end
170
129
 
171
130
  it "doesn't call converge_by if HEAD does not return modified" do
172
- @rest.should_receive(:run_request).and_return(false)
131
+ @rest.should_receive(:head).and_return(false)
173
132
  @provider.should_not_receive(:converge_by)
174
133
  @provider.run_action(:head)
175
134
  end