chef 13.0.118 → 13.1.31

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -27
  3. data/VERSION +1 -1
  4. data/acceptance/.bundle/config +2 -0
  5. data/acceptance/basics/test/integration/chef-current-install/serverspec/chef_client_spec.rb +1 -1
  6. data/acceptance/bin/aws.rb +17 -0
  7. data/acceptance/bin/berks +17 -0
  8. data/acceptance/bin/bundler +17 -0
  9. data/acceptance/bin/chef-acceptance +17 -0
  10. data/acceptance/bin/coderay +17 -0
  11. data/acceptance/bin/erubis +17 -0
  12. data/acceptance/bin/htmldiff +17 -0
  13. data/acceptance/bin/httpclient +17 -0
  14. data/acceptance/bin/inspec +17 -0
  15. data/acceptance/bin/kitchen +17 -0
  16. data/acceptance/bin/ldiff +17 -0
  17. data/acceptance/bin/nokogiri +17 -0
  18. data/acceptance/bin/pry +17 -0
  19. data/acceptance/bin/rake +17 -0
  20. data/acceptance/bin/rspec +17 -0
  21. data/acceptance/bin/rwinrm +17 -0
  22. data/acceptance/bin/rwinrmcp +17 -0
  23. data/acceptance/bin/safe_yaml +17 -0
  24. data/acceptance/bin/thor +17 -0
  25. data/acceptance/fips/.kitchen/fips-unit-functional-centos-6.yml +7 -0
  26. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/.vagrant/machines/default/virtualbox/action_set_name +1 -0
  27. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/.vagrant/machines/default/virtualbox/creator_uid +1 -0
  28. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/.vagrant/machines/default/virtualbox/id +1 -0
  29. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/.vagrant/machines/default/virtualbox/index_uuid +1 -0
  30. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/.vagrant/machines/default/virtualbox/private_key +27 -0
  31. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/.vagrant/machines/default/virtualbox/synced_folders +1 -0
  32. data/acceptance/fips/.kitchen/kitchen-vagrant/kitchen-fips-fips-unit-functional-centos-6/Vagrantfile +11 -0
  33. data/acceptance/fips/.kitchen/logs/fips-integration-centos-6.log +0 -0
  34. data/acceptance/fips/.kitchen/logs/fips-integration-windows-2012r2.log +0 -0
  35. data/acceptance/fips/.kitchen/logs/fips-unit-functional-centos-6.log +80 -0
  36. data/acceptance/fips/.kitchen/logs/kitchen.log +4 -0
  37. data/chef.gemspec +1 -1
  38. data/lib/chef/application/client.rb +1 -1
  39. data/lib/chef/application/knife.rb +1 -1
  40. data/lib/chef/application/solo.rb +1 -0
  41. data/lib/chef/cookbook/remote_file_vendor.rb +1 -1
  42. data/lib/chef/cookbook/synchronizer.rb +20 -7
  43. data/lib/chef/cookbook_manifest.rb +8 -0
  44. data/lib/chef/deprecated.rb +10 -0
  45. data/lib/chef/knife/client_key_create.rb +3 -0
  46. data/lib/chef/knife/client_key_delete.rb +1 -0
  47. data/lib/chef/knife/client_key_edit.rb +1 -0
  48. data/lib/chef/knife/client_key_list.rb +1 -0
  49. data/lib/chef/knife/client_key_show.rb +1 -0
  50. data/lib/chef/knife/user_key_create.rb +1 -0
  51. data/lib/chef/knife/user_key_delete.rb +1 -0
  52. data/lib/chef/knife/user_key_edit.rb +1 -0
  53. data/lib/chef/knife/user_key_list.rb +1 -0
  54. data/lib/chef/knife/user_key_show.rb +1 -0
  55. data/lib/chef/local_mode.rb +1 -0
  56. data/lib/chef/mixin/which.rb +1 -1
  57. data/lib/chef/platform/service_helpers.rb +1 -1
  58. data/lib/chef/provider/apt_repository.rb +7 -4
  59. data/lib/chef/provider/execute.rb +1 -1
  60. data/lib/chef/provider/package/cab.rb +18 -13
  61. data/lib/chef/provider/package/msu.rb +2 -2
  62. data/lib/chef/provider/package/rubygems.rb +3 -5
  63. data/lib/chef/provider/user/aix.rb +1 -1
  64. data/lib/chef/provider/user/windows.rb +1 -1
  65. data/lib/chef/providers.rb +0 -1
  66. data/lib/chef/resource/breakpoint.rb +12 -0
  67. data/lib/chef/resource/env.rb +3 -35
  68. data/lib/chef/resource/route.rb +13 -107
  69. data/lib/chef/resource/service.rb +5 -5
  70. data/lib/chef/resource/user.rb +6 -4
  71. data/lib/chef/resource/windows_task.rb +3 -3
  72. data/lib/chef/run_context.rb +7 -0
  73. data/lib/chef/runner.rb +2 -1
  74. data/lib/chef/version.rb +1 -1
  75. data/spec/functional/resource/chocolatey_package_spec.rb +1 -8
  76. data/spec/functional/resource/registry_spec.rb +1 -1
  77. data/spec/functional/resource/user/useradd_spec.rb +1 -1
  78. data/spec/functional/resource/windows_task_spec.rb +459 -0
  79. data/spec/integration/client/client_spec.rb +32 -0
  80. data/spec/spec_helper.rb +2 -0
  81. data/spec/support/platform_helpers.rb +7 -0
  82. data/spec/support/shared/unit/provider/useradd_based_user_provider.rb +3 -3
  83. data/spec/unit/cookbook/synchronizer_spec.rb +5 -4
  84. data/spec/unit/cookbook_manifest_spec.rb +17 -2
  85. data/spec/unit/provider/env_spec.rb +2 -2
  86. data/spec/unit/provider/group/dscl_spec.rb +2 -2
  87. data/spec/unit/provider/group/pw_spec.rb +3 -3
  88. data/spec/unit/provider/group/usermod_spec.rb +6 -6
  89. data/spec/unit/provider/group/windows_spec.rb +3 -3
  90. data/spec/unit/provider/group_spec.rb +4 -4
  91. data/spec/unit/provider/http_request_spec.rb +1 -1
  92. data/spec/unit/provider/package/aix_spec.rb +2 -2
  93. data/spec/unit/provider/package/apt_spec.rb +2 -2
  94. data/spec/unit/provider/package/ips_spec.rb +2 -2
  95. data/spec/unit/provider/package/macports_spec.rb +4 -4
  96. data/spec/unit/provider/package/pacman_spec.rb +2 -2
  97. data/spec/unit/provider/package/rubygems_spec.rb +14 -11
  98. data/spec/unit/provider/package/yum_spec.rb +10 -10
  99. data/spec/unit/provider/route_spec.rb +7 -7
  100. data/spec/unit/provider/service/arch_service_spec.rb +6 -6
  101. data/spec/unit/provider/service/init_service_spec.rb +2 -2
  102. data/spec/unit/provider/service/invokercd_service_spec.rb +1 -1
  103. data/spec/unit/provider/service/simple_service_spec.rb +1 -1
  104. data/spec/unit/provider/service/upstart_service_spec.rb +5 -5
  105. data/spec/unit/provider/service_spec.rb +1 -1
  106. data/spec/unit/provider/user/aix_spec.rb +97 -0
  107. data/spec/unit/provider/user/pw_spec.rb +5 -5
  108. data/spec/unit/provider/user_spec.rb +1 -1
  109. data/spec/unit/provider_resolver_spec.rb +11 -11
  110. data/spec/unit/resource/breakpoint_spec.rb +28 -11
  111. data/spec/unit/resource/windows_task_spec.rb +2 -2
  112. data/spec/unit/runner_spec.rb +4 -0
  113. data/tasks/bin/run_external_test +20 -42
  114. data/tasks/bundle.rb +0 -8
  115. data/tasks/changelog.rb +5 -1
  116. data/tasks/dependencies.rb +4 -2
  117. metadata +80 -19
  118. data/acceptance/fips/.acceptance/acceptance-cookbook/.gitignore +0 -2
  119. data/acceptance/fips/.acceptance/acceptance-cookbook/metadata.rb +0 -2
  120. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/destroy.rb +0 -1
  121. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/provision.rb +0 -1
  122. data/acceptance/fips/.acceptance/acceptance-cookbook/recipes/verify.rb +0 -1
  123. data/acceptance/fips/.kitchen.yml +0 -8
  124. data/acceptance/fips/test/integration/fips-integration/serverspec/Gemfile +0 -9
  125. data/acceptance/fips/test/integration/fips-integration/serverspec/fips-integration_spec.rb +0 -52
  126. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/Gemfile +0 -7
  127. data/acceptance/fips/test/integration/fips-unit-functional/serverspec/fips-unit-functional_spec.rb +0 -56
  128. data/lib/chef/provider/breakpoint.rb +0 -38
  129. data/spec/unit/provider/breakpoint_spec.rb +0 -53
  130. data/tasks/bin/create-override-gemfile +0 -110
  131. data/tasks/gemfile_util.rb +0 -390
@@ -306,6 +306,7 @@ local_mode true
306
306
  cookbook_path "#{path_to('cookbooks')}"
307
307
  EOM
308
308
  result = shell_out!("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default' -z --profile-ruby", :cwd => chef_dir)
309
+ result.error!
309
310
  expect(File.exist?(path_to("config/local-mode-cache/cache/graph_profile.out"))).to be true
310
311
  end
311
312
 
@@ -315,6 +316,7 @@ local_mode true
315
316
  cookbook_path "#{path_to('cookbooks')}"
316
317
  EOM
317
318
  result = shell_out!("#{chef_client} -c \"#{path_to('config/client.rb')}\" -o 'x::default' -z", :cwd => chef_dir)
319
+ result.error!
318
320
  expect(File.exist?(path_to("config/local-mode-cache/cache/graph_profile.out"))).to be false
319
321
  end
320
322
  end
@@ -464,6 +466,36 @@ end
464
466
  end
465
467
  end
466
468
 
469
+ when_the_repository "has a cookbook that deploys a file" do
470
+ before do
471
+ file "cookbooks/x/recipes/default.rb", <<-RECIPE
472
+ cookbook_file #{path_to('tempfile.txt').inspect} do
473
+ source "my_file"
474
+ end
475
+ RECIPE
476
+
477
+ file "cookbooks/x/files/my_file", <<-FILE
478
+ this is my file
479
+ FILE
480
+ end
481
+
482
+ [true, false].each do |lazy|
483
+ context "with no_lazy_load set to #{lazy}" do
484
+ it "should create the file" do
485
+ file "config/client.rb", <<EOM
486
+ no_lazy_load #{lazy}
487
+ local_mode true
488
+ cookbook_path "#{path_to('cookbooks')}"
489
+ EOM
490
+ result = shell_out("#{chef_client} -l debug -c \"#{path_to('config/client.rb')}\" -o 'x::default' --no-fork", :cwd => chef_dir)
491
+ result.error!
492
+
493
+ expect(IO.read(path_to("tempfile.txt")).strip).to eq("this is my file")
494
+ end
495
+ end
496
+ end
497
+ end
498
+
467
499
  when_the_repository "has a cookbook with an ohai plugin" do
468
500
  before do
469
501
  file "cookbooks/x/recipes/default.rb", <<-RECIPE
@@ -182,6 +182,8 @@ RSpec.configure do |config|
182
182
  config.filter_run_excluding chef: DependencyProc.with(Chef::VERSION)
183
183
  config.filter_run_excluding ruby: DependencyProc.with(RUBY_VERSION)
184
184
 
185
+ config.filter_run_excluding :choco_installed => true unless choco_installed?
186
+
185
187
  running_platform_arch = `uname -m`.strip unless windows?
186
188
 
187
189
  config.filter_run_excluding :arch => lambda { |target_arch|
@@ -2,9 +2,11 @@ require "fcntl"
2
2
  require "chef/mixin/shell_out"
3
3
  require "ohai/mixin/http_helper"
4
4
  require "ohai/mixin/gce_metadata"
5
+ require "chef/mixin/powershell_out"
5
6
 
6
7
  class ShellHelpers
7
8
  extend Chef::Mixin::ShellOut
9
+ extend Chef::Mixin::PowershellOut
8
10
  end
9
11
 
10
12
  # magic stolen from bundler/spec/support/less_than_proc.rb
@@ -231,3 +233,8 @@ def gce?
231
233
  rescue SocketError
232
234
  false
233
235
  end
236
+
237
+ def choco_installed?
238
+ result = ShellHelpers.powershell_out("choco --version")
239
+ result.stderr.empty? ? true : false
240
+ end
@@ -75,9 +75,9 @@ shared_examples_for "a useradd-based user provider" do |supported_useradd_option
75
75
  end
76
76
 
77
77
  it "should set the option for #{attribute} if the new resources #{attribute} is not nil, without homedir management (using real attributes)" do
78
- allow(@new_resource).to receive(:manage_home).and_return(false)
79
- allow(@new_resource).to receive(:non_unique).and_return(false)
80
- allow(@new_resource).to receive(:non_unique).and_return(false)
78
+ @new_resource.manage_home(false)
79
+ @new_resource.non_unique(false)
80
+ @new_resource.non_unique(false)
81
81
  allow(@new_resource).to receive(attribute).and_return("hola")
82
82
  expect(provider.universal_options).to eql([option, "hola"])
83
83
  end
@@ -118,6 +118,7 @@ describe Chef::CookbookSynchronizer do
118
118
 
119
119
  let(:synchronizer) do
120
120
  Chef::Config[:no_lazy_load] = no_lazy_load
121
+ Chef::Config[:file_cache_path] = "/file-cache"
121
122
  Chef::CookbookSynchronizer.new(cookbook_manifest, events)
122
123
  end
123
124
 
@@ -292,7 +293,7 @@ describe Chef::CookbookSynchronizer do
292
293
  # Current file has fff000, want abc123
293
294
  expect(Chef::CookbookVersion).to receive(:checksum_cookbook_file).
294
295
  with("/file-cache/cookbooks/cookbook_a/recipes/default.rb").
295
- and_return("fff000")
296
+ and_return("fff000").at_least(:once)
296
297
 
297
298
  # Fetch and copy default.rb attribute file
298
299
  expect(server_api).to receive(:streaming_request).
@@ -308,7 +309,7 @@ describe Chef::CookbookSynchronizer do
308
309
  # Current file has fff000, want abc456
309
310
  expect(Chef::CookbookVersion).to receive(:checksum_cookbook_file).
310
311
  with("/file-cache/cookbooks/cookbook_a/attributes/default.rb").
311
- and_return("fff000")
312
+ and_return("fff000").at_least(:once)
312
313
  end
313
314
 
314
315
  def setup_no_lazy_files_and_templates_chksum_mismatch_expectations
@@ -365,12 +366,12 @@ describe Chef::CookbookSynchronizer do
365
366
  # Current file has abc123, want abc123
366
367
  expect(Chef::CookbookVersion).to receive(:checksum_cookbook_file).
367
368
  with("/file-cache/cookbooks/cookbook_a/recipes/default.rb").
368
- and_return("abc123")
369
+ and_return("abc123").at_least(:once)
369
370
 
370
371
  # Current file has abc456, want abc456
371
372
  expect(Chef::CookbookVersion).to receive(:checksum_cookbook_file).
372
373
  with("/file-cache/cookbooks/cookbook_a/attributes/default.rb").
373
- and_return("abc456")
374
+ and_return("abc456").at_least(:once)
374
375
 
375
376
  # :load called twice
376
377
  expect(file_cache).to receive(:load).
@@ -114,7 +114,7 @@ describe Chef::CookbookManifest do
114
114
 
115
115
  let(:match_md5) { /[0-9a-f]{32}/ }
116
116
 
117
- def map_to_file_specs(paths)
117
+ def map_to_file_specs(paths, full: false)
118
118
  paths.map do |path|
119
119
 
120
120
  relative_path = Pathname.new(path).relative_path_from(Pathname.new(cookbook_root)).to_s
@@ -131,7 +131,11 @@ describe Chef::CookbookManifest do
131
131
  "path" => relative_path,
132
132
  "checksum" => Chef::Digester.generate_md5_checksum_for_file(path),
133
133
  "specificity" => "default",
134
- }
134
+ }.tap do |fp|
135
+ if full
136
+ fp["full_path"] = path
137
+ end
138
+ end
135
139
  end
136
140
  end
137
141
 
@@ -163,6 +167,17 @@ describe Chef::CookbookManifest do
163
167
  end
164
168
  end
165
169
 
170
+ context ".each_file" do
171
+ it "yields all the files" do
172
+ files = map_to_file_specs(all_files, full: true)
173
+ expect(cookbook_manifest.to_enum(:each_file)).to match_array(files)
174
+ end
175
+
176
+ it "excludes certain file parts" do
177
+ files = map_to_file_specs(all_files, full: true).reject { |f| seg = f["name"].split("/")[0]; %w{ files templates }.include?(seg) }
178
+ expect(cookbook_manifest.to_enum(:each_file, excluded_parts: %w{ files templates })).to match_array(files)
179
+ end
180
+ end
166
181
  end
167
182
 
168
183
  describe "providing upstream URLs for save" do
@@ -183,12 +183,12 @@ describe Chef::Provider::Env do
183
183
  end
184
184
 
185
185
  it "should return true if the element is not found" do
186
- allow(@new_resource).to receive(:value).and_return("C:/baz/bin")
186
+ @new_resource.value("C:/baz/bin")
187
187
  expect(@provider.delete_element).to eql(true)
188
188
  end
189
189
 
190
190
  it "should return false if the delim not defined" do
191
- allow(@new_resource).to receive(:delim).and_return(nil)
191
+ @new_resource.delim(nil)
192
192
  expect(@provider.delete_element).to eql(false)
193
193
  end
194
194
 
@@ -182,8 +182,8 @@ describe Chef::Provider::Group::Dscl do
182
182
 
183
183
  describe "with existing members in the current resource and append set to false in the new resource" do
184
184
  before do
185
- allow(@new_resource).to receive(:members).and_return([])
186
- allow(@new_resource).to receive(:append).and_return(false)
185
+ @new_resource.members([])
186
+ @new_resource.append(false)
187
187
  allow(@current_resource).to receive(:members).and_return(%w{all your base})
188
188
  end
189
189
 
@@ -77,7 +77,7 @@ describe Chef::Provider::Group::Pw do
77
77
 
78
78
  describe "with an empty members array in both the new and current resource" do
79
79
  before do
80
- allow(@new_resource).to receive(:members).and_return([])
80
+ @new_resource.members([])
81
81
  allow(@current_resource).to receive(:members).and_return([])
82
82
  end
83
83
 
@@ -88,7 +88,7 @@ describe Chef::Provider::Group::Pw do
88
88
 
89
89
  describe "with an empty members array in the new resource and existing members in the current resource" do
90
90
  before do
91
- allow(@new_resource).to receive(:members).and_return([])
91
+ @new_resource.members([])
92
92
  allow(@current_resource).to receive(:members).and_return(%w{all your base})
93
93
  end
94
94
 
@@ -104,7 +104,7 @@ describe Chef::Provider::Group::Pw do
104
104
 
105
105
  describe "with supplied members array in the new resource and an empty members array in the current resource" do
106
106
  before do
107
- allow(@new_resource).to receive(:members).and_return(%w{all your base})
107
+ @new_resource.members(%w{all your base})
108
108
  allow(@current_resource).to receive(:members).and_return([])
109
109
  end
110
110
 
@@ -34,8 +34,8 @@ describe Chef::Provider::Group::Usermod do
34
34
 
35
35
  describe "with an empty members array" do
36
36
  before do
37
- allow(@new_resource).to receive(:append).and_return(true)
38
- allow(@new_resource).to receive(:members).and_return([])
37
+ @new_resource.append(true)
38
+ @new_resource.members([])
39
39
  end
40
40
 
41
41
  it "should log an appropriate message" do
@@ -56,7 +56,7 @@ describe Chef::Provider::Group::Usermod do
56
56
  }
57
57
 
58
58
  before do
59
- allow(@new_resource).to receive(:members).and_return(%w{all your base})
59
+ @new_resource.members(%w{all your base})
60
60
  allow(File).to receive(:exist?).and_return(true)
61
61
  end
62
62
 
@@ -73,8 +73,8 @@ describe Chef::Provider::Group::Usermod do
73
73
  @provider.load_current_resource
74
74
  @provider.instance_variable_set("@group_exists", true)
75
75
  @provider.action = :modify
76
- allow(@new_resource).to receive(:append).and_return(true)
77
- allow(@new_resource).to receive(:excluded_members).and_return(["someone"])
76
+ @new_resource.append(true)
77
+ @new_resource.excluded_members(["someone"])
78
78
  expect { @provider.run_action(@provider.process_resource_requirements) }.to raise_error(Chef::Exceptions::Group, "excluded_members is not supported by #{@provider}")
79
79
  end
80
80
 
@@ -84,7 +84,7 @@ describe Chef::Provider::Group::Usermod do
84
84
  current_resource.members([ ])
85
85
  @provider.current_resource = current_resource
86
86
  @node.automatic_attrs[:platform] = platform
87
- allow(@new_resource).to receive(:append).and_return(true)
87
+ @new_resource.append(true)
88
88
  expect(@provider).to receive(:shell_out!).with("usermod", *flags, "wheel", "all")
89
89
  expect(@provider).to receive(:shell_out!).with("usermod", *flags, "wheel", "your")
90
90
  expect(@provider).to receive(:shell_out!).with("usermod", *flags, "wheel", "base")
@@ -62,19 +62,19 @@ describe Chef::Provider::Group::Windows do
62
62
  end
63
63
 
64
64
  it "should call @net_group.local_set_members" do
65
- allow(@new_resource).to receive(:append).and_return(false)
65
+ @new_resource.append(false)
66
66
  expect(@net_group).to receive(:local_set_members).with(@new_resource.members)
67
67
  @provider.manage_group
68
68
  end
69
69
 
70
70
  it "should call @net_group.local_add_members" do
71
- allow(@new_resource).to receive(:append).and_return(true)
71
+ @new_resource.append(true)
72
72
  expect(@net_group).to receive(:local_add_members).with(@new_resource.members)
73
73
  @provider.manage_group
74
74
  end
75
75
 
76
76
  it "should call @net_group.local_delete_members" do
77
- allow(@new_resource).to receive(:append).and_return(true)
77
+ @new_resource.append(true)
78
78
  allow(@provider).to receive(:lookup_account_name).with("all").and_return("all")
79
79
  expect(@net_group).to receive(:local_delete_members).with(@new_resource.excluded_members)
80
80
  @provider.manage_group
@@ -103,26 +103,26 @@ describe Chef::Provider::User do
103
103
 
104
104
  it "should return false if append is true and the group member(s) already exists" do
105
105
  @current_resource.members << "extra_user"
106
- allow(@new_resource).to receive(:append).and_return(true)
106
+ @new_resource.append(true)
107
107
  expect(@provider.compare_group).to be_falsey
108
108
  end
109
109
 
110
110
  it "should return true if append is true and the group member(s) do not already exist" do
111
111
  @new_resource.members << "extra_user"
112
- allow(@new_resource).to receive(:append).and_return(true)
112
+ @new_resource.append(true)
113
113
  expect(@provider.compare_group).to be_truthy
114
114
  end
115
115
 
116
116
  it "should return false if append is true and excluded_members include a non existing member" do
117
117
  @new_resource.excluded_members << "extra_user"
118
- allow(@new_resource).to receive(:append).and_return(true)
118
+ @new_resource.append(true)
119
119
  expect(@provider.compare_group).to be_falsey
120
120
  end
121
121
 
122
122
  it "should return true if the append is true and excluded_members include an existing user" do
123
123
  @new_resource.members.each { |m| @new_resource.excluded_members << m }
124
124
  @new_resource.members.clear
125
- allow(@new_resource).to receive(:append).and_return(true)
125
+ @new_resource.append(true)
126
126
  expect(@provider.compare_group).to be_truthy
127
127
  end
128
128
 
@@ -73,7 +73,7 @@ describe Chef::Provider::HttpRequest do
73
73
  end
74
74
 
75
75
  it "should inflate a message block at runtime" do
76
- allow(@new_resource).to receive(:message).and_return(lambda { "return" })
76
+ @new_resource.message(lambda { "return" })
77
77
  expect(@http).to receive(:put).with("http://www.opscode.com/", "return", {})
78
78
  @provider.run_action(:put)
79
79
  expect(@new_resource).to be_updated
@@ -163,7 +163,7 @@ describe Chef::Provider::Package::Aix do
163
163
  end
164
164
 
165
165
  it "should run installp with -eLogfile option." do
166
- allow(@new_resource).to receive(:options).and_return("-e/tmp/installp.log")
166
+ @new_resource.options("-e/tmp/installp.log")
167
167
  expect(@provider).to receive(:shell_out!).with("installp", "-aYF", "-e/tmp/installp.log", "-d", "/tmp/samba.base", "samba.base", timeout: 900)
168
168
  @provider.install_package("samba.base", "3.3.12.0")
169
169
  end
@@ -176,7 +176,7 @@ describe Chef::Provider::Package::Aix do
176
176
  end
177
177
 
178
178
  it "should run installp -u -e/tmp/installp.log with options -e/tmp/installp.log" do
179
- allow(@new_resource).to receive(:options).and_return("-e/tmp/installp.log")
179
+ @new_resource.options("-e/tmp/installp.log")
180
180
  expect(@provider).to receive(:shell_out!).with("installp", "-u", "-e/tmp/installp.log", "samba.base", timeout: 900)
181
181
  @provider.remove_package("samba.base", "3.3.12.0")
182
182
  end
@@ -217,8 +217,8 @@ mpg123 1.12.1-0ubuntu1
217
217
  @new_resource = Chef::Resource::AptPackage.new("irssi", @run_context)
218
218
  @provider = Chef::Provider::Package::Apt.new(@new_resource, @run_context)
219
219
 
220
- allow(@new_resource).to receive(:default_release).and_return("lenny-backports")
221
- allow(@new_resource).to receive(:provider).and_return(nil)
220
+ @new_resource.default_release("lenny-backports")
221
+ @new_resource.provider(nil)
222
222
  expect(@provider).to receive(:shell_out!).with(
223
223
  "apt-cache", "-o", "APT::Default-Release=lenny-backports", "policy", "irssi",
224
224
  :env => { "DEBIAN_FRONTEND" => "noninteractive" },
@@ -134,7 +134,7 @@ INSTALLED
134
134
 
135
135
  it "raises an error if package fails to install" do
136
136
  expect(@provider).to receive(:shell_out!).with("pkg", "--no-refresh", "install", "-q", "crypto/gnupg@2.0.17", timeout: 900).and_raise(Mixlib::ShellOut::ShellCommandFailed)
137
- allow(@new_resource).to receive(:options).and_return("--no-refresh")
137
+ @new_resource.options("--no-refresh")
138
138
  expect { @provider.install_package("crypto/gnupg", "2.0.17") }.to raise_error(Mixlib::ShellOut::ShellCommandFailed)
139
139
  end
140
140
 
@@ -201,7 +201,7 @@ REMOTE
201
201
 
202
202
  context "when accept_license is true" do
203
203
  before do
204
- allow(@new_resource).to receive(:accept_license).and_return(true)
204
+ @new_resource.accept_license(true)
205
205
  end
206
206
 
207
207
  it "should run pkg install with the --accept flag" do
@@ -121,7 +121,7 @@ EOF
121
121
  it "should add options to the port command when specified" do
122
122
  expect(@current_resource).to receive(:version).and_return("4.1.6")
123
123
  @provider.current_resource = @current_resource
124
- allow(@new_resource).to receive(:options).and_return("-f")
124
+ @new_resource.options("-f")
125
125
  expect(@provider).to receive(:shell_out!).with("port", "-f", "install", "zsh", "@4.2.7", timeout: 900)
126
126
 
127
127
  @provider.install_package("zsh", "4.2.7")
@@ -140,7 +140,7 @@ EOF
140
140
  end
141
141
 
142
142
  it "should add options to the port command when specified" do
143
- allow(@new_resource).to receive(:options).and_return("-f")
143
+ @new_resource.options("-f")
144
144
  expect(@provider).to receive(:shell_out!).with("port", "-f", "uninstall", "zsh", "@4.2.7", timeout: 900)
145
145
  @provider.purge_package("zsh", "4.2.7")
146
146
  end
@@ -158,7 +158,7 @@ EOF
158
158
  end
159
159
 
160
160
  it "should add options to the port command when specified" do
161
- allow(@new_resource).to receive(:options).and_return("-f")
161
+ @new_resource.options("-f")
162
162
  expect(@provider).to receive(:shell_out!).with("port", "-f", "deactivate", "zsh", "@4.2.7", timeout: 900)
163
163
  @provider.remove_package("zsh", "4.2.7")
164
164
  end
@@ -191,7 +191,7 @@ EOF
191
191
  end
192
192
 
193
193
  it "should add options to the port command when specified" do
194
- allow(@new_resource).to receive(:options).and_return("-f")
194
+ @new_resource.options("-f")
195
195
  expect(@current_resource).to receive(:version).at_least(:once).and_return("4.1.6")
196
196
  @provider.current_resource = @current_resource
197
197
 
@@ -157,7 +157,7 @@ PACMAN_CONF
157
157
 
158
158
  it "should run pacman install with the package name and version and options if specified" do
159
159
  expect(@provider).to receive(:shell_out!).with("pacman", "--sync", "--noconfirm", "--noprogressbar", "--debug", "nano", { timeout: 900 })
160
- allow(@new_resource).to receive(:options).and_return("--debug")
160
+ @new_resource.options("--debug")
161
161
 
162
162
  @provider.install_package("nano", "1.0")
163
163
  end
@@ -178,7 +178,7 @@ PACMAN_CONF
178
178
 
179
179
  it "should run pacman remove with the package name and options if specified" do
180
180
  expect(@provider).to receive(:shell_out!).with("pacman", "--remove", "--noconfirm", "--noprogressbar", "--debug", "nano", { timeout: 900 })
181
- allow(@new_resource).to receive(:options).and_return("--debug")
181
+ @new_resource.options("--debug")
182
182
 
183
183
  @provider.remove_package("nano", "1.0")
184
184
  end
@@ -338,7 +338,7 @@ describe Chef::Provider::Package::Rubygems do
338
338
  let(:target_version) { nil }
339
339
  let(:gem_name) { "rspec-core" }
340
340
  let(:gem_binary) { nil }
341
- let(:bindir) { "/usr/bin/ruby" }
341
+ let(:bindir) { "/usr/bin" }
342
342
  let(:options) { nil }
343
343
  let(:source) { nil }
344
344
  let(:include_default_source) { true }
@@ -372,6 +372,8 @@ describe Chef::Provider::Package::Rubygems do
372
372
  allow(RbConfig::CONFIG).to receive(:[]).with("bindir").and_return(bindir)
373
373
  # Rubygems uses this interally
374
374
  allow(RbConfig::CONFIG).to receive(:[]).with("arch").and_call_original
375
+ allow(File).to receive(:executable?).and_return false
376
+ allow(File).to receive(:executable?).with("#{bindir}/gem").and_return true
375
377
  end
376
378
 
377
379
  describe "when new_resource version is nil" do
@@ -439,9 +441,9 @@ describe Chef::Provider::Package::Rubygems do
439
441
  it "searches for a gem binary when running on Omnibus on Unix" do
440
442
  platform_mock :unix do
441
443
  allow(ENV).to receive(:[]).with("PATH").and_return("/usr/bin:/usr/sbin:/opt/chef/embedded/bin")
442
- allow(File).to receive(:exist?).with("/usr/bin/gem").and_return(false)
443
- allow(File).to receive(:exist?).with("/usr/sbin/gem").and_return(true)
444
- allow(File).to receive(:exist?).with("/opt/chef/embedded/bin/gem").and_return(true) # should not get here
444
+ allow(File).to receive(:executable?).with("/usr/bin/gem").and_return(false)
445
+ allow(File).to receive(:executable?).with("/usr/sbin/gem").and_return(true)
446
+ allow(File).to receive(:executable?).with("/opt/chef/embedded/bin/gem").and_return(true) # should not get here
445
447
  expect(provider.gem_env.gem_binary_location).to eq("/usr/sbin/gem")
446
448
  end
447
449
  end
@@ -451,13 +453,14 @@ describe Chef::Provider::Package::Rubygems do
451
453
 
452
454
  it "searches for a gem binary when running on Omnibus on Windows" do
453
455
  platform_mock :windows do
454
- allow(ENV).to receive(:[]).with("PATH").and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin;d:\opscode\chef\embedded\bin')
455
- allow(File).to receive(:exist?).with('C:\\windows\\system32\\gem').and_return(false)
456
- allow(File).to receive(:exist?).with('C:\\windows\\gem').and_return(false)
457
- allow(File).to receive(:exist?).with('C:\\Ruby186\\bin\\gem').and_return(true)
458
- allow(File).to receive(:exist?).with('d:\\opscode\\chef\\bin\\gem').and_return(false) # should not get here
459
- allow(File).to receive(:exist?).with('d:\\opscode\\chef\\embedded\\bin\\gem').and_return(false) # should not get here
460
- expect(provider.gem_env.gem_binary_location).to eq('C:\Ruby186\bin\gem')
456
+ allow(ENV).to receive(:[]).with("PATH").and_return('C:\windows\system32;C:\windows;C:\Ruby186\bin')
457
+ allow(File).to receive(:executable?).with('C:\\windows\\system32/gem').and_return(false)
458
+ allow(File).to receive(:executable?).with('C:\\windows/gem').and_return(false)
459
+ allow(File).to receive(:executable?).with('C:\\Ruby186\\bin/gem').and_return(true)
460
+ allow(File).to receive(:executable?).with('d:\\opscode\\chef\\bin/gem').and_return(false) # should not get here
461
+ allow(File).to receive(:executable?).with('d:\\opscode\\chef\\bin/gem').and_return(false) # should not get here
462
+ allow(File).to receive(:executable?).with("d:/opscode/chef/embedded/bin/gem").and_return(false) # should not get here
463
+ expect(provider.gem_env.gem_binary_location).to eq('C:\Ruby186\bin/gem')
461
464
  end
462
465
  end
463
466
  end