summaryrefslogtreecommitdiffstats
path: root/spec/unit/ral
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2007-11-26 22:48:44 -0600
committerLuke Kanies <luke@madstop.com>2007-11-26 22:48:44 -0600
commit2d19ee2a0452baf75a23093e6fea3b743a5f0a69 (patch)
tree432ad1cce58865af122e8ff7d7ba46497430fdec /spec/unit/ral
parentc3dde683158863ae764684c5b7d958e39e905874 (diff)
downloadpuppet-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-xspec/unit/ral/types/mount.rb189
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