summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2008-08-23 21:59:14 -0500
committerLuke Kanies <luke@madstop.com>2008-08-26 22:40:40 -0700
commit6335b143a312481aaa200f71cd25dffd4f88c8ae (patch)
tree7faa499dcbf7f1a61deb4c171aa4b36e15c63ff3
parent1104edb13926a53ee90685d96700cb03eaeca509 (diff)
downloadpuppet-6335b143a312481aaa200f71cd25dffd4f88c8ae.tar.gz
puppet-6335b143a312481aaa200f71cd25dffd4f88c8ae.tar.xz
puppet-6335b143a312481aaa200f71cd25dffd4f88c8ae.zip
Causing the Indirection to fail if a terminus selection hook does not return a value.
Signed-off-by: Luke Kanies <luke@madstop.com>
-rw-r--r--lib/puppet/indirector/indirection.rb4
-rwxr-xr-xspec/unit/indirector/indirection.rb16
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