diff options
author | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-09-21 23:33:24 +0000 |
---|---|---|
committer | luke <luke@980ebf18-57e1-0310-9a29-db15c13687c0> | 2006-09-21 23:33:24 +0000 |
commit | 98004b283f46794e3f9334ccdd286e1ccc8d065f (patch) | |
tree | b17457eaa5837054fc97a98f8a4f8b26f6a7bc51 | |
parent | a1e27bc3fad9a142448ee46edf35e612b741d453 (diff) | |
download | puppet-98004b283f46794e3f9334ccdd286e1ccc8d065f.tar.gz puppet-98004b283f46794e3f9334ccdd286e1ccc8d065f.tar.xz puppet-98004b283f46794e3f9334ccdd286e1ccc8d065f.zip |
Adding some error handling for when a non-existent report is asked for, and adding a bit more testing.
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1659 980ebf18-57e1-0310-9a29-db15c13687c0
-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 |