diff options
| author | Luke Kanies <luke@madstop.com> | 2007-11-26 22:48:44 -0600 |
|---|---|---|
| committer | Luke Kanies <luke@madstop.com> | 2007-11-26 22:48:44 -0600 |
| commit | 2d19ee2a0452baf75a23093e6fea3b743a5f0a69 (patch) | |
| tree | 432ad1cce58865af122e8ff7d7ba46497430fdec /spec/unit/ral | |
| parent | c3dde683158863ae764684c5b7d958e39e905874 (diff) | |
| download | puppet-2d19ee2a0452baf75a23093e6fea3b743a5f0a69.tar.gz puppet-2d19ee2a0452baf75a23093e6fea3b743a5f0a69.tar.xz puppet-2d19ee2a0452baf75a23093e6fea3b743a5f0a69.zip | |
Fixing #920 -- I have replaced the existing mount test with an
rspec version. It's not perfect, in that it only tests
the :ensure state, but that's where 90% of the behaviour is.
Diffstat (limited to 'spec/unit/ral')
| -rwxr-xr-x | spec/unit/ral/types/mount.rb | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/spec/unit/ral/types/mount.rb b/spec/unit/ral/types/mount.rb new file mode 100755 index 000000000..afe798041 --- /dev/null +++ b/spec/unit/ral/types/mount.rb @@ -0,0 +1,189 @@ +#!/usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../../spec_helper' + +require 'puppet/type/mount' + +describe Puppet::Type::Mount do + it "should have a :refreshable feature that requires the :remount method" do + Puppet::Type::Mount.provider_feature(:refreshable).methods.should == [:remount] + end + + it "should have no default value" do + mount = Puppet::Type::Mount.create(:name => "yay") + mount.should(:ensure).should be_nil + end + + after { Puppet::Type::Mount.clear } +end + +describe Puppet::Type::Mount, "when validating attributes" do + [:name, :remounts].each do |param| + it "should have a #{param} parameter" do + Puppet::Type::Mount.attrtype(param).should == :param + end + end + + [:ensure, :device, :blockdevice, :fstype, :options, :pass, :dump, :atboot, :target].each do |param| + it "should have a #{param} property" do + Puppet::Type::Mount.attrtype(param).should == :property + end + end +end + +describe Puppet::Type::Mount::Ensure, "when validating values" do + before do + @provider = stub 'provider', :class => Puppet::Type::Mount.defaultprovider, :clear => nil + Puppet::Type::Mount.defaultprovider.expects(:new).returns(@provider) + end + + it "should support :present as a value to :ensure" do + Puppet::Type::Mount.create(:name => "yay", :ensure => :present) + end + + it "should alias :unmounted to :present as a value to :ensure" do + mount = Puppet::Type::Mount.create(:name => "yay", :ensure => :unmounted) + mount.should(:ensure).should == :present + end + + it "should support :absent as a value to :ensure" do + Puppet::Type::Mount.create(:name => "yay", :ensure => :absent) + end + + it "should support :mounted as a value to :ensure" do + Puppet::Type::Mount.create(:name => "yay", :ensure => :mounted) + end + + after { Puppet::Type::Mount.clear } +end + +module MountEvaluationTesting + def setup + @provider = stub 'provider', :class => Puppet::Type::Mount.defaultprovider, :clear => nil, :satisfies? => true, :name => :mock + Puppet::Type::Mount.defaultprovider.stubs(:new).returns(@provider) + @mount = Puppet::Type::Mount.create(:name => "yay", :check => :ensure) + + @ensure = @mount.property(:ensure) + end + + def mount_stub(params) + Puppet::Type::Mount.validproperties.each do |prop| + unless params[prop] + params[prop] = :absent + @mount[prop] = :absent + end + end + + params.each do |param, value| + @provider.stubs(param).returns(value) + end + end + + def teardown + Puppet::Type::Mount.clear + end +end + +describe Puppet::Type::Mount::Ensure, "when retrieving its current state" do + include MountEvaluationTesting + + it "should return the provider's value if it is :absent" do + @provider.expects(:ensure).returns(:absent) + @ensure.retrieve.should == :absent + end + + it "should return :mounted if the provider indicates it is mounted and the value is not :absent" do + @provider.expects(:ensure).returns(:present) + @provider.expects(:mounted?).returns(true) + @ensure.retrieve.should == :mounted + end + + it "should return :present if the provider indicates it is not mounted and the value is not :absent" do + @provider.expects(:ensure).returns(:present) + @provider.expects(:mounted?).returns(false) + @ensure.retrieve.should == :present + end +end + +describe Puppet::Type::Mount::Ensure, "when changing the host" do + include MountEvaluationTesting + + it "should destroy itself if it should be absent" do + @provider.stubs(:mounted?).returns(false) + @provider.expects(:destroy) + @ensure.should = :absent + @ensure.sync + end + + it "should unmount itself before destroying if it is mounted and should be absent" do + @provider.expects(:mounted?).returns(true) + @provider.expects(:unmount) + @provider.expects(:destroy) + @ensure.should = :absent + @ensure.sync + end + + it "should create itself if it is absent and should be present" do + @provider.stubs(:mounted?).returns(false) + @provider.expects(:create) + @ensure.should = :present + @ensure.sync + end + + it "should unmount itself if it is mounted and should be present" do + @provider.stubs(:mounted?).returns(true) + + # The interface here is just too much work to test right now. + @ensure.stubs(:syncothers) + @provider.expects(:unmount) + @ensure.should = :present + @ensure.sync + end + + it "should create and mount itself if it does not exist and should be mounted" do + @provider.stubs(:ensure).returns(:absent) + @provider.stubs(:mounted?).returns(false) + @provider.expects(:create) + @ensure.stubs(:syncothers) + @provider.expects(:mount) + @ensure.should = :mounted + @ensure.sync + end + + it "should mount itself if it is present and should be mounted" do + @provider.stubs(:ensure).returns(:present) + @provider.stubs(:mounted?).returns(false) + @ensure.stubs(:syncothers) + @provider.expects(:mount) + @ensure.should = :mounted + @ensure.sync + end + + it "should create but not mount itself if it is absent and mounted and should be mounted" do + @provider.stubs(:ensure).returns(:absent) + @provider.stubs(:mounted?).returns(true) + @ensure.stubs(:syncothers) + @provider.expects(:create) + @ensure.should = :mounted + @ensure.sync + end +end + +describe Puppet::Type::Mount, "when responding to events" do + include MountEvaluationTesting + + it "should remount if it is currently mounted" do + Puppet::Util::Log.newdestination(:console) + @provider.expects(:mounted?).returns(true) + @provider.expects(:remount) + + @mount.refresh + end + + it "should not remount if it is not currently mounted" do + @provider.expects(:mounted?).returns(false) + @provider.expects(:remount).never + + @mount.refresh + end +end |
