If you tried to just put an allow or deny line in the fileserver.conf
without a mount point, you got a really confusing error message:

    lib/puppet/network/handler/fileserver.rb:285:in `readconfig': undefined 
method `info' for nil:NilClass (NoMethodError)

Now instead we give an error saying no mount point was specified.

Reviewed-by: Josh Cooper <j...@puppetlabs.com>
Signed-off-by: Matt Robinson <m...@puppetlabs.com>
---
Local-branch: ticket/2.7.x/8704-fileserverconf_parse_errors
 lib/puppet/network/handler/fileserver.rb     |    3 ++
 spec/unit/network/handler/fileserver_spec.rb |   32 ++++++++++++++++++++++++++
 2 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/lib/puppet/network/handler/fileserver.rb 
b/lib/puppet/network/handler/fileserver.rb
index 5b4b17a..5da4ced 100755
--- a/lib/puppet/network/handler/fileserver.rb
+++ b/lib/puppet/network/handler/fileserver.rb
@@ -269,6 +269,7 @@ class Puppet::Network::Handler
               value = $2
               case var
               when "path"
+                raise FileServerError.new("No mount specified for argument 
#{var} #{value}") unless mount
                 if mount.name == MODULES
                   Puppet.warning "The '#{mount.name}' module can not have a 
path. Ignoring attempt to set it"
                 else
@@ -280,6 +281,7 @@ class Puppet::Network::Handler
                   end
                 end
               when "allow"
+                raise FileServerError.new("No mount specified for argument 
#{var} #{value}") unless mount
                 value.split(/\s*,\s*/).each { |val|
                   begin
                     mount.info "allowing #{val} access"
@@ -294,6 +296,7 @@ class Puppet::Network::Handler
                   end
                 }
               when "deny"
+                raise FileServerError.new("No mount specified for argument 
#{var} #{value}") unless mount
                 value.split(/\s*,\s*/).each { |val|
                   begin
                     mount.info "denying #{val} access"
diff --git a/spec/unit/network/handler/fileserver_spec.rb 
b/spec/unit/network/handler/fileserver_spec.rb
index 0885263..851736e 100755
--- a/spec/unit/network/handler/fileserver_spec.rb
+++ b/spec/unit/network/handler/fileserver_spec.rb
@@ -25,6 +25,38 @@ describe Puppet::Network::Handler::FileServer do
     @mount = Puppet::Network::Handler::FileServer::Mount.new("some_path", 
@basedir)
   end
 
+  describe "when parsing the fileserver.conf" do
+    it "should create a valid mount when a valid conf is read" do
+      config_file = tmpfile('fileserver.conf')
+      mountdir = tmpdir('mountdir')
+
+      conf_text = <<-HEREDOC
+        [mymount]
+          path #{mountdir}
+          allow anyone.com
+          deny nobody.com
+      HEREDOC
+      File.open(config_file, 'w') { |f| f.write conf_text }
+
+      fs = Puppet::Network::Handler::FileServer.new(:Config => config_file) 
+      mounts = fs.instance_variable_get(:@mounts)
+      mount = mounts["mymount"]
+      mount.path == mountdir
+      mount.instance_variable_get(:@declarations).map {|d| d.pattern}.should 
=~ [["com", "nobody"], ["com", "anyone"]]
+    end
+
+    ['path', 'allow', 'deny'].each do |arg|
+      it "should error if config file doesn't specify a mount for #{arg} 
argument" do
+        config_file = tmpfile('fileserver.conf')
+        File.open(config_file, 'w') { |f| f.puts "#{arg} 127.0.0.1/24" }
+
+        expect { 
+          Puppet::Network::Handler::FileServer.new(:Config => config_file) 
+        }.should raise_error(Puppet::Network::Handler::FileServerError, "No 
mount specified for argument #{arg} 127.0.0.1/24")
+      end
+    end
+  end
+
   it "should list a single directory" do
     @mount.list("/", false, false).should == [["/", "directory"]]
   end
-- 
1.7.3.1

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to puppet-dev@googlegroups.com.
To unsubscribe from this group, send email to 
puppet-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to