diff options
author | Nathan Huff <nrhuff@umn.edu> | 2014-07-28 15:20:55 -0500 |
---|---|---|
committer | Bryan McLellan <btm@getchef.com> | 2014-08-18 08:12:56 -0700 |
commit | 78335936a30b96d9a0cd352026df095e31c6f9f7 (patch) | |
tree | a38fecb458c9d868303150d605f20ddafc3b897a /spec/unit | |
parent | b06510323102fcb35fb7b02891591b3a540ddf27 (diff) | |
download | chef-78335936a30b96d9a0cd352026df095e31c6f9f7.tar.gz |
Check local repository as well as remote when looking up the currently installed packages
Diffstat (limited to 'spec/unit')
-rw-r--r-- | spec/unit/provider/package/ips_spec.rb | 99 |
1 files changed, 51 insertions, 48 deletions
diff --git a/spec/unit/provider/package/ips_spec.rb b/spec/unit/provider/package/ips_spec.rb index 53f8169623..a972596c08 100644 --- a/spec/unit/provider/package/ips_spec.rb +++ b/spec/unit/provider/package/ips_spec.rb @@ -31,53 +31,72 @@ describe Chef::Provider::Package::Ips do Chef::Resource::Package.stub(:new).and_return(@current_resource) @provider = Chef::Provider::Package::Ips.new(@new_resource, @run_context) - @stdin = StringIO.new - @stderr = StringIO.new - @stdout =<<-PKG_STATUS - Name: crypto/gnupg - Summary: GNU Privacy Guard - Description: A complete and free implementation of the OpenPGP Standard as - defined by RFC4880. - Category: Applications/System Utilities - State: Not installed - Publisher: solaris - Version: 2.0.17 + @local = local_output + @remote = remote_output + end + + def local_output + stdin = StringIO.new + stdout = '' + stderr =<<-PKG_STATUS +pkg: info: no packages matching the following patterns you specified are +installed on the system. Try specifying -r to query remotely: + + crypto/gnupg +PKG_STATUS + return OpenStruct.new(:stdout => stdout,:stdin => stdin,:stderr => stderr,:status => @status,:exitstatus => 1) + end + + def remote_output + + stdout = <<-PKG_STATUS + Name: security/sudo + Summary: sudo - authority delegation tool + State: Not Installed + Publisher: omnios + Version: 1.8.4.1 (1.8.4p1) Build Release: 5.11 - Branch: 0.175.0.0.0.2.537 -Packaging Date: October 19, 2011 09:14:50 AM - Size: 8.07 MB - FMRI: pkg://solaris/crypto/gnupg@2.0.17,5.11-0.175.0.0.0.2.537:20111019T091450Z + Branch: 0.151002 +Packaging Date: April 1, 2012 05:55:52 PM + Size: 2.57 MB + FMRI: pkg://omnios/security/sudo@1.8.4.1,5.11-0.151002:20120401T175552Z PKG_STATUS - @pid = 12345 - @shell_out = OpenStruct.new(:stdout => @stdout,:stdin => @stdin,:stderr => @stderr,:status => @status,:exitstatus => 0) + stdin = StringIO.new + stderr = '' + return OpenStruct.new(:stdout => stdout,:stdin => stdin,:stderr => stderr,:status => @status,:exitstatus => 0) end context "when loading current resource" do it "should create a current resource with the name of the new_resource" do - @provider.should_receive(:shell_out!).and_return(@shell_out) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local_output) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output) Chef::Resource::Package.should_receive(:new).and_return(@current_resource) @provider.load_current_resource end it "should set the current resources package name to the new resources package name" do - @provider.should_receive(:shell_out!).and_return(@shell_out) - @current_resource.should_receive(:package_name).with(@new_resource.package_name) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local_output) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output) @provider.load_current_resource + @current_resource.package_name.should == @new_resource.package_name end it "should run pkg info with the package name" do - @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(@shell_out) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local_output) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output) @provider.load_current_resource end it "should set the installed version to nil on the current resource if package state is not installed" do - @provider.should_receive(:shell_out!).and_return(@shell_out) - @current_resource.should_receive(:version).with(nil).and_return(true) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local_output) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output) @provider.load_current_resource + @current_resource.version.should be_nil end it "should set the installed version if package has one" do - @stdout.replace(<<-INSTALLED) + local = local_output + local.stdout = <<-INSTALLED Name: crypto/gnupg Summary: GNU Privacy Guard Description: A complete and free implementation of the OpenPGP Standard as @@ -92,14 +111,15 @@ Packaging Date: October 19, 2011 09:14:50 AM Size: 8.07 MB FMRI: pkg://solaris/crypto/gnupg@2.0.17,5.11-0.175.0.0.0.2.537:20111019T091450Z INSTALLED - @provider.should_receive(:shell_out!).and_return(@shell_out) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output) @provider.load_current_resource @current_resource.version.should == "2.0.17" - @provider.candidate_version.should eql("2.0.17") end it "should return the current resouce" do - @provider.should_receive(:shell_out!).and_return(@shell_out) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local_output) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote_output) @provider.load_current_resource.should eql(@current_resource) end end @@ -121,27 +141,9 @@ INSTALLED @provider.install_package("crypto/gnupg", "2.0.17") end - it "should not contain invalid characters for the version string" do - @stdout.replace(<<-PKG_STATUS) - Name: security/sudo - Summary: sudo - authority delegation tool - State: Not Installed - Publisher: omnios - Version: 1.8.4.1 (1.8.4p1) - Build Release: 5.11 - Branch: 0.151002 -Packaging Date: April 1, 2012 05:55:52 PM - Size: 2.57 MB - FMRI: pkg://omnios/security/sudo@1.8.4.1,5.11-0.151002:20120401T175552Z -PKG_STATUS - @provider.should_receive(:run_command_with_systems_locale).with({ - :command => "pkg install -q security/sudo@1.8.4.1" - }) - @provider.install_package("security/sudo", "1.8.4.1") - end - it "should not include the human-readable version in the candidate_version" do - @stdout.replace(<<-PKG_STATUS) + remote = remote_output + remote.stdout = <<-PKG_STATUS Name: security/sudo Summary: sudo - authority delegation tool State: Not Installed @@ -153,7 +155,8 @@ Packaging Date: April 1, 2012 05:55:52 PM Size: 2.57 MB FMRI: pkg://omnios/security/sudo@1.8.4.1,5.11-0.151002:20120401T175552Z PKG_STATUS - @provider.should_receive(:shell_out!).and_return(@shell_out) + @provider.should_receive(:shell_out!).with("pkg info #{@new_resource.package_name}").and_return(local_output) + @provider.should_receive(:shell_out!).with("pkg info -r #{@new_resource.package_name}").and_return(remote) @provider.load_current_resource @current_resource.version.should be_nil @provider.candidate_version.should eql("1.8.4.1") |