summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-21 23:33:24 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-09-21 23:33:24 +0000
commit98004b283f46794e3f9334ccdd286e1ccc8d065f (patch)
treeb17457eaa5837054fc97a98f8a4f8b26f6a7bc51
parenta1e27bc3fad9a142448ee46edf35e612b741d453 (diff)
downloadpuppet-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-xlib/puppet/server/report.rb35
-rwxr-xr-xtest/server/report.rb19
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