From 0357969833fd6a1de59dc969e1b06b9fc006fa81 Mon Sep 17 00:00:00 2001 From: vasu1105 Date: Fri, 25 May 2018 17:10:47 +0530 Subject: fix for task is not idempotent when task name includes parent folder Signed-off-by: vasu1105 --- lib/chef/provider/windows_task.rb | 8 ++-- spec/functional/resource/windows_task_spec.rb | 54 +++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/lib/chef/provider/windows_task.rb b/lib/chef/provider/windows_task.rb index 0bb28c66c6..2903ae765d 100644 --- a/lib/chef/provider/windows_task.rb +++ b/lib/chef/provider/windows_task.rb @@ -100,15 +100,13 @@ class Chef def load_current_resource @current_resource = Chef::Resource::WindowsTask.new(new_resource.name) - task = TaskScheduler.new - if task.exists?(new_resource.task_name) - @current_resource.exists = true + task = TaskScheduler.new(new_resource.task_name, nil, "\\", false) + @current_resource.exists = task.exists?(new_resource.task_name) + if @current_resource.exists task.get_task(new_resource.task_name) @current_resource.task = task pathed_task_name = new_resource.task_name.start_with?('\\') ? new_resource.task_name : "\\#{new_resource.task_name}" @current_resource.task_name(pathed_task_name) - else - @current_resource.exists = false end @current_resource end diff --git a/spec/functional/resource/windows_task_spec.rb b/spec/functional/resource/windows_task_spec.rb index 65a396cf56..46fbfe2e82 100644 --- a/spec/functional/resource/windows_task_spec.rb +++ b/spec/functional/resource/windows_task_spec.rb @@ -1109,6 +1109,60 @@ describe Chef::Resource::WindowsTask, :windows_only do end end + context "task_name with parent folder" do + describe "task_name with path '\\foo\\chef-client-functional-test' " do + let(:task_name) { "\\foo\\chef-client-functional-test" } + after { delete_task } + subject do + new_resource = Chef::Resource::WindowsTask.new(task_name, run_context) + new_resource.command task_name + new_resource.run_level :highest + new_resource.frequency :once + new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this + new_resource + end + + it "creates the scheduled task with task name 'chef-client-functional-test' inside path '\\foo'" do + call_for_create_action + current_resource = call_for_load_current_resource + expect(current_resource.exists).to eq(true) + expect(current_resource.task.application_name).to eq(task_name) + end + + it "does not converge the resource if it is already converged" do + subject.run_action(:create) + subject.run_action(:create) + expect(subject).not_to be_updated_by_last_action + end + end + + describe "task_name with path '\\foo\\bar\\chef-client-functional-test' " do + let(:task_name) { "\\foo\\bar\\chef-client-functional-test" } + after { delete_task } + subject do + new_resource = Chef::Resource::WindowsTask.new(task_name, run_context) + new_resource.command task_name + new_resource.run_level :highest + new_resource.frequency :once + new_resource.execution_time_limit = 259200 / 60 # converting "PT72H" into minutes and passing here since win32-taskscheduler accespts this + new_resource + end + + it "creates the scheduled task with task with name 'chef-client-functional-test' inside path '\\foo\\bar' " do + call_for_create_action + current_resource = call_for_load_current_resource + expect(current_resource.exists).to eq(true) + expect(current_resource.task.application_name).to eq(task_name) + end + + it "does not converge the resource if it is already converged" do + subject.run_action(:create) + subject.run_action(:create) + expect(subject).not_to be_updated_by_last_action + end + end + end + describe "Examples of idempotent checks for each frequency" do after { delete_task } context "For frequency :once" do -- cgit v1.2.1