summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpiyushawasthi <piyush.awasthi@msystechnologies.com>2018-07-20 19:26:54 +0530
committerpiyushawasthi <piyush.awasthi@msystechnologies.com>2018-07-26 12:39:05 +0530
commiteba0385cdd993554c70caf8c25926b4e867f80fe (patch)
tree88c1441ac3a2684d7149b1a46dbd2a099adca1e2
parent0584508ea354dade2d3df419d98b5171ff82fb2e (diff)
downloadchef-eba0385cdd993554c70caf8c25926b4e867f80fe.tar.gz
MSYS-858 : added warning if allow_downgrade set to be false and tried to install older version
Signed-off-by: piyushawasthi <piyush.awasthi@msystechnologies.com>
-rw-r--r--lib/chef/provider/package.rb4
-rw-r--r--spec/unit/provider/package/windows_spec.rb1
-rw-r--r--spec/unit/provider/package_spec.rb9
3 files changed, 12 insertions, 2 deletions
diff --git a/lib/chef/provider/package.rb b/lib/chef/provider/package.rb
index 01d8829dd2..113d33a2fc 100644
--- a/lib/chef/provider/package.rb
+++ b/lib/chef/provider/package.rb
@@ -500,11 +500,13 @@ class Chef
end
when :install
-
if new_version
if version_requirement_satisfied?(current_version, new_version)
logger.trace("#{new_resource} #{package_name} #{current_version} satisifies #{new_version} requirement")
target_version_array.push(nil)
+ elsif current_version && !allow_downgrade && version_compare(current_version, new_version) == 1
+ logger.warn("#{new_resource} #{package_name} has installed version #{current_version}, which is newer than available version #{new_version}. Skipping...)")
+ target_version_array.push(nil)
else
logger.trace("#{new_resource} #{package_name} #{current_version} needs updating to #{new_version}")
target_version_array.push(new_version)
diff --git a/spec/unit/provider/package/windows_spec.rb b/spec/unit/provider/package/windows_spec.rb
index 3030b7f04a..6b85013f3d 100644
--- a/spec/unit/provider/package/windows_spec.rb
+++ b/spec/unit/provider/package/windows_spec.rb
@@ -360,6 +360,7 @@ describe Chef::Provider::Package::Windows, :windows_only do
before do
new_resource.version("5.5.5")
allow(provider).to receive(:current_version_array).and_return([ ["5.5.0", "4.3.0", "1.1.1"] ])
+ allow(provider).to receive(:version_compare).and_return(false)
end
it "installs given version" do
diff --git a/spec/unit/provider/package_spec.rb b/spec/unit/provider/package_spec.rb
index 904e339e47..688d70d677 100644
--- a/spec/unit/provider/package_spec.rb
+++ b/spec/unit/provider/package_spec.rb
@@ -702,7 +702,7 @@ describe "Chef::Provider::Package - Multi" do
it "installs the specified version when some are out of date" do
current_resource.version(["1.0", "6.2"])
- new_resource.version(["1.0", "6.1"])
+ new_resource.version(["1.0", "6.3"])
provider.run_action(:install)
expect(new_resource).to be_updated
end
@@ -714,6 +714,13 @@ describe "Chef::Provider::Package - Multi" do
expect(new_resource).not_to be_updated_by_last_action
end
+ it "does not install older version" do
+ current_resource.version(["1.1", "6.2"])
+ new_resource.version(["1.0", "6.1"])
+ provider.run_action(:install)
+ expect(new_resource).not_to be_updated_by_last_action
+ end
+
it "does not install any version if all are installed, and no version was specified" do
current_resource.version(["1.0", "6.2"])
provider.run_action(:install)