summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-08-28 23:28:37 +0000
committerluke <luke@980ebf18-57e1-0310-9a29-db15c13687c0>2006-08-28 23:28:37 +0000
commit04b25572bda950d3d088a31d88b4c27d35274fa2 (patch)
tree00f82e13432fbf5c0112d9901128dc556f8d7e8c
parent47dbf82cbdf41d4103c6b3b0df6c008f7de76229 (diff)
downloadpuppet-04b25572bda950d3d088a31d88b4c27d35274fa2.tar.gz
puppet-04b25572bda950d3d088a31d88b4c27d35274fa2.tar.xz
puppet-04b25572bda950d3d088a31d88b4c27d35274fa2.zip
Fixing report autoloading; I was calling the wrong method, and they were never getting loaded
git-svn-id: https://reductivelabs.com/svn/puppet/trunk@1506 980ebf18-57e1-0310-9a29-db15c13687c0
-rwxr-xr-xlib/puppet/server/report.rb50
-rwxr-xr-xtest/server/report.rb42
2 files changed, 65 insertions, 27 deletions
diff --git a/lib/puppet/server/report.rb b/lib/puppet/server/report.rb
index 8aa4449b2..3d02f5f3d 100755
--- a/lib/puppet/server/report.rb
+++ b/lib/puppet/server/report.rb
@@ -21,6 +21,7 @@ class Server
)
@reports = {}
+ @reportloader = Puppet::Autoload.new(self, "puppet/reports")
class << self
attr_reader :hooks
@@ -45,21 +46,12 @@ class Server
def self.report(name)
name = name.intern if name.is_a? String
unless @reports.include? reportmethod(name)
- begin
- require "puppet/reports/#{name.to_s}"
- unless @reports.include? name
- Puppet.warning(
- "Loaded report file for %s but report was not defined" %
- name
- )
- return nil
- end
- rescue LoadError => detail
- if Puppet[:debug]
- puts detail.backtrace
- end
- Puppet.warning "Could not load report %s: %s" %
- [name, detail]
+ @reportloader.load(name)
+ unless @reports.include? name
+ Puppet.warning(
+ "Loaded report file for %s but report was not defined" %
+ name
+ )
return nil
end
end
@@ -161,19 +153,23 @@ class Server
end
Puppet[:reports].split(/\s*,\s*/).each do |name|
- method = self.class.reportmethod(name)
-
- Puppet.info "Processing report %s" % name
- begin
- send(method, report)
- rescue NoMethodError => detail
- Puppet.warning "No report named '%s'" % name
- rescue => detail
- if Puppet[:debug]
- puts detail.backtrace
+ method = self.class.report(name)
+
+ if respond_to? method
+ Puppet.info "Processing report %s" % name
+ begin
+ send(method, report)
+ rescue NoMethodError => detail
+ Puppet.warning "No report named '%s'" % name
+ rescue => detail
+ if Puppet[:debug]
+ puts detail.backtrace
+ end
+ Puppet.err "Report %s failed: %s" %
+ [name, detail]
end
- Puppet.err "Report %s failed: %s" %
- [name, detail]
+ else
+ Puppet.warning "No report named '%s'" % name
end
end
end
diff --git a/test/server/report.rb b/test/server/report.rb
index 9b4a62bd6..5e74dc1da 100755
--- a/test/server/report.rb
+++ b/test/server/report.rb
@@ -87,6 +87,48 @@ class TestReportServer < Test::Unit::TestCase
"Directory was not created")
end
end
+
+ def test_report_autoloading
+ # Create a fake report
+ fakedir = tempfile()
+ $: << fakedir
+ cleanup do $:.delete(fakedir) end
+
+ libdir = File.join(fakedir, "puppet", "reports")
+ FileUtils.mkdir_p(libdir)
+
+ $myreportrun = false
+ file = File.join(libdir, "myreport.rb")
+ File.open(file, "w") { |f| f.puts %{
+ Puppet::Server::Report.newreport(:myreport) do |report|
+ $myreportrun = true
+ return report
+ end
+ }
+ }
+ Puppet[:reports] = "myreport"
+
+ # Create a server
+ server = Puppet::Server::Report.new
+
+ method = nil
+ assert_nothing_raised {
+ method = Puppet::Server::Report.reportmethod(:myreport)
+ }
+ assert(method, "Did not get report method")
+
+ assert(! server.respond_to?(method),
+ "Server already responds to report method")
+
+ retval = nil
+ assert_nothing_raised {
+ retval = server.send(:process, YAML.dump("a string"))
+ }
+ assert($myreportrun, "Did not run report")
+ assert(server.respond_to?(method),
+ "Server does not respond to report method")
+
+ end
end
# $Id$