summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-12-15 11:05:11 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2014-12-15 11:05:11 -0800
commit04515013dc724d693c941592e696d366284c0de1 (patch)
tree7a9a1cf08555b3851dc542235814e8ed77430a86
parent3f178af707ac7112428c0f7d5e84d09d018c28ae (diff)
downloadchef-04515013dc724d693c941592e696d366284c0de1.tar.gz
fix apt default_release attribute broken in 12.0
the apt provider attempts to check if it has a provider that responds to :default_release (i.e. a real apt_package resource) via if the provider attribute is explicitly set or not, which is relying on a side-effect which broke in 12.0. the correct behavior is just to duck-type the new_resource object and see if it respond_to?(:default_release) and then use it if it does.
-rw-r--r--lib/chef/provider/package/apt.rb4
-rw-r--r--spec/unit/provider/package/apt_spec.rb6
-rw-r--r--spec/unit/resource/apt_package_spec.rb8
3 files changed, 8 insertions, 10 deletions
diff --git a/lib/chef/provider/package/apt.rb b/lib/chef/provider/package/apt.rb
index eb2c038eaa..15d1481cf1 100644
--- a/lib/chef/provider/package/apt.rb
+++ b/lib/chef/provider/package/apt.rb
@@ -46,8 +46,8 @@ class Chef
end
def default_release_options
- # Use apt::Default-Release option only if provider was explicitly defined
- "-o APT::Default-Release=#{@new_resource.default_release}" if @new_resource.provider && @new_resource.default_release
+ # Use apt::Default-Release option only if provider supports it
+ "-o APT::Default-Release=#{@new_resource.default_release}" if @new_resource.respond_to?(:default_release)
end
def check_package_state(package)
diff --git a/spec/unit/provider/package/apt_spec.rb b/spec/unit/provider/package/apt_spec.rb
index edca3e4c22..fdb8113826 100644
--- a/spec/unit/provider/package/apt_spec.rb
+++ b/spec/unit/provider/package/apt_spec.rb
@@ -178,12 +178,12 @@ SHOWPKG_STDOUT
expect { @provider.load_current_resource }.to raise_error(Chef::Exceptions::Package)
end
- it "should run apt-cache policy with the default_release option, if there is one and provider is explicitly defined" do
+ it "should run apt-cache policy with the default_release option, if there is one on the resource" do
@new_resource = Chef::Resource::AptPackage.new("irssi", @run_context)
@provider = Chef::Provider::Package::Apt.new(@new_resource, @run_context)
allow(@new_resource).to receive(:default_release).and_return("lenny-backports")
- allow(@new_resource).to receive(:provider).and_return("Chef::Provider::Package::Apt")
+ allow(@new_resource).to receive(:provider).and_return(nil)
expect(@provider).to receive(:shell_out!).with(
"apt-cache -o APT::Default-Release=lenny-backports policy irssi",
:timeout => @timeout
@@ -229,7 +229,7 @@ SHOWPKG_STDOUT
@new_resource = nil
@new_resource = Chef::Resource::AptPackage.new("irssi", @run_context)
@new_resource.default_release("lenny-backports")
- @new_resource.provider = @provider
+ @new_resource.provider = nil
@provider.new_resource = @new_resource
expect(@provider).to receive(:shell_out!).with(
diff --git a/spec/unit/resource/apt_package_spec.rb b/spec/unit/resource/apt_package_spec.rb
index be8eb9c324..3c31f63dd7 100644
--- a/spec/unit/resource/apt_package_spec.rb
+++ b/spec/unit/resource/apt_package_spec.rb
@@ -29,12 +29,10 @@ describe Chef::Resource::AptPackage, "initialize" do
os: "linux",
)
- before(:each) do
- @resource = Chef::Resource::AptPackage.new("foo")
- end
+ let(:resource) { Chef::Resource::AptPackage.new("foo") }
it "should support default_release" do
- @resource.default_release("lenny-backports")
- expect(@resource.default_release).to eql("lenny-backports")
+ resource.default_release("lenny-backports")
+ expect(resource.default_release).to eql("lenny-backports")
end
end