diff options
-rwxr-xr-x | lib/puppet/server/report.rb | 35 | ||||
-rwxr-xr-x | test/server/report.rb | 19 |
2 files changed, 43 insertions, 11 deletions
diff --git a/lib/puppet/server/report.rb b/lib/puppet/server/report.rb index 719ab3a16..027c78f9d 100755 --- a/lib/puppet/server/report.rb +++ b/lib/puppet/server/report.rb @@ -46,12 +46,15 @@ class Server def self.report(name) name = name.intern if name.is_a? String unless @reports.include? name - @reportloader.load(name) - unless @reports.include? name - Puppet.warning( - "Loaded report file for %s but report was not defined" % - name - ) + if @reportloader.load(name) + unless @reports.include? name + Puppet.warning( + "Loaded report file for %s but report was not defined" % + name + ) + return nil + end + else return nil end end @@ -88,7 +91,14 @@ class Server report = CGI.unescape(report) end - process(report) + begin + process(report) + rescue => detail + Puppet.err "Could not process report %s: %s" % [$1, detail] + if Puppet[:trace] + puts detail.backtrace + end + end # We don't want any tracking back in the fs. Unlikely, but there # you go. @@ -152,10 +162,8 @@ class Server return end - Puppet[:reports].split(/\s*,\s*/).each do |name| - method = self.class.report(name) - - if respond_to? method + reports().each do |name| + if method = self.class.report(name) and respond_to? method Puppet.info "Processing report %s" % name begin send(method, report) @@ -171,6 +179,11 @@ class Server end end end + + # Handle the parsing of the reports attribute. + def reports + Puppet[:reports].gsub(/(^\s+)|(\s+$)/, '').split(/\s*,\s*/) + end end end end diff --git a/test/server/report.rb b/test/server/report.rb index 69ade8526..f5f1c1412 100755 --- a/test/server/report.rb +++ b/test/server/report.rb @@ -121,6 +121,25 @@ class TestReportServer < Test::Unit::TestCase assert(server.respond_to?(method), "Server does not respond to report method") + # Now make sure our server doesn't die on missing reports + Puppet[:reports] = "fakereport" + assert_nothing_raised { + retval = server.send(:process, YAML.dump("a string")) + } + end + + def test_reports + Puppet[:reports] = "myreport" + + # Create a server + server = Puppet::Server::Report.new + + {"myreport" => ["myreport"], + " fake, another, yay " => ["fake", "another", "yay"] + }.each do |str, ary| + Puppet[:reports] = str + assert_equal(ary, server.send(:reports)) + end end end |