diff options
| -rw-r--r-- | lib/puppet/indirector/indirection.rb | 4 | ||||
| -rwxr-xr-x | spec/unit/indirector/indirection.rb | 16 |
2 files changed, 19 insertions, 1 deletions
diff --git a/lib/puppet/indirector/indirection.rb b/lib/puppet/indirector/indirection.rb index e6068a6aa..04c3aed23 100644 --- a/lib/puppet/indirector/indirection.rb +++ b/lib/puppet/indirector/indirection.rb @@ -274,7 +274,9 @@ class Puppet::Indirector::Indirection def prepare(request) # Pick our terminus. if respond_to?(:select_terminus) - terminus_name = select_terminus(request) + unless terminus_name = select_terminus(request) + raise ArgumentError, "Could not determine appropriate terminus for %s" % request + end else terminus_name = terminus_class end diff --git a/spec/unit/indirector/indirection.rb b/spec/unit/indirector/indirection.rb index e52be31e1..166065ecf 100755 --- a/spec/unit/indirector/indirection.rb +++ b/spec/unit/indirector/indirection.rb @@ -34,6 +34,22 @@ describe "Indirection Delegator", :shared => true do @indirection.send(@method, "me") end + it "should fail if the :select_terminus hook does not return a terminus name" do + # Define the method, so our respond_to? hook matches. + class << @indirection + def select_terminus(request) + end + end + + request = stub 'request', :key => "me", :options => {} + + @indirection.stubs(:request).returns request + + @indirection.expects(:select_terminus).with(request).returns nil + + lambda { @indirection.send(@method, "me") }.should raise_error(ArgumentError) + end + it "should choose the terminus returned by the :terminus_class method if no :select_terminus method is available" do @indirection.expects(:terminus_class).returns :test_terminus |
