diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2012-03-12 15:53:02 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2012-03-12 15:59:50 -0700 |
commit | 31944c986345a135a3e68247c6d3e644ea369089 (patch) | |
tree | 7b1692232877f53b7a18b029b31102c13f405fe8 /spec/unit | |
parent | fab75be6c9ceea283e0aa8d90f7943316b3efca6 (diff) | |
download | puppet-stdlib-31944c986345a135a3e68247c6d3e644ea369089.tar.gz puppet-stdlib-31944c986345a135a3e68247c6d3e644ea369089.tar.bz2 |
(#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.
Diffstat (limited to 'spec/unit')
-rw-r--r-- | spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb | 87 |
1 files changed, 47 insertions, 40 deletions
diff --git a/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb b/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb index 2b44f50..1e0b5ac 100644 --- a/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb +++ b/spec/unit/puppet/parser/functions/validate_absolute_path_spec.rb @@ -5,34 +5,67 @@ describe Puppet::Parser::Functions.function(:validate_absolute_path) do Puppet::Parser::Functions.autoloader.loadall end - let(:scope) do - scope = Puppet::Parser::Scope.new - end - # The subject of these examplres is the method itself. subject do - scope.method :function_validate_absolute_path + Puppet::Parser::Scope.new.method :function_validate_absolute_path end - context 'Using Puppet::Parser::Scope.new' do + 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 - describe 'Garbage inputs' do - paths = [ + 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' }, { }, '', - ] - - paths.each do |path| + ].each do |path| it "validate_absolute_path(#{path.inspect}) should fail" do expect { subject.call [path] }.to raise_error Puppet::ParseError end end end - describe 'relative paths' do - paths = %w{ + + context 'Relative paths' do + %w{ relative1 . .. @@ -40,37 +73,11 @@ describe Puppet::Parser::Functions.function(:validate_absolute_path) do ../foo etc/puppetlabs/puppet opt/puppet/bin - } - - paths.each do |path| + }.each do |path| it "validate_absolute_path(#{path.inspect}) should fail" do expect { subject.call [path] }.to raise_error Puppet::ParseError end end end - describe 'absolute paths' do - 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 - } - - paths = paths + [ - 'C:\\Program Files (x86)\\Puppet Labs\\Puppet Enterprise', - 'C:/Program Files (x86)/Puppet Labs/Puppet Enterprise', - ] - - paths.each do |path| - it "validate_absolute_path(#{path.inspect}) should not fail" do - expect { subject.call [path] }.not_to raise_error - end - end - end end end |