diff options
-rw-r--r-- | lib/chef/event_dispatch/base.rb | 4 | ||||
-rw-r--r-- | lib/chef/formatters/base.rb | 4 | ||||
-rw-r--r-- | lib/chef/run_context/cookbook_compiler.rb | 5 | ||||
-rw-r--r-- | spec/unit/run_context/cookbook_compiler_spec.rb | 42 |
4 files changed, 48 insertions, 7 deletions
diff --git a/lib/chef/event_dispatch/base.rb b/lib/chef/event_dispatch/base.rb index 6c6b2fa3bb..04c960c7af 100644 --- a/lib/chef/event_dispatch/base.rb +++ b/lib/chef/event_dispatch/base.rb @@ -232,11 +232,11 @@ class Chef end # Called after the recipe has been loaded - def recipe_file_loaded(path) + def recipe_file_loaded(path, recipe) end # Called after a recipe file fails to load - def recipe_file_load_failed(path, exception) + def recipe_file_load_failed(path, exception, recipe) end # Called when a recipe cannot be resolved diff --git a/lib/chef/formatters/base.rb b/lib/chef/formatters/base.rb index 3641e619e9..536bf72e02 100644 --- a/lib/chef/formatters/base.rb +++ b/lib/chef/formatters/base.rb @@ -203,12 +203,12 @@ class Chef end # Delegates to #file_loaded - def recipe_file_loaded(path) + def recipe_file_loaded(path, recipe) file_loaded(path) end # Delegates to #file_load_failed - def recipe_file_load_failed(path, exception) + def recipe_file_load_failed(path, exception, recipe) file_load_failed(path, exception) end diff --git a/lib/chef/run_context/cookbook_compiler.rb b/lib/chef/run_context/cookbook_compiler.rb index bdf3a1251c..b2a8d236a3 100644 --- a/lib/chef/run_context/cookbook_compiler.rb +++ b/lib/chef/run_context/cookbook_compiler.rb @@ -137,13 +137,14 @@ class Chef @events.recipe_load_start(run_list_expansion.recipes.size) run_list_expansion.recipes.each do |recipe| begin + path = resolve_recipe(recipe) @run_context.load_recipe(recipe) + @events.recipe_file_loaded(path, recipe) rescue Chef::Exceptions::RecipeNotFound => e @events.recipe_not_found(e) raise rescue Exception => e - path = resolve_recipe(recipe) - @events.recipe_file_load_failed(path, e) + @events.recipe_file_load_failed(path, e, recipe) raise end end diff --git a/spec/unit/run_context/cookbook_compiler_spec.rb b/spec/unit/run_context/cookbook_compiler_spec.rb index 868bed4bfd..e93088cd5f 100644 --- a/spec/unit/run_context/cookbook_compiler_spec.rb +++ b/spec/unit/run_context/cookbook_compiler_spec.rb @@ -158,7 +158,47 @@ describe Chef::RunContext::CookbookCompiler do end describe "loading recipes" do - # Tests for this behavior are in RunContext's tests + # Additional tests for this behavior are in RunContext's tests + + describe "event dispatch" do + let(:recipe) { "dependency1::default" } + let(:recipe_path) do + File.expand_path("../../../data/run_context/cookbooks/dependency1/recipes/default.rb", __FILE__) + end + before do + node.run_list(recipe) + end + subject { compiler.compile_recipes } + + it "dispatches normally" do + allow(run_context).to receive(:load_recipe) + expect(events).to receive(:recipe_load_start).with(1) + expect(events).to receive(:recipe_file_loaded).with(recipe_path, "dependency1::default") + expect(events).to receive(:recipe_load_complete).with(no_args) + subject + end + + it "dispatches when a recipe is not found" do + exc = Chef::Exceptions::RecipeNotFound.new + allow(run_context).to receive(:load_recipe).and_raise(exc) + expect(events).to receive(:recipe_load_start).with(1) + expect(events).to_not receive(:recipe_file_loaded) + expect(events).to receive(:recipe_not_found).with(exc) + expect(events).to_not receive(:recipe_load_complete) + expect { subject }.to raise_error(exc) + end + + it "dispatches when a recipe has an error" do + exc = ArgumentError.new + allow(run_context).to receive(:load_recipe).and_raise(exc) + expect(events).to receive(:recipe_load_start).with(1) + expect(events).to_not receive(:recipe_file_loaded) + expect(events).to receive(:recipe_file_load_failed).with(recipe_path, exc, "dependency1::default") + expect(events).to_not receive(:recipe_load_complete) + expect { subject }.to raise_error(exc) + end + end + end describe "listing cookbook order" do |