summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Cooper <josh@puppetlabs.com>2014-10-03 17:40:19 -0700
committerRob Reynolds <ferventcoder@gmail.com>2014-10-09 13:45:25 -0500
commita51c6faa78d3110a4113685c12e8b7810c39a2e7 (patch)
treed92ed6d1a3cdb000efc7823483021241ba33cc2d
parent522ac8d140f7587189ef56ee3c78d60239f44145 (diff)
downloadpuppet-a51c6faa78d3110a4113685c12e8b7810c39a2e7.tar.gz
(PUP-3203) Don't mutate trigger when checking for equality
Previously, when checking if the `current` and `desired` triggers were equivalent, we were silently deleting the `index` and `enabled` values from the `current` trigger. If we later needed to delete the `current` trigger, we would have lost its `index`, resulting in a call to `Win32::TaskScheduler.delete_trigger(nil)` causing the error: no implicit conversion from nil to integer This commit ensure that we don't mutate the `current` or `desired` trigger.
-rw-r--r--lib/puppet/provider/scheduled_task/win32_taskscheduler.rb4
-rw-r--r--spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb10
2 files changed, 11 insertions, 3 deletions
diff --git a/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb b/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb
index 38897330b..d00d3da6f 100644
--- a/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb
+++ b/lib/puppet/provider/scheduled_task/win32_taskscheduler.rb
@@ -274,9 +274,7 @@ Puppet::Type.type(:scheduled_task).provide(:win32_taskscheduler) do
def translate_hash_to_trigger(puppet_trigger)
trigger = dummy_time_trigger
- puppet_trigger.delete('index')
-
- if puppet_trigger.delete('enabled') == false
+ if puppet_trigger['enabled'] == false
trigger['flags'] |= Win32::TaskScheduler::TASK_TRIGGER_FLAG_DISABLED
else
trigger['flags'] &= ~Win32::TaskScheduler::TASK_TRIGGER_FLAG_DISABLED
diff --git a/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb b/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb
index 7b095de42..270ca6bae 100644
--- a/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb
+++ b/spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb
@@ -635,6 +635,16 @@ describe Puppet::Type.type(:scheduled_task).provider(:win32_taskscheduler), :if
describe '#triggers_same?' do
let(:provider) { described_class.new(:name => 'foobar', :command => 'C:\Windows\System32\notepad.exe') }
+ it "should not mutate triggers" do
+ current = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
+ current.freeze
+
+ desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30'}
+ desired.freeze
+
+ expect(provider).to be_triggers_same(current, desired)
+ end
+
it "ignores 'index' in current trigger" do
current = {'index' => 0, 'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}
desired = {'schedule' => 'daily', 'start_date' => '2011-09-12', 'start_time' => '15:30', 'every' => 3}