summaryrefslogtreecommitdiff
path: root/spec/unit/handler_spec.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2016-05-13 14:14:04 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2016-05-13 14:14:04 -0700
commit96f8d9583c7f7e16efeac0c4fe085a83d83f5041 (patch)
tree2a0c80a5ad8b799ce790dc50e0cb1eaa5b7d8849 /spec/unit/handler_spec.rb
parent103c34b057bba9061c010b4a9836977e9a8dbb90 (diff)
downloadchef-96f8d9583c7f7e16efeac0c4fe085a83d83f5041.tar.gz
wire up chef handlers directly from librarieslcg/better-handler-wiring
smear just a little bit of minimal DSL wiring into the Chef::Report class so that classes can wire themselves up automatically as handlers. this also extends the Chef::Config[*_handler] arrays to take classes as well as instances. in the case of passing a class that is not a singleton, a new instance will be created when the report is run. it will obviously be difficult to pass any state into this instance. if the class that is passed supports calling `#instance` we assume it is a Singleton and get the instance and use that. this is to support other chef code grabbing/creating the singleton instance and poking it with data (probably configuring where the reporter goes and what creds it needs to publish and other stuff).
Diffstat (limited to 'spec/unit/handler_spec.rb')
-rw-r--r--spec/unit/handler_spec.rb87
1 files changed, 87 insertions, 0 deletions
diff --git a/spec/unit/handler_spec.rb b/spec/unit/handler_spec.rb
index 65c3ddc4cb..a56645fa78 100644
--- a/spec/unit/handler_spec.rb
+++ b/spec/unit/handler_spec.rb
@@ -212,4 +212,91 @@ describe Chef::Handler do
end
end
+ describe "library report handler" do
+ before do
+ # we need to lazily declare this after we have reset Chef::Config in the default rspec before handler
+ class MyTestHandler < Chef::Handler
+ handler_for :report, :exception, :start
+
+ class << self
+ attr_accessor :ran_report
+ end
+
+ def report
+ self.class.ran_report = true
+ end
+ end
+ end
+
+ it "gets added to Chef::Config[:report_handlers]" do
+ expect(Chef::Config[:report_handlers].include?(MyTestHandler)).to be true
+ end
+
+ it "gets added to Chef::Config[:exception_handlers]" do
+ expect(Chef::Config[:exception_handlers].include?(MyTestHandler)).to be true
+ end
+
+ it "gets added to Chef::Config[:start_handlers]" do
+ expect(Chef::Config[:start_handlers].include?(MyTestHandler)).to be true
+ end
+
+ it "runs the report handler" do
+ Chef::Handler.run_report_handlers(@run_status)
+ expect(MyTestHandler.ran_report).to be true
+ end
+
+ it "runs the exception handler" do
+ Chef::Handler.run_exception_handlers(@run_status)
+ expect(MyTestHandler.ran_report).to be true
+ end
+
+ it "runs the start handler" do
+ Chef::Handler.run_start_handlers(@run_status)
+ expect(MyTestHandler.ran_report).to be true
+ end
+ end
+
+ describe "library singleton report handler" do
+ before do
+ # we need to lazily declare this after we have reset Chef::Config in the default rspec before handler
+ class MyTestHandler < Chef::Handler
+ handler_for :report, :exception, :start
+
+ include Singleton
+
+ attr_accessor :ran_report
+
+ def report
+ self.ran_report = true
+ end
+ end
+ end
+
+ it "gets added to Chef::Config[:report_handlers]" do
+ expect(Chef::Config[:report_handlers].include?(MyTestHandler)).to be true
+ end
+
+ it "gets added to Chef::Config[:exception_handlers]" do
+ expect(Chef::Config[:exception_handlers].include?(MyTestHandler)).to be true
+ end
+
+ it "gets added to Chef::Config[:start_handlers]" do
+ expect(Chef::Config[:start_handlers].include?(MyTestHandler)).to be true
+ end
+
+ it "runs the report handler" do
+ Chef::Handler.run_report_handlers(@run_status)
+ expect(MyTestHandler.instance.ran_report).to be true
+ end
+
+ it "runs the exception handler" do
+ Chef::Handler.run_exception_handlers(@run_status)
+ expect(MyTestHandler.instance.ran_report).to be true
+ end
+
+ it "runs the start handler" do
+ Chef::Handler.run_start_handlers(@run_status)
+ expect(MyTestHandler.instance.ran_report).to be true
+ end
+ end
end