diff options
| author | Matt Robinson <matt@puppetlabs.com> | 2010-07-26 19:34:27 -0700 |
|---|---|---|
| committer | markus <markus@AVA-351181.(none)> | 2010-08-03 15:19:42 -0700 |
| commit | be2b1f360fc15596098280265e6aa76e8043eb92 (patch) | |
| tree | e1102cd9fabc6fc089825d5b76f57407575d0a71 /spec | |
| parent | 03808fdc05c4660c1559cf8a09be80664096e0ad (diff) | |
| download | puppet-be2b1f360fc15596098280265e6aa76e8043eb92.tar.gz puppet-be2b1f360fc15596098280265e6aa76e8043eb92.tar.xz puppet-be2b1f360fc15596098280265e6aa76e8043eb92.zip | |
[#4370] Fixes extlookup precedence getting overwritten between runs
We found the gsub! in extlookup was actually modifying the value for
extlookup_precedence, so the next node to call it just got the
interpolated value from the first run.
We did two things in the code to prevent this:
1. We returned a dup of the ast string object so that modifying it
wouldn’t change puppet’s state. We didn’t do this for all possible
return values because we depend on using the original ast array object
to do array concatenation
2. We fixed extlookup to not do a destructive gsub
Reviewed by: Jesse Wolfe
Diffstat (limited to 'spec')
| -rwxr-xr-x | spec/unit/parser/ast/leaf_spec.rb | 4 | ||||
| -rwxr-xr-x | spec/unit/parser/functions/extlookup_spec.rb | 16 |
2 files changed, 17 insertions, 3 deletions
diff --git a/spec/unit/parser/ast/leaf_spec.rb b/spec/unit/parser/ast/leaf_spec.rb index 5bdca67fa..eb71f0d37 100755 --- a/spec/unit/parser/ast/leaf_spec.rb +++ b/spec/unit/parser/ast/leaf_spec.rb @@ -47,6 +47,10 @@ describe Puppet::Parser::AST::String do value = stub 'value', :is_a? => true, :to_s => "ab" Puppet::Parser::AST::String.new( :value => value ).to_s.should == "\"ab\"" end + it "should return a dup of its value" do + value = "" + Puppet::Parser::AST::String.new( :value => value ).evaluate(stub 'scope').should_not be_equal(value) + end end end diff --git a/spec/unit/parser/functions/extlookup_spec.rb b/spec/unit/parser/functions/extlookup_spec.rb index bf2880345..a3dcaa742 100755 --- a/spec/unit/parser/functions/extlookup_spec.rb +++ b/spec/unit/parser/functions/extlookup_spec.rb @@ -7,8 +7,9 @@ describe "the extlookup function" do before :each do @scope = Puppet::Parser::Scope.new - + @scope.stubs(:environment).returns(Puppet::Node::Environment.new('production')) + Puppet::Parser::Functions.function("extlookup") end it "should exist" do @@ -62,9 +63,8 @@ describe "the extlookup function" do end describe "should look in $extlookup_datadir for data files listed by $extlookup_precedence" do - before do + before do @scope.stubs(:lookupvar).with('extlookup_datadir').returns("/tmp") - @scope.stubs(:lookupvar).with('extlookup_precedence').returns(["one","two"]) File.open("/tmp/one.csv","w"){|one| one.puts "key,value1" } File.open("/tmp/two.csv","w") do |two| two.puts "key,value2" @@ -73,13 +73,23 @@ describe "the extlookup function" do end it "when the key is in the first file" do + @scope.stubs(:lookupvar).with('extlookup_precedence').returns(["one","two"]) result = @scope.function_extlookup([ "key" ]) result.should == "value1" end it "when the key is in the second file" do + @scope.stubs(:lookupvar).with('extlookup_precedence').returns(["one","two"]) result = @scope.function_extlookup([ "key2" ]) result.should == "value_two" end + + it "should not modify extlookup_precedence data" do + variable = '%{fqdn}' + @scope.stubs(:lookupvar).with('extlookup_precedence').returns([variable,"one"]) + @scope.stubs(:lookupvar).with('fqdn').returns('myfqdn') + result = @scope.function_extlookup([ "key" ]) + variable.should == '%{fqdn}' + end end end |
