diff options
author | Jesse Wolfe <jes5199@gmail.com> | 2010-07-27 10:17:44 -0700 |
---|---|---|
committer | Jesse Wolfe <jes5199@gmail.com> | 2010-07-27 10:17:44 -0700 |
commit | b53e7d78e2e87571ae53170e9716b9ccd75da6e2 (patch) | |
tree | 58489a37bd0ee14b3d053a0e23f9638b4f6205e7 /spec/unit/parser/functions/extlookup_spec.rb | |
parent | 94edd404130b4236f0c65a579857e3a25c5ee17f (diff) | |
parent | ecf44e4408c168893d74af58a4c7c8606634a844 (diff) | |
download | puppet-b53e7d78e2e87571ae53170e9716b9ccd75da6e2.tar.gz puppet-b53e7d78e2e87571ae53170e9716b9ccd75da6e2.tar.xz puppet-b53e7d78e2e87571ae53170e9716b9ccd75da6e2.zip |
Merge commit '2.6.1rc1' into next
Diffstat (limited to 'spec/unit/parser/functions/extlookup_spec.rb')
-rwxr-xr-x | spec/unit/parser/functions/extlookup_spec.rb | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/spec/unit/parser/functions/extlookup_spec.rb b/spec/unit/parser/functions/extlookup_spec.rb new file mode 100755 index 000000000..bf2880345 --- /dev/null +++ b/spec/unit/parser/functions/extlookup_spec.rb @@ -0,0 +1,85 @@ +#! /usr/bin/env ruby + +require File.dirname(__FILE__) + '/../../../spec_helper' +require 'tempfile' + +describe "the extlookup function" do + + before :each do + @scope = Puppet::Parser::Scope.new + + @scope.stubs(:environment).returns(Puppet::Node::Environment.new('production')) + end + + it "should exist" do + Puppet::Parser::Functions.function("extlookup").should == "function_extlookup" + end + + it "should raise a ParseError if there is less than 1 arguments" do + lambda { @scope.function_extlookup([]) }.should( raise_error(Puppet::ParseError)) + end + + it "should raise a ParseError if there is more than 3 arguments" do + lambda { @scope.function_extlookup(["foo", "bar", "baz", "gazonk"]) }.should( raise_error(Puppet::ParseError)) + end + + it "should return the default" do + result = @scope.function_extlookup([ "key", "default"]) + result.should == "default" + end + + it "should lookup the key in a supplied datafile" do + t = Tempfile.new('extlookup.csv') do + t.puts 'key,value' + t.puts 'nonkey,nonvalue' + t.close + + result = @scope.function_extlookup([ "key", "default", t.path]) + result.should == "value" + end + end + + it "should return an array if the datafile contains more than two columns" do + t = Tempfile.new('extlookup.csv') do + t.puts 'key,value1,value2' + t.puts 'nonkey,nonvalue,nonvalue' + t.close + + result = @scope.function_extlookup([ "key", "default", t.path]) + result.should == ["value1", "value2"] + end + end + + it "should raise an error if there's no matching key and no default" do + t = Tempfile.new('extlookup.csv') do + t.puts 'key,value' + t.puts 'nonkey,nonvalue' + t.close + + result = @scope.function_extlookup([ "key", nil, t.path]) + result.should == "value" + end + end + + describe "should look in $extlookup_datadir for data files listed by $extlookup_precedence" 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" + two.puts "key2,value_two" + end + end + + it "when the key is in the first file" do + result = @scope.function_extlookup([ "key" ]) + result.should == "value1" + end + + it "when the key is in the second file" do + result = @scope.function_extlookup([ "key2" ]) + result.should == "value_two" + end + end +end |