diff options
author | vijaymmali1990 <vijay.mali@msystechnologies.com> | 2019-02-25 15:29:31 +0530 |
---|---|---|
committer | Bryan McLellan <btm@loftninjas.org> | 2019-05-03 14:32:58 -0400 |
commit | c91dec9e2d81830c51d0985eb983939de60fcdd6 (patch) | |
tree | 419f1477ce4ad322016302eb4570000cbae06145 /spec/unit/provider/cron_spec.rb | |
parent | 58db2c3f47e86d539d21f9365adb135726719e38 (diff) | |
download | chef-c91dec9e2d81830c51d0985eb983939de60fcdd6.tar.gz |
- Added a warning in case user is using a `environment` for an entry that can also be specified as a `property`btm/MSYS-979
- Added unit test cases
- Ensured chefstyle
- Added a warning in case user is using a `environment` for an entry that can also be specified as a `property`
- Revert changes in order to pass chefstyle
- Added a warning in case user is using a `environment` for an entry that can also be specified as a `property`
- Added these changes in cron_different? method
- Added unit test cases
- Added some changes in cron.rb
- It now throws error if user passes both environment with the {:SHELL, :HOME, :PATH, :MAILTO} and these properties itself.
- It maintains idempotency.
- Added Rspecs for this case.
- Ensured chef-style.
Signed-off-by: vijaymmali1990 <vijay.mali@msystechnologies.com>
Diffstat (limited to 'spec/unit/provider/cron_spec.rb')
-rw-r--r-- | spec/unit/provider/cron_spec.rb | 143 |
1 files changed, 123 insertions, 20 deletions
diff --git a/spec/unit/provider/cron_spec.rb b/spec/unit/provider/cron_spec.rb index 98c525762b..6bfc18c359 100644 --- a/spec/unit/provider/cron_spec.rb +++ b/spec/unit/provider/cron_spec.rb @@ -690,33 +690,136 @@ describe Chef::Provider::Cron do end context "when there is a crontab with a matching and identical section" do - before :each do - @provider.cron_exists = true - allow(@provider).to receive(:cron_different?).and_return(false) - allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB) - 0 2 * * * /some/other/command + context "when environment variable is not used" do + before :each do + @provider.cron_exists = true + allow(@provider).to receive(:cron_different?).and_return(false) + allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB) + 0 2 * * * /some/other/command - # Chef Name: cronhole some stuff - * 5 * * * /bin/true + # Chef Name: cronhole some stuff + SHELL=/bash + * 5 * * * /bin/true - # Another comment - CRONTAB - end + # Another comment + CRONTAB + end - it "should not update the crontab" do - expect(@provider).not_to receive(:write_crontab) - @provider.run_action(:create) + it "should not update the crontab" do + expect(@provider).not_to receive(:write_crontab) + @provider.run_action(:create) + end + + it "should not mark the resource as updated" do + @provider.run_action(:create) + expect(@new_resource).not_to be_updated_by_last_action + end + + it "should log nothing changed" do + expect(logger).to receive(:trace).with("Found cron '#{@new_resource.name}'") + expect(logger).to receive(:trace).with("Skipping existing cron entry '#{@new_resource.name}'") + @provider.run_action(:create) + end end - it "should not mark the resource as updated" do - @provider.run_action(:create) - expect(@new_resource).not_to be_updated_by_last_action + context "when environment variable is used" do + before :each do + @provider.cron_exists = true + allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB) + 0 2 * * * /some/other/command + + # Chef Name: cronhole some stuff + SHELL=/bash + ENV=environment + 30 * * * * /bin/true + + # Another comment + CRONTAB + end + context "contains an entry that can also be specified as a `property`" do + before :each do + @new_resource.environment = { "SHELL" => "/bash", "ENV" => "environment" } + end + + it "should raise a warning for idempotency" do + expect(logger).to receive(:warn).with("cronhole some stuff: the environment property contains the 'SHELL' variable, which should be set separately as a property.") + @provider.run_action(:create) + end + + it "should not update the crontab" do + expect(@provider).not_to receive(:write_crontab) + @provider.run_action(:create) + end + + it "should not mark the resource as updated" do + expect(@new_resource).not_to be_updated_by_last_action + @provider.run_action(:create) + end + end + + context "contains an entry that cannot be specified as a `property`" do + before :each do + @new_resource.environment = { "ENV" => "environment" } + @new_resource.shell "/bash" + end + + it "should not raise a warning for idempotency" do + expect(logger).not_to receive(:warn).with("cronhole some stuff: the environment property contains the 'SHELL' variable, which should be set separately as a property.") + @provider.run_action(:create) + end + + it "should not update the crontab" do + expect(@provider).not_to receive(:write_crontab) + @provider.run_action(:create) + end + + it "should not mark the resource as updated" do + @provider.run_action(:create) + expect(@new_resource).not_to be_updated_by_last_action + end + end end - it "should log nothing changed" do - expect(logger).to receive(:trace).with("Found cron '#{@new_resource.name}'") - expect(logger).to receive(:trace).with("Skipping existing cron entry '#{@new_resource.name}'") - @provider.run_action(:create) + context "when environment variable is used with property" do + before :each do + @provider.cron_exists = true + allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB) + 0 2 * * * /some/other/command + + # Chef Name: cronhole some stuff + SHELL=/bash + ENV=environment + 30 * * * * /bin/true + + # Another comment + CRONTAB + end + + context "when environment variable is same as property" do + it "should throw an error" do + @new_resource.shell "/bash" + @new_resource.environment "SHELL" => "/bash" + expect do + @provider.run_action(:create) + end.to raise_error(Chef::Exceptions::Cron, /cronhole some stuff: the 'SHELL' property is set and environment property also contains the 'SHELL' variable. Remove the variable from the environment property./) + end + end + + context "when environment variable is different from property" do + it "should not update the crontab" do + @new_resource.shell "/bash" + @new_resource.environment "ENV" => "environment" + expect(@provider).not_to receive(:write_crontab) + @provider.run_action(:create) + end + + it "should not mark the resource as updated" do + @new_resource.shell "/bash" + @new_resource.environment "ENV" => "environment" + @provider.run_action(:create) + expect(@new_resource).not_to be_updated_by_last_action + end + end end end end |