diff options
| author | Rick Bradley <rick@rickbradley.com> | 2007-10-15 12:04:30 -0500 |
|---|---|---|
| committer | Rick Bradley <rick@rickbradley.com> | 2007-10-15 12:04:30 -0500 |
| commit | ec71e05a162ec299982b90707cc16231c608997b (patch) | |
| tree | c16376f369f5ad880b17f47888c9cea33a9008bb | |
| parent | 31384fea2263d9ee0e65312b4a0b956436022e63 (diff) | |
| download | puppet-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.rb | 4 | ||||
| -rw-r--r-- | lib/puppet/network/http/mongrel.rb | 19 | ||||
| -rw-r--r-- | lib/puppet/network/http/webrick.rb | 21 | ||||
| -rw-r--r-- | spec/unit/network/http/mongrel.rb | 53 | ||||
| -rw-r--r-- | spec/unit/network/http/webrick.rb | 52 | ||||
| -rw-r--r-- | spec/unit/network/server.rb | 24 |
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" |
