summaryrefslogtreecommitdiff
path: root/spec/unit
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2012-03-12 15:53:02 -0700
committerJeff McCune <jeff@puppetlabs.com>2012-03-12 15:59:50 -0700
commit31944c986345a135a3e68247c6d3e644ea369089 (patch)
tree7b1692232877f53b7a18b029b31102c13f405fe8 /spec/unit
parentfab75be6c9ceea283e0aa8d90f7943316b3efca6 (diff)
downloadpuppet-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.rb87
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