From c05d3c3821d3ba008c47cdcaf4d05bfeb88d0b14 Mon Sep 17 00:00:00 2001 From: Jordan Borean Date: Tue, 20 Jun 2017 02:43:44 +1000 Subject: [PATCH] win_owner: added tests and fixed up bool handling (#25088) * win_owner: added tests and fixed up bool handling * explicitly gathering facts in test * Removed manualy entry in test group --- lib/ansible/modules/windows/win_owner.ps1 | 4 +- lib/ansible/modules/windows/win_owner.py | 6 +- test/integration/targets/win_owner/aliases | 1 + .../targets/win_owner/defaults/main.yml | 1 + .../targets/win_owner/tasks/main.yml | 233 ++++++++++++++++++ 5 files changed, 239 insertions(+), 6 deletions(-) create mode 100644 test/integration/targets/win_owner/aliases create mode 100644 test/integration/targets/win_owner/defaults/main.yml create mode 100644 test/integration/targets/win_owner/tasks/main.yml diff --git a/lib/ansible/modules/windows/win_owner.ps1 b/lib/ansible/modules/windows/win_owner.ps1 index 82de19a400..c7209e9285 100644 --- a/lib/ansible/modules/windows/win_owner.ps1 +++ b/lib/ansible/modules/windows/win_owner.ps1 @@ -90,7 +90,7 @@ $check_mode = Get-AnsibleParam -obj $params -name "_ansible_check_mode" -type "b $path = Get-AnsibleParam -obj $params -name "path" -type "path" -failifempty $true $user = Get-AnsibleParam -obj $params -name "user" -type "str" -failifempty $true -$recurse = Get-AnsibleParam -obj $params -name "recurse" -type "bool" -default "no" -validateset "no","yes" -resultobj $result +$recurse = Get-AnsibleParam -obj $params -name "recurse" -type "bool" -default $false -resultobj $result If (-Not (Test-Path -Path $path)) { Fail-Json $result "$path file or directory does not exist on the host" @@ -129,7 +129,7 @@ Try { } } Catch { - Fail-Json $result "an error occurred when attempting to change owner on $path for $user" + Fail-Json $result "an error occurred when attempting to change owner on $path for $($user): $($_.Exception.Message)" } Exit-Json $result diff --git a/lib/ansible/modules/windows/win_owner.py b/lib/ansible/modules/windows/win_owner.py index 96f8833ffb..150d69a35f 100644 --- a/lib/ansible/modules/windows/win_owner.py +++ b/lib/ansible/modules/windows/win_owner.py @@ -45,10 +45,8 @@ options: recurse: description: - Indicates if the owner should be changed recursively - choices: - - no - - yes - default: no + type: bool + default: 'no' author: Hans-Joachim Kliemeck (@h0nIg) ''' diff --git a/test/integration/targets/win_owner/aliases b/test/integration/targets/win_owner/aliases new file mode 100644 index 0000000000..10e03fc2bf --- /dev/null +++ b/test/integration/targets/win_owner/aliases @@ -0,0 +1 @@ +windows/ci/group1 diff --git a/test/integration/targets/win_owner/defaults/main.yml b/test/integration/targets/win_owner/defaults/main.yml new file mode 100644 index 0000000000..f71d353ec8 --- /dev/null +++ b/test/integration/targets/win_owner/defaults/main.yml @@ -0,0 +1 @@ +test_win_owner_path: C:\ansible\win_owner diff --git a/test/integration/targets/win_owner/tasks/main.yml b/test/integration/targets/win_owner/tasks/main.yml new file mode 100644 index 0000000000..b5f1ed54e4 --- /dev/null +++ b/test/integration/targets/win_owner/tasks/main.yml @@ -0,0 +1,233 @@ +--- +# Setup tests +- name: gather facts on host for use with later tests + setup: + +- name: remove test path to ensure baseline + win_file: + path: "{{test_win_owner_path}}" + state: absent + +- name: create test paths + win_file: + path: "{{test_win_owner_path}}\\{{item}}" + state: directory + with_items: + - folder + - folder\folder1 + - folder\folder2 + - folder with space + - folder with space\folder1 + - folder with space\folder2 + +- name: create system test files + win_copy: + dest: "{{test_win_owner_path}}\\{{item}}" + content: content + with_items: + - folder\file.txt + - folder\folder1\file.txt + - folder\folder2\file.txt + - folder with space\file.txt + - folder with space\folder1\file.txt + - folder with space\folder2\file.txt + +# Run win_owner tests +- name: set owner for invalid path + win_owner: + path: C:\invalid + user: SYSTEM + register: invalid_path + failed_when: invalid_path.msg != 'C:\invalid file or directory does not exist on the host' + +- name: set owner for invalid user + win_owner: + path: "{{test_win_owner_path}}" + user: invalid-user + register: invalid_user + failed_when: invalid_user.msg != 'invalid-user is not a valid user or group on the host machine or domain' + +- name: set owner defaults check + win_owner: + path: "{{test_win_owner_path}}\\folder" + user: SYSTEM + register: defaults_check + check_mode: True + +- name: get owner of folder of set owner defaults check + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\folder').Owner" + register: actual_defaults_check + +- name: assert set owner defaults check + assert: + that: + - defaults_check|changed + - actual_defaults_check.stdout_lines[0] == 'BUILTIN\Administrators' + +- name: set owner defaults + win_owner: + path: "{{test_win_owner_path}}\\folder" + user: SYSTEM + register: defaults + +- name: get owner of folder of set owner defaults + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\folder').Owner" + register: actual_defaults + +- name: assert set owner defaults + assert: + that: + - defaults|changed + - actual_defaults.stdout_lines[0] == 'NT AUTHORITY\SYSTEM' + +- name: set owner defaults again + win_owner: + path: "{{test_win_owner_path}}\\folder" + user: SYSTEM + register: defaults_again + +- name: get owner of folder of set owner defaults again + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\folder').Owner" + register: actual_defaults_again + +- name: assert set owner defaults again + assert: + that: + - not defaults_again|changed + - actual_defaults_again.stdout_lines[0] == 'NT AUTHORITY\SYSTEM' + +- name: set owner recurse check + win_owner: + path: "{{test_win_owner_path}}\\folder" + user: SYSTEM + recurse: True + register: recurse_check + check_mode: True + +- name: get owner of folder of set owner recurse check + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\{{item.path}}').Owner" + register: actual_recurse_check + failed_when: actual_recurse_check.stdout_lines[0] != item.owner + with_items: + - { path: 'folder', owner: 'NT AUTHORITY\SYSTEM' } + - { path: 'folder\file.txt', owner: 'BUILTIN\Administrators' } + - { path: 'folder\folder1', owner: 'BUILTIN\Administrators' } + - { path: 'folder\folder1\file.txt', owner: 'BUILTIN\Administrators' } + - { path: 'folder\folder2', owner: 'BUILTIN\Administrators' } + - { path: 'folder\folder2\file.txt', owner: 'BUILTIN\Administrators' } + +- name: assert set owner recurse check + assert: + that: + - recurse_check|changed + +- name: set owner recurse + win_owner: + path: "{{test_win_owner_path}}\\folder" + user: SYSTEM + recurse: True + register: recurse + +- name: get owner of folder of set owner recurse + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\{{item}}').Owner" + register: actual_recurse + failed_when: actual_recurse.stdout_lines[0] != 'NT AUTHORITY\SYSTEM' + with_items: + - folder + - folder\file.txt + - folder\folder1 + - folder\folder1\file.txt + - folder\folder2 + - folder\folder2\file.txt + +- name: assert set owner recurse + assert: + that: + - recurse|changed + +- name: set owner recurse again + win_owner: + path: "{{test_win_owner_path}}\\folder" + user: SYSTEM + recurse: True + register: recurse_again + +- name: get owner of folder of set owner recurse again + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\{{item}}').Owner" + register: actual_recurse_again + failed_when: actual_recurse_again.stdout_lines[0] != 'NT AUTHORITY\SYSTEM' + with_items: + - folder + - folder\file.txt + - folder\folder1 + - folder\folder1\file.txt + - folder\folder2 + - folder\folder2\file.txt + +- name: assert set owner recurse again + assert: + that: + - not recurse_again|changed + +- name: create test user + win_user: + name: test win owner + +- name: set owner with space recurse + win_owner: + path: "{{test_win_owner_path}}\\folder with space" + user: test win owner + recurse: True + register: recurse_space + +- name: get owner of folder of set owner with space recurse + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\{{item}}').Owner" + register: actual_recurse_space + failed_when: actual_recurse_space.stdout_lines[0]|upper != ansible_hostname + '\\TEST WIN OWNER' + with_items: + - folder with space + - folder with space\file.txt + - folder with space\folder1 + - folder with space\folder1\file.txt + - folder with space\folder2 + - folder with space\folder2\file.txt + +- name: assert set owner with space recurse + assert: + that: + - recurse_space|changed + +- name: set owner with space recurse again + win_owner: + path: "{{test_win_owner_path}}\\folder with space" + user: test win owner + recurse: True + register: recurse_space_again + +- name: get owner of folder of set owner with space recurse again + win_command: powershell.exe "(Get-Acl -Path '{{test_win_owner_path}}\\{{item}}').Owner" + register: actual_recurse_space_again + failed_when: actual_recurse_space_again.stdout_lines[0]|upper != ansible_hostname + '\\TEST WIN OWNER' + with_items: + - folder with space + - folder with space\file.txt + - folder with space\folder1 + - folder with space\folder1\file.txt + - folder with space\folder2 + - folder with space\folder2\file.txt + +- name: assert set owner with space recurse again + assert: + that: + - not recurse_space_again|changed + +# Run cleanup after tests +- name: delete test path + win_file: + path: "{{test_win_owner_path}}" + state: absent + +- name: remove test user + win_user: + name: test win owner + state: absent