summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Bradley <rick@rickbradley.com>2007-10-16 14:04:38 -0500
committerRick Bradley <rick@rickbradley.com>2007-10-16 14:04:38 -0500
commitabbc824ff4a565f0a0f1362b779252e876b86168 (patch)
treea8f3da778bfcc213e6976c131b9dd080b370d2eb
parent2a497fff66a7827059b712e84dcaff171ccab6be (diff)
downloadpuppet-abbc824ff4a565f0a0f1362b779252e876b86168.tar.gz
puppet-abbc824ff4a565f0a0f1362b779252e876b86168.tar.xz
puppet-abbc824ff4a565f0a0f1362b779252e876b86168.zip
Tweak to move model lookup functionality into the Handler base class where it belongs. Robustifying the request sanitization a bit more.
-rw-r--r--lib/puppet/network/http/handler.rb1
-rw-r--r--lib/puppet/network/http/mongrel/rest.rb1
-rw-r--r--lib/puppet/network/http/webrick/rest.rb1
-rw-r--r--spec/unit/network/http/mongrel/rest.rb12
-rw-r--r--spec/unit/network/http/webrick/rest.rb15
5 files changed, 28 insertions, 2 deletions
diff --git a/lib/puppet/network/http/handler.rb b/lib/puppet/network/http/handler.rb
index 54cec417b..77df113e6 100644
--- a/lib/puppet/network/http/handler.rb
+++ b/lib/puppet/network/http/handler.rb
@@ -2,6 +2,7 @@ class Puppet::Network::HTTP::Handler
def initialize(args = {})
raise ArgumentError unless @server = args[:server]
raise ArgumentError unless @handler = args[:handler]
+ @model = find_model_for_handler(@handler)
register_handler
end
diff --git a/lib/puppet/network/http/mongrel/rest.rb b/lib/puppet/network/http/mongrel/rest.rb
index 8f3de957e..4c795481b 100644
--- a/lib/puppet/network/http/mongrel/rest.rb
+++ b/lib/puppet/network/http/mongrel/rest.rb
@@ -5,7 +5,6 @@ class Puppet::Network::HTTP::MongrelREST < Puppet::Network::HTTP::Handler
private
def register_handler
- @model = find_model_for_handler(@handler)
@server.register('/' + @handler.to_s, self)
@server.register('/' + @handler.to_s + 's', self)
end
diff --git a/lib/puppet/network/http/webrick/rest.rb b/lib/puppet/network/http/webrick/rest.rb
index cefffd76d..ed29cfb75 100644
--- a/lib/puppet/network/http/webrick/rest.rb
+++ b/lib/puppet/network/http/webrick/rest.rb
@@ -10,7 +10,6 @@ class Puppet::Network::HTTP::WEBrickREST < Puppet::Network::HTTP::Handler
private
def register_handler
- @model = find_model_for_handler(@handler)
@server.mount('/' + @handler.to_s, self)
@server.mount('/' + @handler.to_s + 's', self)
end
diff --git a/spec/unit/network/http/mongrel/rest.rb b/spec/unit/network/http/mongrel/rest.rb
index c45ca8d66..5bb40d777 100644
--- a/spec/unit/network/http/mongrel/rest.rb
+++ b/spec/unit/network/http/mongrel/rest.rb
@@ -89,6 +89,18 @@ describe Puppet::Network::HTTP::MongrelREST, "when receiving a request" do
@mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'POST', Mongrel::Const::REQUEST_PATH => '/foo'})
Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
end
+
+ it "should fail if the request's pluralization is wrong" do
+ @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'DELETE', Mongrel::Const::REQUEST_PATH => '/foos'})
+ Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
+ @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'PUT', Mongrel::Const::REQUEST_PATH => '/foos'})
+ Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
+ end
+
+ it "should fail if the request is for an unknown path" do
+ @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET', Mongrel::Const::REQUEST_PATH => '/bar'})
+ Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
+ end
it "should unpack request information from Mongrel"
diff --git a/spec/unit/network/http/webrick/rest.rb b/spec/unit/network/http/webrick/rest.rb
index 472a09aca..6eb44f4be 100644
--- a/spec/unit/network/http/webrick/rest.rb
+++ b/spec/unit/network/http/webrick/rest.rb
@@ -94,6 +94,21 @@ describe Puppet::Network::HTTP::WEBrickREST, "when receiving a request" do
@mock_request.stubs(:path).returns('/foo')
Proc.new { @handler.service(@mock_request, @mock_response) }.should raise_error(ArgumentError)
end
+
+ it "should fail if the request's pluralization is wrong" do
+ @mock_request.stubs(:request_method).returns('DELETE')
+ @mock_request.stubs(:path).returns('/foos')
+ Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
+ @mock_request.stubs(:request_method).returns('PUT')
+ @mock_request.stubs(:path).returns('/foos')
+ Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
+ end
+
+ it "should fail if the request is for an unknown path" do
+ @mock_request.stubs(:request_method).returns('GET')
+ @mock_request.stubs(:path).returns('/bar')
+ Proc.new { @handler.process(@mock_request, @mock_response) }.should raise_error(ArgumentError)
+ end
it "should unpack request information from WEBrick"