summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/provider/package/pip.rb18
-rw-r--r--spec/unit/provider/package/pip_spec.rb98
2 files changed, 48 insertions, 68 deletions
diff --git a/lib/puppet/provider/package/pip.rb b/lib/puppet/provider/package/pip.rb
index 00797563a..5abbc135a 100644
--- a/lib/puppet/provider/package/pip.rb
+++ b/lib/puppet/provider/package/pip.rb
@@ -25,29 +25,23 @@ Puppet::Type.type(:package).provide :pip,
# that's managed by `pip` or an empty array if `pip` is not available.
def self.instances
packages = []
- execpipe "#{command :pip} freeze" do |process|
+ pip_cmd = which('pip') or return []
+ execpipe "#{pip_cmd} freeze" do |process|
process.collect do |line|
next unless options = parse(line)
packages << new(options)
end
end
packages
- rescue Puppet::DevError
- []
end
# Return structured information about a particular package or `nil` if
# it is not installed or `pip` itself is not available.
def query
- execpipe "#{command :pip} freeze" do |process|
- process.each do |line|
- options = self.class.parse(line)
- return options if options[:name] == @resource[:name]
- end
+ self.class.instances.each do |provider_pip|
+ return provider_pip.properties if @resource[:name] == provider_pip.name
end
- nil
- rescue Puppet::DevError
- nil
+ return nil
end
# Ask the PyPI API for the latest version number. There is no local
@@ -104,7 +98,7 @@ Puppet::Type.type(:package).provide :pip,
def lazy_pip(*args)
pip *args
rescue NoMethodError => e
- if pathname = `which pip`.chomp
+ if pathname = which('pip')
self.class.commands :pip => pathname
pip *args
else
diff --git a/spec/unit/provider/package/pip_spec.rb b/spec/unit/provider/package/pip_spec.rb
index ad8201aa0..6809d3f90 100644
--- a/spec/unit/provider/package/pip_spec.rb
+++ b/spec/unit/provider/package/pip_spec.rb
@@ -7,17 +7,16 @@ provider_class = Puppet::Type.type(:package).provider(:pip)
describe provider_class do
before do
- @resource = stub("resource")
- @provider = provider_class.new
- @provider.instance_variable_set(:@resource, @resource)
+ @resource = Puppet::Resource.new(:package, "sdsfdssdhdfyjymdgfcjdfjxdrssf")
+ @provider = provider_class.new(@resource)
end
describe "parse" do
it "should return a hash on valid input" do
provider_class.parse("Django==1.2.5").should == {
- :ensure => "1.2.5",
- :name => "Django",
+ :ensure => "1.2.5",
+ :name => "Django",
:provider => :pip,
}
end
@@ -31,7 +30,7 @@ describe provider_class do
describe "instances" do
it "should return an array when pip is present" do
- provider_class.expects(:command).with(:pip).returns("/fake/bin/pip")
+ provider_class.expects(:which).with('pip').returns("/fake/bin/pip")
p = stub("process")
p.expects(:collect).yields("Django==1.2.5")
provider_class.expects(:execpipe).with("/fake/bin/pip freeze").yields(p)
@@ -39,8 +38,7 @@ describe provider_class do
end
it "should return an empty array when pip is missing" do
- provider_class.expects(:command).with(:pip).raises(
- Puppet::DevError.new("Pretend pip isn't installed."))
+ provider_class.expects(:which).with('pip').returns nil
provider_class.instances.should == []
end
@@ -49,32 +47,25 @@ describe provider_class do
describe "query" do
before do
- @resource.stubs(:[]).with(:name).returns("Django")
+ @resource[:name] = "Django"
end
it "should return a hash when pip and the package are present" do
- @provider.expects(:command).with(:pip).returns("/fake/bin/pip")
- p = stub("process")
- p.expects(:each).yields("Django==1.2.5")
- @provider.expects(:execpipe).with("/fake/bin/pip freeze").yields(p)
+ provider_class.expects(:instances).returns [provider_class.new({
+ :ensure => "1.2.5",
+ :name => "Django",
+ :provider => :pip,
+ })]
+
@provider.query.should == {
- :ensure => "1.2.5",
- :name => "Django",
+ :ensure => "1.2.5",
+ :name => "Django",
:provider => :pip,
}
end
- it "should return nil when pip is missing" do
- @provider.expects(:command).with(:pip).raises(
- Puppet::DevError.new("Pretend pip isn't installed."))
- @provider.query.should == nil
- end
-
it "should return nil when the package is missing" do
- @provider.expects(:command).with(:pip).returns("/fake/bin/pip")
- p = stub("process")
- p.expects(:each).yields("sdsfdssdhdfyjymdgfcjdfjxdrssf==0.0.0")
- @provider.expects(:execpipe).with("/fake/bin/pip freeze").yields(p)
+ provider_class.expects(:instances).returns []
@provider.query.should == nil
end
@@ -83,12 +74,12 @@ describe provider_class do
describe "latest" do
it "should find a version number for Django" do
- @resource.stubs(:[]).with(:name).returns "Django"
+ @resource[:name] = "Django"
@provider.latest.should_not == nil
end
it "should not find a version number for sdsfdssdhdfyjymdgfcjdfjxdrssf" do
- @resource.stubs(:[]).with(:name).returns "sdsfdssdhdfyjymdgfcjdfjxdrssf"
+ @resource[:name] = "sdsfdssdhdfyjymdgfcjdfjxdrssf"
@provider.latest.should == nil
end
@@ -97,52 +88,46 @@ describe provider_class do
describe "install" do
before do
- @resource.stubs(:[]).with(:name).returns("sdsfdssdhdfyjymdgfcjdfjxdrssf")
+ @resource[:name] = "sdsfdssdhdfyjymdgfcjdfjxdrssf"
@url = "git+https://example.com/sdsfdssdhdfyjymdgfcjdfjxdrssf.git"
end
it "should install" do
- @resource.stubs(:[]).with(:ensure).returns(:installed)
- @resource.stubs(:[]).with(:source).returns(nil)
- @provider.expects(:lazy_pip).with do |*args|
- "install" == args[0] && "sdsfdssdhdfyjymdgfcjdfjxdrssf" == args[-1]
- end.returns nil
+ @resource[:ensure] = :installed
+ @resource[:source] = nil
+ @provider.expects(:lazy_pip).
+ with("install", '-q', "sdsfdssdhdfyjymdgfcjdfjxdrssf")
@provider.install
end
it "should install from SCM" do
- @resource.stubs(:[]).with(:ensure).returns(:installed)
- @resource.stubs(:[]).with(:source).returns(@url)
- @provider.expects(:lazy_pip).with do |*args|
- "#{@url}#egg=sdsfdssdhdfyjymdgfcjdfjxdrssf" == args[-1]
- end.returns nil
+ @resource[:ensure] = :installed
+ @resource[:source] = @url
+ @provider.expects(:lazy_pip).
+ with("install", '-q', '-e', "#{@url}#egg=sdsfdssdhdfyjymdgfcjdfjxdrssf")
@provider.install
end
- it "should install a particular revision" do
- @resource.stubs(:[]).with(:ensure).returns("0123456")
- @resource.stubs(:[]).with(:source).returns(@url)
- @provider.expects(:lazy_pip).with do |*args|
- "#{@url}@0123456#egg=sdsfdssdhdfyjymdgfcjdfjxdrssf" == args[-1]
- end.returns nil
+ it "should install a particular SCM revision" do
+ @resource[:ensure] = "0123456"
+ @resource[:source] = @url
+ @provider.expects(:lazy_pip).
+ with("install", "-q", "-e", "#{@url}@0123456#egg=sdsfdssdhdfyjymdgfcjdfjxdrssf")
@provider.install
end
it "should install a particular version" do
- @resource.stubs(:[]).with(:ensure).returns("0.0.0")
- @resource.stubs(:[]).with(:source).returns(nil)
- @provider.expects(:lazy_pip).with do |*args|
- "sdsfdssdhdfyjymdgfcjdfjxdrssf==0.0.0" == args[-1]
- end.returns nil
+ @resource[:ensure] = "0.0.0"
+ @resource[:source] = nil
+ @provider.expects(:lazy_pip).with("install", "-q", "sdsfdssdhdfyjymdgfcjdfjxdrssf==0.0.0")
@provider.install
end
it "should upgrade" do
- @resource.stubs(:[]).with(:ensure).returns(:latest)
- @resource.stubs(:[]).with(:source).returns(nil)
- @provider.expects(:lazy_pip).with do |*args|
- "--upgrade" == args[-2] && "sdsfdssdhdfyjymdgfcjdfjxdrssf" == args[-1]
- end.returns nil
+ @resource[:ensure] = :latest
+ @resource[:source] = nil
+ @provider.expects(:lazy_pip).
+ with("install", "-q", "--upgrade", "sdsfdssdhdfyjymdgfcjdfjxdrssf")
@provider.install
end
@@ -151,8 +136,9 @@ describe provider_class do
describe "uninstall" do
it "should uninstall" do
- @resource.stubs(:[]).with(:name).returns("sdsfdssdhdfyjymdgfcjdfjxdrssf")
- @provider.expects(:lazy_pip).returns(nil)
+ @resource[:name] = "sdsfdssdhdfyjymdgfcjdfjxdrssf"
+ @provider.expects(:lazy_pip).
+ with('uninstall', '-y', '-q', 'sdsfdssdhdfyjymdgfcjdfjxdrssf')
@provider.uninstall
end