summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/network/http/handler.rb8
-rw-r--r--lib/puppet/network/http/mongrel/rest.rb5
-rw-r--r--lib/puppet/network/http/webrick/rest.rb4
-rw-r--r--spec/unit/network/http/mongrel/rest.rb27
-rw-r--r--spec/unit/network/server.rb6
5 files changed, 44 insertions, 6 deletions
diff --git a/lib/puppet/network/http/handler.rb b/lib/puppet/network/http/handler.rb
index 1f63024d6..0d4be3a8d 100644
--- a/lib/puppet/network/http/handler.rb
+++ b/lib/puppet/network/http/handler.rb
@@ -20,12 +20,12 @@ class Puppet::Network::HTTP::Handler
def do_find(request, response)
key = request_key(request) || raise(ArgumentError, "Could not locate lookup key in request path [#{path}]")
args = params(request)
- @model.find(key, args)
+ encode_result(request, response, @model.find(key, args))
end
def do_search(request, response)
args = params(request)
- @model.search(args)
+ encode_result(request, response, @model.search(args))
end
def do_destroy(request, response)
@@ -91,4 +91,8 @@ class Puppet::Network::HTTP::Handler
def params(request)
raise NotImplementedError
end
+
+ def encode_result(request, response, result)
+ raise NotImplementedError
+ end
end
diff --git a/lib/puppet/network/http/mongrel/rest.rb b/lib/puppet/network/http/mongrel/rest.rb
index d87f9c733..0d29a822e 100644
--- a/lib/puppet/network/http/mongrel/rest.rb
+++ b/lib/puppet/network/http/mongrel/rest.rb
@@ -28,4 +28,9 @@ class Puppet::Network::HTTP::MongrelREST < Puppet::Network::HTTP::Handler
def params(request)
Mongrel::HttpRequest.query_parse(request.params["QUERY_STRING"])
end
+
+ def encode_result(request, response, result)
+ response.start(200) do |head, body|
+ end
+ end
end
diff --git a/lib/puppet/network/http/webrick/rest.rb b/lib/puppet/network/http/webrick/rest.rb
index 33b1ad8dc..1475ed781 100644
--- a/lib/puppet/network/http/webrick/rest.rb
+++ b/lib/puppet/network/http/webrick/rest.rb
@@ -33,4 +33,8 @@ class Puppet::Network::HTTP::WEBrickREST < Puppet::Network::HTTP::Handler
def params(request)
request.query
end
+
+ def encode_result(request, response, result)
+ result
+ end
end \ No newline at end of file
diff --git a/spec/unit/network/http/mongrel/rest.rb b/spec/unit/network/http/mongrel/rest.rb
index 7df63db14..f5bb867f7 100644
--- a/spec/unit/network/http/mongrel/rest.rb
+++ b/spec/unit/network/http/mongrel/rest.rb
@@ -56,6 +56,7 @@ describe Puppet::Network::HTTP::MongrelREST, "when receiving a request" do
before do
@mock_request = mock('mongrel http request')
@mock_response = mock('mongrel http response')
+ @mock_response.stubs(:start)
@mock_model_class = mock('indirected model class')
Puppet::Indirector::Indirection.stubs(:model).with(:foo).returns(@mock_model_class)
@mock_mongrel = mock('mongrel http server')
@@ -176,13 +177,35 @@ describe Puppet::Network::HTTP::MongrelREST, "when receiving a request" do
@handler.process(@mock_request, @mock_response)
end
- it "should generate a 200 response when a model find call succeeds"
- it "should generate a 200 response when a model search call succeeds"
+ it "should generate a 200 response when a model find call succeeds" do
+ @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET',
+ Mongrel::Const::REQUEST_PATH => '/foo/key',
+ 'QUERY_STRING' => ''})
+ @mock_model_class.stubs(:find)
+ @mock_response.expects(:start).with(200)
+ @handler.process(@mock_request, @mock_response)
+ end
+
+ it "should generate a 200 response when a model search call succeeds" do
+ @mock_request.stubs(:params).returns({ Mongrel::Const::REQUEST_METHOD => 'GET',
+ Mongrel::Const::REQUEST_PATH => '/foos',
+ 'QUERY_STRING' => ''})
+ @mock_model_class.stubs(:search)
+ @mock_response.expects(:start).with(200)
+ @handler.process(@mock_request, @mock_response)
+ end
+
it "should generate a 200 response when a model destroy call succeeds"
+
it "should generate a 200 response when a model save call succeeds"
+
it "should return a serialized object when a model find call succeeds"
+
it "should return a list of serialized object matches when a model search call succeeds"
+
it "should return a serialized success result when a model destroy call succeeds"
+
it "should return a serialized success result when a model save call succeeds"
+
it "should serialize a controller exception when an exception is thrown by the handler"
end
diff --git a/spec/unit/network/server.rb b/spec/unit/network/server.rb
index 97ab4443a..48626fe43 100644
--- a/spec/unit/network/server.rb
+++ b/spec/unit/network/server.rb
@@ -278,5 +278,7 @@ describe Class.new, "put these somewhere" do
it "should deny access to clients based upon rules"
end
-
-
+describe Puppet::Indirector, "stuff required by HTTP servers" do
+ it "should provide the model with the ability to serialize to XML"
+ it "should provide the model with the ability to deserialize from XML"
+end