diff options
| author | Nigel Kersten <nigel@puppetlabs.com> | 2011-03-13 15:05:58 -0700 |
|---|---|---|
| committer | Nigel Kersten <nigel@puppetlabs.com> | 2011-04-13 14:23:28 -0700 |
| commit | 8b7444dc5cebd73c5494a7908101bda3213f5711 (patch) | |
| tree | 314a9e95b55980e846a938c8707d714f322eb7e3 /spec/unit/provider/package | |
| parent | da4457be4dedaed5368bacf81a08f0429e21cd45 (diff) | |
| download | puppet-8b7444dc5cebd73c5494a7908101bda3213f5711.tar.gz puppet-8b7444dc5cebd73c5494a7908101bda3213f5711.tar.xz puppet-8b7444dc5cebd73c5494a7908101bda3213f5711.zip | |
(#2331) Remove darwinports pkg provider, replace with rewritten macports provider
* Employs port -q installed, much faster than port list installed
* Handles upgrades correctly now
* Makes use of internal port revision for ensure => latest upgrades
* Versionable, now works with ensure => specified_version
* Does not handle port variants at all yet.
* Does not allow manual specification of revision, only version
* Test coverage expanded using newer syntax
Paired-With: Daniel Pittman
Diffstat (limited to 'spec/unit/provider/package')
| -rwxr-xr-x | spec/unit/provider/package/macports_spec.rb | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/spec/unit/provider/package/macports_spec.rb b/spec/unit/provider/package/macports_spec.rb new file mode 100755 index 000000000..7d1acd537 --- /dev/null +++ b/spec/unit/provider/package/macports_spec.rb @@ -0,0 +1,122 @@ +require 'spec_helper' + +provider_class = Puppet::Type.type(:package).provider(:macports) + +describe provider_class do + let :resource_name do + "foo" + end + + let :resource do + Puppet::Type.type(:package).new(:name => resource_name, :provider => :macports) + end + + let :provider do + prov = resource.provider + prov.expects(:execute).never + prov + end + + let :current_hash do + {:name => resource_name, :ensure => "1.2.3", :revision => "1", :provider => :macports} + end + + describe "provider features" do + subject { provider } + + it { should be_installable } + it { should be_uninstallable } + it { should be_upgradeable } + it { should be_versionable } + end + + describe "when listing all instances" do + it "should call port -q installed" do + provider_class.expects(:port).with("-q", :installed).returns("") + provider_class.instances + end + + it "should create instances from active ports" do + provider_class.expects(:port).returns("foo @1.234.5_2 (active)") + provider_class.instances.size.should == 1 + end + + it "should ignore ports that aren't activated" do + provider_class.expects(:port).returns("foo @1.234.5_2") + provider_class.instances.size.should == 0 + end + end + + describe "when installing" do + it "should not specify a version when ensure is set to latest" do + resource[:ensure] = :latest + provider.expects(:port).with { |flag, method, name, version| + version.should be_nil + } + provider.install + end + + it "should not specify a version when ensure is set to present" do + resource[:ensure] = :present + provider.expects(:port).with { |flag, method, name, version| + version.should be_nil + } + provider.install + end + + it "should specify a version when ensure is set to a version" do + resource[:ensure] = "1.2.3" + provider.expects(:port).with { |flag, method, name, version| + version.should be + } + provider.install + end + end + + describe "when querying for the latest version" do + let :new_info_line do + "1.2.3 2" + end + let :infoargs do + ["-q", :info, "--line", "--version", "--revision", resource_name] + end + + it "should return nil when the package cannot be found" do + resource[:name] = resource_name + provider.expects(:port).returns("") + provider.latest.should == nil + end + + it "should return the current version if the installed port has the same revision" do + current_hash[:revision] = "2" + provider.expects(:port).with(*infoargs).returns(new_info_line) + provider.expects(:query).returns(current_hash) + provider.latest.should == current_hash[:ensure] + end + + it "should return the new version_revision if the installed port has a lower revision" do + current_hash[:revision] = "1" + provider.expects(:port).with(*infoargs).returns(new_info_line) + provider.expects(:query).returns(current_hash) + provider.latest.should == "1.2.3_2" + end + end + + describe "when updating a port" do + it "should execute port upgrade if the port is installed" do + resource[:name] = resource_name + resource[:ensure] = :present + provider.expects(:query).returns(current_hash) + provider.expects(:port).with("-q", :upgrade, resource_name) + provider.update + end + + it "should execute port install if the port is not installed" do + resource[:name] = resource_name + resource[:ensure] = :present + provider.expects(:query).returns("") + provider.expects(:port).with("-q", :install, resource_name) + provider.update + end + end +end |
