summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/network/server.rb12
-rwxr-xr-xspec/integration/defaults.rb20
-rwxr-xr-xspec/unit/network/server.rb60
3 files changed, 47 insertions, 45 deletions
diff --git a/lib/puppet/network/server.rb b/lib/puppet/network/server.rb
index de32db02f..701be54ca 100644
--- a/lib/puppet/network/server.rb
+++ b/lib/puppet/network/server.rb
@@ -55,11 +55,14 @@ class Puppet::Network::Server
end
def initialize(args = {})
+ valid_args = [:handlers, :xmlrpc_handlers, :port]
+ bad_args = args.keys.find_all { |p| ! valid_args.include?(p) }.collect { |p| p.to_s }.join(",")
+ raise ArgumentError, "Invalid argument(s) %s" % bad_args unless bad_args == ""
@server_type = Puppet[:servertype] or raise "No servertype configuration found." # e.g., WEBrick, Mongrel, etc.
http_server_class || raise(ArgumentError, "Could not determine HTTP Server class for server type [#{@server_type}]")
- @address = args[:address] || Puppet[:bindaddress] || raise(ArgumentError, "Must specify :address or configure Puppet :bindaddress.")
@port = args[:port] || Puppet[:masterport] || raise(ArgumentError, "Must specify :port or configure Puppet :masterport")
+ @address = determine_bind_address()
@protocols = [ :rest, :xmlrpc ]
@listening = false
@@ -157,5 +160,10 @@ class Puppet::Network::Server
def http_server_class_by_type(kind)
Puppet::Network::HTTP.server_class_by_type(kind)
end
-end
+ def determine_bind_address
+ tmp = Puppet[:bindaddress]
+ return tmp if tmp != ""
+ return server_type.to_s == "webrick" ? "0.0.0.0" : "127.0.0.1"
+ end
+end
diff --git a/spec/integration/defaults.rb b/spec/integration/defaults.rb
index 003712aab..2d51a3cbc 100755
--- a/spec/integration/defaults.rb
+++ b/spec/integration/defaults.rb
@@ -49,24 +49,8 @@ describe "Puppet defaults" do
Puppet.settings.element(:rundir).group.should be_nil
end
- it "should default to 0.0.0.0 for its bind address and 'webrick' for its server type" do
- Puppet.settings[:servertype] = "webrick"
- Puppet.settings[:bindaddress].should == "0.0.0.0"
- end
-
- it "should default to 0.0.0.0 for its bind address if the server is webrick" do
- Puppet.settings[:servertype] = "webrick"
- Puppet.settings[:bindaddress].should == "0.0.0.0"
- end
-
- it "should default to 127.0.0.1 for its bind address if the server is mongrel" do
- Puppet.settings[:servertype] = "mongrel"
- Puppet.settings[:bindaddress].should == "127.0.0.1"
- end
-
- it "should allow specification of a different bind address" do
- Puppet.settings[:bindaddress] = "192.168.0.1"
- Puppet.settings[:bindaddress].should == "192.168.0.1"
+ it "should use a bind address of ''" do
+ Puppet.settings[:bindaddress].should == ""
end
[:factdest, :pluginpath].each do |setting|
diff --git a/spec/unit/network/server.rb b/spec/unit/network/server.rb
index 5332964c6..cc4083e40 100755
--- a/spec/unit/network/server.rb
+++ b/spec/unit/network/server.rb
@@ -12,21 +12,23 @@ describe Puppet::Network::Server do
Puppet.settings.stubs(:use)
Puppet.settings.stubs(:value).with(:name).returns("me")
Puppet.settings.stubs(:value).with(:servertype).returns(:suparserver)
+ Puppet.settings.stubs(:value).with(:bindaddress).returns("")
+ Puppet.settings.stubs(:value).with(:masterport).returns(8140)
Puppet::Network::HTTP.stubs(:server_class_by_type).returns(@mock_http_server_class)
Puppet.settings.stubs(:value).with(:servertype).returns(:suparserver)
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337)
+ @server = Puppet::Network::Server.new(:port => 31337)
end
describe "when initializing" do
before do
Puppet::Indirector::Indirection.stubs(:model).returns mock('indirection')
Puppet::Network::Handler.stubs(:handler).returns mock('xmlrpc_handler')
+ Puppet.settings.stubs(:value).with(:bindaddress).returns("")
+ Puppet.settings.stubs(:value).with(:masterport).returns('')
end
- it "should allow specifying a listening address" do
- Puppet.settings.stubs(:value).with(:masterport).returns('')
- @server = Puppet::Network::Server.new(:address => "127.0.0.1")
- @server.address.should == "127.0.0.1"
+ it 'should fail if an unknown option is provided' do
+ lambda { Puppet::Network::Server.new(:foo => 31337) }.should raise_error(ArgumentError)
end
it "should allow specifying a listening port" do
@@ -35,13 +37,27 @@ describe Puppet::Network::Server do
@server.port.should == 31337
end
- it "should use the Puppet configurator to find a default listening address" do
+ it "should use the :bindaddress setting to determine the default listening address" do
Puppet.settings.stubs(:value).with(:masterport).returns('')
Puppet.settings.expects(:value).with(:bindaddress).returns("10.0.0.1")
@server = Puppet::Network::Server.new
@server.address.should == "10.0.0.1"
end
+ it "should set the bind address to '127.0.0.1' if the default address is an empty string and the server type is mongrel" do
+ Puppet.settings.stubs(:value).with(:servertype).returns("mongrel")
+ Puppet.settings.expects(:value).with(:bindaddress).returns("")
+ @server = Puppet::Network::Server.new
+ @server.address.should == '127.0.0.1'
+ end
+
+ it "should set the bind address to '0.0.0.0' if the default address is an empty string and the server type is webrick" do
+ Puppet.settings.stubs(:value).with(:servertype).returns("webrick")
+ Puppet.settings.expects(:value).with(:bindaddress).returns("")
+ @server = Puppet::Network::Server.new
+ @server.address.should == '0.0.0.0'
+ end
+
it "should use the Puppet configurator to find a default listening port" do
Puppet.settings.stubs(:value).with(:bindaddress).returns('')
Puppet.settings.expects(:value).with(:masterport).returns(6667)
@@ -49,12 +65,6 @@ describe Puppet::Network::Server do
@server.port.should == 6667
end
- it "should fail to initialize if no listening address can be found" do
- Puppet.settings.stubs(:value).with(:masterport).returns(6667)
- Puppet.settings.stubs(:value).with(:bindaddress).returns(nil)
- lambda { Puppet::Network::Server.new }.should raise_error(ArgumentError)
- end
-
it "should fail to initialize if no listening port can be found" do
Puppet.settings.stubs(:value).with(:bindaddress).returns("127.0.0.1")
Puppet.settings.stubs(:value).with(:masterport).returns(nil)
@@ -63,49 +73,49 @@ describe Puppet::Network::Server do
it "should use the Puppet configurator to determine which HTTP server will be used to provide access to clients" do
Puppet.settings.expects(:value).with(:servertype).returns(:suparserver)
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337)
+ @server = Puppet::Network::Server.new(:port => 31337)
@server.server_type.should == :suparserver
end
it "should fail to initialize if there is no HTTP server known to the Puppet configurator" do
Puppet.settings.expects(:value).with(:servertype).returns(nil)
- lambda { Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337) }.should raise_error
+ lambda { Puppet::Network::Server.new(:port => 31337) }.should raise_error
end
it "should ask the Puppet::Network::HTTP class to fetch the proper HTTP server class" do
Puppet::Network::HTTP.expects(:server_class_by_type).with(:suparserver).returns(@mock_http_server_class)
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337)
+ @server = Puppet::Network::Server.new(:port => 31337)
end
it "should fail if the HTTP server class is unknown" do
Puppet::Network::HTTP.stubs(:server_class_by_type).returns(nil)
- lambda { Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337) }.should raise_error(ArgumentError)
+ lambda { Puppet::Network::Server.new(:port => 31337) }.should raise_error(ArgumentError)
end
it "should allow registering REST handlers" do
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337, :handlers => [ :foo, :bar, :baz])
+ @server = Puppet::Network::Server.new(:port => 31337, :handlers => [ :foo, :bar, :baz])
lambda { @server.unregister(:foo, :bar, :baz) }.should_not raise_error
end
it "should allow registering XMLRPC handlers" do
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337, :xmlrpc_handlers => [ :foo, :bar, :baz])
+ @server = Puppet::Network::Server.new(:port => 31337, :xmlrpc_handlers => [ :foo, :bar, :baz])
lambda { @server.unregister_xmlrpc(:foo, :bar, :baz) }.should_not raise_error
end
it "should not be listening after initialization" do
- Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337).should_not be_listening
+ Puppet::Network::Server.new(:port => 31337).should_not be_listening
end
it "should use the :main setting section" do
- Puppet.settings.expects(:use).with { |args| args.include?(:main) }
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337, :xmlrpc_handlers => [ :foo, :bar, :baz])
+ Puppet.settings.expects(:use).with { |*args| args.include?(:main) }
+ @server = Puppet::Network::Server.new(:port => 31337, :xmlrpc_handlers => [ :foo, :bar, :baz])
end
it "should use the Puppet[:name] setting section" do
Puppet.settings.expects(:value).with(:name).returns "me"
- Puppet.settings.expects(:use).with { |args| args.include?("me") }
+ Puppet.settings.expects(:use).with { |*args| args.include?("me") }
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337, :xmlrpc_handlers => [ :foo, :bar, :baz])
+ @server = Puppet::Network::Server.new(:port => 31337, :xmlrpc_handlers => [ :foo, :bar, :baz])
end
end
@@ -322,7 +332,7 @@ describe Puppet::Network::Server do
it "should allow for multiple configurations, each handling different indirections" do
Puppet::Indirector::Indirection.stubs(:model).returns mock('indirection')
- @server2 = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337)
+ @server2 = Puppet::Network::Server.new(:port => 31337)
@server.register(:foo, :bar)
@server2.register(:foo, :xyzzy)
@server.unregister(:foo, :bar)
@@ -443,7 +453,7 @@ describe Puppet::Network::Server do
Puppet::Indirector::Indirection.stubs(:model).returns mock('indirection')
Puppet::Network::Handler.stubs(:handler).returns mock('xmlrpc_handler')
- @server = Puppet::Network::Server.new(:address => "127.0.0.1", :port => 31337, :handlers => [:node], :xmlrpc_handlers => [:master])
+ @server = Puppet::Network::Server.new(:port => 31337, :handlers => [:node], :xmlrpc_handlers => [:master])
@mock_http_server = mock('http server')
@mock_http_server.stubs(:listen)
end