summaryrefslogtreecommitdiff
path: root/spec/unit
diff options
context:
space:
mode:
authorMatthew Newell <18470637+wheatevo@users.noreply.github.com>2021-10-14 16:12:43 -0500
committerMatthew Newell <18470637+wheatevo@users.noreply.github.com>2021-10-14 16:12:54 -0500
commitdd26c360c7393e671fa70f7125055768eac807eb (patch)
tree62a60c6c19ceb20377c695da000096aebeff41c1 /spec/unit
parent8f3fdf8bc7079453798bdc5e35eb95adcebb6ee5 (diff)
downloadchef-dd26c360c7393e671fa70f7125055768eac807eb.tar.gz
Fix cron resource commented job handling
This change fixes an edge case failure that may occur when processing a cron resource where the following conditions are true: * A `# Chef Name` comment exists for the job * The following line is commented out * The new cron resource uses default values for the minute, hour, day, month, weekday, and time properties This causes the following error to be raised within the `Chef::Provider::Cron#cron_different?` method: ``` Chef::Exceptions::ValidationFailed ---------------------------------- command is a required property ``` The new guard prevents `cron_different?` from being called when the current resource does not have a set command property. Since the new resource requires the command property to be set to be valid, we can assume it is different from the current cron resource if the command is unset. Signed-off-by: Matthew Newell <18470637+wheatevo@users.noreply.github.com>
Diffstat (limited to 'spec/unit')
-rw-r--r--spec/unit/provider/cron_spec.rb45
1 files changed, 45 insertions, 0 deletions
diff --git a/spec/unit/provider/cron_spec.rb b/spec/unit/provider/cron_spec.rb
index 9a276bfffd..3e56dbc8b1 100644
--- a/spec/unit/provider/cron_spec.rb
+++ b/spec/unit/provider/cron_spec.rb
@@ -392,6 +392,27 @@ describe Chef::Provider::Cron do
expect(cron.command).to eq("/bin/true")
end
end
+
+ context "with a matching entry with a commented crontab line" do
+ it "should set cron_exists" do
+ allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB)
+ 0 2 * * * /some/other/command
+
+ # Chef Name: cronhole some stuff
+ #* * * * * /bin/true
+ CRONTAB
+ cron = @provider.load_current_resource
+ expect(@provider.cron_exists).to eq(true)
+ expect(@provider.cron_empty).to eq(false)
+ expect(cron.minute).to eq("*")
+ expect(cron.hour).to eq("*")
+ expect(cron.day).to eq("*")
+ expect(cron.month).to eq("*")
+ expect(cron.weekday).to eq("*")
+ expect(cron.time).to eq(nil)
+ expect(cron.property_is_set?(:command)).to eq(false)
+ end
+ end
end
describe "cron_different?" do
@@ -691,6 +712,30 @@ describe Chef::Provider::Cron do
end
end
+ context "when there is a crontab with a matching section with a commented crontab line in it" do
+ before :each do
+ @provider.cron_exists = true
+ end
+
+ it "should add the crontab to the entry" do
+ allow(@provider).to receive(:read_crontab).and_return(<<~CRONTAB)
+ 0 2 * * * /some/other/command
+
+ # Chef Name: cronhole some stuff
+ # * * * * * /bin/true
+ CRONTAB
+ expect(@provider).to receive(:write_crontab).with(<<~ENDCRON)
+ 0 2 * * * /some/other/command
+
+ # Chef Name: cronhole some stuff
+ * * * * * /bin/true
+ # * * * * * /bin/true
+ ENDCRON
+ @new_resource.minute "*"
+ @provider.run_action(:create)
+ end
+ end
+
context "when there is a crontab with a matching and identical section" do
context "when environment variable is not used" do
before :each do