chef 12.5.1-universal-mingw32 → 12.6.0-universal-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -1
  3. data/README.md +6 -4
  4. data/Rakefile +1 -4
  5. data/chef-windows.gemspec +21 -0
  6. data/chef.gemspec +58 -0
  7. data/lib/chef/api_client/registration.rb +9 -4
  8. data/lib/chef/application.rb +3 -84
  9. data/lib/chef/application/apply.rb +9 -2
  10. data/lib/chef/application/client.rb +8 -3
  11. data/lib/chef/application/solo.rb +7 -1
  12. data/lib/chef/application/windows_service.rb +21 -6
  13. data/lib/chef/application/windows_service_manager.rb +2 -3
  14. data/lib/chef/audit/runner.rb +1 -0
  15. data/lib/chef/chef_class.rb +1 -11
  16. data/lib/chef/chef_fs/chef_fs_data_store.rb +181 -2
  17. data/lib/chef/chef_fs/file_system/cookbook_subdir.rb +5 -0
  18. data/lib/chef/chef_fs/file_system/file_system_entry.rb +11 -7
  19. data/lib/chef/client.rb +28 -1
  20. data/lib/chef/cookbook/cookbook_collection.rb +14 -1
  21. data/lib/chef/cookbook/cookbook_version_loader.rb +1 -1
  22. data/lib/chef/cookbook/metadata.rb +115 -9
  23. data/lib/chef/cookbook/remote_file_vendor.rb +1 -1
  24. data/lib/chef/cookbook_version.rb +6 -2
  25. data/lib/chef/data_bag.rb +1 -1
  26. data/lib/chef/data_bag_item.rb +1 -1
  27. data/lib/chef/digester.rb +5 -1
  28. data/lib/chef/dsl/chef_provisioning.rb +57 -0
  29. data/lib/chef/dsl/cheffish.rb +64 -0
  30. data/lib/chef/dsl/declare_resource.rb +108 -0
  31. data/lib/chef/dsl/platform_introspection.rb +3 -3
  32. data/lib/chef/dsl/recipe.rb +3 -73
  33. data/lib/chef/dsl/resources.rb +27 -1
  34. data/lib/chef/event_dispatch/base.rb +3 -0
  35. data/lib/chef/event_dispatch/dispatcher.rb +5 -0
  36. data/lib/chef/event_dispatch/events_output_stream.rb +8 -0
  37. data/lib/chef/exceptions.rb +21 -1
  38. data/lib/chef/file_access_control/unix.rb +12 -12
  39. data/lib/chef/file_content_management/deploy/cp.rb +2 -2
  40. data/lib/chef/file_content_management/deploy/mv_unix.rb +4 -4
  41. data/lib/chef/file_content_management/deploy/mv_windows.rb +1 -1
  42. data/lib/chef/formatters/base.rb +7 -0
  43. data/lib/chef/formatters/error_inspectors/compile_error_inspector.rb +2 -2
  44. data/lib/chef/formatters/indentable_output_stream.rb +5 -0
  45. data/lib/chef/http.rb +19 -3
  46. data/lib/chef/http/decompressor.rb +2 -2
  47. data/lib/chef/json_compat.rb +1 -0
  48. data/lib/chef/knife.rb +16 -2
  49. data/lib/chef/knife/bootstrap.rb +55 -10
  50. data/lib/chef/knife/cookbook_site_install.rb +5 -1
  51. data/lib/chef/knife/core/bootstrap_context.rb +2 -1
  52. data/lib/chef/knife/core/node_presenter.rb +1 -1
  53. data/lib/chef/knife/ssh.rb +30 -16
  54. data/lib/chef/knife/ssl_check.rb +4 -2
  55. data/lib/chef/knife/ssl_fetch.rb +3 -2
  56. data/lib/chef/knife/status.rb +14 -1
  57. data/lib/chef/log.rb +14 -0
  58. data/lib/chef/mixin/get_source_from_package.rb +7 -2
  59. data/lib/chef/mixin/properties.rb +302 -0
  60. data/lib/chef/mixin/proxified_socket.rb +38 -0
  61. data/lib/chef/mixin/subclass_directive.rb +37 -0
  62. data/lib/chef/node.rb +13 -5
  63. data/lib/chef/platform/query_helpers.rb +14 -3
  64. data/lib/chef/platform/service_helpers.rb +20 -38
  65. data/lib/chef/policy_builder/expand_node_object.rb +3 -0
  66. data/lib/chef/policy_builder/policyfile.rb +1 -0
  67. data/lib/chef/property.rb +51 -12
  68. data/lib/chef/provider.rb +40 -35
  69. data/lib/chef/provider/deploy.rb +1 -1
  70. data/lib/chef/provider/dsc_resource.rb +54 -20
  71. data/lib/chef/provider/execute.rb +25 -4
  72. data/lib/chef/provider/group.rb +1 -1
  73. data/lib/chef/provider/lwrp_base.rb +1 -0
  74. data/lib/chef/provider/package.rb +76 -30
  75. data/lib/chef/provider/package/dpkg.rb +152 -69
  76. data/lib/chef/provider/package/openbsd.rb +6 -8
  77. data/lib/chef/provider/package/solaris.rb +2 -0
  78. data/lib/chef/provider/package/windows.rb +95 -14
  79. data/lib/chef/provider/package/windows/exe.rb +129 -0
  80. data/lib/chef/provider/package/windows/msi.rb +37 -13
  81. data/lib/chef/provider/package/windows/registry_uninstall_entry.rb +89 -0
  82. data/lib/chef/provider/package/yum.rb +13 -3
  83. data/lib/chef/provider/powershell_script.rb +3 -0
  84. data/lib/chef/provider/remote_file/cache_control_data.rb +37 -4
  85. data/lib/chef/provider/remote_file/http.rb +1 -1
  86. data/lib/chef/provider/script.rb +1 -0
  87. data/lib/chef/provider/service.rb +13 -10
  88. data/lib/chef/provider/service/solaris.rb +43 -17
  89. data/lib/chef/provider/service/upstart.rb +3 -3
  90. data/lib/chef/provider/user.rb +1 -1
  91. data/lib/chef/provider/user/dscl.rb +111 -100
  92. data/lib/chef/provider/user/windows.rb +5 -3
  93. data/lib/chef/recipe.rb +3 -5
  94. data/lib/chef/resource.rb +77 -320
  95. data/lib/chef/resource/action_class.rb +4 -0
  96. data/lib/chef/resource/dpkg_package.rb +4 -3
  97. data/lib/chef/resource/dsc_resource.rb +40 -2
  98. data/lib/chef/resource/execute.rb +9 -1
  99. data/lib/chef/resource/ksh.rb +32 -0
  100. data/lib/chef/resource/lwrp_base.rb +6 -10
  101. data/lib/chef/resource/package.rb +8 -9
  102. data/lib/chef/resource/registry_key.rb +1 -1
  103. data/lib/chef/resource/resource_notification.rb +14 -1
  104. data/lib/chef/resource/script.rb +1 -1
  105. data/lib/chef/resource/windows_package.rb +1 -1
  106. data/lib/chef/resource_builder.rb +14 -7
  107. data/lib/chef/resource_reporter.rb +6 -0
  108. data/lib/chef/resources.rb +1 -7
  109. data/lib/chef/rest.rb +1 -1
  110. data/lib/chef/run_context.rb +45 -2
  111. data/lib/chef/run_list/run_list_expansion.rb +47 -0
  112. data/lib/chef/runner.rb +25 -0
  113. data/lib/chef/search/query.rb +16 -2
  114. data/lib/chef/util/diff.rb +2 -2
  115. data/lib/chef/util/powershell/ps_credential.rb +2 -3
  116. data/lib/chef/version.rb +1 -1
  117. data/lib/chef/win32/api/file.rb +51 -1
  118. data/lib/chef/win32/file.rb +5 -0
  119. data/lib/chef/win32/file/version_info.rb +93 -0
  120. data/lib/chef/win32/mutex.rb +1 -1
  121. data/spec/data/apt/chef-integration-test2-1.0/debian/changelog +5 -0
  122. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log +45 -0
  123. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars +1 -0
  124. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles +1 -0
  125. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control +10 -0
  126. data/spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums +1 -0
  127. data/spec/data/apt/chef-integration-test2-1.0/debian/compat +1 -0
  128. data/spec/data/apt/chef-integration-test2-1.0/debian/conffiles +1 -0
  129. data/spec/data/apt/chef-integration-test2-1.0/debian/control +13 -0
  130. data/spec/data/apt/chef-integration-test2-1.0/debian/copyright +34 -0
  131. data/spec/data/apt/chef-integration-test2-1.0/debian/files +1 -0
  132. data/spec/data/apt/chef-integration-test2-1.0/debian/rules +13 -0
  133. data/spec/data/apt/chef-integration-test2-1.0/debian/source/format +1 -0
  134. data/spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz +0 -0
  135. data/spec/data/apt/chef-integration-test2_1.0-1.dsc +18 -0
  136. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.build +91 -0
  137. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.changes +31 -0
  138. data/spec/data/apt/chef-integration-test2_1.0-1_amd64.deb +0 -0
  139. data/spec/data/apt/chef-integration-test2_1.0.orig.tar.gz +0 -0
  140. data/spec/functional/application_spec.rb +1 -1
  141. data/spec/functional/audit/runner_spec.rb +4 -0
  142. data/spec/functional/knife/ssh_spec.rb +5 -5
  143. data/spec/functional/notifications_spec.rb +74 -4
  144. data/spec/functional/resource/aix_service_spec.rb +2 -2
  145. data/spec/functional/resource/dpkg_package_spec.rb +339 -0
  146. data/spec/functional/resource/ifconfig_spec.rb +3 -1
  147. data/spec/functional/resource/mount_spec.rb +5 -2
  148. data/spec/functional/resource/package_spec.rb +1 -1
  149. data/spec/functional/resource/user/windows_spec.rb +8 -0
  150. data/spec/functional/resource/windows_package_spec.rb +177 -0
  151. data/spec/functional/win32/version_info_spec.rb +50 -0
  152. data/spec/integration/client/client_spec.rb +80 -0
  153. data/spec/integration/knife/download_spec.rb +9 -0
  154. data/spec/integration/knife/upload_spec.rb +28 -1
  155. data/spec/integration/recipes/lwrp_inline_resources_spec.rb +93 -23
  156. data/spec/integration/recipes/resource_action_spec.rb +211 -116
  157. data/spec/integration/recipes/resource_converge_if_changed_spec.rb +72 -0
  158. data/spec/integration/solo/solo_spec.rb +34 -0
  159. data/spec/spec_helper.rb +11 -1
  160. data/spec/support/platform_helpers.rb +8 -0
  161. data/spec/support/shared/integration/integration_helper.rb +6 -0
  162. data/spec/support/shared/unit/execute_resource.rb +5 -0
  163. data/spec/support/shared/unit/platform_introspector.rb +7 -0
  164. data/spec/tiny_server.rb +6 -2
  165. data/spec/unit/api_client/registration_spec.rb +5 -4
  166. data/spec/unit/application_spec.rb +1 -181
  167. data/spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb +34 -0
  168. data/spec/unit/cookbook/metadata_spec.rb +122 -2
  169. data/spec/unit/http_spec.rb +102 -0
  170. data/spec/unit/knife/bootstrap_spec.rb +55 -13
  171. data/spec/unit/knife/core/bootstrap_context_spec.rb +10 -3
  172. data/spec/unit/knife/ssl_check_spec.rb +7 -3
  173. data/spec/unit/knife/ssl_fetch_spec.rb +2 -2
  174. data/spec/unit/knife/status_spec.rb +13 -13
  175. data/spec/unit/knife_spec.rb +26 -2
  176. data/spec/unit/lwrp_spec.rb +1 -1
  177. data/spec/unit/mixin/properties_spec.rb +97 -0
  178. data/spec/unit/mixin/proxified_socket_spec.rb +94 -0
  179. data/spec/unit/mixin/subclass_directive_spec.rb +45 -0
  180. data/spec/unit/node_spec.rb +9 -1
  181. data/spec/unit/policy_builder/policyfile_spec.rb +2 -0
  182. data/spec/unit/property/validation_spec.rb +14 -12
  183. data/spec/unit/property_spec.rb +56 -0
  184. data/spec/unit/provider/deploy_spec.rb +1 -1
  185. data/spec/unit/provider/dsc_resource_spec.rb +63 -24
  186. data/spec/unit/provider/execute_spec.rb +95 -28
  187. data/spec/unit/provider/package/dpkg_spec.rb +185 -96
  188. data/spec/unit/provider/package/windows/exe_spec.rb +251 -0
  189. data/spec/unit/provider/package/windows/msi_spec.rb +94 -10
  190. data/spec/unit/provider/package/windows_spec.rb +227 -26
  191. data/spec/unit/provider/package/yum_spec.rb +6 -0
  192. data/spec/unit/provider/package_spec.rb +495 -366
  193. data/spec/unit/provider/remote_file/cache_control_data_spec.rb +62 -36
  194. data/spec/unit/provider/script_spec.rb +2 -2
  195. data/spec/unit/provider/service/solaris_smf_service_spec.rb +110 -39
  196. data/spec/unit/provider/service/upstart_service_spec.rb +19 -0
  197. data/spec/unit/provider/user/dscl_spec.rb +14 -0
  198. data/spec/unit/provider/user/windows_spec.rb +2 -2
  199. data/spec/unit/provider/user_spec.rb +9 -0
  200. data/spec/unit/provider_resolver_spec.rb +6 -30
  201. data/spec/unit/recipe_spec.rb +46 -20
  202. data/spec/unit/resource/chef_gem_spec.rb +1 -1
  203. data/spec/unit/resource/dsc_resource_spec.rb +14 -3
  204. data/spec/unit/resource/ksh_spec.rb +40 -0
  205. data/spec/unit/resource/registry_key_spec.rb +2 -2
  206. data/spec/unit/resource/resource_notification_spec.rb +44 -45
  207. data/spec/unit/resource_reporter_spec.rb +7 -0
  208. data/spec/unit/resource_spec.rb +268 -253
  209. data/spec/unit/rest_spec.rb +2 -2
  210. data/spec/unit/run_list/run_list_expansion_spec.rb +18 -3
  211. data/spec/unit/search/query_spec.rb +19 -1
  212. data/spec/unit/util/powershell/ps_credential_spec.rb +8 -1
  213. data/spec/unit/windows_service_spec.rb +83 -38
  214. data/tasks/external_tests.rb +19 -9
  215. data/tasks/rspec.rb +1 -1
  216. metadata +70 -21
  217. data/spec/support/pedant/Gemfile +0 -3
  218. data/spec/support/pedant/pedant_config.rb +0 -129
  219. data/spec/support/pedant/run_pedant.rb +0 -63
  220. data/spec/support/pedant/stickywicket.pem +0 -27
  221. data/spec/unit/provider/package_spec.rbe +0 -0
@@ -69,8 +69,8 @@ describe Chef::REST do
69
69
  rest
70
70
  end
71
71
 
72
- let(:standard_read_headers) {{"Accept"=>"application/json", "Accept"=>"application/json", "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3", "X-REMOTE-REQUEST-ID"=>request_id, 'X-Ops-Server-API-Version' => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION}}
73
- let(:standard_write_headers) {{"Accept"=>"application/json", "Content-Type"=>"application/json", "Accept"=>"application/json", "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3", "X-REMOTE-REQUEST-ID"=>request_id, 'X-Ops-Server-API-Version' => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION}}
72
+ let(:standard_read_headers) {{"Accept"=>"application/json", "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3", "X-REMOTE-REQUEST-ID"=>request_id, 'X-Ops-Server-API-Version' => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION}}
73
+ let(:standard_write_headers) {{"Accept"=>"application/json", "Content-Type"=>"application/json", "Accept-Encoding"=>"gzip;q=1.0,deflate;q=0.6,identity;q=0.3", "X-REMOTE-REQUEST-ID"=>request_id, 'X-Ops-Server-API-Version' => Chef::HTTP::Authenticator::DEFAULT_SERVER_API_VERSION}}
74
74
 
75
75
  before(:each) do
76
76
  Chef::Log.init(log_stringio)
@@ -21,7 +21,7 @@ require 'spec_helper'
21
21
  describe Chef::RunList::RunListExpansion do
22
22
  before do
23
23
  @run_list = Chef::RunList.new
24
- @run_list << 'recipe[lobster]' << 'role[rage]' << 'recipe[fist]'
24
+ @run_list << 'recipe[lobster::mastercookbook@0.1.0]' << 'role[rage]' << 'recipe[fist@0.1]'
25
25
  @expansion = Chef::RunList::RunListExpansion.new("_default", @run_list.run_list_items)
26
26
  end
27
27
 
@@ -59,7 +59,7 @@ describe Chef::RunList::RunListExpansion do
59
59
  end
60
60
 
61
61
  it "has the correct list of recipes for the given environment" do
62
- expect(@expansion.recipes).to eq(["lobster", "prod-only", "fist"])
62
+ expect(@expansion.recipes).to eq(["lobster::mastercookbook", "prod-only", "fist"])
63
63
  end
64
64
 
65
65
  end
@@ -82,19 +82,34 @@ describe Chef::RunList::RunListExpansion do
82
82
  describe "after expanding a run list" do
83
83
  before do
84
84
  @first_role = Chef::Role.new
85
+ @first_role.name('rage')
85
86
  @first_role.run_list('role[mollusk]')
86
87
  @first_role.default_attributes({'foo' => 'bar'})
87
88
  @first_role.override_attributes({'baz' => 'qux'})
88
89
  @second_role = Chef::Role.new
90
+ @second_role.name('rage')
89
91
  @second_role.run_list('recipe[crabrevenge]')
90
92
  @second_role.default_attributes({'foo' => 'boo'})
91
93
  @second_role.override_attributes({'baz' => 'bux'})
92
94
  allow(@expansion).to receive(:fetch_role).and_return(@first_role, @second_role)
93
95
  @expansion.expand
96
+ @json = '{"id":"_default","run_list":[{"type":"recipe","name":"lobster::mastercookbook","version":"0.1.0",'
97
+ .concat(
98
+ '"skipped":false},{"type":"role","name":"rage","children":[{"type":"role","name":"mollusk","children":[],"missing":null,'
99
+ .concat(
100
+ '"error":null,"skipped":null},{"type":"recipe","name":"crabrevenge","version":null,"skipped":false}],"missing":null,'
101
+ .concat(
102
+ '"error":null,"skipped":null},{"type":"recipe","name":"fist","version":"0.1","skipped":false}]}')))
103
+
104
+ end
105
+
106
+ it "produces json tree upon tracing expansion" do
107
+ jsonRunList = @expansion.to_json
108
+ expect(jsonRunList).to eq(@json)
94
109
  end
95
110
 
96
111
  it "has the ordered list of recipes" do
97
- expect(@expansion.recipes).to eq(['lobster', 'crabrevenge', 'fist'])
112
+ expect(@expansion.recipes).to eq(['lobster::mastercookbook', 'crabrevenge', 'fist'])
98
113
  end
99
114
 
100
115
  it "has the merged attributes from the roles with outer roles overriding inner" do
@@ -83,6 +83,8 @@ describe Chef::Search::Query do
83
83
  describe "search" do
84
84
  let(:query_string) { "search/node?q=platform:rhel&sort=X_CHEF_id_CHEF_X%20asc&start=0" }
85
85
  let(:query_string_continue) { "search/node?q=platform:rhel&sort=X_CHEF_id_CHEF_X%20asc&start=4" }
86
+ let(:query_string_with_rows) { "search/node?q=platform:rhel&sort=X_CHEF_id_CHEF_X%20asc&start=0&rows=4" }
87
+ let(:query_string_continue_with_rows) { "search/node?q=platform:rhel&sort=X_CHEF_id_CHEF_X%20asc&start=4&rows=4" }
86
88
 
87
89
  let(:response) { {
88
90
  "rows" => [
@@ -149,6 +151,14 @@ describe Chef::Search::Query do
149
151
  r
150
152
  }
151
153
 
154
+ let(:big_response_empty) {
155
+ {
156
+ "start" => 0,
157
+ "total" => 8,
158
+ "rows" => []
159
+ }
160
+ }
161
+
152
162
  let(:big_response_end) {
153
163
  r = response.dup
154
164
  r["start"] = 4
@@ -208,7 +218,7 @@ describe Chef::Search::Query do
208
218
  it "pages through the responses" do
209
219
  @call_me = double("blocky")
210
220
  response["rows"].each { |r| expect(@call_me).to receive(:do).with(r) }
211
- query.search(:node, "*:*", sort: nil, start: 0, rows: 1) { |r| @call_me.do(r) }
221
+ query.search(:node, "*:*", sort: nil, start: 0, rows: 4) { |r| @call_me.do(r) }
212
222
  end
213
223
 
214
224
  it "sends multiple API requests when the server indicates there is more data" do
@@ -219,6 +229,14 @@ describe Chef::Search::Query do
219
229
  end
220
230
  end
221
231
 
232
+ it "paginates correctly in the face of filtered nodes" do
233
+ expect(rest).to receive(:get_rest).with(query_string_with_rows).and_return(big_response_empty)
234
+ expect(rest).to receive(:get_rest).with(query_string_continue_with_rows).and_return(big_response_end)
235
+ query.search(:node, "platform:rhel", rows: 4) do |r|
236
+ nil
237
+ end
238
+ end
239
+
222
240
  context "when :filter_result is provided as a result" do
223
241
  include_context "filtered search" do
224
242
  let(:filter_key) { :filter_result }
@@ -21,7 +21,7 @@ require 'chef/util/powershell/ps_credential'
21
21
 
22
22
  describe Chef::Util::Powershell::PSCredential do
23
23
  let (:username) { 'foo' }
24
- let (:password) { 'password' }
24
+ let (:password) { 'ThIsIsThEpAsSwOrD' }
25
25
 
26
26
  context 'when username and password are provided' do
27
27
  let(:ps_credential) { Chef::Util::Powershell::PSCredential.new(username, password)}
@@ -33,5 +33,12 @@ describe Chef::Util::Powershell::PSCredential do
33
33
  "'#{username}',('encrypted' | ConvertTo-SecureString))")
34
34
  end
35
35
  end
36
+
37
+ context 'when to_text is called' do
38
+ it 'should not contain the password' do
39
+ allow(ps_credential).to receive(:encrypt).with(password).and_return('encrypted')
40
+ expect(ps_credential.to_text).not_to match(/#{password}/)
41
+ end
42
+ end
36
43
  end
37
44
  end
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # Author:: Mukta Aphale (<mukta.aphale@clogeny.com>)
3
- # Copyright:: Copyright (c) 2013 Opscode, Inc.
3
+ # Copyright:: Copyright (c) 2013-2015 Chef Software, Inc.
4
4
  # License:: Apache License, Version 2.0
5
5
  #
6
6
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -21,51 +21,96 @@ if Chef::Platform.windows?
21
21
  end
22
22
 
23
23
  describe "Chef::Application::WindowsService", :windows_only do
24
- let (:instance) {Chef::Application::WindowsService.new}
25
- let (:shell_out_result) {Object.new}
26
- let (:tempfile) {Tempfile.new "log_file"}
24
+ let(:shell_out_result) { double('shellout', stdout: nil, stderr: nil) }
25
+ let(:config_options) do
26
+ {
27
+ log_location: STDOUT,
28
+ config_file: "test_config_file",
29
+ log_level: :info
30
+ }
31
+ end
32
+ let(:timeout) { 7200 }
33
+ let(:shellout_options) do
34
+ {
35
+ :timeout => timeout,
36
+ :logger => Chef::Log
37
+ }
38
+ end
39
+
27
40
  before do
28
- allow(instance).to receive(:parse_options)
29
- allow(shell_out_result).to receive(:stdout)
30
- allow(shell_out_result).to receive(:stderr)
41
+ Chef::Config.merge!(config_options)
42
+ allow(subject).to receive(:configure_chef)
43
+ allow(subject).to receive(:parse_options)
44
+ allow(MonoLogger).to receive(:new)
45
+ allow(subject).to receive(:running?).and_return(true, false)
46
+ allow(subject).to receive(:state).and_return(4)
47
+ subject.service_init
31
48
  end
32
- it "runs chef-client in new process" do
33
- expect(instance).to receive(:configure_chef).twice
34
- instance.service_init
35
- expect(instance).to receive(:run_chef_client).and_call_original
36
- expect(instance).to receive(:shell_out).and_return(shell_out_result)
37
- allow(instance).to receive(:running?).and_return(true, false)
38
- allow(instance.instance_variable_get(:@service_signal)).to receive(:wait)
39
- allow(instance).to receive(:state).and_return(4)
40
- instance.service_main
49
+
50
+ subject { Chef::Application::WindowsService.new }
51
+
52
+ it "passes DEFAULT_LOG_LOCATION to chef-client instead of STDOUT" do
53
+ expect(subject).to receive(:shell_out).with(
54
+ "chef-client --no-fork -c test_config_file -L #{Chef::Application::WindowsService::DEFAULT_LOG_LOCATION}",
55
+ shellout_options
56
+ ).and_return(shell_out_result)
57
+ subject.service_main
41
58
  end
42
59
 
43
- context 'when running chef-client' do
44
- it "passes config params to new process with a default timeout of 2 hours (7200 seconds)" do
45
- Chef::Config.merge!({:log_location => tempfile.path, :config_file => "test_config_file", :log_level => :info})
46
- expect(instance).to receive(:configure_chef).twice
47
- instance.service_init
48
- allow(instance).to receive(:running?).and_return(true, false)
49
- allow(instance.instance_variable_get(:@service_signal)).to receive(:wait)
50
- allow(instance).to receive(:state).and_return(4)
51
- expect(instance).to receive(:run_chef_client).and_call_original
52
- expect(instance).to receive(:shell_out).with("chef-client --no-fork -c test_config_file -L #{tempfile.path}", {:timeout => 7200}).and_return(shell_out_result)
53
- instance.service_main
60
+ context 'has a log location configured' do
61
+ let(:tempfile) { Tempfile.new 'log_file' }
62
+ let(:config_options) do
63
+ {
64
+ log_location: tempfile.path,
65
+ config_file: "test_config_file",
66
+ log_level: :info
67
+ }
68
+ end
69
+
70
+ after do
54
71
  tempfile.unlink
55
72
  end
56
73
 
57
- it "passes config params to new process with a the timeout specified in the config" do
58
- Chef::Config.merge!({:log_location => tempfile.path, :config_file => "test_config_file", :log_level => :info})
74
+ it "uses the configured log location" do
75
+ expect(subject).to receive(:shell_out).with(
76
+ "chef-client --no-fork -c test_config_file -L #{tempfile.path}",
77
+ shellout_options
78
+ ).and_return(shell_out_result)
79
+ subject.service_main
80
+ end
81
+
82
+ context 'configured to Event Logger' do
83
+ let(:config_options) do
84
+ {
85
+ log_location: Chef::Log::WinEvt.new,
86
+ config_file: "test_config_file",
87
+ log_level: :info
88
+ }
89
+ end
90
+
91
+ it "does not pass log location to new process" do
92
+ expect(subject).to receive(:shell_out).with(
93
+ "chef-client --no-fork -c test_config_file",
94
+ shellout_options
95
+ ).and_return(shell_out_result)
96
+ subject.service_main
97
+ end
98
+ end
99
+ end
100
+
101
+ context 'configueres a watchdog timeout' do
102
+ let(:timeout) { 10 }
103
+
104
+ before do
59
105
  Chef::Config[:windows_service][:watchdog_timeout] = 10
60
- expect(instance).to receive(:configure_chef).twice
61
- instance.service_init
62
- allow(instance).to receive(:running?).and_return(true, false)
63
- allow(instance.instance_variable_get(:@service_signal)).to receive(:wait)
64
- allow(instance).to receive(:state).and_return(4)
65
- expect(instance).to receive(:run_chef_client).and_call_original
66
- expect(instance).to receive(:shell_out).with("chef-client --no-fork -c test_config_file -L #{tempfile.path}", {:timeout => 10}).and_return(shell_out_result)
67
- instance.service_main
68
- tempfile.unlink
106
+ end
107
+
108
+ it "passes watchdog timeout to new process" do
109
+ expect(subject).to receive(:shell_out).with(
110
+ "chef-client --no-fork -c test_config_file -L #{Chef::Application::WindowsService::DEFAULT_LOG_LOCATION}",
111
+ shellout_options
112
+ ).and_return(shell_out_result)
113
+ subject.service_main
69
114
  end
70
115
  end
71
116
  end
@@ -1,38 +1,48 @@
1
1
  require 'tempfile'
2
+ require 'bundler'
3
+
4
+ CURRENT_GEM_NAME = 'chef'
5
+ CURRENT_GEM_PATH = File.expand_path('../..', __FILE__)
2
6
 
3
7
  def bundle_exec_with_chef(test_gem, commands)
4
8
  gem_path = Bundler.environment.specs[test_gem].first.full_gem_path
5
- gemfile_path = File.join(gem_path, 'Gemfile.chef-external-test')
9
+ gemfile_path = File.join(gem_path, "Gemfile.#{CURRENT_GEM_NAME}-external-test")
6
10
  gemfile = File.open(gemfile_path, "w")
7
11
  begin
8
12
  IO.read(File.join(gem_path, 'Gemfile')).each_line do |line|
9
13
  if line =~ /^\s*gemspec/
10
14
  next
11
- elsif line =~ /^\s*gem 'chef'|\s*gem "chef"/
15
+ elsif line =~ /^\s*gem '#{CURRENT_GEM_NAME}'|\s*gem "#{CURRENT_GEM_NAME}"/
12
16
  next
13
17
  elsif line =~ /^\s*dev_gem\s*['"](.+)['"]\s*$/
14
18
  line = "gem '#{$1}', github: 'poise/#{$1}'"
15
- elsif line =~ /\s*gem\s*['"]#{test_gem}['"]/ # foodcritic
19
+ elsif line =~ /\s*gem\s*['"]#{test_gem}['"]/ # foodcritic end
16
20
  next
17
21
  end
18
22
  gemfile.puts(line)
19
23
  end
20
- gemfile.puts("gem 'chef', path: #{File.expand_path('../..', __FILE__).inspect}")
24
+ gemfile.puts("gem #{CURRENT_GEM_NAME.inspect}, path: #{CURRENT_GEM_PATH.inspect}")
21
25
  gemfile.puts("gemspec path: #{gem_path.inspect}")
22
26
  gemfile.close
23
27
  Dir.chdir(gem_path) do
24
- system({ 'BUNDLE_GEMFILE' => gemfile.path, 'RUBYOPT' => nil }, "bundle install")
25
- Array(commands).each do |command|
26
- system({ 'BUNDLE_GEMFILE' => gemfile.path, 'RUBYOPT' => nil }, "bundle exec #{command}")
28
+ Bundler.with_clean_env do
29
+ unless system({ 'RUBYOPT' => nil, 'GEMFILE_MOD' => nil }, "bundle install --gemfile #{gemfile_path}")
30
+ raise "Error running bundle install --gemfile #{gemfile_path} in #{gem_path}: #{$?.exitstatus}\nGemfile:\n#{IO.read(gemfile_path)}"
31
+ end
32
+ Array(commands).each do |command|
33
+ unless system({ 'BUNDLE_GEMFILE' => gemfile_path, 'RUBYOPT' => nil, 'GEMFILE_MOD' => nil }, "bundle exec #{command}")
34
+ raise "Error running bundle exec #{command} in #{gem_path} with BUNDLE_GEMFILE=#{gemfile_path}: #{$?.exitstatus}\nGemfile:\n#{IO.read(gemfile_path)}"
35
+ end
36
+ end
27
37
  end
28
38
  end
29
39
  ensure
30
- File.delete(gemfile_path)
40
+ File.delete(gemfile_path) if File.exist?(gemfile_path)
31
41
  end
32
42
  end
33
43
 
34
44
  EXTERNAL_PROJECTS = {
35
- "chef-zero" => [ "rake spec", "rake pedant" ],
45
+ "chef-zero" => [ "rake spec", "rake cheffs" ],
36
46
  "cheffish" => "rake spec",
37
47
  "chef-provisioning" => "rake spec",
38
48
  "chef-provisioning-aws" => "rake spec",
@@ -30,7 +30,7 @@ begin
30
30
  task :component_specs do
31
31
  Dir.chdir("chef-config") do
32
32
  Bundler.with_clean_env do
33
- sh("bundle install --local")
33
+ sh("bundle install")
34
34
  sh("bundle exec rake spec")
35
35
  end
36
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.5.1
4
+ version: 12.6.0
5
5
  platform: universal-mingw32
6
6
  authors:
7
7
  - Adam Jacob
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-08 00:00:00.000000000 Z
11
+ date: 2015-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: chef-config
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 12.5.1
19
+ version: 12.6.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 12.5.1
26
+ version: 12.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mixlib-cli
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -250,42 +250,42 @@ dependencies:
250
250
  requirements:
251
251
  - - "~>"
252
252
  - !ruby/object:Gem::Version
253
- version: '3.2'
253
+ version: '3.4'
254
254
  type: :runtime
255
255
  prerelease: false
256
256
  version_requirements: !ruby/object:Gem::Requirement
257
257
  requirements:
258
258
  - - "~>"
259
259
  - !ruby/object:Gem::Version
260
- version: '3.2'
260
+ version: '3.4'
261
261
  - !ruby/object:Gem::Dependency
262
262
  name: rspec-expectations
263
263
  requirement: !ruby/object:Gem::Requirement
264
264
  requirements:
265
265
  - - "~>"
266
266
  - !ruby/object:Gem::Version
267
- version: '3.2'
267
+ version: '3.4'
268
268
  type: :runtime
269
269
  prerelease: false
270
270
  version_requirements: !ruby/object:Gem::Requirement
271
271
  requirements:
272
272
  - - "~>"
273
273
  - !ruby/object:Gem::Version
274
- version: '3.2'
274
+ version: '3.4'
275
275
  - !ruby/object:Gem::Dependency
276
276
  name: rspec-mocks
277
277
  requirement: !ruby/object:Gem::Requirement
278
278
  requirements:
279
279
  - - "~>"
280
280
  - !ruby/object:Gem::Version
281
- version: '3.2'
281
+ version: '3.4'
282
282
  type: :runtime
283
283
  prerelease: false
284
284
  version_requirements: !ruby/object:Gem::Requirement
285
285
  requirements:
286
286
  - - "~>"
287
287
  - !ruby/object:Gem::Version
288
- version: '3.2'
288
+ version: '3.4'
289
289
  - !ruby/object:Gem::Dependency
290
290
  name: rspec_junit_formatter
291
291
  requirement: !ruby/object:Gem::Requirement
@@ -342,6 +342,20 @@ dependencies:
342
342
  - - "~>"
343
343
  - !ruby/object:Gem::Version
344
344
  version: '1.6'
345
+ - !ruby/object:Gem::Dependency
346
+ name: proxifier
347
+ requirement: !ruby/object:Gem::Requirement
348
+ requirements:
349
+ - - "~>"
350
+ - !ruby/object:Gem::Version
351
+ version: '1.0'
352
+ type: :runtime
353
+ prerelease: false
354
+ version_requirements: !ruby/object:Gem::Requirement
355
+ requirements:
356
+ - - "~>"
357
+ - !ruby/object:Gem::Version
358
+ version: '1.0'
345
359
  - !ruby/object:Gem::Dependency
346
360
  name: rack
347
361
  requirement: !ruby/object:Gem::Requirement
@@ -444,16 +458,16 @@ dependencies:
444
458
  name: win32-eventlog
445
459
  requirement: !ruby/object:Gem::Requirement
446
460
  requirements:
447
- - - "~>"
461
+ - - '='
448
462
  - !ruby/object:Gem::Version
449
- version: 0.6.2
463
+ version: 0.6.3
450
464
  type: :runtime
451
465
  prerelease: false
452
466
  version_requirements: !ruby/object:Gem::Requirement
453
467
  requirements:
454
- - - "~>"
468
+ - - '='
455
469
  - !ruby/object:Gem::Version
456
- version: 0.6.2
470
+ version: 0.6.3
457
471
  - !ruby/object:Gem::Dependency
458
472
  name: win32-mmap
459
473
  requirement: !ruby/object:Gem::Requirement
@@ -488,14 +502,14 @@ dependencies:
488
502
  requirements:
489
503
  - - "~>"
490
504
  - !ruby/object:Gem::Version
491
- version: 0.7.5
505
+ version: 0.8.2
492
506
  type: :runtime
493
507
  prerelease: false
494
508
  version_requirements: !ruby/object:Gem::Requirement
495
509
  requirements:
496
510
  - - "~>"
497
511
  - !ruby/object:Gem::Version
498
- version: 0.7.5
512
+ version: 0.8.2
499
513
  - !ruby/object:Gem::Dependency
500
514
  name: win32-service
501
515
  requirement: !ruby/object:Gem::Requirement
@@ -568,6 +582,8 @@ files:
568
582
  - bin/chef-solo
569
583
  - bin/chef-windows-service
570
584
  - bin/knife
585
+ - chef-windows.gemspec
586
+ - chef.gemspec
571
587
  - distro/common/html/_sources/ctl_chef_client.txt
572
588
  - distro/common/html/_sources/ctl_chef_server.txt
573
589
  - distro/common/html/_sources/ctl_chef_shell.txt
@@ -854,7 +870,10 @@ files:
854
870
  - lib/chef/digester.rb
855
871
  - lib/chef/dsl.rb
856
872
  - lib/chef/dsl/audit.rb
873
+ - lib/chef/dsl/chef_provisioning.rb
874
+ - lib/chef/dsl/cheffish.rb
857
875
  - lib/chef/dsl/data_query.rb
876
+ - lib/chef/dsl/declare_resource.rb
858
877
  - lib/chef/dsl/definitions.rb
859
878
  - lib/chef/dsl/include_attribute.rb
860
879
  - lib/chef/dsl/include_recipe.rb
@@ -1103,10 +1122,13 @@ files:
1103
1122
  - lib/chef/mixin/path_sanity.rb
1104
1123
  - lib/chef/mixin/powershell_out.rb
1105
1124
  - lib/chef/mixin/powershell_type_coercions.rb
1125
+ - lib/chef/mixin/properties.rb
1106
1126
  - lib/chef/mixin/provides.rb
1127
+ - lib/chef/mixin/proxified_socket.rb
1107
1128
  - lib/chef/mixin/recipe_definition_dsl_core.rb
1108
1129
  - lib/chef/mixin/securable.rb
1109
1130
  - lib/chef/mixin/shell_out.rb
1131
+ - lib/chef/mixin/subclass_directive.rb
1110
1132
  - lib/chef/mixin/template.rb
1111
1133
  - lib/chef/mixin/unformatter.rb
1112
1134
  - lib/chef/mixin/uris.rb
@@ -1214,7 +1236,9 @@ files:
1214
1236
  - lib/chef/provider/package/smartos.rb
1215
1237
  - lib/chef/provider/package/solaris.rb
1216
1238
  - lib/chef/provider/package/windows.rb
1239
+ - lib/chef/provider/package/windows/exe.rb
1217
1240
  - lib/chef/provider/package/windows/msi.rb
1241
+ - lib/chef/provider/package/windows/registry_uninstall_entry.rb
1218
1242
  - lib/chef/provider/package/yum-dump.py
1219
1243
  - lib/chef/provider/package/yum.rb
1220
1244
  - lib/chef/provider/package/zypper.rb
@@ -1303,6 +1327,7 @@ files:
1303
1327
  - lib/chef/resource/http_request.rb
1304
1328
  - lib/chef/resource/ifconfig.rb
1305
1329
  - lib/chef/resource/ips_package.rb
1330
+ - lib/chef/resource/ksh.rb
1306
1331
  - lib/chef/resource/link.rb
1307
1332
  - lib/chef/resource/log.rb
1308
1333
  - lib/chef/resource/lwrp_base.rb
@@ -1423,6 +1448,7 @@ files:
1423
1448
  - lib/chef/win32/eventlog.rb
1424
1449
  - lib/chef/win32/file.rb
1425
1450
  - lib/chef/win32/file/info.rb
1451
+ - lib/chef/win32/file/version_info.rb
1426
1452
  - lib/chef/win32/handle.rb
1427
1453
  - lib/chef/win32/memory.rb
1428
1454
  - lib/chef/win32/mutex.rb
@@ -1454,6 +1480,25 @@ files:
1454
1480
  - spec/data/apt/chef-integration-test-1.1/debian/files
1455
1481
  - spec/data/apt/chef-integration-test-1.1/debian/rules
1456
1482
  - spec/data/apt/chef-integration-test-1.1/debian/source/format
1483
+ - spec/data/apt/chef-integration-test2-1.0/debian/changelog
1484
+ - spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.debhelper.log
1485
+ - spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2.substvars
1486
+ - spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/conffiles
1487
+ - spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/control
1488
+ - spec/data/apt/chef-integration-test2-1.0/debian/chef-integration-test2/DEBIAN/md5sums
1489
+ - spec/data/apt/chef-integration-test2-1.0/debian/compat
1490
+ - spec/data/apt/chef-integration-test2-1.0/debian/conffiles
1491
+ - spec/data/apt/chef-integration-test2-1.0/debian/control
1492
+ - spec/data/apt/chef-integration-test2-1.0/debian/copyright
1493
+ - spec/data/apt/chef-integration-test2-1.0/debian/files
1494
+ - spec/data/apt/chef-integration-test2-1.0/debian/rules
1495
+ - spec/data/apt/chef-integration-test2-1.0/debian/source/format
1496
+ - spec/data/apt/chef-integration-test2_1.0-1.debian.tar.gz
1497
+ - spec/data/apt/chef-integration-test2_1.0-1.dsc
1498
+ - spec/data/apt/chef-integration-test2_1.0-1_amd64.build
1499
+ - spec/data/apt/chef-integration-test2_1.0-1_amd64.changes
1500
+ - spec/data/apt/chef-integration-test2_1.0-1_amd64.deb
1501
+ - spec/data/apt/chef-integration-test2_1.0.orig.tar.gz
1457
1502
  - spec/data/apt/chef-integration-test_1.0-1_amd64.changes
1458
1503
  - spec/data/apt/chef-integration-test_1.0-1_amd64.deb
1459
1504
  - spec/data/apt/chef-integration-test_1.0.orig.tar.gz
@@ -1758,6 +1803,7 @@ files:
1758
1803
  - spec/functional/resource/cron_spec.rb
1759
1804
  - spec/functional/resource/deploy_revision_spec.rb
1760
1805
  - spec/functional/resource/directory_spec.rb
1806
+ - spec/functional/resource/dpkg_package_spec.rb
1761
1807
  - spec/functional/resource/dsc_resource_spec.rb
1762
1808
  - spec/functional/resource/dsc_script_spec.rb
1763
1809
  - spec/functional/resource/env_spec.rb
@@ -1780,6 +1826,7 @@ files:
1780
1826
  - spec/functional/resource/user/dscl_spec.rb
1781
1827
  - spec/functional/resource/user/useradd_spec.rb
1782
1828
  - spec/functional/resource/user/windows_spec.rb
1829
+ - spec/functional/resource/windows_package_spec.rb
1783
1830
  - spec/functional/resource/windows_service_spec.rb
1784
1831
  - spec/functional/rest_spec.rb
1785
1832
  - spec/functional/run_lock_spec.rb
@@ -1793,6 +1840,7 @@ files:
1793
1840
  - spec/functional/win32/security_spec.rb
1794
1841
  - spec/functional/win32/service_manager_spec.rb
1795
1842
  - spec/functional/win32/sid_spec.rb
1843
+ - spec/functional/win32/version_info_spec.rb
1796
1844
  - spec/functional/win32/versions_spec.rb
1797
1845
  - spec/integration/client/client_spec.rb
1798
1846
  - spec/integration/client/ipv6_spec.rb
@@ -1842,10 +1890,6 @@ files:
1842
1890
  - spec/support/matchers/leak.rb
1843
1891
  - spec/support/mock/constant.rb
1844
1892
  - spec/support/mock/platform.rb
1845
- - spec/support/pedant/Gemfile
1846
- - spec/support/pedant/pedant_config.rb
1847
- - spec/support/pedant/run_pedant.rb
1848
- - spec/support/pedant/stickywicket.pem
1849
1893
  - spec/support/platform_helpers.rb
1850
1894
  - spec/support/platforms/prof/gc.rb
1851
1895
  - spec/support/platforms/prof/win32.rb
@@ -1904,6 +1948,7 @@ files:
1904
1948
  - spec/unit/chef_fs/data_handler/group_handler_spec.rb
1905
1949
  - spec/unit/chef_fs/diff_spec.rb
1906
1950
  - spec/unit/chef_fs/file_pattern_spec.rb
1951
+ - spec/unit/chef_fs/file_system/cookbook_subdir_spec.rb
1907
1952
  - spec/unit/chef_fs/file_system/operation_failed_error_spec.rb
1908
1953
  - spec/unit/chef_fs/file_system_spec.rb
1909
1954
  - spec/unit/chef_fs/parallelizer.rb
@@ -2092,8 +2137,11 @@ files:
2092
2137
  - spec/unit/mixin/path_sanity_spec.rb
2093
2138
  - spec/unit/mixin/powershell_out_spec.rb
2094
2139
  - spec/unit/mixin/powershell_type_coercions_spec.rb
2140
+ - spec/unit/mixin/properties_spec.rb
2141
+ - spec/unit/mixin/proxified_socket_spec.rb
2095
2142
  - spec/unit/mixin/securable_spec.rb
2096
2143
  - spec/unit/mixin/shell_out_spec.rb
2144
+ - spec/unit/mixin/subclass_directive_spec.rb
2097
2145
  - spec/unit/mixin/template_spec.rb
2098
2146
  - spec/unit/mixin/unformatter_spec.rb
2099
2147
  - spec/unit/mixin/uris_spec.rb
@@ -2173,12 +2221,12 @@ files:
2173
2221
  - spec/unit/provider/package/rubygems_spec.rb
2174
2222
  - spec/unit/provider/package/smartos_spec.rb
2175
2223
  - spec/unit/provider/package/solaris_spec.rb
2224
+ - spec/unit/provider/package/windows/exe_spec.rb
2176
2225
  - spec/unit/provider/package/windows/msi_spec.rb
2177
2226
  - spec/unit/provider/package/windows_spec.rb
2178
2227
  - spec/unit/provider/package/yum_spec.rb
2179
2228
  - spec/unit/provider/package/zypper_spec.rb
2180
2229
  - spec/unit/provider/package_spec.rb
2181
- - spec/unit/provider/package_spec.rbe
2182
2230
  - spec/unit/provider/powershell_script_spec.rb
2183
2231
  - spec/unit/provider/registry_key_spec.rb
2184
2232
  - spec/unit/provider/remote_directory_spec.rb
@@ -2255,6 +2303,7 @@ files:
2255
2303
  - spec/unit/resource/http_request_spec.rb
2256
2304
  - spec/unit/resource/ifconfig_spec.rb
2257
2305
  - spec/unit/resource/ips_package_spec.rb
2306
+ - spec/unit/resource/ksh_spec.rb
2258
2307
  - spec/unit/resource/link_spec.rb
2259
2308
  - spec/unit/resource/log_spec.rb
2260
2309
  - spec/unit/resource/macports_package_spec.rb