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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -760,6 +760,13 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
760
760
  provider.dscl_create_comment
761
761
  end
762
762
 
763
+ it "sets the comment field to username" do
764
+ new_resource.comment nil
765
+ expect(provider).to receive(:run_dscl).with("create /Users/toor RealName '#mockssuck'").and_return(true)
766
+ provider.dscl_create_comment
767
+ expect(new_resource.comment).to eq("#mockssuck")
768
+ end
769
+
763
770
  it "should run run_dscl with create /Users/user PrimaryGroupID to set the users primary group" do
764
771
  expect(provider).to receive(:run_dscl).with("create /Users/toor PrimaryGroupID '1001'").and_return(true)
765
772
  provider.dscl_set_gid
@@ -789,6 +796,13 @@ ea18e18b720e358e7fbe3cfbeaa561456f6ba008937a30")
789
796
  expect { provider.dscl_set_gid }.to raise_error(Chef::Exceptions::GroupIDNotFound)
790
797
  end
791
798
  end
799
+
800
+ it "should set group ID to 20 if it's not specified" do
801
+ new_resource.gid nil
802
+ expect(provider).to receive(:run_dscl).with("create /Users/toor PrimaryGroupID '20'").ordered.and_return(true)
803
+ provider.dscl_set_gid
804
+ expect(new_resource.gid).to eq(20)
805
+ end
792
806
  end
793
807
 
794
808
  describe "when the user exists and chef is managing it" do
@@ -107,8 +107,8 @@ describe Chef::Provider::User::Windows do
107
107
  expect(@provider.set_options[:home_dir]).to eq('/home/adam')
108
108
  end
109
109
 
110
- it "marks the primary_group_id attribute to be updated" do
111
- expect(@provider.set_options[:primary_group_id]).to eq(1000)
110
+ it "ignores the primary_group_id attribute" do
111
+ expect(@provider.set_options[:primary_group_id]).to eq(nil)
112
112
  end
113
113
 
114
114
  it "marks the user_id attribute to be updated" do
@@ -452,11 +452,20 @@ describe Chef::Provider::User do
452
452
 
453
453
  it "should raise an error if we can't translate the group name during resource assertions" do
454
454
  expect(Etc).to receive(:getgrnam).and_raise(ArgumentError)
455
+ @provider.action = :create
455
456
  @provider.define_resource_requirements
456
457
  @provider.convert_group_name
457
458
  expect { @provider.process_resource_requirements }.to raise_error(Chef::Exceptions::User)
458
459
  end
459
460
 
461
+ it "does not raise an error if we can't translate the group name during resource assertions if we are removing the user" do
462
+ expect(Etc).to receive(:getgrnam).and_raise(ArgumentError)
463
+ @provider.action = :remove
464
+ @provider.define_resource_requirements
465
+ @provider.convert_group_name
466
+ expect { @provider.process_resource_requirements }.not_to raise_error
467
+ end
468
+
460
469
  it "should set the new resources gid to the integerized version if available" do
461
470
  expect(Etc).to receive(:getgrnam).with("999").and_return(@group)
462
471
  @provider.convert_group_name
@@ -147,25 +147,17 @@ describe Chef::ProviderResolver do
147
147
  services.each do |service|
148
148
  case service
149
149
  when :debian
150
- directory 'usr/sbin/update-rc.d'
150
+ file 'usr/sbin/update-rc.d', ''
151
151
  when :invokercd
152
- directory 'usr/sbin/invoke-rc.d'
152
+ file 'usr/sbin/invoke-rc.d', ''
153
153
  when :insserv
154
- directory 'sbin/insserv'
154
+ file 'sbin/insserv', ''
155
155
  when :upstart
156
- directory 'etc/init'
157
- directory 'sbin/start'
156
+ file 'sbin/initctl', ''
158
157
  when :redhat
159
- directory 'sbin/chkconfig'
158
+ file 'sbin/chkconfig', ''
160
159
  when :systemd
161
- file 'bin/systemctl', ''
162
- # Make systemctl executable
163
- File.chmod(0755, path_to('bin/systemctl'))
164
- # Windows doesn't respect executable bit, do this to let Windows users see if they've broken the resolver
165
- allow(::File).to receive(:executable?) { |p| p == path_to('bin/systemctl') } if windows?
166
160
  file 'proc/1/comm', "systemd\n"
167
- mock_shellout_command("/bin/systemctl --all", stdout: "")
168
- mock_shellout_command("/bin/systemctl list-unit-files", stdout: "")
169
161
  else
170
162
  raise ArgumentError, service
171
163
  end
@@ -186,24 +178,8 @@ describe Chef::ProviderResolver do
186
178
  when :usr_local_etc_rcd
187
179
  file "usr/local/etc/rc.d/#{service_name}", ""
188
180
  when :systemd
189
- file 'bin/systemctl', ''
190
- # Make systemctl executable
191
- File.chmod(0755, path_to("bin/systemctl"))
192
- # Windows doesn't respect executable bit, do this to let Windows users see if they've broken the resolver
193
- allow(::File).to receive(:executable?) { |p| p == path_to('bin/systemctl') } if windows?
194
181
  file 'proc/1/comm', "systemd\n"
195
- mock_shellout_command("/bin/systemctl --all", stdout: <<-EOM)
196
- superv loaded
197
- stinky something-else
198
- #{service_name} loaded
199
- blargh not-found
200
- EOM
201
- mock_shellout_command("/bin/systemctl list-unit-files", stdout: <<-EOM)
202
- usuperv loaded
203
- ustinky something-else
204
- u#{service_name} loaded
205
- ublargh not-found
206
- EOM
182
+ file "etc/systemd/system/#{service_name}.service", ""
207
183
  else
208
184
  raise ArgumentError, config
209
185
  end
@@ -3,7 +3,7 @@
3
3
  # Author:: Christopher Walters (<cw@opscode.com>)
4
4
  # Author:: Tim Hinderliter (<tim@opscode.com>)
5
5
  # Author:: Seth Chisamore (<schisamo@opscode.com>)
6
- # Copyright:: Copyright (c) 2008-2011 Opscode, Inc.
6
+ # Copyright:: Copyright (c) 2008-2015 Chef Software, Inc.
7
7
  # License:: Apache License, Version 2.0
8
8
  #
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -24,25 +24,19 @@ require 'chef/platform/resource_priority_map'
24
24
 
25
25
  describe Chef::Recipe do
26
26
 
27
- let(:cookbook_repo) { File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "cookbooks")) }
28
-
29
- let(:cookbook_loader) do
30
- loader = Chef::CookbookLoader.new(cookbook_repo)
31
- loader.load_cookbooks
32
- loader
27
+ let(:cookbook_collection) do
28
+ cookbook_repo = File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "cookbooks"))
29
+ cookbook_loader = Chef::CookbookLoader.new(cookbook_repo)
30
+ cookbook_loader.load_cookbooks
31
+ Chef::CookbookCollection.new(cookbook_loader)
33
32
  end
34
33
 
35
- let(:cookbook_collection) { Chef::CookbookCollection.new(cookbook_loader) }
36
-
37
34
  let(:node) do
38
- Chef::Node.new.tap {|n| n.normal[:tags] = [] }
39
- end
40
-
41
- let(:events) do
42
- Chef::EventDispatch::Dispatcher.new
35
+ Chef::Node.new
43
36
  end
44
37
 
45
38
  let(:run_context) do
39
+ events = Chef::EventDispatch::Dispatcher.new
46
40
  Chef::RunContext.new(node, cookbook_collection, events)
47
41
  end
48
42
 
@@ -305,6 +299,34 @@ describe Chef::Recipe do
305
299
  zm_resource # force let binding evaluation
306
300
  expect(run_context.resource_collection.resources(:zen_master => "klopp")).to eq(zm_resource)
307
301
  end
302
+
303
+ it "will insert another resource if create_if_missing is not set (cloned resource as of Chef-12)" do
304
+ zm_resource
305
+ recipe.declare_resource(:zen_master, "klopp")
306
+ expect(run_context.resource_collection.count).to eql(2)
307
+ end
308
+
309
+ it "does not insert two resources if create_if_missing is used" do
310
+ zm_resource
311
+ recipe.declare_resource(:zen_master, "klopp", create_if_missing: true)
312
+ expect(run_context.resource_collection.count).to eql(1)
313
+ end
314
+
315
+ context "injecting a different run_context" do
316
+ let(:run_context2) do
317
+ events = Chef::EventDispatch::Dispatcher.new
318
+ Chef::RunContext.new(node, cookbook_collection, events)
319
+ end
320
+
321
+ it "should insert resources into the correct run_context" do
322
+ zm_resource
323
+ recipe.declare_resource(:zen_master, "klopp2", run_context: run_context2)
324
+ run_context2.resource_collection.lookup("zen_master[klopp2]")
325
+ expect {run_context2.resource_collection.lookup("zen_master[klopp]")}.to raise_error(Chef::Exceptions::ResourceNotFound)
326
+ expect {run_context.resource_collection.lookup("zen_master[klopp2]")}.to raise_error(Chef::Exceptions::ResourceNotFound)
327
+ run_context.resource_collection.lookup("zen_master[klopp]")
328
+ end
329
+ end
308
330
  end
309
331
 
310
332
  describe "creating a resource with short name" do
@@ -615,21 +637,25 @@ describe Chef::Recipe do
615
637
  end
616
638
  end
617
639
 
640
+ it "should initialize tags to an empty Array" do
641
+ expect(node.tags).to eql([])
642
+ end
643
+
618
644
  it "should set tags via tag" do
619
645
  recipe.tag "foo"
620
- expect(node[:tags]).to include("foo")
646
+ expect(node.tags).to include("foo")
621
647
  end
622
648
 
623
649
  it "should set multiple tags via tag" do
624
650
  recipe.tag "foo", "bar"
625
- expect(node[:tags]).to include("foo")
626
- expect(node[:tags]).to include("bar")
651
+ expect(node.tags).to include("foo")
652
+ expect(node.tags).to include("bar")
627
653
  end
628
654
 
629
655
  it "should not set the same tag twice via tag" do
630
656
  recipe.tag "foo"
631
657
  recipe.tag "foo"
632
- expect(node[:tags]).to eql([ "foo" ])
658
+ expect(node.tags).to eql([ "foo" ])
633
659
  end
634
660
 
635
661
  it "should return the current list of tags from tag with no arguments" do
@@ -653,13 +679,13 @@ describe Chef::Recipe do
653
679
  it "should remove a tag from the tag list via untag" do
654
680
  recipe.tag "foo"
655
681
  recipe.untag "foo"
656
- expect(node[:tags]).to eql([])
682
+ expect(node.tags).to eql([])
657
683
  end
658
684
 
659
685
  it "should remove multiple tags from the tag list via untag" do
660
686
  recipe.tag "foo", "bar"
661
687
  recipe.untag "bar", "foo"
662
- expect(node[:tags]).to eql([])
688
+ expect(node.tags).to eql([])
663
689
  end
664
690
  end
665
691
 
@@ -52,7 +52,7 @@ describe Chef::Resource::ChefGem, "gem_binary" do
52
52
 
53
53
  context "when building the resource" do
54
54
  let(:node) do
55
- Chef::Node.new.tap {|n| n.normal[:tags] = [] }
55
+ Chef::Node.new
56
56
  end
57
57
 
58
58
  let(:run_context) do
@@ -15,13 +15,13 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
  #
18
-
19
18
  require 'spec_helper'
20
-
21
19
  describe Chef::Resource::DscResource do
22
20
  let(:dsc_test_resource_name) { 'DSCTest' }
23
21
  let(:dsc_test_property_name) { :DSCTestProperty }
24
22
  let(:dsc_test_property_value) { 'DSCTestValue' }
23
+ let(:dsc_test_reboot_action) { :reboot_now }
24
+ let(:dsc_test_timeout) { 101 }
25
25
 
26
26
  context 'when Powershell supports Dsc' do
27
27
  let(:dsc_test_run_context) {
@@ -30,6 +30,7 @@ describe Chef::Resource::DscResource do
30
30
  empty_events = Chef::EventDispatch::Dispatcher.new
31
31
  Chef::RunContext.new(node, {}, empty_events)
32
32
  }
33
+
33
34
  let(:dsc_test_resource) {
34
35
  Chef::Resource::DscResource.new(dsc_test_resource_name, dsc_test_run_context)
35
36
  }
@@ -38,7 +39,7 @@ describe Chef::Resource::DscResource do
38
39
  expect(dsc_test_resource.action).to eq([:run])
39
40
  end
40
41
 
41
- it "has an allowed_actions attribute with only the `:run` and `:nothing` attributes" do
42
+ it "has an ed_actions attribute with only the `:run` and `:nothing` attributes" do
42
43
  expect(dsc_test_resource.allowed_actions.to_set).to eq([:run,:nothing].to_set)
43
44
  end
44
45
 
@@ -52,6 +53,16 @@ describe Chef::Resource::DscResource do
52
53
  expect(dsc_test_resource.module_name).to eq(dsc_test_resource_name)
53
54
  end
54
55
 
56
+ it "allows the reboot_action attribute to be set" do
57
+ dsc_test_resource.reboot_action(dsc_test_reboot_action)
58
+ expect(dsc_test_resource.reboot_action).to eq(dsc_test_reboot_action)
59
+ end
60
+
61
+ it "allows the timeout attribute to be set" do
62
+ dsc_test_resource.timeout(dsc_test_timeout)
63
+ expect(dsc_test_resource.timeout).to eq(dsc_test_timeout)
64
+ end
65
+
55
66
  context "when setting a dsc property" do
56
67
  it "allows setting a dsc property with a property name of type Symbol" do
57
68
  dsc_test_resource.property(dsc_test_property_name, dsc_test_property_value)
@@ -0,0 +1,40 @@
1
+ #
2
+ # Author:: Nolan Davidson (<nolan.davidson@gmail.com>)
3
+ # Copyright:: Copyright (c) 2015 Chef Software, Inc.
4
+ # License:: Apache License, Version 2.0
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # Unless required by applicable law or agreed to in writing, software
13
+ # distributed under the License is distributed on an "AS IS" BASIS,
14
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ # See the License for the specific language governing permissions and
16
+ # limitations under the License.
17
+ #
18
+
19
+ require 'spec_helper'
20
+
21
+ describe Chef::Resource::Ksh do
22
+
23
+ before(:each) do
24
+ @resource = Chef::Resource::Ksh.new("fakey_fakerton")
25
+ end
26
+
27
+ it "should create a new Chef::Resource::Ksh" do
28
+ expect(@resource).to be_a_kind_of(Chef::Resource)
29
+ expect(@resource).to be_a_kind_of(Chef::Resource::Ksh)
30
+ end
31
+
32
+ it "should have a resource name of :ksh" do
33
+ expect(@resource.resource_name).to eql(:ksh)
34
+ end
35
+
36
+ it "should have an interpreter of ksh" do
37
+ expect(@resource.interpreter).to eql("ksh")
38
+ end
39
+
40
+ end
@@ -91,7 +91,7 @@ describe Chef::Resource::RegistryKey, "values" do
91
91
 
92
92
  it "should return checksummed data if the type is unsafe" do
93
93
  @resource.values( { :name => 'poosh', :type => :binary, :data => 255.chr * 1 })
94
- expect(@resource.values).to eql([ { :name => 'poosh', :type => :binary, :data => "00594fd4f42ba43fc1ca0427a0576295" } ])
94
+ expect(@resource.values).to eql([ { :name => 'poosh', :type => :binary, :data => 'a8100ae6aa1940d0b663bb31cd466142ebbdbd5187131b92d93818987832eb89' } ])
95
95
  end
96
96
 
97
97
  it "should throw an exception if the name field is missing" do
@@ -194,6 +194,6 @@ describe Chef::Resource::RegistryKey, "state" do
194
194
 
195
195
  it "should return scrubbed values" do
196
196
  @resource.values([ { :name => 'poosh', :type => :binary, :data => 255.chr * 1 } ])
197
- expect(@resource.state).to eql( { :values => [{ :name => 'poosh', :type => :binary, :data => "00594fd4f42ba43fc1ca0427a0576295" }] } )
197
+ expect(@resource.state).to eql( { :values => [{ :name => 'poosh', :type => :binary, :data => 'a8100ae6aa1940d0b663bb31cd466142ebbdbd5187131b92d93818987832eb89'}] } )
198
198
  end
199
199
  end
@@ -19,149 +19,148 @@ require 'spec_helper'
19
19
  require 'chef/resource/resource_notification'
20
20
 
21
21
  describe Chef::Resource::Notification do
22
- before do
23
- @notification = Chef::Resource::Notification.new(:service_apache, :restart, :template_httpd_conf)
24
- end
22
+
23
+ let(:notification) { Chef::Resource::Notification.new(:service_apache, :restart, :template_httpd_conf) }
25
24
 
26
25
  it "has a resource to be notified" do
27
- expect(@notification.resource).to eq(:service_apache)
26
+ expect(notification.resource).to eq(:service_apache)
28
27
  end
29
28
 
30
29
  it "has an action to take on the service" do
31
- expect(@notification.action).to eq(:restart)
30
+ expect(notification.action).to eq(:restart)
32
31
  end
33
32
 
34
33
  it "has a notifying resource" do
35
- expect(@notification.notifying_resource).to eq(:template_httpd_conf)
34
+ expect(notification.notifying_resource).to eq(:template_httpd_conf)
36
35
  end
37
36
 
38
37
  it "is a duplicate of another notification with the same target resource and action" do
39
38
  other = Chef::Resource::Notification.new(:service_apache, :restart, :sync_web_app_code)
40
- expect(@notification.duplicates?(other)).to be_truthy
39
+ expect(notification.duplicates?(other)).to be_truthy
41
40
  end
42
41
 
43
42
  it "is not a duplicate of another notification if the actions differ" do
44
43
  other = Chef::Resource::Notification.new(:service_apache, :enable, :install_apache)
45
- expect(@notification.duplicates?(other)).to be_falsey
44
+ expect(notification.duplicates?(other)).to be_falsey
46
45
  end
47
46
 
48
47
  it "is not a duplicate of another notification if the target resources differ" do
49
48
  other = Chef::Resource::Notification.new(:service_sshd, :restart, :template_httpd_conf)
50
- expect(@notification.duplicates?(other)).to be_falsey
49
+ expect(notification.duplicates?(other)).to be_falsey
51
50
  end
52
51
 
53
52
  it "raises an ArgumentError if you try to check a non-ducktype object for duplication" do
54
- expect {@notification.duplicates?(:not_a_notification)}.to raise_error(ArgumentError)
53
+ expect {notification.duplicates?(:not_a_notification)}.to raise_error(ArgumentError)
55
54
  end
56
55
 
57
56
  it "takes no action to resolve a resource reference that doesn't need to be resolved" do
58
57
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
59
- @notification.resource = @keyboard_cat
58
+ notification.resource = @keyboard_cat
60
59
  @long_cat = Chef::Resource::Cat.new("long_cat")
61
- @notification.notifying_resource = @long_cat
60
+ notification.notifying_resource = @long_cat
62
61
  @resource_collection = Chef::ResourceCollection.new
63
62
  # would raise an error since the resource is not in the collection
64
- @notification.resolve_resource_reference(@resource_collection)
65
- expect(@notification.resource).to eq(@keyboard_cat)
63
+ notification.resolve_resource_reference(@resource_collection)
64
+ expect(notification.resource).to eq(@keyboard_cat)
66
65
  end
67
66
 
68
67
  it "resolves a lazy reference to a resource" do
69
- @notification.resource = {:cat => "keyboard_cat"}
68
+ notification.resource = {:cat => "keyboard_cat"}
70
69
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
71
70
  @resource_collection = Chef::ResourceCollection.new
72
71
  @resource_collection << @keyboard_cat
73
72
  @long_cat = Chef::Resource::Cat.new("long_cat")
74
- @notification.notifying_resource = @long_cat
75
- @notification.resolve_resource_reference(@resource_collection)
76
- expect(@notification.resource).to eq(@keyboard_cat)
73
+ notification.notifying_resource = @long_cat
74
+ notification.resolve_resource_reference(@resource_collection)
75
+ expect(notification.resource).to eq(@keyboard_cat)
77
76
  end
78
77
 
79
78
  it "resolves a lazy reference to its notifying resource" do
80
79
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
81
- @notification.resource = @keyboard_cat
82
- @notification.notifying_resource = {:cat => "long_cat"}
80
+ notification.resource = @keyboard_cat
81
+ notification.notifying_resource = {:cat => "long_cat"}
83
82
  @long_cat = Chef::Resource::Cat.new("long_cat")
84
83
  @resource_collection = Chef::ResourceCollection.new
85
84
  @resource_collection << @long_cat
86
- @notification.resolve_resource_reference(@resource_collection)
87
- expect(@notification.notifying_resource).to eq(@long_cat)
85
+ notification.resolve_resource_reference(@resource_collection)
86
+ expect(notification.notifying_resource).to eq(@long_cat)
88
87
  end
89
88
 
90
89
  it "resolves lazy references to both its resource and its notifying resource" do
91
- @notification.resource = {:cat => "keyboard_cat"}
90
+ notification.resource = {:cat => "keyboard_cat"}
92
91
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
93
92
  @resource_collection = Chef::ResourceCollection.new
94
93
  @resource_collection << @keyboard_cat
95
- @notification.notifying_resource = {:cat => "long_cat"}
94
+ notification.notifying_resource = {:cat => "long_cat"}
96
95
  @long_cat = Chef::Resource::Cat.new("long_cat")
97
96
  @resource_collection << @long_cat
98
- @notification.resolve_resource_reference(@resource_collection)
99
- expect(@notification.resource).to eq(@keyboard_cat)
100
- expect(@notification.notifying_resource).to eq(@long_cat)
97
+ notification.resolve_resource_reference(@resource_collection)
98
+ expect(notification.resource).to eq(@keyboard_cat)
99
+ expect(notification.notifying_resource).to eq(@long_cat)
101
100
  end
102
101
 
103
102
  it "raises a RuntimeError if you try to reference multiple resources" do
104
- @notification.resource = {:cat => ["keyboard_cat", "cheez_cat"]}
103
+ notification.resource = {:cat => ["keyboard_cat", "cheez_cat"]}
105
104
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
106
105
  @cheez_cat = Chef::Resource::Cat.new("cheez_cat")
107
106
  @resource_collection = Chef::ResourceCollection.new
108
107
  @resource_collection << @keyboard_cat
109
108
  @resource_collection << @cheez_cat
110
109
  @long_cat = Chef::Resource::Cat.new("long_cat")
111
- @notification.notifying_resource = @long_cat
112
- expect {@notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
110
+ notification.notifying_resource = @long_cat
111
+ expect {notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
113
112
  end
114
113
 
115
114
  it "raises a RuntimeError if you try to reference multiple notifying resources" do
116
- @notification.notifying_resource = {:cat => ["long_cat", "cheez_cat"]}
115
+ notification.notifying_resource = {:cat => ["long_cat", "cheez_cat"]}
117
116
  @long_cat = Chef::Resource::Cat.new("long_cat")
118
117
  @cheez_cat = Chef::Resource::Cat.new("cheez_cat")
119
118
  @resource_collection = Chef::ResourceCollection.new
120
119
  @resource_collection << @long_cat
121
120
  @resource_collection << @cheez_cat
122
121
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
123
- @notification.resource = @keyboard_cat
124
- expect {@notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
122
+ notification.resource = @keyboard_cat
123
+ expect {notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
125
124
  end
126
125
 
127
126
  it "raises a RuntimeError if it can't find a resource in the resource collection when resolving a lazy reference" do
128
- @notification.resource = {:cat => "keyboard_cat"}
127
+ notification.resource = {:cat => "keyboard_cat"}
129
128
  @cheez_cat = Chef::Resource::Cat.new("cheez_cat")
130
129
  @resource_collection = Chef::ResourceCollection.new
131
130
  @resource_collection << @cheez_cat
132
131
  @long_cat = Chef::Resource::Cat.new("long_cat")
133
- @notification.notifying_resource = @long_cat
134
- expect {@notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
132
+ notification.notifying_resource = @long_cat
133
+ expect {notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
135
134
  end
136
135
 
137
136
  it "raises a RuntimeError if it can't find a notifying resource in the resource collection when resolving a lazy reference" do
138
- @notification.notifying_resource = {:cat => "long_cat"}
137
+ notification.notifying_resource = {:cat => "long_cat"}
139
138
  @cheez_cat = Chef::Resource::Cat.new("cheez_cat")
140
139
  @resource_collection = Chef::ResourceCollection.new
141
140
  @resource_collection << @cheez_cat
142
141
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
143
- @notification.resource = @keyboard_cat
144
- expect {@notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
142
+ notification.resource = @keyboard_cat
143
+ expect {notification.resolve_resource_reference(@resource_collection)}.to raise_error(RuntimeError)
145
144
  end
146
145
 
147
146
  it "raises an ArgumentError if improper syntax is used in the lazy reference to its resource" do
148
- @notification.resource = "cat => keyboard_cat"
147
+ notification.resource = "cat => keyboard_cat"
149
148
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
150
149
  @resource_collection = Chef::ResourceCollection.new
151
150
  @resource_collection << @keyboard_cat
152
151
  @long_cat = Chef::Resource::Cat.new("long_cat")
153
- @notification.notifying_resource = @long_cat
154
- expect {@notification.resolve_resource_reference(@resource_collection)}.to raise_error(ArgumentError)
152
+ notification.notifying_resource = @long_cat
153
+ expect {notification.resolve_resource_reference(@resource_collection)}.to raise_error(ArgumentError)
155
154
  end
156
155
 
157
156
  it "raises an ArgumentError if improper syntax is used in the lazy reference to its notifying resource" do
158
- @notification.notifying_resource = "cat => long_cat"
157
+ notification.notifying_resource = "cat => long_cat"
159
158
  @long_cat = Chef::Resource::Cat.new("long_cat")
160
159
  @resource_collection = Chef::ResourceCollection.new
161
160
  @resource_collection << @long_cat
162
161
  @keyboard_cat = Chef::Resource::Cat.new("keyboard_cat")
163
- @notification.resource = @keyboard_cat
164
- expect {@notification.resolve_resource_reference(@resource_collection)}.to raise_error(ArgumentError)
162
+ notification.resource = @keyboard_cat
163
+ expect {notification.resolve_resource_reference(@resource_collection)}.to raise_error(ArgumentError)
165
164
  end
166
165
 
167
166
  # Create test to resolve lazy references to both notifying resource and dest. resource