summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Bradley <rick@rickbradley.com>2007-10-15 12:04:30 -0500
committerRick Bradley <rick@rickbradley.com>2007-10-15 12:04:30 -0500
commitec71e05a162ec299982b90707cc16231c608997b (patch)
treec16376f369f5ad880b17f47888c9cea33a9008bb
parent31384fea2263d9ee0e65312b4a0b956436022e63 (diff)
downloadpuppet-ec71e05a162ec299982b90707cc16231c608997b.tar.gz
puppet-ec71e05a162ec299982b90707cc16231c608997b.tar.xz
puppet-ec71e05a162ec299982b90707cc16231c608997b.zip
More unit specs for mongrel and webrick; more code to make them work, yo.
-rw-r--r--lib/puppet/network/http.rb4
-rw-r--r--lib/puppet/network/http/mongrel.rb19
-rw-r--r--lib/puppet/network/http/webrick.rb21
-rw-r--r--spec/unit/network/http/mongrel.rb53
-rw-r--r--spec/unit/network/http/webrick.rb52
-rw-r--r--spec/unit/network/server.rb24
6 files changed, 147 insertions, 26 deletions
diff --git a/lib/puppet/network/http.rb b/lib/puppet/network/http.rb
index 86784e50e..5dddad848 100644
--- a/lib/puppet/network/http.rb
+++ b/lib/puppet/network/http.rb
@@ -1,7 +1,7 @@
class Puppet::Network::HTTP
def self.server_class_by_type(kind)
- return Puppet::Network::HTTP::WEBRick if kind == :webrick
- return Puppet::Network::HTTP::Mongrel if kind == :mongrel
+ return Puppet::Network::HTTP::WEBRick if kind.to_sym == :webrick
+ return Puppet::Network::HTTP::Mongrel if kind.to_sym == :mongrel
raise ArgumentError, "Unknown HTTP server name [#{kind}]"
end
end
diff --git a/lib/puppet/network/http/mongrel.rb b/lib/puppet/network/http/mongrel.rb
index dda3c1751..dbdd72d42 100644
--- a/lib/puppet/network/http/mongrel.rb
+++ b/lib/puppet/network/http/mongrel.rb
@@ -1,2 +1,21 @@
+require 'mongrel'
+
class Puppet::Network::HTTP::Mongrel
+ def initialize(args = {})
+ @listening = false
+ end
+
+ def listen(args = {})
+ raise ArgumentError if args.keys.empty?
+ raise "Mongrel server is already listening" if @listening
+ @server = Mongrel::HttpServer.new("0.0.0.0", "3000")
+ @server.run
+ @listening = true
+ end
+
+ def unlisten
+ raise "Mongrel server is not listening" unless @listening
+ @server.graceful_shutdown
+ @listening = false
+ end
end
diff --git a/lib/puppet/network/http/webrick.rb b/lib/puppet/network/http/webrick.rb
index ad15261f6..77e55a224 100644
--- a/lib/puppet/network/http/webrick.rb
+++ b/lib/puppet/network/http/webrick.rb
@@ -1,2 +1,21 @@
-class Puppet::Network::HTTP::WEBRick
+require 'webrick'
+require 'webrick/https'
+
+class Puppet::Network::HTTP::WEBRick < WEBrick::HTTPServer
+ def initialize(args = {})
+ @listening = false
+ end
+
+ def listen(args = {})
+ raise ArgumentError if args.keys.empty?
+ raise "WEBRick server is already listening" if @listening
+ # TODO / FIXME: this should be moved out of the wacky Puppet global namespace!
+ Puppet.start
+ @listening = true
+ end
+
+ def unlisten
+ raise "WEBRick server is not listening" unless @listening
+ shutdown
+ end
end
diff --git a/spec/unit/network/http/mongrel.rb b/spec/unit/network/http/mongrel.rb
new file mode 100644
index 000000000..3e40efe79
--- /dev/null
+++ b/spec/unit/network/http/mongrel.rb
@@ -0,0 +1,53 @@
+#!/usr/bin/env ruby
+#
+# Created by Rick Bradley on 2007-10-15.
+# Copyright (c) 2007. All rights reserved.
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'puppet/network/http'
+
+describe Puppet::Network::HTTP::Mongrel, "when turning on listening" do
+ before do
+ @server = Puppet::Network::HTTP::Mongrel.new
+ end
+
+ it "should fail if already listening" do
+ @server.listen(:foo => :bar)
+ Proc.new { @server.listen(:foo => :bar) }.should raise_error(RuntimeError)
+ end
+
+ it "should require at least one handler" do
+ Proc.new { @server.listen }.should raise_error(ArgumentError)
+ end
+
+ it "should order a mongrel server to start" do
+ mock_mongrel = mock('mongrel httpserver')
+ mock_mongrel.expects(:run)
+ Mongrel::HttpServer.expects(:new).returns(mock_mongrel)
+ @server.listen(:foo => :bar)
+ end
+
+ it "should instantiate a specific handler (mongrel+rest, e.g.) for each handler, for each protocol being served (xmlrpc, rest, etc.)"
+ it "should mount handlers on a mongrel path"
+ it "should be able to specify the address on which mongrel will listen"
+ it "should be able to specify the port on which mongrel will listen"
+end
+
+describe Puppet::Network::HTTP::WEBRick, "when turning off listening" do
+ before do
+ @mock_mongrel = mock('mongrel httpserver')
+ @mock_mongrel.stubs(:run)
+ Mongrel::HttpServer.stubs(:new).returns(@mock_mongrel)
+ @server = Puppet::Network::HTTP::Mongrel.new
+ end
+
+ it "should fail unless listening" do
+ Proc.new { @server.unlisten }.should raise_error(RuntimeError)
+ end
+
+ it "should order mongrel server to stop" do
+ @server.listen(:foo => :bar)
+ @mock_mongrel.expects(:graceful_shutdown)
+ @server.unlisten
+ end
+end
diff --git a/spec/unit/network/http/webrick.rb b/spec/unit/network/http/webrick.rb
new file mode 100644
index 000000000..d162288fc
--- /dev/null
+++ b/spec/unit/network/http/webrick.rb
@@ -0,0 +1,52 @@
+#!/usr/bin/env ruby
+#
+# Created by Rick Bradley on 2007-10-15.
+# Copyright (c) 2007. All rights reserved.
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+require 'puppet/network/http'
+
+describe Puppet::Network::HTTP::WEBRick, "when turning on listening" do
+ before do
+ @server = Puppet::Network::HTTP::WEBRick.new
+ end
+
+ it "should fail if already listening" do
+ Puppet.stubs(:start)
+ @server.listen(:foo => :bar)
+ Proc.new { @server.listen(:foo => :bar) }.should raise_error(RuntimeError)
+ end
+
+ it "should require at least one handler" do
+ Proc.new { @server.listen }.should raise_error(ArgumentError)
+ end
+
+ it "should order a webrick server to start" do
+ Puppet.expects(:start)
+ @server.listen(:foo => :bar)
+ end
+
+ it "should instantiate a specific handler (webrick+rest, e.g.) for each handler, for each protocol being served (xmlrpc, rest, etc.)"
+ it "should mount handlers on a webrick path"
+
+ it "should be able to specify the address on which webrick will listen"
+ it "should be able to specify the port on which webrick will listen"
+end
+
+describe Puppet::Network::HTTP::WEBRick, "when turning off listening" do
+ before do
+ @server = Puppet::Network::HTTP::WEBRick.new
+ end
+
+ it "should fail unless listening" do
+ Proc.new { @server.unlisten }.should raise_error(RuntimeError)
+ end
+
+ it "should order webrick server to stop" do
+ Puppet.stubs(:start).returns(true)
+ @server.should respond_to(:shutdown)
+ @server.expects(:shutdown)
+ @server.listen(:foo => :bar)
+ @server.unlisten
+ end
+end
diff --git a/spec/unit/network/server.rb b/spec/unit/network/server.rb
index b2994c6f9..f5d5e25d5 100644
--- a/spec/unit/network/server.rb
+++ b/spec/unit/network/server.rb
@@ -4,10 +4,8 @@
# Copyright (c) 2007. All rights reserved.
require File.dirname(__FILE__) + '/../../spec_helper'
-
require 'puppet/network/server'
-
describe Puppet::Network::Server, "when initializing" do
before do
@mock_http_server_class = mock('http server class')
@@ -212,7 +210,7 @@ describe Puppet::Network::Server, "when listening is being turned off" do
@server.stubs(:http_server).returns(@mock_http_server)
@server.listen
end
-
+
it "should cause the HTTP server to stop listening when listening is turned off" do
@mock_http_server.expects(:unlisten)
@server.unlisten
@@ -224,26 +222,6 @@ describe Puppet::Network::Server, "when listening is being turned off" do
end
end
-describe Class.new, "Puppet::Network::HTTP::Webrick (webrick http server class)" do
- it "should allow listening"
- it "should get a set of handlers when listening"
- it "should allow unlistening"
- it "should instantiate a specific handler (webrick+rest, e.g.) for each handler when listening, for each protocol being served (xmlrpc, rest, etc.)"
- it "should mount each handler with the appropriate webrick path when listening"
- it "should start webrick when listening"
- it "should stop webrick when unlistening"
-end
-
-describe Class.new, "Puppet::Network::HTTP::Mongrel (mongrel http server class)" do
- it "should allow listening"
- it "should get a set of handlers when listening"
- it "should allow unlistening"
- it "should instantiate a specific handler (mongrel+rest, e.g.) for each handler when listening, for each protocol being served (xmlrpc, rest, etc.)"
- it "should mount each handler with the appropriate mongrel path when listening"
- it "should start mongrel when listening"
- it "should stop mongrel when unlistening"
-end
-
describe Class.new, "Puppet::Network::Handler::*::* (handler class (e.g., webrick+rest or mongrel+xmlrpc))" do
it "should be able to unserialize a request from the given httpserver answering for the given protocol handler, to be used by a controller"
it "should be able to serialize a result from a controller for return by the given httpserver responding with the given protocol"