31944c9863
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.
83 lines
2.2 KiB
Ruby
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
|