diff options
author | Josh Cooper <josh@puppetlabs.com> | 2014-10-03 17:40:19 -0700 |
---|---|---|
committer | Rob Reynolds <ferventcoder@gmail.com> | 2014-10-09 13:45:25 -0500 |
commit | a51c6faa78d3110a4113685c12e8b7810c39a2e7 (patch) | |
tree | d92ed6d1a3cdb000efc7823483021241ba33cc2d | |
parent | 522ac8d140f7587189ef56ee3c78d60239f44145 (diff) | |
download | puppet-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.rb | 4 | ||||
-rw-r--r-- | spec/unit/provider/scheduled_task/win32_taskscheduler_spec.rb | 10 |
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} |