1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
require 'spec_helper'
describe Puppet::Type.type(:package).provider(:aix) do
before(:each) do
# Create a mock resource
@resource = Puppet::Type.type(:package).new(:name => 'mypackage', :ensure => :installed, :source => 'mysource', :provider => :aix)
@provider = @resource.provider
end
[:install, :uninstall, :latest, :query, :update].each do |method|
it "should have a #{method} method" do
expect(@provider).to respond_to(method)
end
end
it "should uninstall a package" do
@provider.expects(:installp).with('-gu', 'mypackage')
@provider.class.expects(:pkglist).with(:pkgname => 'mypackage').returns(nil)
@provider.uninstall
end
context "when installing" do
it "should install a package" do
@provider.expects(:installp).with('-acgwXY', '-d', 'mysource', 'mypackage')
@provider.install
end
it "should install a specific package version" do
@resource.stubs(:should).with(:ensure).returns("1.2.3.4")
@provider.expects(:installp).with('-acgwXY', '-d', 'mysource', 'mypackage 1.2.3.4')
@provider.install
end
it "should fail if the specified version is superseded" do
@resource[:ensure] = '1.2.3.3'
@provider.stubs(:installp).returns <<-OUTPUT
+-----------------------------------------------------------------------------+
Pre-installation Verification...
+-----------------------------------------------------------------------------+
Verifying selections...done
Verifying requisites...done
Results...
WARNINGS
--------
Problems described in this section are not likely to be the source of any
immediate or serious failures, but further actions may be necessary or
desired.
Already Installed
-----------------
The number of selected filesets that are either already installed
or effectively installed through superseding filesets is 1. See
the summaries at the end of this installation for details.
NOTE: Base level filesets may be reinstalled using the "Force"
option (-F flag), or they may be removed, using the deinstall or
"Remove Software Products" facility (-u flag), and then reinstalled.
<< End of Warning Section >>
+-----------------------------------------------------------------------------+
BUILDDATE Verification ...
+-----------------------------------------------------------------------------+
Verifying build dates...done
FILESET STATISTICS
------------------
1 Selected to be installed, of which:
1 Already installed (directly or via superseding filesets)
----
0 Total to be installed
Pre-installation Failure/Warning Summary
----------------------------------------
Name Level Pre-installation Failure/Warning
-------------------------------------------------------------------------------
mypackage 1.2.3.3 Already superseded by 1.2.3.4
OUTPUT
expect { @provider.install }.to raise_error(Puppet::Error, "aix package provider is unable to downgrade packages")
end
end
context "when finding the latest version" do
it "should return the current version when no later version is present" do
@provider.stubs(:latest_info).returns(nil)
@provider.stubs(:properties).returns( { :ensure => "1.2.3.4" } )
expect(@provider.latest).to eq("1.2.3.4")
end
it "should return the latest version of a package" do
@provider.stubs(:latest_info).returns( { :version => "1.2.3.5" } )
expect(@provider.latest).to eq("1.2.3.5")
end
it "should prefetch the right values" do
Process.stubs(:euid).returns(0)
resource = Puppet::Type.type(:package).
new(:name => 'sudo.rte', :ensure => :latest,
:source => 'mysource', :provider => :aix)
resource.stubs(:should).with(:ensure).returns(:latest)
resource.should(:ensure)
resource.provider.class.stubs(:execute).returns(<<-END.chomp)
sudo:sudo.rte:1.7.10.4::I:C:::::N:Configurable super-user privileges runtime::::0::
sudo:sudo.rte:1.8.6.4::I:T:::::N:Configurable super-user privileges runtime::::0::
END
resource.provider.class.prefetch('sudo.rte' => resource)
expect(resource.provider.latest).to eq('1.8.6.4')
end
end
it "update should install a package" do
@provider.expects(:install).with(false)
@provider.update
end
it "should prefetch when some packages lack sources" do
latest = Puppet::Type.type(:package).new(:name => 'mypackage', :ensure => :latest, :source => 'mysource', :provider => :aix)
absent = Puppet::Type.type(:package).new(:name => 'otherpackage', :ensure => :absent, :provider => :aix)
Process.stubs(:euid).returns(0)
described_class.expects(:execute).returns 'mypackage:mypackage.rte:1.8.6.4::I:T:::::N:A Super Cool Package::::0::\n'
described_class.prefetch({ 'mypackage' => latest, 'otherpackage' => absent })
end
end
|