summaryrefslogtreecommitdiff
path: root/spec/unit/formatters/error_inspectors
diff options
context:
space:
mode:
authorsersut <serdar@opscode.com>2013-06-18 12:09:43 -0700
committersersut <serdar@opscode.com>2013-06-19 14:18:48 -0700
commit1257b8a52d4f7c707fb983188c64dfb704b68b25 (patch)
treebe99a60c55098cfa1ad28df16483aa3074c21fa2 /spec/unit/formatters/error_inspectors
parent309635b8b05f620704627be421eef508a735f68b (diff)
downloadchef-1257b8a52d4f7c707fb983188c64dfb704b68b25.tar.gz
Handle new 412 depsolver errors without any cookbook information.
Diffstat (limited to 'spec/unit/formatters/error_inspectors')
-rw-r--r--spec/unit/formatters/error_inspectors/cookbook_resolve_error_inspector_spec.rb40
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