diff options
author | sersut <serdar@opscode.com> | 2013-06-18 12:09:43 -0700 |
---|---|---|
committer | sersut <serdar@opscode.com> | 2013-06-19 14:18:48 -0700 |
commit | 1257b8a52d4f7c707fb983188c64dfb704b68b25 (patch) | |
tree | be99a60c55098cfa1ad28df16483aa3074c21fa2 /spec/unit/formatters | |
parent | 309635b8b05f620704627be421eef508a735f68b (diff) | |
download | chef-1257b8a52d4f7c707fb983188c64dfb704b68b25.tar.gz |
Handle new 412 depsolver errors without any cookbook information.
Diffstat (limited to 'spec/unit/formatters')
-rw-r--r-- | spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb b/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb index bb694f8e5c..cf668fbb0d 100644 --- a/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb +++ b/spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb @@ -24,8 +24,9 @@ describe Chef::Formatters::ErrorInspectors::CookbookResolveErrorInspector do @expanded_run_list = Chef::RunList.new("recipe[annoyances]", "recipe[apache2]", "recipe[users]", "recipe[chef::client]") @description = Chef::Formatters::ErrorDescription.new("Error Resolving Cookbooks for Run List:") - @outputter = Chef::Formatters::Outputter.new(StringIO.new, STDERR) - #@outputter = Chef::Formatters::Outputter.new(STDOUT, STDERR) + @outputter_output = StringIO.new + @outputter = Chef::Formatters::Outputter.new(@outputter_output, STDERR) + # @outputter = Chef::Formatters::Outputter.new(STDOUT, STDERR) end describe "when explaining a 403 error" do @@ -63,6 +64,36 @@ describe Chef::Formatters::ErrorInspectors::CookbookResolveErrorInspector do it "prints a pretty message" do @description.display(@outputter) + @outputter_output.rewind + observed_output = @outputter_output.read + observed_output.should include("apache2") + observed_output.should include("users") + observed_output.should_not include("Run list contains invalid items: no such cookbook nope.") + end + + end + + describe "when explaining a PreconditionFailed (412) error with current error message style without cookbook details" do + # Chef currently returns error messages with some fields as JSON strings, + # which must be re-parsed to get the actual data. + # In some cases the error message doesn't contain any cookbook + # details. But we should still print a pretty error message. + + before do + + @response_body = "{\"error\":[{\"non_existent_cookbooks\":[],\"cookbooks_with_no_versions\":[],\"message\":\"unable to solve dependencies in alotted time.\"}]}" + @response = Net::HTTPPreconditionFailed.new("1.1", "412", "(response) unauthorized") + @response.stub!(:body).and_return(@response_body) + @exception = Net::HTTPServerException.new("(exception) precondition failed", @response) + + @inspector = Chef::Formatters::ErrorInspectors::CookbookResolveErrorInspector.new(@expanded_run_list, @exception) + @inspector.add_explanation(@description) + end + + it "prints a pretty message" do + @description.display(@outputter) + @outputter_output.rewind + @outputter_output.read.should include("unable to solve dependencies in alotted time.") end end @@ -84,6 +115,11 @@ describe Chef::Formatters::ErrorInspectors::CookbookResolveErrorInspector do it "prints a pretty message" do @description.display(@outputter) + @outputter_output.rewind + observed_output = @outputter_output.read + observed_output.should include("apache2") + observed_output.should include("users") + observed_output.should_not include("Run list contains invalid items: no such cookbook nope.") end end |