summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVivek Singh <vivek.singh@msystechnologies.com>2019-09-19 17:01:10 +0530
committerVivek Singh <vivek.singh@msystechnologies.com>2019-09-19 17:01:10 +0530
commitaaae16232cb1e17ac9b8060c3237f0bc6691e845 (patch)
tree035f13b9538f502ebe41209b1020cb2deaa08a82
parent4e5908e297f26f19ad5da2cefaa46579db38d266 (diff)
downloadchef-aaae16232cb1e17ac9b8060c3237f0bc6691e845.tar.gz
Fix show_progress in remote_file is causing FloatDomainError: Infinity
- Add check to avoid total if zero or nil. - Set @progress[resource] default value to -1 so that it can start with 0%. Signed-off-by: Vivek Singh <vivek.singh@msystechnologies.com>
-rw-r--r--lib/chef/formatters/doc.rb6
-rw-r--r--spec/unit/formatters/doc_spec.rb18
2 files changed, 21 insertions, 3 deletions
diff --git a/lib/chef/formatters/doc.rb b/lib/chef/formatters/doc.rb
index 5ed75c00eb..0a4edd2f8b 100644
--- a/lib/chef/formatters/doc.rb
+++ b/lib/chef/formatters/doc.rb
@@ -236,11 +236,11 @@ class Chef
end
def resource_update_progress(resource, current, total, interval)
- @progress[resource] ||= 0
+ @progress[resource] ||= -1
- percent_complete = (current.to_f / total.to_f * 100).to_i
+ percent_complete = (current.to_f / total.to_f * 100).to_i unless total.to_f == 0.0
- if percent_complete > @progress[resource]
+ if percent_complete && percent_complete > @progress[resource]
@progress[resource] = percent_complete
diff --git a/spec/unit/formatters/doc_spec.rb b/spec/unit/formatters/doc_spec.rb
index b8eccc1bc9..262276cfaa 100644
--- a/spec/unit/formatters/doc_spec.rb
+++ b/spec/unit/formatters/doc_spec.rb
@@ -76,6 +76,24 @@ describe Chef::Formatters::Base do
expect(formatter.pretty_elapsed_time).to include("10 hours 10 minutes 10 seconds")
end
+ it "shows nothing if total is nil" do
+ res = Chef::Resource::RemoteFile.new("canteloupe")
+ formatter.resource_update_progress(res, 35, nil, 10)
+ expect(out.string).to eq("")
+ end
+
+ it "shows nothing if total is 0" do
+ res = Chef::Resource::RemoteFile.new("canteloupe")
+ formatter.resource_update_progress(res, 35, 0, 10)
+ expect(out.string).to eq("")
+ end
+
+ it "shows nothing if current and total are 0" do
+ res = Chef::Resource::RemoteFile.new("canteloupe")
+ formatter.resource_update_progress(res, 0, 0, 10)
+ expect(out.string).to eq("")
+ end
+
it "shows the percentage completion of an action" do
res = Chef::Resource::RemoteFile.new("canteloupe")
formatter.resource_update_progress(res, 35, 50, 10)