puppetlabs-stdlib/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb
Jeff McCune 31944c9863 (#12357) Fix broken compatibility with Puppet 2.6
Without this patch, the previous change set to the
validate_absolute_path() parser function contains Puppet 2.6
incompatible changes.  stdlib 2.x is compatible with Puppet 2.6.  These
changes are a problem because we cannot introduce backwards incompatible
changes in a minor release.

This patch fixes the problem by back porting the implementation of the
`Puppet::Util.absolute_path?` from 2.7.x to the function block itself.

The function block tests to see if `Puppet::Util.absolute_path?` will
respond and if not, falls back to the inline back ported implementation.

The spec tests have been updated to simulate the behavior of Puppet 2.6
even when running with Puppet 2.7.
2012-03-12 15:59:50 -07:00

83 lines
2.2 KiB
Ruby

require 'spec_helper'
describe Puppet::Parser::Functions.function(:validate_absolute_path) do
before :all do
Puppet::Parser::Functions.autoloader.loadall
end
# The subject of these examplres is the method itself.
subject do
Puppet::Parser::Scope.new.method :function_validate_absolute_path
end
describe "Valid Paths" do
def self.valid_paths
%w{
C:/
C:\\
C:\\WINDOWS\\System32
C:/windows/system32
X:/foo/bar
X:\\foo\\bar
/var/tmp
/var/lib/puppet
/var/opt/../lib/puppet
}
end
context "Without Puppet::Util.absolute_path? (e.g. Puppet <= 2.6)" do
before :each do
# The intent here is to mock Puppet to behave like Puppet 2.6 does.
# Puppet 2.6 does not have the absolute_path? method. This is only a
# convenience test, stdlib should be run with the Puppet 2.6.x in the
# $LOAD_PATH in addition to 2.7.x and master.
Puppet::Util.expects(:respond_to?).with(:absolute_path?).returns(false)
end
valid_paths.each do |path|
it "validate_absolute_path(#{path.inspect}) should not fail" do
expect { subject.call [path] }.not_to raise_error Puppet::ParseError
end
end
end
context "Puppet without mocking" do
valid_paths.each do |path|
it "validate_absolute_path(#{path.inspect}) should not fail" do
expect { subject.call [path] }.not_to raise_error Puppet::ParseError
end
end
end
end
describe 'Invalid paths' do
context 'Garbage inputs' do
[
nil,
[ nil ],
{ 'foo' => 'bar' },
{ },
'',
].each do |path|
it "validate_absolute_path(#{path.inspect}) should fail" do
expect { subject.call [path] }.to raise_error Puppet::ParseError
end
end
end
context 'Relative paths' do
%w{
relative1
.
..
./foo
../foo
etc/puppetlabs/puppet
opt/puppet/bin
}.each do |path|
it "validate_absolute_path(#{path.inspect}) should fail" do
expect { subject.call [path] }.to raise_error Puppet::ParseError
end
end
end
end
end