microwave 1.0.4 → 11.400.2

Sign up to get free protection for your applications and to get access to all the features.
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