diff options
Diffstat (limited to 'test')
239 files changed, 0 insertions, 21922 deletions
diff --git a/test/integration/targets/win_acl/aliases b/test/integration/targets/win_acl/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_acl/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_acl/defaults/main.yml b/test/integration/targets/win_acl/defaults/main.yml deleted file mode 100644 index 9999acd1ba..0000000000 --- a/test/integration/targets/win_acl/defaults/main.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -test_acl_path: '{{ win_output_dir }}\win_acl .ÅÑŚÌβŁÈ [$!@^&test(;)]' -test_acl_network_path: \\localhost\{{ test_acl_path[0:1] }}$\{{ test_acl_path[3:] }} -# Use HKU as that path is not automatically loaded in the PSProvider making our test more complex -test_acl_reg_path: HKU:\.DEFAULT\Ansible Test .ÅÑŚÌβŁÈ [$!@^&test(;)] diff --git a/test/integration/targets/win_acl/tasks/main.yml b/test/integration/targets/win_acl/tasks/main.yml deleted file mode 100644 index d322fb893a..0000000000 --- a/test/integration/targets/win_acl/tasks/main.yml +++ /dev/null @@ -1,33 +0,0 @@ ---- -- name: ensure we start with a clean dir - win_file: - path: '{{ test_acl_path }}' - state: '{{ item }}' - with_items: - - absent - - directory - -- name: ensure we start with a clean reg path - win_regedit: - path: '{{ test_acl_reg_path }}' - delete_key: yes - state: '{{ item }}' - with_items: - - absent - - present - -- block: - - name: run tests - include_tasks: tests.yml - - always: - - name: cleanup testing dir - win_file: - path: '{{ test_acl_path }}' - state: absent - - - name: cleanup testing reg path - win_regedit: - path: '{{ test_acl_reg_path }}' - delete_key: yes - state: absent diff --git a/test/integration/targets/win_acl/tasks/tests.yml b/test/integration/targets/win_acl/tasks/tests.yml deleted file mode 100644 index 56f5273373..0000000000 --- a/test/integration/targets/win_acl/tasks/tests.yml +++ /dev/null @@ -1,362 +0,0 @@ -# these are very basic tests, they should be expanded greatly as this is a core module ---- -- name: get register cmd that will get ace info - set_fact: - test_ace_cmd: | - # Overcome bug in Set-Acl/Get-Acl for registry paths and -LiteralPath - New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS > $null - Push-Location -LiteralPath (Split-Path -Path $path -Qualifier) - $rights_key = if ((Get-Item -LiteralPath $path -Force).PSProvider.Name -eq "Registry") { - "RegistryRights" - } else { - "FileSystemRights" - } - $ace_list = (Get-Acl -LiteralPath $path).Access | Where-Object { $_.IsInherited -eq $false } | ForEach-Object { - @{ - rights = $_."$rights_key".ToString() - type = $_.AccessControlType.ToString() - identity = $_.IdentityReference.Value.ToString() - inheritance_flags = $_.InheritanceFlags.ToString() - propagation_flags = $_.PropagationFlags.ToString() - } - } - Pop-Location - ConvertTo-Json -InputObject @($ace_list) - -- name: add write rights to Guest - win_acl: - path: '{{ test_acl_path }}' - type: allow - user: Guests - rights: Write - register: allow_right - -- name: get result of add write rights to Guest - win_shell: '$path = ''{{ test_acl_path }}''; {{ test_ace_cmd }}' - register: allow_right_actual - -- name: assert add write rights to Guest - assert: - that: - - allow_right is changed - - (allow_right_actual.stdout|from_json)|count == 1 - - (allow_right_actual.stdout|from_json)[0].identity == 'BUILTIN\Guests' - - (allow_right_actual.stdout|from_json)[0].inheritance_flags == 'ContainerInherit, ObjectInherit' - - (allow_right_actual.stdout|from_json)[0].propagation_flags == 'None' - - (allow_right_actual.stdout|from_json)[0].rights == 'Write, Synchronize' - - (allow_right_actual.stdout|from_json)[0].type == 'Allow' - -- name: add write rights to Guest (idempotent) - win_acl: - path: '{{ test_acl_path }}' - type: allow - user: Guests - rights: Write - register: allow_right_again - -- name: assert add write rights to Guest (idempotent) - assert: - that: - - not allow_right_again is changed - -- name: remove write rights from Guest - win_acl: - path: '{{ test_acl_path }}' - type: allow - user: Guests - rights: Write - state: absent - register: remove_right - -- name: get result of remove write rights from Guest - win_shell: '$path = ''{{ test_acl_path }}''; {{ test_ace_cmd }}' - register: remove_right_actual - -- name: assert remove write rights from Guest - assert: - that: - - remove_right is changed - - remove_right_actual.stdout_lines == ["[", "", "]"] - -- name: remove write rights from Guest (idempotent) - win_acl: - path: '{{ test_acl_path }}' - type: allow - user: Guests - rights: Write - state: absent - register: remove_right_again - -- name: assert remote write rights from Guest (idempotent) - assert: - that: - - not remove_right_again is changed - -- name: add deny write rights to Guest - win_acl: - path: '{{ test_acl_path }}' - type: deny - user: Guests - rights: Write - inherit: ContainerInherit - propagation: NoPropagateInherit - state: present - register: add_deny_right - -- name: get result of add deny write rights to Guest - win_shell: '$path = ''{{ test_acl_path }}''; {{ test_ace_cmd }}' - register: add_deny_right_actual - -- name: assert add deny write rights to Guest - assert: - that: - - add_deny_right is changed - - (add_deny_right_actual.stdout|from_json)|count == 1 - - (add_deny_right_actual.stdout|from_json)[0].identity == 'BUILTIN\Guests' - - (add_deny_right_actual.stdout|from_json)[0].inheritance_flags == 'ContainerInherit' - - (add_deny_right_actual.stdout|from_json)[0].propagation_flags == 'NoPropagateInherit' - - (add_deny_right_actual.stdout|from_json)[0].rights == 'Write' - - (add_deny_right_actual.stdout|from_json)[0].type == 'Deny' - -- name: add deny write rights to Guest (idempotent) - win_acl: - path: '{{ test_acl_path }}' - type: deny - user: Guests - rights: Write - inherit: ContainerInherit - propagation: NoPropagateInherit - state: present - register: add_deny_right_again - -- name: assert add deny write rights to Guest (idempotent) - assert: - that: - - not add_deny_right_again is changed - -- name: remove deny write rights from Guest - win_acl: - path: '{{ test_acl_path }}' - type: deny - user: Guests - rights: Write - inherit: ContainerInherit - propagation: NoPropagateInherit - state: absent - register: remove_deny_right - -- name: get result of remove deny write rights from Guest - win_shell: '$path = ''{{ test_acl_path }}''; {{ test_ace_cmd }}' - register: remove_deny_right_actual - -- name: assert remove deny write rights from Guest - assert: - that: - - remove_deny_right is changed - - remove_deny_right_actual.stdout_lines == ["[", "", "]"] - -- name: remove deny write rights from Guest (idempotent) - win_acl: - path: '{{ test_acl_path }}' - type: deny - user: Guests - rights: Write - inherit: ContainerInherit - propagation: NoPropagateInherit - state: absent - register: remove_deny_right_again - -- name: assert remove deny write rights from Guest (idempotent) - assert: - that: - - not remove_deny_right_again is changed - -- name: add write rights to Guest - network - win_acl: - path: '{{ test_acl_network_path }}' - type: allow - user: Guests - rights: Write - register: allow_right - -- name: get result of add write rights to Guest - network - win_shell: '$path = ''{{ test_acl_path }}''; {{ test_ace_cmd }}' - register: allow_right_actual - -- name: assert add write rights to Guest - network - assert: - that: - - allow_right is changed - - (allow_right_actual.stdout|from_json)|count == 1 - - (allow_right_actual.stdout|from_json)[0].identity == 'BUILTIN\Guests' - - (allow_right_actual.stdout|from_json)[0].inheritance_flags == 'ContainerInherit, ObjectInherit' - - (allow_right_actual.stdout|from_json)[0].propagation_flags == 'None' - - (allow_right_actual.stdout|from_json)[0].rights == 'Write, Synchronize' - - (allow_right_actual.stdout|from_json)[0].type == 'Allow' - -- name: remove write rights from Guest - network - win_acl: - path: '{{ test_acl_network_path }}' - type: allow - user: Guests - rights: Write - state: absent - register: remove_right - -- name: get result of remove write rights from Guest - network - win_shell: '$path = ''{{ test_acl_path }}''; {{ test_ace_cmd }}' - register: remove_right_actual - -- name: assert remove write rights from Guest - assert: - that: - - remove_right is changed - - remove_right_actual.stdout_lines == ["[", "", "]"] - -- name: add write rights to Guest - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: allow - user: Guests - rights: WriteKey - register: allow_right_reg - -- name: get result of add write rights to Guest - registry - win_shell: '$path = ''{{ test_acl_reg_path }}''; {{ test_ace_cmd }}' - register: allow_right_reg_actual - -- name: assert add write rights to Guest - registry - assert: - that: - - allow_right_reg is changed - - (allow_right_reg_actual.stdout|from_json)|count == 1 - - (allow_right_reg_actual.stdout|from_json)[0].identity == 'BUILTIN\Guests' - - (allow_right_reg_actual.stdout|from_json)[0].inheritance_flags == 'ContainerInherit, ObjectInherit' - - (allow_right_reg_actual.stdout|from_json)[0].propagation_flags == 'None' - - (allow_right_reg_actual.stdout|from_json)[0].rights == 'WriteKey' - - (allow_right_reg_actual.stdout|from_json)[0].type == 'Allow' - -- name: add write rights to Guest (idempotent) - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: allow - user: Guests - rights: WriteKey - register: allow_right_reg_again - -- name: assert add write rights to Guest (idempotent) - registry - assert: - that: - - not allow_right_reg_again is changed - -- name: remove write rights from Guest - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: allow - user: Guests - rights: WriteKey - state: absent - register: remove_right_reg - -- name: get result of remove write rights from Guest - registry - win_shell: '$path = ''{{ test_acl_reg_path }}''; {{ test_ace_cmd }}' - register: remove_right_reg_actual - -- name: assert remove write rights from Guest - registry - assert: - that: - - remove_right_reg is changed - - remove_right_reg_actual.stdout_lines == ["[", "", "]"] - -- name: remove write rights from Guest (idempotent) - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: allow - user: Guests - rights: WriteKey - state: absent - register: remove_right_reg_again - -- name: assert remote write rights from Guest (idempotent) - registry - assert: - that: - - not remove_right_reg_again is changed - -- name: add deny write rights to Guest - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: deny - user: Guests - rights: WriteKey - inherit: ContainerInherit - propagation: NoPropagateInherit - state: present - register: add_deny_right_reg - -- name: get result of add deny write rights to Guest - registry - win_shell: '$path = ''{{ test_acl_reg_path }}''; {{ test_ace_cmd }}' - register: add_deny_right_reg_actual - -- name: assert add deny write rights to Guest - registry - assert: - that: - - add_deny_right_reg is changed - - (add_deny_right_reg_actual.stdout|from_json)|count == 1 - - (add_deny_right_reg_actual.stdout|from_json)[0].identity == 'BUILTIN\Guests' - - (add_deny_right_reg_actual.stdout|from_json)[0].inheritance_flags == 'ContainerInherit' - - (add_deny_right_reg_actual.stdout|from_json)[0].propagation_flags == 'NoPropagateInherit' - - (add_deny_right_reg_actual.stdout|from_json)[0].rights == 'WriteKey' - - (add_deny_right_reg_actual.stdout|from_json)[0].type == 'Deny' - -- name: add deny write rights to Guest (idempotent) - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: deny - user: Guests - rights: WriteKey - inherit: ContainerInherit - propagation: NoPropagateInherit - state: present - register: add_deny_right_reg_again - -- name: assert add deny write rights to Guest (idempotent) - registry - assert: - that: - - not add_deny_right_reg_again is changed - -- name: remove deny write rights from Guest - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: deny - user: Guests - rights: WriteKey - inherit: ContainerInherit - propagation: NoPropagateInherit - state: absent - register: remove_deny_right_reg - -- name: get result of remove deny write rights from Guest - registry - win_shell: '$path = ''{{ test_acl_reg_path }}''; {{ test_ace_cmd }}' - register: remove_deny_right_reg_actual - -- name: assert remove deny write rights from Guest - registry - assert: - that: - - remove_deny_right_reg is changed - - remove_deny_right_reg_actual.stdout_lines == ["[", "", "]"] - -- name: remove deny write rights from Guest (idempotent) - registry - win_acl: - path: '{{ test_acl_reg_path }}' - type: deny - user: Guests - rights: WriteKey - inherit: ContainerInherit - propagation: NoPropagateInherit - state: absent - register: remove_deny_right_reg_again - -- name: assert remove deny write rights from Guest (idempotent) - registry - assert: - that: - - not remove_deny_right_reg_again is changed diff --git a/test/integration/targets/win_acl_inheritance/aliases b/test/integration/targets/win_acl_inheritance/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_acl_inheritance/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_acl_inheritance/defaults/main.yml b/test/integration/targets/win_acl_inheritance/defaults/main.yml deleted file mode 100644 index 138063f4fe..0000000000 --- a/test/integration/targets/win_acl_inheritance/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -test_win_acl_inheritance_path: C:\ansible\win_acl_inheritance .ÅÑŚÌβŁÈ [$!@^&test(;)] diff --git a/test/integration/targets/win_acl_inheritance/library/test_get_acl.ps1 b/test/integration/targets/win_acl_inheritance/library/test_get_acl.ps1 deleted file mode 100644 index c75d33ead8..0000000000 --- a/test/integration/targets/win_acl_inheritance/library/test_get_acl.ps1 +++ /dev/null @@ -1,36 +0,0 @@ -#!powershell - -# WANT_JSON -# POWERSHELL_COMMON - -$ErrorActionPreference = 'Stop' -Set-StrictMode -Version 2.0 - -$params = Parse-Args $args -supports_check_mode $false -$path = Get-AnsibleParam -obj $params "path" -type "path" -failifempty $true - -$result = @{ - changed = $false -} - -$acl = Get-Acl -LiteralPath $path - -$result.inherited = $acl.AreAccessRulesProtected -eq $false - -$user_details = @{} -$acl.Access | ForEach-Object { - $user = $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]).Value - if ($user_details.ContainsKey($user)) { - $details = $user_details.$user - } else { - $details = @{ - isinherited = $false - } - } - $details.isinherited = $_.IsInherited - $user_details.$user = $details -} - -$result.user_details = $user_details - -Exit-Json $result diff --git a/test/integration/targets/win_acl_inheritance/tasks/main.yml b/test/integration/targets/win_acl_inheritance/tasks/main.yml deleted file mode 100644 index 9b613276a3..0000000000 --- a/test/integration/targets/win_acl_inheritance/tasks/main.yml +++ /dev/null @@ -1,174 +0,0 @@ ---- -# Test setup -# Use single task to save in CI runtime -- name: create test folders - win_shell: | - $ErrorActionPreference = 'Stop' - - $tmp_dir = '{{ test_win_acl_inheritance_path }}' - if (Test-Path -LiteralPath $tmp_dir) { - Remove-Item -LiteralPath $tmp_dir -Force -Recurse - } - New-Item -Path $tmp_dir -ItemType Directory > $null - - Add-Type -AssemblyName System.DirectoryServices.AccountManagement - $current_sid = ([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).Sid - $system_sid = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList @([System.Security.Principal.WellKnownSidType]::LocalSystemSid, $null) - $everyone_sid = New-Object -TypeName System.Security.Principal.SecurityIdentifier -ArgumentList @([System.Security.Principal.WellKnownSidType]::WorldSid, $null) - - $sd = New-Object -TypeName System.Security.AccessControl.DirectorySecurity - $sd.SetAccessRuleProtection($true, $false) - $sd.AddAccessRule( - (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList @( - $system_sid, - [System.Security.AccessControl.FileSystemRights]::FullControl, - [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", - [System.Security.AccessControl.PropagationFlags]::None, - [System.Security.AccessControl.AccessControlType]::Allow - )) - ) - $sd.AddAccessRule( - (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList @( - $current_sid, - [System.Security.AccessControl.FileSystemRights]::FullControl, - [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", - [System.Security.AccessControl.PropagationFlags]::None, - [System.Security.AccessControl.AccessControlType]::Allow - )) - ) - $sd.AddAccessRule( - (New-Object -TypeName System.Security.AccessControl.FileSystemAccessRule -ArgumentList @( - $everyone_sid, - [System.Security.AccessControl.FileSystemRights]::Read, - [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit", - [System.Security.AccessControl.PropagationFlags]::None, - [System.Security.AccessControl.AccessControlType]::Allow - )) - ) - - Set-Acl -LiteralPath $tmp_dir -AclObject $sd - - New-Item -Path "$tmp_dir\folder" -ItemType Directory > $null - Set-Content -LiteralPath "$tmp_dir\folder\file.txt" -Value 'a' - - $system_sid.Value - $current_sid.Value - $everyone_sid.Value - register: test_sids # register the output SID values used for comparison tests below - -# Run tests -- name: remove inheritance check - win_acl_inheritance: - path: '{{ test_win_acl_inheritance_path }}\folder' - reorganize: True - state: absent - register: remove_check - check_mode: True - -- name: get actual remove inheritance check - test_get_acl: - path: '{{ test_win_acl_inheritance_path }}\folder' - register: actual_remove_check - -- name: assert remove inheritance check - assert: - that: - - remove_check is changed - - actual_remove_check.inherited == True - - actual_remove_check.user_details[test_sids.stdout_lines[0]].isinherited == True - - actual_remove_check.user_details[test_sids.stdout_lines[1]].isinherited == True - - actual_remove_check.user_details[test_sids.stdout_lines[2]].isinherited == True - -- name: remove inheritance - win_acl_inheritance: - path: '{{ test_win_acl_inheritance_path }}\folder' - reorganize: True - state: absent - register: remove - -- name: get actual remove inheritance - test_get_acl: - path: '{{ test_win_acl_inheritance_path }}\folder' - register: actual_remove - -- name: assert remove inheritance - assert: - that: - - remove is changed - - actual_remove.inherited == False - - actual_remove.user_details[test_sids.stdout_lines[0]].isinherited == False - - actual_remove.user_details[test_sids.stdout_lines[1]].isinherited == False - - actual_remove.user_details[test_sids.stdout_lines[2]].isinherited == False - -- name: remove inheritance again - win_acl_inheritance: - path: '{{ test_win_acl_inheritance_path }}\folder' - reorganize: True - state: absent - register: remove_again - -- name: assert remove inheritance again - assert: - that: - - remove_again is not changed - -- name: add inheritance check - win_acl_inheritance: - path: '{{ test_win_acl_inheritance_path }}\folder' - reorganize: True - state: present - register: add_check - check_mode: True - -- name: get actual add inheritance check - test_get_acl: - path: '{{ test_win_acl_inheritance_path }}\folder' - register: actual_add_check - -- name: assert add inheritance check - assert: - that: - - add_check is changed - - actual_add_check.inherited == False - - actual_add_check.user_details[test_sids.stdout_lines[0]].isinherited == False - - actual_add_check.user_details[test_sids.stdout_lines[1]].isinherited == False - - actual_add_check.user_details[test_sids.stdout_lines[2]].isinherited == False - -- name: add inheritance - win_acl_inheritance: - path: '{{ test_win_acl_inheritance_path }}\folder' - reorganize: True - state: present - register: add - -- name: get actual add inheritance - test_get_acl: - path: '{{ test_win_acl_inheritance_path }}\folder' - register: actual_add - -- name: assert add inheritance - assert: - that: - - add is changed - - actual_add.inherited == True - - actual_add.user_details[test_sids.stdout_lines[0]].isinherited == True - - actual_add.user_details[test_sids.stdout_lines[1]].isinherited == True - - actual_add.user_details[test_sids.stdout_lines[2]].isinherited == True - -- name: add inheritance again - win_acl_inheritance: - path: '{{ test_win_acl_inheritance_path }}\folder' - reorganize: True - state: present - register: add_again - -- name: assert add inheritance again - assert: - that: - - add_again is not changed - -# Test cleanup -- name: remove test folder - win_file: - path: '{{ test_win_acl_inheritance_path }}' - state: absent diff --git a/test/integration/targets/win_certificate_store/aliases b/test/integration/targets/win_certificate_store/aliases deleted file mode 100644 index c46e6e61f4..0000000000 --- a/test/integration/targets/win_certificate_store/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group7 -skip/windows/2016 # Host takes a while to run and module isn't OS dependent diff --git a/test/integration/targets/win_certificate_store/defaults/main.yml b/test/integration/targets/win_certificate_store/defaults/main.yml deleted file mode 100644 index 19ab156654..0000000000 --- a/test/integration/targets/win_certificate_store/defaults/main.yml +++ /dev/null @@ -1,4 +0,0 @@ -win_cert_dir: '{{win_output_dir}}\win_certificate .ÅÑŚÌβŁÈ [$!@^&test(;)]' -key_password: password -subj_thumbprint: 'BD7AF104CF1872BDB518D95C9534EA941665FD27' -root_thumbprint: 'BC05633694E675449136679A658281F17A191087' diff --git a/test/integration/targets/win_certificate_store/files/root-cert.pem b/test/integration/targets/win_certificate_store/files/root-cert.pem deleted file mode 100644 index edbe6b8684..0000000000 --- a/test/integration/targets/win_certificate_store/files/root-cert.pem +++ /dev/null @@ -1,20 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDKDCCAhCgAwIBAgIJAP1vIdGgMJv/MA0GCSqGSIb3DQEBCwUAMCgxGTAXBgNV -BAMMEHJvb3QuYW5zaWJsZS5jb20xCzAJBgNVBAYTAlVTMCAXDTE3MTIxNTA4Mzkz -MloYDzIwODYwMTAyMDgzOTMyWjAoMRkwFwYDVQQDDBByb290LmFuc2libGUuY29t -MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMmq -YT8eZY6rFQKnmScUGnnUH1tLQ+3WQpfKiWygCUSb1CNqO3J1u3pGMEqYM58LK4Kr -Mpskv7K1tCV/EMZqGTqXAIfSLy9umlb/9C3AhL9thBPn5I9dam/EmrIZktI9/w5Y -wBXn4toe+OopA3QkMQh9BUjUCPb9fdOI+ir7OGFZMmxXmiM64+BEeywM2oSGsdZ9 -5hU378UBu2IX4+OAV8Fbr2l6VW+Fxg/tKIOo6Bs46Pa4EZgtemOqs3kxYBOltBTb -vFcLsLa4KYVu5Ge5YfB0Axfaem7PoP8IlMs8gxyojZ/r0o5hzxUcYlL/h8GeeoLW -PFFdiAS+UgxWINOqNXMCAwEAAaNTMFEwHQYDVR0OBBYEFLp9k4LmOnAR4ROrqhb+ -CFdbk2+oMB8GA1UdIwQYMBaAFLp9k4LmOnAR4ROrqhb+CFdbk2+oMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGksycHsjGbXfWfuhQh+CvXk/A2v -MoNgiHtNMTGliVNgoVp1B1rj4x9xyZ8YrO8GAmv8jaCwCShd0B5Ul4aZVk1wglVv -lFAwb4IAZN9jv9+fw5BRzQ2tLhkVWIEwx6pZkhGhhjBvMaplLN5JwBtsdZorFbm7 -wuKiUKcFAM28acoOhCmOhgyNNBZpZn5wXaQDY43AthJOhitAV7vph4MPUkwIJnOh -MA5GJXEqS58TE9z9pkhQnn9598G8tmOXyA2erAoM9JAXM3EYHxVpoHBb9QRj6WAw -XVBo6qRXkwjNEM5CbnD4hVIBsdkOGsDrgd4Q5izQZ3x+jFNkdL/zPsXjJFw= ------END CERTIFICATE----- - diff --git a/test/integration/targets/win_certificate_store/files/root-key.pem b/test/integration/targets/win_certificate_store/files/root-key.pem deleted file mode 100644 index c2d641d449..0000000000 --- a/test/integration/targets/win_certificate_store/files/root-key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAyaphPx5ljqsVAqeZJxQaedQfW0tD7dZCl8qJbKAJRJvUI2o7 -cnW7ekYwSpgznwsrgqsymyS/srW0JX8QxmoZOpcAh9IvL26aVv/0LcCEv22EE+fk -j11qb8SashmS0j3/DljAFefi2h746ikDdCQxCH0FSNQI9v1904j6Kvs4YVkybFea -Izrj4ER7LAzahIax1n3mFTfvxQG7Yhfj44BXwVuvaXpVb4XGD+0og6joGzjo9rgR -mC16Y6qzeTFgE6W0FNu8VwuwtrgphW7kZ7lh8HQDF9p6bs+g/wiUyzyDHKiNn+vS -jmHPFRxiUv+HwZ56gtY8UV2IBL5SDFYg06o1cwIDAQABAoIBAFRpZNsutgPJyLmb -vZeF6q8kAxwLnRtom+c9d9hoBHkbYOiSBuAaN6cuyffvTWw9GLFRR5V5BGSheg5X -6YWj03uayTYQ3H9WJHRWHrcn5mjaRnaukhUQXQT7nmT+H16xZJl0vLJupZ33aOla -0X9DxuJusk+RsU7xPEHXDCABl8/m7v3cFttUBughGBG5oDuzKlFbhXPwA8/yeJ1v -qdXKxENi9HO4X5fH1l0vFNIhEqvUVKjw/AzapYtr+bv1wssoNAzvhT7CFa2GjPQ0 -Ibcq3+RxyAN4iQVITy86Yl4LW1jLx63wbg9q1WG/ca9K/OEAuT7ebJNeMYmM+kf7 -sf6A8wECgYEA+nnLJ4QtANtAs6nmDC106DTx1cOf3Yq9JOAvmGLomF/8SrUzZbXM -F+JcZcttXuuFIFcZD0K7fFP9sx2ITH//BS5V0B0x7Z2olWexVjR6/5pOVFPu19ow -tyDCNi5BlTPbvSr/fAxjmO9SgVTb8oG66i4mi0Xn5bp1E441KdvNsHECgYEAzhz/ -+SjFJlJcGNvMmgfAbfv6McUv7TKrPIvVkA++Gi5QdqJjkuzL1uTfgWIY/9iDByMd -W36rFTkYrw6LTMF2dkMjul72Kkco3UExSzOmF4lFmCt3DZW6a6CExKpwk4kF2RnX -GRD0FoZZown3RbPHi9rsWxjyVy/yKGwnvXYndiMCgYEA6rnIUDfllK/jansFQtQ2 -goVbPGAfKJYjurL852mJX4JUBA7bI63CnX9b52lEDXfZQf1dVpfK6zAqx/gdCtPI -QSqy8FzrtSnSGnEaFxcHTRFl5lDhuxaWIIdqeSvP+eqnOhdZZP6XN3LPdrP3isNY -Tq0BIfNY5khd/v19hMSfdYECgYBQ8h6tMY/LrwiwUpIV4/l0uELYDQL3erC5RImI -3EXiblH3ZWsJpqmfKZ+FZos+3z8GLIo5BpQV76h8B5A5grkNVOzRIr42eF/aFOJR -EGWoVKbaTiehVC40WoQJ4I35wxRi4L0TAQ97USQe3akY3LP/fujYFgIGr7PAoEkz -JRX2VQKBgQDir8/a3FZVo6nYI8zIhBz8xqZJIgvlYQqiQFFwADu5eNPMvNIaVy+6 -7HKibGM2jPkuS2KHdc8WUp8IrRRMui04qE7kRxVu41QXEBfPiDvrvAQf8SfJe631 -XvYeZr7HKY4NI5J0ENcb54d7DLQ8a1/wL/GeLVrfUWG35Ra5MW57Og== ------END RSA PRIVATE KEY----- - diff --git a/test/integration/targets/win_certificate_store/files/subj-cert.pem b/test/integration/targets/win_certificate_store/files/subj-cert.pem deleted file mode 100644 index 6d9ec39c73..0000000000 --- a/test/integration/targets/win_certificate_store/files/subj-cert.pem +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIC0TCCAbkCCQC/MtOBa1UDpzANBgkqhkiG9w0BAQsFADAoMRkwFwYDVQQDDBBy -b290LmFuc2libGUuY29tMQswCQYDVQQGEwJVUzAgFw0xNzEyMTUwODU2MzBaGA8y -MDg2MDEwMjA4NTYzMFowKzEcMBoGA1UEAwwTc3ViamVjdC5hbnNpYmxlLmNvbTEL -MAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDszqdF -So3GlVP1xUnN4bSPrFRFiOl/Mqup0Zn5UJJUR9wLnRD+OLcq7kKin6hYqozSu7cC -+BnWQoq7vGSSNVqv7BqFMwzGJt9IBUQv0UqIQkA/duUdKdAiMn2PQRsNDnkWEbTj -4xsitItVNv84cDG0lkZBYyTgfyZlZLZWplkpUQkrZhoFCekZRJ+ODrqNW3W560rr -OUIh+HiQeBqocat6OdxgICBqpUh8EVo1iha3DXjGN08q5utg6gmbIl2VBaVJjfyd -wnUSqHylJwh6WCIEh+HXsn4ndfNWSN/fDqvi5I10V1j6Zos7yqQf8qAezUAm6eSq -hLgZz0odq9DsO4HHAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAFK5mVIJ2D+kI0kk -sxnW4ibWFjzlYFYPYrZg+2JFIVTbKBg1YzyhuIKm0uztqRxQq5iLn/C/uponHoqF -7KDQI37KAJIQdgSva+mEuO9bZAXg/eegail2hN6np7HjOKlPu23s40dAbFrbcOWP -VbsBEPDP0HLv6OgbQWzNlE9HO1b7pX6ozk3q4ULO7IR85P6OHYsBBThL+qsOTzg/ -gVknuB9+n9hgNqZcAcXBLDetOM9aEmYJCGk0enYP5UGLYpseE+rTXFbRuHTPr1o6 -e8BetiSWS/wcrV4ZF5qr9NiYt5eD6JzTB5Rn5awxxj0FwMtrBu003lLQUWxsuTzz -35/RLY4= ------END CERTIFICATE----- - diff --git a/test/integration/targets/win_certificate_store/files/subj-key.pem b/test/integration/targets/win_certificate_store/files/subj-key.pem deleted file mode 100644 index 51a150afe6..0000000000 --- a/test/integration/targets/win_certificate_store/files/subj-key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEA7M6nRUqNxpVT9cVJzeG0j6xURYjpfzKrqdGZ+VCSVEfcC50Q -/ji3Ku5Cop+oWKqM0ru3AvgZ1kKKu7xkkjVar+wahTMMxibfSAVEL9FKiEJAP3bl -HSnQIjJ9j0EbDQ55FhG04+MbIrSLVTb/OHAxtJZGQWMk4H8mZWS2VqZZKVEJK2Ya -BQnpGUSfjg66jVt1uetK6zlCIfh4kHgaqHGrejncYCAgaqVIfBFaNYoWtw14xjdP -KubrYOoJmyJdlQWlSY38ncJ1Eqh8pScIelgiBIfh17J+J3XzVkjf3w6r4uSNdFdY -+maLO8qkH/KgHs1AJunkqoS4Gc9KHavQ7DuBxwIDAQABAoIBAQDfjqBfS+jYZrUi -uqPYV5IMaNYN5xj4Wi+xXA0OT0A1jLlxxU/7kDNrtg72U9+sBSZ483nstag+nAc5 -ALu5Q+FfX3gR84XFs4DrDv22XtEMHe9leqsFgynYfu4GRaJyCw3JBeJNmWNOuj8n -rYn4EAL8xzmAFUcFIURwSEnTN6vI0cS09nQukz+9CIBuGr7TPMET8YlATDJcH+Ua -EGZ9MAFXdKF6adC2nrCVBDNr8mUEpK1XdQcPH2bvcTuZ3Jj5AF2rOrcHq4FZUm97 -8PaMH6Sarxhwl+ycwrKbU5aEzUYTk67k0V6m9lyvH9z3O3Y84Tr3cZZ5WxdnG6Ri -72MFlfgRAoGBAP8wA+KWJ/ttmEXAoSX4J2fPl7X1RhR+1zPNdLY7iX0uNstL8IFH -vUN9JHi1Tr7llav+2bUTOu2EMDVmDWZH0s/qKOn+GmqIQLp0441fVAiamTcgwGKE -Wwsu4dg10IJ9akHIIbrILT0CvRcIRf67EYLBj3ZwfR+wF1ncefbsxWA9AoGBAO2P -qGMn+yrIi5DZF23x6iD2Y7bIdlUmqIqwb99XhW+3YJmRuh1EuN6XP2bIveRa9xvm -Q7bbcQM0Yv2c7eTyxpzz2I4bmnccVbs6M1VhtkyQEy5+X5yOl9wnitaaUrbWFy/w -kDPuISjLl3xDlxd6dbjf70fkG5oogx5c5toEyWZTAoGAK1CHGErMdozfr9dGgx9f -8Or3oVcEki4FcTGKgfQRHkJd4pv9MrRul6oCKsr7lsN5aDxVz7p34iDx3d54n8fJ -LKleUHllGngOJJf6l+B6bwtuvkC85vv4SCmpA/3+amfHRWsm7oFTzGtOlT4+Q0KV -clBQfZYSZvKIxCP8P8ForzECgYEAjDOad1qjOy68X7Ifx71cJjQDyV4pqDt2gNN8 -Ut1+XN5m3ntI0fk6+fNdcbXLjDe7WvXcxNBhtDh4q6CwLcyyNvMavVPBJ8bLOgIx -RZSzWCA3kdr3ZpgpO78Ci4DsjAdyC9L36A4D9+Wf87CYPT0CuSdAOrd/Ks36BDNj -8wucKQ0CgYAaRwQ18nkemrpQ/+EQgEWnWfqgB+6T4ygZ4ZTym0FAtG7CdLxvCi8V -toyn+zi+yFTRFXHDmvg9HLIIMK/hRQjgc8Ns5nDwgQlGwCZTvjVbD4anCr1IWuky -owvxKWsHseNilKrnAk2maQxrrrpSk8QWrp2CFw04LsWGTxtFvstBmg== ------END RSA PRIVATE KEY----- - diff --git a/test/integration/targets/win_certificate_store/meta/main.yml b/test/integration/targets/win_certificate_store/meta/main.yml deleted file mode 100644 index bdea853d75..0000000000 --- a/test/integration/targets/win_certificate_store/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: -- prepare_win_tests diff --git a/test/integration/targets/win_certificate_store/tasks/main.yml b/test/integration/targets/win_certificate_store/tasks/main.yml deleted file mode 100644 index 86bf3baedd..0000000000 --- a/test/integration/targets/win_certificate_store/tasks/main.yml +++ /dev/null @@ -1,121 +0,0 @@ -### keys in files/ have been generated with -# generate root private key -# openssl genrsa -aes256 -out enckey.pem 2048 -# openssl rsa -in envkey.pem -out root-key.pem -# -# generate root certificate -# openssl req -x509 -key root-key.pem -days 24855 -out root-vert.pem -subj "/CN=root.ansible.com/C=US" -# -# generate subject private key -# openssl genrsa -aes256 -out enckey.pem 2048 -# openssl rsa -in enckey.pem -out subj-key.pem -# -# generate subject certificate -# openssl req -new -key subj-key.pem -out cert.csr -subj "/CN=subject.ansible.com/C=US" -# openssl x509 -req -in cert.csr -CA root-cert.pem -CAkey root-key.pem -CAcreateserial -out subj-cert.pem -days 24855 -### ---- -- name: ensure test dir is present - win_file: - path: '{{win_cert_dir}}\exported' - state: directory - -- name: ensure certificates are removed from store before test - win_certificate_store: - thumbprint: '{{item}}' - state: absent - with_items: - - '{{subj_thumbprint}}' - - '{{root_thumbprint}}' - -- name: ensure certificates are removed from custom store before test - win_certificate_store: - thumbprint: '{{item}}' - state: absent - store_name: TrustedPeople - store_location: CurrentUser - with_items: - - '{{subj_thumbprint}}' - - '{{root_thumbprint}}' - -# these files are created on the fly so we don't store binary in the git repo -- name: create PKCS12 without password - command: 'openssl pkcs12 -export -out subj-cert-without-pass.pfx -inkey subj-key.pem -in subj-cert.pem -passout pass:' - args: - chdir: '{{role_path}}/files' - delegate_to: localhost - run_once: yes - -- name: create PKCS12 with password - command: 'openssl pkcs12 -export -out subj-cert-with-pass.pfx -inkey subj-key.pem -in subj-cert.pem -passout pass:{{key_password}}' - args: - chdir: '{{role_path}}/files' - delegate_to: localhost - run_once: yes - -- name: create DER encoded cert - command: openssl x509 -outform der -in subj-cert.pem -out subj-cert.cer - args: - chdir: '{{role_path}}/files' - delegate_to: localhost - run_once: yes - -- name: create PEM encoded PKCS7 file - command: openssl crl2pkcs7 -nocrl -certfile subj-cert.pem -certfile root-cert.pem -out chain.pem - args: - chdir: '{{role_path}}/files' - delegate_to: localhost - run_once: yes - -- name: create DER encoded PKCS7 file - command: openssl crl2pkcs7 -nocrl -certfile subj-cert.pem -certfile root-cert.pem -out chain.p7b -outform der - args: - chdir: '{{role_path}}/files' - delegate_to: localhost - run_once: yes - -- name: copy across test cert files - win_copy: - src: files/ - dest: '{{win_cert_dir}}' - -- block: - - name: run tests - include_tasks: test.yml - - always: - - name: ensure generated keys are deleted - file: - path: '{{role_path}}/files/{{item}}' - state: absent - delegate_to: localhost - run_once: yes - with_items: - - subj-cert-with-pass.pfx - - subj-cert-without-pass.pfx - - subj-cert.cer - - chain.pem - - chain.p7b - - - name: ensure certificates are removed from store after test - win_certificate_store: - thumbprint: '{{item}}' - state: absent - with_items: - - '{{subj_thumbprint}}' - - '{{root_thumbprint}}' - - - name: ensure certificates are removed from custom store after test - win_certificate_store: - thumbprint: '{{item}}' - state: absent - store_name: TrustedPeople - store_location: CurrentUser - with_items: - - '{{subj_thumbprint}}' - - '{{root_thumbprint}}' - - - name: ensure test dir is deleted - win_file: - path: '{{win_cert_dir}}' - state: absent diff --git a/test/integration/targets/win_certificate_store/tasks/test.yml b/test/integration/targets/win_certificate_store/tasks/test.yml deleted file mode 100644 index 05e6717162..0000000000 --- a/test/integration/targets/win_certificate_store/tasks/test.yml +++ /dev/null @@ -1,801 +0,0 @@ ---- -- name: fail with invalid store location - win_certificate_store: - state: present - path: '{{win_cert_dir}}\subj-cert.pem' - store_location: FakeLocation - register: fail_fake_location - failed_when: "fail_fake_location.msg != 'value of store_location must be one of: CurrentUser, LocalMachine. Got no match for: FakeLocation'" - -- name: fail with invalid store name - win_certificate_store: - state: present - path: '{{win_cert_dir}}\subj-cert.pem' - store_name: FakeName - register: fail_fake_name - failed_when: "fail_fake_name.msg != 'value of store_name must be one of: AddressBook, AuthRoot, CertificateAuthority, Disallowed, My, Root, TrustedPeople, TrustedPublisher. Got no match for: FakeName'" - -- name: fail when state=present and no path is set - win_certificate_store: - state: present - register: fail_present_no_path - failed_when: "fail_present_no_path.msg != 'state is present but all of the following are missing: path'" - -- name: fail when state=exported and no path is set - win_certificate_store: - state: exported - thumbprint: ABC - register: fail_export_no_path - failed_when: "fail_export_no_path.msg != 'state is exported but all of the following are missing: path'" - -- name: fail when state=exported and no thumbprint is set - win_certificate_store: - state: exported - path: '{{win_cert_dir}}' - register: fail_export_no_thumbprint - failed_when: "fail_export_no_thumbprint.msg != 'state is exported but all of the following are missing: thumbprint'" - -- name: fail to export thumbprint when path is a dir - win_certificate_store: - state: exported - thumbprint: '{{subj_thumbprint}}' - path: '{{win_cert_dir}}' - register: fail_export_path_is_dir - failed_when: fail_export_path_is_dir.msg != "Cannot export cert to path '" + win_cert_dir + "' as it is a directory" - -- name: fail when state=absent and not path or thumbprint is set - win_certificate_store: - state: absent - register: fail_absent_no_path_or_thumbprint - failed_when: "fail_absent_no_path_or_thumbprint.msg != 'state is absent but any of the following are missing: path, thumbprint'" - -- name: import pem certificate (check) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.pem' - state: present - register: import_pem_check - check_mode: yes - -- name: get result of import pem certificate (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_pem_result_check - -- name: assert results of import pem certificate (check) - assert: - that: - - import_pem_check is changed - - import_pem_check.thumbprints == [subj_thumbprint] - - import_pem_result_check.stdout_lines[0] == "False" - -- name: import pem certificate - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.pem' - state: present - register: import_pem - -- name: get result of import pem certificate - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_pem_result - -- name: assert results of import pem certificate - assert: - that: - - import_pem is changed - - import_pem.thumbprints == [subj_thumbprint] - - import_pem_result.stdout_lines[0] == "True" - -- name: import pem certificate (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.pem' - state: present - register: import_pem_again - -- name: assert results of import pem certificate (idempotent) - assert: - that: - - not import_pem_again is changed - -- name: remove certificate based on thumbprint (check) - win_certificate_store: - thumbprint: '{{subj_thumbprint}}' - state: absent - register: remove_thumbprint_check - check_mode: yes - -- name: get result of remove certificate based on thumbprint (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: remove_thumbprint_result_check - -- name: assert results of remove certificate based on thumbprint (check) - assert: - that: - - remove_thumbprint_check is changed - - remove_thumbprint_check.thumbprints == [subj_thumbprint] - - remove_thumbprint_result_check.stdout_lines[0] == "True" - -- name: remove certificate based on thumbprint - win_certificate_store: - thumbprint: '{{subj_thumbprint}}' - state: absent - register: remove_thumbprint - -- name: get result of remove certificate based on thumbprint - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: remove_thumbprint_result - -- name: assert results of remove certificate based on thumbprint - assert: - that: - - remove_thumbprint is changed - - remove_thumbprint.thumbprints == [subj_thumbprint] - - remove_thumbprint_result.stdout_lines[0] == "False" - -- name: remove certificate based on thumbprint (idempotent) - win_certificate_store: - thumbprint: '{{subj_thumbprint}}' - state: absent - register: remove_thumbprint_again - -- name: assert results of remove certificate based on thumbprint (idempotent) - assert: - that: - - not remove_thumbprint_again is changed - -- name: import der certificate (check) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.cer' - state: present - register: import_der_check - check_mode: yes - -- name: get result of import der certificate (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_der_result_check - -- name: assert results of import der certificate (check) - assert: - that: - - import_der_check is changed - - import_der_check.thumbprints == [subj_thumbprint] - - import_der_result_check.stdout_lines[0] == "False" - -- name: import der certificate - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.cer' - state: present - register: import_der - -- name: get result of import der certificate - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_der_result - -- name: assert results of import der certificate - assert: - that: - - import_der is changed - - import_der.thumbprints == [subj_thumbprint] - - import_der_result.stdout_lines[0] == "True" - -- name: import der certificate (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.cer' - state: present - register: import_der_again - -- name: assert results of import der certificate (idempotent) - assert: - that: - - not import_der_again is changed - -- name: remove certificate based on path (check) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.cer' - state: absent - register: remove_path_check - check_mode: yes - -- name: get result of remove certificate based on path (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: remove_path_result_check - -- name: assert results of remove certificate based on path (check) - assert: - that: - - remove_path_check is changed - - remove_path_check.thumbprints == [subj_thumbprint] - - remove_path_result_check.stdout_lines[0] == "True" - -- name: remove certificate based on path - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.cer' - state: absent - register: remove_path - -- name: get result of remove certificate based on path - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: remove_path_result - -- name: assert results of remove certificate based on path - assert: - that: - - remove_path is changed - - remove_path.thumbprints == [subj_thumbprint] - - remove_path_result.stdout_lines[0] == "False" - -- name: remove certificate based on path (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert.cer' - state: absent - register: remove_path_again - -- name: assert results of remove certificate based on path (idempotent) - assert: - that: - - not remove_path_again is changed - -- name: import PEM encoded p7b chain (check) - win_certificate_store: - path: '{{win_cert_dir}}\chain.pem' - state: present - register: import_pem_p7b_check - check_mode: yes - -- name: get result of subj in p7b chain (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_pem_p7b_subj_result_check - -- name: get result of root in p7b chain (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{root_thumbprint}}" }) { $true } else { $false } - register: import_pem_p7b_root_result_check - -- name: assert results of import PEM encoded p7b chain (check) - assert: - that: - - import_pem_p7b_check is changed - - import_pem_p7b_check.thumbprints|count == 2 - - subj_thumbprint in import_pem_p7b_check.thumbprints - - root_thumbprint in import_pem_p7b_check.thumbprints - - import_pem_p7b_subj_result_check.stdout_lines[0] == "False" - - import_pem_p7b_root_result_check.stdout_lines[0] == "False" - -- name: import PEM encoded p7b chain - win_certificate_store: - path: '{{win_cert_dir}}\chain.pem' - state: present - register: import_pem_p7b - -- name: get result of subj in p7b chain - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_pem_p7b_subj_result - -- name: get result of root in p7b chain - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{root_thumbprint}}" }) { $true } else { $false } - register: import_pem_p7b_root_result - -- name: assert results of import PEM encoded p7b chain - assert: - that: - - import_pem_p7b is changed - - import_pem_p7b.thumbprints|count == 2 - - subj_thumbprint in import_pem_p7b.thumbprints - - root_thumbprint in import_pem_p7b.thumbprints - - import_pem_p7b_subj_result.stdout_lines[0] == "True" - - import_pem_p7b_root_result.stdout_lines[0] == "True" - -- name: import PEM encoded p7b chain (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\chain.pem' - state: present - register: import_pem_p7b_again - -- name: assert results of import PEM encoded p7b chain (idempotent) - assert: - that: - - not import_pem_p7b_again is changed - -- name: remove p7b chain certs - win_certificate_store: - thumbprint: '{{item}}' - state: absent - with_items: - - '{{subj_thumbprint}}' - - '{{root_thumbprint}}' - -- name: import DER encoded p7b chain into custom store (check) - win_certificate_store: - path: '{{win_cert_dir}}\chain.p7b' - state: present - store_name: TrustedPeople - store_location: CurrentUser - register: import_der_p7b_check - check_mode: yes - -- name: get result of subj in p7b chain in custom store (check) - win_shell: if (Get-ChildItem -Path Cert:\CurrentUser\TrustedPeople | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_der_p7b_subj_result_check - -- name: get result of root in p7b chain in custom store (check) - win_shell: if (Get-ChildItem -Path Cert:\CurrentUser\TrustedPeople | Where-Object { $_.Thumbprint -eq "{{root_thumbprint}}" }) { $true } else { $false } - register: import_der_p7b_root_result_check - -- name: assert results of import DER encoded p7b chain into custom store (check) - assert: - that: - - import_der_p7b_check is changed - - import_der_p7b_check.thumbprints|count == 2 - - subj_thumbprint in import_der_p7b_check.thumbprints - - root_thumbprint in import_der_p7b_check.thumbprints - - import_der_p7b_subj_result_check.stdout_lines[0] == "False" - - import_der_p7b_root_result_check.stdout_lines[0] == "False" - -- name: import DER encoded p7b chain into custom store - win_certificate_store: - path: '{{win_cert_dir}}\chain.p7b' - state: present - store_name: TrustedPeople - store_location: CurrentUser - register: import_der_p7b - -- name: get result of subj in p7b chain in custom store - win_shell: if (Get-ChildItem -Path Cert:\CurrentUser\TrustedPeople | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_der_p7b_subj_result - -- name: get result of root in p7b chain in custom store - win_shell: if (Get-ChildItem -Path Cert:\CurrentUser\TrustedPeople | Where-Object { $_.Thumbprint -eq "{{root_thumbprint}}" }) { $true } else { $false } - register: import_der_p7b_root_result - -- name: assert results of import DER encoded p7b chain into custom store - assert: - that: - - import_der_p7b is changed - - import_der_p7b.thumbprints|count == 2 - - subj_thumbprint in import_der_p7b.thumbprints - - root_thumbprint in import_der_p7b.thumbprints - - import_der_p7b_root_result.stdout_lines[0] == "True" - - import_der_p7b_root_result.stdout_lines[0] == "True" - -- name: import DER encoded p7b chain into custom store (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\chain.p7b' - state: present - store_name: TrustedPeople - store_location: CurrentUser - register: import_der_p7b_again - -- name: assert results of import DER encoded p7b chain into custom store (idempotent) - assert: - that: - - not import_der_p7b_again is changed - -- name: remove p7b chain certs from custom store - win_certificate_store: - thumbprint: '{{item}}' - state: absent - store_name: TrustedPeople - store_location: CurrentUser - with_items: - - '{{subj_thumbprint}}' - - '{{root_thumbprint}}' - -- name: import pfx without password and non exportable (check) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-without-pass.pfx' - state: present - key_exportable: no - vars: &become_vars - ansible_become: yes - ansible_become_method: runas - ansible_become_user: '{{ansible_user}}' - ansible_become_pass: '{{ansible_password}}' - register: import_pfx_without_pass_check - check_mode: yes - -- name: get results of import pfx without password and non exportable (check) - win_shell: if (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_pfx_without_pass_result_check - -- name: assert results of import pfx without password and non exportable (check) - assert: - that: - - import_pfx_without_pass_check is changed - - import_pfx_without_pass_check.thumbprints == [subj_thumbprint] - - import_pfx_without_pass_result_check.stdout_lines[0] == "False" - -- name: import pfx without password and non exportable - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-without-pass.pfx' - state: present - key_exportable: no - vars: *become_vars - register: import_pfx_without_pass - -- name: get results of import pfx without password and non exportable - win_shell: (Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }).PrivateKey.CspKeyContainerInfo.Exportable - vars: *become_vars - register: import_pfx_without_pass_result - -- name: assert results of import pfx without password and non exportable - assert: - that: - - import_pfx_without_pass is changed - - import_pfx_without_pass.thumbprints == [subj_thumbprint] - - import_pfx_without_pass_result.stdout_lines[0] == "False" - -- name: import pfx without password and non exportable (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-without-pass.pfx' - state: present - key_exportable: no - vars: *become_vars - register: import_pfx_without_pass_again - -- name: assert results of import pfx without password and non exportable (idempotent) - assert: - that: - - not import_pfx_without_pass_again is changed - -- name: fail import pfx with password and none set - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-with-pass.pfx' - state: present - store_location: CurrentUser - store_name: TrustedPeople - register: fail_import_pfx_with_password - failed_when: "'Failed to load cert from file' not in fail_import_pfx_with_password.msg and 'The specified network password is not correct' not in fail_import_pfx_with_password.msg" - -- name: import pfx with password (check) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-with-pass.pfx' - state: present - password: '{{key_password}}' - store_location: CurrentUser - store_name: TrustedPeople - register: import_pfx_with_pass_check - vars: *become_vars - check_mode: yes - -- name: get results of import pfx with password (check) - win_shell: if (Get-ChildItem -Path Cert:\CurrentUser\TrustedPeople | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }) { $true } else { $false } - register: import_pfx_with_pass_result_check - -- name: assert results of import pfx with password (check) - assert: - that: - - import_pfx_with_pass_check is changed - - import_pfx_with_pass_check.thumbprints == [subj_thumbprint] - - import_pfx_with_pass_result_check.stdout_lines[0] == "False" - -- name: import pfx with password - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-with-pass.pfx' - state: present - password: '{{key_password}}' - store_location: CurrentUser - store_name: TrustedPeople - vars: *become_vars - register: import_pfx_with_pass - -- name: get results of import pfx with password - win_shell: (Get-ChildItem -Path Cert:\CurrentUser\TrustedPeople | Where-Object { $_.Thumbprint -eq "{{subj_thumbprint}}" }).PrivateKey.CspKeyContainerInfo.Exportable - vars: *become_vars - register: import_pfx_with_pass_result - -- name: assert results of import pfx with password - assert: - that: - - import_pfx_with_pass is changed - - import_pfx_with_pass.thumbprints == [subj_thumbprint] - - import_pfx_with_pass_result.stdout_lines[0] == "True" - -- name: import pfx with password (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\subj-cert-with-pass.pfx' - state: present - password: '{{key_password}}' - store_location: CurrentUser - store_name: TrustedPeople - vars: *become_vars - register: import_pfx_with_pass_again - -- name: assert results of import pfx with password (idempotent) - assert: - that: - - not import_pfx_with_pass_again is changed - -- name: import root cert for export tests - win_certificate_store: - path: '{{win_cert_dir}}\root-cert.pem' - state: present - -- name: export cert as pem (check) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.pem' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pem - register: export_pem_check - check_mode: yes - -- name: get result of export cert as pem (check) - win_stat: - path: '{{win_cert_dir}}\exported\cert.pem' - register: export_pem_result_check - -- name: assert results of export cert as pem (check) - assert: - that: - - export_pem_check is changed - - export_pem_check.thumbprints == [subj_thumbprint] - - export_pem_result_check.stat.exists == False - -- name: export cert as pem - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.pem' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pem - register: export_pem - -- name: get result of export cert as pem - win_stat: - path: '{{win_cert_dir}}\exported\cert.pem' - register: export_pem_result - -- name: assert results of export cert as pem - assert: - that: - - export_pem is changed - - export_pem.thumbprints == [subj_thumbprint] - - export_pem_result.stat.checksum == '1ebf5467d18230e9f611940a74d12f1d0bc819b7' - -- name: export cert as pem (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.pem' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pem - register: export_pem_again - -- name: assert results of export cert as pem - assert: - that: - - not export_pem_again is changed - -- name: export cert as der (check) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.cer' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: der - register: export_der_check - check_mode: yes - -- name: get result of export cert as der (check) - win_stat: - path: '{{win_cert_dir}}\exported\cert.cer' - register: export_der_result_check - -- name: assert results of export cert as der (check) - assert: - that: - - export_der_check is changed - - export_der_check.thumbprints == [subj_thumbprint] - - export_der_result_check.stat.exists == False - -- name: export cert as der - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.cer' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: der - register: export_der - -- name: get result of export cert as der - win_stat: - path: '{{win_cert_dir}}\exported\cert.cer' - register: export_der_result - -- name: assert results of export cert as der - assert: - that: - - export_der is changed - - export_der.thumbprints == [subj_thumbprint] - - export_der_result.stat.checksum == 'bd7af104cf1872bdb518d95c9534ea941665fd27' - -- name: export cert as der (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.cer' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: der - register: export_der_again - -- name: assert results of export cert as der - assert: - that: - - not export_der_again is changed - -- name: export cert as der replacing pem - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.pem' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: der - register: export_der_over_pem - -- name: get result of export cert as der replacing pem - win_stat: - path: '{{win_cert_dir}}\exported\cert.pem' - register: export_der_over_pem_result - -- name: assert results of export cert as der replacing pem - assert: - that: - - export_der_over_pem is changed - - export_der_over_pem.thumbprints == [subj_thumbprint] - - export_der_over_pem_result.stat.checksum == 'bd7af104cf1872bdb518d95c9534ea941665fd27' - -- name: export cert as pem replacing der - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert.cer' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pem - register: export_pem_over_der - -- name: get result of export cert as pem replacing der - win_stat: - path: '{{win_cert_dir}}\exported\cert.cer' - register: export_pem_over_der_result - -- name: assert results of export cert as pem replacing der - assert: - that: - - export_pem_over_der is changed - - export_pem_over_der.thumbprints == [subj_thumbprint] - - export_pem_over_der_result.stat.checksum == '1ebf5467d18230e9f611940a74d12f1d0bc819b7' - -- name: export cert with key and password as pfx (check) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-pass.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - store_location: CurrentUser - store_name: TrustedPeople - password: '{{key_password}}' - register: export_pfx_with_pass_check - vars: *become_vars - check_mode: yes - -- name: get result of export cert with key and password as pfx (check) - win_stat: - path: '{{win_cert_dir}}\exported\cert-pass.pfx' - register: export_pfx_with_pass_result_check - -- name: assert results of export cert with key and password as pfx (check) - assert: - that: - - export_pfx_with_pass_check is changed - - export_pfx_with_pass_check.thumbprints == [subj_thumbprint] - - export_pfx_with_pass_result_check.stat.exists == False - -- name: export cert with key and password as pfx - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-pass.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - store_location: CurrentUser - store_name: TrustedPeople - password: '{{key_password}}' - vars: *become_vars - register: export_pfx_with_pass - -- name: get result of export cert with key and password as pfx - win_shell: | - $cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 - $cert.Import("{{win_cert_dir}}\exported\cert-pass.pfx", "{{key_password}}", 0) - $cert.HasPrivateKey - vars: *become_vars - register: export_pfx_with_pass_result - -- name: assert results of export cert with key and password as pfx - assert: - that: - - export_pfx_with_pass is changed - - export_pfx_with_pass.thumbprints == [subj_thumbprint] - - export_pfx_with_pass_result.stdout_lines[0] == "True" - -- name: export cert with key and password as pfx (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-pass.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - store_location: CurrentUser - store_name: TrustedPeople - password: '{{key_password}}' - vars: *become_vars - register: export_pfx_with_pass_again - -- name: assert results of export cert with key and password as pfx (idempotent) - assert: - that: - - not export_pfx_with_pass_again is changed - -- name: export cert with key without password as pfx (check) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-without-pass.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - store_location: CurrentUser - store_name: TrustedPeople - vars: *become_vars - register: export_pfx_without_pass_check - check_mode: yes - -- name: get result of export cert with key without password as pfx (check) - win_stat: - path: '{{win_cert_dir}}\exported\cert-without-pass.pfx' - register: export_pfx_without_pass_result_check - -- name: assert results of export cert with key without password as pfx (check) - assert: - that: - - export_pfx_without_pass_check is changed - - export_pfx_without_pass_check.thumbprints == [subj_thumbprint] - - export_pfx_without_pass_result_check.stat.exists == False - -- name: export cert with key without password as pfx - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-without-pass.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - store_location: CurrentUser - store_name: TrustedPeople - vars: *become_vars - register: export_pfx_without_pass - -- name: get result of export cert with key without password as pfx - win_shell: | - $cert = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2 - $cert.Import("{{win_cert_dir}}\exported\cert-without-pass.pfx", $null, 0) - $cert.HasPrivateKey - vars: *become_vars - register: export_pfx_without_pass_result - -- name: assert results of export cert with key without password as pfx - assert: - that: - - export_pfx_without_pass is changed - - export_pfx_without_pass.thumbprints == [subj_thumbprint] - - export_pfx_without_pass_result.stdout_lines[0] == "True" - -- name: export cert with key without password as pfx (idempotent) - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-without-pass.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - store_location: CurrentUser - store_name: TrustedPeople - vars: *become_vars - register: export_pfx_without_pass_again - -- name: assert results of export cert with key without password as pfx (idempotent) - assert: - that: - - not export_pfx_without_pass_again is changed - -- name: fail to export cert with key as pfx when not marked as exportable - win_certificate_store: - path: '{{win_cert_dir}}\exported\cert-fail.pfx' - thumbprint: '{{subj_thumbprint}}' - state: exported - file_type: pkcs12 - vars: *become_vars - register: fail_export_non_exportable - failed_when: fail_export_non_exportable.msg != 'Cannot export cert with key as PKCS12 when the key is not marked as exportable or not accessible by the current user' diff --git a/test/integration/targets/win_command/aliases b/test/integration/targets/win_command/aliases deleted file mode 100644 index 4cd27b3cb2..0000000000 --- a/test/integration/targets/win_command/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group1 diff --git a/test/integration/targets/win_command/files/crt_setmode.c b/test/integration/targets/win_command/files/crt_setmode.c deleted file mode 100644 index 4067e71778..0000000000 --- a/test/integration/targets/win_command/files/crt_setmode.c +++ /dev/null @@ -1,15 +0,0 @@ -// crt_setmode.c -// This program uses _setmode to change -// stdout from text mode to binary mode. -// Used to test output_encoding_override for win_command. - -#include <stdio.h> -#include <fcntl.h> -#include <io.h> - -int main(void) -{ - _setmode(_fileno(stdout), _O_BINARY); - // Translates to 日本 in shift_jis - printf("\x93\xFa\x96\x7B - Japan"); -} diff --git a/test/integration/targets/win_command/tasks/main.yml b/test/integration/targets/win_command/tasks/main.yml deleted file mode 100644 index bf72ffe21f..0000000000 --- a/test/integration/targets/win_command/tasks/main.yml +++ /dev/null @@ -1,255 +0,0 @@ -- name: execute a command - win_command: whoami /groups - register: cmdout - -- name: validate result - assert: - that: - - cmdout is successful - - cmdout is changed - - cmdout.cmd == 'whoami /groups' - - cmdout.delta is match('^\d:(\d){2}:(\d){2}.(\d){6}$') - - cmdout.end is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - cmdout.rc == 0 - - cmdout.start is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - cmdout.stderr == "" - - cmdout.stdout is search('GROUP INFORMATION') - - '"GROUP INFORMATION" in cmdout.stdout_lines' - -- name: execute something nonexistent - win_command: bogus_command1234 - register: cmdout - ignore_errors: true - -- name: validate result - assert: - that: - - cmdout is failed - - cmdout is not changed - - cmdout.cmd == 'bogus_command1234' - - cmdout.rc == 2 - - "\"Could not find file 'bogus_command1234.exe'.\" in cmdout.msg" - -- name: execute something with error output - win_command: cmd /c "echo some output & echo some error 1>&2" - register: cmdout - -- name: validate result - assert: - that: - - cmdout is successful - - cmdout is changed - - cmdout.cmd == 'cmd /c "echo some output & echo some error 1>&2"' - - cmdout.delta is match('^\d:(\d){2}:(\d){2}.(\d){6}$') - - cmdout.end is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - cmdout.rc == 0 - - cmdout.start is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - cmdout.stderr is search('some error') - - cmdout.stdout == "some output \r\n" - - cmdout.stdout_lines == ["some output "] - -- name: ensure test file is absent - win_file: - path: c:\testfile.txt - state: absent - -- name: run with creates, should create - win_command: cmd /c "echo $null >> c:\testfile.txt" - args: - creates: c:\testfile.txt - register: cmdout - -- name: validate result - assert: - that: - - cmdout is successful - - cmdout is changed - -- name: run again with creates, should skip - win_command: cmd /c "echo $null >> c:\testfile.txt" - args: - creates: c:\testfile.txt - register: cmdout - -- name: validate result - assert: - that: - - cmdout is skipped - - cmdout.msg is search('exists') - -- name: get path of pagefile - win_shell: | - $pagefile = $null - $cs = Get-CimInstance -ClassName Win32_ComputerSystem - if ($cs.AutomaticManagedPagefile) { - $pagefile = "$($env:SystemRoot.Substring(0, 1)):\pagefile.sys" - } else { - $pf = Get-CimInstance -ClassName Win32_PageFileSetting - if ($pf -ne $null) { - $pagefile = $pf[0].Name - } - } - $pagefile - register: pagefile_path - -- name: test creates with hidden system file, should skip - win_command: echo no - args: - creates: '{{pagefile_path.stdout_lines[0]}}' - register: cmdout - when: pagefile_path.stdout_lines|count != 0 - -- name: validate result - assert: - that: - - cmdout is skipped - - cmdout.msg is search('exists') - when: pagefile_path.stdout_lines|count != 0 - -- name: ensure testfile is still present - win_stat: - path: c:\testfile.txt - register: statout - -- name: validate result - assert: - that: - - statout.stat.exists == true - -- name: run with removes, should remove - win_command: cmd /c "del c:\testfile.txt" - args: - removes: c:\testfile.txt - register: cmdout - -- name: validate result - assert: - that: - - cmdout is successful - - cmdout is changed - -- name: run again with removes, should skip - win_command: cmd /c "del c:\testfile.txt" - args: - removes: c:\testfile.txt - register: cmdout - -- name: validate result - assert: - that: - - cmdout is skipped - - cmdout.msg is search('does not exist') - -- name: run something with known nonzero exit code - win_command: cmd /c "exit 254" - register: cmdout - ignore_errors: true - -- name: validate result - assert: - that: - - cmdout is failed - - cmdout.failed == True # check the failure key explicitly, since failed does magic with RC - - cmdout.rc == 254 - -- name: interleave large writes between stdout/stderr (check for buffer consumption deadlock) - win_command: powershell /c "$ba = New-Object byte[] 4096; (New-Object System.Random 32).NextBytes($ba); $text = [Convert]::ToBase64String($ba); Write-Output startout; Write-Error starterror; Write-Error $text; Write-Output $text; Write-Error $text; Write-Output $text; Write-Error $text; Write-Output $text; Write-Output doneout Write-Error doneerror" - register: cmdout - -- name: ensure that the entirety of both streams were read - assert: - that: - - cmdout.stdout is search("startout") - - cmdout.stdout is search("doneout") - - cmdout.stderr is search("starterror") - - cmdout.stderr is search("doneerror") - -- name: create testing folder for argv binary - win_file: - path: C:\ansible testing - state: directory - -- name: download binary the outputs argv to stdout - win_get_url: - url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_module_utils/PrintArgv.exe - dest: C:\ansible testing\PrintArgv.exe - -- name: call argv binary with absolute path - win_command: '"C:\ansible testing\PrintArgv.exe" arg1 "arg 2" C:\path\arg "\"quoted arg\""' - register: cmdout - -- name: assert call to argv binary with absolute path - assert: - that: - - cmdout is changed - - cmdout.rc == 0 - - cmdout.stdout_lines[0] == 'arg1' - - cmdout.stdout_lines[1] == 'arg 2' - - cmdout.stdout_lines[2] == 'C:\\path\\arg' - - cmdout.stdout_lines[3] == '"quoted arg"' - -- name: call argv binary with relative path - win_command: 'PrintArgv.exe C:\path\end\slash\ ADDLOCAL="msi,example" two\\slashes' - args: - chdir: C:\ansible testing - register: cmdout - -- name: assert call to argv binary with relative path - assert: - that: - - cmdout is changed - - cmdout.rc == 0 - - cmdout.stdout_lines[0] == 'C:\\path\\end\\slash\\' - - cmdout.stdout_lines[1] == 'ADDLOCAL=msi,example' - - cmdout.stdout_lines[2] == 'two\\\\slashes' - -- name: download binary that output shift_jis chars to console - win_get_url: - url: https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/win_command/OutputEncodingOverride.exe - dest: C:\ansible testing\OutputEncodingOverride.exe - -- name: call binary with shift_jis output encoding override - win_command: '"C:\ansible testing\OutputEncodingOverride.exe"' - args: - output_encoding_override: shift_jis - register: cmdout - -- name: assert call to binary with shift_jis output - assert: - that: - - cmdout is changed - - cmdout.rc == 0 - - cmdout.stdout_lines[0] == '日本 - Japan' - -- name: remove testing folder - win_file: - path: C:\ansible testing - state: absent - -- name: run stdin test - win_command: powershell.exe - - args: - stdin: Write-Host "some input" - register: cmdout - -- name: assert run stdin test - assert: - that: - - cmdout is changed - - cmdout.rc == 0 - - cmdout.stdout_lines|count == 1 - - cmdout.stdout_lines[0] == "some input" - - cmdout.stderr == "" - -- name: echo some non ascii characters - win_command: cmd.exe /c echo über den Fußgängerübergang gehen - register: nonascii_output - -- name: assert echo some non ascii characters - assert: - that: - - nonascii_output is changed - - nonascii_output.rc == 0 - - nonascii_output.stdout_lines|count == 1 - - nonascii_output.stdout_lines[0] == 'über den Fußgängerübergang gehen' - - nonascii_output.stderr == '' diff --git a/test/integration/targets/win_copy/aliases b/test/integration/targets/win_copy/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_copy/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_copy/defaults/main.yml b/test/integration/targets/win_copy/defaults/main.yml deleted file mode 100644 index 5d8a1d2351..0000000000 --- a/test/integration/targets/win_copy/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -test_win_copy_path: C:\ansible\win_copy .ÅÑŚÌβŁÈ [$!@^&test(;)] diff --git a/test/integration/targets/win_copy/files-different/vault/folder/nested-vault-file b/test/integration/targets/win_copy/files-different/vault/folder/nested-vault-file deleted file mode 100644 index d8d1549874..0000000000 --- a/test/integration/targets/win_copy/files-different/vault/folder/nested-vault-file +++ /dev/null @@ -1,6 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -65653164323866373138353632323531393664393563633665373635623763353561386431373366 -3232353263363034313136663062623336663463373966320a333763323032646463386432626161 -36386330356637666362396661653935653064623038333031653335626164376465353235303636 -3335616231663838620a303632343938326538656233393562303162343261383465623261646664 -33613932343461626339333832363930303962633364303736376634396364643861 diff --git a/test/integration/targets/win_copy/files-different/vault/readme.txt b/test/integration/targets/win_copy/files-different/vault/readme.txt deleted file mode 100644 index dae883b5ee..0000000000 --- a/test/integration/targets/win_copy/files-different/vault/readme.txt +++ /dev/null @@ -1,5 +0,0 @@ -This directory contains some files that have been encrypted with ansible-vault. - -This is to test out the decrypt parameter in win_copy. - -The password is: password diff --git a/test/integration/targets/win_copy/files-different/vault/vault-file b/test/integration/targets/win_copy/files-different/vault/vault-file deleted file mode 100644 index 2fff7619a7..0000000000 --- a/test/integration/targets/win_copy/files-different/vault/vault-file +++ /dev/null @@ -1,6 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -30353665333635633433356261616636356130386330363962386533303566313463383734373532 -3933643234323638623939613462346361313431363939370a303532656338353035346661353965 -34656231633238396361393131623834316262306533663838336362366137306562646561383766 -6363373965633337640a373666336461613337346131353564383134326139616561393664663563 -3431 diff --git a/test/integration/targets/win_copy/files/empty.txt b/test/integration/targets/win_copy/files/empty.txt deleted file mode 100644 index e69de29bb2..0000000000 --- a/test/integration/targets/win_copy/files/empty.txt +++ /dev/null diff --git a/test/integration/targets/win_copy/files/foo.txt b/test/integration/targets/win_copy/files/foo.txt deleted file mode 100644 index 7c6ded14ec..0000000000 --- a/test/integration/targets/win_copy/files/foo.txt +++ /dev/null @@ -1 +0,0 @@ -foo.txt diff --git a/test/integration/targets/win_copy/files/subdir/bar.txt b/test/integration/targets/win_copy/files/subdir/bar.txt deleted file mode 100644 index 76018072e0..0000000000 --- a/test/integration/targets/win_copy/files/subdir/bar.txt +++ /dev/null @@ -1 +0,0 @@ -baz diff --git a/test/integration/targets/win_copy/files/subdir/subdir2/baz.txt b/test/integration/targets/win_copy/files/subdir/subdir2/baz.txt deleted file mode 100644 index 76018072e0..0000000000 --- a/test/integration/targets/win_copy/files/subdir/subdir2/baz.txt +++ /dev/null @@ -1 +0,0 @@ -baz diff --git a/test/integration/targets/win_copy/files/subdir/subdir2/subdir3/subdir4/qux.txt b/test/integration/targets/win_copy/files/subdir/subdir2/subdir3/subdir4/qux.txt deleted file mode 100644 index 78df5b06bd..0000000000 --- a/test/integration/targets/win_copy/files/subdir/subdir2/subdir3/subdir4/qux.txt +++ /dev/null @@ -1 +0,0 @@ -qux
\ No newline at end of file diff --git a/test/integration/targets/win_copy/tasks/main.yml b/test/integration/targets/win_copy/tasks/main.yml deleted file mode 100644 index b2ee103fd0..0000000000 --- a/test/integration/targets/win_copy/tasks/main.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -- name: create empty folder - file: - path: '{{role_path}}/files/subdir/empty' - state: directory - delegate_to: localhost - -# removes the cached zip module from the previous task so we can replicate -# the below issue where win_copy would delete DEFAULT_LOCAL_TMP if it -# had permission to -# https://github.com/ansible/ansible/issues/35613 -- name: clear the local ansiballz cache - file: - path: "{{lookup('config', 'DEFAULT_LOCAL_TMP')}}/ansiballz_cache" - state: absent - delegate_to: localhost - -- name: create test folder - win_file: - path: '{{test_win_copy_path}}' - state: directory - -- block: - - name: run tests for local to remote - include_tasks: tests.yml - - - name: run tests for remote to remote - include_tasks: remote_tests.yml - - always: - - name: remove test folder - win_file: - path: '{{test_win_copy_path}}' - state: absent diff --git a/test/integration/targets/win_copy/tasks/remote_tests.yml b/test/integration/targets/win_copy/tasks/remote_tests.yml deleted file mode 100644 index 5abb50200b..0000000000 --- a/test/integration/targets/win_copy/tasks/remote_tests.yml +++ /dev/null @@ -1,471 +0,0 @@ ---- -- name: fail when source does not exist remote - win_copy: - src: fakesource - dest: fakedest - remote_src: yes - register: fail_remote_invalid_source - failed_when: "'it does not exist' not in fail_remote_invalid_source.msg" - -- name: setup source folder for remote tests - win_copy: - src: files/ - dest: '{{test_win_copy_path}}\source\' - -- name: setup remote failure tests - win_file: - path: '{{item.path}}' - state: '{{item.state}}' - with_items: - - { 'path': '{{test_win_copy_path}}\target\folder', 'state': 'directory' } - - { 'path': '{{test_win_copy_path}}\target\file', 'state': 'touch' } - - { 'path': '{{test_win_copy_path}}\target\subdir', 'state': 'touch' } - -- name: fail source is a file but dest is a folder - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\folder' - remote_src: yes - register: fail_remote_file_to_folder - failed_when: "'dest is already a folder' not in fail_remote_file_to_folder.msg" - -- name: fail source is a file but dest is a folder - win_copy: - src: '{{test_win_copy_path}}\source\' - dest: '{{test_win_copy_path}}\target\' - remote_src: yes - register: fail_remote_folder_to_file - failed_when: "'dest is already a file' not in fail_remote_folder_to_file.msg" - -- name: fail source is a file dest parent dir is also a file - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\file\foo.txt' - remote_src: yes - register: fail_remote_file_parent_dir_file - failed_when: "'is currently a file' not in fail_remote_file_parent_dir_file.msg" - -- name: fail source is a folder dest parent dir is also a file - win_copy: - src: '{{test_win_copy_path}}\source\subdir' - dest: '{{test_win_copy_path}}\target\file' - remote_src: yes - register: fail_remote_folder_parent_dir_file - failed_when: "'object at dest parent dir is not a folder' not in fail_remote_folder_parent_dir_file.msg" - -- name: fail to copy a remote file with parent dir that doesn't exist and filename is set - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\missing-dir\foo.txt' - remote_src: yes - register: fail_remote_missing_parent_dir - failed_when: "'does not exist' not in fail_remote_missing_parent_dir.msg" - -- name: remove target after remote failure tests - win_file: - path: '{{test_win_copy_path}}\target' - state: absent - -- name: create remote target after cleaning - win_file: - path: '{{test_win_copy_path}}\target' - state: directory - -- name: copy single file remote (check mode) - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\foo-target.txt' - remote_src: yes - register: remote_copy_file_check - check_mode: yes - -- name: get result of copy single file remote (check mode) - win_stat: - path: '{{test_win_copy_path}}\target\foo-target.txt' - register: remote_copy_file_actual_check - -- name: assert copy single file remote (check mode) - assert: - that: - - remote_copy_file_check is changed - - remote_copy_file_actual_check.stat.exists == False - -- name: copy single file remote - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\foo-target.txt' - remote_src: yes - register: remote_copy_file - -- name: get result of copy single file remote - win_stat: - path: '{{test_win_copy_path}}\target\foo-target.txt' - register: remote_copy_file_actual - -- name: assert copy single file remote - assert: - that: - - remote_copy_file is changed - - remote_copy_file.operation == 'file_copy' - - remote_copy_file.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - remote_copy_file.size == 8 - - remote_copy_file.original_basename == 'foo.txt' - - remote_copy_file_actual.stat.exists == True - - remote_copy_file_actual.stat.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - -- name: copy single file remote (idempotent) - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\foo-target.txt' - remote_src: yes - register: remote_copy_file_again - -- name: assert copy single file remote (idempotent) - assert: - that: - - remote_copy_file_again is not changed - -- name: copy single file into folder remote (check mode) - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\' - remote_src: yes - register: remote_copy_file_to_folder_check - check_mode: yes - -- name: get result of copy single file into folder remote (check mode) - win_stat: - path: '{{test_win_copy_path}}\target\foo.txt' - register: remote_copy_file_to_folder_actual_check - -- name: assert copy single file into folder remote (check mode) - assert: - that: - - remote_copy_file_to_folder_check is changed - - remote_copy_file_to_folder_actual_check.stat.exists == False - -- name: copy single file into folder remote - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\' - remote_src: yes - register: remote_copy_file_to_folder - -- name: get result of copy single file into folder remote - win_stat: - path: '{{test_win_copy_path}}\target\foo.txt' - register: remote_copy_file_to_folder_actual - -- name: assert copy single file into folder remote - assert: - that: - - remote_copy_file_to_folder is changed - - remote_copy_file_to_folder.operation == 'file_copy' - - remote_copy_file_to_folder.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - remote_copy_file_to_folder.size == 8 - - remote_copy_file_to_folder.original_basename == 'foo.txt' - - remote_copy_file_to_folder_actual.stat.exists == True - - remote_copy_file_to_folder_actual.stat.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - -- name: copy single file into folder remote (idempotent) - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\' - remote_src: yes - register: remote_copy_file_to_folder_again - -- name: assert copy single file into folder remote - assert: - that: - - remote_copy_file_to_folder_again is not changed - -- name: copy single file to missing folder (check mode) - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\missing\' - remote_src: yes - register: remote_copy_file_to_missing_folder_check - check_mode: yes - -- name: get result of copy single file to missing folder remote (check mode) - win_stat: - path: '{{test_win_copy_path}}\target\missing\foo.txt' - register: remote_copy_file_to_missing_folder_actual_check - -- name: assert copy single file to missing folder remote (check mode) - assert: - that: - - remote_copy_file_to_missing_folder_check is changed - - remote_copy_file_to_missing_folder_check.operation == 'file_copy' - - remote_copy_file_to_missing_folder_actual_check.stat.exists == False - -- name: copy single file to missing folder remote - win_copy: - src: '{{test_win_copy_path}}\source\foo.txt' - dest: '{{test_win_copy_path}}\target\missing\' - remote_src: yes - register: remote_copy_file_to_missing_folder - -- name: get result of copy single file to missing folder remote - win_stat: - path: '{{test_win_copy_path}}\target\missing\foo.txt' - register: remote_copy_file_to_missing_folder_actual - -- name: assert copy single file to missing folder remote - assert: - that: - - remote_copy_file_to_missing_folder is changed - - remote_copy_file_to_missing_folder.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - remote_copy_file_to_missing_folder.operation == 'file_copy' - - remote_copy_file_to_missing_folder.size == 8 - - remote_copy_file_to_missing_folder_actual.stat.exists == True - - remote_copy_file_to_missing_folder_actual.stat.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - -- name: clear target for folder to folder test - win_file: - path: '{{test_win_copy_path}}\target' - state: absent - -- name: copy folder to folder remote (check mode) - win_copy: - src: '{{test_win_copy_path}}\source' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_to_folder_check - check_mode: yes - -- name: get result of copy folder to folder remote (check mode) - win_stat: - path: '{{test_win_copy_path}}\target' - register: remote_copy_folder_to_folder_actual_check - -- name: assert copy folder to folder remote (check mode) - assert: - that: - - remote_copy_folder_to_folder_check is changed - - remote_copy_folder_to_folder_check.operation == 'folder_copy' - - remote_copy_folder_to_folder_actual_check.stat.exists == False - -- name: copy folder to folder remote - win_copy: - src: '{{test_win_copy_path}}\source' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_to_folder - -- name: get result of copy folder to folder remote - win_find: - paths: '{{test_win_copy_path}}\target' - recurse: yes - file_type: directory - register: remote_copy_folder_to_folder_actual - -- name: assert copy folder to folder remote - assert: - that: - - remote_copy_folder_to_folder is changed - - remote_copy_folder_to_folder.operation == 'folder_copy' - - remote_copy_folder_to_folder_actual.examined == 11 - - remote_copy_folder_to_folder_actual.matched == 6 - - remote_copy_folder_to_folder_actual.files[0].filename == 'source' - - remote_copy_folder_to_folder_actual.files[1].filename == 'subdir' - - remote_copy_folder_to_folder_actual.files[2].filename == 'empty' - - remote_copy_folder_to_folder_actual.files[3].filename == 'subdir2' - - remote_copy_folder_to_folder_actual.files[4].filename == 'subdir3' - - remote_copy_folder_to_folder_actual.files[5].filename == 'subdir4' - -- name: copy folder to folder remote (idempotent) - win_copy: - src: '{{test_win_copy_path}}\source' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_to_folder_again - -- name: assert copy folder to folder remote (idempotent) - assert: - that: - - remote_copy_folder_to_folder_again is not changed - -- name: change remote file after folder to folder test - win_copy: - content: bar.txt - dest: '{{test_win_copy_path}}\target\source\foo.txt' - -- name: remote remote folder after folder to folder test - win_file: - path: '{{test_win_copy_path}}\target\source\subdir\subdir2\subdir3\subdir4' - state: absent - -- name: copy folder to folder remote after change - win_copy: - src: '{{test_win_copy_path}}\source' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_to_folder_after_change - -- name: get result of copy folder to folder remote after change - win_find: - paths: '{{test_win_copy_path}}\target\source' - recurse: yes - patterns: ['foo.txt', 'qux.txt'] - register: remote_copy_folder_to_folder_after_change_actual - -- name: assert copy folder after changes - assert: - that: - - remote_copy_folder_to_folder_after_change is changed - - remote_copy_folder_to_folder_after_change_actual.matched == 2 - - remote_copy_folder_to_folder_after_change_actual.files[0].checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - remote_copy_folder_to_folder_after_change_actual.files[1].checksum == 'b54ba7f5621240d403f06815f7246006ef8c7d43' - -- name: clear target folder before folder contents to remote test - win_file: - path: '{{test_win_copy_path}}\target' - state: absent - -- name: copy folder contents to folder remote with backslash (check mode) - win_copy: - src: '{{test_win_copy_path}}\source\' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_content_backslash_check - check_mode: yes - -- name: get result of copy folder contents to folder remote with backslash (check mode) - win_stat: - path: '{{test_win_copy_path}}\target' - register: remote_copy_folder_content_backslash_actual_check - -- name: assert copy folder content to folder remote with backslash (check mode) - assert: - that: - - remote_copy_folder_content_backslash_check is changed - - remote_copy_folder_content_backslash_actual_check.stat.exists == False - -- name: copy folder contents to folder remote with backslash - win_copy: - src: '{{test_win_copy_path}}\source\' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_content_backslash - -- name: get result of copy folder contents to folder remote with backslash - win_find: - paths: '{{test_win_copy_path}}\target' - recurse: yes - file_type: directory - register: remote_copy_folder_content_backslash_actual - -- name: assert copy folder content to folder remote with backslash - assert: - that: - - remote_copy_folder_content_backslash is changed - - remote_copy_folder_content_backslash.operation == 'folder_copy' - - remote_copy_folder_content_backslash_actual.examined == 10 - - remote_copy_folder_content_backslash_actual.matched == 5 - - remote_copy_folder_content_backslash_actual.files[0].filename == 'subdir' - - remote_copy_folder_content_backslash_actual.files[1].filename == 'empty' - - remote_copy_folder_content_backslash_actual.files[2].filename == 'subdir2' - - remote_copy_folder_content_backslash_actual.files[3].filename == 'subdir3' - - remote_copy_folder_content_backslash_actual.files[4].filename == 'subdir4' - -- name: copy folder contents to folder remote with backslash (idempotent) - win_copy: - src: '{{test_win_copy_path}}\source\' - dest: '{{test_win_copy_path}}\target' - remote_src: yes - register: remote_copy_folder_content_backslash_again - -- name: assert copy folder content to folder remote with backslash (idempotent) - assert: - that: - - remote_copy_folder_content_backslash_again is not changed - -- name: change remote file after folder content to folder test - win_copy: - content: bar.txt - dest: '{{test_win_copy_path}}\target\foo.txt' - -- name: remote remote folder after folder content to folder test - win_file: - path: '{{test_win_copy_path}}\target\subdir\subdir2\subdir3\subdir4' - state: absent - -- name: copy folder content to folder remote after change - win_copy: - src: '{{test_win_copy_path}}/source/' - dest: '{{test_win_copy_path}}/target/' - remote_src: yes - register: remote_copy_folder_content_to_folder_after_change - -- name: get result of copy folder content to folder remote after change - win_find: - paths: '{{test_win_copy_path}}\target' - recurse: yes - patterns: ['foo.txt', 'qux.txt'] - register: remote_copy_folder_content_to_folder_after_change_actual - -- name: assert copy folder content to folder after changes - assert: - that: - - remote_copy_folder_content_to_folder_after_change is changed - - remote_copy_folder_content_to_folder_after_change_actual.matched == 2 - - remote_copy_folder_content_to_folder_after_change_actual.files[0].checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - remote_copy_folder_content_to_folder_after_change_actual.files[1].checksum == 'b54ba7f5621240d403f06815f7246006ef8c7d43' - -# https://github.com/ansible/ansible/issues/50077 -- name: create empty nested directory - win_file: - path: '{{ test_win_copy_path }}\source\empty-nested\nested-dir' - state: directory - -- name: copy empty nested directory (check mode) - win_copy: - src: '{{ test_win_copy_path }}\source\empty-nested' - dest: '{{ test_win_copy_path }}\target' - remote_src: True - check_mode: True - register: copy_empty_dir_check - -- name: get result of copy empty nested directory (check mode) - win_stat: - path: '{{ test_win_copy_path }}\target\empty-nested' - register: copy_empty_dir_actual_check - -- name: assert copy empty nested directory (check mode) - assert: - that: - - copy_empty_dir_check is changed - - copy_empty_dir_check.operation == "folder_copy" - - not copy_empty_dir_actual_check.stat.exists - -- name: copy empty nested directory - win_copy: - src: '{{ test_win_copy_path }}\source\empty-nested' - dest: '{{ test_win_copy_path }}\target' - remote_src: True - register: copy_empty_dir - -- name: get result of copy empty nested directory - win_stat: - path: '{{ test_win_copy_path }}\target\empty-nested\nested-dir' - register: copy_empty_dir_actual - -- name: assert copy empty nested directory - assert: - that: - - copy_empty_dir is changed - - copy_empty_dir.operation == "folder_copy" - - copy_empty_dir_actual.stat.exists - -- name: copy empty nested directory (idempotent) - win_copy: - src: '{{ test_win_copy_path }}\source\empty-nested' - dest: '{{ test_win_copy_path }}\target' - remote_src: True - register: copy_empty_dir_again - -- name: assert copy empty nested directory (idempotent) - assert: - that: - - not copy_empty_dir_again is changed diff --git a/test/integration/targets/win_copy/tasks/tests.yml b/test/integration/targets/win_copy/tasks/tests.yml deleted file mode 100644 index d15e71f65c..0000000000 --- a/test/integration/targets/win_copy/tasks/tests.yml +++ /dev/null @@ -1,535 +0,0 @@ ---- -- name: fail no source or content - win_copy: - dest: dest - register: fail_no_source_content - failed_when: fail_no_source_content.msg != 'src (or content) and dest are required' - -- name: fail content but dest isn't a file, unix ending - win_copy: - content: a - dest: a/ - register: fail_dest_not_file_unix - failed_when: fail_dest_not_file_unix.msg != 'dest must be a file if content is defined' - -- name: fail content but dest isn't a file, windows ending - win_copy: - content: a - dest: a\ - register: fail_dest_not_file_windows - failed_when: fail_dest_not_file_windows.msg != 'dest must be a file if content is defined' - -- name: fail to copy a file with parent dir that doesn't exist and filename is set - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\missing-dir\foo.txt' - register: fail_missing_parent_dir - failed_when: "'does not exist' not in fail_missing_parent_dir.msg" - -- name: fail to copy an encrypted file without the password set - win_copy: - src: '{{role_path}}/files-different/vault/vault-file' - dest: '{{test_win_copy_path}}\file' - register: fail_copy_encrypted_file - ignore_errors: yes # weird failed_when doesn't work in this case - -- name: assert failure message when copying an encrypted file without the password set - assert: - that: - - fail_copy_encrypted_file is failed - - fail_copy_encrypted_file.msg == 'A vault password or secret must be specified to decrypt {{role_path}}/files-different/vault/vault-file' - -- name: fail to copy a directory with an encrypted file without the password - win_copy: - src: '{{role_path}}/files-different/vault' - dest: '{{test_win_copy_path}}' - register: fail_copy_directory_with_enc_file - ignore_errors: yes - -- name: assert failure message when copying a directory that contains an encrypted file without the password set - assert: - that: - - fail_copy_directory_with_enc_file is failed - - fail_copy_directory_with_enc_file.msg == 'A vault password or secret must be specified to decrypt {{role_path}}/files-different/vault/vault-file' - -- name: copy with content (check mode) - win_copy: - content: a - dest: '{{test_win_copy_path}}\file' - register: copy_content_check - check_mode: yes - -- name: get result of copy with content (check mode) - win_stat: - path: '{{test_win_copy_path}}\file' - register: copy_content_actual_check - -- name: assert copy with content (check mode) - assert: - that: - - copy_content_check is changed - - copy_content_check.checksum == '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8' - - copy_content_check.operation == 'file_copy' - - copy_content_check.size == 1 - - copy_content_actual_check.stat.exists == False - -- name: copy with content - win_copy: - content: a - dest: '{{test_win_copy_path}}\file' - register: copy_content - -- name: get result of copy with content - win_stat: - path: '{{test_win_copy_path}}\file' - register: copy_content_actual - -- name: assert copy with content - assert: - that: - - copy_content is changed - - copy_content.checksum == '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8' - - copy_content.operation == 'file_copy' - - copy_content.size == 1 - - copy_content_actual.stat.exists == True - - copy_content_actual.stat.checksum == '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8' - -- name: copy with content (idempotent) - win_copy: - content: a - dest: '{{test_win_copy_path}}\file' - register: copy_content_again - -- name: assert copy with content (idempotent) - assert: - that: - - copy_content_again is not changed - -- name: copy with content change when missing - win_copy: - content: b - dest: '{{test_win_copy_path}}\file' - force: no - register: copy_content_when_missing - -- name: assert copy with content change when missing - assert: - that: - - copy_content_when_missing is not changed - -- name: copy single file (check mode) - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\foo-target.txt' - register: copy_file_check - check_mode: yes - -- name: get result of copy single file (check mode) - win_stat: - path: '{{test_win_copy_path}}\foo-target.txt' - register: copy_file_actual_check - -- name: assert copy single file (check mode) - assert: - that: - - copy_file_check is changed - - copy_file_check.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_file_check.dest == test_win_copy_path + '\\foo-target.txt' - - copy_file_check.operation == 'file_copy' - - copy_file_check.size == 8 - - copy_file_actual_check.stat.exists == False - -- name: copy single file - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\foo-target.txt' - register: copy_file - -- name: get result of copy single file - win_stat: - path: '{{test_win_copy_path}}\foo-target.txt' - register: copy_file_actual - -- name: assert copy single file - assert: - that: - - copy_file is changed - - copy_file.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_file.dest == test_win_copy_path + '\\foo-target.txt' - - copy_file.operation == 'file_copy' - - copy_file.size == 8 - - copy_file_actual.stat.exists == True - - copy_file_actual.stat.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - -- name: copy single file (idempotent) - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\foo-target.txt' - register: copy_file_again - -- name: assert copy single file (idempotent) - assert: - that: - - copy_file_again is not changed - -- name: copy single file (backup) - win_copy: - content: "{{ lookup('file', 'foo.txt') }}\nfoo bar" - dest: '{{test_win_copy_path}}\foo-target.txt' - backup: yes - register: copy_file_backup - -- name: check backup_file - win_stat: - path: '{{ copy_file_backup.backup_file }}' - register: backup_file - -- name: assert copy single file (backup) - assert: - that: - - copy_file_backup is changed - - backup_file.stat.exists == true - -- name: copy single file to folder (check mode) - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\' - register: copy_file_to_folder_check - check_mode: yes - -- name: get result of copy single file to folder (check mode) - win_stat: - path: '{{test_win_copy_path}}\foo.txt' - register: copy_file_to_folder_actual_check - -- name: assert copy single file to folder (check mode) - assert: - that: - - copy_file_to_folder_check is changed - - copy_file_to_folder_check.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_file_to_folder_check.dest == test_win_copy_path + '\\foo.txt' - - copy_file_to_folder_check.operation == 'file_copy' - - copy_file_to_folder_check.size == 8 - - copy_file_to_folder_actual_check.stat.exists == False - -- name: copy single file to folder - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\' - register: copy_file_to_folder - -- name: get result of copy single file to folder - win_stat: - path: '{{test_win_copy_path}}\foo.txt' - register: copy_file_to_folder_actual - -- name: assert copy single file to folder - assert: - that: - - copy_file_to_folder is changed - - copy_file_to_folder.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_file_to_folder.dest == test_win_copy_path + '\\foo.txt' - - copy_file_to_folder.operation == 'file_copy' - - copy_file_to_folder.size == 8 - - copy_file_to_folder_actual.stat.exists == True - - copy_file_to_folder_actual.stat.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - -- name: copy single file to folder (idempotent) - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\' - register: copy_file_to_folder_again - -- name: assert copy single file to folder (idempotent) - assert: - that: - - copy_file_to_folder_again is not changed - -- name: copy single file to missing folder (check mode) - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\missing\' - register: copy_file_to_missing_folder_check - check_mode: yes - -- name: get result of copy single file to missing folder (check mode) - win_stat: - path: '{{test_win_copy_path}}\missing\foo.txt' - register: copy_file_to_missing_folder_actual_check - -- name: assert copy single file to missing folder (check mode) - assert: - that: - - copy_file_to_missing_folder_check is changed - - copy_file_to_missing_folder_check.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_file_to_missing_folder_check.operation == 'file_copy' - - copy_file_to_missing_folder_check.size == 8 - - copy_file_to_missing_folder_actual_check.stat.exists == False - -- name: copy single file to missing folder - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\missing\' - register: copy_file_to_missing_folder - -- name: get result of copy single file to missing folder - win_stat: - path: '{{test_win_copy_path}}\missing\foo.txt' - register: copy_file_to_missing_folder_actual - -- name: assert copy single file to missing folder - assert: - that: - - copy_file_to_missing_folder is changed - - copy_file_to_missing_folder.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_file_to_missing_folder.operation == 'file_copy' - - copy_file_to_missing_folder.size == 8 - - copy_file_to_missing_folder_actual.stat.exists == True - - copy_file_to_missing_folder_actual.stat.checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - -- name: copy folder (check mode) - win_copy: - src: files - dest: '{{test_win_copy_path}}\recursive\folder' - register: copy_folder_check - check_mode: yes - -- name: get result of copy folder (check mode) - win_stat: - path: '{{test_win_copy_path}}\recursive\folder' - register: copy_folder_actual_check - -- name: assert copy folder (check mode) - assert: - that: - - copy_folder_check is changed - - copy_folder_check.operation == 'folder_copy' - - copy_folder_actual_check.stat.exists == False - -- name: copy folder - win_copy: - src: files - dest: '{{test_win_copy_path}}\recursive\folder' - register: copy_folder - -- name: get result of copy folder - win_find: - paths: '{{test_win_copy_path}}\recursive\folder' - recurse: yes - file_type: directory - register: copy_folder_actual - -- name: assert copy folder - assert: - that: - - copy_folder is changed - - copy_folder.operation == 'folder_copy' - - copy_folder_actual.examined == 11 # includes files and folders, the below is the nested order - - copy_folder_actual.matched == 6 - - copy_folder_actual.files[0].filename == 'files' - - copy_folder_actual.files[1].filename == 'subdir' - - copy_folder_actual.files[2].filename == 'empty' - - copy_folder_actual.files[3].filename == 'subdir2' - - copy_folder_actual.files[4].filename == 'subdir3' - - copy_folder_actual.files[5].filename == 'subdir4' - -- name: copy folder (idempotent) - win_copy: - src: files - dest: '{{test_win_copy_path}}\recursive\folder' - register: copy_folder_again - -- name: assert copy folder (idempotent) - assert: - that: - - copy_folder_again is not changed - -- name: change the text of a file in the remote source - win_copy: - content: bar.txt - dest: '{{test_win_copy_path}}\recursive\folder\files\foo.txt' - -- name: remove folder for test of recursive copy - win_file: - path: '{{test_win_copy_path}}\recursive\folder\files\subdir\subdir2\subdir3\subdir4' - state: absent - -- name: copy folder after changes - win_copy: - src: files - dest: '{{test_win_copy_path}}\recursive\folder' - register: copy_folder_after_change - -- name: get result of copy folder after changes - win_find: - paths: '{{test_win_copy_path}}\recursive\folder\files' - recurse: yes - patterns: ['foo.txt', 'qux.txt'] - register: copy_folder_after_changes_actual - -- name: assert copy folder after changes - assert: - that: - - copy_folder_after_change is changed - - copy_folder_after_changes_actual.matched == 2 - - copy_folder_after_changes_actual.files[0].checksum == 'c79a6506c1c948be0d456ab5104d5e753ab2f3e6' - - copy_folder_after_changes_actual.files[1].checksum == 'b54ba7f5621240d403f06815f7246006ef8c7d43' - -- name: copy folder's contents (check mode) - win_copy: - src: files/ - dest: '{{test_win_copy_path}}\recursive-contents\' - register: copy_folder_contents_check - check_mode: yes - -- name: get result of copy folder'scontents (check mode) - win_stat: - path: '{{test_win_copy_path}}\recursive-contents' - register: copy_folder_contents_actual_check - -- name: assert copy folder's contents (check mode) - assert: - that: - - copy_folder_contents_check is changed - - copy_folder_contents_check.operation == 'folder_copy' - - copy_folder_contents_actual_check.stat.exists == False - -- name: copy folder's contents - win_copy: - src: files/ - dest: '{{test_win_copy_path}}\recursive-contents\' - register: copy_folder_contents - -- name: get result of copy folder - win_find: - paths: '{{test_win_copy_path}}\recursive-contents' - recurse: yes - file_type: directory - register: copy_folder_contents_actual - -- name: assert copy folder - assert: - that: - - copy_folder_contents is changed - - copy_folder_contents.operation == 'folder_copy' - - copy_folder_contents_actual.examined == 10 # includes files and folders, the below is the nested order - - copy_folder_contents_actual.matched == 5 - - copy_folder_contents_actual.files[0].filename == 'subdir' - - copy_folder_contents_actual.files[1].filename == 'empty' - - copy_folder_contents_actual.files[2].filename == 'subdir2' - - copy_folder_contents_actual.files[3].filename == 'subdir3' - - copy_folder_contents_actual.files[4].filename == 'subdir4' - -- name: fail to copy file to a folder - win_copy: - src: foo.txt - dest: '{{test_win_copy_path}}\recursive-contents' - register: fail_file_to_folder - failed_when: "'object at path is already a directory' not in fail_file_to_folder.msg" - -- name: fail to copy folder to a file - win_copy: - src: subdir/ - dest: '{{test_win_copy_path}}\recursive-contents\foo.txt' - register: fail_folder_to_file - failed_when: "'object at parent directory path is already a file' not in fail_folder_to_file.msg" - -# https://github.com/ansible/ansible/issues/31336 -- name: create file with colon in the name - copy: - dest: '{{role_path}}/files-different/colon:file' - content: test - delegate_to: localhost - -- name: copy a file with colon as a source - win_copy: - src: '{{role_path}}/files-different/colon:file' - dest: '{{test_win_copy_path}}\colon.file' - register: copy_file_with_colon - -- name: get result of file with colon as a source - win_stat: - path: '{{test_win_copy_path}}\colon.file' - register: copy_file_with_colon_result - -- name: assert results of copy a file with colon as a source - assert: - that: - - copy_file_with_colon is changed - - copy_file_with_colon_result.stat.exists == True - - copy_file_with_colon_result.stat.checksum == "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3" - -- name: remove file with colon in the name - file: - path: '{{role_path}}/files-different/colon:file' - state: absent - delegate_to: localhost - -- name: copy an encrypted file without decrypting - win_copy: - src: '{{role_path}}/files-different/vault/vault-file' - dest: '{{test_win_copy_path}}\vault-file' - decrypt: no - register: copy_encrypted_file - -- name: get stat of copied encrypted file without decrypting - win_stat: - path: '{{test_win_copy_path}}\vault-file' - register: copy_encrypted_file_result - -- name: assert result of copy an encrypted file without decrypting - assert: - that: - - copy_encrypted_file is changed - - copy_encrypted_file_result.stat.checksum == "74a89620002d253f38834ee5b06cddd28956a43d" - -- name: copy an encrypted file without decrypting (idempotent) - win_copy: - src: '{{role_path}}/files-different/vault/vault-file' - dest: '{{test_win_copy_path}}\vault-file' - decrypt: no - register: copy_encrypted_file_again - -- name: assert result of copy an encrypted file without decrypting (idempotent) - assert: - that: - - copy_encrypted_file_again is not changed - -- name: copy folder with encrypted files without decrypting - win_copy: - src: '{{role_path}}/files-different/vault/' - dest: '{{test_win_copy_path}}\encrypted-test' - decrypt: no - register: copy_encrypted_file - -- name: get result of copy folder with encrypted files without decrypting - win_find: - paths: '{{test_win_copy_path}}\encrypted-test' - recurse: yes - patterns: '*vault*' - register: copy_encrypted_file_result - -- name: assert result of copy folder with encrypted files without decrypting - assert: - that: - - copy_encrypted_file is changed - - copy_encrypted_file_result.files|count == 2 - - copy_encrypted_file_result.files[0].checksum == "834563c94127730ecfa42dfc1e1821bbda2e51da" - - copy_encrypted_file_result.files[1].checksum == "74a89620002d253f38834ee5b06cddd28956a43d" - -- name: copy folder with encrypted files without decrypting (idempotent) - win_copy: - src: '{{role_path}}/files-different/vault/' - dest: '{{test_win_copy_path}}\encrypted-test' - decrypt: no - register: copy_encrypted_file_again - -- name: assert result of copy folder with encrypted files without decrypting (idempotent) - assert: - that: - - copy_encrypted_file_again is not changed - -- name: remove test folder after local to remote tests - win_file: - path: '{{test_win_copy_path}}' - state: absent diff --git a/test/integration/targets/win_dns_client/aliases b/test/integration/targets/win_dns_client/aliases deleted file mode 100644 index 423ce39108..0000000000 --- a/test/integration/targets/win_dns_client/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group2 diff --git a/test/integration/targets/win_dns_client/meta/main.yml b/test/integration/targets/win_dns_client/meta/main.yml deleted file mode 100644 index 012551418a..0000000000 --- a/test/integration/targets/win_dns_client/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: -- setup_win_device diff --git a/test/integration/targets/win_dns_client/tasks/main.yml b/test/integration/targets/win_dns_client/tasks/main.yml deleted file mode 100644 index 0e8b011b17..0000000000 --- a/test/integration/targets/win_dns_client/tasks/main.yml +++ /dev/null @@ -1,217 +0,0 @@ ---- -- set_fact: - get_ip_script: | - $adapter = Get-CimInstance -ClassName Win32_NetworkAdapter -Filter "NetConnectionID='{{ network_adapter_name }}'" - $config = Get-CimInstance -ClassName Win32_NetworkAdapterConfiguration -Filter "Index=$($adapter.DeviceID)" - $ips = $config.DNSServerSearchOrder - if ($ips) { - $config.DNSServerSearchOrder[0] - $config.DNSServerSearchOrder[1] - } - -- name: set a single IPv4 address (check mode) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: 192.168.34.5 - register: set_single_check - check_mode: yes - -- name: get result of set a single IPv4 address (check mode) - win_shell: '{{ get_ip_script }}' - changed_when: no - register: set_single_actual_check - -- name: assert set a single IPv4 address (check mode) - assert: - that: - - set_single_check is changed - - set_single_actual_check.stdout_lines == [] - -- name: set a single IPv4 address - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: 192.168.34.5 - register: set_single - -- name: get result of set a single IPv4 address - win_shell: '{{ get_ip_script }}' - changed_when: no - register: set_single_actual - -- name: assert set a single IPv4 address - assert: - that: - - set_single is changed - - set_single_actual.stdout_lines == ["192.168.34.5"] - -- name: set a single IPv4 address (idempotent) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: 192.168.34.5 - register: set_single_again - -- name: assert set a single IPv4 address (idempotent) - assert: - that: - - not set_single_again is changed - -- name: change IPv4 address to another value (check mode) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: 192.168.34.6 - register: change_single_check - check_mode: yes - -- name: get result of change IPv4 address to another value (check mode) - win_shell: '{{ get_ip_script }}' - changed_when: no - register: check_single_actual_check - -- name: assert change IPv4 address to another value (check mode) - assert: - that: - - change_single_check is changed - - check_single_actual_check.stdout_lines == ["192.168.34.5"] - -- name: change IPv4 address to another value - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: 192.168.34.6 - register: change_single - -- name: get result of change IPv4 address to another value - win_shell: '{{ get_ip_script }}' - changed_when: no - register: check_single_actual - -- name: assert change IPv4 address to another value - assert: - that: - - change_single is changed - - check_single_actual.stdout_lines == ["192.168.34.6"] - -- name: set multiple IPv4 addresses (check mode) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: - - 192.168.34.7 - - 192.168.34.8 - register: set_multiple_check - check_mode: yes - -- name: get result of set multiple IPv4 addresses (check mode) - win_shell: '{{ get_ip_script }}' - changed_when: no - register: set_multiple_actual_check - -- name: assert set multiple IPv4 addresses (check mode) - assert: - that: - - set_multiple_check is changed - - set_multiple_actual_check.stdout_lines == ["192.168.34.6"] - -- name: set multiple IPv4 addresses - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: - - 192.168.34.7 - - 192.168.34.8 - register: set_multiple - -- name: get result of set multiple IPv4 addresses - win_shell: '{{ get_ip_script }}' - changed_when: no - register: set_multiple_actual - -- name: assert set multiple IPv4 addresses - assert: - that: - - set_multiple is changed - - set_multiple_actual.stdout_lines == ["192.168.34.7", "192.168.34.8"] - -- name: set multiple IPv4 addresses (idempotent) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: - - 192.168.34.7 - - 192.168.34.8 - register: set_multiple_again - -- name: assert set multiple IPv4 addresses (idempotent) - assert: - that: - - not set_multiple_again is changed - -- name: reset IPv4 DNS back to DHCP (check mode) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: [] - register: set_dhcp_check - check_mode: yes - -- name: get result of reset IPv4 DNS back to DHCP (check mode) - win_shell: '{{ get_ip_script }}' - changed_when: no - register: set_dhcp_actual_check - -- name: assert reset IPv4 DNS back to DHCP (check mode) - assert: - that: - - set_dhcp_check is changed - - set_dhcp_actual_check.stdout_lines == ["192.168.34.7", "192.168.34.8"] - -- name: reset IPv4 DNS back to DHCP - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: [] - register: set_dhcp - -- name: get result of reset IPv4 DNS back to DHCP - win_shell: '{{ get_ip_script }}' - changed_when: no - register: set_dhcp_actual - -- name: assert reset IPv4 DNS back to DHCP - assert: - that: - - set_dhcp is changed - - set_dhcp_actual.stdout_lines == [] - -- name: reset IPv4 DNS back to DHCP (idempotent) - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - ipv4_addresses: [] - register: set_dhcp_again - -- name: assert reset IPv4 DNS back to DHCP (idempotent) - assert: - that: - - set_dhcp_again is not changed - -# Legacy WMI does not support setting IPv6 addresses so we can only test this on newer hosts that have the new cmdlets -- name: check if server supports IPv6 - win_shell: if (Get-Command -Name Get-NetAdapter -ErrorAction SilentlyContinue) { $true } else { $false } - changed_when: no - register: new_os - -- name: run IPv6 tests - when: new_os.stdout | trim | bool - block: - - name: set IPv6 DNS address - win_dns_client: - adapter_names: '{{ network_adapter_name }}' - dns_servers: - - 2001:db8::1 - - 2001:db8::2 - register: set_ipv6 - - - name: get result of set IPv6 DNS address - win_shell: (Get-DnsClientServerAddress -InterfaceAlias '{{ network_adapter_name }}' -AddressFAmily IPv6).ServerAddresses - changed_when: no - register: set_ipv6_actual - - - name: assert set IPv6 DNS address - assert: - that: - - set_ipv6 is changed - - set_ipv6_actual.stdout_lines == ['2001:db8::1', '2001:db8::2'] diff --git a/test/integration/targets/win_domain_membership/aliases b/test/integration/targets/win_domain_membership/aliases deleted file mode 100644 index 4c08975b17..0000000000 --- a/test/integration/targets/win_domain_membership/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group6 diff --git a/test/integration/targets/win_domain_membership/tasks/main.yml b/test/integration/targets/win_domain_membership/tasks/main.yml deleted file mode 100644 index c6294bd32a..0000000000 --- a/test/integration/targets/win_domain_membership/tasks/main.yml +++ /dev/null @@ -1,20 +0,0 @@ ---- -- name: get current workgroup - win_shell: (Get-WmiObject Win32_ComputerSystem).Workgroup - register: workgroup - -- name: fail if workgroup result is empty (means test host is in a domain) - fail: - msg: Cannot run tests for win_domain_membership when host is a member of a domain - when: workgroup.stdout == "" - -- block: - - include_tasks: tests.yml - - always: - - name: revert workgroup back to original before tests - win_domain_membership: - workgroup_name: '{{workgroup.stdout_lines[0]}}' - state: workgroup - domain_admin_user: fake user - domain_admin_password: fake password diff --git a/test/integration/targets/win_domain_membership/tasks/tests.yml b/test/integration/targets/win_domain_membership/tasks/tests.yml deleted file mode 100644 index 85f688e1d6..0000000000 --- a/test/integration/targets/win_domain_membership/tasks/tests.yml +++ /dev/null @@ -1,59 +0,0 @@ ---- -- name: change workgroup (check mode) - win_domain_membership: - workgroup_name: ANSIBLETEST - state: workgroup - domain_admin_user: fake user - domain_admin_password: fake password - register: change_workgroup_check - check_mode: yes - -- name: get result of change workgroup (check mode) - win_shell: (Get-WmiObject Win32_ComputerSystem).Workgroup - register: change_workgroup_result_check - -- name: assert result of change workgroup (check mode) - assert: - that: - - change_workgroup_check is changed - - change_workgroup_result_check.stdout == workgroup.stdout - -- name: change workgroup - win_domain_membership: - workgroup_name: ANSIBLETEST - state: workgroup - domain_admin_user: fake user - domain_admin_password: fake password - register: change_workgroup - -- name: get result of change workgroup - win_shell: (Get-WmiObject Win32_ComputerSystem).Workgroup - register: change_workgroup_result - -- name: assert result of change workgroup - assert: - that: - - change_workgroup is changed - - change_workgroup_result.stdout_lines[0] == "ANSIBLETEST" - -- name: change workgroup (idempotent) - win_domain_membership: - workgroup_name: ANSIBLETEST - state: workgroup - domain_admin_user: fake user - domain_admin_password: fake password - register: change_workgroup_again - -- name: assert result of change workgroup (idempotent) - assert: - that: - - change_workgroup_again is not changed - -- name: change workgroup fail invalid name - win_domain_membership: - workgroup_name: ANSIBLELONGNAMEFAILURE - state: workgroup - domain_admin_user: fake user - domain_admin_password: fake password - register: fail_change_workgroup - failed_when: "fail_change_workgroup.msg != 'failed to set workgroup through WMI, return value: 2695'" diff --git a/test/integration/targets/win_dsc/aliases b/test/integration/targets/win_dsc/aliases deleted file mode 100644 index 79af200d66..0000000000 --- a/test/integration/targets/win_dsc/aliases +++ /dev/null @@ -1,5 +0,0 @@ -shippable/windows/group4 -skip/windows/2008 -skip/windows/2008-R2 -skip/windows/2012 -skip/windows/2012-R2 diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.psm1 b/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.psm1 deleted file mode 100644 index dbf1ecf3ee..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.psm1 +++ /dev/null @@ -1,41 +0,0 @@ -#Requires -Version 5.0 -Modules CimCmdlets - -Function Get-TargetResource -{ - [CmdletBinding()] - [OutputType([Hashtable])] - param( - [Parameter(Mandatory=$true)] - [ValidateNotNullOrEmpty()] - [String]$KeyParam - ) - return @{Value = [bool]$global:DSCMachineStatus} -} - -Function Set-TargetResource -{ - [CmdletBinding()] - param ( - [Parameter(Mandatory=$true)] - [ValidateNotNullOrEmpty()] - [String]$KeyParam, - [Bool]$Value = $true - ) - $global:DSCMachineStatus = [int]$Value -} - -Function Test-TargetResource -{ - [CmdletBinding()] - [OutputType([Boolean])] - param ( - [Parameter(Mandatory=$true)] - [ValidateNotNullOrEmpty()] - [String]$KeyParam, - [Bool]$Value = $true - ) - $false -} - -Export-ModuleMember -Function *-TargetResource - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.schema.mof b/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.schema.mof deleted file mode 100644 index 288b887722..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.schema.mof +++ /dev/null @@ -1,7 +0,0 @@ -[ClassVersion("1.0.0"), FriendlyName("xSetReboot")] -class ANSIBLE_xSetReboot : OMI_BaseResource -{ - [Key] String KeyParam; - [Write] Boolean Value; -}; - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 b/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 deleted file mode 100644 index 79f6496962..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 +++ /dev/null @@ -1,214 +0,0 @@ -#Requires -Version 5.0 -Modules CimCmdlets - -Function ConvertFrom-CimInstance { - param( - [Parameter(Mandatory=$true)][CimInstance]$Instance - ) - $hashtable = @{ - _cim_instance = $Instance.CimSystemProperties.ClassName - } - foreach ($prop in $Instance.CimInstanceProperties) { - $hashtable."$($prop.Name)" = ConvertTo-OutputValue -Value $prop.Value - } - return $hashtable -} - -Function ConvertTo-OutputValue { - param($Value) - - if ($Value -is [DateTime[]]) { - $Value = $Value | ForEach-Object { $_.ToString("o") } - } elseif ($Value -is [DateTime]) { - $Value = $Value.ToString("o") - } elseif ($Value -is [Double]) { - $Value = $Value.ToString() # To avoid Python 2 double parsing issues on test validation - } elseif ($Value -is [Double[]]) { - $Value = $Value | ForEach-Object { $_.ToString() } - } elseif ($Value -is [PSCredential]) { - $password = $null - $password_ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToGlobalAllocUnicode($Value.Password) - try { - $password = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($password_ptr) - } finally { - [System.Runtime.InteropServices.Marshal]::ZeroFreeGlobalAllocUnicode($password_ptr) - } - $Value = @{ - username = $Value.Username - password = $password - } - } elseif ($Value -is [CimInstance[]]) { - $value_list = [System.Collections.Generic.List`1[Hashtable]]@() - foreach ($cim_instance in $Value) { - $value_list.Add((ConvertFrom-CimInstance -Instance $cim_instance)) - } - $Value = $value_list.ToArray() - } elseif ($Value -is [CimInstance]) { - $Value = ConvertFrom-CimInstance -Instance $Value - } - - return ,$Value -} - -Function Get-TargetResource -{ - [CmdletBinding()] - [OutputType([Hashtable])] - param( - [Parameter(Mandatory = $true)] - [ValidateSet("Present", "Absent")] - [String] $Ensure = "Present", - - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [String] $Path - ) - return @{ - Ensure = $Ensure - Path = $Path - } -} - -Function Set-TargetResource -{ - [CmdletBinding()] - param - ( - [Parameter(Mandatory = $true)] - [ValidateSet("Present", "Absent")] - [String] $Ensure = "Present", - - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [String] $Path, - - [String] $DefaultParam = "Default", - [String] $StringParam, - [String[]] $StringArrayParam, - [SByte] $Int8Param, - [SByte[]] $Int8ArrayParam, - [Byte] $UInt8Param, - [Byte[]] $UInt8ArrayParam, - [Int16] $Int16Param, - [Int16[]] $Int16ArrayParam, - [UInt16] $UInt16Param, - [UInt16[]] $UInt16ArrayParam, - [Int32] $Int32Param, - [Int32[]] $Int32ArrayParam, - [UInt32] $UInt32Param, - [UInt32[]] $UInt32ArrayParam, - [Int64] $Int64Param, - [Int64[]] $Int64ArrayParam, - [UInt64] $UInt64Param, - [UInt64[]] $UInt64ArrayParam, - [Bool] $BooleanParam, - [Bool[]] $BooleanArrayParam, - [Char] $CharParam, - [Char[]] $CharArrayParam, - [Single] $SingleParam, - [Single[]] $SingleArrayParam, - [Double] $DoubleParam, - [Double[]] $DoubleArrayParam, - [DateTime] $DateTimeParam, - [DateTime[]] $DateTimeArrayParam, - [PSCredential] $PSCredentialParam, - [CimInstance[]] $HashtableParam, - [CimInstance] $CimInstanceParam, - [CimInstance[]] $CimInstanceArrayParam, - [CimInstance] $NestedCimInstanceParam, - [CimInstance[]] $NestedCimInstanceArrayParam - ) - - $info = @{ - Version = "1.0.0" - Ensure = @{ - Type = $Ensure.GetType().FullName - Value = $Ensure - } - Path = @{ - Type = $Path.GetType().FullName - Value = $Path - } - DefaultParam = @{ - Type = $DefaultParam.GetType().FullName - Value = $DefaultParam - } - } - - foreach ($kvp in $PSCmdlet.MyInvocation.BoundParameters.GetEnumerator()) { - $info."$($kvp.Key)" = @{ - Type = $kvp.Value.GetType().FullName - Value = (ConvertTo-OutputValue -Value $kvp.Value) - } - } - - if (Test-Path -Path $Path) { - Remove-Item -Path $Path -Force > $null - } - New-Item -Path $Path -ItemType File > $null - Set-Content -Path $Path -Value (ConvertTo-Json -InputObject $info -Depth 10) > $null - Write-Verbose -Message "set verbose" - Write-Warning -Message "set warning" -} - -Function Test-TargetResource -{ - [CmdletBinding()] - [OutputType([Boolean])] - param - ( - [Parameter(Mandatory = $true)] - [ValidateSet("Present", "Absent")] - [String] $Ensure = "Present", - - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [String] $Path, - - [String] $DefaultParam = "Default", - [String] $StringParam, - [String[]] $StringArrayParam, - [SByte] $Int8Param, - [SByte[]] $Int8ArrayParam, - [Byte] $UInt8Param, - [Byte[]] $UInt8ArrayParam, - [Int16] $Int16Param, - [Int16[]] $Int16ArrayParam, - [UInt16] $UInt16Param, - [UInt16[]] $UInt16ArrayParam, - [Int32] $Int32Param, - [Int32[]] $Int32ArrayParam, - [UInt32] $UInt32Param, - [UInt32[]] $UInt32ArrayParam, - [Int64] $Int64Param, - [Int64[]] $Int64ArrayParam, - [UInt64] $UInt64Param, - [UInt64[]] $UInt64ArrayParam, - [Bool] $BooleanParam, - [Bool[]] $BooleanArrayParam, - [Char] $CharParam, - [Char[]] $CharArrayParam, - [Single] $SingleParam, - [Single[]] $SingleArrayParam, - [Double] $DoubleParam, - [Double[]] $DoubleArrayParam, - [DateTime] $DateTimeParam, - [DateTime[]] $DateTimeArrayParam, - [PSCredential] $PSCredentialParam, - [CimInstance[]] $HashtableParam, - [CimInstance] $CimInstanceParam, - [CimInstance[]] $CimInstanceArrayParam, - [CimInstance] $NestedCimInstanceParam, - [CimInstance[]] $NestedCimInstanceArrayParam - ) - Write-Verbose -Message "test verbose" - Write-Warning -Message "test warning" - $exists = Test-Path -LiteralPath $Path -PathType Leaf - if ($Ensure -eq "Present") { - $exists - } else { - -not $exists - } -} - -Export-ModuleMember -Function *-TargetResource - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.schema.mof b/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.schema.mof deleted file mode 100644 index c61b2b1e6a..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.schema.mof +++ /dev/null @@ -1,60 +0,0 @@ -[ClassVersion("1.0.0")] -class ANSIBLE_xTestClass -{ - [Key] String Key; - [Write] String StringValue; - [Write] SInt32 IntValue; - [Write] String StringArrayValue[]; -}; - -[ClassVersion("1.0.0")] -class ANSIBLE_xNestedClass -{ - [Key] String KeyValue; - [Write, EmbeddedInstance("ANSIBLE_xTestClass")] String CimValue; - [Write, EmbeddedInstance("MSFT_KeyValuePair")] String HashValue[]; - [Write] SInt16 IntValue; -}; - -[ClassVersion("1.0.0"), FriendlyName("xTestResource")] -class ANSIBLE_xTestResource : OMI_BaseResource -{ - [Key] String Path; - [Required, ValueMap{"Present", "Absent"}, Values{"Present", "Absent"}] String Ensure; - [Read] String ReadParam; - [Write] String DefaultParam; - [Write] String StringParam; - [Write] String StringArrayParam[]; - [Write] SInt8 Int8Param; - [Write] SInt8 Int8ArrayParam[]; - [Write] UInt8 UInt8Param; - [Write] UInt8 UInt8ArrayParam[]; - [Write] SInt16 Int16Param; - [Write] SInt16 Int16ArrayParam[]; - [Write] UInt16 UInt16Param; - [Write] UInt16 UInt16ArrayParam[]; - [Write] SInt32 Int32Param; - [Write] SInt32 Int32ArrayParam[]; - [Write] UInt32 UInt32Param; - [Write] UInt32 UInt32ArrayParam[]; - [Write] SInt64 Int64Param; - [Write] SInt64 Int64ArrayParam[]; - [Write] UInt64 UInt64Param; - [Write] UInt64 UInt64ArrayParam[]; - [Write] Boolean BooleanParam; - [Write] Boolean BooleanArrayParam[]; - [Write] Char16 CharParam; - [Write] Char16 CharArrayParam[]; - [Write] Real32 SingleParam; - [Write] Real32 SingleArrayParam[]; - [Write] Real64 DoubleParam; - [Write] Real64 DoubleArrayParam[]; - [Write] DateTime DateTimeParam; - [Write] DateTime DateTimeArrayParam[]; - [Write, EmbeddedInstance("MSFT_Credential")] String PSCredentialParam; - [Write, EmbeddedInstance("MSFT_KeyValuePair")] String HashtableParam[]; - [Write, EmbeddedInstance("ANSIBLE_xTestClass")] String CimInstanceArrayParam[]; - [Write, EmbeddedInstance("ANSIBLE_xNestedClass")] String NestedCimInstanceParam; - [Write, EmbeddedInstance("ANSIBLE_xNestedClass")] String NestedCimInstanceArrayParam[]; -}; - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/xTestDsc.psd1 b/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/xTestDsc.psd1 deleted file mode 100644 index 3d61611d70..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.0/xTestDsc.psd1 +++ /dev/null @@ -1,13 +0,0 @@ -@{ - ModuleVersion = '1.0.0' - GUID = '80c895c4-de3f-4d6d-8fa4-c504c96b6f22' - Author = 'Ansible' - CompanyName = 'Ansible' - Copyright = '(c) 2019' - Description = 'Test DSC Resource for Ansible integration tests' - PowerShellVersion = '5.0' - CLRVersion = '4.0' - FunctionsToExport = '*' - CmdletsToExport = '*' -} - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 b/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 deleted file mode 100644 index d75256e1d9..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 +++ /dev/null @@ -1,214 +0,0 @@ -#Requires -Version 5.0 -Modules CimCmdlets - -Function ConvertFrom-CimInstance { - param( - [Parameter(Mandatory=$true)][CimInstance]$Instance - ) - $hashtable = @{ - _cim_instance = $Instance.CimSystemProperties.ClassName - } - foreach ($prop in $Instance.CimInstanceProperties) { - $hashtable."$($prop.Name)" = ConvertTo-OutputValue -Value $prop.Value - } - return $hashtable -} - -Function ConvertTo-OutputValue { - param($Value) - - if ($Value -is [DateTime[]]) { - $Value = $Value | ForEach-Object { $_.ToString("o") } - } elseif ($Value -is [DateTime]) { - $Value = $Value.ToString("o") - } elseif ($Value -is [Double]) { - $Value = $Value.ToString() # To avoid Python 2 double parsing issues on test validation - } elseif ($Value -is [Double[]]) { - $Value = $Value | ForEach-Object { $_.ToString() } - } elseif ($Value -is [PSCredential]) { - $password = $null - $password_ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToGlobalAllocUnicode($Value.Password) - try { - $password = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($password_ptr) - } finally { - [System.Runtime.InteropServices.Marshal]::ZeroFreeGlobalAllocUnicode($password_ptr) - } - $Value = @{ - username = $Value.Username - password = $password - } - } elseif ($Value -is [CimInstance[]]) { - $value_list = [System.Collections.Generic.List`1[Hashtable]]@() - foreach ($cim_instance in $Value) { - $value_list.Add((ConvertFrom-CimInstance -Instance $cim_instance)) - } - $Value = $value_list.ToArray() - } elseif ($Value -is [CimInstance]) { - $Value = ConvertFrom-CimInstance -Instance $Value - } - - return ,$Value -} - -Function Get-TargetResource -{ - [CmdletBinding()] - [OutputType([Hashtable])] - param( - [Parameter(Mandatory = $true)] - [ValidateSet("Present", "Absent")] - [String] $Ensure = "Present", - - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [String] $Path - ) - return @{ - Ensure = $Ensure - Path = $Path - } -} - -Function Set-TargetResource -{ - [CmdletBinding()] - param - ( - [Parameter(Mandatory = $true)] - [ValidateSet("Present", "Absent")] - [String] $Ensure = "Present", - - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [String] $Path, - - [String] $DefaultParam = "Default", - [String] $StringParam, - [String[]] $StringArrayParam, - [SByte] $Int8Param, - [SByte[]] $Int8ArrayParam, - [Byte] $UInt8Param, - [Byte[]] $UInt8ArrayParam, - [Int16] $Int16Param, - [Int16[]] $Int16ArrayParam, - [UInt16] $UInt16Param, - [UInt16[]] $UInt16ArrayParam, - [Int32] $Int32Param, - [Int32[]] $Int32ArrayParam, - [UInt32] $UInt32Param, - [UInt32[]] $UInt32ArrayParam, - [Int64] $Int64Param, - [Int64[]] $Int64ArrayParam, - [UInt64] $UInt64Param, - [UInt64[]] $UInt64ArrayParam, - [Bool] $BooleanParam, - [Bool[]] $BooleanArrayParam, - [Char] $CharParam, - [Char[]] $CharArrayParam, - [Single] $SingleParam, - [Single[]] $SingleArrayParam, - [Double] $DoubleParam, - [Double[]] $DoubleArrayParam, - [DateTime] $DateTimeParam, - [DateTime[]] $DateTimeArrayParam, - [PSCredential] $PSCredentialParam, - [CimInstance[]] $HashtableParam, - [CimInstance] $CimInstanceParam, - [CimInstance[]] $CimInstanceArrayParam, - [CimInstance] $NestedCimInstanceParam, - [CimInstance[]] $NestedCimInstanceArrayParam - ) - - $info = @{ - Version = "1.0.1" - Ensure = @{ - Type = $Ensure.GetType().FullName - Value = $Ensure - } - Path = @{ - Type = $Path.GetType().FullName - Value = $Path - } - DefaultParam = @{ - Type = $DefaultParam.GetType().FullName - Value = $DefaultParam - } - } - - foreach ($kvp in $PSCmdlet.MyInvocation.BoundParameters.GetEnumerator()) { - $info."$($kvp.Key)" = @{ - Type = $kvp.Value.GetType().FullName - Value = (ConvertTo-OutputValue -Value $kvp.Value) - } - } - - if (Test-Path -Path $Path) { - Remove-Item -Path $Path -Force > $null - } - New-Item -Path $Path -ItemType File > $null - Set-Content -Path $Path -Value (ConvertTo-Json -InputObject $info -Depth 10) > $null - Write-Verbose -Message "set verbose" - Write-Warning -Message "set warning" -} - -Function Test-TargetResource -{ - [CmdletBinding()] - [OutputType([Boolean])] - param - ( - [Parameter(Mandatory = $true)] - [ValidateSet("Present", "Absent")] - [String] $Ensure = "Present", - - [Parameter(Mandatory = $true)] - [ValidateNotNullOrEmpty()] - [String] $Path, - - [String] $DefaultParam = "Default", - [String] $StringParam, - [String[]] $StringArrayParam, - [SByte] $Int8Param, - [SByte[]] $Int8ArrayParam, - [Byte] $UInt8Param, - [Byte[]] $UInt8ArrayParam, - [Int16] $Int16Param, - [Int16[]] $Int16ArrayParam, - [UInt16] $UInt16Param, - [UInt16[]] $UInt16ArrayParam, - [Int32] $Int32Param, - [Int32[]] $Int32ArrayParam, - [UInt32] $UInt32Param, - [UInt32[]] $UInt32ArrayParam, - [Int64] $Int64Param, - [Int64[]] $Int64ArrayParam, - [UInt64] $UInt64Param, - [UInt64[]] $UInt64ArrayParam, - [Bool] $BooleanParam, - [Bool[]] $BooleanArrayParam, - [Char] $CharParam, - [Char[]] $CharArrayParam, - [Single] $SingleParam, - [Single[]] $SingleArrayParam, - [Double] $DoubleParam, - [Double[]] $DoubleArrayParam, - [DateTime] $DateTimeParam, - [DateTime[]] $DateTimeArrayParam, - [PSCredential] $PSCredentialParam, - [CimInstance[]] $HashtableParam, - [CimInstance] $CimInstanceParam, - [CimInstance[]] $CimInstanceArrayParam, - [CimInstance] $NestedCimInstanceParam, - [CimInstance[]] $NestedCimInstanceArrayParam - ) - Write-Verbose -Message "test verbose" - Write-Warning -Message "test warning" - $exists = Test-Path -LiteralPath $Path -PathType Leaf - if ($Ensure -eq "Present") { - $exists - } else { - -not $exists - } -} - -Export-ModuleMember -Function *-TargetResource - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.schema.mof b/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.schema.mof deleted file mode 100644 index 9301664b3c..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.schema.mof +++ /dev/null @@ -1,63 +0,0 @@ -[ClassVersion("1.0.1")] -class ANSIBLE_xTestClass -{ - [Key] String KeyValue; - [Write, ValueMap{"Choice1", "Choice2"}, Values{"Choice1", "Choice2"}] String Choice; - [Write] String StringValue; - [Write] SInt32 IntValue; - [Write] String StringArrayValue[]; -}; - -[ClassVersion("1.0.1")] -class ANSIBLE_xNestedClass -{ - [Key] String KeyValue; - [Write, EmbeddedInstance("ANSIBLE_xTestClass")] String CimValue; - [Write, EmbeddedInstance("ANSIBLE_xTestClass")] String CimArrayValue[]; - [Write, EmbeddedInstance("MSFT_KeyValuePair")] String HashValue[]; - [Write] SInt16 IntValue; -}; - -[ClassVersion("1.0.1"), FriendlyName("xTestResource")] -class ANSIBLE_xTestResource : OMI_BaseResource -{ - [Key] String Path; - [Required, ValueMap{"Present", "Absent"}, Values{"Present", "Absent"}] String Ensure; - [Read] String ReadParam; - [Write] String DefaultParam; - [Write] String StringParam; - [Write] String StringArrayParam[]; - [Write] SInt8 Int8Param; - [Write] SInt8 Int8ArrayParam[]; - [Write] UInt8 UInt8Param; - [Write] UInt8 UInt8ArrayParam[]; - [Write] SInt16 Int16Param; - [Write] SInt16 Int16ArrayParam[]; - [Write] UInt16 UInt16Param; - [Write] UInt16 UInt16ArrayParam[]; - [Write] SInt32 Int32Param; - [Write] SInt32 Int32ArrayParam[]; - [Write] UInt32 UInt32Param; - [Write] UInt32 UInt32ArrayParam[]; - [Write] SInt64 Int64Param; - [Write] SInt64 Int64ArrayParam[]; - [Write] UInt64 UInt64Param; - [Write] UInt64 UInt64ArrayParam[]; - [Write] Boolean BooleanParam; - [Write] Boolean BooleanArrayParam[]; - [Write] Char16 CharParam; - [Write] Char16 CharArrayParam[]; - [Write] Real32 SingleParam; - [Write] Real32 SingleArrayParam[]; - [Write] Real64 DoubleParam; - [Write] Real64 DoubleArrayParam[]; - [Write] DateTime DateTimeParam; - [Write] DateTime DateTimeArrayParam[]; - [Write, EmbeddedInstance("MSFT_Credential")] String PSCredentialParam; - [Write, EmbeddedInstance("MSFT_KeyValuePair")] String HashtableParam[]; - [Write, EmbeddedInstance("ANSIBLE_xTestClass")] String CimInstanceParam; - [Write, EmbeddedInstance("ANSIBLE_xTestClass")] String CimInstanceArrayParam[]; - [Write, EmbeddedInstance("ANSIBLE_xNestedClass")] String NestedCimInstanceParam; - [Write, EmbeddedInstance("ANSIBLE_xNestedClass")] String NestedCimInstanceArrayParam[]; -}; - diff --git a/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/xTestDsc.psd1 b/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/xTestDsc.psd1 deleted file mode 100644 index 0c43b85238..0000000000 --- a/test/integration/targets/win_dsc/files/xTestDsc/1.0.1/xTestDsc.psd1 +++ /dev/null @@ -1,13 +0,0 @@ -@{ - ModuleVersion = '1.0.1' - GUID = '80c895c4-de3f-4d6d-8fa4-c504c96b6f22' - Author = 'Ansible' - CompanyName = 'Ansible' - Copyright = '(c) 2019' - Description = 'Test DSC Resource for Ansible integration tests' - PowerShellVersion = '5.0' - CLRVersion = '4.0' - FunctionsToExport = '*' - CmdletsToExport = '*' -} - diff --git a/test/integration/targets/win_dsc/meta/main.yml b/test/integration/targets/win_dsc/meta/main.yml deleted file mode 100644 index 9f37e96cd9..0000000000 --- a/test/integration/targets/win_dsc/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: -- setup_remote_tmp_dir diff --git a/test/integration/targets/win_dsc/tasks/main.yml b/test/integration/targets/win_dsc/tasks/main.yml deleted file mode 100644 index f37295ab71..0000000000 --- a/test/integration/targets/win_dsc/tasks/main.yml +++ /dev/null @@ -1,39 +0,0 @@ ---- -- name: get powershell version - win_shell: $PSVersionTable.PSVersion.Major - register: powershell_version - -- name: expect failure when running on old PS hosts - win_dsc: - resource_name: File - register: fail_dsc_old - failed_when: '"This module cannot run as it requires a minimum PowerShell version of 5.0" not in fail_dsc_old.msg' - when: powershell_version.stdout_lines[0]|int < 5 - -- name: run tests when PSv5+ - when: powershell_version.stdout_lines[0]|int >= 5 - block: - - name: add remote temp dir to PSModulePath - win_path: - name: PSModulePath - state: present - scope: machine - elements: - - '{{ remote_tmp_dir }}' - - - name: copy custom DSC resources to remote temp dir - win_copy: - src: xTestDsc - dest: '{{ remote_tmp_dir }}' - - - name: run tests - include_tasks: tests.yml - - always: - - name: remove remote tmp dir from PSModulePath - win_path: - name: PSModulePath - state: absent - scope: machine - elements: - - '{{ remote_tmp_dir }}' diff --git a/test/integration/targets/win_dsc/tasks/tests.yml b/test/integration/targets/win_dsc/tasks/tests.yml deleted file mode 100644 index d2a6802fdf..0000000000 --- a/test/integration/targets/win_dsc/tasks/tests.yml +++ /dev/null @@ -1,544 +0,0 @@ ---- -- name: fail with incorrect DSC resource name - win_dsc: - resource_name: FakeResource - register: fail_invalid_resource - failed_when: fail_invalid_resource.msg != "Resource 'FakeResource' not found." - -- name: fail with invalid DSC version - win_dsc: - resource_name: xTestResource - module_version: 0.0.1 - register: fail_invalid_version - failed_when: 'fail_invalid_version.msg != "Resource ''xTestResource'' with version ''0.0.1'' not found. Versions installed: ''1.0.0'', ''1.0.1''."' - -- name: fail with mandatory option not set - win_dsc: - resource_name: xSetReboot - Value: yes - register: fail_man_key - failed_when: 'fail_man_key.msg != "missing required arguments: KeyParam"' - -- name: fail with mandatory option not set in sub dict - win_dsc: - resource_name: xTestResource - Path: C:\path - Ensure: Present - CimInstanceParam: # Missing KeyValue in dict - Choice: Choice1 - register: fail_man_key_sub_dict - failed_when: 'fail_man_key_sub_dict.msg != "missing required arguments: KeyValue found in CimInstanceParam"' - -- name: fail invalid option - win_dsc: - resource_name: xSetReboot - KeyParam: key - OtherParam: invalid - register: fail_invalid_option - failed_when: 'fail_invalid_option.msg != "Unsupported parameters for (win_dsc) module: OtherParam. Supported parameters include: KeyParam, PsDscRunAsCredential_username, module_version, Value, PsDscRunAsCredential_password, resource_name, DependsOn"' - -- name: fail invalid option in sub dict - win_dsc: - resource_name: xTestResource - Path: C:\path - Ensure: Present - NestedCimInstanceParam: - KeyValue: key - CimValue: - KeyValue: other key - InvalidKey: invalid - register: fail_invalid_option_sub_dict - failed_when: 'fail_invalid_option_sub_dict.msg != "Unsupported parameters for (win_dsc) module: InvalidKey found in NestedCimInstanceParam -> CimValue. Supported parameters include: IntValue, KeyValue, StringArrayValue, Choice, StringValue"' - -- name: fail invalid read only option - win_dsc: - resource_name: xTestResource - Path: C:\path - Ensure: Present - ReadParam: abc - register: fail_invalid_option_read_only - failed_when: '"Unsupported parameters for (win_dsc) module: ReadParam" not in fail_invalid_option_read_only.msg' - -- name: fail invalid choice - win_dsc: - resource_name: xTestResource - Path: C:\path - Ensure: invalid - register: fail_invalid_choice - failed_when: 'fail_invalid_choice.msg != "value of Ensure must be one of: Present, Absent. Got no match for: invalid"' - -- name: fail invalid choice in sub dict - win_dsc: - resource_name: xTestResource - Path: C:\path - Ensure: Present - CimInstanceArrayParam: - - KeyValue: key - - KeyValue: key2 - Choice: Choice3 - register: fail_invalid_choice_sub_dict - failed_when: 'fail_invalid_choice_sub_dict.msg != "value of Choice must be one of: Choice1, Choice2. Got no match for: Choice3 found in CimInstanceArrayParam"' - -- name: fail old version missing new option - win_dsc: - resource_name: xTestResource - module_version: 1.0.0 - Path: C:\path - Ensure: Present - CimInstanceParam: # CimInstanceParam does not exist in the 1.0.0 version - Key: key - register: fail_invalid_option_old - failed_when: '"Unsupported parameters for (win_dsc) module: CimInstanceParam" not in fail_invalid_option_old.msg' - -- name: fail old version missing new option sub dict - win_dsc: - resource_name: xTestResource - module_version: 1.0.0 - Path: C:\path - Ensure: Present - CimInstanceArrayParam: - - Key: key - Choice: Choice1 - register: fail_invalid_option_old_sub_dict - failed_when: 'fail_invalid_option_old_sub_dict.msg != "Unsupported parameters for (win_dsc) module: Choice found in CimInstanceArrayParam. Supported parameters include: Key, IntValue, StringArrayValue, StringValue"' - -- name: create test file (check mode) - win_dsc: - resource_name: File - DestinationPath: '{{ remote_tmp_dir }}\dsc-file' - Contents: file contents - Attributes: - - Hidden - - ReadOnly - Ensure: Present - Type: File - register: create_file_check - check_mode: yes - -- name: get result of create test file (check mode) - win_stat: - path: '{{ remote_tmp_dir }}\dsc-file' - register: create_file_actual_check - -- name: assert create test file (check mode) - assert: - that: - - create_file_check is changed - - create_file_check.module_version == None # Some built in modules don't have a version set - - not create_file_check.reboot_required - - not create_file_actual_check.stat.exists - -- name: assert create test file verbosity (check mode) - assert: - that: - - create_file_check.verbose_test is defined - - not create_file_check.verbose_set is defined - when: ansible_verbosity >= 3 - -- name: create test file - win_dsc: - resource_name: File - DestinationPath: '{{ remote_tmp_dir }}\dsc-file' - Contents: file contents - Attributes: - - Hidden - - ReadOnly - Ensure: Present - Type: File - register: create_file - -- name: get result of create test file - win_stat: - path: '{{ remote_tmp_dir }}\dsc-file' - register: create_file_actual - -- name: assert create test file verbosity - assert: - that: - - create_file.verbose_test is defined - - create_file.verbose_set is defined - when: ansible_verbosity >= 3 - -- name: assert create test file - assert: - that: - - create_file is changed - - create_file.module_version == None - - not create_file.reboot_required - - create_file_actual.stat.exists - - create_file_actual.stat.attributes == "ReadOnly, Hidden, Archive" - - create_file_actual.stat.checksum == 'd48daab51112b49ecabd917adc345b8ba257055e' - -- name: create test file (idempotent) - win_dsc: - resource_name: File - DestinationPath: '{{ remote_tmp_dir }}\dsc-file' - Contents: file contents - Attributes: - - Hidden - - ReadOnly - Ensure: Present - Type: File - register: create_file_again - -- name: assert create test file (idempotent) - assert: - that: - - not create_file_again is changed - - create_file.module_version == None - - not create_file.reboot_required - -- name: get SID of the current Ansible user - win_shell: | - Add-Type -AssemblyName System.DirectoryServices.AccountManagement - [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.Sid.Value - register: actual_sid - -- name: run DSC process as another user - win_dsc: - resource_name: Script - GetScript: '@{ Result= "" }' - SetScript: | - Add-Type -AssemblyName System.DirectoryServices.AccountManagement - $sid = [System.DirectoryServices.AccountManagement.UserPrincipal]::Current.Sid.Value - Set-Content -Path "{{ remote_tmp_dir }}\runas.txt" -Value $sid - TestScript: $false - PsDscRunAsCredential_username: '{{ ansible_user }}' - PsDscRunAsCredential_password: '{{ ansible_password }}' - register: runas_user - -- name: get result of run DSC process as another user - slurp: - path: '{{ remote_tmp_dir }}\runas.txt' - register: runas_user_result - -- name: assert run DSC process as another user - assert: - that: - - runas_user is changed - - runas_user.module_version != None # Can't reliably set the version but we can test it is set - - not runas_user.reboot_required - - runas_user_result.content|b64decode == actual_sid.stdout - -- name: run DSC that sets reboot_required with defaults - win_dsc: - resource_name: xSetReboot - KeyParam: value # Just to satisfy the Resource with key validation - register: set_reboot_defaults - -- name: assert run DSC that sets reboot_required with defaults - assert: - that: - - set_reboot_defaults.reboot_required - -- name: run DSC that sets reboot_required with False - win_dsc: - resource_name: xSetReboot - KeyParam: value - Value: no - register: set_reboot_false - -- name: assert run DSC that sets reboot_required with False - assert: - that: - - not set_reboot_false.reboot_required - -- name: run DSC that sets reboot_required with True - win_dsc: - resource_name: xSetReboot - KeyParam: value - Value: yes - register: set_reboot_true - -- name: assert run DSC that sets reboot_required with True - assert: - that: - - set_reboot_true.reboot_required - -- name: test DSC with all types - win_dsc: - resource_name: xTestResource - Path: '{{ remote_tmp_dir }}\test-types.json' - Ensure: Present - StringParam: string param - StringArrayParam: - - string 1 - - string 2 - Int8Param: 127 # [SByte]::MaxValue - Int8ArrayParam: - - 127 - - '127' - UInt8Param: 255 # [Byte]::MaxValue - UInt8ArrayParam: - - 255 - - '255' - Int16Param: 32767 # [Int16]::MaxValue - Int16ArrayParam: 32767, 32767 - UInt16Param: '65535' # [UInt16]::MaxValue - UInt16ArrayParam: 65535 - Int32Param: 2147483647 # [Int32]::MaxValue - Int32ArrayParam: '2147483647' - UInt32Param: '4294967295' # [UInt32]::MaxValue - UInt32ArrayParam: - - '4294967295' - - 4294967295 - Int64Param: 9223372036854775807 # [Int64]::MaxValue - Int64ArrayParam: - - -9223372036854775808 # [Int64]::MinValue - - 9223372036854775807 - UInt64Param: 18446744073709551615 # [UInt64]::MaxValue - UInt64ArrayParam: - - 0 # [UInt64]::MinValue - - 18446744073709551615 - BooleanParam: True - BooleanArrayParam: - - True - - 'True' - - 'true' - - 'y' - - 'yes' - - 1 - - False - - 'False' - - 'false' - - 'n' - - 'no' - - 0 - CharParam: c - CharArrayParam: - - c - - h - - a - - r - SingleParam: 3.402823E+38 - SingleArrayParam: - - '3.402823E+38' - - 1.2393494 - DoubleParam: 1.79769313486232E+300 - DoubleArrayParam: - - '1.79769313486232E+300' - - 3.56821831681516 - DateTimeParam: '2019-02-22T13:57:31.2311892-04:00' - DateTimeArrayParam: - - '2019-02-22T13:57:31.2311892+00:00' - - '2019-02-22T13:57:31.2311892+04:00' - PSCredentialParam_username: username1 - PSCredentialParam_password: password1 - HashtableParam: - key1: string 1 - key2: '' - key3: 1 - CimInstanceParam: - KeyValue: a - CimInstanceArrayParam: - - KeyValue: b - Choice: Choice1 - StringValue: string 1 - IntValue: 1 - StringArrayValue: - - abc - - def - - KeyValue: c - Choice: Choice2 - StringValue: string 2 - IntValue: '2' - StringArrayValue: - - ghi - - jkl - NestedCimInstanceParam: - KeyValue: key value - CimValue: - KeyValue: d - CimArrayValue: - - KeyValue: e - Choice: Choice2 - HashValue: - a: a - IntValue: '300' - register: dsc_types - -- name: get result of test DSC with all types - slurp: - path: '{{ remote_tmp_dir }}\test-types.json' - register: dsc_types_raw - -- name: convert result of test DSC with all types to dict - set_fact: - dsc_types_actual: '{{ dsc_types_raw.content | b64decode | from_json }}' - -- name: assert test DSC with all types - assert: - that: - - dsc_types is changed - - dsc_types.module_version == '1.0.1' - - not dsc_types.reboot_required - - dsc_types_actual.Version == '1.0.1' - - dsc_types_actual.Verbose.Value.IsPresent - - dsc_types_actual.DefaultParam.Value == 'Default' # ensures that the default is set in the engine if we don't set it outselves - - dsc_types_actual.Ensure.Value == 'Present' - - dsc_types_actual.Path.Value == remote_tmp_dir + "\\test-types.json" - - dsc_types_actual.StringParam.Type == 'System.String' - - dsc_types_actual.StringParam.Value == 'string param' - - dsc_types_actual.StringArrayParam.Type == 'System.String[]' - - dsc_types_actual.StringArrayParam.Value == ['string 1', 'string 2'] - - dsc_types_actual.Int8Param.Type == 'System.SByte' - - dsc_types_actual.Int8Param.Value == 127 - - dsc_types_actual.Int8ArrayParam.Type == 'System.SByte[]' - - dsc_types_actual.Int8ArrayParam.Value == [127, 127] - - dsc_types_actual.UInt8Param.Type == 'System.Byte' - - dsc_types_actual.UInt8Param.Value == 255 - - dsc_types_actual.UInt8ArrayParam.Type == 'System.Byte[]' - - dsc_types_actual.UInt8ArrayParam.Value == [255, 255] - - dsc_types_actual.Int16Param.Type == 'System.Int16' - - dsc_types_actual.Int16Param.Value == 32767 - - dsc_types_actual.Int16ArrayParam.Type == 'System.Int16[]' - - dsc_types_actual.Int16ArrayParam.Value == [32767, 32767] - - dsc_types_actual.UInt16Param.Type == 'System.UInt16' - - dsc_types_actual.UInt16Param.Value == 65535 - - dsc_types_actual.UInt16ArrayParam.Type == 'System.UInt16[]' - - dsc_types_actual.UInt16ArrayParam.Value == [65535] - - dsc_types_actual.Int32Param.Type == 'System.Int32' - - dsc_types_actual.Int32Param.Value == 2147483647 - - dsc_types_actual.Int32ArrayParam.Type == 'System.Int32[]' - - dsc_types_actual.Int32ArrayParam.Value == [2147483647] - - dsc_types_actual.UInt32Param.Type == 'System.UInt32' - - dsc_types_actual.UInt32Param.Value == 4294967295 - - dsc_types_actual.UInt32ArrayParam.Type == 'System.UInt32[]' - - dsc_types_actual.UInt32ArrayParam.Value == [4294967295, 4294967295] - - dsc_types_actual.Int64Param.Type == 'System.Int64' - - dsc_types_actual.Int64Param.Value == 9223372036854775807 - - dsc_types_actual.Int64ArrayParam.Type == 'System.Int64[]' - - dsc_types_actual.Int64ArrayParam.Value == [-9223372036854775808, 9223372036854775807] - - dsc_types_actual.UInt64Param.Type == 'System.UInt64' - - dsc_types_actual.UInt64Param.Value == 18446744073709551615 - - dsc_types_actual.UInt64ArrayParam.Type == 'System.UInt64[]' - - dsc_types_actual.UInt64ArrayParam.Value == [0, 18446744073709551615] - - dsc_types_actual.BooleanParam.Type == 'System.Boolean' - - dsc_types_actual.BooleanParam.Value == True - - dsc_types_actual.BooleanArrayParam.Type == 'System.Boolean[]' - - dsc_types_actual.BooleanArrayParam.Value == [True, True, True, True, True, True, False, False, False, False, False, False] - - dsc_types_actual.CharParam.Type == 'System.Char' - - dsc_types_actual.CharParam.Value == 'c' - - dsc_types_actual.CharArrayParam.Type == 'System.Char[]' - - dsc_types_actual.CharArrayParam.Value == ['c', 'h', 'a', 'r'] - - dsc_types_actual.SingleParam.Type == 'System.Single' - - dsc_types_actual.SingleParam.Value|string == '3.402823e+38' - - dsc_types_actual.SingleArrayParam.Type == 'System.Single[]' - - dsc_types_actual.SingleArrayParam.Value|length == 2 - - dsc_types_actual.SingleArrayParam.Value[0]|string == '3.402823e+38' - - dsc_types_actual.SingleArrayParam.Value[1]|string == '1.23934937' - - dsc_types_actual.DoubleParam.Type == 'System.Double' - - dsc_types_actual.DoubleParam.Value == '1.79769313486232E+300' - - dsc_types_actual.DoubleArrayParam.Type == 'System.Double[]' - - dsc_types_actual.DoubleArrayParam.Value|length == 2 - - dsc_types_actual.DoubleArrayParam.Value[0] == '1.79769313486232E+300' - - dsc_types_actual.DoubleArrayParam.Value[1] == '3.56821831681516' - - dsc_types_actual.DateTimeParam.Type == 'System.DateTime' - - dsc_types_actual.DateTimeParam.Value == '2019-02-22T17:57:31.2311890+00:00' - - dsc_types_actual.DateTimeArrayParam.Type == 'System.DateTime[]' - - dsc_types_actual.DateTimeArrayParam.Value == ['2019-02-22T13:57:31.2311890+00:00', '2019-02-22T09:57:31.2311890+00:00'] - - dsc_types_actual.PSCredentialParam.Type == 'System.Management.Automation.PSCredential' - - dsc_types_actual.PSCredentialParam.Value.username == 'username1' - - dsc_types_actual.PSCredentialParam.Value.password == 'password1' - # Hashtable is actually a CimInstance[] of MSFT_KeyValuePairs - - dsc_types_actual.HashtableParam.Type == 'Microsoft.Management.Infrastructure.CimInstance[]' - - dsc_types_actual.HashtableParam.Value|length == 3 - # Can't guarantee the order of the keys so just check they are the values they could be - - dsc_types_actual.HashtableParam.Value[0].Key in ["key1", "key2", "key3"] - - dsc_types_actual.HashtableParam.Value[0].Value in ["string 1", "1", ""] - - dsc_types_actual.HashtableParam.Value[0]._cim_instance == 'MSFT_KeyValuePair' - - dsc_types_actual.HashtableParam.Value[1].Key in ["key1", "key2", "key3"] - - dsc_types_actual.HashtableParam.Value[1].Value in ["string 1", "1", ""] - - dsc_types_actual.HashtableParam.Value[1]._cim_instance == 'MSFT_KeyValuePair' - - dsc_types_actual.HashtableParam.Value[2].Key in ["key1", "key2", "key3"] - - dsc_types_actual.HashtableParam.Value[2].Value in ["string 1", "1", ""] - - dsc_types_actual.HashtableParam.Value[2]._cim_instance == 'MSFT_KeyValuePair' - - dsc_types_actual.CimInstanceParam.Type == 'Microsoft.Management.Infrastructure.CimInstance' - - dsc_types_actual.CimInstanceParam.Value.Choice == None - - dsc_types_actual.CimInstanceParam.Value.IntValue == None - - dsc_types_actual.CimInstanceParam.Value.KeyValue == 'a' - - dsc_types_actual.CimInstanceParam.Value.StringArrayValue == None - - dsc_types_actual.CimInstanceParam.Value.StringValue == None - - dsc_types_actual.CimInstanceParam.Value._cim_instance == "ANSIBLE_xTestClass" - - dsc_types_actual.CimInstanceArrayParam.Type == 'Microsoft.Management.Infrastructure.CimInstance[]' - - dsc_types_actual.CimInstanceArrayParam.Value|length == 2 - - dsc_types_actual.CimInstanceArrayParam.Value[0].Choice == 'Choice1' - - dsc_types_actual.CimInstanceArrayParam.Value[0].IntValue == 1 - - dsc_types_actual.CimInstanceArrayParam.Value[0].KeyValue == 'b' - - dsc_types_actual.CimInstanceArrayParam.Value[0].StringArrayValue == ['abc', 'def'] - - dsc_types_actual.CimInstanceArrayParam.Value[0].StringValue == 'string 1' - - dsc_types_actual.CimInstanceArrayParam.Value[0]._cim_instance == 'ANSIBLE_xTestClass' - - dsc_types_actual.CimInstanceArrayParam.Value[1].Choice == 'Choice2' - - dsc_types_actual.CimInstanceArrayParam.Value[1].IntValue == 2 - - dsc_types_actual.CimInstanceArrayParam.Value[1].KeyValue == 'c' - - dsc_types_actual.CimInstanceArrayParam.Value[1].StringArrayValue == ['ghi', 'jkl'] - - dsc_types_actual.CimInstanceArrayParam.Value[1].StringValue == 'string 2' - - dsc_types_actual.CimInstanceArrayParam.Value[1]._cim_instance == 'ANSIBLE_xTestClass' - - dsc_types_actual.NestedCimInstanceParam.Type == 'Microsoft.Management.Infrastructure.CimInstance' - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue|length == 1 - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].Choice == 'Choice2' - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].IntValue == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].KeyValue == 'e' - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].StringArrayValue == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0].StringValue == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimArrayValue[0]._cim_instance == 'ANSIBLE_xTestClass' - - dsc_types_actual.NestedCimInstanceParam.Value.CimValue.Choice == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimValue.IntValue == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimValue.KeyValue == 'd' - - dsc_types_actual.NestedCimInstanceParam.Value.CimValue.StringArrayValue == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimValue.StringValue == None - - dsc_types_actual.NestedCimInstanceParam.Value.CimValue._cim_instance == 'ANSIBLE_xTestClass' - - dsc_types_actual.NestedCimInstanceParam.Value.HashValue|length == 1 - - dsc_types_actual.NestedCimInstanceParam.Value.HashValue[0].Key == 'a' - - dsc_types_actual.NestedCimInstanceParam.Value.HashValue[0].Value == 'a' - - dsc_types_actual.NestedCimInstanceParam.Value.HashValue[0]._cim_instance == 'MSFT_KeyValuePair' - - dsc_types_actual.NestedCimInstanceParam.Value.IntValue == 300 - - dsc_types_actual.NestedCimInstanceParam.Value.KeyValue == 'key value' - - dsc_types_actual.NestedCimInstanceParam.Value._cim_instance == 'ANSIBLE_xNestedClass' - -- name: test DSC with all types older version - win_dsc: - resource_name: xTestResource - module_version: 1.0.0 - Path: '{{ remote_tmp_dir }}\test-types.json' - Ensure: Absent - StringParam: string param old - CimInstanceArrayParam: - - Key: old key - StringValue: string old 1 - IntValue: 0 - StringArrayValue: - - zyx - - wvu - register: dsc_types_old - -- name: get result of test DSC with all types older version - slurp: - path: '{{ remote_tmp_dir }}\test-types.json' - register: dsc_types_old_raw - -- name: convert result of test DSC with all types to dict - set_fact: - dsc_types_old_actual: '{{ dsc_types_old_raw.content | b64decode | from_json }}' - -- name: assert test DSC with all types older version - assert: - that: - - dsc_types_old is changed - - dsc_types_old.module_version == '1.0.0' - - not dsc_types_old.reboot_required - - dsc_types_old_actual.Version == '1.0.0' - - dsc_types_old_actual.Verbose.Value.IsPresent - - dsc_types_old_actual.DefaultParam.Value == 'Default' - - dsc_types_old_actual.Ensure.Value == 'Absent' - - dsc_types_old_actual.Path.Value == remote_tmp_dir + "\\test-types.json" - - dsc_types_old_actual.StringParam.Type == 'System.String' - - dsc_types_old_actual.StringParam.Value == 'string param old' - - dsc_types_old_actual.CimInstanceArrayParam.Type == 'Microsoft.Management.Infrastructure.CimInstance[]' - - dsc_types_old_actual.CimInstanceArrayParam.Value|length == 1 - - not dsc_types_old_actual.CimInstanceArrayParam.Value[0].Choice is defined # 1.0.0 does not have a Choice option - - dsc_types_old_actual.CimInstanceArrayParam.Value[0].IntValue == 0 - - dsc_types_old_actual.CimInstanceArrayParam.Value[0].Key == 'old key' - - dsc_types_old_actual.CimInstanceArrayParam.Value[0].StringArrayValue == ['zyx', 'wvu'] - - dsc_types_old_actual.CimInstanceArrayParam.Value[0].StringValue == 'string old 1' - - dsc_types_old_actual.CimInstanceArrayParam.Value[0]._cim_instance == 'ANSIBLE_xTestClass' diff --git a/test/integration/targets/win_environment/aliases b/test/integration/targets/win_environment/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_environment/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_environment/defaults/main.yml b/test/integration/targets/win_environment/defaults/main.yml deleted file mode 100644 index 0eb44ae991..0000000000 --- a/test/integration/targets/win_environment/defaults/main.yml +++ /dev/null @@ -1,5 +0,0 @@ -test_environment_name: TEST_VALUE -test_machine_environment_value: "%SystemRoot%\\System32" -test_new_machine_environment_value: C:\Windows\System32 -test_user_environment_value: C:\Program Files -test_new_user_environment_value: C:\Program Files (x86) diff --git a/test/integration/targets/win_environment/tasks/main.yml b/test/integration/targets/win_environment/tasks/main.yml deleted file mode 100644 index 34f46f3bb3..0000000000 --- a/test/integration/targets/win_environment/tasks/main.yml +++ /dev/null @@ -1,267 +0,0 @@ ---- -- name: ensure test environment value is not set in all scope - win_environment: - name: "{{test_environment_name}}" - state: absent - level: "{{item}}" - with_items: - - machine - - process - - user - -- name: fail to create environment value with null value - win_environment: - name: "{{test_environment_name}}" - state: present - level: machine - register: create_fail_null - failed_when: 'create_fail_null.msg != "state is present but all of the following are missing: value"' - -- name: fail to create environment value with empty value - win_environment: - name: "{{test_environment_name}}" - value: '' - state: present - level: machine - register: create_fail_empty_string - failed_when: create_fail_empty_string.msg != "When state=present, value must be defined and not an empty string, if you wish to remove the envvar, set state=absent" - -- name: create test environment value for machine check - win_environment: - name: "{{test_environment_name}}" - value: "{{test_machine_environment_value}}" - state: present - level: machine - register: create_machine_check - check_mode: True - -- name: get value of environment key for machine after changing check - win_command: powershell.exe "[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: create_machine_check_actual - -- name: assert change test environment value for machine check - assert: - that: - - create_machine_check is changed - - create_machine_check_actual.stdout == "" - -- name: create test environment value for machine - win_environment: - name: "{{test_environment_name}}" - value: "{{test_machine_environment_value}}" - state: present - level: machine - register: create_machine - -- name: get value of environment key for machine after changing - win_command: powershell.exe "[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: create_machine_actual - -- name: assert test environment value for machine - assert: - that: - - create_machine is changed - - create_machine.before_value == None - - create_machine_actual.stdout == "{{test_machine_environment_value}}\r\n" - -- name: create test environment value for machine again - win_environment: - name: "{{test_environment_name}}" - value: "{{test_machine_environment_value}}" - state: present - level: machine - register: create_machine_again - -- name: get value of environment key for machine after changing again - win_command: powershell.exe "[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: create_machine_actual_again - -- name: assert create test environment value for machine again - assert: - that: - - create_machine_again is not changed - - create_machine_again.before_value == test_machine_environment_value - - create_machine_actual_again.stdout == "{{test_machine_environment_value}}\r\n" - -- name: change test environment value for machine check - win_environment: - name: "{{test_environment_name}}" - value: "{{test_new_machine_environment_value}}" - state: present - level: machine - register: change_machine_check - check_mode: True - -- name: get value of environment key for machine after changing check - win_command: powershell.exe "[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: change_machine_actual_check - -- name: assert change test environment value for machine check - assert: - that: - - change_machine_check is changed - - change_machine_check.before_value == test_machine_environment_value - - change_machine_actual_check.stdout == "{{test_machine_environment_value}}\r\n" - -- name: change test environment value for machine - win_environment: - name: "{{test_environment_name}}" - value: "{{test_new_machine_environment_value}}" - state: present - level: machine - register: change_machine - -- name: get value of environment key for machine after changing - win_command: powershell.exe "[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: change_machine_actual - -- name: assert change test environment value for machine - assert: - that: - - change_machine is changed - - change_machine.before_value == test_machine_environment_value - - change_machine_actual.stdout == "{{test_new_machine_environment_value}}\r\n" - -- name: change test environment value for machine again - win_environment: - name: "{{test_environment_name}}" - value: "{{test_new_machine_environment_value}}" - state: present - level: machine - register: change_machine_again - -- name: get value of environment key for machine after changing again - win_command: powershell.exe "[Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: change_machine_actual_again - -- name: assert change test environment value for machine again - assert: - that: - - change_machine_again is not changed - - change_machine_again.before_value == test_new_machine_environment_value - - change_machine_actual_again.stdout == "{{test_new_machine_environment_value}}\r\n" - -- name: create test environment value for user check - win_environment: - name: "{{test_environment_name}}" - value: "{{test_user_environment_value}}" - state: present - level: user - register: create_user_check - check_mode: True - -- name: get value of environment key for user after changing check - win_command: powershell.exe "[Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: create_user_check_actual - -- name: assert change test environment value for user check - assert: - that: - - create_user_check is changed - - create_user_check_actual.stdout == "" - -- name: create test environment value for user - win_environment: - name: "{{test_environment_name}}" - value: "{{test_user_environment_value}}" - state: present - level: user - register: create_user - -- name: get value of environment key for user after changing - win_command: powershell.exe "[Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: create_user_actual - -- name: assert test environment value for user - assert: - that: - - create_user is changed - - create_user.before_value == None - - create_user_actual.stdout == "{{test_user_environment_value}}\r\n" - -- name: create test environment value for user again - win_environment: - name: "{{test_environment_name}}" - value: "{{test_user_environment_value}}" - state: present - level: user - register: create_user_again - -- name: get value of environment key for user after changing again - win_command: powershell.exe "[Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: create_user_actual_again - -- name: assert create test environment value for user again - assert: - that: - - create_user_again is not changed - - create_user_again.before_value == test_user_environment_value - - create_user_actual_again.stdout == "{{test_user_environment_value}}\r\n" - -- name: change test environment value for user check - win_environment: - name: "{{test_environment_name}}" - value: "{{test_new_user_environment_value}}" - state: present - level: user - register: change_user_check - check_mode: True - -- name: get value of environment key for user after changing check - win_command: powershell.exe "[Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: change_user_actual_check - -- name: assert change test environment value for user check - assert: - that: - - change_user_check is changed - - change_user_check.before_value == test_user_environment_value - - change_user_actual_check.stdout == "{{test_user_environment_value}}\r\n" - -- name: change test environment value for user - win_environment: - name: "{{test_environment_name}}" - value: "{{test_new_user_environment_value}}" - state: present - level: user - register: change_user - -- name: get value of environment key for user after changing - win_command: powershell.exe "[Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: change_user_actual - -- name: assert change test environment value for user - assert: - that: - - change_user is changed - - change_user.before_value == test_user_environment_value - - change_user_actual.stdout == "{{test_new_user_environment_value}}\r\n" - -- name: change test environment value for user again - win_environment: - name: "{{test_environment_name}}" - value: "{{test_new_user_environment_value}}" - state: present - level: user - register: change_user_again - -- name: get value of environment key for user after changing again - win_command: powershell.exe "[Microsoft.Win32.Registry]::CurrentUser.OpenSubKey('Environment', $true).GetValue('{{test_environment_name}}', $null, 'DoNotExpandEnvironmentNames')" - register: change_user_actual_again - -- name: assert change test environment value for user again - assert: - that: - - change_user_again is not changed - - change_user_again.before_value == test_new_user_environment_value - - change_user_actual_again.stdout == "{{test_new_user_environment_value}}\r\n" - -- name: cleanup test changes - win_environment: - name: "{{test_environment_name}}" - state: absent - level: "{{item}}" - with_items: - - machine - - process - - user diff --git a/test/integration/targets/win_feature/aliases b/test/integration/targets/win_feature/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_feature/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_feature/defaults/main.yml b/test/integration/targets/win_feature/defaults/main.yml deleted file mode 100644 index e1833cd8a8..0000000000 --- a/test/integration/targets/win_feature/defaults/main.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- - -# Feature not normally installed by default. -test_win_feature_name: Telnet-Client diff --git a/test/integration/targets/win_feature/tasks/main.yml b/test/integration/targets/win_feature/tasks/main.yml deleted file mode 100644 index a52b3c0160..0000000000 --- a/test/integration/targets/win_feature/tasks/main.yml +++ /dev/null @@ -1,27 +0,0 @@ -# test code for the win_feature module -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - - -- name: check whether servermanager module is available (windows 2008 r2 or later) - win_shell: if (Get-Command -Name Add-WindowsFeature -ErrorAction SilentlyContinue) { $true } else { $false } - changed_when: False - register: win_feature_has_servermanager - -- name: run tests - include_tasks: tests.yml - when: win_feature_has_servermanager.stdout | trim | bool diff --git a/test/integration/targets/win_feature/tasks/tests.yml b/test/integration/targets/win_feature/tasks/tests.yml deleted file mode 100644 index 7a48117b70..0000000000 --- a/test/integration/targets/win_feature/tasks/tests.yml +++ /dev/null @@ -1,127 +0,0 @@ -# test code for the win_feature module -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: start with feature absent - win_feature: - name: "{{ test_win_feature_name }}" - state: absent - -- name: install feature - win_feature: - name: "{{ test_win_feature_name }}" - state: present - include_sub_features: yes - include_management_tools: yes - register: win_feature_install_result - -- name: check result of installing feature - assert: - that: - - "win_feature_install_result is changed" - - "win_feature_install_result.success" - - "win_feature_install_result.exitcode == 'Success'" - - "not win_feature_install_result.reboot_required" - - "win_feature_install_result.feature_result|length == 1" - - "win_feature_install_result.feature_result[0].id" - - "win_feature_install_result.feature_result[0].display_name" - - "win_feature_install_result.feature_result[0].message is defined" - - "win_feature_install_result.feature_result[0].reboot_required is defined" - - "win_feature_install_result.feature_result[0].skip_reason" - - "win_feature_install_result.feature_result[0].success is defined" - -- name: install feature again - win_feature: - name: "{{ test_win_feature_name }}" - state: present - include_sub_features: yes - include_management_tools: yes - register: win_feature_install_again_result - -- name: check result of installing feature again - assert: - that: - - "win_feature_install_again_result is not changed" - - "win_feature_install_again_result.success" - - "win_feature_install_again_result.exitcode == 'NoChangeNeeded'" - - "not win_feature_install_again_result.reboot_required" - - "win_feature_install_again_result.feature_result == []" - -- name: remove feature - win_feature: - name: "{{ test_win_feature_name }}" - state: absent - register: win_feature_remove_result - -- name: check result of removing feature - assert: - that: - - "win_feature_remove_result is changed" - - "win_feature_remove_result.success" - - "win_feature_remove_result.exitcode == 'Success'" - - "not win_feature_remove_result.reboot_required" - - "win_feature_remove_result.feature_result|length == 1" - - "win_feature_remove_result.feature_result[0].id" - - "win_feature_remove_result.feature_result[0].display_name" - - "win_feature_remove_result.feature_result[0].message is defined" - - "win_feature_remove_result.feature_result[0].reboot_required is defined" - - "win_feature_remove_result.feature_result[0].skip_reason" - - "win_feature_remove_result.feature_result[0].success is defined" - when: win_feature_has_servermanager is successful - -- name: remove feature again - win_feature: - name: "{{ test_win_feature_name }}" - state: absent - register: win_feature_remove_again_result - -- name: check result of removing feature again - assert: - that: - - "win_feature_remove_again_result is not changed" - - "win_feature_remove_again_result.success" - - "win_feature_remove_again_result.exitcode == 'NoChangeNeeded'" - - "not win_feature_remove_again_result.reboot_required" - - "win_feature_remove_again_result.feature_result == []" - -- name: try to install an invalid feature name - win_feature: - name: "Microsoft-Bob" - state: present - register: win_feature_install_invalid_result - ignore_errors: true - -- name: check result of installing invalid feature name - assert: - that: - - "win_feature_install_invalid_result is failed" - - "win_feature_install_invalid_result is not changed" - - "'The name was not found' in win_feature_install_invalid_result.msg" - -- name: try to remove an invalid feature name - win_feature: - name: "Microsoft-Bob" - state: absent - register: win_feature_remove_invalid_result - ignore_errors: true - -- name: check result of removing invalid feature name - assert: - that: - - "win_feature_remove_invalid_result is failed" - - "win_feature_remove_invalid_result is not changed" - - "'The name was not found' in win_feature_remove_invalid_result.msg" diff --git a/test/integration/targets/win_file/aliases b/test/integration/targets/win_file/aliases deleted file mode 100644 index 1eed2ecfaf..0000000000 --- a/test/integration/targets/win_file/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group1 -shippable/windows/smoketest diff --git a/test/integration/targets/win_file/files/foo.txt b/test/integration/targets/win_file/files/foo.txt deleted file mode 100644 index 7c6ded14ec..0000000000 --- a/test/integration/targets/win_file/files/foo.txt +++ /dev/null @@ -1 +0,0 @@ -foo.txt diff --git a/test/integration/targets/win_file/files/foobar/directory/fileC b/test/integration/targets/win_file/files/foobar/directory/fileC deleted file mode 100644 index e69de29bb2..0000000000 --- a/test/integration/targets/win_file/files/foobar/directory/fileC +++ /dev/null diff --git a/test/integration/targets/win_file/files/foobar/directory/fileD b/test/integration/targets/win_file/files/foobar/directory/fileD deleted file mode 100644 index e69de29bb2..0000000000 --- a/test/integration/targets/win_file/files/foobar/directory/fileD +++ /dev/null diff --git a/test/integration/targets/win_file/files/foobar/fileA b/test/integration/targets/win_file/files/foobar/fileA deleted file mode 100644 index ab47708c98..0000000000 --- a/test/integration/targets/win_file/files/foobar/fileA +++ /dev/null @@ -1 +0,0 @@ -fileA diff --git a/test/integration/targets/win_file/files/foobar/fileB b/test/integration/targets/win_file/files/foobar/fileB deleted file mode 100644 index e69de29bb2..0000000000 --- a/test/integration/targets/win_file/files/foobar/fileB +++ /dev/null diff --git a/test/integration/targets/win_file/meta/main.yml b/test/integration/targets/win_file/meta/main.yml deleted file mode 100644 index d328716dfa..0000000000 --- a/test/integration/targets/win_file/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_win_tests diff --git a/test/integration/targets/win_file/tasks/main.yml b/test/integration/targets/win_file/tasks/main.yml deleted file mode 100644 index c528888665..0000000000 --- a/test/integration/targets/win_file/tasks/main.yml +++ /dev/null @@ -1,614 +0,0 @@ -# Test code for the file module. -# (c) 2014, Richard Isaacson <richard.c.isaacson@gmail.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- set_fact: output_file={{win_output_dir}}\\foo.txt - -- name: prep with a basic win copy - win_copy: src=foo.txt dest={{output_file}} - -- name: verify that we are checking a file and it is present - win_file: path={{output_file}} state=file - register: file_result - -- name: verify that the file was marked as changed - assert: - that: - - "file_result.changed == false" -# - "file_result.state == 'file'" - -- name: verify that we are checking an absent file - win_file: path={{win_output_dir}}/bar.txt state=absent - register: file2_result - -- name: verify that the file was marked as changed - assert: - that: - - "file2_result.changed == false" -# - "file2_result.state == 'absent'" - -- name: verify we can touch a file (check) - win_file: - path: '{{win_output_dir}}\touch.txt' - state: touch - register: touch_file_check - check_mode: yes - -- name: get details of touched file (check) - win_stat: - path: '{{win_output_dir}}\touch.txt' - register: touch_file_actual_check - -- name: assert touch a file (check) - assert: - that: - - touch_file_check.changed - - not touch_file_actual_check.stat.exists - -- name: verify we can touch a file - win_file: path={{win_output_dir}}/touch.txt state=touch - register: touch_file - -- name: get details of touched file - win_stat: - path: '{{win_output_dir}}\touch.txt' - register: touch_file_actual - -- name: assert touch a file - assert: - that: - - touch_file.changed - - touch_file_actual.stat.exists - - touch_file_actual.stat.size == 0 - -- name: touch a file again - win_file: - path: '{{win_output_dir}}\touch.txt' - state: touch - register: touch_file_again - -- name: get details of touched file again - win_stat: - path: '{{win_output_dir}}\touch.txt' - register: touch_file_actual_again - -- name: assert touch a file again - assert: - that: - - touch_file_again.changed - - touch_file_actual_again.stat.lastwritetime > touch_file_actual.stat.lastwritetime - -- name: touch an existing file in check mode - win_file: - path: '{{win_output_dir}}\touch.txt' - state: touch - register: touch_file_again_check - check_mode: yes - -- name: get details of touched file in check mode - win_stat: - path: '{{win_output_dir}}\touch.txt' - register: touch_file_again_actual_check - -- name: assert touch an existing file in check mode - assert: - that: - - touch_file_again_check.changed - - touch_file_again_actual_check.stat.lastwritetime == touch_file_actual_again.stat.lastwritetime - -#- name: change file mode -# win_file: path={{win_output_dir}}/baz.txt mode=0600 -# register: file4_result - -#- name: verify that the file was marked as changed -# assert: -# that: -# - "file4_result.changed == true" -# - "file4_result.mode == '0600'" -# -#- name: change ownership and group -# win_file: path={{win_output_dir}}/baz.txt owner=1234 group=1234 -# -#- name: setup a tmp-like directory for ownership test -# win_file: path=/tmp/worldwritable mode=1777 state=directory - -#- name: Ask to create a file without enough perms to change ownership -# win_file: path=/tmp/worldwritable/baz.txt state=touch owner=root -# become: yes -# become_user: nobody -# register: chown_result -# ignore_errors: True - -#- name: Ask whether the new file exists -# win_stat: path=/tmp/worldwritable/baz.txt -# register: file_exists_result - -#- name: Verify that the file doesn't exist on failure -# assert: -# that: -# - "chown_result.failed == True" -# - "file_exists_result.stat.exists == False" -# -#- name: clean up -# win_file: path=/tmp/worldwritable state=absent - -#- name: create soft link to file -# win_file: src={{output_file}} dest={{win_output_dir}}/soft.txt state=link -# register: file5_result - -#- name: verify that the file was marked as changed -# assert: -# that: -# - "file5_result.changed == true" -# -#- name: create hard link to file -# win_file: src={{output_file}} dest={{win_output_dir}}/hard.txt state=hard -# register: file6_result -# -#- name: verify that the file was marked as changed -# assert: -# that: -# - "file6_result.changed == true" -# -- name: create a directory - win_file: path={{win_output_dir}}/foobar state=directory - register: file7_result - -- debug: var=file7_result - -- name: verify that the file was marked as changed - assert: - that: - - "file7_result.changed == true" -# - "file7_result.state == 'directory'" - -# windows and selinux unlikely to ever mix, removing these tests: -#- name: determine if selinux is installed -# shell: which getenforce || exit 0 -# register: selinux_installed - -#- name: determine if selinux is enabled -# shell: getenforce -# register: selinux_enabled -# when: selinux_installed.stdout != "" -# ignore_errors: true - -#- name: decide to include or not include selinux tests -# include: selinux_tests.yml -# when: selinux_installed.stdout != "" and selinux_enabled.stdout != "Disabled" - -- name: remote directory foobar - win_file: path={{win_output_dir}}/foobar state=absent - -- name: remove file foo.txt - win_file: path={{win_output_dir}}/foo.txt state=absent - -- name: remove file bar.txt - win_file: path={{win_output_dir}}/foo.txt state=absent - -- name: remove file baz.txt - win_file: path={{win_output_dir}}/foo.txt state=absent - -- name: win copy directory structure over - win_copy: src=foobar dest={{win_output_dir}} - -- name: remove directory foobar - win_file: path={{win_output_dir}}/foobar state=absent - register: file14_result - -- debug: var=file14_result - -- name: verify that the directory was removed - assert: - that: - - 'file14_result.changed == true' -# - 'file14_result.state == "absent"' - -- name: create a test sub-directory - win_file: dest={{win_output_dir}}/sub1 state=directory - register: file15_result - -- name: verify that the new directory was created - assert: - that: - - 'file15_result.changed == true' -# - 'file15_result.state == "directory"' - -- name: create test files in the sub-directory - win_file: dest={{win_output_dir}}/sub1/{{item}} state=touch - with_items: - - file1 - - file2 - - file3 - register: file16_result - -- name: verify the files were created - assert: - that: - - 'item.changed == true' -# - 'item.state == "file"' - with_items: "{{file16_result.results}}" - -#- name: try to force the sub-directory to a link -# win_file: src={{win_output_dir}}/testing dest={{win_output_dir}}/sub1 state=link force=yes -# register: file17_result -# ignore_errors: true - -#- name: verify the directory was not replaced with a link -# assert: -# that: -# - 'file17_result.failed == true' -# - 'file17_result.state == "directory"' - -#- name: create soft link to directory using absolute path -# win_file: src=/ dest={{win_output_dir}}/root state=link -# register: file18_result -# -#- name: verify that the result was marked as changed -# assert: -# that: -# - "file18_result.changed == true" -# -- name: create another test sub-directory - win_file: dest={{win_output_dir}}/sub2 state=directory - register: file19_result - -- name: verify that the new directory was created - assert: - that: - - 'file19_result.changed == true' -# - 'file19_result.state == "directory"' - -#- name: create soft link to relative file -# win_file: src=../sub1/file1 dest={{win_output_dir}}/sub2/link1 state=link -# register: file20_result -# -#- name: verify that the result was marked as changed -# assert: -# that: -# - "file20_result.changed == true" - -#- name: create soft link to relative directory -# win_file: src=sub1 dest={{win_output_dir}}/sub1-link state=link -# register: file21_result -# -#- name: verify that the result was marked as changed -# assert: -# that: -# - "file21_result.changed == true" -# -#- name: test file creation with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=u=rwx,g=rwx,o=rwx -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0777' - -#- name: modify symbolic mode for all -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=a=r -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0444' - -#- name: modify symbolic mode for owner -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=u+w -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0644' - -#- name: modify symbolic mode for group -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=g+w -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0664' -# -#- name: modify symbolic mode for world -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=o+w -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0666' -# -#- name: modify symbolic mode for owner -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=u+x -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0766' -## -#- name: modify symbolic mode for group -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=g+x -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0776' -# -#- name: modify symbolic mode for world -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=o+x -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0777' - -#- name: remove symbolic mode for world -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=o-wx -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0774' -# -#- name: remove symbolic mode for group -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=g-wx -# register: result -# -#- name: assert file mode -### assert: -# that: -# - result.mode == '0744' - -#- name: remove symbolic mode for owner -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=u-wx -# register: result - -#- name: assert file mode -# assert: -# that: -# - result.mode == '0444' -# -#- name: set sticky bit with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=o+t -# register: result - -#- name: assert file mode -# assert: -# that: -# - result.mode == '01444' -# -#- name: remove sticky bit with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=o-t -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0444' - -#- name: add setgid with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=g+s -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '02444' -# -#- name: remove setgid with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=g-s -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0444' - -#- name: add setuid with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=u+s -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '04444' - -#- name: remove setuid with symbolic mode -# win_file: dest={{win_output_dir}}/test_symbolic state=touch mode=u-s -# register: result -# -#- name: assert file mode -# assert: -# that: -# - result.mode == '0444' - -# test the file module using follow=yes, so that the target of a -# symlink is modified, rather than the link itself - -#- name: create a test file -# win_copy: dest={{win_output_dir}}\test_follow content="this is a test file\n" mode=0666 - -#- name: create a symlink to the test file -# win_file: path={{win_output_dir}}\test_follow_link src="./test_follow" state=link -# -#- name: modify the permissions on the link using follow=yes -# win_file: path={{win_output_dir}}\test_follow_link mode=0644 follow=yes -# register: result - -#- name: assert that the chmod worked -# assert: -# that: -# - result.changed -# -#- name: stat the link target -# win_stat: path={{win_output_dir}}/test_follow -# register: result -# -#- name: assert that the link target was modified correctly -# assert: -# that: -## - result.stat.mode == '0644' - -- name: create a directory - win_file: path={{win_output_dir}}/dirtest state=directory - register: file_result - -- name: stat the directory created - win_stat: path={{win_output_dir}}/dirtest - register: stat_result - -- name: assert the directory was created - assert: - that: - - file_result.changed - - stat_result.stat.exists - - stat_result.stat.isdir - -- name: re run create directory (bug 2147) - win_file: path={{win_output_dir}}/dirtest state=directory - register: file_result - -- name: stat the directory created again - win_stat: path={{win_output_dir}}/dirtest - register: stat_result - -- name: assert the directory exists but was not changed - assert: - that: - - file_result.changed == False - - stat_result.stat.exists - - stat_result.stat.isdir - -- name: remove empty dir we just created - win_file: path={{win_output_dir}}/dirtest state=absent - register: file_result - -- name: stat the removed directory - win_stat: path={{win_output_dir}}/dirtest - register: stat_result - -- name: assert the directory does not exist - assert: - that: - - file_result.changed - - "stat_result.stat.exists == False" - -- name: create dir with spaces and parens in the dir name - win_file: - path: '{{win_output_dir}}\dir with spaces (and parens) [block]' - state: directory - register: file_result - -- name: stat the directory with spaces and parens - win_stat: - path: '{{win_output_dir}}\dir with spaces (and parens) [block]' - register: stat_result - -- name: check dir with spaces and parens in the dir name has been created - assert: - that: - - file_result.changed - - stat_result.stat.exists - - stat_result.stat.isdir - -- name: create file in dir with special char - win_file: - path: '{{win_output_dir}}\dir with spaces (and parens) [block]\file[1].txt' - state: touch - register: file_result - -- name: stat the file with spaces and parens - win_stat: - path: '{{win_output_dir}}\dir with spaces (and parens) [block]\file[1].txt' - register: stat_result - -- name: check file in dir with spaces and parens exist - assert: - that: - - file_result.changed - - stat_result.stat.exists - - stat_result.stat.isreg - -- name: remove dir with spaces and parens in the dir name - win_file: - path: '{{win_output_dir}}/dir with spaces (and parens) [block]' - state: absent - register: file_result - -- name: stat the dir with spaces and parens in the dir name - win_stat: - path: '{{win_output_dir}}\dir with spaces (and parens) [block]' - register: stat_result - -- name: assert dir with spaces and parens in the dir name was removed - assert: - that: - - file_result.changed - - "stat_result.stat.exists == False" - -# Need to use shell to create the file as win_file doesn't support setting attributes -- name: create hidden file - win_shell: $file = New-Item -Path "{{ win_output_dir }}\hidden.txt" -ItemType File; $file.Attributes = "Hidden" - -- name: delete hidden file - win_file: - path: '{{ win_output_dir }}\hidden.txt' - state: absent - register: delete_hidden - -- name: get result of delete hidden file - win_stat: - path: '{{ win_output_dir }}\hidden.txt' - register: delete_hidden_actual - -- name: assert delete hidden file - assert: - that: - - delete_hidden is changed - - not delete_hidden_actual.stat.exists - -- name: create folder to point set symbolic link for - win_file: - path: "{{win_output_dir}}/link-test/link-target" - state: directory - -- name: create symbolic link - win_command: cmd.exe /c mklink /d "{{win_output_dir}}\link-test\link" "{{win_output_dir}}\link-test\link-target" - -- name: remove symbolic link target - win_file: - path: "{{win_output_dir}}/link-test/link-target" - state: absent - -- name: remove parent folder with broken link - win_file: - path: "{{win_output_dir}}/link-test" - state: absent - -- name: clean up sub1 - win_file: path={{win_output_dir}}/sub1 state=absent - -- name: clean up sub2 - win_file: path={{win_output_dir}}/sub2 state=absent diff --git a/test/integration/targets/win_find/aliases b/test/integration/targets/win_find/aliases deleted file mode 100644 index 215e0b0692..0000000000 --- a/test/integration/targets/win_find/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group4 diff --git a/test/integration/targets/win_find/defaults/main.yml b/test/integration/targets/win_find/defaults/main.yml deleted file mode 100644 index fc2e2e1179..0000000000 --- a/test/integration/targets/win_find/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -win_find_dir: '{{ win_output_dir }}\win_find .ÅÑŚÌβŁÈ [$!@^&test(;)]' -test_win_find_username: testuser diff --git a/test/integration/targets/win_find/meta/main.yml b/test/integration/targets/win_find/meta/main.yml deleted file mode 100644 index d328716dfa..0000000000 --- a/test/integration/targets/win_find/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_win_tests diff --git a/test/integration/targets/win_find/tasks/main.yml b/test/integration/targets/win_find/tasks/main.yml deleted file mode 100644 index c2f40a8fde..0000000000 --- a/test/integration/targets/win_find/tasks/main.yml +++ /dev/null @@ -1,114 +0,0 @@ ---- -- name: ensure the testing directory is cleared before setting up test - win_file: - path: '{{win_find_dir}}' - state: absent - -# while most of the setup can be done with modules, it is quicker to do them -# all in bulk than with with_items to save each round trip over WinRM -- name: set test files and folders - win_shell: | - $directories = @( - "nested", - "single", - "link-dest\sub-link", - "hard-link-dest", - "junction-link-dest", - "broken-link-dest", - "nested\sub-nest", - "shared\folder", - "hidden", - "date", - "emptynested\nest\dir1", - "emptynested\nest\dir2" - ) - - $tmp_dir = '{{ win_find_dir }}' - foreach ($directory in $directories) { - New-Item -Path "$tmp_dir\$directory" -ItemType Directory - } - - $normal_content = "abcdefg1234567" - $normal_files = @( - "nested\file.ps1", - "nested\test.ps1", - "nested\out.log", - "nested\archive.log", - "nested\sub-nest\test.ps1", - "nested\sub-nest\readonly.txt", - "link-dest\link.ps1", - "single\test.ps1", - "single\hidden.ps1", - "single\out_20161101-091005.log", - "hidden\out_20161101-091005.log", - "hard-link-dest\file-abc.log" - ) - foreach ($file in $normal_files) { - New-Item -Path "$tmp_dir\$file" -ItemType File - [System.IO.File]::WriteAllText("$tmp_dir\$file", $normal_content) - } - - New-Item -Path "$tmp_dir\single\small.ps1" -ItemType File - [System.IO.File]::WriteAllText("$tmp_dir\single\small.ps1", "a") - - New-Item -Path "$tmp_dir\date\new.ps1" -ItemType File - [System.IO.File]::WriteAllText("$tmp_dir\date\new.ps1", "random text for new date") - - New-Item -Path "$tmp_dir\date\old.ps1" -ItemType File - [System.IO.File]::WriteAllText("$tmp_dir\date\old.ps1", "random text for old date") - - New-Item -Path "$tmp_dir\single\large.ps1" -ItemType File - Set-Content -LiteralPath "$tmp_dir\single\large.ps1" -Value ('abcdefghijklmnopqrstuvwxyz' * 10000) - - $share_stat = Get-WmiObject -Class Win32_Share -Filter "name='folder-share'" - if ($share_stat) { - $share_stat.Delete() - } - $wmi = [wmiClass] 'Win32_Share' - $wmi.Create("$tmp_dir\shared\folder", "folder-share", 0) - - cmd.exe /c mklink /D "$tmp_dir\nested\link" "$tmp_dir\link-dest" - cmd.exe /c mklink /D "$tmp_dir\broken-link" "$tmp_dir\broken-link-dest" - cmd.exe /c mklink /H "$tmp_dir\hard-link-dest\hard-link.log" "$tmp_dir\hard-link-dest\file-abc.log" - cmd.exe /c mklink /J "$tmp_dir\junction-link" "$tmp_dir\junction-link-dest" - - $date = Get-Date -Year 2016 -Month 11 -Day 1 -Hour 7 -Minute 10 -Second 5 -Millisecond 0 - Set-Location -LiteralPath $tmp_dir - Get-ChildItem -Recurse | Where-Object { $_.Name -ne "new.ps1" } | ForEach-Object { - $_.CreationTime = $date - $_.LastAccessTime = $date - $_.LastWriteTime = $date - } - Pop-Location - - $attributes = @{ - "hidden" = "Hidden" - "date" = "Hidden" - "nested\archive.log" = "Archive" - "nested\sub-nest\readonly.txt" = "ReadOnly" - "single\hidden.ps1" = "Hidden" - } - foreach ($attribute in $attributes.GetEnumerator()) { - $item = Get-Item -LiteralPath "$tmp_dir\$($attribute.Name)" - $file_attributes = $item.Attributes -split ',' - if ($file_attributes -notcontains $attribute.Value) { - $file_attributes += $attribute.Value - } - $item.Attributes = $file_attributes -join ',' - } - - Remove-Item -LiteralPath "$tmp_dir\broken-link-dest" -Force - -- block: - - include_tasks: tests.yml - - always: - - name: remove test user - win_user: - name: '{{test_win_find_username}}' - state: absent - - - name: remove testing folder - win_file: - path: '{{win_find_dir}}' - state: absent diff --git a/test/integration/targets/win_find/tasks/tests.yml b/test/integration/targets/win_find/tasks/tests.yml deleted file mode 100644 index 82fa879ced..0000000000 --- a/test/integration/targets/win_find/tasks/tests.yml +++ /dev/null @@ -1,755 +0,0 @@ ---- -- name: expected skip when paths to a file - win_find: - paths: "{{win_find_dir}}\\single\\large.ps1" - register: actual - -- name: assert skip when path is set to a file - assert: - that: - - not actual is changed - - actual.examined == 0 - - actual.files == [] - - actual.matched == 0 - - actual.warnings == ["Argument path '" + win_find_dir + "\\single\\large.ps1' is a file not a directory, skipping"] - -- name: expect skip when path is set to a non existent folder - win_find: - paths: "{{win_find_dir}}\\thisisafakefolder" - register: actual - -- name: assert skip when path is set to a non existent folder - assert: - that: - - not actual is changed - - actual.examined == 0 - - actual.files == [] - - actual.matched == 0 - - actual.warnings == ["Argument path '" + win_find_dir + "\\thisisafakefolder' does not exist, skipping"] - -- name: get files in single directory - win_find: - paths: "{{win_find_dir}}\\single" - register: actual - -- name: assert get files in single directory - assert: - that: - - not actual is changed - - actual.examined == 5 - - actual.matched == 4 - - actual.files[0].attributes == 'Archive' - - actual.files[0].checksum == 'f8d100cdcf0e6c1007db2f8dd0b7ee2884df89af' - - actual.files[0].creationtime == 1477984205 - - actual.files[0].exists == True - - actual.files[0].extension == '.ps1' - - actual.files[0].filename == 'large.ps1' - - actual.files[0].hlnk_targets == [] - - actual.files[0].isarchive == True - - actual.files[0].isdir == False - - actual.files[0].ishidden == False - - actual.files[0].isjunction == False - - actual.files[0].islnk == False - - actual.files[0].isreadonly == False - - actual.files[0].isreg == True - - actual.files[0].isshared == False - - actual.files[0].lastaccesstime == 1477984205 - - actual.files[0].lastwritetime == 1477984205 - - actual.files[0].lnk_source == None - - actual.files[0].lnk_target == None - - actual.files[0].nlink == 1 - - actual.files[0].owner == 'BUILTIN\\Administrators' - - actual.files[0].path == win_find_dir + '\\single\\large.ps1' - - actual.files[0].sharename == None - - actual.files[0].size == 260002 - - actual.files[1].attributes == 'Archive' - - actual.files[1].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[1].creationtime == 1477984205 - - actual.files[1].exists == True - - actual.files[1].extension == '.log' - - actual.files[1].filename == 'out_20161101-091005.log' - - actual.files[1].hlnk_targets == [] - - actual.files[1].isarchive == True - - actual.files[1].isdir == False - - actual.files[1].ishidden == False - - actual.files[1].isjunction == False - - actual.files[1].islnk == False - - actual.files[1].isreadonly == False - - actual.files[1].isreg == True - - actual.files[1].isshared == False - - actual.files[1].lastaccesstime == 1477984205 - - actual.files[1].lastwritetime == 1477984205 - - actual.files[1].lnk_source == None - - actual.files[1].lnk_target == None - - actual.files[1].nlink == 1 - - actual.files[1].owner == 'BUILTIN\\Administrators' - - actual.files[1].path == win_find_dir + '\\single\\out_20161101-091005.log' - - actual.files[1].sharename == None - - actual.files[1].size == 14 - - actual.files[2].attributes == 'Archive' - - actual.files[2].checksum == '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8' - - actual.files[2].creationtime == 1477984205 - - actual.files[2].exists == True - - actual.files[2].extension == '.ps1' - - actual.files[2].filename == 'small.ps1' - - actual.files[2].hlnk_targets == [] - - actual.files[2].isarchive == True - - actual.files[2].isdir == False - - actual.files[2].ishidden == False - - actual.files[2].isjunction == False - - actual.files[2].islnk == False - - actual.files[2].isreadonly == False - - actual.files[2].isreg == True - - actual.files[2].isshared == False - - actual.files[2].lastaccesstime == 1477984205 - - actual.files[2].lastwritetime == 1477984205 - - actual.files[2].lnk_source == None - - actual.files[2].lnk_target == None - - actual.files[2].nlink == 1 - - actual.files[2].owner == 'BUILTIN\\Administrators' - - actual.files[2].path == win_find_dir + '\\single\\small.ps1' - - actual.files[2].sharename == None - - actual.files[2].size == 1 - - actual.files[3].attributes == 'Archive' - - actual.files[3].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[3].creationtime == 1477984205 - - actual.files[3].exists == True - - actual.files[3].extension == '.ps1' - - actual.files[3].filename == 'test.ps1' - - actual.files[3].hlnk_targets == [] - - actual.files[3].isarchive == True - - actual.files[3].isdir == False - - actual.files[3].ishidden == False - - actual.files[3].isjunction == False - - actual.files[3].islnk == False - - actual.files[3].isreadonly == False - - actual.files[3].isreg == True - - actual.files[3].isshared == False - - actual.files[3].lastaccesstime == 1477984205 - - actual.files[3].lastwritetime == 1477984205 - - actual.files[3].lnk_source == None - - actual.files[3].lnk_target == None - - actual.files[3].nlink == 1 - - actual.files[3].owner == 'BUILTIN\\Administrators' - - actual.files[3].path == win_find_dir + '\\single\\test.ps1' - - actual.files[3].sharename == None - - actual.files[3].size == 14 - -- name: find hidden files - win_find: - paths: ['{{win_find_dir}}\\single', '{{win_find_dir}}\\nested'] - hidden: True - register: actual - -- name: assert get files in single directory - assert: - that: - - not actual is changed - - actual.examined == 11 - - actual.matched == 1 - - actual.files[0].attributes == 'Hidden, Archive' - - actual.files[0].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[0].creationtime == 1477984205 - - actual.files[0].exists == True - - actual.files[0].extension == '.ps1' - - actual.files[0].filename == 'hidden.ps1' - - actual.files[0].hlnk_targets == [] - - actual.files[0].isarchive == True - - actual.files[0].isdir == False - - actual.files[0].ishidden == True - - actual.files[0].isjunction == False - - actual.files[0].islnk == False - - actual.files[0].isreadonly == False - - actual.files[0].isreg == True - - actual.files[0].isshared == False - - actual.files[0].lastaccesstime == 1477984205 - - actual.files[0].lastwritetime == 1477984205 - - actual.files[0].lnk_source == None - - actual.files[0].lnk_target == None - - actual.files[0].nlink == 1 - - actual.files[0].owner == 'BUILTIN\\Administrators' - - actual.files[0].path == win_find_dir + '\\single\\hidden.ps1' - - actual.files[0].sharename == None - - actual.files[0].size == 14 - -- name: find file based on pattern - win_find: - paths: '{{win_find_dir}}\\single' - patterns: ['*.log', 'out_*'] - register: actual_pattern - -- name: find file based on pattern regex - win_find: - paths: '{{win_find_dir}}\\single' - patterns: "out_\\d{8}-\\d{6}.log" - use_regex: True - register: actual_regex - -- name: assert find file based on pattern - assert: - that: - - not actual_pattern is changed - - actual_pattern.examined == 5 - - actual_pattern.matched == 1 - - actual_pattern.files[0].attributes == 'Archive' - - actual_pattern.files[0].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual_pattern.files[0].creationtime == 1477984205 - - actual_pattern.files[0].exists == True - - actual_pattern.files[0].extension == '.log' - - actual_pattern.files[0].filename == 'out_20161101-091005.log' - - actual_pattern.files[0].hlnk_targets == [] - - actual_pattern.files[0].isarchive == True - - actual_pattern.files[0].isdir == False - - actual_pattern.files[0].ishidden == False - - actual_pattern.files[0].isjunction == False - - actual_pattern.files[0].islnk == False - - actual_pattern.files[0].isreadonly == False - - actual_pattern.files[0].isreg == True - - actual_pattern.files[0].isshared == False - - actual_pattern.files[0].lastaccesstime == 1477984205 - - actual_pattern.files[0].lastwritetime == 1477984205 - - actual_pattern.files[0].lnk_source == None - - actual_pattern.files[0].lnk_target == None - - actual_pattern.files[0].nlink == 1 - - actual_pattern.files[0].owner == 'BUILTIN\\Administrators' - - actual_pattern.files[0].path == win_find_dir + '\\single\\out_20161101-091005.log' - - actual_pattern.files[0].sharename == None - - actual_pattern.files[0].size == 14 - - actual_pattern == actual_regex - -- name: find files with recurse set - win_find: - paths: "{{win_find_dir}}\\nested" - recurse: True - patterns: "*.ps1" - register: actual - -- name: assert find files with recurse set - assert: - that: - - not actual is changed - - actual.examined == 8 - - actual.matched == 3 - - actual.files[0].attributes == 'Archive' - - actual.files[0].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[0].creationtime == 1477984205 - - actual.files[0].exists == True - - actual.files[0].extension == '.ps1' - - actual.files[0].filename == 'file.ps1' - - actual.files[0].hlnk_targets == [] - - actual.files[0].isarchive == True - - actual.files[0].isdir == False - - actual.files[0].ishidden == False - - actual.files[0].isjunction == False - - actual.files[0].islnk == False - - actual.files[0].isreadonly == False - - actual.files[0].isreg == True - - actual.files[0].isshared == False - - actual.files[0].lastaccesstime == 1477984205 - - actual.files[0].lastwritetime == 1477984205 - - actual.files[0].lnk_source == None - - actual.files[0].lnk_target == None - - actual.files[0].nlink == 1 - - actual.files[0].owner == 'BUILTIN\\Administrators' - - actual.files[0].path == win_find_dir + '\\nested\\file.ps1' - - actual.files[0].sharename == None - - actual.files[0].size == 14 - - actual.files[1].attributes == 'Archive' - - actual.files[1].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[1].creationtime == 1477984205 - - actual.files[1].exists == True - - actual.files[1].extension == '.ps1' - - actual.files[1].filename == 'test.ps1' - - actual.files[1].hlnk_targets == [] - - actual.files[1].isarchive == True - - actual.files[1].isdir == False - - actual.files[1].ishidden == False - - actual.files[1].isjunction == False - - actual.files[1].islnk == False - - actual.files[1].isreadonly == False - - actual.files[1].isreg == True - - actual.files[1].isshared == False - - actual.files[1].lastaccesstime == 1477984205 - - actual.files[1].lastwritetime == 1477984205 - - actual.files[1].lnk_source == None - - actual.files[1].lnk_target == None - - actual.files[1].nlink == 1 - - actual.files[1].owner == 'BUILTIN\\Administrators' - - actual.files[1].path == win_find_dir + '\\nested\\sub-nest\\test.ps1' - - actual.files[1].sharename == None - - actual.files[1].size == 14 - - actual.files[2].attributes == 'Archive' - - actual.files[2].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[2].creationtime == 1477984205 - - actual.files[2].exists == True - - actual.files[2].extension == '.ps1' - - actual.files[2].filename == 'test.ps1' - - actual.files[2].hlnk_targets == [] - - actual.files[2].isarchive == True - - actual.files[2].isdir == False - - actual.files[2].ishidden == False - - actual.files[2].isjunction == False - - actual.files[2].islnk == False - - actual.files[2].isreadonly == False - - actual.files[2].isreg == True - - actual.files[2].isshared == False - - actual.files[2].lastaccesstime == 1477984205 - - actual.files[2].lastwritetime == 1477984205 - - actual.files[2].lnk_source == None - - actual.files[2].lnk_target == None - - actual.files[2].nlink == 1 - - actual.files[2].owner == 'BUILTIN\\Administrators' - - actual.files[2].path == win_find_dir + '\\nested\\test.ps1' - - actual.files[2].sharename == None - - actual.files[2].size == 14 - -- name: find files with recurse set and follow links - win_find: - paths: "{{win_find_dir}}\\nested" - recurse: True - follow: True - patterns: "*.ps1" - register: actual - -- name: assert find files with recurse set and follow links - assert: - that: - - not actual is changed - - actual.examined == 10 - - actual.matched == 4 - - actual.files[0].attributes == 'Archive' - - actual.files[0].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[0].creationtime == 1477984205 - - actual.files[0].exists == True - - actual.files[0].extension == '.ps1' - - actual.files[0].filename == 'file.ps1' - - actual.files[0].hlnk_targets == [] - - actual.files[0].isarchive == True - - actual.files[0].isdir == False - - actual.files[0].ishidden == False - - actual.files[0].isjunction == False - - actual.files[0].islnk == False - - actual.files[0].isreadonly == False - - actual.files[0].isreg == True - - actual.files[0].isshared == False - - actual.files[0].lastaccesstime == 1477984205 - - actual.files[0].lastwritetime == 1477984205 - - actual.files[0].lnk_source == None - - actual.files[0].lnk_target == None - - actual.files[0].nlink == 1 - - actual.files[0].owner == 'BUILTIN\\Administrators' - - actual.files[0].path == win_find_dir + '\\nested\\file.ps1' - - actual.files[0].sharename == None - - actual.files[0].size == 14 - - actual.files[1].attributes == 'Archive' - - actual.files[1].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[1].creationtime == 1477984205 - - actual.files[1].exists == True - - actual.files[1].extension == '.ps1' - - actual.files[1].filename == 'link.ps1' - - actual.files[1].hlnk_targets == [] - - actual.files[1].isarchive == True - - actual.files[1].isdir == False - - actual.files[1].ishidden == False - - actual.files[1].isjunction == False - - actual.files[1].islnk == False - - actual.files[1].isreadonly == False - - actual.files[1].isreg == True - - actual.files[1].isshared == False - - actual.files[1].lastaccesstime == 1477984205 - - actual.files[1].lastwritetime == 1477984205 - - actual.files[1].lnk_source == None - - actual.files[1].lnk_target == None - - actual.files[1].nlink == 1 - - actual.files[1].owner == 'BUILTIN\\Administrators' - - actual.files[1].path == win_find_dir + '\\nested\\link\\link.ps1' - - actual.files[1].sharename == None - - actual.files[1].size == 14 - - actual.files[2].attributes == 'Archive' - - actual.files[2].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[2].creationtime == 1477984205 - - actual.files[2].exists == True - - actual.files[2].extension == '.ps1' - - actual.files[2].filename == 'test.ps1' - - actual.files[2].hlnk_targets == [] - - actual.files[2].isarchive == True - - actual.files[2].isdir == False - - actual.files[2].ishidden == False - - actual.files[2].isjunction == False - - actual.files[2].islnk == False - - actual.files[2].isreadonly == False - - actual.files[2].isreg == True - - actual.files[2].isshared == False - - actual.files[2].lastaccesstime == 1477984205 - - actual.files[2].lastwritetime == 1477984205 - - actual.files[2].lnk_source == None - - actual.files[2].lnk_target == None - - actual.files[2].nlink == 1 - - actual.files[2].owner == 'BUILTIN\\Administrators' - - actual.files[2].path == win_find_dir + '\\nested\\sub-nest\\test.ps1' - - actual.files[2].sharename == None - - actual.files[2].size == 14 - - actual.files[3].attributes == 'Archive' - - actual.files[3].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - - actual.files[3].creationtime == 1477984205 - - actual.files[3].exists == True - - actual.files[3].extension == '.ps1' - - actual.files[3].filename == 'test.ps1' - - actual.files[3].hlnk_targets == [] - - actual.files[3].isarchive == True - - actual.files[3].isdir == False - - actual.files[3].ishidden == False - - actual.files[3].isjunction == False - - actual.files[3].islnk == False - - actual.files[3].isreadonly == False - - actual.files[3].isreg == True - - actual.files[3].isshared == False - - actual.files[3].lastaccesstime == 1477984205 - - actual.files[3].lastwritetime == 1477984205 - - actual.files[3].lnk_source == None - - actual.files[3].lnk_target == None - - actual.files[3].nlink == 1 - - actual.files[3].owner == 'BUILTIN\\Administrators' - - actual.files[3].path == win_find_dir + '\\nested\\test.ps1' - - actual.files[3].sharename == None - - actual.files[3].size == 14 - -- name: find directories - win_find: - paths: "{{win_find_dir}}\\link-dest" - file_type: directory - register: actual - -- name: assert find directories - assert: - that: - - not actual is changed - - actual.examined == 2 - - actual.matched == 1 - - actual.files[0].attributes == 'Directory' - - actual.files[0].checksum == None - - actual.files[0].creationtime == 1477984205 - - actual.files[0].exists == True - - actual.files[0].extension == None - - actual.files[0].filename == 'sub-link' - - actual.files[0].hlnk_targets == [] - - actual.files[0].isarchive == False - - actual.files[0].isdir == True - - actual.files[0].ishidden == False - - actual.files[0].isjunction == False - - actual.files[0].islnk == False - - actual.files[0].isreadonly == False - - actual.files[0].isreg == False - - actual.files[0].isshared == False - - actual.files[0].lastaccesstime == 1477984205 - - actual.files[0].lastwritetime == 1477984205 - - actual.files[0].lnk_source == None - - actual.files[0].lnk_target == None - - actual.files[0].nlink == 1 - - actual.files[0].owner == 'BUILTIN\\Administrators' - - actual.files[0].path == win_find_dir + '\\link-dest\\sub-link' - - actual.files[0].sharename == None - - actual.files[0].size == None - -- name: find directories recurse and follow with a broken link - win_find: - paths: "{{win_find_dir}}" - file_type: directory - recurse: True - follow: True - register: actual - -- name: check directory count with recurse and follow is correct - assert: - that: - - not actual is changed - - actual.examined == 37 - - actual.matched == 17 - - actual.files[0].filename == 'broken-link' - - actual.files[0].isjunction == False - - actual.files[0].islnk == True - - actual.files[6].filename == 'junction-link' - - actual.files[6].isjunction == True - - actual.files[6].islnk == False - - actual.files[6].lnk_source == win_find_dir + '\\junction-link-dest' - - actual.files[11].filename == 'link' - - actual.files[11].islnk == True - - actual.files[11].lnk_source == win_find_dir + '\\link-dest' - - actual.files[15].filename == 'folder' - - actual.files[15].islnk == False - - actual.files[15].isshared == True - - actual.files[15].sharename == 'folder-share' - -- name: filter files by size without byte specified - win_find: - paths: "{{win_find_dir}}\\single" - size: 260002 - register: actual_without_byte - -- name: filter files by size with byte specified - win_find: - paths: "{{win_find_dir}}\\single" - size: 253k - register: actual_with_byte - -- name: assert filter files by size - assert: - that: - - not actual_without_byte is changed - - actual_without_byte.examined == 5 - - actual_without_byte.matched == 1 - - actual_without_byte.files[0].attributes == 'Archive' - - actual_without_byte.files[0].checksum == 'f8d100cdcf0e6c1007db2f8dd0b7ee2884df89af' - - actual_without_byte.files[0].creationtime == 1477984205 - - actual_without_byte.files[0].exists == True - - actual_without_byte.files[0].extension == '.ps1' - - actual_without_byte.files[0].filename == 'large.ps1' - - actual_without_byte.files[0].hlnk_targets == [] - - actual_without_byte.files[0].isarchive == True - - actual_without_byte.files[0].isdir == False - - actual_without_byte.files[0].ishidden == False - - actual_without_byte.files[0].isjunction == False - - actual_without_byte.files[0].islnk == False - - actual_without_byte.files[0].isreadonly == False - - actual_without_byte.files[0].isreg == True - - actual_without_byte.files[0].isshared == False - - actual_without_byte.files[0].lastaccesstime == 1477984205 - - actual_without_byte.files[0].lastwritetime == 1477984205 - - actual_without_byte.files[0].lnk_source == None - - actual_without_byte.files[0].lnk_target == None - - actual_without_byte.files[0].nlink == 1 - - actual_without_byte.files[0].owner == 'BUILTIN\\Administrators' - - actual_without_byte.files[0].path == win_find_dir + '\\single\\large.ps1' - - actual_without_byte.files[0].sharename == None - - actual_without_byte.files[0].size == 260002 - - actual_without_byte == actual_with_byte - -- name: filter files by size (less than) without byte specified - win_find: - paths: "{{win_find_dir}}\\single" - size: -4 - register: actual_without_byte - -- name: filter files by size (less than) with byte specified - win_find: - paths: "{{win_find_dir}}\\single" - size: -4b - register: actual_with_byte - -- name: assert filter files by size (less than) without byte specified - assert: - that: - - not actual_without_byte is changed - - actual_without_byte.examined == 5 - - actual_without_byte.matched == 1 - - actual_without_byte.files[0].attributes == 'Archive' - - actual_without_byte.files[0].checksum == '86f7e437faa5a7fce15d1ddcb9eaeaea377667b8' - - actual_without_byte.files[0].creationtime == 1477984205 - - actual_without_byte.files[0].exists == True - - actual_without_byte.files[0].extension == '.ps1' - - actual_without_byte.files[0].filename == 'small.ps1' - - actual_without_byte.files[0].hlnk_targets == [] - - actual_without_byte.files[0].isarchive == True - - actual_without_byte.files[0].isdir == False - - actual_without_byte.files[0].ishidden == False - - actual_without_byte.files[0].isjunction == False - - actual_without_byte.files[0].islnk == False - - actual_without_byte.files[0].isreadonly == False - - actual_without_byte.files[0].isreg == True - - actual_without_byte.files[0].isshared == False - - actual_without_byte.files[0].lastaccesstime == 1477984205 - - actual_without_byte.files[0].lastwritetime == 1477984205 - - actual_without_byte.files[0].lnk_source == None - - actual_without_byte.files[0].lnk_target == None - - actual_without_byte.files[0].nlink == 1 - - actual_without_byte.files[0].owner == 'BUILTIN\\Administrators' - - actual_without_byte.files[0].path == win_find_dir + '\\single\\small.ps1' - - actual_without_byte.files[0].sharename == None - - actual_without_byte.files[0].size == 1 - - actual_without_byte == actual_with_byte - -# For dates we cannot assert against expected as the times change, this is a poor mans attempt at testing -- name: filter files by age without unit specified - win_find: - paths: "{{win_find_dir}}\\date" - age: 3600 - register: actual_without_unit - -- name: filter files by age with unit specified - win_find: - paths: "{{win_find_dir}}\\date" - age: 1h - register: actual_with_unit - -- name: assert dates match each other - assert: - that: - - actual_without_unit == actual_with_unit - - actual_without_unit.matched == 1 - - actual_without_unit.files[0].checksum == 'd1185139c47f5bc951e2e9135922fe31059206b1' - - actual_without_unit.files[0].path == win_find_dir + '\\date\\old.ps1' - -- name: filter files by age (newer than) without unit specified - win_find: - paths: "{{win_find_dir}}\\date" - age: -3600 - register: actual_without_unit - -- name: filter files by age (newer than) without unit specified - win_find: - paths: "{{win_find_dir}}\\date" - age: -1h - register: actual_with_unit - -- name: assert dates match each other - assert: - that: - - actual_without_unit == actual_with_unit - - actual_without_unit.matched == 1 - - actual_without_unit.files[0].checksum == 'af99d0e98df4531b9f26c942f41d65c58766bfa9' - - actual_without_unit.files[0].path == win_find_dir + '\\date\\new.ps1' - -- name: get list of files with md5 checksum - win_find: - paths: "{{win_find_dir}}\\single" - patterns: test.ps1 - checksum_algorithm: md5 - register: actual_md5_checksum - -- name: assert md5 checksum value - assert: - that: - - actual_md5_checksum.files[0].checksum == 'd1713d0f1d2e8fae230328d8fd59de01' - -- name: get list of files with sha1 checksum - win_find: - paths: "{{win_find_dir}}\\single" - patterns: test.ps1 - checksum_algorithm: sha1 - register: actual_sha1_checksum - -- name: assert sha1 checksum value - assert: - that: - - actual_sha1_checksum.files[0].checksum == '8df33cee3325596517df5bb5aa980cf9c5c1fda3' - -- name: get list of files with sha256 checksum - win_find: - paths: "{{win_find_dir}}\\single" - patterns: test.ps1 - checksum_algorithm: sha256 - register: actual_sha256_checksum - -- name: assert sha256 checksum value - assert: - that: - - actual_sha256_checksum.files[0].checksum == 'c20d2eba7ffda0079812721b6f4e4e109e2f0c5e8cc3d1273a060df6f7d9f339' - -- name: get list of files with sha384 checksum - win_find: - paths: "{{win_find_dir}}\\single" - patterns: test.ps1 - checksum_algorithm: sha384 - register: actual_sha384_checksum - -- name: assert sha384 checksum value - assert: - that: - - actual_sha384_checksum.files[0].checksum == 'aed515eb216b9c7009ae8c4680f46c1e22004528b231aa0482a8587543bca47d3504e9f77e884eb2d11b2f9f5dc01651' - -- name: get list of files with sha512 checksum - win_find: - paths: "{{win_find_dir}}\\single" - patterns: test.ps1 - checksum_algorithm: sha512 - register: actual_sha512_checksum - -- name: assert sha512 checksum value - assert: - that: - - actual_sha512_checksum.files[0].checksum == '05abf64a68c4731699c23b4fc6894a36646fce525f3c96f9cf743b5d0c3bfd933dad0e95e449e3afe1f74d534d69a53b8f46cf835763dd42915813c897b02b87' - -- name: get list of files without checksum - win_find: - paths: "{{win_find_dir}}\\single" - patterns: test.ps1 - get_checksum: False - register: actual_no_checksum - -- name: assert no checksum is returned - assert: - that: - - actual_no_checksum.files[0].checksum == None - -# https://github.com/ansible/ansible/issues/26158 -- name: get list of files in an empty nested directory - win_find: - paths: '{{win_find_dir}}\emptynested' - register: actual_empty_nested - -- name: assert get list of files in an empty nested directory - assert: - that: - - actual_empty_nested.matched == 0 - -- name: create new folders for security tests - win_file: - path: '{{win_find_dir}}\{{item}}' - state: directory - with_items: - - secure-tests\secure\internal-folder - - secure-tests\open\internal-folder - -- name: create random password for test user - set_fact: - test_win_find_password: password123! + {{ lookup('password', '/dev/null chars=ascii_letters,digits length=8') }} - -- name: create test user who does not have access to secure folder - win_user: - name: '{{test_win_find_username}}' - password: '{{test_win_find_password}}' - state: present - groups: - - Users - -- name: change owner of secure folder - win_owner: - path: '{{win_find_dir}}\secure-tests\secure' - user: BUILTIN\Administrators - recurse: yes - -- name: set explicit inheritance of secure folder for the Administrators accounts - win_acl: - user: BUILTIN\Administrators - path: '{{win_find_dir}}\secure-tests\secure' - rights: FullControl - type: allow - state: present - inherit: None - -- name: remove inheritance on the secure folder - win_acl_inheritance: - path: '{{win_find_dir}}\secure-tests\secure' - reorganize: no - state: absent - -- name: run win_find with under-privileged account - win_find: - paths: '{{win_find_dir}}\secure-tests' - recurse: yes - file_type: directory - register: secure_result - become: yes - become_method: runas - become_user: '{{test_win_find_username}}' - vars: - ansible_become_password: '{{test_win_find_password}}' - -- name: assert win_find only examined 2 files with under-privileged account - assert: - that: - - secure_result.examined == 3 - - secure_result.matched == 3 - - secure_result.files[0].path == win_find_dir + "\secure-tests\open" - - secure_result.files[1].path == win_find_dir + "\secure-tests\open\internal-folder" - - secure_result.files[2].path == win_find_dir + "\secure-tests\secure" diff --git a/test/integration/targets/win_get_url/aliases b/test/integration/targets/win_get_url/aliases deleted file mode 100644 index ca4f45531a..0000000000 --- a/test/integration/targets/win_get_url/aliases +++ /dev/null @@ -1,3 +0,0 @@ -shippable/windows/group5 -needs/httptester -skip/windows/2008 # httptester requires SSH which doesn't work with 2008 diff --git a/test/integration/targets/win_get_url/files/ftp/anon/file.txt b/test/integration/targets/win_get_url/files/ftp/anon/file.txt deleted file mode 100644 index 7ffe02e39e..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/anon/file.txt +++ /dev/null @@ -1 +0,0 @@ -ftp/anon/file.txt diff --git a/test/integration/targets/win_get_url/files/ftp/anon/file2.txt b/test/integration/targets/win_get_url/files/ftp/anon/file2.txt deleted file mode 100644 index 9dfc1e4aba..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/anon/file2.txt +++ /dev/null @@ -1 +0,0 @@ -ftp/anon/file2.txt diff --git a/test/integration/targets/win_get_url/files/ftp/anon/sha1sum.txt b/test/integration/targets/win_get_url/files/ftp/anon/sha1sum.txt deleted file mode 100644 index c5cfcb4769..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/anon/sha1sum.txt +++ /dev/null @@ -1,3 +0,0 @@ -a97e6837f60cec6da4491bab387296bbcd72bdba cHR1eA== -3911340502960ca33aece01129234460bfeb2791 not_target1.txt -1b4b6adf30992cedb0f6edefd6478ff0a593b2e4 not_target2.txt diff --git a/test/integration/targets/win_get_url/files/ftp/anon/sha256sum.txt b/test/integration/targets/win_get_url/files/ftp/anon/sha256sum.txt deleted file mode 100644 index 599e3626af..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/anon/sha256sum.txt +++ /dev/null @@ -1,3 +0,0 @@ -b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006 cHR1eA== -30949cc401e30ac494d695ab8764a9f76aae17c5d73c67f65e9b558f47eff892 not_target1.txt -d0dbfc1945bc83bf6606b770e442035f2c4e15c886ee0c22fb3901ba19900b5b not_target2.txt diff --git a/test/integration/targets/win_get_url/files/ftp/anon/sha256sum_with_dot.txt b/test/integration/targets/win_get_url/files/ftp/anon/sha256sum_with_dot.txt deleted file mode 100644 index 1e46b89d6b..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/anon/sha256sum_with_dot.txt +++ /dev/null @@ -1,3 +0,0 @@ -b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006 ./cHR1eA== -30949cc401e30ac494d695ab8764a9f76aae17c5d73c67f65e9b558f47eff892 ./not_target1.txt -d0dbfc1945bc83bf6606b770e442035f2c4e15c886ee0c22fb3901ba19900b5b ./not_target2.txt diff --git a/test/integration/targets/win_get_url/files/ftp/user-pass/file.txt b/test/integration/targets/win_get_url/files/ftp/user-pass/file.txt deleted file mode 100644 index b0a23ddabc..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/user-pass/file.txt +++ /dev/null @@ -1 +0,0 @@ -ftp/user-pass/file.txt diff --git a/test/integration/targets/win_get_url/files/ftp/user/file.txt b/test/integration/targets/win_get_url/files/ftp/user/file.txt deleted file mode 100644 index 40438f769f..0000000000 --- a/test/integration/targets/win_get_url/files/ftp/user/file.txt +++ /dev/null @@ -1 +0,0 @@ -ftp/user/file.txt diff --git a/test/integration/targets/win_get_url/library/win_defender_exclusion.ps1 b/test/integration/targets/win_get_url/library/win_defender_exclusion.ps1 deleted file mode 100644 index c6f8744a45..0000000000 --- a/test/integration/targets/win_get_url/library/win_defender_exclusion.ps1 +++ /dev/null @@ -1,40 +0,0 @@ -#!powershell - -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -#Requires -Module Ansible.ModuleUtils.Legacy - -$params = Parse-Args $args -supports_check_mode $true - -$path = Get-AnsibleParam -obj $params -name "path" -type "path" -failifempty $true -$state = Get-AnsibleParam -obj $params -name "state" -type "str" -default "present" -validateset "absent", "present" - -$result = @{ - changed = $false -} - -# This is a test module, just skip instead of erroring out if we cannot set the rule -if ($null -eq (Get-Command -Name Get-MpPreference -ErrorAction SilentlyContinue)) { - $result.skipped = $true - $result.msg = "Skip as cannot set exclusion rule" - Exit-Json -obj $result -} - -$exclusions = (Get-MpPreference).ExclusionPath -if ($null -eq $exclusions) { - $exclusions = @() -} - -if ($state -eq "absent") { - if ($path -in $exclusions) { - Remove-MpPreference -ExclusionPath $path - $result.changed = $true - } -} else { - if ($path -notin $exclusions) { - Add-MpPreference -ExclusionPath $path - $result.changed = $true - } -} - -Exit-Json -obj $result diff --git a/test/integration/targets/win_get_url/meta/main.yml b/test/integration/targets/win_get_url/meta/main.yml deleted file mode 100644 index 6baa762584..0000000000 --- a/test/integration/targets/win_get_url/meta/main.yml +++ /dev/null @@ -1,3 +0,0 @@ -dependencies: -- setup_remote_tmp_dir -- prepare_http_tests diff --git a/test/integration/targets/win_get_url/tasks/main.yml b/test/integration/targets/win_get_url/tasks/main.yml deleted file mode 100644 index 842323d590..0000000000 --- a/test/integration/targets/win_get_url/tasks/main.yml +++ /dev/null @@ -1,75 +0,0 @@ -# Due to the special environment setup required for proxies, you can manually test out the proxy options with -# https://github.com/jborean93/ansible-powershell-url-proxy. ---- -- name: set fact out special testing dir - set_fact: - testing_dir: '{{ remote_tmp_dir }}\win_get_url .ÅÑŚÌβŁÈ [$!@^&test(;)]' - -- name: create test directory with space and special chars - win_file: - path: '{{ testing_dir }}' - state: directory - -- name: copy across testing files - win_copy: - src: files/ - dest: '{{ testing_dir }}' - -# False positive in Windows Defender is flagging the file as a virus and removing it. We need to add an exclusion so -# the tests continue to work -- name: add exclusion for the SlimFTPd binary - win_defender_exclusion: - path: '{{ remote_tmp_dir | win_dirname }}' - state: present - -- name: download SlimFTPd binary - win_get_url: - url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_get_url/SlimFTPd.exe - dest: '{{ testing_dir }}\SlimFTPd.exe' - -# SlimFTPd does not work with special chars because it is so old, use a symlink as a workaround -- name: set fact of temp symlink for SlimFTPd - set_fact: - slimftpd_link: C:\SlimFTPd - -- name: template SlimFTPd configuration file - win_template: - src: slimftpd.conf.tmpl - dest: '{{ testing_dir }}\slimftpd.conf' - -- block: - - name: create SLimFTPd symlink - win_command: cmd.exe /c mklink /d "{{ slimftpd_link }}" "{{ testing_dir }}" - - - name: create SlimFTPd service - win_service: - name: SlimFTPd - path: '"{{ slimftpd_link }}\SlimFTPd.exe" -service' - state: started - dependencies: - - tcpip - - - name: run URL tests - import_tasks: tests_url.yml - - - name: run FTP tests - import_tasks: tests_ftp.yml - - - name: run checksum tests - import_tasks: tests_checksum.yml - - always: - - name: remove SlimFTPd service - win_service: - name: SlimFTPd - state: absent - - - name: remove temp symlink - win_file: - path: '{{ slimftpd_link }}' - state: absent - - - name: remove exclusion for the SlimFTPd binary - win_defender_exclusion: - path: '{{ remote_tmp_dir | win_dirname }}' - state: absent diff --git a/test/integration/targets/win_get_url/tasks/tests_checksum.yml b/test/integration/targets/win_get_url/tasks/tests_checksum.yml deleted file mode 100644 index 8010580548..0000000000 --- a/test/integration/targets/win_get_url/tasks/tests_checksum.yml +++ /dev/null @@ -1,91 +0,0 @@ ---- -# These files are pre formatted and we want to get the base64 value so we can use it for httpbin -# dynamic content in checksum_url -- name: set base64 values for checksum files - set_fact: - sha1sum: '{{ lookup("file", "ftp/anon/sha1sum.txt") | b64encode }}' - sha256sum: '{{ lookup("file", "ftp/anon/sha256sum.txt") | b64encode }}' - sha256sum_dot: '{{ lookup("file", "ftp/anon/sha256sum_with_dot.txt") | b64encode }}' - -- name: download file with sha1 checksum url - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\sha1.txt' - checksum_url: https://{{ httpbin_host }}/base64/{{ sha1sum }} - force: True - register: download_sha1_url - -- name: download file with sha1 checksum value - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\sha1.txt' - checksum: a97e6837f60cec6da4491bab387296bbcd72bdba - force: True - register: download_sha1_value - -- name: assert download file with sha1 checksum - assert: - that: - - download_sha1_url is changed - - download_sha1_url.status_code == 200 - - download_sha1_url.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' - - not download_sha1_value is changed - - download_sha1_value.status_code == 200 - - download_sha1_value.checksum_dest == 'a97e6837f60cec6da4491bab387296bbcd72bdba' - -- name: download file with sha256 checksum ftp - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\sha256.txt' - checksum_url: ftp://localhost/anon/sha256sum.txt # tests that a checksum can be from an FTP URI - checksum_algorithm: sha256 - force: True - register: download_sha256_ftp - -- name: download file with sha256 checksum dot leading source as file - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\sha256.txt' - checksum_url: '{{ testing_dir }}\ftp\anon\sha256sum_with_dot.txt' - checksum_algorithm: sha256 - force: True - register: download_sha256_file - -- name: download file with sha256 checksum value - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\sha256.txt' - checksum: b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006 - checksum_algorithm: sha256 - register: download_sha256_value - -- name: assert download file with sha256 checksum - assert: - that: - - download_sha256_ftp is changed - - download_sha256_ftp.status_code == 200 - - download_sha256_ftp.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' - - not download_sha256_file is changed - - download_sha256_file.status_code == 200 - - download_sha256_file.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' - - not download_sha256_value is changed - - download_sha256_value.status_code == 200 - - download_sha256_value.checksum_dest == 'b1b6ce5073c8fac263a8fc5edfffdbd5dec1980c784e09c5bc69f8fb6056f006' - -- name: fail download with invalid checksum and force=no - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\fail.txt' - checksum: invalid - force: no - register: fail_checksum_force_no - failed_when: fail_checksum_force_no.msg != "The checksum for https://" + httpbin_host + "/base64/cHR1eA== did not match 'invalid', it was 'a97e6837f60cec6da4491bab387296bbcd72bdba'" - -- name: fail download with invalid checksum and force=yes - win_get_url: - url: https://{{ httpbin_host }}/base64/cHR1eA== - dest: '{{ testing_dir }}\fail.txt' - checksum: invalid - force: yes - register: fail_checksum_force_yes - failed_when: fail_checksum_force_yes.msg != "The checksum for https://" + httpbin_host + "/base64/cHR1eA== did not match 'invalid', it was 'a97e6837f60cec6da4491bab387296bbcd72bdba'" diff --git a/test/integration/targets/win_get_url/tasks/tests_ftp.yml b/test/integration/targets/win_get_url/tasks/tests_ftp.yml deleted file mode 100644 index ec389079b8..0000000000 --- a/test/integration/targets/win_get_url/tasks/tests_ftp.yml +++ /dev/null @@ -1,166 +0,0 @@ ---- -- name: download file from FTP source (check) - win_get_url: - url: ftp://localhost/anon/file.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - check_mode: yes - register: ftp_anon_check - -- name: get results of download file from FTP source (check) - win_stat: - path: '{{ testing_dir }}\ftp-anon.txt' - register: ftp_anon_result_check - -- name: assert download file from FTP source (check) - assert: - that: - - ftp_anon_check is changed - - not ftp_anon_result_check.stat.exists - -- name: download file from FTP source - win_get_url: - url: ftp://localhost/anon/file.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - register: ftp_anon - -- name: get results of download file from FTP source - win_stat: - path: '{{ testing_dir }}\ftp-anon.txt' - register: ftp_anon_result - -- name: assert download file from FTP source - assert: - that: - - ftp_anon is changed - - ftp_anon_result.stat.exists - - ftp_anon_result.stat.checksum == '67e0de92f29645cc30d8d147b767cceb81756651' - -- name: download file from FTP source (idempotent) - win_get_url: - url: ftp://localhost/anon/file.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - register: ftp_anon_again - -- name: assert download file from FTP source (idempotent) - assert: - that: - - not ftp_anon_again is changed - -- name: download file from FTP source with force no (check) - win_get_url: - url: ftp://localhost/anon/file.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - force: no - check_mode: yes - register: ftp_anon_force_no_check - -- name: assert download file from FTP source with force no - assert: - that: - - ftp_anon_force_no_check is not changed - -- name: download file from FTP source with force no - win_get_url: - url: ftp://localhost/anon/file.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - force: no - register: ftp_anon_force_no - -- name: assert download file from FTP source with force no - assert: - that: - - ftp_anon_force_no is not changed - -- name: set last modified time on FTP source to newer datetime - win_shell: (Get-Item -LiteralPath '{{ testing_dir }}\ftp\anon\file2.txt').LastWriteTime = (Get-Date).AddHours(24) - -- name: download newer file from FTP source to same dest (check) - win_get_url: - url: ftp://localhost/anon/file2.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - force: no - check_mode: yes - register: ftp_anon_force_no_different_check - -- name: get result of download newer file from FTP source to same dest (check) - win_stat: - path: '{{ testing_dir }}\ftp-anon.txt' - register: ftp_anon_force_no_different_result_check - -- name: assert download newer file from FTP source to same dest (check) - assert: - that: - - ftp_anon_force_no_different_check is changed - - ftp_anon_force_no_different_result_check.stat.checksum == '67e0de92f29645cc30d8d147b767cceb81756651' - -- name: download newer file from FTP source to same dest - win_get_url: - url: ftp://localhost/anon/file2.txt - dest: '{{ testing_dir }}\ftp-anon.txt' - force: no - register: ftp_anon_force_no_different - -- name: get result of download newer file from FTP source to same dest - win_stat: - path: '{{ testing_dir }}\ftp-anon.txt' - register: ftp_anon_force_no_different_result - -- name: assert download newer file from FTP source to same dest (check) - assert: - that: - - ftp_anon_force_no_different is changed - - ftp_anon_force_no_different_result.stat.checksum == 'eac3baccd817f7137c00138559e2e62aca64aab0' - -- name: fail to download file from ftp protected by username - win_get_url: - url: ftp://localhost/user/file.txt - dest: '{{ testing_dir }}\ftp-user.txt' - register: fail_ftp_no_user - ignore_errors: yes - -- name: assert fail to download file from ftp protected by username - assert: - that: - - fail_ftp_no_user is failed - - fail_ftp_no_user is not changed - - fail_ftp_no_user.status_code == 550 - - '"File unavailable (e.g., file not found, no access)." in fail_ftp_no_user.msg' - -- name: download FTP file protected by username - win_get_url: - url: ftp://localhost/user/file.txt - dest: '{{ testing_dir }}\ftp-user.txt' - url_username: username - register: ftp_user_file - -- name: get result of download FTP file protected by username - win_stat: - path: '{{ testing_dir }}\ftp-user.txt' - register: ftp_user_file_result - -- name: assert download FTP file protected by username - assert: - that: - - ftp_user_file is changed - - ftp_user_file_result.stat.exists - - ftp_user_file_result.stat.checksum == '0efc2e97611cf74e25ec17a00d4b2cf65d0c28ba' - -- name: download FTP file protected by username and password - win_get_url: - url: ftp://localhost/user-pass/file.txt - dest: '{{ testing_dir }}\ftp-user-pass.txt' - url_username: userpass - url_password: password - register: ftp_user_pass_file - -- name: get result of download FTP file protected by username and password - win_stat: - path: '{{ testing_dir }}\ftp-user-pass.txt' - register: ftp_user_pass_file_result - -- name: assert download FTP file protected by username and password - assert: - that: - - ftp_user_pass_file is changed - - ftp_user_pass_file_result.stat.exists - - ftp_user_pass_file_result.stat.checksum == '7da5f1124d4a986cba2b4658d38d95eb55afe086' diff --git a/test/integration/targets/win_get_url/tasks/tests_url.yml b/test/integration/targets/win_get_url/tasks/tests_url.yml deleted file mode 100644 index 91c782c7fa..0000000000 --- a/test/integration/targets/win_get_url/tasks/tests_url.yml +++ /dev/null @@ -1,237 +0,0 @@ -- name: download single file (check) - win_get_url: - url: https://{{ httpbin_host }}/base64/SG93IG5vdyBicm93biBjb3c= - dest: '{{ testing_dir }}\output.txt' - check_mode: yes - register: http_download_check - -- name: get result of download single file (check) - win_stat: - path: '{{ testing_dir }}\output.txt' - register: http_download_result_check - -- name: assert download single file (check) - assert: - that: - - http_download_check is not failed - - http_download_check is changed - - http_download_check.url - - http_download_check.dest - - not http_download_result_check.stat.exists - -- name: download single file - win_get_url: - url: https://{{ httpbin_host }}/base64/SG93IG5vdyBicm93biBjb3c= - dest: '{{ testing_dir }}\output.txt' - register: http_download - -- name: get result of download single file - win_stat: - path: '{{ testing_dir }}\output.txt' - register: http_download_result - -- name: assert download single file - assert: - that: - - http_download is not failed - - http_download is changed - - http_download.url - - http_download.dest - - http_download_result.stat.exists - -- name: download single file (idempotent) - win_get_url: - url: https://{{ httpbin_host }}/base64/SG93IG5vdyBicm93biBjb3c= - dest: '{{ testing_dir }}\output.txt' - register: http_download_again - -- name: assert download single file (idempotent) - assert: - that: - - not http_download_again is changed - -# Cannot use httpbin as the Last-Modified date is generated dynamically -- name: download file for force=no tests - win_get_url: - url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_get_url/SlimFTPd.exe - dest: '{{ testing_dir }}\output' - -- name: download single file with force no - win_get_url: - url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_get_url/SlimFTPd.exe - dest: '{{ testing_dir }}\output' - force: no - register: http_download_no_force - -- name: assert download single file with force no - assert: - that: - - http_download_no_force is not changed - -- name: manually change the content and last modified time on FTP source to older datetime - win_shell: | - $path = '{{ testing_dir }}\output' - Set-Content -LiteralPath $path -Value 'abc' - (Get-Item -LiteralPath $path).LastWriteTime = (Get-Date -Date "01/01/1970") - -- name: download newer file with force no - win_get_url: - url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_get_url/SlimFTPd.exe - dest: '{{ testing_dir }}\output' - force: no - register: http_download_newer_no_force - -- name: assert download newer file with force no - assert: - that: - - http_download_newer_no_force is changed - -- name: download file to directory - win_get_url: - url: https://{{ httpbin_host }}/image/png - dest: '{{ testing_dir }}' - register: http_download_to_directory - -- name: get result of download to directory - win_stat: - path: '{{ testing_dir }}\png' - register: http_download_to_directory_result - -- name: assert download file to directory - assert: - that: - - http_download_to_directory is changed - - http_download_to_directory_result.stat.exists - -- name: download to path with env var - win_get_url: - url: https://{{ httpbin_host }}/image/jpeg - dest: '%TEST_WIN_GET_URL%\jpeg.jpg' - register: http_download_with_env - environment: - TEST_WIN_GET_URL: '{{ testing_dir }}' - -- name: get result of download to path with env var - win_stat: - path: '{{ testing_dir }}\jpeg.jpg' - register: http_download_with_env_result - -- name: assert download to path with env var - assert: - that: - - http_download_with_env is changed - - http_download_with_env_result.stat.exists - -- name: fail when link returns 404 - win_get_url: - url: https://{{ httpbin_host }}/status/404 - dest: '{{ testing_dir }}\skynet_module.html' - ignore_errors: yes - register: fail_download_404 - -- name: assert fail when link returns 404 - assert: - that: - - fail_download_404 is not changed - - fail_download_404 is failed - - fail_download_404.status_code == 404 - -- name: fail when dest is an invalid path - win_get_url: - url: https://{{ httpbin_host }}/base64/YQ== - dest: Q:\Filez\Cyberdyne.html - register: fail_invalid_path - failed_when: '"The path ''Q:\Filez'' does not exist for destination ''Q:\Filez\Cyberdyne.html''" not in fail_invalid_path.msg' - -- name: test basic authentication - win_get_url: - url: http://{{ httpbin_host }}/basic-auth/username/password - dest: '{{ testing_dir }}\basic.txt' - url_username: username - url_password: password - register: basic_auth - -- name: assert test basic authentication - assert: - that: - - basic_auth is changed - - basic_auth.status_code == 200 - -# httpbin hidden-basic-auth returns 404 not found on auth failure which stops the automatic auth handler from working. -# Setting force_basic_auth=yes means the Basic auth header is sent in the original request not after a 401 response -- name: test force basic authentication - win_get_url: - url: http://{{ httpbin_host }}/hidden-basic-auth/username/password - dest: '{{ testing_dir }}\force-basic.txt' - url_username: username - url_password: password - force_basic_auth: yes - register: force_basic_auth - -- name: assert test force basic auth - assert: - that: - - force_basic_auth is changed - - force_basic_auth.status_code == 200 - -- name: timeout request - win_get_url: - url: https://{{ httpbin_host }}/delay/7 - dest: '{{ testing_dir }}\timeout.txt' - timeout: 3 - register: timeout_req - failed_when: 'timeout_req.msg != "Error downloading ''https://" + httpbin_host + "/delay/7'' to ''" + testing_dir + "\\timeout.txt'': The operation has timed out"' - -- name: send request with headers - win_get_url: - url: https://{{ httpbin_host }}/headers - dest: '{{ testing_dir }}\headers.txt' - headers: - testing: 123 - User-Agent: 'badAgent' - accept: 'text/html' - register: headers - -- name: get result of send request with headers - slurp: - path: '{{ testing_dir }}\headers.txt' - register: headers_actual - -- name: assert send request with headers - assert: - that: - - headers is changed - - headers.status_code == 200 - - (headers_actual.content | b64decode | from_json).headers.Testing == '123' - - (headers_actual.content | b64decode | from_json).headers["User-Agent"] == 'badAgent' - - (headers_actual.content | b64decode | from_json).headers.Accept == 'text/html' - -- name: test download follow with redirects - win_get_url: - url: https://{{ httpbin_host }}/redirect/2 - dest: '{{ testing_dir }}\redirects.txt' - register: redirection - -- name: assert download follow with redirects - assert: - that: - - redirection is changed - - redirection.status_code == 200 - -- name: test download follow without redirects - win_get_url: - url: https://{{ httpbin_host }}/redirect/2 - dest: '{{ testing_dir }}\no_redirection.txt' - follow_redirects: none - register: no_redirection - -- name: get result of test download follow without redirects - slurp: - path: '{{ testing_dir }}\no_redirection.txt' - register: no_redirection_actual - -- name: assert test download follow without redirects - assert: - that: - - no_redirection is changed - - no_redirection.status_code == 302 diff --git a/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl b/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl deleted file mode 100644 index ce2f712927..0000000000 --- a/test/integration/targets/win_get_url/templates/slimftpd.conf.tmpl +++ /dev/null @@ -1,28 +0,0 @@ -# http://www.wiki.uniformserver.com/index.php/SlimFTPd:_Config_File -BindInterface Local -BindPort 21 -CommandTimeout 300 -ConnectTimeout 15 -MaxConnections 20 -LookupHosts On - -<User "anonymous"> - Password "" - Mount / "{{ slimftpd_link | replace('\\', '\\\\') }}\\ftp" - Allow /anon All - Deny /user All - Deny /user-pass All -</User> - -<User "username"> - Mount / "{{ slimftpd_link | replace('\\', '\\\\') }}\\ftp" - Allow /anon All - Allow /user All - Deny /user-pass All -</User> - -<User "userpass"> - Password "password" - Mount / "{{ slimftpd_link | replace('\\', '\\\\') }}\\ftp" - Allow / All -</User> diff --git a/test/integration/targets/win_group/aliases b/test/integration/targets/win_group/aliases deleted file mode 100644 index 1eed2ecfaf..0000000000 --- a/test/integration/targets/win_group/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group1 -shippable/windows/smoketest diff --git a/test/integration/targets/win_group/defaults/main.yml b/test/integration/targets/win_group/defaults/main.yml deleted file mode 100644 index 2ab744e822..0000000000 --- a/test/integration/targets/win_group/defaults/main.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- - -test_win_group_name: Ansiblings -test_win_group_description: Test group for Ansible diff --git a/test/integration/targets/win_group/tasks/main.yml b/test/integration/targets/win_group/tasks/main.yml deleted file mode 100644 index f66e3c2e75..0000000000 --- a/test/integration/targets/win_group/tasks/main.yml +++ /dev/null @@ -1,101 +0,0 @@ -# test code for the slurp module when using winrm connection -# (c) 2015, Chris Church <cchurch@ansible.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: remove test group if it exists - win_group: - name: "{{test_win_group_name}}" - state: absent - -- name: create test group with missing name parameter - win_group: - description: "{{test_win_group_description}}" - register: win_group_create_noname - ignore_errors: true - -- name: check create result without name parameter - assert: - that: - - "win_group_create_noname is failed" - -- name: create test group with invalid state parameter - win_group: - name: "{{test_win_group_name}}" - state: "unknown" - register: win_group_create_invalid_state - ignore_errors: true - -- name: check create result with invalid state parameter - assert: - that: - - "win_group_create_invalid_state is failed" - -- name: create test group - win_group: - name: "{{test_win_group_name}}" - description: "{{test_win_group_description}}" - register: win_group_create - -- name: check create group results - assert: - that: - - "win_group_create is changed" - -- name: create test group again with same options - win_group: - name: "{{test_win_group_name}}" - description: "{{test_win_group_description}}" - state: "present" - register: win_group_create_again - -- name: check create group again results - assert: - that: - - "win_group_create_again is not changed" - -- name: create test group again but change description - win_group: - name: "{{test_win_group_name}}" - description: "{{test_win_group_description}} updated" - register: win_group_create_new_description - -- name: check create group results after updating description - assert: - that: - - "win_group_create_new_description is changed" - -- name: remove test group - win_group: - name: "{{test_win_group_name}}" - state: absent - register: win_group_remove - -- name: check remove group result - assert: - that: - - "win_group_remove is changed" - -- name: remove test group again - win_group: - name: "{{test_win_group_name}}" - state: absent - register: win_group_remove_again - -- name: check remove group again result - assert: - that: - - "win_group_remove_again is not changed" diff --git a/test/integration/targets/win_group_membership/aliases b/test/integration/targets/win_group_membership/aliases deleted file mode 100644 index 4c08975b17..0000000000 --- a/test/integration/targets/win_group_membership/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group6 diff --git a/test/integration/targets/win_group_membership/tasks/main.yml b/test/integration/targets/win_group_membership/tasks/main.yml deleted file mode 100644 index d26e2e6c96..0000000000 --- a/test/integration/targets/win_group_membership/tasks/main.yml +++ /dev/null @@ -1,47 +0,0 @@ -- name: Gather facts - setup: - -- name: Remove potentially leftover test group - win_group: &wg_absent - name: WinGroupMembershipTest - state: absent - -- name: Remove potentially leftover test user - win_user: &wu_absent - name: WinTestUser - state: absent - -- name: Add new test group - win_group: - name: WinGroupMembershipTest - state: present - -- name: Add new test user - win_user: - name: WinTestUser - password: "W1nGr0upM3mb3rsh1pT3$tP@$$w0rd" - state: present - -- name: Run tests for win_group_membership - block: - - - name: Test in normal mode - import_tasks: tests.yml - vars: - win_local_group: WinGroupMembershipTest - win_local_user: WinTestUser - in_check_mode: no - - - name: Test in check-mode - import_tasks: tests.yml - vars: - win_local_group: WinGroupMembershipTest - win_local_user: WinTestUser - in_check_mode: yes - check_mode: yes - -- name: Remove test group - win_group: *wg_absent - -- name: Remove test user - win_group: *wu_absent
\ No newline at end of file diff --git a/test/integration/targets/win_group_membership/tasks/tests.yml b/test/integration/targets/win_group_membership/tasks/tests.yml deleted file mode 100644 index 44a94a0473..0000000000 --- a/test/integration/targets/win_group_membership/tasks/tests.yml +++ /dev/null @@ -1,320 +0,0 @@ -# Test code for win_group_membership - -# Copyright: (c) 2017, Andrew Saraceni <andrew.saraceni@gmail.com> -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -- name: Look up built-in Administrator account name (-500 user whose domain == computer name) - raw: $machine_sid = (Get-CimInstance Win32_UserAccount -Filter "Domain='$env:COMPUTERNAME'")[0].SID -replace '(S-1-5-21-\d+-\d+-\d+)-\d+', '$1'; (Get-CimInstance Win32_UserAccount -Filter "SID='$machine_sid-500'").Name - check_mode: no - register: admin_account_result - -- set_fact: - admin_account_name: "{{ admin_account_result.stdout_lines[0] }}" - -- name: Remove potentially leftover group members - win_group_membership: - name: "{{ win_local_group }}" - members: - - "{{ admin_account_name }}" - - "{{ win_local_user }}" - - NT AUTHORITY\SYSTEM - - NT AUTHORITY\NETWORK SERVICE - state: absent - - -- name: Add user to fake group - win_group_membership: - name: FakeGroup - members: - - "{{ admin_account_name }}" - state: present - register: add_user_to_fake_group - failed_when: add_user_to_fake_group.changed != false or add_user_to_fake_group.msg != "Could not find local group FakeGroup" - - -- name: Add fake local user - win_group_membership: - name: "{{ win_local_group }}" - members: - - FakeUser - state: present - register: add_fake_local_user - failed_when: add_fake_local_user.changed != false or add_fake_local_user.msg is not search("account_name FakeUser is not a valid account, cannot get SID.*") - - -- name: Add users to group - win_group_membership: &wgm_present - name: "{{ win_local_group }}" - members: - - "{{ admin_account_name }}" - - "{{ win_local_user }}" - - NT AUTHORITY\SYSTEM - state: present - register: add_users_to_group - -- name: Test add_users_to_group (normal mode) - assert: - that: - - add_users_to_group.changed == true - - add_users_to_group.added == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - - add_users_to_group.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - when: not in_check_mode - -- name: Test add_users_to_group (check-mode) - assert: - that: - - add_users_to_group.changed == true - - add_users_to_group.added == [] - - add_users_to_group.members == [] - when: in_check_mode - - -- name: Add users to group (again) - win_group_membership: *wgm_present - register: add_users_to_group_again - -- name: Test add_users_to_group_again (normal mode) - assert: - that: - - add_users_to_group_again.changed == false - - add_users_to_group_again.added == [] - - add_users_to_group_again.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - when: not in_check_mode - - -- name: Add different syntax users to group (again) - win_group_membership: - <<: *wgm_present - members: - - '{{ ansible_hostname }}\{{ admin_account_name }}' - - '.\{{ win_local_user }}' - register: add_different_syntax_users_to_group_again - -- name: Test add_different_syntax_users_to_group_again (normal mode) - assert: - that: - - add_different_syntax_users_to_group_again.changed == false - - add_different_syntax_users_to_group_again.added == [] - - add_different_syntax_users_to_group_again.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - when: not in_check_mode - -- name: Test add_different_syntax_users_to_group_again (check-mode) - assert: - that: - - add_different_syntax_users_to_group_again.changed == true - - add_different_syntax_users_to_group_again.added == [] - - add_different_syntax_users_to_group_again.members == [] - when: in_check_mode - - -- name: Add another user to group - win_group_membership: &wgma_present - <<: *wgm_present - members: - - NT AUTHORITY\NETWORK SERVICE - register: add_another_user_to_group - -- name: Test add_another_user_to_group (normal mode) - assert: - that: - - add_another_user_to_group.changed == true - - add_another_user_to_group.added == ["NT AUTHORITY\\NETWORK SERVICE"] - - add_another_user_to_group.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM", "NT AUTHORITY\\NETWORK SERVICE"] - when: not in_check_mode - -- name: Test add_another_user_to_group (check-mode) - assert: - that: - - add_another_user_to_group.changed == true - - add_another_user_to_group.added == [] - - add_another_user_to_group.members == [] - when: in_check_mode - - -- name: Add another user to group (again) - win_group_membership: *wgma_present - register: add_another_user_to_group_again - -- name: Test add_another_user_to_group_1_again (normal mode) - assert: - that: - - add_another_user_to_group_again.changed == false - - add_another_user_to_group_again.added == [] - - add_another_user_to_group_again.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM", "NT AUTHORITY\\NETWORK SERVICE"] - when: not in_check_mode - - -- name: Remove users from group - win_group_membership: &wgm_absent - <<: *wgm_present - state: absent - register: remove_users_from_group - -- name: Test remove_users_from_group (normal mode) - assert: - that: - - remove_users_from_group.changed == true - - remove_users_from_group.removed == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - - remove_users_from_group.members == ["NT AUTHORITY\\NETWORK SERVICE"] - when: not in_check_mode - -- name: Test remove_users_from_group (check-mode) - assert: - that: - - remove_users_from_group.changed == false - - remove_users_from_group.removed == [] - - remove_users_from_group.members == [] - when: in_check_mode - - -- name: Remove users from group (again) - win_group_membership: *wgm_absent - register: remove_users_from_group_again - -- name: Test remove_users_from_group_again (normal mode) - assert: - that: - - remove_users_from_group_again.changed == false - - remove_users_from_group_again.removed == [] - - remove_users_from_group_again.members == ["NT AUTHORITY\\NETWORK SERVICE"] - when: not in_check_mode - - -- name: Remove different syntax users from group (again) - win_group_membership: - <<: *wgm_absent - members: - - '{{ ansible_hostname }}\{{ admin_account_name }}' - - '.\{{ win_local_user }}' - register: remove_different_syntax_users_from_group_again - -- name: Test remove_different_syntax_users_from_group_again (normal mode) - assert: - that: - - remove_different_syntax_users_from_group_again.changed == false - - remove_different_syntax_users_from_group_again.removed == [] - - remove_different_syntax_users_from_group_again.members == ["NT AUTHORITY\\NETWORK SERVICE"] - when: not in_check_mode - -- name: Test add_different_syntax_users_to_group_again (check-mode) - assert: - that: - - remove_different_syntax_users_from_group_again.changed == false - - remove_different_syntax_users_from_group_again.removed == [] - - remove_different_syntax_users_from_group_again.members == [] - when: in_check_mode - - -- name: Remove another user from group - win_group_membership: &wgma_absent - <<: *wgm_absent - members: - - NT AUTHORITY\NETWORK SERVICE - register: remove_another_user_from_group - -- name: Test remove_another_user_from_group (normal mode) - assert: - that: - - remove_another_user_from_group.changed == true - - remove_another_user_from_group.removed == ["NT AUTHORITY\\NETWORK SERVICE"] - - remove_another_user_from_group.members == [] - when: not in_check_mode - -- name: Test remove_another_user_from_group (check-mode) - assert: - that: - - remove_another_user_from_group.changed == false - - remove_another_user_from_group.removed == [] - - remove_another_user_from_group.members == [] - when: in_check_mode - - -- name: Remove another user from group (again) - win_group_membership: *wgma_absent - register: remove_another_user_from_group_again - -- name: Test remove_another_user_from_group_again (normal mode) - assert: - that: - - remove_another_user_from_group_again.changed == false - - remove_another_user_from_group_again.removed == [] - - remove_another_user_from_group_again.members == [] - when: not in_check_mode - - -- name: Setup users for pure testing - win_group_membership: - <<: *wgm_present - members: - - "{{ admin_account_name }}" - - NT AUTHORITY\NETWORK SERVICE - - -- name: Define users as pure - win_group_membership: &wgm_pure - <<: *wgm_present - state: pure - register: define_users_as_pure - -- name: Test define_users_as_pure (normal mode) - assert: - that: - - define_users_as_pure.changed == true - - define_users_as_pure.added == ["{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - - define_users_as_pure.removed == ["NT AUTHORITY\\NETWORK SERVICE"] - - define_users_as_pure.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - when: not in_check_mode - -- name: Test define_users_as_pure (check-mode) - assert: - that: - - define_users_as_pure.changed == true - - define_users_as_pure.added == [] - - define_users_as_pure.removed == [] - - define_users_as_pure.members == [] - when: in_check_mode - - -- name: Define users as pure (again) - win_group_membership: *wgm_pure - register: define_users_as_pure_again - -- name: Test define_users_as_pure_again (normal mode) - assert: - that: - - define_users_as_pure_again.changed == false - - define_users_as_pure_again.added == [] - - define_users_as_pure_again.removed == [] - - define_users_as_pure_again.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}", "NT AUTHORITY\\SYSTEM"] - when: not in_check_mode - - -- name: Define different syntax users as pure - win_group_membership: - <<: *wgm_pure - members: - - '{{ ansible_hostname }}\{{ admin_account_name }}' - - '.\{{ win_local_user }}' - register: define_different_syntax_users_as_pure - -- name: Test define_different_syntax_users_as_pure (normal mode) - assert: - that: - - define_different_syntax_users_as_pure.changed == true - - define_different_syntax_users_as_pure.added == [] - - define_different_syntax_users_as_pure.removed == ["NT AUTHORITY\\SYSTEM"] - - define_different_syntax_users_as_pure.members == ["{{ ansible_hostname }}\\{{ admin_account_name }}", "{{ ansible_hostname }}\\{{ win_local_user }}"] - when: not in_check_mode - -- name: Test define_different_syntax_users_as_pure (check-mode) - assert: - that: - - define_different_syntax_users_as_pure.changed == true - - define_different_syntax_users_as_pure.added == [] - - define_different_syntax_users_as_pure.removed == [] - - define_different_syntax_users_as_pure.members == [] - when: in_check_mode - - -- name: Teardown remaining pure users - win_group_membership: *wgm_absent
\ No newline at end of file diff --git a/test/integration/targets/win_hostname/aliases b/test/integration/targets/win_hostname/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_hostname/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_hostname/defaults/main.yml b/test/integration/targets/win_hostname/defaults/main.yml deleted file mode 100644 index dfc956db29..0000000000 --- a/test/integration/targets/win_hostname/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -test_win_hostname_name: abcdef-123 diff --git a/test/integration/targets/win_hostname/tasks/main.yml b/test/integration/targets/win_hostname/tasks/main.yml deleted file mode 100644 index 6f4df9be77..0000000000 --- a/test/integration/targets/win_hostname/tasks/main.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: get the current hostname - win_command: hostname - register: current_hostname - -- block: - - name: run tests - include_tasks: test.yml - - always: - - name: reset the hostname back to the original - win_hostname: - name: '{{current_hostname.stdout_lines[0]}}' - register: reset_hostname - - - name: reboot if required - win_reboot: - when: reset_hostname.reboot_required diff --git a/test/integration/targets/win_hostname/tasks/test.yml b/test/integration/targets/win_hostname/tasks/test.yml deleted file mode 100644 index 6c3c247a04..0000000000 --- a/test/integration/targets/win_hostname/tasks/test.yml +++ /dev/null @@ -1,56 +0,0 @@ ---- -- name: fail to set hostname to an invalid name - win_hostname: - name: invalid/name - register: fail_hostname - failed_when: '"Failed to rename computer to ''invalid/name''" not in fail_hostname.msg' - -- name: change the hostname (check) - win_hostname: - name: '{{test_win_hostname_name}}' - register: change_hostname_check - check_mode: yes - -- name: get actual hostname - win_shell: $env:COMPUTERNAME - register: change_hostname_actual_check - -- name: assert change the hostname (check) - assert: - that: - - change_hostname_check is changed - - change_hostname_check.old_name|upper != test_win_hostname_name|upper - - change_hostname_check.reboot_required - - change_hostname_actual_check.stdout_lines[0]|upper != test_win_hostname_name|upper - -- name: change the hostname - win_hostname: - name: '{{test_win_hostname_name}}' - register: change_hostname - -- name: reboot after changing the hostname - win_reboot: - -- name: get actual hostname - win_shell: $env:COMPUTERNAME - register: change_hostname_actual - -- name: assert change the hostname - assert: - that: - - change_hostname is changed - - change_hostname.old_name|upper == change_hostname_check.old_name|upper - - change_hostname.reboot_required - - change_hostname_actual.stdout_lines[0]|upper == test_win_hostname_name|upper - -- name: change the hostname (idempotent) - win_hostname: - name: '{{test_win_hostname_name}}' - register: change_hostname_again - -- name: assert change the hostname (idempotent) - assert: - that: - - not change_hostname_again is changed - - change_hostname_again.old_name|upper == test_win_hostname_name|upper - - not change_hostname_again.reboot_required diff --git a/test/integration/targets/win_optional_feature/aliases b/test/integration/targets/win_optional_feature/aliases deleted file mode 100644 index 9ad549d4a6..0000000000 --- a/test/integration/targets/win_optional_feature/aliases +++ /dev/null @@ -1,3 +0,0 @@ -shippable/windows/group2 -skip/windows/2008 -skip/windows/2008-R2 diff --git a/test/integration/targets/win_optional_feature/tasks/main.yml b/test/integration/targets/win_optional_feature/tasks/main.yml deleted file mode 100644 index 556590cee4..0000000000 --- a/test/integration/targets/win_optional_feature/tasks/main.yml +++ /dev/null @@ -1,40 +0,0 @@ -# Test code for win_optional_feature module -# Copyright: (c) 2019, Carson Anderson <rcanderson23@gmail.com> - -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: check if host supports module - win_shell: if (Get-Command -Name Enable-WindowsOptionalFeature -ErrorAction SilentlyContinue) { $true } else { $false } - register: run_tests - -- name: run tests - when: run_tests.stdout | trim | bool - block: - - name: ensure we start test with removed features - win_optional_feature: - name: - - SimpleTCP - - TelnetClient - state: absent - - include_tasks: tests.yml - - always: - - name: make sure test features have been removed after test - win_optional_feature: - name: - - SimpleTCP - - TelnetClient - state: absent diff --git a/test/integration/targets/win_optional_feature/tasks/tests.yml b/test/integration/targets/win_optional_feature/tasks/tests.yml deleted file mode 100644 index ebec9e8d34..0000000000 --- a/test/integration/targets/win_optional_feature/tasks/tests.yml +++ /dev/null @@ -1,151 +0,0 @@ -# Test code for win_optional_feature module -# Copyright: (c) 2019, Carson Anderson <rcanderson23@gmail.com> - -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: fail with invalid feature name - win_optional_feature: - name: - - TelnetClient - - FakeFeature - state: present - register: invalid_name - failed_when: invalid_name.msg != "Failed to find feature 'FakeFeature'" - -- name: run with check_mode - win_optional_feature: - name: TelnetClient - state: present - include_parent: true - check_mode: yes - register: feature_check - -- name: assert check_mode - assert: - that: - - feature_check.changed - -- name: run without check_mode - win_optional_feature: - name: TelnetClient - state: present - include_parent: true - register: real_feature_check - -- name: assert feature installed - assert: - that: - - real_feature_check.changed - -- name: test idempotence for install - win_optional_feature: - name: TelnetClient - state: present - include_parent: true - register: real_feature_check - -- name: assert idempotence - assert: - that: - - not real_feature_check.changed - -- name: install feature with list - win_optional_feature: - name: - - SimpleTCP - - TelnetClient - state: present - include_parent: true - register: install_list - -- name: assert install feature with list - assert: - that: - - install_list is changed - -- name: install feature with list (idempotent) - win_optional_feature: - name: - - SimpleTCP - - TelnetClient - state: present - include_parent: true - register: install_list_again - -- name: assert install feature with list (idempotent) - assert: - that: - - not install_list_again is changed - -- name: removal run with check_mode - win_optional_feature: - name: TelnetClient - state: absent - check_mode: yes - register: feature_check - -- name: assert removal check_mode - assert: - that: - - feature_check.changed - -- name: remove feature - win_optional_feature: - name: TelnetClient - state: absent - register: real_feature_check - -- name: assert feature removed - assert: - that: - - real_feature_check.changed - -- name: test idempotence for removal - win_optional_feature: - name: TelnetClient - state: absent - register: real_feature_check - -- name: assert idempotence - assert: - that: - - not real_feature_check.changed - -- name: remove feature with list - win_optional_feature: - name: - - SimpleTCP - - TelnetClient - state: absent - register: remove_feature_list - -- name: assert remove feature with list - assert: - that: - - remove_feature_list is changed - -- name: remove feature with list (idempotent) - win_optional_feature: - name: - - SimpleTCP - - TelnetClient - state: absent - register: remove_feature_list_again - -- name: assert remove feature with list (idempotent) - assert: - that: - - not remove_feature_list_again is changed diff --git a/test/integration/targets/win_owner/aliases b/test/integration/targets/win_owner/aliases deleted file mode 100644 index 641468f584..0000000000 --- a/test/integration/targets/win_owner/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group5 -shippable/windows/smoketest diff --git a/test/integration/targets/win_owner/defaults/main.yml b/test/integration/targets/win_owner/defaults/main.yml deleted file mode 100644 index a3882a95f6..0000000000 --- a/test/integration/targets/win_owner/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -test_win_owner_path: C:\ansible\win_owner .ÅÑŚÌβŁÈ [$!@^&test(;)] diff --git a/test/integration/targets/win_owner/tasks/main.yml b/test/integration/targets/win_owner/tasks/main.yml deleted file mode 100644 index 4b6046f409..0000000000 --- a/test/integration/targets/win_owner/tasks/main.yml +++ /dev/null @@ -1,209 +0,0 @@ ---- -# Setup tests -# Use single task to save on CI runtime -- name: create test files - win_shell: | - $folders = @( - "folder", - "folder\folder1", - "folder\folder2", - "folder with space", - "folder with space\folder1", - "folder with space\folder2" - ) - $tmp_dir = '{{ test_win_owner_path }}' - if (Test-Path -LiteralPath $tmp_dir) { - Remove-Item -LiteralPath $tmp_dir -Force -Recurse - } - New-Item -Path $tmp_dir -ItemType Directory - - foreach ($folder in $folders) { - New-Item -Path "$tmp_dir\$folder" -ItemType Directory - } - $files = @( - "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" - ) - foreach ($file in $files) { - Set-Content -LiteralPath "$tmp_dir\$file" -Value "content" - } - -# 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 is not search("account_name invalid-user is not a valid account, cannot get SID.*") - -- 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_shell: (Get-Acl -LiteralPath '{{test_win_owner_path}}\\folder').Owner - register: actual_defaults_check - -- name: assert set owner defaults check - assert: - that: - - defaults_check is 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_shell: (Get-Acl -LiteralPath '{{test_win_owner_path}}\\folder').Owner - register: actual_defaults - -- name: assert set owner defaults - assert: - that: - - defaults is 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: assert set owner defaults again - assert: - that: - - defaults_again is not changed - -- 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_shell: (Get-Acl -LiteralPath '{{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 is 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_shell: (Get-Acl -LiteralPath '{{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 is changed - -- name: set owner recurse again - win_owner: - path: "{{test_win_owner_path}}\\folder" - user: SYSTEM - recurse: True - register: recurse_again - -- name: assert set owner recurse again - assert: - that: - - recurse_again is not changed - -- name: create test user - win_user: - name: test win owner - password: E1K0-O8b1-c8M9-c6D5 - register: test_user - -- 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_shell: | - $owner = (Get-Acl -LiteralPath '{{ test_win_owner_path }}\{{ item }}').Owner - $account = New-Object -TypeName System.Security.Principal.NTAccount -ArgumentList $owner - $account.Translate([System.Security.Principal.SecurityIdentifier]).Value - register: actual_recurse_space - failed_when: actual_recurse_space.stdout_lines[0] != test_user.sid - 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 is 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: assert set owner with space recurse again - assert: - that: - - recurse_space_again is not 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 diff --git a/test/integration/targets/win_package/aliases b/test/integration/targets/win_package/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_package/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_package/defaults/main.yml b/test/integration/targets/win_package/defaults/main.yml deleted file mode 100644 index 87d6ec8c16..0000000000 --- a/test/integration/targets/win_package/defaults/main.yml +++ /dev/null @@ -1,35 +0,0 @@ ---- -test_path: '{{ remote_tmp_dir }}\win_package .ÅÑŚÌβŁÈ [$!@^&test(;)]' - -# MSI packages -good_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_package/good.msi -reboot_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_package/reboot.msi -bad_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/roles/test_win_package/bad.msi - -# MSIX tools -makeappx_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/win_package/makeappx.zip - -# MSP packages - https://wixtoolset.org/documentation/manual/v3/patching/patch_building.html -patch_msi_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/win_package/patch.msi -patch_msp_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/win_package/patch.msp -patch_install_file: C:\Program Files (x86)\Patch Sample Directory\Sample.txt - -good_id: '{223D9A13-653B-4231-A365-EDDC30B4F226}' -reboot_id: '{223D9A13-653B-4231-A365-EDDC30B4F227}' -patch_product_id: '{48C49ACE-90CF-4161-9C6E-9162115A54DD}' -patch_patch_id: '{224C316C-5894-4771-BABF-21A3AC1F75FF}' -msix_id: WinPackageMsix -msixbundle_id: WinPackageBundleMsix -appx_id: WinPackageAppx -appxbundle_id: WinPackageBundleAppx -registry_id: WinPackageRegistry - -all_ids: -- '{{ good_id }}' -- '{{ reboot_id }}' -- '{{ patch_product_id }}' -- '{{ msix_id }}' -- '{{ msixbundle_id }}' -- '{{ appx_id }}' -- '{{ appxbundle_id }}' -- '{{ registry_id }}' diff --git a/test/integration/targets/win_package/files/bad.wsx b/test/integration/targets/win_package/files/bad.wsx deleted file mode 100644 index 5014610940..0000000000 --- a/test/integration/targets/win_package/files/bad.wsx +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> - <Product Id="223D9A13-653B-4231-A365-EDDC30B4F228" UpgradeCode="575580C0-AFA1-4C17-8A9C-3CB0CEDC6A06" Name="Bovine University" Manufacturer="Ansible" Version="1.0.0" Language="1033" Codepage="1252"> - <Package InstallerVersion="200" Compressed="yes" Comments="When I grow up I want to go to Bovine University" /> - <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> - </Product> -</Wix> diff --git a/test/integration/targets/win_package/files/good.wsx b/test/integration/targets/win_package/files/good.wsx deleted file mode 100644 index ee90745687..0000000000 --- a/test/integration/targets/win_package/files/good.wsx +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> - <Product Id="223D9A13-653B-4231-A365-EDDC30B4F226" UpgradeCode="575580C0-AFA1-4C17-8A9C-3CB0CEDC6A05" Name="Bovine University" Manufacturer="Ansible" Version="1.0.0" Language="1033" Codepage="1252"> - <Package InstallerVersion="200" Compressed="yes" Comments="When I grow up I want to go to Bovine University" /> - <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> - <Directory Id="TARGETDIR" Name="SourceDir"> - <Directory Id="ProgramFilesFolder"> - <Directory Id="INSTALLDIR" Name="Bovine University"> - <Component Id="MooFiles" Guid="D7BC586D-A23C-4002-BC20-76579F25C67D"> - <File Id="MooFile" Source="moo.exe" /> - </Component> - <Component Id="CowFiles" Guid="D1801B2D-8E54-4F19-8B14-A42D8A122A24"> - <File Id="CowFile" Source="cow.exe" /> - </Component> - </Directory> - </Directory> - </Directory> - - <Feature Id="Moo" Level="1"> - <ComponentRef Id="MooFiles" /> - </Feature> - <Feature Id="Cow" Level="1"> - <ComponentRef Id="CowFiles" /> - </Feature> - </Product> -</Wix> diff --git a/test/integration/targets/win_package/files/reboot.wsx b/test/integration/targets/win_package/files/reboot.wsx deleted file mode 100644 index c6ded2a67d..0000000000 --- a/test/integration/targets/win_package/files/reboot.wsx +++ /dev/null @@ -1,30 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> - <Product Id="223D9A13-653B-4231-A365-EDDC30B4F227" UpgradeCode="575580C0-AFA1-4C17-8A9C-3CB0CEDC6A06" Name="Bovine University" Manufacturer="Ansible" Version="1.0.0" Language="1033" Codepage="1252"> - <Package InstallerVersion="200" Compressed="yes" Comments="When I grow up I want to go to Bovine University" /> - <Media Id="1" Cabinet="product.cab" EmbedCab="yes" /> - <Directory Id="TARGETDIR" Name="SourceDir"> - <Directory Id="ProgramFilesFolder"> - <Directory Id="INSTALLDIR" Name="Bovine University"> - <Component Id="MooFiles" Guid="D7BC586D-A23C-4002-BC20-76579F25C67D"> - <File Id="MooFile" Source="moo.exe" /> - </Component> - <Component Id="CowFiles" Guid="D1801B2D-8E54-4F19-8B14-A42D8A122A24"> - <File Id="CowFile" Source="cow.exe" /> - </Component> - </Directory> - </Directory> - </Directory> - - <Feature Id="Moo" Level="1"> - <ComponentRef Id="MooFiles" /> - </Feature> - <Feature Id="Cow" Level="1"> - <ComponentRef Id="CowFiles" /> - </Feature> - - <InstallExecuteSequence> - <ScheduleReboot After="InstallFinalize" /> - </InstallExecuteSequence> - </Product> -</Wix> diff --git a/test/integration/targets/win_package/handlers/main.yml b/test/integration/targets/win_package/handlers/main.yml deleted file mode 100644 index 41cdb8179e..0000000000 --- a/test/integration/targets/win_package/handlers/main.yml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: remove trusted root cert - win_certificate_store: - thumbprint: '{{ test_win_package_msix_packages.thumbprint }}' - store_location: LocalMachine - store_name: Root - state: absent - -- name: remove sideloading mode for msix - win_regedit: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock - name: AllowAllTrustedApps - data: 0 - type: dword - state: present diff --git a/test/integration/targets/win_package/library/win_make_appx.ps1 b/test/integration/targets/win_package/library/win_make_appx.ps1 deleted file mode 100644 index eaf6e8e1ee..0000000000 --- a/test/integration/targets/win_package/library/win_make_appx.ps1 +++ /dev/null @@ -1,194 +0,0 @@ -#!powershell - -# Copyright: (c) 2020, Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -#AnsibleRequires -CSharpUtil Ansible.Basic -#Requires -Module Ansible.ModuleUtils.ArgvParser -#Requires -Module Ansible.ModuleUtils.CommandUtil - -$spec = @{ - options = @{ - packages = @{ - type = "list" - elements = "dict" - options = @{ - identity = @{ type = "str"; required = $true } - version = @{ type = "str"; required = $true } - architecture = @{ type = "str" } - resource_id = @{ type = "str" } - min_version = @{ type = "str"; default = "10.0.17763.0" } - max_version = @{ type = "str"; default = "10.0.18362.0" } - filename = @{ type = "str"; required = $true } - } - } - bundles = @{ - type = "list" - elements = "dict" - options = @{ - files = @{ type = "list"; elements = "str"; required = $true } - filename = @{ type = "str"; required = $true } - } - } - publisher = @{ type = "str"; required = $true } - path = @{ type = "str"; required = $true } - makeappx_path = @{ type = "str"; required = $true } - signtool_path = @{ type = "str"; required = $true } - } -} - -$module = [Ansible.Basic.AnsibleModule]::Create($args, $spec) - -$packages = $module.Params.packages -$bundles = $module.Params.bundles -$publisher = $module.Params.publisher -$path = $module.Params.path -$makeappxPath = $module.Params.makeappx_path -$signtoolPath = $module.Params.signtool_path - -if (-not (Test-Path -LiteralPath $path)) { - $module.FailJson("The path at '$path' does not exist") -} - -$manifest = @' -<?xml version="1.0" encoding="utf-8"?> -<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"> - <Identity Name="{0}" Version="{1}" Publisher="{2}"{3}{4} /> - <Properties> - <DisplayName>{0}DisplayName</DisplayName> - <PublisherDisplayName>PublisherDisplayName</PublisherDisplayName> - <Description>Test MSIX Package for win_package</Description> - <Logo>icon.png</Logo> - </Properties> - <Resources> - <Resource Language="en-us" /> - </Resources> - <Dependencies> - <TargetDeviceFamily Name="Windows.Desktop" MinVersion="{5}" MaxVersionTested="{6}" /> - </Dependencies> - <Capabilities> - <rescap:Capability Name="runFullTrust"/> - </Capabilities> - <Applications> - <Application Id="MsixPackage" Executable="test.exe" EntryPoint="Windows.FullTrustApplication"> - <uap:VisualElements DisplayName="{0}AppDisplayName" Description="Description" Square150x150Logo="icon.png" Square44x44Logo="icon.png" BackgroundColor="#464646"/> - </Application> - </Applications> -</Package> -'@ - -# bytes of http://1x1px.me/000000-0.png -$iconBytes = [System.Convert]::FromBase64String('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGNiYAAAAAkAAxkR2eQAAAAASUVORK5CYII=') - -$certParams = @{ - # Can only create in the My store, so store it there temporarily. - CertStoreLocation = 'Cert:\CurrentUser\My' - FriendlyName = 'win_package test' - KeyUsage = 'DigitalSignature' - Subject = $publisher - TextExtension = @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}") - Type = 'Custom' -} -$cert = New-SelfSignedCertificate @certParams - -try { - # Need to create a temporary pfx for signtool.exe and we need to import the cert to the Trusted Root store. - $module.Result.thumbprint = $cert.Thumbprint - $certPath = Join-Path -Path $module.Tmpdir -ChildPath 'cert.pfx' - $certPassword = ([char[]]([char]33..[char]126) | Sort-Object {Get-Random})[0..16] -join '' - $certPasswordSS = ConvertTo-SecureString -String $certPassword -AsPlainText -Force - $null = $cert | Export-PfxCertificate -FilePath $certPath -Password $certPasswordSS - - $importParams = @{ - FilePath = $certPath - CertStoreLocation = 'Cert:\LocalMachine\Root' - Password = $certPasswordSS - } - $null = Import-PfxCertificate @importParams -} finally { - $cert | Remove-Item -Force -} - -$module.Result.changed = $true - -foreach ($info in $packages) { - $architectureAttribute = "" - if ($info.architecture) { - $architectureAttribute = " ProcessorArchitecture=`"$($info.architecture)`"" - } - - $resourceIdAttribute = "" - if ($info.resource_id) { - $resourceIdAttribute = " ResourceId=`"$($info.resource_id)`"" - } - - $xml = $manifest -f @( - $info.identity, $info.version, $publisher, $architectureAttribute, $resourceIdAttribute, $info.min_version, - $info.max_version - ) - - $tempDir = Join-Path -Path $module.Tmpdir -ChildPath ([System.IO.Path]::GetRandomFileName()) - New-Item -Path $tempDir -ItemType Directory > $null - Set-Content -LiteralPath (Join-Path -Path $tempDir -ChildPath 'AppxManifest.xml') -Value $xml - Set-Content -LiteralPath (Join-Path -Path $tempDir -ChildPath 'icon.png') -Value $iconBytes - Set-Content -LiteralPath (Join-Path -Path $tempDir -ChildPath 'test.exe') -Value '' - - $outPath = Join-Path -Path $path -ChildPath $info.filename - $makeArguments = @($makeappxPath, 'pack', '/d', $tempDir, '/p', $outPath, '/o') - $res = Run-Command -command (Argv-ToString -arguments $makeArguments) - - if ($res.rc -ne 0) { - $module.Result.rc = $res.rc - $module.Result.stdout = $res.stdout - $module.Result.stderr = $res.stderr - $module.FailJson("Failed to make package for $($info.filename): see stdout and stderr for more info") - } - - Remove-Item -Literalpath $tempDir -Force -Recurse - - $signArguments = @($signtoolPath, 'sign', '/a', '/v', '/fd', 'SHA256', '/f', $certPath, '/p', $certPassword, - $outPath) - $res = Run-Command -command (Argv-ToString -arguments $signArguments) - - if ($res.rc -ne 0) { - $module.Result.rc = $res.rc - $module.Result.stdout = $res.stdout - $module.Result.stderr = $res.stderr - $module.FailJson("Failed to sign package for $($info.filename): see stdout and stderr for more info") - } -} - -foreach ($info in $bundles) { - $tempDir = Join-Path -Path $module.Tmpdir -ChildPath ([System.IO.Path]::GetRandomFileName()) - New-Item -Path $tempDir -ItemType Directory > $null - foreach ($name in $info.files) { - $sourcePath = Join-Path -Path $path -ChildPath $name - $targetPath = Join-Path -Path $tempDir -ChildPath $name - Move-Item -LiteralPath $sourcePath -Destination $targetPath - } - $outPath = Join-Path -Path $path -ChildPath $info.filename - $makeArguments = @($makeappxPath, 'bundle', '/d', $tempDir, '/p', $outPath, '/o') - $res = Run-Command -command (Argv-ToString -arguments $makeArguments) - - if ($res.rc -ne 0) { - $module.Result.rc = $res.rc - $module.Result.stdout = $res.stdout - $module.Result.stderr = $res.stderr - $module.FailJson("Failed to make bundle for $($info.filename): see stdout and stderr for more info") - } - - Remove-Item -LiteralPath $tempDir -Force -Recurse - - $signArguments = @($signtoolPath, 'sign', '/a', '/v', '/fd', 'SHA256', '/f', $certPath, '/p', $certPassword, - $outPath) - $res = Run-Command -command (Argv-ToString -arguments $signArguments) - - if ($res.rc -ne 0) { - $module.Result.rc = $res.rc - $module.Result.stdout = $res.stdout - $module.Result.stderr = $res.stderr - $module.FailJson("Failed to sign bundle for $($info.filename): see stdout and stderr for more info") - } -} - -$module.ExitJson() diff --git a/test/integration/targets/win_package/meta/main.yml b/test/integration/targets/win_package/meta/main.yml deleted file mode 100644 index 9f37e96cd9..0000000000 --- a/test/integration/targets/win_package/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: -- setup_remote_tmp_dir diff --git a/test/integration/targets/win_package/tasks/failure_tests.yml b/test/integration/targets/win_package/tasks/failure_tests.yml deleted file mode 100644 index e37e757789..0000000000 --- a/test/integration/targets/win_package/tasks/failure_tests.yml +++ /dev/null @@ -1,60 +0,0 @@ -# these tests are invalid arguments and failure states for win_package ---- -- name: fail to install broken msi - win_package: - path: '{{ test_path }}\bad.msi' - state: present - register: fail_bad_rc - failed_when: "'unexpected rc from' not in fail_bad_rc.msg and fail_bad_rc.rc != 1603" - -- name: fail when not using an int for a return code - win_package: - path: '{{ test_path }}\good.msi' - state: present - expected_return_code: 0,abc - register: fail_invalid_return_code - failed_when: "'argument for list entry expected_return_code is of type System>String and we were unable to convert to in' in fail_invalid_return_code.msg" - -- name: fail when path is not set and state!= absent - win_package: - state: present - register: fail_no_path - failed_when: 'fail_no_path.msg != "state is present but all of the following are missing: path"' - -- name: fail when path is not set and state=absent but product_id is null - win_package: - state: absent - register: fail_no_path_state_absent_no_id - failed_when: 'fail_no_path_state_absent_no_id.msg != "state is absent but any of the following are missing: path, product_id"' - -- name: fail invalid local path - win_package: - path: '{{ test_path }}\no file.msi' - state: present - register: fail_invalid_local_path - failed_when: fail_invalid_local_path.msg != "the file at the path '" + test_path + "\\no file.msi' cannot be reached" - -- name: fail invalid URL - win_package: - path: http://fakeurl/file.msi - product_id: 'id' - state: present - register: fail_invalid_url_path - failed_when: "\"The remote name could not be resolved: 'fakeurl'\" not in fail_invalid_url_path.msg" - -- name: fail to check version without creates_path - win_package: - path: '{{ test_path }}\good.msi' - state: present - creates_version: 1 - register: fail_creates_version_without_path - failed_when: "fail_creates_version_without_path.msg != \"missing parameter(s) required by 'creates_version': creates_path\"" - -- name: fail to check version without when path is not a file - win_package: - path: '{{ test_path }}\good.msi' - state: present - creates_path: C:\Windows - creates_version: 1 - register: fail_creates_version_not_a_file - failed_when: "'creates_path must be a file not a directory when creates_version is set' not in fail_creates_version_not_a_file.msg" diff --git a/test/integration/targets/win_package/tasks/main.yml b/test/integration/targets/win_package/tasks/main.yml deleted file mode 100644 index 250bc8307f..0000000000 --- a/test/integration/targets/win_package/tasks/main.yml +++ /dev/null @@ -1,71 +0,0 @@ ---- -- name: ensure testing folder exists - win_file: - path: '{{ test_path }}' - state: directory - -# Some of the registry_tests.yml create a badly formed unisntall string so remove the reg entry in case the test -# didn't get to cleaning itself up -- name: remove registry package path - win_regedit: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - state: absent - -- name: download packages from S3 bucket - win_get_url: - url: '{{ item.url }}' - dest: '{{ test_path }}\{{ item.name }}' - with_items: - - url: '{{ good_url }}' - name: good.msi - - url: '{{ reboot_url }}' - name: reboot.msi - - url: '{{ bad_url }}' - name: bad.msi - - url: '{{ patch_msi_url }}' - name: patch.msi - - url: '{{ patch_msp_url }}' - name: patch.msp - -- name: make sure all test packages are uninstalled before test - win_package: - product_id: '{{ item }}' - state: absent - with_items: '{{ all_ids }}' - -- block: - - name: run tests for expected failures - include_tasks: failure_tests.yml - - - name: run tests for msi files and URL paths - include_tasks: msi_tests.yml - - # The msix test setup will only work on Server 2019 or newer so conditionally run this - - name: check if we can run the msix tests - win_shell: | - $osVersion = [Version](Get-Item -LiteralPath "$env:SystemRoot\System32\kernel32.dll").VersionInfo.ProductVersion - $osVersion -ge [Version]"10.0.17763" - register: can_run_msix - changed_when: False - - - name: run tests for msix packages - include_tasks: msix_tests.yml - when: can_run_msix.stdout | trim | bool - - - name: run tests for msp packages - include_tasks: msp_tests.yml - - - name: run tests for registry packages - include_tasks: registry_tests.yml - - always: - - name: remove registry package path - win_regedit: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - state: absent - - - name: make sure all test packages are uninstalled after test - win_package: - product_id: '{{ item }}' - state: absent - with_items: '{{ all_ids }}' diff --git a/test/integration/targets/win_package/tasks/msi_tests.yml b/test/integration/targets/win_package/tasks/msi_tests.yml deleted file mode 100644 index 4c76084dd1..0000000000 --- a/test/integration/targets/win_package/tasks/msi_tests.yml +++ /dev/null @@ -1,511 +0,0 @@ ---- -# this test just makes sure the task doesn't fail when we set out expected rc -- name: install broken msi override expected rc - win_package: - path: '{{ test_path }}\bad.msi' - state: present - expected_return_code: 0,1603 - -- name: install local msi (check mode) - win_package: - path: '{{ test_path }}\good.msi' - state: present - register: install_local_msi_check - check_mode: yes - -- name: get result of install local msi (check mode) - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: install_local_msi_actual_check - -- name: assert install local msi (check mode) - assert: - that: - - install_local_msi_check is changed - - install_local_msi_check.reboot_required == False - - install_local_msi_actual_check.exists == False - -- name: install local msi with log - win_package: - path: '{{ test_path }}\good.msi' - state: present - log_path: '{{ test_path }}\msi.log' - register: install_local_msi - -- name: get result of install local msi - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: install_local_msi_actual - -- name: assert install local msi - assert: - that: - - install_local_msi is changed - - install_local_msi.reboot_required == False - - install_local_msi.rc == 0 - - install_local_msi_actual.exists == True - -- name: get result of install local msi log_path - win_stat: - path: '{{ test_path }}\msi.log' - register: install_local_msi_actual_log_path - -- name: assert install local msi log path - assert: - that: - - install_local_msi_actual_log_path.stat.exists == True - -- name: install local msi (idempotent) - win_package: - path: '{{ test_path }}\good.msi' - state: present - register: install_local_msi_idempotent - -- name: assert install local msi (idempotent) - assert: - that: - - install_local_msi_idempotent is not changed - -- name: uninstall local msi with path (check mode) - win_package: - path: '{{ test_path }}\good.msi' - state: absent - register: uninstall_path_local_msi_check - check_mode: yes - -- name: get result of uninstall local msi with path (check mode) - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: uninstall_path_local_msi_actual_check - -- name: assert uninstall local msi with path (check mode) - assert: - that: - - uninstall_path_local_msi_check is changed - - uninstall_path_local_msi_check.reboot_required == False - - uninstall_path_local_msi_actual_check.exists == True - -- name: uninstall local msi with path - win_package: - path: '{{ test_path }}\good.msi' - state: absent - log_path: '{{ test_path }}\msi uninstall.log' - register: uninstall_path_local_msi - -- name: get result of uninstall local msi with path - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: uninstall_path_local_msi_actual - -- name: assert uninstall local msi with path - assert: - that: - - uninstall_path_local_msi is changed - - uninstall_path_local_msi.reboot_required == False - - uninstall_path_local_msi.rc == 0 - - uninstall_path_local_msi_actual.exists == False - -- name: get result of uninstall local msi with path - win_stat: - path: '{{ test_path }}\msi uninstall.log' - register: uninstall_path_local_msi_actual_log_path - -- name: assert uninstall local msi with path - assert: - that: - - uninstall_path_local_msi_actual_log_path.stat.exists == True # we expect log to remain - -- name: uninstall local msi with path (idempotent) - win_package: - path: '{{ test_path }}\good.msi' - state: absent - register: uninstall_path_local_msi_idempotent - -- name: assert uninstall local msi with path (idempotent) - assert: - that: - - uninstall_path_local_msi_idempotent is not changed - -- name: install url msi (check mode) - win_package: - path: '{{ good_url }}' - product_id: '{{ good_id }}' - state: present - register: install_url_msi_check - check_mode: yes - -- name: get result of install url msi (check mode) - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: install_url_msi_actual_check - -- name: assert install url msi (check mode) - assert: - that: - - install_url_msi_check is changed - - install_url_msi_check.reboot_required == False - - install_url_msi_actual_check.exists == False - -- name: install url msi - win_package: - path: '{{ good_url }}' - product_id: '{{ good_id }}' - state: present - register: install_url_msi - -- name: get result of install url msi - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: install_url_msi_actual - -- name: assert install url msi - assert: - that: - - install_url_msi is changed - - install_url_msi.reboot_required == False - - install_url_msi.rc == 0 - - install_url_msi_actual.exists == True - -- name: install url msi (idempotent) - win_package: - path: '{{ good_url }}' - product_id: '{{ good_id }}' - state: present - register: install_url_msi_again - -- name: assert install url msi (idempotent) - assert: - that: - - install_url_msi_again is not changed - -- name: uninstall local msi with product_id (check mode) - win_package: - product_id: '{{ good_id }}' - state: absent - register: uninstall_id_local_msi_check - check_mode: yes - -- name: get result of uninstall local msi with product_id (check mode) - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: uninstall_id_local_msi_actual_check - -- name: assert uninstall local msi with product_id (check mode) - assert: - that: - - uninstall_id_local_msi_check is changed - - uninstall_id_local_msi_check.reboot_required == False - - uninstall_id_local_msi_actual_check.exists == True - -- name: uninstall local msi with product_id - win_package: - product_id: '{{ good_id }}' - state: absent - register: uninstall_id_local_msi - -- name: get result of uninstall local msi with product_id - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ good_id }} - register: uninstall_id_local_msi_actual - -- name: assert uninstall local msi with product_id - assert: - that: - - uninstall_id_local_msi is changed - - uninstall_id_local_msi.reboot_required == False - - uninstall_id_local_msi.rc == 0 - - uninstall_id_local_msi_actual.exists == False - -- name: uninstall local msi with product_id (idempotent) - win_package: - product_id: '{{ good_id }}' - state: absent - register: uninstall_id_local_msi_idempotent - -- name: assert uninstall local msi with product_id (idempotent) - assert: - that: - - uninstall_id_local_msi_idempotent is not changed - -- name: install local reboot msi (check mode) - win_package: - path: '{{ test_path }}\reboot.msi' - state: present - register: install_local_reboot_msi_check - check_mode: yes - -- name: get result of install local reboot msi (check mode) - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ reboot_id }} - register: install_local_reboot_msi_actual_check - -- name: assert install local reboot msi (check mode) - assert: - that: - - install_local_reboot_msi_check is changed - - install_local_reboot_msi_check.reboot_required == False - - install_local_reboot_msi_actual_check.exists == False - -- name: install local reboot msi - win_package: - path: '{{ test_path }}\reboot.msi' - state: present - register: install_local_reboot_msi - -- name: get result of install local reboot msi - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ reboot_id }} - register: install_local_reboot_msi_actual - -- name: assert install local reboot msi - assert: - that: - - install_local_reboot_msi is changed - - install_local_reboot_msi.reboot_required == True - - install_local_reboot_msi.rc == 3010 - - install_local_reboot_msi_actual.exists == True - -- name: install local reboot msi (idempotent) - win_package: - path: '{{ test_path }}\reboot.msi' - state: present - register: install_local_reboot_msi_idempotent - -- name: assert install local reboot msi (idempotent) - assert: - that: - - install_local_reboot_msi_idempotent is not changed - -- name: uninstall reboot msi after test - win_package: - path: '{{ test_path }}\reboot.msi' - state: absent - -- name: ensure the install folder is cleaned in case uninstall didn't work - win_file: - path: '%ProgramFiles(x86)%\Bovine University' - state: absent - -- name: install local msi with arguments (check mode) - win_package: - path: '{{ test_path }}\good.MSI' - state: present - arguments: ADDLOCAL=Cow - register: install_msi_argument_check - check_mode: yes - -- name: get result of moo file after install local msi with arguments (check mode) - win_stat: - path: '%ProgramFiles(x86)%\Bovine University\moo.exe' - register: install_msi_argument_moo_check - -- name: get result of cow file after install local msi with arguments (check mode) - win_stat: - path: '%ProgramFiles(x86)%\Bovine University\cow.exe' - register: install_msi_argument_cow_check - -- name: assert install local msi with arguments (check mode) - assert: - that: - - install_msi_argument_check is changed - - install_msi_argument_check.reboot_required == False - - install_msi_argument_moo_check.stat.exists == False - - install_msi_argument_cow_check.stat.exists == False - -- name: install local msi with arguments - win_package: - path: '{{ test_path}}\good.MSI' - state: present - arguments: ADDLOCAL=Cow - register: install_msi_argument - -- name: get result of moo file after install local msi with arguments - win_stat: - path: '%ProgramFiles(x86)%\Bovine University\moo.exe' - register: install_msi_argument_moo - -- name: get result of cow file after install local msi with arguments - win_stat: - path: '%ProgramFiles(x86)%\Bovine University\cow.exe' - register: install_msi_argument_cow - -- name: assert install local msi with arguments - assert: - that: - - install_msi_argument is changed - - install_msi_argument.reboot_required == False - - install_msi_argument.rc == 0 - - install_msi_argument_moo.stat.exists == False - - install_msi_argument_cow.stat.exists == True - -- name: install local msi with arguments (idempotent) - win_package: - path: '{{ test_path}}\good.MSI' - state: present - arguments: ADDLOCAL=Cow - register: install_msi_argument_again - -- name: assert install local msi with arguments (idempotent) - assert: - that: - - install_msi_argument_again is not changed - -- name: uninstall good msi after test - win_package: - path: '{{ test_path }}\good.msi' - state: absent - -- name: install good msi for all users - win_package: - path: '{{ test_path }}\good.msi' - state: present - arguments: ALLUSERS=1 - register: install_good_all_users - -- name: get result of install good msi for all users - win_shell: | - Add-Type -Namespace Msi -Name NativeMethods -UsingNamespace System.Text -MemberDefinition @' - [DllImport("Msi.dll", CharSet = CharSet.Unicode)] - public static extern UInt32 MsiGetProductInfoExW( - string szProductCode, - string szUserSid, - UInt32 dwContext, - string szProperty, - StringBuilder szValue, - ref UInt32 pcchValue); - '@ - - $productCode = '{{ good_id }}' - $sb = New-Object -TypeName System.Text.StringBuilder -ArgumentList 0 - $sbLength = [UInt32]0 - - $null = [Msi.NativeMethods]::MsiGetProductInfoExW($productCode, [NullString]::Value, 4, "State", $sb, [ref]$sbLength) - $sbLength += 1 - $null = $sb.EnsureCapacity($sbLength) - - $null = [Msi.NativeMethods]::MsiGetProductInfoExW($productCode, [NullString]::Value, 4, "State", $sb, [ref]$sbLength) - [int]$sb.ToString() - register: install_good_all_users_actual - -- name: assert install good msi for all users - assert: - that: - - install_good_all_users is changed - - install_good_all_users_actual.stdout | trim | int == 5 # INSTALLSTATE_DEFAULT - -- name: install good msi for all users (idempotent) - win_package: - path: '{{ test_path }}\good.msi' - state: present - arguments: ALLUSERS=1 - register: install_good_all_users_again - -- name: assert install good msi for all users (idempotent) - assert: - that: - - not install_good_all_users_again is changed - -- name: uninstall good msi for all users - win_package: - product_id: '{{ good_id }}' - state: absent - register: uninstall_good_all_users - -- name: get result of uninstall good msi for all users - win_shell: | - Add-Type -Namespace Msi -Name NativeMethods -MemberDefinition @' - [DllImport("Msi.dll", CharSet = CharSet.Unicode)] - public static extern Int32 MsiQueryProductStateW( - string szProductCode); - '@ - [Msi.NativeMethods]::MsiQueryProductStateW('{{ good_id }}') - register: uninstall_good_all_users_actual - -- name: assert uninstall good msi for all users - assert: - that: - - uninstall_good_all_users is changed - - uninstall_good_all_users_actual.stdout | trim | int == -1 # INSTALLSTATE_UNKNOWN - -- name: create custom install directory for msi install - win_file: - path: '{{ test_path }}\msi install' - state: directory - -- name: install msi to custom path using string arguments - win_package: - path: '{{ test_path }}\good.msi' - state: present - arguments: ADDLOCAL=Cow INSTALLDIR="{{ test_path }}\msi install" - register: install_msi_string_arguments - -- name: get result of moo file after install local msi with string arguments - win_stat: - path: '{{ test_path }}\msi install\moo.exe' - register: install_msi_string_arguments_moo - -- name: get result of cow file after install local msi with string arguments - win_stat: - path: '{{ test_path }}\msi install\cow.exe' - register: install_msi_string_arguments_cow - -- name: assert results of install msi to custom path using string arguments - assert: - that: - - install_msi_string_arguments is changed - - install_msi_string_arguments.reboot_required == False - - install_msi_string_arguments.rc == 0 - - install_msi_string_arguments_moo.stat.exists == False - - install_msi_string_arguments_cow.stat.exists == True - -- name: uninstall good msi after string argument test - win_package: - path: '{{ test_path }}\good.msi' - state: absent - -# MSI arguments KEY="value" are known to fail when set as a list, for this test just create a simple folder path that -# does not need to be escaped and cleanup at the end. -- name: create a simple spaceless folder for argument list test - win_file: - path: C:\ansible_win_package - state: directory - -- block: - - name: install msi to custom path using list arguments - win_package: - path: '{{ test_path }}\good.msi' - state: present - arguments: - - ADDLOCAL=Moo - - INSTALLDIR=C:\ansible_win_package - register: install_msi_list_arguments - - - name: get result of moo file after install local msi with list arguments - win_stat: - path: C:\ansible_win_package\moo.exe - register: install_msi_list_arguments_moo - - - name: get result of cow file after install local msi with list arguments - win_stat: - path: C:\ansible_win_package\cow.exe - register: install_msi_list_arguments_cow - - - name: assert results of install msi to custom path using list arguments - assert: - that: - - install_msi_list_arguments is changed - - install_msi_list_arguments.reboot_required == False - - install_msi_list_arguments.rc == 0 - - install_msi_list_arguments_moo.stat.exists == True - - install_msi_list_arguments_cow.stat.exists == False - - - name: uninstall good msi after list argument test - win_package: - path: '{{ test_path }}\good.msi' - state: absent - - always: - - name: remove spaceless folder for argument list test - win_file: - path: C:\ansible_win_package - state: absent diff --git a/test/integration/targets/win_package/tasks/msix_tests.yml b/test/integration/targets/win_package/tasks/msix_tests.yml deleted file mode 100644 index 1cec9d7bfa..0000000000 --- a/test/integration/targets/win_package/tasks/msix_tests.yml +++ /dev/null @@ -1,448 +0,0 @@ ---- -- name: enable sideloading of apps for test - win_regedit: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock - name: AllowAllTrustedApps - data: 1 - type: dword - state: present - notify: remove sideloading mode for msix - -- name: download makeappx binaries - win_get_url: - url: '{{ makeappx_url }}' - dest: '{{ test_path }}\makeappx.zip' - -- name: extract makeappx binaries - win_shell: Expand-Archive -LiteralPath '{{ test_path }}\makeappx.zip' -DestinationPath '{{ test_path }}\makeappx' - -- name: setup MSIX packages - win_make_appx: - packages: - - identity: '{{ msix_id }}' - version: 1.0.0.0 - filename: WinPackage-1.0.0.0.msix - - identity: '{{ msix_id }}' - version: 1.0.0.1 - filename: WinPackage-1.0.0.1.msix - - identity: '{{ appx_id }}' - version: 1.0.0.0 - filename: WinPackage.appx - - identity: '{{ msixbundle_id }}' - version: 1.0.0.1 - architecture: x64 - resource_id: resid - filename: WinPackageBundle-x64.msix - - identity: '{{ msixbundle_id }}' - version: 1.0.0.1 - architecture: x86 - resource_id: resid - filename: WinPackageBundle-x86.msix - - identity: '{{ appxbundle_id }}' - version: 1.0.0.1 - architecture: x64 - resource_id: resid - filename: WinPackageBundle-x64.appx - - identity: '{{ appxbundle_id }}' - version: 1.0.0.1 - architecture: x86 - resource_id: resid - filename: WinPackageBundle-x86.appx - - identity: FailMsix - version: 1.2.3.4 - min_version: 99.0.0.0 - max_version: 99.0.0.0 - filename: Fail.msix - bundles: - - files: - - WinPackageBundle-x64.msix - - WinPackageBundle-x86.msix - filename: WinPackageBundle.msixbundle - - files: - - WinPackageBundle-x64.appx - - WinPackageBundle-x86.appx - filename: WinPackageBundle.appxbundle - publisher: CN=Ansible Core, O=Ansible, L=Durhan, S=NC, C=USA - path: '{{ test_path }}' - makeappx_path: '{{ test_path }}\makeappx\makeappx.exe' - signtool_path: '{{ test_path }}\makeappx\signtool.exe' - become: yes # New-SelfSignedCertificate requires this to store the cert with key into the store. - become_method: runas - vars: - ansible_become_user: '{{ ansible_user }}' - ansible_become_pass: '{{ ansible_password }}' - register: test_win_package_msix_packages - notify: remove trusted root cert - -- name: install msix (check mode) - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.0.msix' - state: present - register: msix_install_check - check_mode: yes - -- name: get result of install msix (check mode) - win_shell: if (Get-AppxPackage -Name '{{ msix_id }}') { $true } else { $false } - register: msix_install_actual_check - changed_when: False - -- name: assert install msix (check mode) - assert: - that: - - msix_install_check is changed - - msix_install_check.rc == 0 - - not msix_install_check.reboot_required - - not msix_install_actual_check.stdout | trim | bool - -- name: install msix - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.0.msix' - state: present - register: msix_install - -- name: get result of install msix - win_shell: if (Get-AppxPackage -Name '{{ msix_id }}') { $true } else { $false } - register: msix_install_actual - changed_when: False - -- name: assert install msix - assert: - that: - - msix_install is changed - - msix_install.rc == 0 - - not msix_install.reboot_required - - msix_install_actual.stdout | trim | bool - -- name: install msix (idempotence) - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.0.msix' - state: present - register: msix_install_again - -- name: assert install msix (idempotence) - assert: - that: - - not msix_install_again is changed - -- name: install updated msix package - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.1.msix' - state: present - register: msix_install_updated - -- name: get result of install updated msix package - win_shell: Get-AppxPackage -Name '{{ msix_id }}' | Select-Object -ExpandProperty Version - changed_when: False - register: msix_install_updated_actual - -- name: assert result of install updated msix package - assert: - that: - - msix_install_updated is changed - - msix_install_updated.rc == 0 - - not msix_install_updated.reboot_required - - msix_install_updated_actual.stdout | trim == "1.0.0.1" - -- name: fail to install older msix when new is present - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.0.msix' - state: present - register: fail_msix_older - failed_when: "'unexpected status from Add-AppxPackage' not in fail_msix_older.msg" - -- name: remove msix by path (check mode) - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.1.msix' - state: absent - register: msix_uninstall_check - check_mode: yes - -- name: get result of remove msix by path (check mode) - win_shell: if (Get-AppxPackage -Name '{{ msix_id }}') { $true } else { $false } - changed_when: False - register: msix_uninstall_actual_check - -- name: assert results of remove msix by path (check mode) - assert: - that: - - msix_uninstall_check is changed - - msix_uninstall_check.rc == 0 - - not msix_uninstall_check.reboot_required - - msix_uninstall_actual_check.stdout | trim | bool - -- name: remove msix by path - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.1.msix' - state: absent - register: msix_uninstall - -- name: get result of remove msix by path - win_shell: if (Get-AppxPackage -Name '{{ msix_id }}') { $true } else { $false } - changed_when: False - register: msix_uninstall_actual - -- name: assert results of remove msix by path - assert: - that: - - msix_uninstall is changed - - msix_uninstall.rc == 0 - - not msix_uninstall.reboot_required - - not msix_uninstall_actual.stdout | trim | bool - -- name: remove msix by path (idempotence) - win_package: - path: '{{ test_path }}\WinPackage-1.0.0.1.msix' - state: absent - register: msix_uninstall_again - -- name: assert results of remove msix by path (idempotence) - assert: - that: - - not msix_uninstall_again is changed - -# The install steps are the same as msix so no need for check and idempotency tests -- name: install appx - win_package: - path: '{{ test_path }}\WinPackage.appx' - state: present - register: appx_install - -- name: get result of install appx - win_shell: if (Get-AppxPackage -Name '{{ appx_id }}') { $true } else { $false } - changed_when: False - register: appx_install_actual - -- name: assert results of install appx - assert: - that: - - appx_install is changed - - appx_install.rc == 0 - - not appx_install.reboot_required - - appx_install_actual.stdout | trim | bool - -- name: remove appx by id (check mode) - win_package: - product_id: '{{ appx_id }}' - state: absent - register: appx_uninstall_check - check_mode: yes - -- name: get result of remove appx (check mode) - win_shell: if (Get-AppxPackage -Name '{{ appx_id }}') { $true } else { $false } - changed_when: False - register: appx_uninstall_actual_check - -- name: assert results of remove appx by id (check mode) - assert: - that: - - appx_uninstall_check is changed - - appx_uninstall_check.rc == 0 - - not appx_uninstall_check.reboot_required - - appx_uninstall_actual_check.stdout | trim | bool - -- name: remove appx by id - win_package: - product_id: '{{ appx_id }}' - state: absent - register: appx_uninstall - -- name: get result of remove appx - win_shell: if (Get-AppxPackage -Name '{{ appx_id }}') { $true } else { $false } - changed_when: False - register: appx_uninstall_actual - -- name: assert results of remove appx by id - assert: - that: - - appx_uninstall is changed - - appx_uninstall.rc == 0 - - not appx_uninstall.reboot_required - - not appx_uninstall_actual.stdout | trim | bool - -- name: remove appx by id (idempotence) - win_package: - product_id: '{{ appx_id }}' - state: absent - register: appx_uninstall_again - -- name: assert results of remove appx by id (idempotence) - assert: - that: - - not appx_uninstall_again is changed - -- name: validate failures are detected on a bad package - win_package: - path: '{{ test_path }}\Fail.msix' - state: present - register: fail_msix - failed_when: "'unexpected status from Add-AppxPackage' not in fail_msix.msg" - -- name: install msixbundle (check mode) - win_package: - path: '{{ test_path }}\WinPackageBundle.msixbundle' - state: present - register: msixbundle_install_check - check_mode: yes - -- name: get result of install msixbundle (check mode) - win_shell: if (Get-AppxPackage -Name '{{ msixbundle_id }}') { $true } else { $false } - changed_when: False - register: msixbundle_install_actual_check - -- name: assert install msixbundle (check mode) - assert: - that: - - msixbundle_install_check is changed - - msixbundle_install_check.rc == 0 - - not msixbundle_install_check.reboot_required - - not msixbundle_install_actual_check.stdout | trim | bool - -- name: install msixbundle - win_package: - path: '{{ test_path }}\WinPackageBundle.msixbundle' - state: present - register: msixbundle_install - -- name: get result of install msixbundle - win_shell: if (Get-AppxPackage -Name '{{ msixbundle_id }}') { $true } else { $false } - changed_when: False - register: msixbundle_install_actual - -- name: assert install msixbundle - assert: - that: - - msixbundle_install is changed - - msixbundle_install.rc == 0 - - not msixbundle_install.reboot_required - - msixbundle_install_actual.stdout | trim | bool - -- name: install msixbundle (idempotence) - win_package: - path: '{{ test_path }}\WinPackageBundle.msixbundle' - state: present - register: msixbundle_install_again - -- name: assert install msixbundle (idempotence) - assert: - that: - - not msixbundle_install_again is changed - -- name: uninstall msixbundle by id (check mode) - win_package: - product_id: '{{ msixbundle_id }}' - state: absent - register: msixbundle_uninstall_check - check_mode: yes - -- name: get result of uninstall msixbundle by id (check mode) - win_shell: if (Get-AppxPackage -Name '{{ msixbundle_id }}') { $true } else { $false } - changed_when: False - register: msixbundle_uninstall_actual_check - -- name: assert uninstall msixbundle by id (check mode) - assert: - that: - - msixbundle_uninstall_check is changed - - msixbundle_uninstall_check.rc == 0 - - not msixbundle_uninstall_check.reboot_required - - msixbundle_uninstall_actual_check.stdout | trim | bool - -- name: uninstall msixbundle by id - win_package: - product_id: '{{ msixbundle_id }}' - state: absent - register: msixbundle_uninstall - -- name: get result of uninstall msixbundle by id - win_shell: if (Get-AppxPackage -Name '{{ msixbundle_id }}') { $true } else { $false } - changed_when: False - register: msixbundle_uninstall_actual - -- name: assert uninstall msixbundle by id - assert: - that: - - msixbundle_uninstall is changed - - msixbundle_uninstall.rc == 0 - - not msixbundle_uninstall.reboot_required - - not msixbundle_uninstall_actual.stdout | trim | bool - -- name: uninstall msixbundle by id (idempotence) - win_package: - product_id: '{{ msixbundle_id }}' - state: absent - register: msixbundle_uninstall_again - -- name: assert uninstall msixbundle by id (idempotence) - assert: - that: - - not msixbundle_uninstall_again is changed - -# The logic for appxbundle is the same for msixbundle no need for check and idempotence tests -- name: install appxbundle - win_package: - path: '{{ test_path }}\WinPackageBundle.appxbundle' - state: present - register: appxbundle_install - -- name: get result of install appxbundle - win_shell: if (Get-AppxPackage -Name '{{ appxbundle_id }}') { $true } else { $false } - changed_when: False - register: appxbundle_install_actual - -- name: assert install appxbundle - assert: - that: - - appxbundle_install is changed - - appxbundle_install.rc == 0 - - not appxbundle_install.reboot_required - - appxbundle_install_actual.stdout | trim | bool - -- name: uninstall appxbundle by path (check mode) - win_package: - path: '{{ test_path }}\WinPackageBundle.appxbundle' - state: absent - register: msixbundle_uninstall_check - check_mode: yes - -- name: get result of uninstall appxbundle by path (check mode) - win_shell: if (Get-AppxPackage -Name '{{ appxbundle_id }}') { $true } else { $false } - changed_when: False - register: msixbundle_uninstall_actual_check - -- name: assert uninstall appxbundle by path (check mode) - assert: - that: - - msixbundle_uninstall_check is changed - - msixbundle_uninstall_check.rc == 0 - - not msixbundle_uninstall_check.reboot_required - - msixbundle_uninstall_actual_check.stdout | trim | bool - -- name: uninstall appxbundle by path - win_package: - path: '{{ test_path }}\WinPackageBundle.appxbundle' - state: absent - register: msixbundle_uninstall - -- name: get result of uninstall appxbundle by path - win_shell: if (Get-AppxPackage -Name '{{ appxbundle_id }}') { $true } else { $false } - changed_when: False - register: msixbundle_uninstall_actual - -- name: assert uninstall appxbundle by path - assert: - that: - - msixbundle_uninstall is changed - - msixbundle_uninstall.rc == 0 - - not msixbundle_uninstall.reboot_required - - not msixbundle_uninstall_actual.stdout | trim | bool - -- name: uninstall appxbundle by path (idempotence) - win_package: - path: '{{ test_path }}\WinPackageBundle.appxbundle' - state: absent - register: msixbundle_uninstall_again - -- name: assert uninstall appxbundle by path (idempotence) - assert: - that: - - not msixbundle_uninstall_again is changed diff --git a/test/integration/targets/win_package/tasks/msp_tests.yml b/test/integration/targets/win_package/tasks/msp_tests.yml deleted file mode 100644 index cb7ffe9486..0000000000 --- a/test/integration/targets/win_package/tasks/msp_tests.yml +++ /dev/null @@ -1,167 +0,0 @@ ---- -- name: fail if base product is not applied - win_package: - path: '{{ test_path }}\patch.msp' - state: present - register: fail_no_product_found - failed_when: '"The specified patch does not apply to any installed MSI packages" not in fail_no_product_found.msg' - -- name: install base package for msp patch - win_package: - path: '{{ test_path }}\patch.msi' - state: present - -- name: install msp (check mode) - win_package: - path: '{{ test_path }}\patch.msp' - state: present - register: msp_install_check - check_mode: yes - -- name: get result of install msp (check mode) - slurp: - path: '{{ patch_install_file }}' - register: msp_install_actual_check - -- name: assert install msp (check mode) - assert: - that: - - msp_install_check is changed - - msp_install_check.rc == 0 - - not msp_install_check.reboot_required - - msp_install_actual_check.content | b64decode == 'This is version 1.0' - -- name: install msp - win_package: - path: '{{ test_path }}\patch.msp' - state: present - register: msp_install - -- name: get result of install msp - slurp: - path: '{{ patch_install_file }}' - register: msp_install_actual - -- name: assert install msp - assert: - that: - - msp_install is changed - - msp_install.rc == 0 - - not msp_install.reboot_required - - msp_install_actual.content | b64decode == 'This is version 1.1' - -- name: install msp (idempotence) - win_package: - path: '{{ test_path }}\patch.msp' - state: present - register: msp_install_again - -- name: assert install msp (idempotence) - assert: - that: - - not msp_install_again is changed - -- name: remove msp by path (check mode) - win_package: - path: '{{ test_path }}\patch.msp' - state: absent - register: msp_uninstall_path_check - check_mode: yes - -- name: get result of remove msp by path (check mode) - slurp: - path: '{{ patch_install_file }}' - register: msp_uninstall_path_actual_check - -- name: assert remove msp by path (check mode) - assert: - that: - - msp_uninstall_path_check is changed - - msp_uninstall_path_check.rc == 0 - - not msp_uninstall_path_check.reboot_required - - msp_uninstall_path_actual_check.content | b64decode == 'This is version 1.1' - -- name: remove msp by path - win_package: - path: '{{ test_path }}\patch.msp' - state: absent - register: msp_uninstall_path - -- name: get result of remove msp by path - slurp: - path: '{{ patch_install_file }}' - register: msp_uninstall_path_actual - -- name: assert remove msp by path - assert: - that: - - msp_uninstall_path is changed - - msp_uninstall_path.rc == 0 - - not msp_uninstall_path.reboot_required - - msp_uninstall_path_actual.content | b64decode == 'This is version 1.0' - -- name: remove msp by path (idempotence) - win_package: - path: '{{ test_path }}\patch.msp' - state: absent - register: msp_uninstall_path_again - -- name: assert remove msp by path (idempotence) - assert: - that: - - not msp_uninstall_path_again is changed - -- name: install patch again - win_package: - path: '{{ test_path }}\patch.msp' - state: present - -- name: remove msp by id (check mode) - win_package: - product_id: '{{ patch_patch_id }}' - state: absent - register: msp_uninstall_id_check - check_mode: yes - -- name: get result of remove msp by id (check mode) - slurp: - path: '{{ patch_install_file }}' - register: msp_uninstall_id_actual_check - -- name: assert remove msp by id (check mode) - assert: - that: - - msp_uninstall_id_check is changed - - msp_uninstall_id_check.rc == 0 - - not msp_uninstall_id_check.reboot_required - - msp_uninstall_id_actual_check.content | b64decode == 'This is version 1.1' - -- name: remove msp by id - win_package: - product_id: '{{ patch_patch_id }}' - state: absent - register: msp_uninstall_id - -- name: get result of remove msp by id - slurp: - path: '{{ patch_install_file }}' - register: msp_uninstall_id_actual - -- name: assert remove msp by id - assert: - that: - - msp_uninstall_id is changed - - msp_uninstall_id.rc == 0 - - not msp_uninstall_id.reboot_required - - msp_uninstall_id_actual.content | b64decode == 'This is version 1.0' - -- name: remove msp by id (idempotence) - win_package: - product_id: '{{ patch_patch_id }}' - state: absent - register: msp_uninstall_id_again - -- name: assert remove msp by id (idempotence) - assert: - that: - - not msp_uninstall_id_again is changed diff --git a/test/integration/targets/win_package/tasks/registry_tests.yml b/test/integration/targets/win_package/tasks/registry_tests.yml deleted file mode 100644 index b4b5a8e2bd..0000000000 --- a/test/integration/targets/win_package/tasks/registry_tests.yml +++ /dev/null @@ -1,393 +0,0 @@ ---- -# This symlink allows us to test paths with a space in the executable path -- name: create symbolic link in test folder to powershell - win_command: cmd.exe /c mklink "{{ test_path }}\powershell symlink.exe" C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - -- name: copy across test script that creates a registry install entry - win_template: - src: registry_package.ps1.j2 - dest: '{{ test_path }}\registry_package.ps1' - -- name: install registry package not quoted and no spaces in path - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx64 - - UninstallString - - C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command Remove-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse - state: present - -- name: uninstall registry package not quoted and no spaces in path (check mode) - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_normal_check - check_mode: yes - -- name: get result of uninstall registry package not quoted and no spaces in path (check mode) - win_reg_stat: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_normal_actual_check - -- name: assert uninstall registry package not quoted and no spaces in path (check mode) - assert: - that: - - registry_uninstall_normal_check is changed - - registry_uninstall_normal_check.rc == 0 - - not registry_uninstall_normal_check.reboot_required - - registry_uninstall_normal_actual_check.exists - -- name: uninstall registry package not quoted and no spaces in path - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_normal - -- name: get result of uninstall registry package not quoted and no spaces in path - win_reg_stat: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_normal_actual - -- name: assert uninstall registry package not quoted and no spaces in path - assert: - that: - - registry_uninstall_normal is changed - - registry_uninstall_normal.rc == 0 - - not registry_uninstall_normal.reboot_required - - not registry_uninstall_normal_actual.exists - -- name: uninstall registry package not quoted and no spaces in path (idempotence) - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_normal_again - -- name: assert uninstall registry package not quoted and no spaces in path (idempotence) - assert: - that: - - not registry_uninstall_normal_again is changed - -- name: install registry package not quoted and spaces in path - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx86 - - QuietUninstallString - - '{{ test_path }}\powershell symlink.exe -Command Remove-Item -Path HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse' - state: present - -- name: uninstall registry package not quoted and spaces in path - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_not_quoted - -- name: get result of uninstall registry package not quoted and spaces in path - win_reg_stat: - path: HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_not_quoted_actual - -- name: assert uninstall registry package not quoted and spaces in path - assert: - that: - - registry_uninstall_not_quoted is changed - - registry_uninstall_not_quoted.rc == 0 - - not registry_uninstall_not_quoted.reboot_required - - not registry_uninstall_not_quoted_actual.exists - -- name: install registry package quoted and no spaces in path - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKCUx64 - - UninstallString - - '"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -Command Remove-Item -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse' - state: present - -- name: uninstall registry package quoted and no spaces in path - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_quoted_normal - -- name: get result of uninstall registry package quoted and no spaces in path - win_reg_stat: - path: HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Unisntall\{{ registry_id }} - register: registry_uninstall_quoted_normal_actual - -- name: assert uninstall registry package quoted and no spaces in path - assert: - that: - - registry_uninstall_quoted_normal is changed - - registry_uninstall_quoted_normal.rc == 0 - - not registry_uninstall_quoted_normal.reboot_required - - not registry_uninstall_quoted_normal_actual.exists - -- name: install registry package quoted and spaces in path - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKCUx86 - - QuietUninstallString - - '"{{ test_path }}\powershell symlink.exe" -Command Remove-Item -Path HKCU:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse' - state: present - -- name: uninstall registry package quoted and spaces in path - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_quoted_spaces - -- name: get result of uninstall registry package quoted and spaces in path - win_reg_stat: - path: HKCU:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_quoted_spaces_actual - -- name: assert uninstall registry package quoted and spaces in path - assert: - that: - - registry_uninstall_quoted_spaces is changed - - registry_uninstall_quoted_spaces.rc == 0 - - not registry_uninstall_quoted_spaces.reboot_required - - not registry_uninstall_quoted_spaces_actual.exists - -- name: install registry package with unquoted env vars - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx64 - - UninstallString - - '%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -Command Remove-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse' - state: present - -- name: uninstall registry package with unquoted env vars - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_env - -- name: get result of ininstall registry package with unquoted env vars - win_reg_stat: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_env_actual - -- name: assert uninstall registry package with unquoted env vars - assert: - that: - - registry_uninstall_env is changed - - registry_uninstall_env.rc == 0 - - not registry_uninstall_env.reboot_required - - not registry_uninstall_env_actual.exists - -- name: install registry package quoted env vars - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx64 - - UninstallString - - '"%TestVar%\powershell symlink.exe" -Command Remove-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse' - state: present - -- name: uninstall registry package quoted env vars - win_package: - product_id: '{{ registry_id }}' - state: absent - register: registry_uninstall_env_quoted - environment: - TestVar: '{{ test_path }}' - -- name: get result of uninstall registry package quoted env vars - win_reg_stat: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_env_quoted_actual - -- name: assert uninstall registry package quoted env vars - assert: - that: - - registry_uninstall_env_quoted is changed - - registry_uninstall_env_quoted.rc == 0 - - not registry_uninstall_env_quoted.reboot_required - - not registry_uninstall_env_quoted_actual.exists - -- name: install registry package for overriding path test - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx64 - - UninstallString - - Fail path - state: present - -- name: uninstall registry package with overridden path and explicit error code - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - product_id: '{{ registry_id }}' - arguments: '-Command Remove-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }}; exit 1' - expected_return_code: 1 - state: absent - register: registry_uninstall_explicit_path - -- name: get result of uninstall registry package with overridden path and explicit error code - win_reg_stat: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_explicit_path_actual - -- name: assert unisntall registry package with overridden path and explicit error code - assert: - that: - - registry_uninstall_explicit_path is changed - - registry_uninstall_explicit_path.rc == 1 - - not registry_uninstall_explicit_path.reboot_required - - not registry_uninstall_explicit_path_actual.exists - -- name: create registry package for uninstal with explicit arguments test - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx64 - - QuietUninstallString - - C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - state: present - -- name: uninstall registry package with explicit arguments and chdir - win_package: - product_id: '{{ registry_id }}' - arguments: -Command Remove-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse; [System.IO.File]::WriteAllText('{{ test_path }}\reg_out.txt', $pwd.Path, [System.Text.Encoding]::Unicode); exit 3010 - state: absent - chdir: C:\Users - register: registry_uninstall_arguments - -- name: get package result of uninstall registry package with explicit arguments and chdir - win_reg_stat: - path: HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} - register: registry_uninstall_arguments_reg_actual - -- name: get package output of uninstall registry package with explicit arguments and chdir - slurp: - path: '{{ test_path }}\reg_out.txt' - register: registry_uninstall_arguments_chdir_actual - -- name: assert uninstall registry package with explicit arguments and chdir - assert: - that: - - registry_uninstall_arguments is changed - - registry_uninstall_arguments.rc == 3010 - - registry_uninstall_arguments.reboot_required - - not registry_uninstall_arguments_reg_actual.exists - # backslash escaping makes it hard to compare the value, just compare the raw base64 string expected which is 'C:\Users' as UTF-16-LE - - registry_uninstall_arguments_chdir_actual.content == '//5DADoAXABVAHMAZQByAHMA' - -- name: install package for creates_* tests - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: - - -File - - '{{ test_path }}\registry_package.ps1' - - HKLMx64 - - UninstallString - - powershell.exe -Command Remove-Item -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{{ registry_id }} -Force -Recurse - state: present - -- name: get actual PowerShell file version for tests - win_shell: | - $path = '{{ test_path }}\powershell symlink.exe' - $version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo($path) - (New-Object -TypeName System.Version -ArgumentList @( - $version.FileMajorPart, $version.FileMinorPart, $version.FileBuildPart, $version.FilePrivatePart - )).ToString() - changed_when: False - register: powershell_version - -- name: test creates_path overrides product_id - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: echo hi - product_id: '{{ registry_id }}' - creates_path: C:\missing - state: present - register: creates_path - -- name: test creates_version overrides product_id - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: echo hi - product_id: '{{ registry_id }}' - creates_path: '{{ test_path }}\powershell symlink.exe' - creates_version: 1.0.0 - state: present - register: creates_version - -- name: assert test creates_path and creates_version override product_id is changed - assert: - that: - - creates_path is changed - - creates_version is changed - -- name: test creates_path to existing but no product_id - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: echo hi - product_id: Fake - creates_path: C:\Windows - state: present - register: creates_path_present - -- name: test creates_version to existing but no product_id - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: echo hi - product_id: Fake - creates_path: '{{ test_path }}\powershell symlink.exe' - creates_version: '{{ powershell_version.stdout | trim }}' - state: present - register: creates_version_present - -- name: assert test creates_path to existing but no product_Id - assert: - that: - - not creates_path_present is changed - - not creates_version_present is changed - -- name: test creates_service overrides product_id - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: echo hi - product_id: '{{ registry_id }}' - creates_service: missing service - state: present - register: creates_service - -- name: assert test creates_service overrides product_id - assert: - that: - - creates_service is changed - -- name: test creates_service to existing but no product_id - win_package: - path: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - arguments: echo hi - product_id: Fake - creates_service: winrm - state: present - register: creates_service_present - -- name: assert test creates_service to existing but no product_Id - assert: - that: - - not creates_service_present is changed diff --git a/test/integration/targets/win_package/templates/registry_package.ps1.j2 b/test/integration/targets/win_package/templates/registry_package.ps1.j2 deleted file mode 100644 index b82b21d0c0..0000000000 --- a/test/integration/targets/win_package/templates/registry_package.ps1.j2 +++ /dev/null @@ -1,26 +0,0 @@ -$ErrorActionPreference = 'Stop' - -$productId = '{{ registry_id }}' - -$regPath = switch ($args[0]) { - HKLMx64 { 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' } - HKLMx86 { 'HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall' } - HKCUx64 { 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall' } - HKCUx86 { 'HKCU:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall' } - default { throw "Invalid registry path specified $($args[0])" } -} -$regProperty = $args[1] -$regUninstallString = $args[2] -#$regUninstallString = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($args[2])) - -$null = New-Item -Path $regPath -Name $productId -Force - -$propParams = @{ - Path = "$regPath\$productId" - Force = $true - PropertyType = 'String' -} -New-ItemProperty -Name $regProperty -Value $regUninstallString @propParams -if ($regProperty -eq 'QuietUninstallString') { - New-ItemProperty -Name 'UninstallString' -Value 'Fail if used' @propParams -} diff --git a/test/integration/targets/win_path/aliases b/test/integration/targets/win_path/aliases deleted file mode 100644 index 1eed2ecfaf..0000000000 --- a/test/integration/targets/win_path/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group1 -shippable/windows/smoketest diff --git a/test/integration/targets/win_path/tasks/main.yml b/test/integration/targets/win_path/tasks/main.yml deleted file mode 100644 index bf27cec663..0000000000 --- a/test/integration/targets/win_path/tasks/main.yml +++ /dev/null @@ -1,183 +0,0 @@ -- set_fact: - varname: WINPATH_TEST - -- name: Remove {{ varname }} vars from user and machine scope - raw: '[Environment]::SetEnvironmentVariable("{{ varname }}", $null, "User"); [Environment]::SetEnvironmentVariable("{{ varname }}", $null, "Machine")' - -- name: Set a var at the machine and user levels - win_path: - name: "{{ varname }}" - elements: C:\{{ item }}Path - scope: "{{ item }}" - with_items: - - machine - - user - register: pathout - -- name: Get path value from machine and user levels - raw: '[Environment]::GetEnvironmentVariable("{{ varname }}","{{ item.item }}")' - with_items: "{{ pathout.results }}" - register: varout - -- name: Ensure output - assert: - that: - - item.0 is changed - - item.0.path_value == "C:\\" + item.0.item + "Path" - - item.1.stdout_lines[0] == 'C:\\' + item.0.item + 'Path' - with_together: - - "{{ pathout.results }}" - - "{{ varout.results }}" - -- name: Remove {{ varname }} vars from user and machine scope - raw: '[Environment]::SetEnvironmentVariable("{{ varname }}", $null, "User"); [Environment]::SetEnvironmentVariable("{{ varname }}", $null, "Machine")' - -- name: Create multi-element path - win_path: - name: "{{ varname }}" - elements: - - C:\PathZ - - C:\PathA - register: multiout - -- name: Get path value - raw: $env:{{ varname }} - register: varout - -- name: Ensure output - assert: - that: - - multiout is changed - - multiout.path_value == "C:\\PathZ;C:\\PathA" - - varout.stdout_lines[0] == "C:\\PathZ;C:\\PathA" - -- name: Add value to middle and end - win_path: - name: "{{ varname }}" - elements: - - C:\NewPath - - C:\PathA - - 'C:\PathWithTrailingBackslash\' # store with a trailing backslash - - '"C:\Quoted;With;Semicolons"' # embedded semicolon, wrapped in quotes - - '%SystemRoot%\stuff' - register: addout - -- name: Get path value - raw: $env:{{ varname }} - register: varout - -- name: Test idempotence- retry values to middle and end, test case-insensitive comparison, backslash canonicalization - win_path: - name: "{{ varname }}" - elements: - - c:\nEwPaTh - - c:\patha - - C:\pathwithtrailingbackslash # no trailing backslash, should be the same - - '"C:\Quoted;With;Semicolons"' - - '%SystemRoot%\stuff' - register: idemout - -- name: Get path value - raw: $env:{{ varname }} - register: idemvarout - -- name: Ensure output - assert: - that: - - addout is changed - - addout.path_value == 'C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - - varout.stdout_lines[0] == ('C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff') - - idemout is not changed - - idemout.path_value == 'C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - - idemvarout.stdout_lines[0] == ('C:\\PathZ;C:\\NewPath;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff') - -- name: Remove single element - win_path: - name: "{{ varname }}" - elements: C:\NewPath - state: absent - register: removeout - -- name: Get path value - raw: $env:{{ varname }} - register: varout - -- name: Test idempotence- retry remove single element - win_path: - name: "{{ varname }}" - elements: C:\NewPath - state: absent - register: idemremoveout - -- name: Get path value - raw: $env:{{ varname }} - register: idemvarout - -- name: Ensure output - assert: - that: - - removeout is changed - - removeout.path_value == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - - varout.stdout_lines[0] == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff' - - idemremoveout is not changed - - idemremoveout.path_value == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";%SystemRoot%\stuff' - - idemvarout.stdout_lines[0] == 'C:\\PathZ;C:\\PathA;C:\\PathWithTrailingBackslash\\;"C:\Quoted;With;Semicolons";C:\Windows\stuff' - -- name: Remove multiple elements - win_path: - name: "{{ varname }}" - elements: - - C:\PathWithTrailingBackslash # no trailing backslash - - c:\pathz - - '"C:\Quoted;With;Semicolons"' - - '%SystemRoot%\stuff\' # add trailing backslash - state: absent - register: removeout - -- name: Get path value - raw: $env:{{ varname }} - register: varout - -- name: Ensure output - assert: - that: - - removeout is changed - - removeout.path_value == "C:\\PathA" - - varout.stdout_lines[0] == "C:\\PathA" - -- name: Test check mode add - check_mode: yes - win_path: - name: "{{ varname }}" - elements: - - C:\MissingPath - register: checkadd - -- name: Get path value - raw: $env:{{ varname }} - register: checkaddvarout - -- name: Test check mode remove - check_mode: yes - win_path: - name: "{{ varname }}" - elements: C:\PathA - state: absent - register: checkremove - -- name: Get path value - raw: $env:{{ varname }} - register: checkremovevarout - -- name: Ensure output - assert: - that: - - checkadd is changed - - checkadd.path_value == "C:\\PathA;C:\\MissingPath" - - checkaddvarout.stdout_lines[0] == "C:\\PathA" # shouldn't have actually changed the value - - checkremove is changed - - checkremove.path_value == "" - - checkremovevarout.stdout_lines[0] == "C:\\PathA" # shouldn't have actually changed the value - -- name: Remove {{ varname }} vars from user and machine scope - raw: '[Environment]::SetEnvironmentVariable("{{ varname }}", $null, "User"); [Environment]::SetEnvironmentVariable("{{ varname }}", $null, "Machine")' diff --git a/test/integration/targets/win_ping/aliases b/test/integration/targets/win_ping/aliases deleted file mode 100644 index 1eed2ecfaf..0000000000 --- a/test/integration/targets/win_ping/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group1 -shippable/windows/smoketest diff --git a/test/integration/targets/win_ping/library/win_ping_set_attr.ps1 b/test/integration/targets/win_ping/library/win_ping_set_attr.ps1 deleted file mode 100644 index f17049643b..0000000000 --- a/test/integration/targets/win_ping/library/win_ping_set_attr.ps1 +++ /dev/null @@ -1,31 +0,0 @@ -#!powershell -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# POWERSHELL_COMMON - -$params = Parse-Args $args $true; - -$data = Get-Attr $params "data" "pong"; - -$result = @{ - changed = $false - ping = "pong" -}; - -# Test that Set-Attr will replace an existing attribute. -Set-Attr $result "ping" $data - -Exit-Json $result; diff --git a/test/integration/targets/win_ping/library/win_ping_strict_mode_error.ps1 b/test/integration/targets/win_ping/library/win_ping_strict_mode_error.ps1 deleted file mode 100644 index 508174afcc..0000000000 --- a/test/integration/targets/win_ping/library/win_ping_strict_mode_error.ps1 +++ /dev/null @@ -1,30 +0,0 @@ -#!powershell -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# POWERSHELL_COMMON - -$params = Parse-Args $args $true; - -$params.thisPropertyDoesNotExist - -$data = Get-Attr $params "data" "pong"; - -$result = @{ - changed = $false - ping = $data -}; - -Exit-Json $result; diff --git a/test/integration/targets/win_ping/library/win_ping_syntax_error.ps1 b/test/integration/targets/win_ping/library/win_ping_syntax_error.ps1 deleted file mode 100644 index d4c9f07ad5..0000000000 --- a/test/integration/targets/win_ping/library/win_ping_syntax_error.ps1 +++ /dev/null @@ -1,30 +0,0 @@ -#!powershell -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# POWERSHELL_COMMON - -$blah = 'I can't quote my strings correctly.' - -$params = Parse-Args $args $true; - -$data = Get-Attr $params "data" "pong"; - -$result = @{ - changed = $false - ping = $data -}; - -Exit-Json $result; diff --git a/test/integration/targets/win_ping/library/win_ping_throw.ps1 b/test/integration/targets/win_ping/library/win_ping_throw.ps1 deleted file mode 100644 index 7306f4d280..0000000000 --- a/test/integration/targets/win_ping/library/win_ping_throw.ps1 +++ /dev/null @@ -1,30 +0,0 @@ -#!powershell -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# POWERSHELL_COMMON - -throw - -$params = Parse-Args $args $true; - -$data = Get-Attr $params "data" "pong"; - -$result = @{ - changed = $false - ping = $data -}; - -Exit-Json $result; diff --git a/test/integration/targets/win_ping/library/win_ping_throw_string.ps1 b/test/integration/targets/win_ping/library/win_ping_throw_string.ps1 deleted file mode 100644 index 09e3b7cb45..0000000000 --- a/test/integration/targets/win_ping/library/win_ping_throw_string.ps1 +++ /dev/null @@ -1,30 +0,0 @@ -#!powershell -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# POWERSHELL_COMMON - -throw "no ping for you" - -$params = Parse-Args $args $true; - -$data = Get-Attr $params "data" "pong"; - -$result = @{ - changed = $false - ping = $data -}; - -Exit-Json $result; diff --git a/test/integration/targets/win_ping/tasks/main.yml b/test/integration/targets/win_ping/tasks/main.yml deleted file mode 100644 index a7e6ba7fc4..0000000000 --- a/test/integration/targets/win_ping/tasks/main.yml +++ /dev/null @@ -1,67 +0,0 @@ -# test code for the win_ping module -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: test win_ping - action: win_ping - register: win_ping_result - -- name: check win_ping result - assert: - that: - - win_ping_result is not failed - - win_ping_result is not changed - - win_ping_result.ping == 'pong' - -- name: test win_ping with data - win_ping: - data: ☠ - register: win_ping_with_data_result - -- name: check win_ping result with data - assert: - that: - - win_ping_with_data_result is not failed - - win_ping_with_data_result is not changed - - win_ping_with_data_result.ping == '☠' - -- name: test win_ping.ps1 with data as complex args - # win_ping.ps1: # TODO: do we want to actually support this? no other tests that I can see... - win_ping: - data: bleep - register: win_ping_ps1_result - -- name: check win_ping.ps1 result with data - assert: - that: - - win_ping_ps1_result is not failed - - win_ping_ps1_result is not changed - - win_ping_ps1_result.ping == 'bleep' - -- name: test win_ping using data=crash so that it throws an exception - win_ping: - data: crash - register: win_ping_crash_result - ignore_errors: yes - -- name: check win_ping_crash result - assert: - that: - - win_ping_crash_result is failed - - win_ping_crash_result is not changed - - 'win_ping_crash_result.msg == "Unhandled exception while executing module: boom"' - - '"throw \"boom\"" in win_ping_crash_result.exception' diff --git a/test/integration/targets/win_reboot/aliases b/test/integration/targets/win_reboot/aliases deleted file mode 100644 index f687b0e0ef..0000000000 --- a/test/integration/targets/win_reboot/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group4 -shippable/windows/smoketest diff --git a/test/integration/targets/win_reboot/tasks/main.yml b/test/integration/targets/win_reboot/tasks/main.yml deleted file mode 100644 index 7757e08fcd..0000000000 --- a/test/integration/targets/win_reboot/tasks/main.yml +++ /dev/null @@ -1,70 +0,0 @@ ---- -- name: make sure win output dir exists - win_file: - path: "{{win_output_dir}}" - state: directory - -- name: reboot with defaults - win_reboot: - -- name: test with negative values for delays - win_reboot: - post_reboot_delay: -0.5 - pre_reboot_delay: -61 - -- name: schedule a reboot for sometime in the future - win_command: shutdown.exe /r /t 599 - -- name: reboot with a shutdown already scheduled - win_reboot: - -# test a reboot that reboots again during the test_command phase -- name: create test file - win_file: - path: '{{win_output_dir}}\win_reboot_test' - state: touch - -- name: reboot with secondary reboot stage - win_reboot: - test_command: '{{ lookup("template", "post_reboot.ps1") }}' - -- name: reboot with test command that fails - win_reboot: - test_command: 'FAIL' - reboot_timeout: 120 - register: reboot_fail_test - failed_when: "reboot_fail_test.msg != 'Timed out waiting for post-reboot test command (timeout=120)'" - -- name: remove SeRemoteShutdownPrivilege - win_user_right: - name: SeRemoteShutdownPrivilege - users: [] - action: set - register: removed_shutdown_privilege - -- block: - - name: try and reboot without required privilege - win_reboot: - register: fail_privilege - failed_when: - - "'Reboot command failed, error was:' not in fail_privilege.msg" - - "'Access is denied.(5)' not in fail_privilege.msg" - - always: - - name: reset the SeRemoteShutdownPrivilege - win_user_right: - name: SeRemoteShutdownPrivilege - users: '{{ removed_shutdown_privilege.removed }}' - action: add - -- name: Use invalid parameter - reboot: - foo: bar - ignore_errors: true - register: invalid_parameter - -- name: Ensure task fails with error - assert: - that: - - invalid_parameter is failed - - "invalid_parameter.msg == 'Invalid options for reboot: foo'" diff --git a/test/integration/targets/win_reboot/templates/post_reboot.ps1 b/test/integration/targets/win_reboot/templates/post_reboot.ps1 deleted file mode 100644 index e4a99a721d..0000000000 --- a/test/integration/targets/win_reboot/templates/post_reboot.ps1 +++ /dev/null @@ -1,8 +0,0 @@ -if (Test-Path -Path '{{win_output_dir}}\win_reboot_test') { - New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager' ` - -Name PendingFileRenameOperations ` - -Value @("\??\{{win_output_dir}}\win_reboot_test`0") ` - -PropertyType MultiString - Restart-Computer -Force - exit 1 -} diff --git a/test/integration/targets/win_reg_stat/aliases b/test/integration/targets/win_reg_stat/aliases deleted file mode 100644 index 4cd27b3cb2..0000000000 --- a/test/integration/targets/win_reg_stat/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group1 diff --git a/test/integration/targets/win_reg_stat/defaults/main.yml b/test/integration/targets/win_reg_stat/defaults/main.yml deleted file mode 100644 index a714e4399d..0000000000 --- a/test/integration/targets/win_reg_stat/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ ---- -test_reg_path: Test Key / [&Ansible*] diff --git a/test/integration/targets/win_reg_stat/meta/main.yml b/test/integration/targets/win_reg_stat/meta/main.yml deleted file mode 100644 index d328716dfa..0000000000 --- a/test/integration/targets/win_reg_stat/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_win_tests diff --git a/test/integration/targets/win_reg_stat/tasks/main.yml b/test/integration/targets/win_reg_stat/tasks/main.yml deleted file mode 100644 index bb12c91665..0000000000 --- a/test/integration/targets/win_reg_stat/tasks/main.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -- name: get value of expand string %windir% - win_command: powershell.exe $env:windir - register: win_dir_value - -- name: template out test registry structure - win_template: - src: test_reg.reg.j2 - dest: '{{ win_output_dir }}\test_reg.reg' - -- name: import test registry structure - win_command: reg.exe import "{{ win_output_dir }}\test_reg.reg" - -- block: - - name: run tests - import_tasks: tests.yml - - always: - - name: remove test registry key - win_regedit: - path: HKCU:\{{ test_reg_path }} - state: absent - delete_key: True - - - name: remove template registry file - win_file: - path: '{{ win_output_dir }}\test_reg.reg' - state: absent diff --git a/test/integration/targets/win_reg_stat/tasks/tests.yml b/test/integration/targets/win_reg_stat/tasks/tests.yml deleted file mode 100644 index 5424ba4d45..0000000000 --- a/test/integration/targets/win_reg_stat/tasks/tests.yml +++ /dev/null @@ -1,377 +0,0 @@ ---- -- name: expect failure when not passing in path option - win_reg_stat: - name: a - register: actual - failed_when: "actual.msg != 'Get-AnsibleParam: Missing required argument: path'" - -- name: expect failure when passing in an invalid hive - win_reg_stat: - path: ABCD:\test - register: actual - failed_when: 'actual.msg != "path: ABCD:\\test is not a valid registry path, see module documentation for examples."' - -- name: get known nested reg key structure - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - register: actual - -- name: set expected value for reg structure - set_fact: - expected: - changed: false - exists: true - failed: false - properties: - binary: { raw_value: ["0x01", "0x16"], type: 'REG_BINARY', value: [1, 22] } - dword: { raw_value: 1, type: 'REG_DWORD', value: 1 } - expand: { raw_value: '%windir%\dir', type: 'REG_EXPAND_SZ', value: "{{win_dir_value.stdout_lines[0]}}\\dir" } - large_dword: { raw_value: 4294967295, type: 'REG_DWORD', value: 4294967295 } - large_qword: { raw_value: 18446744073709551615, type: 'REG_QWORD', value: 18446744073709551615 } - multi: { raw_value: ['a, b', 'c'], type: 'REG_MULTI_SZ', value: ['a, b', 'c'] } - qword: { raw_value: 1, type: 'REG_QWORD', value: 1 } - string: { raw_value: 'test', type: 'REG_SZ', value: 'test' } - sub_keys: - - nest1 - - nest2 - -- name: assert get known nested reg key structure - assert: - that: - - actual == expected - -- name: get known reg key with no sub keys but some properties - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\single - register: actual - -- name: set expected value for reg key with no sub keys but some properties - set_fact: - expected: - changed: false - exists: true - failed: false - properties: - none: { raw_value: [], type: 'REG_NONE', value: [] } - none1: { raw_value: ["0x00"], type: 'REG_NONE', value: [0] } - string1: { raw_value: '', type: 'REG_SZ', value: '' } - string2: { raw_value: 'abc123', type: 'REG_SZ', value: 'abc123' } - sub_keys: [] - -- name: assert get known reg key with no sub keys but some properties - assert: - that: - - actual == expected - -- name: get known reg key without sub keys and properties - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested\nest2 - register: actual - -- name: set expected value for reg key without sub keys or properties - set_fact: - expected: - changed: false - exists: true - failed: false - properties: {} - sub_keys: [] - register: expected - -- name: assert get known reg key without sub keys and properties - assert: - that: - - actual == expected - -- name: get non-existent reg key - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Thispathwillneverexist - register: actual - -- name: set expected value for non-existent reg key - set_fact: - expected: - changed: false - exists: false - failed: false - -- name: assert get non-existent reg key - assert: - that: - - actual == expected - -- name: get string property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - name: string - register: actual - -- name: set expected string property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: 'test' - type: 'REG_SZ' - value: 'test' - -- name: assert get string property - assert: - that: - - actual == expected - -- name: get expand string property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - name: expand - register: actual - -- name: set expected expand string property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: '%windir%\dir' - type: 'REG_EXPAND_SZ' - value: "{{win_dir_value.stdout_lines[0]}}\\dir" - -- name: assert get expand string property - assert: - that: - - actual == expected - -- name: get multi string property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - name: multi - register: actual - -- name: set expected multi string property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: ['a, b', 'c'] - type: 'REG_MULTI_SZ' - value: ['a, b', 'c'] - -- name: assert get multi string property - assert: - that: - - actual == expected - -- name: get binary property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - name: binary - register: actual - -- name: set expected binary property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: ["0x01", "0x16"] - type: 'REG_BINARY' - value: [1, 22] - -- name: assert get binary property - assert: - that: - - actual == expected - -- name: get dword property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - name: dword - register: actual - -- name: set expected dword property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: 1 - type: 'REG_DWORD' - value: 1 - -- name: assert get dword property - assert: - that: - - actual == expected - -- name: get qword property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\nested - name: qword - register: actual - -- name: set expected qword property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: 1 - type: 'REG_QWORD' - value: 1 - -- name: assert get qword property - assert: - that: - - actual == expected - -- name: get none property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\single - name: none - register: actual - -- name: set expected none property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: [] - type: 'REG_NONE' - value: [] - -- name: assert get none property - assert: - that: - - actual == expected - -- name: get none with value property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\single - name: none1 - register: actual - -- name: set expected none with value property - set_fact: - expected: - changed: false - exists: true - failed: false - raw_value: ["0x00"] - type: 'REG_NONE' - value: [0] - -- name: assert get non with value property - assert: - that: - - actual == expected - -- name: get non-existent property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\single - name: doesnotexist - register: actual - -- name: set expected non-existent property - set_fact: - expected: - changed: false - exists: false - failed: false - -- name: assert get non-existent property - assert: - that: - - actual == expected - -- name: get key with default property set - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Duplicate Default - register: actual - -- name: assert get key with default property set - assert: - that: - - actual.properties[""]['raw_value'] == "default" - - actual.properties[""]['type'] == "REG_SZ" - - actual.properties[""]['value'] == "default" - - actual.properties['(Default)'].raw_value == "custom" - - actual.properties['(Default)'].type == "REG_SZ" - - actual.properties['(Default)'].value == "custom" - -- name: get default property - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Duplicate Default - name: '' - register: actual - -- name: assert get default property - assert: - that: - - actual.value == "default" - - actual.raw_value == "default" - - actual.type == "REG_SZ" - -- name: get key with blank property set - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Blank Default - register: actual - -- name: assert get key with blank property set - assert: - that: - - actual.properties[""].raw_value == "" - - actual.properties[""].type == "REG_SZ" - - actual.properties[""].value == "" - - actual.properties['(Default)'].raw_value == "" - - actual.properties['(Default)'].type == "REG_SZ" - - actual.properties['(Default)'].value == "" - -- name: get default property as empty string - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Blank Default - name: '' - register: actual - -- name: assert get default property as empty string - assert: - that: - - actual.value == "" - - actual.raw_value == "" - - actual.type == "REG_SZ" - -- name: get key with no properties set - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Empty Default - register: actual - -- name: assert get key with no properties set - assert: - that: - - actual.properties == {} - -- name: get default property that has not been set - win_reg_stat: - path: HKCU:\{{ test_reg_path }}\Empty Default - name: '' - register: actual - -- name: assert get default property that has not been set - assert: - that: - - not actual.exists - -# Tests https://github.com/ansible/ansible/issues/59337 -- name: test out all registry hives - win_reg_stat: - path: '{{ item }}' - register: reg_hive_stat - failed_when: not reg_hive_stat.exists - with_items: - - HKCR:\* - - HKCC:\Software - - HKCU:\Software - - HKLM:\Software - - HKU:\.DEFAULT diff --git a/test/integration/targets/win_reg_stat/templates/test_reg.reg.j2 b/test/integration/targets/win_reg_stat/templates/test_reg.reg.j2 deleted file mode 100644 index ac3d44ed73..0000000000 --- a/test/integration/targets/win_reg_stat/templates/test_reg.reg.j2 +++ /dev/null @@ -1,37 +0,0 @@ -Windows Registry Editor Version 5.00 - -[HKEY_CURRENT_USER\{{ test_reg_path }}] - -[HKEY_CURRENT_USER\{{ test_reg_path }}\nested] -"string"="test" -"binary"=hex:01,16 -"dword"=dword:00000001 -"qword"=hex(b):01,00,00,00,00,00,00,00 -"large_dword"=dword:ffffffff -"large_qword"=hex(b):ff,ff,ff,ff,ff,ff,ff,ff -"multi"=hex(7):61,00,2c,00,20,00,62,00,00,00,63,00,00,00,00,00 -"expand"=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,64,00,69,\ - 00,72,00,00,00 - -[HKEY_CURRENT_USER\{{ test_reg_path }}\nested\nest1] -"dontcare"="" - -[HKEY_CURRENT_USER\{{ test_reg_path }}\nested\nest2] - - -[HKEY_CURRENT_USER\{{ test_reg_path }}\single] -"string1"="" -"string2"="abc123" -"none"=hex(0): -"none1"=hex(0):00 - -[HKEY_CURRENT_USER\{{ test_reg_path }}\Empty Default] - - -[HKEY_CURRENT_USER\{{ test_reg_path }}\Blank Default] -@="" -"(Default)"="" - -[HKEY_CURRENT_USER\{{ test_reg_path }}\Duplicate Default] -@="default" -"(Default)"="custom" diff --git a/test/integration/targets/win_regedit/aliases b/test/integration/targets/win_regedit/aliases deleted file mode 100644 index 4f4664b685..0000000000 --- a/test/integration/targets/win_regedit/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group5 diff --git a/test/integration/targets/win_regedit/defaults/main.yml b/test/integration/targets/win_regedit/defaults/main.yml deleted file mode 100644 index ec88487556..0000000000 --- a/test/integration/targets/win_regedit/defaults/main.yml +++ /dev/null @@ -1,3 +0,0 @@ -test_win_regedit_local_key: 'HKLM:\Software\Moo []{}!@#$%^&*()-_=+/key''"?<>' -test_win_regedit_classes_key: HKCR:\.test-ansible -test_win_regedit_hive_key: HKLM:\ANSIBLE\NewKey diff --git a/test/integration/targets/win_regedit/tasks/cleanup.yml b/test/integration/targets/win_regedit/tasks/cleanup.yml deleted file mode 100644 index f10452506e..0000000000 --- a/test/integration/targets/win_regedit/tasks/cleanup.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: load HKLM:\ANSIBLE with test hive - win_command: reg.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat - failed_when: false - -- name: make sure testing keys are removed before test - win_regedit: - path: '{{item}}' - delete_key: yes - state: absent - with_items: - - '{{test_win_regedit_local_key}}' - - '{{test_win_regedit_classes_key}}' - - '{{test_win_regedit_hive_key}}' - -- name: ensure HKLM:\ANSIBLE is unloaded - win_command: reg.exe unload HKLM\ANSIBLE - failed_when: false diff --git a/test/integration/targets/win_regedit/tasks/create_tests.yml b/test/integration/targets/win_regedit/tasks/create_tests.yml deleted file mode 100644 index e8cc536774..0000000000 --- a/test/integration/targets/win_regedit/tasks/create_tests.yml +++ /dev/null @@ -1,228 +0,0 @@ -# repeatable tests for each key type -# takes in the following variables -# test_win_regedit_key_type: the type of key -# test_win_regedit_key_expected_type: the expected key type -# test_win_regedit_key_data1: the data to create first -# test_win_regedit_key_data2: the data to change tp -# test_win_regedit_key_expected_value_null: the expected value for a null key -# test_win_regedit_key_expected_value1: the expected value for the data1 -# test_win_regedit_key_expected_value2: the expected value for the data2 ---- -- name: create a null {{test_win_regedit_key_type}} check - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: empty_{{test_win_regedit_key_type}} - type: '{{test_win_regedit_key_type}}' - state: present - register: null_check - check_mode: yes - -- name: get actual on null {{test_win_regedit_key_type}} check - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: empty_{{test_win_regedit_key_type}} - register: null_actual_check - -- name: assert create a null {{test_win_regedit_key_type}} check - assert: - that: - - null_check is changed - - null_check.data_changed == False - - null_check.data_type_changed == False - - null_actual_check.exists == False - -- name: create a null {{test_win_regedit_key_type}} - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: empty_{{test_win_regedit_key_type}} - type: '{{test_win_regedit_key_type}}' - state: present - register: null_create - -- name: get actual on null {{test_win_regedit_key_type}} - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: empty_{{test_win_regedit_key_type}} - register: null_create_actual - -- name: assert create a null {{test_win_regedit_key_type}} - assert: - that: - - null_create is changed - - null_create.data_changed == False - - null_create.data_type_changed == False - - null_create_actual.exists == True - - null_create_actual.raw_value == test_win_regedit_key_expected_value_null - - null_create_actual.type == test_win_regedit_key_expected_type - when: test_win_regedit_key_type not in ['dword', 'qword'] - -# dword and qword are different, need to convert the expected value null to an int -- name: assert create a null {{test_win_regedit_key_type}} for dword and qword - assert: - that: - - null_create is changed - - null_create.data_changed == False - - null_create.data_type_changed == False - - null_create_actual.exists == True - - null_create_actual.raw_value == test_win_regedit_key_expected_value_null|int - - null_create_actual.type == test_win_regedit_key_expected_type - when: test_win_regedit_key_type in ['dword', 'qword'] - -- name: create a null {{test_win_regedit_key_type}} again - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: empty_{{test_win_regedit_key_type}} - type: '{{test_win_regedit_key_type}}' - state: present - register: null_create_again - -- name: assert create a null {{test_win_regedit_key_type}} again - assert: - that: - - null_create_again is not changed - -- name: create a {{test_win_regedit_key_type}} check - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - data: '{{test_win_regedit_key_data1}}' - type: '{{test_win_regedit_key_type}}' - state: present - register: data_create_check - check_mode: yes - -- name: get actual on {{test_win_regedit_key_type}} check - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - register: data_create_actual_check - -- name: assert create a {{test_win_regedit_key_type}} check - assert: - that: - - data_create_check is changed - - data_create_check.data_changed == False - - data_create_check.data_type_changed == False - - data_create_actual_check.exists == False - -- name: create a {{test_win_regedit_key_type}} - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - data: '{{test_win_regedit_key_data1}}' - type: '{{test_win_regedit_key_type}}' - state: present - register: data_create - -- name: get actual on {{test_win_regedit_key_type}} - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - register: data_create_actual - -- name: assert create a {{test_win_regedit_key_type}} - assert: - that: - - data_create is changed - - data_create.data_changed == False - - data_create.data_type_changed == False - - data_create_actual.exists == True - - data_create_actual.raw_value == test_win_regedit_key_expected_value1 - - data_create_actual.type == test_win_regedit_key_expected_type - when: test_win_regedit_key_type not in ['dword', 'qword'] - -- name: assert create a {{test_win_regedit_key_type}} for dword or qword - assert: - that: - - data_create is changed - - data_create.data_changed == False - - data_create.data_type_changed == False - - data_create_actual.exists == True - - data_create_actual.raw_value == test_win_regedit_key_expected_value1|int - - data_create_actual.type == test_win_regedit_key_expected_type - when: test_win_regedit_key_type in ['dword', 'qword'] - -- name: create a {{test_win_regedit_key_type}} again - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - data: '{{test_win_regedit_key_data1}}' - type: '{{test_win_regedit_key_type}}' - state: present - register: data_create_again - -- name: assert create a {{test_win_regedit_key_type}} again - assert: - that: - - data_create_again is not changed - -- name: change existing {{test_win_regedit_key_type}} data check - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - data: '{{test_win_regedit_key_data2}}' - type: '{{test_win_regedit_key_type}}' - state: present - register: change_data_check - check_mode: yes - -- name: get actual of change existing {{test_win_regedit_key_type}} data check - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - register: change_data_actual_check - -- name: assert change existing {{test_win_regedit_key_type}} data check - assert: - that: - - change_data_check is changed - - change_data_check.data_changed == True - - change_data_check.data_type_changed == False - - change_data_actual_check == data_create_actual - -- name: change existing {{test_win_regedit_key_type}} data - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - data: '{{test_win_regedit_key_data2}}' - type: '{{test_win_regedit_key_type}}' - state: present - register: change_data - -- name: get actual of change existing {{test_win_regedit_key_type}} data - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - register: change_data_actual - -- name: assert change existing {{test_win_regedit_key_type}} data - assert: - that: - - change_data is changed - - change_data.data_changed == True - - change_data.data_type_changed == False - - change_data_actual.raw_value == test_win_regedit_key_expected_value2 - when: test_win_regedit_key_type not in ['dword', 'qword'] - -- name: assert change existing {{test_win_regedit_key_type}} data for dword or qword - assert: - that: - - change_data is changed - - change_data.data_changed == True - - change_data.data_type_changed == False - - change_data_actual.raw_value == test_win_regedit_key_expected_value2|int - when: test_win_regedit_key_type in ['dword', 'qword'] - -- name: change existing {{test_win_regedit_key_type}} data again - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_{{test_win_regedit_key_type}} - data: '{{test_win_regedit_key_data2}}' - type: '{{test_win_regedit_key_type}}' - state: present - register: change_data_again - -- name: assert change existing {{test_win_regedit_key_type}} data again - assert: - that: - - change_data_again is not changed diff --git a/test/integration/targets/win_regedit/tasks/main.yml b/test/integration/targets/win_regedit/tasks/main.yml deleted file mode 100644 index 9b55ed332a..0000000000 --- a/test/integration/targets/win_regedit/tasks/main.yml +++ /dev/null @@ -1,78 +0,0 @@ ---- -- name: make sure we start on a blank state - include_tasks: cleanup.yml - -- block: - - name: run tests for each property type - include_tasks: create_tests.yml - vars: - test_win_regedit_key_type: '{{item.type}}' - test_win_regedit_key_expected_type: '{{item.reg_type}}' - test_win_regedit_key_data1: '{{item.data1}}' - test_win_regedit_key_data2: '{{item.data2}}' - test_win_regedit_key_expected_value_null: '{{item.value_null}}' - test_win_regedit_key_expected_value1: '{{item.value1}}' - test_win_regedit_key_expected_value2: '{{item.value2}}' - loop: - - type: dword - reg_type: REG_DWORD - data1: 1337 # decimal format - data2: 0xffffffff # hex format and larger number - value_null: 0 - value1: 1337 - value2: 4294967295 - - - type: qword - reg_type: REG_QWORD - data1: 18446744073709551615 # larger decimal format - data2: 0x1ffffffff # hex format and larger number - value_null: 0 - value1: 18446744073709551615 - value2: 8589934591 - - - type: string - reg_type: REG_SZ - data1: hello world - data2: new hello world - value_null: "" - value1: hello world - value2: new hello world - - - type: expandstring - reg_type: REG_EXPAND_SZ - data1: '%windir%\test' - data2: '%AppData%\local' - value_null: "" - value1: '%windir%\test' - value2: '%AppData%\local' - - - type: multistring - reg_type: REG_MULTI_SZ - data1: 'entry1' # test single entry as multi string - data2: ['entry1', 2] - value_null: [] - value1: ['entry1'] - value2: ['entry1', '2'] - - - type: binary - reg_type: REG_BINARY - data1: hex:00,01,ee,ff # testing hex string format with hex: in front - data2: [0xff, 0xee, 0x01, 0x00] # testing using just raw hex values - value_null: [] - value1: ["0x00", "0x01", "0xee", "0xff"] - value2: ["0xff", "0xee", "0x01", "0x00"] - - - type: none - reg_type: REG_NONE - data1: aa,bb,be,ef # testing hex string format with hex: in front - data2: [0x01, 0x02] - value_null: [] - value1: ["0xaa", "0xbb", "0xbe", "0xef"] - value2: ["0x01", "0x02"] - - - name: run remaining tests - include_tasks: tests.yml - - always: - - name: make sure testing keys are removed after test - include_tasks: cleanup.yml diff --git a/test/integration/targets/win_regedit/tasks/tests.yml b/test/integration/targets/win_regedit/tasks/tests.yml deleted file mode 100644 index d633e5333b..0000000000 --- a/test/integration/targets/win_regedit/tasks/tests.yml +++ /dev/null @@ -1,737 +0,0 @@ ---- -- name: check warning is fired if path with / as separators is used - win_regedit: - path: HKLM:\SOFTWARE/Microsoft - state: present - register: forward_separator_warn - -- name: assert warning is fired if / is used as a separator - assert: - that: - - forward_separator_warn.deprecations|length == 1 - - forward_separator_warn.deprecations[0].msg == "path is not using '\\' as a separator, support for '/' as a separator will be removed in a future Ansible version" - - forward_separator_warn.deprecations[0].version == 2.12 - -- name: fail run win_regedit with larger dword - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: test - data: 0xffffffff1 - type: dword - state: present - register: large_dword - failed_when: large_dword.msg != 'data cannot be larger than 0xffffffff when type is dword' - -- name: fail run win_regedit with larger qword - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: test - data: 0xffffffffffffffff1 - type: qword - state: present - register: large_qword - failed_when: large_qword.msg != 'data cannot be larger than 0xffffffffffffffff when type is qword' - -- name: run win_regedit with invalid path - win_regedit: - path: ABCD:\efg - register: invalid_path - failed_when: "invalid_path.msg != 'path: ABCD:\\efg is not a valid powershell path, see module documentation for examples.'" - -- name: change string to binary check - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_string - data: hex:00,01 - type: binary - state: present - register: change_string_binary_check - check_mode: yes - -- name: get actual change string to binary check - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_string - register: change_string_binary_actual_check - -- name: assert change string to binary check - assert: - that: - - change_string_binary_check is changed - - change_string_binary_check.data_changed == True - - change_string_binary_check.data_type_changed == True - - change_string_binary_actual_check.type == 'REG_SZ' - - change_string_binary_actual_check.raw_value == "new hello world" - -- name: change string to binary - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_string - data: hex:00,01 - type: binary - state: present - register: change_string_binary - -- name: get actual change string to binary - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_string - register: change_string_binary_actual - -- name: assert change string to binary check - assert: - that: - - change_string_binary is changed - - change_string_binary.data_changed == True - - change_string_binary.data_type_changed == True - - change_string_binary_actual.type == 'REG_BINARY' - - change_string_binary_actual.raw_value == ["0x00", "0x01"] - -- name: modify the (Default) key property check - win_regedit: - path: '{{test_win_regedit_local_key}}' - data: default value - state: present - register: modify_default_check - check_mode: yes - -- name: get actual modify the (Default) key property check - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - name: '' - register: modify_default_actual_check - -- name: assert modify the (Default) key property check - assert: - that: - - modify_default_check is changed - - not modify_default_actual_check.exists - -- name: modify the (Default) key property - win_regedit: - path: '{{test_win_regedit_local_key}}' - data: default value - state: present - register: modify_default - -- name: get actual modify the (Default) key property - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - name: '' - register: modify_default_actual - -- name: assert modify the (Default) key property - assert: - that: - - modify_default is changed - - modify_default_actual.value == "default value" - -- name: create an actual property called (Default) - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: (Default) - data: custom default value - type: expandstring - state: present - register: create_specific_default_check - check_mode: yes - -- name: get actual value for (Default) property - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - register: create_specific_default_actual_check - -- name: assert create specific property called (Default) check - assert: - that: - - create_specific_default_check is changed - - create_specific_default_actual_check.properties[""].value == "default value" - - not "(Default)" in create_specific_default_actual_check.properties - -- name: create an actual property called (Default) - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: (Default) - data: custom default value - type: expandstring - state: present - register: create_specific_default - -- name: get actual value for (Default) property - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - register: create_specific_default_actual - -- name: assert create specific property called (Default) - assert: - that: - - create_specific_default is changed - - create_specific_default_actual.properties[""].value == "default value" - - create_specific_default_actual.properties["(Default)"].value == "custom default value" - -- name: delete property check - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_binary - state: absent - register: delete_property_check - check_mode: yes - -- name: get actual of delete property check - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_binary - register: delete_property_actual_check - -- name: assert delete property check - assert: - that: - - delete_property_check is changed - - delete_property_actual_check.exists == True - -- name: delete property - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_binary - state: absent - register: delete_property - -- name: get actual of delete property - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - name: data_binary - register: delete_property_actual - -- name: assert delete property - assert: - that: - - delete_property is changed - - delete_property_actual.exists == False - -- name: delete property again - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: data_binary - state: absent - register: delete_property_again - -- name: assert delete property again - assert: - that: - - delete_property_again is not changed - -- name: delete the key's (Default) property check - win_regedit: - path: '{{test_win_regedit_local_key}}' - state: absent - delete_key: no - register: delete_default_check - check_mode: yes - -- name: get actual of key's (Default) property check - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - register: delete_default_actual_check - -- name: assert delete the key's (Default) property check - assert: - that: - - delete_default_check is changed - - delete_default_actual_check.properties[""].value == "default value" - - delete_default_actual_check.properties["(Default)"].value == "custom default value" - -- name: delete the key's (Default) property - win_regedit: - path: '{{test_win_regedit_local_key}}' - state: absent - delete_key: no - register: delete_default - -- name: get actual of key's (Default) property - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - register: delete_default_actual - -- name: assert delete the key's (Default) property - assert: - that: - - delete_default is changed - - not "" in delete_default_actual.properties - - delete_default_actual.properties["(Default)"].value == "custom default value" - -- name: recreate the key's (Default) property for next test - win_regedit: - path: '{{test_win_regedit_local_key}}' - data: default value - -- name: delete the custom (Default) property check - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: (Default) - state: absent - delete_key: no - register: delete_custom_default_check - check_mode: yes - -- name: get actual of key's (Default) property check - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - register: delete_custom_default_actual_check - -- name: assert delete the custom (Default) property check - assert: - that: - - delete_custom_default_check is changed - - delete_custom_default_actual_check.properties[""].value == "default value" - - delete_custom_default_actual_check.properties["(Default)"].value == "custom default value" - -- name: delete the custom (Default) property - win_regedit: - path: '{{test_win_regedit_local_key}}' - name: (Default) - state: absent - delete_key: no - register: delete_custom_default - -- name: get actual of key's (Default) property - win_reg_stat: - path: '{{ test_win_regedit_local_key }}' - register: delete_custom_default_actual - -- name: assert delete the custom (Default) property - assert: - that: - - delete_custom_default is changed - - delete_custom_default_actual.properties[""].value == "default value" - - not "(Default)" in delete_custom_default_actual.properties - -- name: add some nested keys for later deletion - win_regedit: - path: '{{test_win_regedit_local_key}}\{{item}}' - state: present - loop: - - nest1 - - nest2 - - nest1\nested - -- name: delete key and it's sub keys check - win_regedit: - path: '{{test_win_regedit_local_key}}' - state: absent - delete_key: yes - register: delete_key_check - check_mode: yes - -- name: get actual of delete key and it's sub keys check - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - register: delete_key_actual_check - -- name: assert delete key and it's sub keys check - assert: - that: - - delete_key_check is changed - - delete_key_actual_check.exists - - delete_key_actual_check.sub_keys == ["nest1", "nest2"] - -- name: delete key and it's sub keys - win_regedit: - path: '{{test_win_regedit_local_key}}' - state: absent - delete_key: yes - register: delete_key - -- name: get actual of delete key and it's sub keys - win_reg_stat: - path: '{{test_win_regedit_local_key}}' - register: delete_key_actual - -- name: assert delete key and it's sub keys - assert: - that: - - delete_key is changed - - delete_key_actual.exists == False - -- name: delete key and it's sub keys again - win_regedit: - path: '{{test_win_regedit_local_key}}' - state: absent - delete_key: yes - register: delete_key_again - -- name: assert delete key and it's sub keys again - assert: - that: - - delete_key_again is not changed - -- name: create a new key without specifying the property - win_regedit: - path: '{{ test_win_regedit_local_key }}\new' - state: present - register: create_key_no_prop - -- name: get result of create a new key without specifying the property - win_reg_stat: - path: '{{ test_win_regedit_local_key }}\new' - register: create_key_no_prop_actual - -- name: assert create a new key without specifying the property - assert: - that: - - create_key_no_prop is changed - - not create_key_no_prop.data_changed - - not create_key_no_prop.data_type_changed - - create_key_no_prop_actual.exists - - create_key_no_prop_actual.properties == {} - -- name: create key in HKEY_CLASSES_ROOT check - win_regedit: - path: '{{test_win_regedit_classes_key}}' - name: test - data: test - type: string - state: present - register: create_hkcr_key_check - check_mode: yes - -- name: get actual of create key in HKEY_CLASSES_ROOT check - win_reg_stat: - path: '{{test_win_regedit_classes_key}}' - register: create_hkcr_key_actual_check - -- name: assert create key in HKEY_CLASSES_ROOT check - assert: - that: - - create_hkcr_key_check is changed - - create_hkcr_key_actual_check.exists == False - -- name: create key in HKEY_CLASSES_ROOT - win_regedit: - path: '{{test_win_regedit_classes_key}}' - name: test - data: test - type: string - state: present - register: create_hkcr_key - -- name: get actual of create key in HKEY_CLASSES_ROOT - win_reg_stat: - path: '{{test_win_regedit_classes_key}}' - register: create_hkcr_key_actual - -- name: assert create key in HKEY_CLASSES_ROOT - assert: - that: - - create_hkcr_key is changed - - create_hkcr_key_actual.exists == True - - create_hkcr_key_actual.properties.test is defined - -- name: create key in HKEY_CLASSES_ROOT again - win_regedit: - path: '{{test_win_regedit_classes_key}}' - name: test - data: test - type: string - state: present - register: create_hkcr_key_again - -- name: assert create key in HKEY_CLASSES_ROOT again - assert: - that: - - create_hkcr_key_again is not changed - -# https://github.com/ansible/ansible/issues/31782 -- name: create property like a json string - win_regedit: - path: '{{test_win_regedit_local_key}}\NewKey' - name: '{7f51bda7-bcea-465a-9eb6-5a2bcd9cb52f}' - data: test data - type: string - state: present - register: create_prop_with_json - -- name: get result of create property like a json string - win_reg_stat: - path: '{{test_win_regedit_local_key}}\NewKey' - name: '{7f51bda7-bcea-465a-9eb6-5a2bcd9cb52f}' - register: create_prop_with_json_result - -- name: assert results of create property like a json string - assert: - that: - - create_prop_with_json is changed - - create_prop_with_json_result.exists == True - - create_prop_with_json_result.value == 'test data' - -- name: create property like a json string (idempotent) - win_regedit: - path: '{{test_win_regedit_local_key}}\NewKey' - name: '{7f51bda7-bcea-465a-9eb6-5a2bcd9cb52f}' - data: test data - type: string - state: present - register: create_prop_with_json_again - -- name: assert results of create property like a json string (idempotent) - assert: - that: - - create_prop_with_json_again is not changed - -- name: create new key in loaded hive (check mode) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - state: present - hive: C:\Users\Default\NTUSER.dat - register: new_key_in_hive_check - check_mode: yes - -- name: get result of create new key in loaded hive (check mode) - win_shell: | - $ErrorActionPreference = "Stop" - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - Test-Path -Path HKLM:\ANSIBLE\NewKey - [GC]::Collect() - [GC]::WaitForPendingFinalizers() - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: new_key_in_hive_result_check - -- name: assert result of create new key in loaded hive (check mode) - assert: - that: - - new_key_in_hive_check is changed - - new_key_in_hive_result_check.stdout == "False\r\n" - -- name: create new key in loaded hive - win_regedit: - path: '{{test_win_regedit_hive_key}}' - state: present - hive: C:\Users\Default\NTUSER.dat - register: new_key_in_hive - -- name: get result of create new key in loaded hive - win_shell: | - $ErrorActionPreference = "Stop" - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - Test-Path -Path HKLM:\ANSIBLE\NewKey - [GC]::Collect() - [GC]::WaitForPendingFinalizers() - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: new_key_in_hive_result - -- name: assert result of create new key in loaded hive - assert: - that: - - new_key_in_hive is changed - - new_key_in_hive_result.stdout == "True\r\n" - -- name: create new key in loaded hive (idempotent) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - state: present - hive: C:\Users\Default\NTUSER.dat - register: new_key_in_hive_again - -- name: assert result of create new key in loaded hive (idempotent) - assert: - that: - - new_key_in_hive_again is not changed - -- name: set hive key property (check mode) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - name: TestProp - data: string - type: string - state: present - hive: C:\Users\Default\NTUSER.dat - register: new_prop_in_hive_check - check_mode: yes - -- name: get result of set hive key property (check mode) - win_shell: | - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - $prop = Get-ItemProperty -Path HKLM:\ANSIBLE\NewKey -Name TestProp -ErrorAction SilentlyContinue - if ($prop) { - $prop.TestProp - } - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: new_prop_in_hive_result_check - -- name: assert result of set hive key property (check mode) - assert: - that: - - new_prop_in_hive_check is changed - - new_prop_in_hive_result_check.stdout == "" - -- name: set hive key property - win_regedit: - path: '{{test_win_regedit_hive_key}}' - name: TestProp - data: string - type: string - state: present - hive: C:\Users\Default\NTUSER.dat - register: new_prop_in_hive - -- name: get result of set hive key property - win_shell: | - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - $prop = Get-ItemProperty -Path HKLM:\ANSIBLE\NewKey -Name TestProp -ErrorAction SilentlyContinue - if ($prop) { - $prop.TestProp - } - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: new_prop_in_hive_result - -- name: assert result of set hive key property - assert: - that: - - new_prop_in_hive is changed - - new_prop_in_hive_result.stdout == "string\r\n" - -- name: set hive key property (idempotent) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - name: TestProp - data: string - type: string - state: present - hive: C:\Users\Default\NTUSER.dat - register: new_prop_in_hive_again - -- name: assert result of set hive key property (idempotent) - assert: - that: - - new_prop_in_hive_again is not changed - -- name: remove hive key property (check mode) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - name: TestProp - state: absent - hive: C:\Users\Default\NTUSER.dat - register: remove_prop_in_hive_check - check_mode: yes - -- name: get result of remove hive key property (check mode) - win_shell: | - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - $prop = Get-ItemProperty -Path HKLM:\ANSIBLE\NewKey -Name TestProp -ErrorAction SilentlyContinue - if ($prop) { - $prop.TestProp - } - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: remove_prop_in_hive_result_check - -- name: assert result of remove hive key property (check mode) - assert: - that: - - remove_prop_in_hive_check is changed - - remove_prop_in_hive_result_check.stdout == "string\r\n" - -- name: remove hive key property - win_regedit: - path: '{{test_win_regedit_hive_key}}' - name: TestProp - state: absent - hive: C:\Users\Default\NTUSER.dat - register: remove_prop_in_hive - -- name: get result of remove hive key property - win_shell: | - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - $prop = Get-ItemProperty -Path HKLM:\ANSIBLE\NewKey -Name TestProp -ErrorAction SilentlyContinue - if ($prop) { - $prop.TestProp - } - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: remove_prop_in_hive_result - -- name: assert result of remove hive key property - assert: - that: - - remove_prop_in_hive is changed - - remove_prop_in_hive_result.stdout == "" - -- name: remove hive key property (idempotent) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - name: TestProp - state: absent - hive: C:\Users\Default\NTUSER.dat - register: remove_prop_in_hive_again - -- name: assert result of set hive key property (idempotent) - assert: - that: - - remove_prop_in_hive_again is not changed - -- name: remove key in loaded hive (check mode) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - state: absent - delete_key: yes - hive: C:\Users\Default\NTUSER.dat - register: remove_key_in_hive_check - check_mode: yes - -- name: get result of remove key in loaded hive (check mode) - win_shell: | - $ErrorActionPreference = "Stop" - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - Test-Path -Path HKLM:\ANSIBLE\NewKey - [GC]::Collect() - [GC]::WaitForPendingFinalizers() - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: remove_key_in_hive_result_check - -- name: assert result of removekey in loaded hive (check mode) - assert: - that: - - remove_key_in_hive_check is changed - - remove_key_in_hive_result_check.stdout == "True\r\n" - -- name: remove key in loaded hive - win_regedit: - path: '{{test_win_regedit_hive_key}}' - state: absent - delete_key: yes - hive: C:\Users\Default\NTUSER.dat - register: remove_key_in_hive - -- name: get result of remove key in loaded hive - win_shell: | - $ErrorActionPreference = "Stop" - ®.exe load HKLM\ANSIBLE C:\Users\Default\NTUSER.dat > $null - Test-Path -Path HKLM:\ANSIBLE\NewKey - [GC]::Collect() - [GC]::WaitForPendingFinalizers() - ®.exe unload HKLM\ANSIBLE > $null - exit 0 - register: remove_key_in_hive_result - -- name: assert result of remove key in loaded hive - assert: - that: - - remove_key_in_hive is changed - - remove_key_in_hive_result.stdout == "False\r\n" - -- name: remove key in loaded hive (idempotent) - win_regedit: - path: '{{test_win_regedit_hive_key}}' - state: absent - delete_key: yes - hive: C:\Users\Default\NTUSER.dat - register: remove_key_in_hive_again - -- name: assert result of remove key in loaded hive (idempotent) - assert: - that: - - remove_key_in_hive_again is not changed diff --git a/test/integration/targets/win_service/aliases b/test/integration/targets/win_service/aliases deleted file mode 100644 index 71fee86193..0000000000 --- a/test/integration/targets/win_service/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group7 -shippable/windows/smoketest diff --git a/test/integration/targets/win_service/defaults/main.yml b/test/integration/targets/win_service/defaults/main.yml deleted file mode 100644 index 51567c7e06..0000000000 --- a/test/integration/targets/win_service/defaults/main.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -test_win_service_binary_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/win_service/SleepService.exe -test_win_service_dir: C:\ansible testing\[win_service] -test_win_service_path: '{{ test_win_service_dir }}\SleepService.exe' -test_win_service_name: TestService [*abc] -test_win_service_display_name: Test Service -test_win_service_description: Test Service description diff --git a/test/integration/targets/win_service/files/Program.cs b/test/integration/targets/win_service/files/Program.cs deleted file mode 100644 index d566cb8376..0000000000 --- a/test/integration/targets/win_service/files/Program.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.ServiceProcess; - -namespace SleepService -{ - internal static class Program - { - private static void Main(string[] args) - { - ServiceBase.Run(new ServiceBase[1] - { - (ServiceBase) new SleepService(args) - }); - } - } -} - diff --git a/test/integration/targets/win_service/files/SleepService.cs b/test/integration/targets/win_service/files/SleepService.cs deleted file mode 100644 index c82d7e3314..0000000000 --- a/test/integration/targets/win_service/files/SleepService.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System.ComponentModel; -using System.Diagnostics; -using System.Management; -using System.ServiceProcess; - -namespace SleepService -{ - public class SleepService : ServiceBase - { - private IContainer components = null; - private string[] serviceArgs; - private string displayName; - - public SleepService(string[] args) - { - CanPauseAndContinue = true; - CanShutdown = true; - CanStop = true; - AutoLog = false; - serviceArgs = args; - InitializeComponent(); - - string eventSource = "Ansible Test"; - if (!EventLog.SourceExists(eventSource)) - EventLog.CreateEventSource(eventSource, "Application"); - EventLog.Source = eventSource; - EventLog.Log = "Application"; - } - - private string GetServiceName() - { - using (ManagementObjectCollection.ManagementObjectEnumerator enumerator = new ManagementObjectSearcher(string.Format("SELECT * FROM Win32_Service WHERE ProcessId = {0}", (object)Process.GetCurrentProcess().Id)).Get().GetEnumerator()) - { - if (enumerator.MoveNext()) - return enumerator.Current["Name"].ToString(); - } - return ServiceName; - } - - protected override void OnContinue() - { - EventLog.WriteEntry(string.Format("{0} OnContinue", displayName)); - } - - protected override void OnCustomCommand(int command) - { - EventLog.WriteEntry(string.Format("{0} OnCustomCommand {1}", displayName, command.ToString())); - } - - protected override void OnPause() - { - EventLog.WriteEntry(string.Format("{0} OnPause", displayName)); - } - - protected override void OnStart(string[] args) - { - displayName = this.GetServiceName(); - EventLog.WriteEntry(string.Format("{0} OnStart Args:\n{1}", displayName, string.Join("\n", serviceArgs))); - } - - protected override void OnShutdown() - { - EventLog.WriteEntry(string.Format("{0} OnShutdown", displayName)); - } - - protected override void OnStop() - { - EventLog.WriteEntry(string.Format("{0} OnStop", displayName)); - } - - protected override void Dispose(bool disposing) - { - if (disposing && components != null) - components.Dispose(); - base.Dispose(disposing); - } - - private void InitializeComponent() - { - components = new Container(); - ServiceName = nameof(SleepService); - } - } -} - diff --git a/test/integration/targets/win_service/tasks/main.yml b/test/integration/targets/win_service/tasks/main.yml deleted file mode 100644 index 5d7a0c2bc1..0000000000 --- a/test/integration/targets/win_service/tasks/main.yml +++ /dev/null @@ -1,57 +0,0 @@ -# test code for the win_service module -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: create test directory - win_file: - path: '{{ test_win_service_dir }}' - state: directory - -# This binary has been pre-compiled with the code in the files directory of this role -- name: download service executable - win_get_url: - url: '{{ test_win_service_binary_url }}' - dest: '{{ test_win_service_path }}' - -- name: remove the dummy test services if it is left over from previous tests - win_service: - name: '{{ item }}' - force_dependent_services: True - state: absent - with_items: - - '{{ test_win_service_name }}' - - TestServiceParent2 - - TestServiceDependency - -- block: - - include_tasks: tests.yml - - always: - - name: remove test services - win_service: - name: '{{ item }}' - force_dependent_services: True - state: absent - with_items: - - '{{ test_win_service_name }}' - - TestServiceParent2 - - TestServiceDependency - - - name: remove test directory - win_file: - path: '{{ test_win_service_dir }}' - state: absent diff --git a/test/integration/targets/win_service/tasks/tests.yml b/test/integration/targets/win_service/tasks/tests.yml deleted file mode 100644 index 05ada8094b..0000000000 --- a/test/integration/targets/win_service/tasks/tests.yml +++ /dev/null @@ -1,912 +0,0 @@ ---- -- name: create new dummy test service - win_service: - name: "{{test_win_service_name}}" - path: "{{test_win_service_path}}" - display_name: "{{test_win_service_display_name}}" - description: "{{test_win_service_description}}" - register: win_service_added - -- name: check that creating a new service succeeds with a change - assert: - that: - - win_service_added is changed - - win_service_added.name == test_win_service_name - - win_service_added.can_pause_and_continue == False - - win_service_added.display_name == test_win_service_display_name - - win_service_added.description == test_win_service_description - - win_service_added.path == test_win_service_path - - win_service_added.state == 'stopped' - - win_service_added.start_mode == 'auto' - - win_service_added.username == 'LocalSystem' - - win_service_added.desktop_interact == False - - win_service_added.dependencies == [] - - win_service_added.depended_by == [] - - win_service_added.exists == True - -- name: test win_service module with short name - win_service: - name: "{{test_win_service_name}}" - register: win_service_name - -- name: check win_service result with short name - assert: - that: - - win_service_name is not changed - - win_service_name.name == test_win_service_name - - win_service_name.can_pause_and_continue == False - - win_service_name.display_name == test_win_service_display_name - - win_service_name.start_mode == 'auto' - - win_service_name.state == 'stopped' - - win_service_name.description == test_win_service_description - - win_service_name.exists == True - - win_service_name.path == test_win_service_path - - win_service_name.username == 'LocalSystem' - - win_service_name.desktop_interact == False - - win_service_name.dependencies == [] - - win_service_name.depended_by == [] - -- name: test win_service module with display name - win_service: - name: "{{test_win_service_display_name}}" - register: win_service_display_name - -- name: check win_service result with display name - assert: - that: - - win_service_display_name is not changed - - win_service_display_name.name == test_win_service_name - - win_service_display_name.can_pause_and_continue == False - - win_service_display_name.display_name == test_win_service_display_name - - win_service_display_name.start_mode == 'auto' - - win_service_display_name.state == 'stopped' - - win_service_display_name.description == test_win_service_description - - win_service_display_name.exists == True - - win_service_display_name.path == test_win_service_path - - win_service_display_name.username == 'LocalSystem' - - win_service_display_name.desktop_interact == False - - win_service_display_name.dependencies == [] - - win_service_display_name.depended_by == [] - -- name: test win_service module with invalid name - win_service: - name: iamnotaservice - register: win_service_invalid - -- name: check win_service result with invalid name - assert: - that: - - win_service_invalid is not changed - - win_service_invalid.exists == False - -- name: test win_service module with invalid name and absent state - win_service: - name: iamnotaservice - state: absent - register: win_service_invalid_with_absent - -- name: check win_service result with invalid name and absent state - assert: - that: - - win_service_invalid_with_absent is not changed - - win_service_invalid_with_absent.exists == False - -- name: test win_service module with invalid name and startup - win_service: - name: iamnotaservice - state: started - register: win_service_invalid_with_action - failed_when: win_service_invalid_with_action.msg != "Service \'iamnotaservice\' is not installed, need to set \'path\' to create a new service" - -- name: make sure the service is stopped and disabled for next tests - win_service: - name: "{{test_win_service_name}}" - state: stopped - start_mode: disabled - register: win_service_stopped_disabled - -- name: try to start the disabled service - win_service: - name: "{{test_win_service_name}}" - state: started - register: win_service_start_disabled - failed_when: "'Cannot start service ' + test_win_service_name + ' on computer' not in win_service_start_disabled.msg" - -- name: enable the service for manual startup - win_service: - name: "{{test_win_service_name}}" - start_mode: manual - register: win_service_manual_start_mode - -- name: check that enabling the service for manual startup succeeded - assert: - that: - - win_service_manual_start_mode is changed - - win_service_manual_start_mode.start_mode == 'manual' - - win_service_manual_start_mode.state == 'stopped' - -- name: enable the service for manual startup again - win_service: - name: "{{test_win_service_name}}" - start_mode: manual - register: win_service_manual_start_mode_again - -- name: check that enabling service for manual startup again didn't change anything - assert: - that: - - win_service_manual_start_mode_again is not changed - - win_service_manual_start_mode_again.start_mode == 'manual' - - win_service_manual_start_mode_again.state == 'stopped' - -- name: enable the service for delayed startup from non automatic - win_service: - name: "{{test_win_service_name}}" - start_mode: delayed - register: win_service_delayed_start_mode - -- name: check that that enabling the service for delayed startup succeeded - assert: - that: - - win_service_delayed_start_mode is changed - - win_service_delayed_start_mode.start_mode == 'delayed' - - win_service_delayed_start_mode.state == 'stopped' - -- name: enable the service for delayed startup from non automatic again - win_service: - name: "{{test_win_service_name}}" - start_mode: delayed - register: win_service_delayed_start_mode_again - -- name: check that enabling the service for delayed startup again no changes - assert: - that: - - win_service_delayed_start_mode_again is not changed - - win_service_delayed_start_mode_again.start_mode == 'delayed' - - win_service_delayed_start_mode_again.state == 'stopped' - -- name: enable the service for automatic startup - win_service: - name: "{{test_win_service_name}}" - start_mode: auto - register: win_service_auto_start_mode - -- name: check that enabling the service for auto startup succeeded - assert: - that: - - win_service_auto_start_mode is changed - - win_service_auto_start_mode.start_mode == 'auto' - - win_service_auto_start_mode.state == 'stopped' - -- name: enable the service for automatic startup again - win_service: - name: "{{test_win_service_name}}" - start_mode: auto - register: win_service_auto_start_mode_again - -- name: check that enabling the service for auto startup again no changes - assert: - that: - - win_service_auto_start_mode_again is not changed - - win_service_auto_start_mode_again.start_mode == 'auto' - - win_service_auto_start_mode_again.state == 'stopped' - -- name: enable the service for delayed startup from automatic - win_service: - name: "{{test_win_service_name}}" - start_mode: delayed - register: win_service_delayed_start_mode_from_auto - -- name: check that enabling the service for delayed startup from auto succeeded - assert: - that: - - win_service_delayed_start_mode_from_auto is changed - - win_service_delayed_start_mode_from_auto.start_mode == 'delayed' - - win_service_delayed_start_mode_from_auto.state == 'stopped' - -- name: enable the service for delayed startup from automatic again - win_service: - name: "{{test_win_service_name}}" - start_mode: delayed - register: win_service_delayed_start_mode_from_auto_again - -- name: check that enabling the service for delayed startup from auto succeeded again no change - assert: - that: - - win_service_delayed_start_mode_from_auto_again is not changed - - win_service_delayed_start_mode_from_auto_again.start_mode == 'delayed' - - win_service_delayed_start_mode_from_auto_again.state == 'stopped' - -- name: start the service - win_service: - name: "{{test_win_service_name}}" - state: started - register: win_service_start - -- name: check that starting the service succeeds with changes - assert: - that: - - win_service_start is changed - - win_service_start.state == 'running' - -- name: start the service again - win_service: - name: "{{test_win_service_name}}" - state: started - register: win_service_start_again - -- name: check that starting the service succeeds again with no changes - assert: - that: - - win_service_start_again is not changed - - win_service_start_again.state == 'running' - -- name: restart the service - win_service: - name: "{{test_win_service_name}}" - state: restarted - register: win_service_restart - -- name: check that restarting the service succeeds with changes - assert: - that: - - win_service_restart is changed - - win_service_restart.state =='running' - -- name: restart the service again - win_service: - name: "{{test_win_service_name}}" - state: restarted - register: win_service_restart_again - -- name: check that restarting the service again succeeds with changes - assert: - that: - - win_service_restart_again is changed - - win_service_restart_again.state =='running' - -- name: disable the service while running - win_service: - name: "{{test_win_service_name}}" - start_mode: disabled - register: win_service_disabled_while_running - -- name: check that disabling the service succeeds, service is still running - assert: - that: - - win_service_disabled_while_running is changed - - win_service_disabled_while_running.start_mode == 'disabled' - - win_service_disabled_while_running.state == 'running' - -- name: disable the service while running again - win_service: - name: "{{test_win_service_name}}" - start_mode: disabled - register: win_service_disabled_while_running_again - -- name: check that disabling the service again succeeds, service is still running but with no changes - assert: - that: - - win_service_disabled_while_running_again is not changed - - win_service_disabled_while_running_again.start_mode == 'disabled' - - win_service_disabled_while_running_again.state == 'running' - -- name: stop the service - win_service: - name: "{{test_win_service_name}}" - state: stopped - register: win_service_stopped - -- name: check that stopping the service succeeds with changes - assert: - that: - - win_service_stopped is changed - - win_service_stopped.state == 'stopped' - -- name: stop the service again - win_service: - name: "{{test_win_service_name}}" - state: stopped - register: win_service_stopped_again - -- name: check that stopping the service again succeeds with no changes - assert: - that: - - win_service_stopped_again is not changed - - win_service_stopped_again.state == 'stopped' - -- name: set password without username - win_service: - name: "{{test_win_service_name}}" - password: password - register: win_service_change_password_without_user - failed_when: win_service_change_password_without_user.msg != "The argument 'username' must be supplied with 'password'" - -- name: set service username to Network Service and desktop interact fail - win_service: - name: "{{test_win_service_name}}" - username: NT AUTHORITY\NetworkService - desktop_interact: True - register: win_desktop_interact_not_local_system - failed_when: win_desktop_interact_not_local_system.msg != "Can only set 'desktop_interact' to true when 'username' equals 'LocalSystem'" - -- name: set service username to Network Service - win_service: - name: "{{test_win_service_name}}" - username: NT AUTHORITY\NetworkService - register: win_service_change_password_network_service - -- name: check that the service user has been set to Network Service - assert: - that: - - win_service_change_password_network_service is changed - - win_service_change_password_network_service.username == 'NT AUTHORITY\\NETWORK SERVICE' - - win_service_change_password_network_service.desktop_interact == False - -- name: set service username to Network Service again - win_service: - name: "{{test_win_service_name}}" - username: NT AUTHORITY\NetworkService - register: win_service_change_password_network_service_again - -- name: check that the service user has been set to Network Service and nothing changed - assert: - that: - - win_service_change_password_network_service_again is not changed - - win_service_change_password_network_service_again.username == 'NT AUTHORITY\\NETWORK SERVICE' - - win_service_change_password_network_service_again.desktop_interact == False - -- name: set service username to interact with desktop with existing user to fail - win_service: - name: "{{test_win_service_name}}" - desktop_interact: True - register: win_service_desktop_interact_current_user_fail - failed_when: win_service_desktop_interact_current_user_fail.msg != "Can only set desktop_interact to true when service is run with/or 'username' equals 'LocalSystem'" - -- name: set service username to Local Service - win_service: - name: "{{test_win_service_name}}" - username: NT AUTHORITY\LocalService - register: win_service_change_password_local_service - -- name: check that the service user has been set to Local Service - assert: - that: - - win_service_change_password_local_service is changed - - win_service_change_password_local_service.username == 'NT AUTHORITY\\LOCAL SERVICE' - - win_service_change_password_local_service.desktop_interact == False - -- name: set service username to Local Service again - win_service: - name: "{{test_win_service_name}}" - username: NT AUTHORITY\LocalService - register: win_service_change_password_local_service_again - -- name: check that the service user has been set to Local Service and nothing changed - assert: - that: - - win_service_change_password_local_service_again is not changed - - win_service_change_password_local_service_again.username == 'NT AUTHORITY\\LOCAL SERVICE' - - win_service_change_password_local_service_again.desktop_interact == False - -- name: set service username to Local System - win_service: - name: "{{test_win_service_name}}" - username: LocalSystem - register: win_service_change_password_local_system - -- name: check that the service user has been set to Local System - assert: - that: - - win_service_change_password_local_system is changed - - win_service_change_password_local_system.username == 'LocalSystem' - - win_service_change_password_local_system.desktop_interact == False - -- name: set service username to Local System again - win_service: - name: "{{test_win_service_name}}" - username: LocalSystem - register: win_service_change_password_local_system_again - -- name: check that the service user has been set to Local System and nothing changed - assert: - that: - - win_service_change_password_local_system_again is not changed - - win_service_change_password_local_system_again.username == 'LocalSystem' - - win_service_change_password_local_system_again.desktop_interact == False - -- name: set service username to Local System with desktop interaction - win_service: - name: "{{test_win_service_name}}" - username: SYSTEM # tests that you can also set it this way - desktop_interact: True - register: win_service_local_system_desktop - -- name: check that the service has been set to Local System with desktop interaction - assert: - that: - - win_service_local_system_desktop is changed - - win_service_local_system_desktop.username == 'LocalSystem' - - win_service_local_system_desktop.desktop_interact == True - -- name: set service username to Local System with desktop interaction again - win_service: - name: "{{test_win_service_name}}" - username: SYSTEM - desktop_interact: True - register: win_service_local_system_desktop_again - -- name: check that the service has been set to Local System with desktop interaction again - assert: - that: - - win_service_local_system_desktop_again is not changed - - win_service_local_system_desktop_again.username == 'LocalSystem' - - win_service_local_system_desktop_again.desktop_interact == True - -- name: set desktop interaction to disabled - win_service: - name: "{{test_win_service_name}}" - desktop_interact: False - register: win_service_desktop_disable - -- name: check that desktop interaction has been disabled - assert: - that: - - win_service_desktop_disable is changed - - win_service_desktop_disable.username == 'LocalSystem' - - win_service_desktop_disable.desktop_interact == False - -- name: set desktop interaction to disabled again - win_service: - name: "{{test_win_service_name}}" - desktop_interact: False - register: win_service_desktop_disable_again - -- name: check that desktop interaction has been disabled again - assert: - that: - - win_service_desktop_disable_again is not changed - - win_service_desktop_disable_again.username == 'LocalSystem' - - win_service_desktop_disable_again.desktop_interact == False - -- name: set desktop interaction to enabled with current user as LocalSystem - win_service: - name: "{{test_win_service_name}}" - desktop_interact: True - register: win_service_desktop_enable - -- name: check that desktop iteraction has been enabled - assert: - that: - - win_service_desktop_enable is changed - - win_service_desktop_enable.username == 'LocalSystem' - - win_service_desktop_enable.desktop_interact == True - -- name: set desktop interaction to enabled with current user as LocalSystem again - win_service: - name: "{{test_win_service_name}}" - desktop_interact: True - register: win_service_desktop_enable_again - -- name: check that desktop iteraction has been enabled again - assert: - that: - - win_service_desktop_enable_again is not changed - - win_service_desktop_enable_again.username == 'LocalSystem' - - win_service_desktop_enable_again.desktop_interact == True - -- name: set service username to current user - win_service: - name: "{{test_win_service_name}}" - username: "{{ansible_user}}" - password: "{{ansible_password}}" - register: win_service_change_password_current_user - -- name: check that the service user has been set to current user - assert: - that: - - win_service_change_password_current_user is changed - - win_service_change_password_current_user.username|lower == '.\\{{ansible_user|lower}}' - - win_service_change_password_current_user.desktop_interact == False - -- name: set service username to current user again - win_service: - name: "{{test_win_service_name}}" - username: "{{ansible_user}}" - password: "{{ansible_password}}" - register: win_service_change_password_current_user_again - -- name: check that the service user has been set to current user and nothing changed - assert: - that: - - win_service_change_password_current_user_again is not changed - - win_service_change_password_current_user_again.username|lower == '.\\{{ansible_user|lower}}' - - win_service_change_password_current_user_again.desktop_interact == False - -- name: set service display name - win_service: - name: "{{test_win_service_name}}" - display_name: Test Service New - register: win_service_display_name - -- name: check that the service display name has been changed - assert: - that: - - win_service_display_name is changed - - win_service_display_name.display_name == 'Test Service New' - -- name: set service display name again - win_service: - name: "{{test_win_service_name}}" - display_name: Test Service New - register: win_service_display_name_again - -- name: check that the service display name has been changed again - assert: - that: - - win_service_display_name_again is not changed - - win_service_display_name_again.display_name == 'Test Service New' - -- name: set service description - win_service: - name: "{{test_win_service_name}}" - description: New Description - register: win_service_description - -- name: check that the service description has been changed - assert: - that: - - win_service_description is changed - - win_service_description.description == 'New Description' - -- name: set service description again - win_service: - name: "{{test_win_service_name}}" - description: New Description - register: win_service_description_again - -- name: check that the service description has been changed again - assert: - that: - - win_service_description_again is not changed - - win_service_description_again.description == 'New Description' - -- name: set service path - win_service: - name: "{{test_win_service_name}}" - path: C:\temp\test.exe - register: win_service_path - -- name: check that the service path has been changed - assert: - that: - - win_service_path is changed - - win_service_path.path == 'C:\\temp\\test.exe' - -- name: set service path again - win_service: - name: "{{test_win_service_name}}" - path: C:\temp\test.exe - register: win_service_path_again - -- name: check that the service path has been changed again - assert: - that: - - win_service_path_again is not changed - - win_service_path_again.path == 'C:\\temp\\test.exe' - -- name: set service path with quotes and env var - win_service: - name: "{{test_win_service_name}}" - path: '"%TEST_SERVICE_PATH%\test.exe"' - register: win_service_env_quote_path - environment: - TEST_SERVICE_PATH: C:\temp - -- name: check that the quoted service path has been changed - assert: - that: - - win_service_env_quote_path is changed - - win_service_env_quote_path.path == '"C:\\temp\\test.exe"' - -- name: set service path with quotes and env var again - win_service: - name: "{{test_win_service_name}}" - path: '"%TEST_SERVICE_PATH%\test.exe"' - register: win_service_env_quote_path_again - environment: - TEST_SERVICE_PATH: C:\temp - -- name: check that the quoted service path has been changed again - assert: - that: - - win_service_env_quote_path_again is not changed - - win_service_env_quote_path_again.path == '"C:\\temp\\test.exe"' - -- name: revert original service path back to normal - win_service: - name: "{{test_win_service_name}}" - path: "{{test_win_service_path}}" - -- name: create new second dependency parent service - win_service: - name: TestServiceParent2 - display_name: Test Service Parent 2 - path: "{{test_win_service_path}}" - -- name: create new dependency service - win_service: - name: TestServiceDependency - display_name: Test Service Dependency - path: "{{test_win_service_path}}" - dependencies: "{{test_win_service_name}}" - register: win_service_dependency_string - -- name: check that the service with a dependency has been created - assert: - that: - - win_service_dependency_string is changed - - win_service_dependency_string.dependencies == ['{{test_win_service_name}}'] - -- name: create new dependencys service again - win_service: - name: TestServiceDependency - dependencies: "{{test_win_service_name}}" - register: win_service_dependency_string_again - -- name: check that the service with a dependency has been created again - assert: - that: - - win_service_dependency_string_again is not changed - - win_service_dependency_string_again.dependencies == ['{{test_win_service_name}}'] - -- name: add another dependency to service - win_service: - name: TestServiceDependency - dependencies: ['TestServiceParent2'] - dependency_action: add - register: win_service_dependency_add - -- name: check that the service with a dependency has been added - assert: - that: - - win_service_dependency_add is changed - - win_service_dependency_add.dependencies == ['TestServiceParent2', '{{test_win_service_name}}'] - -- name: add another dependency to service again - win_service: - name: TestServiceDependency - dependencies: ['TestServiceParent2'] - dependency_action: add - register: win_service_dependency_add_again - -- name: check that the service with a dependency has been added again - assert: - that: - - win_service_dependency_add_again is not changed - - win_service_dependency_add_again.dependencies == ['TestServiceParent2', '{{test_win_service_name}}'] - -- name: remove another dependency to service - win_service: - name: TestServiceDependency - dependencies: ['TestServiceParent2'] - dependency_action: remove - register: win_service_dependency_add - -- name: check that the service with a dependency has been remove - assert: - that: - - win_service_dependency_add is changed - - win_service_dependency_add.dependencies == ['{{test_win_service_name}}'] - -- name: remove another dependency to service again - win_service: - name: TestServiceDependency - dependencies: ['TestServiceParent2'] - dependency_action: remove - register: win_service_dependency_add_again - -- name: check that the service with a dependency has been removed again - assert: - that: - - win_service_dependency_add_again is not changed - - win_service_dependency_add_again.dependencies == ['{{test_win_service_name}}'] - -- name: set dependency with a list - win_service: - name: TestServiceDependency - dependencies: ['{{test_win_service_name}}', 'TestServiceParent2'] - dependency_action: set - register: win_service_dependency_set_list - -- name: check that the service with dependencies has been set - assert: - that: - - win_service_dependency_set_list is changed - - win_service_dependency_set_list.dependencies == ['TestServiceParent2', '{{test_win_service_name}}'] - -- name: make sure all services are stopped, set to LocalSystem and set to auto start before next test - win_service: - name: "{{item}}" - force_dependent_services: True - state: stopped - start_mode: auto - username: LocalSystem - password: "" - with_items: - - '{{test_win_service_name}}' - - TestServiceParent2 - - TestServiceDependency - -- name: start up dependency service - win_service: - name: TestServiceDependency - state: started - -- name: wait 5 seconds for service to propagate service startup - pause: - seconds: 5 - -- name: get stat of 1st parent service - win_service: - name: "{{test_win_service_name}}" - register: win_service_parent1_stat - -- name: get stat of 2nd parent service - win_service: - name: TestServiceParent2 - register: win_service_parent2_stat - -- name: get stat of dependent service - win_service: - name: TestServiceDependency - register: win_service_dependent_stat - -- name: check that the dependency services started correctly and have the correct stats - assert: - that: - - win_service_parent1_stat.state == 'running' - - win_service_parent2_stat.state == 'running' - - win_service_dependent_stat.state == 'running' - - win_service_parent1_stat.depended_by == ['TestServiceDependency'] - - win_service_parent2_stat.depended_by == ['TestServiceDependency'] - -- name: fail to remove service with dependencies - win_service: - name: "{{test_win_service_name}}" - state: absent - register: win_service_removed_failed - failed_when: win_service_removed_failed.msg != "Cannot stop service 'Test Service New (" + test_win_service_name + ")' because it has dependent services. It can only be stopped if the Force flag is set." - -- name: remove the service while ignoring dependencies - win_service: - name: "{{test_win_service_name}}" - force_dependent_services: True - state: absent - register: win_service_removed - -- name: check that removing the service while ignoring dependencies succeeds with changes - assert: - that: - - win_service_removed is changed - - win_service_removed.exists == False - - win_service_removed.description is not defined - - win_service_removed.display_name is not defined - - win_service_removed.name is not defined - - win_service_removed.path is not defined - - win_service_removed.start_mode is not defined - - win_service_removed.state is not defined - - win_service_removed.username is not defined - -- name: create new pausable dummy test service - win_service: - name: "{{test_win_service_name}}" - path: "{{test_win_service_path}}" - display_name: "{{test_win_service_display_name}}" - description: "{{test_win_service_description}}" - state: started - register: stat_pausable_service - -- name: assert get details on a pausable service - assert: - that: - - stat_pausable_service.can_pause_and_continue == True - -- name: pause a service check - win_service: - name: '{{test_win_service_name}}' - state: paused - register: win_service_paused_check - check_mode: yes - -- name: assert pause a service check - assert: - that: - - win_service_paused_check is changed - - win_service_paused_check.state == 'running' - -- name: pause a service - win_service: - name: '{{test_win_service_name}}' - state: paused - register: win_service_paused - -- name: assert pause a service - assert: - that: - - win_service_paused is changed - - win_service_paused.state == 'paused' - -- name: pause a service again - win_service: - name: '{{test_win_service_name}}' - state: paused - register: win_service_paused_again - -- name: assert pause a service again - assert: - that: - - win_service_paused_again is not changed - -- name: start a paused service check - win_service: - name: '{{test_win_service_name}}' - state: started - register: start_paused_service_check - check_mode: yes - -- name: assert start a paused service check - assert: - that: - - start_paused_service_check is changed - - start_paused_service_check.state == 'paused' - -- name: start a paused service - win_service: - name: '{{test_win_service_name}}' - state: started - register: start_paused_service - -- name: assert start a paused service - assert: - that: - - start_paused_service is changed - - start_paused_service.state == 'running' - -- name: pause service for next test - win_service: - name: '{{test_win_service_name}}' - state: paused - -- name: stop a paused service check - win_service: - name: '{{test_win_service_name}}' - state: stopped - force_dependent_services: True - register: stop_paused_service_check - check_mode: yes - -- name: assert stop a paused service check - assert: - that: - - stop_paused_service_check is changed - - stop_paused_service_check.state == 'paused' - -- name: stop a paused service - win_service: - name: '{{test_win_service_name}}' - state: stopped - force_dependent_services: True - register: stop_paused_service - -- name: assert stop a paused service - assert: - that: - - stop_paused_service is changed - - stop_paused_service.state == 'stopped' - -- name: fail to pause a stopped service check - win_service: - name: '{{test_win_service_name}}' - state: paused - register: fail_pause_stopped_service - failed_when: "fail_pause_stopped_service.msg != 'failed to pause service ' + test_win_service_name + ': The service does not support pausing'" diff --git a/test/integration/targets/win_service_info/aliases b/test/integration/targets/win_service_info/aliases deleted file mode 100644 index 71fee86193..0000000000 --- a/test/integration/targets/win_service_info/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group7 -shippable/windows/smoketest diff --git a/test/integration/targets/win_service_info/defaults/main.yml b/test/integration/targets/win_service_info/defaults/main.yml deleted file mode 100644 index 0da553d9b2..0000000000 --- a/test/integration/targets/win_service_info/defaults/main.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -test_path: '{{ remote_tmp_dir }}\win_service_info .ÅÑŚÌβŁÈ [$!@^&test(;)]' -service_url: https://ansible-ci-files.s3.amazonaws.com/test/integration/targets/win_service/SleepService.exe - -service_name1: ansible_service_info_test -service_name2: ansible_service_info_test2 -service_name3: ansible_service_info_other -service_names: -- '{{ service_name1 }}' -- '{{ service_name2 }}' -- '{{ service_name3 }}' diff --git a/test/integration/targets/win_service_info/handlers/main.yml b/test/integration/targets/win_service_info/handlers/main.yml deleted file mode 100644 index ee2d93eb19..0000000000 --- a/test/integration/targets/win_service_info/handlers/main.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -- name: remove test service - win_service: - name: '{{ item }}' - state: absent - loop: '{{ service_names }}' diff --git a/test/integration/targets/win_service_info/meta/main.yml b/test/integration/targets/win_service_info/meta/main.yml deleted file mode 100644 index 9f37e96cd9..0000000000 --- a/test/integration/targets/win_service_info/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: -- setup_remote_tmp_dir diff --git a/test/integration/targets/win_service_info/tasks/main.yml b/test/integration/targets/win_service_info/tasks/main.yml deleted file mode 100644 index d393322236..0000000000 --- a/test/integration/targets/win_service_info/tasks/main.yml +++ /dev/null @@ -1,206 +0,0 @@ ---- -- name: ensure test directory exists - win_file: - path: '{{ test_path }}' - state: directory - -- name: download test binary for services - win_get_url: - url: '{{ service_url }}' - dest: '{{ test_path }}\SleepService.exe' - -- name: create test service - win_service: - name: '{{ item }}' - path: '"{{ test_path }}\SleepService.exe"' - state: stopped - loop: '{{ service_names }}' - notify: remove test service - -- name: test we can get info for all services - win_service_info: - register: all_actual - check_mode: yes # tests that this will run in check mode - -- name: assert test we can get info for all services - assert: - that: - - not all_actual is changed - - all_actual.exists - - all_actual.services | length > 0 - -- name: test info on a missing service - win_service_info: - name: ansible_service_info_missing - register: missing_service - -- name: assert test info on a missing service - assert: - that: - - not missing_service is changed - - not missing_service.exists - -- name: test info on a single service - win_service_info: - name: '{{ service_name1 }}' - register: specific_service - -- name: assert test info on single service - assert: - that: - - not specific_service is changed - - specific_service.exists - - specific_service.services | length == 1 - - specific_service.services[0].checkpoint == 0 - - specific_service.services[0].controls_accepted == [] - - specific_service.services[0].dependencies == [] - - specific_service.services[0].dependency_of == [] - - specific_service.services[0].description == None - - specific_service.services[0].desktop_interact == False - - specific_service.services[0].display_name == service_name1 - - specific_service.services[0].error_control == 'normal' - - specific_service.services[0].failure_actions == [] - - specific_service.services[0].failure_actions_on_non_crash_failure == False - - specific_service.services[0].failure_command == None - - specific_service.services[0].failure_reboot_msg == None - - specific_service.services[0].failure_reset_period_sec == 0 - - specific_service.services[0].launch_protection == 'none' - - specific_service.services[0].load_order_group == "" - - specific_service.services[0].name == service_name1 - - specific_service.services[0].path == '"' ~ test_path + '\\SleepService.exe"' - - specific_service.services[0].pre_shutdown_timeout_ms is defined # Looks like the default for New-Service differs per OS version - - specific_service.services[0].preferred_node == None - - specific_service.services[0].process_id == 0 - - specific_service.services[0].required_privileges == [] - - specific_service.services[0].service_exit_code == 0 - - specific_service.services[0].service_flags == [] - - specific_service.services[0].service_type == 'win32_own_process' - - specific_service.services[0].sid_info == 'none' - - specific_service.services[0].start_mode == 'auto' - - specific_service.services[0].state == 'stopped' - - specific_service.services[0].triggers == [] - - specific_service.services[0].username == 'NT AUTHORITY\SYSTEM' - - specific_service.services[0].wait_hint_ms == 0 - - specific_service.services[0].win32_exit_code == 1077 - -- name: test info on services matching wildcard - win_service_info: - name: ansible_service_info_t* # should match service_name 1 and 2, but not 3 - register: wildcard_service - -- name: assert test info on services matching wildcard - assert: - that: - - not wildcard_service is changed - - wildcard_service.exists - - wildcard_service.services | length == 2 - - wildcard_service.services[0].name == service_name1 - - wildcard_service.services[1].name == service_name2 - -- name: modify service1 to depend on service 2 - win_service: - name: '{{ service_name1 }}' - state: stopped - dependencies: - - '{{ service_name2 }}' - -- name: edit basic settings for service 2 - win_service: - dependencies: - - '{{ service_name3 }}' - description: Service description - display_name: Ansible Service Display Name - name: '{{ service_name2 }}' - state: stopped - -# TODO: move this back into the above once win_service supports them -- name: edit complex settings for service 2 - win_command: sc.exe {{ item.action }} {{ service_name2 }} {{ item.args }} - with_items: - - action: config - args: type= share type= interact error= ignore group= "My group" start= delayed-auto - - action: failure - args: reset= 86400 reboot= "Reboot msg" command= "Command line" actions= run/500/run/600/restart/700/reboot/800 - - action: failureflag - args: 1 - - action: sidtype - args: unrestricted - - action: privs - args: SeBackupPrivilege/SeRestorePrivilege - - action: triggerinfo - args: start/namedpipe/abc start/namedpipe/def start/custom/0e0682e2-9951-4e6d-a36a-a0047e616f28/11223344/aabbccdd start/strcustom/c2961e88-c1f4-4d97-b581-219c852e1c7d/11223344/aabbccdd start/portopen/1234;tcp;imagepath;servicename - -- name: get info of advanced service using display name - win_service_info: - name: Ansible Service Display Name - register: adv_service - -- name: assert get info of advanced service using display_name - assert: - that: - - not adv_service is changed - - adv_service.exists - - adv_service.services | length == 1 - - adv_service.services[0].dependencies == [service_name3] - - adv_service.services[0].dependency_of == [service_name1] - - adv_service.services[0].description == 'Service description' - - adv_service.services[0].desktop_interact == True - - adv_service.services[0].error_control == 'ignore' - - adv_service.services[0].failure_actions | length == 4 - - adv_service.services[0].failure_actions[0].delay_ms == 500 - - adv_service.services[0].failure_actions[0].type == 'run_command' - - adv_service.services[0].failure_actions[1].delay_ms == 600 - - adv_service.services[0].failure_actions[1].type == 'run_command' - - adv_service.services[0].failure_actions[2].delay_ms == 700 - - adv_service.services[0].failure_actions[2].type == 'restart' - - adv_service.services[0].failure_actions[3].delay_ms == 800 - - adv_service.services[0].failure_actions[3].type == 'reboot' - - adv_service.services[0].failure_actions_on_non_crash_failure == True - - adv_service.services[0].failure_command == 'Command line' - - adv_service.services[0].failure_reboot_msg == 'Reboot msg' - - adv_service.services[0].failure_reset_period_sec == 86400 - - adv_service.services[0].load_order_group == 'My group' - - adv_service.services[0].required_privileges == ['SeBackupPrivilege', 'SeRestorePrivilege'] - - adv_service.services[0].service_type == 'win32_share_process' - - adv_service.services[0].sid_info == 'unrestricted' - - adv_service.services[0].start_mode == 'delayed' - - adv_service.services[0].triggers | length == 5 - - adv_service.services[0].triggers[0].action == 'start_service' - - adv_service.services[0].triggers[0].data_items | length == 1 - - adv_service.services[0].triggers[0].data_items[0].data == 'abc' - - adv_service.services[0].triggers[0].data_items[0].type == 'string' - - adv_service.services[0].triggers[0].sub_type == 'named_pipe_event' - - adv_service.services[0].triggers[0].sub_type_guid == '1f81d131-3fac-4537-9e0c-7e7b0c2f4b55' - - adv_service.services[0].triggers[0].type == 'network_endpoint' - - adv_service.services[0].triggers[1].action == 'start_service' - - adv_service.services[0].triggers[1].data_items | length == 1 - - adv_service.services[0].triggers[1].data_items[0].data == 'def' - - adv_service.services[0].triggers[1].data_items[0].type == 'string' - - adv_service.services[0].triggers[1].sub_type == 'named_pipe_event' - - adv_service.services[0].triggers[1].sub_type_guid == '1f81d131-3fac-4537-9e0c-7e7b0c2f4b55' - - adv_service.services[0].triggers[1].type == 'network_endpoint' - - adv_service.services[0].triggers[2].action == 'start_service' - - adv_service.services[0].triggers[2].data_items | length == 2 - - adv_service.services[0].triggers[2].data_items[0].data == 'ESIzRA==' - - adv_service.services[0].triggers[2].data_items[0].type == 'binary' - - adv_service.services[0].triggers[2].data_items[1].data == 'qrvM3Q==' - - adv_service.services[0].triggers[2].data_items[1].type == 'binary' - - adv_service.services[0].triggers[2].sub_type == 'custom' - - adv_service.services[0].triggers[2].sub_type_guid == '0e0682e2-9951-4e6d-a36a-a0047e616f28' - - adv_service.services[0].triggers[2].type == 'custom' - - adv_service.services[0].triggers[3].action == 'start_service' - - adv_service.services[0].triggers[3].data_items | length == 2 - - adv_service.services[0].triggers[3].data_items[0].data == '11223344' - - adv_service.services[0].triggers[3].data_items[0].type == 'string' - - adv_service.services[0].triggers[3].data_items[1].data == 'aabbccdd' - - adv_service.services[0].triggers[3].data_items[1].type == 'string' - - adv_service.services[0].triggers[3].sub_type == 'custom' - - adv_service.services[0].triggers[3].sub_type_guid == 'c2961e88-c1f4-4d97-b581-219c852e1c7d' - - adv_service.services[0].triggers[3].type == 'custom' - - adv_service.services[0].triggers[4].action == 'start_service' - - adv_service.services[0].triggers[4].data_items | length == 1 - - adv_service.services[0].triggers[4].data_items[0].data == ['1234', 'tcp', 'imagepath', 'servicename'] - - adv_service.services[0].triggers[4].data_items[0].type == 'string' - - adv_service.services[0].triggers[4].sub_type == 'firewall_port_open' - - adv_service.services[0].triggers[4].sub_type_guid == 'b7569e07-8421-4ee0-ad10-86915afdad09' - - adv_service.services[0].triggers[4].type == 'firewall_port_event' diff --git a/test/integration/targets/win_setup/aliases b/test/integration/targets/win_setup/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_setup/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_setup/tasks/main.yml b/test/integration/targets/win_setup/tasks/main.yml deleted file mode 100644 index a81a00f1ae..0000000000 --- a/test/integration/targets/win_setup/tasks/main.yml +++ /dev/null @@ -1,141 +0,0 @@ -# test code for the setup module when using winrm connection -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: test setup module - action: setup - register: setup_result - -- name: check windows setup result - assert: - that: - - setup_result is not failed - - setup_result is not changed - - setup_result.ansible_facts - - setup_result.ansible_facts.ansible_os_family == 'Windows' - - setup_result.ansible_facts.ansible_date_time - - setup_result.ansible_facts.ansible_date_time.date - - setup_result.ansible_facts.ansible_date_time.year - - setup_result.ansible_facts.ansible_date_time.month - - setup_result.ansible_facts.ansible_date_time.day - - setup_result.ansible_facts.ansible_date_time.hour is defined - - setup_result.ansible_facts.ansible_date_time.minute is defined - - setup_result.ansible_facts.ansible_date_time.iso8601 - - setup_result.ansible_facts.ansible_distribution - - setup_result.ansible_facts.ansible_distribution_version - - setup_result.ansible_facts.ansible_fqdn - - setup_result.ansible_facts.ansible_hostname - - setup_result.ansible_facts.ansible_ip_addresses - - setup_result.ansible_facts.ansible_system - - setup_result.ansible_facts.ansible_memtotal_mb - - setup_result.ansible_facts.ansible_interfaces - - setup_result.ansible_facts.ansible_interfaces[0] - - setup_result.ansible_facts.ansible_interfaces[0].interface_name - - setup_result.ansible_facts.ansible_interfaces[0].connection_name - - setup_result.ansible_facts.ansible_interfaces[0].interface_index - - setup_result.ansible_facts.ansible_architecture - - setup_result.ansible_facts.ansible_os_name - - setup_result.ansible_facts.ansible_powershell_version - - setup_result.ansible_facts.gather_subset is defined - - setup_result.ansible_facts.gather_subset[0] == 'all' - - setup_result.ansible_facts.module_setup == true - -- name: check setup result only when using https - assert: - that: - - "setup_result.ansible_facts.ansible_win_rm_certificate_expires" - when: ansible_ssh_port|default(5986) != 5985 - -- name: test gather_subset "!all" - setup: - gather_subset: '!all' - register: setup_result - -- name: verify that some known "all" keys are missing (should just be "min" subset) - assert: - that: - - setup_result is not failed - - setup_result is not changed - - setup_result.ansible_facts is defined - - setup_result.ansible_facts.gather_subset[0] == '!all' - - setup_result.ansible_facts.gather_subset is defined - - setup_result.ansible_facts.ansible_ip_addresses is not defined - - setup_result.ansible_facts.ansible_interfaces is not defined - -- name: test gather_subset "!all,!min" with list - setup: - gather_subset: - - '!all' - - '!min' - register: setup_result - -- name: verify that only status keys are returned - assert: - that: - - setup_result is not failed - - setup_result is not changed - - setup_result.ansible_facts is defined - - setup_result.ansible_facts.gather_subset is defined - - setup_result.ansible_facts.gather_subset[0] == '!all' - - setup_result.ansible_facts.gather_subset[1] == '!min' - - setup_result.ansible_facts.keys() | list | union(['gather_subset','module_setup']) | length == 2 - -- name: test gather_subset "!all,!min,interfaces" with list - setup: - gather_subset: - - '!all' - - '!min' - - interfaces - register: setup_result - -- name: verify that only status keys and ansible_interfaces are returned - assert: - that: - - setup_result is not failed - - setup_result is not changed - - setup_result.ansible_facts is defined - - setup_result.ansible_facts.gather_subset is defined - - setup_result.ansible_facts.gather_subset[0] == '!all' - - setup_result.ansible_facts.gather_subset[1] == '!min' - - setup_result.ansible_facts.gather_subset[2] == 'interfaces' - - setup_result.ansible_facts.ansible_interfaces - - setup_result.ansible_facts.ansible_interfaces[0] - - setup_result.ansible_facts.ansible_interfaces[0].interface_name - - setup_result.ansible_facts.ansible_interfaces[0].connection_name - - setup_result.ansible_facts.ansible_interfaces[0].interface_index - - setup_result.ansible_facts.keys() | list | union(['ansible_interfaces','gather_subset','module_setup']) | length == 3 - -- name: test gather_subset "!all,!min,bogus" with list - setup: - gather_subset: - - '!all' - - '!min' - - bogus - register: setup_result - -- name: verify that only status keys are returned and that we got a warning - assert: - that: - - setup_result is not failed - - setup_result is not changed - - setup_result.ansible_facts is defined - - setup_result.ansible_facts.gather_subset is defined - - setup_result.ansible_facts.gather_subset[0] == '!all' - - setup_result.ansible_facts.gather_subset[1] == '!min' - - setup_result.ansible_facts.keys() | list | union(['gather_subset','module_setup']) | length == 2 - - setup_result.warnings | length == 1 - - setup_result.warnings[0] | regex_search('bogus') diff --git a/test/integration/targets/win_share/aliases b/test/integration/targets/win_share/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_share/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_share/defaults/main.yml b/test/integration/targets/win_share/defaults/main.yml deleted file mode 100644 index 0b6c59a3dd..0000000000 --- a/test/integration/targets/win_share/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -test_win_share_path: C:\ansible\win_share -test_win_share_name: test share diff --git a/test/integration/targets/win_share/tasks/main.yml b/test/integration/targets/win_share/tasks/main.yml deleted file mode 100644 index 12aef5ece0..0000000000 --- a/test/integration/targets/win_share/tasks/main.yml +++ /dev/null @@ -1,43 +0,0 @@ ---- -- name: check if -SmbShare cmdlets are available - win_command: powershell.exe "Get-Command -Name Get-SmbShare" - register: module_available - failed_when: False - -- name: check that module fails with helpful message on older hosts - win_share: - name: test - register: module_not_supported - when: module_available.rc == 1 - failed_when: module_not_supported.msg != 'The current host does not support the -SmbShare cmdlets required by this module. Please run on Server 2012 or Windows 8 and later' - check_mode: yes - -# Run the actual tests -- block: - # setup for tests - - name: create testing folder - win_file: - path: "{{test_win_share_path}}" - state: directory - - - name: ensure testing folder isn't shared as a baseline - win_share: - name: "{{test_win_share_name}}" - state: absent - - - name: run tests on hosts that support it - include_tasks: tests.yml - when: module_available.rc == 0 - - always: - # cleanup - - name: ensure testing folder isn't shared anymore - win_share: - name: "{{test_win_share_name}}" - state: absent - - - name: remove testing folder - win_file: - path: "{{test_win_share_path}}" - state: absent - when: module_available.rc == 0 diff --git a/test/integration/targets/win_share/tasks/tests.yml b/test/integration/targets/win_share/tasks/tests.yml deleted file mode 100644 index 543f7bae89..0000000000 --- a/test/integration/targets/win_share/tasks/tests.yml +++ /dev/null @@ -1,486 +0,0 @@ ---- -- name: create share check - win_share: - name: "{{test_win_share_name}}" - path: "{{test_win_share_path}}" - state: present - register: create_share_check - check_mode: yes - -- name: check if share exists check - win_shell: Get-SmbShare | Where-Object { $_.Name -eq '{{test_win_share_name}}' } - register: create_share_actual_check - -- name: assert create share check - assert: - that: - - create_share_check is changed - - create_share_actual_check.stdout_lines == [] - -- name: create share - win_share: - name: "{{test_win_share_name}}" - path: "{{test_win_share_path}}" - state: present - register: create_share - -- name: check if share exists - win_shell: Get-SmbShare | Where-Object { $_.Name -eq '{{test_win_share_name}}' } - register: create_share_actual - -- name: assert create share - assert: - that: - - create_share is changed - - create_share_actual.stdout_lines != [] - -- name: create share again - win_share: - name: "{{test_win_share_name}}" - path: "{{test_win_share_path}}" - state: present - register: create_share_again - -- name: check if share exists again - win_shell: Get-SmbShare | Where-Object { $_.Name -eq '{{test_win_share_name}}' } - register: create_share_actual_again - -- name: assert create share again - assert: - that: - - create_share_again is not changed - - create_share_actual_again.stdout_lines == create_share_actual.stdout_lines - -- name: set caching mode to Programs check - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - caching_mode: Programs - register: caching_mode_programs_check - check_mode: yes - -- name: get actual caching mode check - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').CachingMode" - register: caching_mode_programs_actual_check - -- name: assert caching mode to Programs check - assert: - that: - - caching_mode_programs_check is changed - - caching_mode_programs_actual_check.stdout == "Manual\r\n" - -- name: set caching mode to Programs - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - caching_mode: Programs - register: caching_mode_programs - -- name: get actual caching mode - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').CachingMode" - register: caching_mode_programs_actual - -- name: assert caching mode to Programs - assert: - that: - - caching_mode_programs is changed - - caching_mode_programs_actual.stdout == "Programs\r\n" - -- name: set caching mode to Programs again - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - caching_mode: Programs - register: caching_mode_programs_again - -- name: get actual caching mode again - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').CachingMode" - register: caching_mode_programs_actual_again - -- name: assert caching mode to Programs again - assert: - that: - - caching_mode_programs_again is not changed - - caching_mode_programs_actual_again.stdout == "Programs\r\n" - -- name: set encryption on share check - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - encrypt: True - register: encrypt_on_check - check_mode: yes - -- name: get actual encrypt mode check - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').EncryptData" - register: encrypt_on_actual_check - -- name: assert set encryption on check - assert: - that: - - encrypt_on_check is changed - - encrypt_on_actual_check.stdout == "False\r\n" - -- name: set encryption on share - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - encrypt: True - register: encrypt_on - -- name: get actual encrypt mode - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').EncryptData" - register: encrypt_on_actual - -- name: assert set encryption on - assert: - that: - - encrypt_on is changed - - encrypt_on_actual.stdout == "True\r\n" - -- name: set encryption on share again - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - encrypt: True - register: encrypt_on_again - -- name: get actual encrypt mode again - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').EncryptData" - register: encrypt_on_actual - -- name: assert set encryption on again - assert: - that: - - encrypt_on_again is not changed - - encrypt_on_actual.stdout == "True\r\n" - -- name: set description check - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - description: description - register: change_decription_check - check_mode: yes - -- name: get actual description check - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').Description" - register: change_description_actual_check - -- name: assert change description check - assert: - that: - - change_decription_check is changed - - change_description_actual_check.stdout == "\r\n" - -- name: set description - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - description: description - register: change_decription - -- name: get actual description - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').Description" - register: change_description_actual - -- name: assert change description - assert: - that: - - change_decription is changed - - change_description_actual.stdout == "description\r\n" - -- name: set description again - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - description: description - register: change_decription_again - -- name: get actual description again - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').Description" - register: change_description_actual_again - -- name: assert change description again - assert: - that: - - change_decription_again is not changed - - change_description_actual_again.stdout == "description\r\n" - -- name: set allow list check - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - list: True - register: allow_list_check - check_mode: yes - -- name: get actual allow listing check - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').FolderEnumerationMode" - register: allow_list_actual_check - -- name: assert allow list check - assert: - that: - - allow_list_check is changed - - allow_list_actual_check.stdout == "AccessBased\r\n" - -- name: set allow list - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - list: True - register: allow_list - -- name: get actual allow listing - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').FolderEnumerationMode" - register: allow_list_actual - -- name: assert allow list - assert: - that: - - allow_list is changed - - allow_list_actual.stdout == "Unrestricted\r\n" - -- name: set allow list again - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - list: True - register: allow_list_again - -- name: get actual allow listing again - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').FolderEnumerationMode" - register: allow_list_actual_again - -- name: assert allow list check again - assert: - that: - - allow_list_again is not changed - - allow_list_actual_again.stdout == "Unrestricted\r\n" - -- name: set deny list check - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - list: False - register: deny_list_check - check_mode: yes - -- name: get actual deny listing check - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').FolderEnumerationMode" - register: deny_list_actual_check - -- name: assert deny list check - assert: - that: - - deny_list_check is changed - - deny_list_actual_check.stdout == "Unrestricted\r\n" - -- name: set deny list - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - list: False - register: deny_list - -- name: get actual deny listing - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').FolderEnumerationMode" - register: deny_list_actual - -- name: assert deny list - assert: - that: - - deny_list is changed - - deny_list_actual.stdout == "AccessBased\r\n" - -- name: set deny list again - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - list: False - register: deny_list_again - -- name: get actual deny listing again - win_command: powershell.exe "(Get-SmbShare -Name '{{test_win_share_name}}').FolderEnumerationMode" - register: deny_list_actual_again - -- name: assert deny list again - assert: - that: - - deny_list_again is not changed - - deny_list_actual_again.stdout == "AccessBased\r\n" - -- name: set ACLs on share check - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - full: Administrators - change: Users - read: Guests - deny: Remote Desktop Users - register: set_acl_check - check_mode: yes - -- name: get actual share ACLs check - win_shell: foreach ($acl in Get-SmbShareAccess -Name '{{test_win_share_name}}') { Write-Host "$($acl.AccessRight)|$($acl.AccessControlType)|$($acl.AccountName)" } - register: set_acl_actual_check - -- name: assert set ACLs on share check - assert: - that: - - set_acl_check is changed - - set_acl_actual_check.stdout == "Full|Deny|Everyone\n" - -- name: set ACLs on share - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - full: Administrators - change: Users - read: Guests - deny: Remote Desktop Users - register: set_acl - -- name: get actual share ACLs - win_shell: foreach ($acl in Get-SmbShareAccess -Name '{{test_win_share_name}}') { Write-Host "$($acl.AccessRight)|$($acl.AccessControlType)|$($acl.AccountName)" } - register: set_acl_actual - -- name: assert set ACLs on share - assert: - that: - - set_acl is changed - - set_acl_actual.stdout_lines|length == 4 - - set_acl_actual.stdout_lines[0] == 'Full|Deny|BUILTIN\\Remote Desktop Users' - - set_acl_actual.stdout_lines[1] == 'Read|Allow|BUILTIN\\Guests' - - set_acl_actual.stdout_lines[2] == 'Change|Allow|BUILTIN\\Users' - - set_acl_actual.stdout_lines[3] == 'Full|Allow|BUILTIN\\Administrators' - -- name: set ACLs on share again - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - full: Administrators - change: Users - read: Guests - deny: Remote Desktop Users - register: set_acl_again - -- name: get actual share ACLs again - win_shell: foreach ($acl in Get-SmbShareAccess -Name '{{test_win_share_name}}') { Write-Host "$($acl.AccessRight)|$($acl.AccessControlType)|$($acl.AccountName)" } - register: set_acl_actual_again - -- name: assert set ACLs on share again - assert: - that: - - set_acl_again is not changed - - set_acl_actual_again.stdout_lines|length == 4 - - set_acl_actual_again.stdout_lines[0] == 'Full|Deny|BUILTIN\\Remote Desktop Users' - - set_acl_actual_again.stdout_lines[1] == 'Read|Allow|BUILTIN\\Guests' - - set_acl_actual_again.stdout_lines[2] == 'Change|Allow|BUILTIN\\Users' - - set_acl_actual_again.stdout_lines[3] == 'Full|Allow|BUILTIN\\Administrators' - -- name: Append ACLs on share - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - change: Remote Desktop Users - rule_action: add - register: append_acl - -- name: get actual share ACLs - win_shell: foreach ($acl in Get-SmbShareAccess -Name '{{test_win_share_name}}') { Write-Host "$($acl.AccessRight)|$($acl.AccessControlType)|$($acl.AccountName)" } - register: append_acl_actual - -- name: assert Append ACLs on share - assert: - that: - - append_acl is changed - - append_acl_actual.stdout_lines|length == 5 - - append_acl_actual.stdout_lines[0] == 'Full|Deny|BUILTIN\Remote Desktop Users' - - append_acl_actual.stdout_lines[1] == 'Read|Allow|BUILTIN\\Guests' - - append_acl_actual.stdout_lines[2] == 'Change|Allow|BUILTIN\\Users' - - append_acl_actual.stdout_lines[3] == 'Full|Allow|BUILTIN\\Administrators' - - append_acl_actual.stdout_lines[4] == 'Change|Allow|BUILTIN\\Remote Desktop Users' - -- name: Append ACLs on share (idempotent) - win_share: - name: "{{test_win_share_name}}" - state: present - path: "{{test_win_share_path}}" - change: Remote Desktop Users - rule_action: add - register: append_acl_again - -- name: assert Append ACLs on share (idempotent) - assert: - that: - - not append_acl_again is changed - -- name: remove share check - win_share: - name: "{{test_win_share_name}}" - state: absent - register: remove_share_check - check_mode: yes - -- name: check if share is removed check - win_shell: Get-SmbShare | Where-Object { $_.Name -eq '{{test_win_share_name}}' } - register: remove_share_actual_check - -- name: assert remove share check - assert: - that: - - remove_share_check is changed - - remove_share_actual_check.stdout_lines != [] - -- name: remove share - win_share: - name: "{{test_win_share_name}}" - state: absent - register: remove_share - -- name: check if share is removed - win_shell: Get-SmbShare | Where-Object { $_.Name -eq '{{test_win_share_name}}' } - register: remove_share_actual - -- name: assert remove share - assert: - that: - - remove_share is changed - - remove_share_actual.stdout_lines == [] - -- name: remove share again - win_share: - name: "{{test_win_share_name}}" - state: absent - register: remove_share_again - -- name: check if share is removed again - win_shell: Get-SmbShare | Where-Object { $_.Name -eq '{{test_win_share_name}}' } - register: remove_share_actual_again - -- name: assert remove share again - assert: - that: - - remove_share_again is not changed - - remove_share_actual_again.stdout_lines == [] diff --git a/test/integration/targets/win_shell/aliases b/test/integration/targets/win_shell/aliases deleted file mode 100644 index 1eed2ecfaf..0000000000 --- a/test/integration/targets/win_shell/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group1 -shippable/windows/smoketest diff --git a/test/integration/targets/win_shell/tasks/main.yml b/test/integration/targets/win_shell/tasks/main.yml deleted file mode 100644 index 38387a30ab..0000000000 --- a/test/integration/targets/win_shell/tasks/main.yml +++ /dev/null @@ -1,331 +0,0 @@ -- name: execute a powershell cmdlet - win_shell: Write-Output "hello from Ansible" - register: shellout - -- name: validate result - assert: - that: - - shellout is successful - - shellout is changed - - shellout.cmd == 'Write-Output "hello from Ansible"' - - shellout.delta is match('^\d:(\d){2}:(\d){2}.(\d){6}$') - - shellout.end is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - shellout.rc == 0 - - shellout.start is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - # assertion disabled since it does not pass on Windows Server 2016 - # - shellout.stderr == "" - - shellout.stdout == "hello from Ansible\r\n" - - shellout.stdout_lines == ["hello from Ansible"] - -- name: execute a powershell cmdlet with multi-line output that uses environment with embedded quotes - win_shell: Write-Output "hello from Ansible"; Write-Output "another line"; Write-Output "yet another line"; Write-Output "envvar was $env:taskvar" - environment: - taskvar: "o'doyle rules" - register: shellout - -- name: validate result - assert: - that: - - shellout is successful - - shellout is changed - - shellout.cmd == 'Write-Output "hello from Ansible"; Write-Output "another line"; Write-Output "yet another line"; Write-Output "envvar was $env:taskvar"' - - shellout.delta is match('^\d:(\d){2}:(\d){2}.(\d){6}$') - - shellout.end is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - shellout.rc == 0 - - shellout.start is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - # assertion disabled since it does not pass on Windows Server 2016 - # - shellout.stderr == "" - - shellout.stdout == "hello from Ansible\r\nanother line\r\nyet another line\r\nenvvar was o'doyle rules\r\n" - - shellout.stdout_lines == ["hello from Ansible","another line", "yet another line", "envvar was o'doyle rules"] - -- name: execute something nonexistent - win_shell: bogus_command1234 - register: shellout - ignore_errors: true - -- name: validate result - assert: - that: - - shellout is failed - - shellout.failed == true # check the failure key explicitly, since failed does magic with RC - - shellout is changed - - shellout.cmd == 'bogus_command1234' - - shellout.delta is match('^\d:(\d){2}:(\d){2}.(\d){6}$') - - shellout.end is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - shellout.rc == 1 - - shellout.start is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - shellout.stderr is search('not recognized') - - shellout.stdout == "" - - shellout.stdout_lines == [] - -- name: execute something with error output - win_shell: Write-Error "it broke"; Write-Output "some output" - register: shellout - -- name: validate result - assert: - that: - - shellout is successful - - shellout is changed - - shellout.cmd == 'Write-Error "it broke"; Write-Output "some output"' - - shellout.delta is match('^\d:(\d){2}:(\d){2}.(\d){6}$') - - shellout.end is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - shellout.rc == 0 - - shellout.start is match('^(\d){4}\-(\d){2}\-(\d){2} (\d){2}:(\d){2}:(\d){2}.(\d){6}$') - - shellout.stderr is search('it broke') - - shellout.stdout == "some output\r\n" - - shellout.stdout_lines == ["some output"] - -- name: ensure test file is absent - win_file: - path: c:\testfile.txt - state: absent - -- name: run with creates, should create - win_shell: echo $null >> c:\testfile.txt - args: - creates: c:\testfile.txt - register: shellout - -- name: validate result - assert: - that: - - shellout is successful - - shellout is changed - -- name: run again with creates, should skip - win_shell: echo $null >> c:\testfile.txt - args: - creates: c:\testfile.txt - register: shellout - -- name: validate result - assert: - that: - - shellout is skipped - - shellout.msg is search('exists') - -- name: get path of pagefile - win_shell: | - $pagefile = $null - $cs = Get-CimInstance -ClassName Win32_ComputerSystem - if ($cs.AutomaticManagedPagefile) { - $pagefile = "$($env:SystemRoot.Substring(0, 1)):\pagefile.sys" - } else { - $pf = Get-CimInstance -ClassName Win32_PageFileSetting - if ($pf -ne $null) { - $pagefile = $pf[0].Name - } - } - $pagefile - register: pagefile_path - -- name: test creates with hidden system file, should skip - win_shell: echo test - args: - creates: '{{pagefile_path.stdout_lines[0]}}' - register: shellout - when: pagefile_path.stdout_lines|count != 0 - -- name: validate result - assert: - that: - - shellout is skipped - - shellout.msg is search('exists') - when: pagefile_path.stdout_lines|count != 0 - -- name: ensure testfile is still present - win_stat: - path: c:\testfile.txt - register: statout - -- name: validate result - assert: - that: - - statout.stat.exists == true - -# https://github.com/ansible/ansible/issues/37967 -- name: test creates with file in missing directory - win_shell: echo hi - args: - creates: c:\fakefolder\fakefolder2\fakefile.txt - register: shellout - -- name: validate result - assert: - that: - - shellout.skipped is not defined - - shellout.changed - -- name: run with removes, should remove - win_shell: Remove-Item c:\testfile.txt - args: - removes: c:\testfile.txt - register: shellout - -- name: validate result - assert: - that: - - shellout is successful - - shellout is changed - -- name: run again with removes, should skip - win_shell: echo $null >> c:\testfile.txt - args: - removes: c:\testfile.txt - register: shellout - -- name: validate result - assert: - that: - - shellout is skipped - - shellout.msg is search('does not exist') - -- name: run something with known nonzero exit code - win_shell: exit 254 - register: shellout - ignore_errors: true - -- name: validate result - assert: - that: - - shellout is failed - - shellout.failed == True # check the failure key explicitly, since failed does magic with RC - - shellout.rc == 254 - -- name: run something via cmd that will fail in powershell - win_shell: echo line1 & echo.line2 - args: - executable: cmd - register: shellout - -- name: validate result - assert: - that: - - shellout is successful - - shellout is changed - - shellout.rc == 0 - - shellout.stdout == "line1 \r\nline2\r\n" - - shellout.stdout_lines == ["line1 ", "line2"] - - shellout.stderr == "" - -- name: test with job to ensure that preamble-free InputEncoding is working - win_shell: Start-Job { echo yo } | Receive-Job -Wait - register: shellout - -- name: check job result - assert: - that: - - shellout is successful - - shellout.stdout_lines[0] == 'yo' - -- name: interleave large writes between stdout/stderr (check for buffer consumption deadlock) - win_shell: $ba = New-Object byte[] 4096; (New-Object System.Random 32).NextBytes($ba); $text = [Convert]::ToBase64String($ba); Write-Output startout; Write-Error starterror; Write-Error $text; Write-Output $text; Write-Error $text; Write-Output $text; Write-Error $text; Write-Output $text; Write-Output doneout Write-Error doneerror - register: shellout - -- name: ensure that the entirety of both streams were read - assert: - that: - - shellout.stdout is search("startout") - - shellout.stdout is search("doneout") - - shellout.stderr is search("starterror") - - shellout.stderr is search("doneerror") - -- name: run stdin test - win_shell: '$string = [Console]::In.ReadToEnd(); Write-Output $string.Trim()' - args: - stdin: some input - register: shellout - -- name: assert run stdin test - assert: - that: - - shellout is changed - - shellout.rc == 0 - - shellout.stderr == "" - - shellout.stdout == "some input\r\n" - -- name: echo some non ascii characters - win_shell: Write-Host über den Fußgängerübergang gehen - register: nonascii_output - -- name: assert echo some non ascii characters - assert: - that: - - nonascii_output is changed - - nonascii_output.rc == 0 - - nonascii_output.stdout_lines|count == 1 - - nonascii_output.stdout_lines[0] == 'über den Fußgängerübergang gehen' - - nonascii_output.stderr == '' - -- name: echo some non ascii characters with us-ascii output encoding - win_shell: Write-Host über den Fußgängerübergang gehen - args: - output_encoding_override: us-ascii - register: nonascii_output_us_ascii_encoding - -- name: assert echo some non ascii characters with us-ascii output encoding - assert: - that: - - nonascii_output_us_ascii_encoding is changed - - nonascii_output_us_ascii_encoding.rc == 0 - - nonascii_output_us_ascii_encoding.stdout_lines|count == 1 - - nonascii_output_us_ascii_encoding.stdout_lines[0] == '??ber den Fu??g??nger??bergang gehen' - - nonascii_output_us_ascii_encoding.stderr == '' - -- name: execute powershell without no_profile - win_shell: '[System.Environment]::CommandLine' - register: no_profile - -- name: assert execute powershell with no_profile - assert: - that: - - no_profile is successful - - no_profile is changed - - no_profile.cmd == "[System.Environment]::CommandLine" - - no_profile.rc == 0 - - no_profile.stdout is match ('^"powershell.exe" -noninteractive -encodedcommand') - -- name: execute powershell with no_profile - win_shell: '[System.Environment]::CommandLine' - args: - no_profile: yes - register: no_profile - -- name: assert execute powershell with no_profile - assert: - that: - - no_profile is successful - - no_profile is changed - - no_profile.cmd == "[System.Environment]::CommandLine" - - no_profile.rc == 0 - - no_profile.stdout is match ('^"powershell.exe" -noprofile -noninteractive -encodedcommand') - -- name: create symbolic link with space in the path - win_command: cmd.exe /c mklink /d "C:\ansible test link" C:\Windows\System32\WindowsPowerShell\v1.0 - args: - creates: C:\ansible test link - -- block: - - name: run with space in the executable path - win_shell: '[System.Environment]::CommandLine' - args: - executable: C:\ansible test link\powershell - register: space_exe - - - debug: - var: space_exe.stdout|trim - - - name: assert run with space in the executable path - assert: - that: - - space_exe is successful - - space_exe is changed - - space_exe.cmd == '[System.Environment]::CommandLine' - - space_exe.rc == 0 - - space_exe.stdout|trim == '"C:\\ansible test link\\powershell.exe" /c [System.Environment]::CommandLine' - always: - - name: remove test symbolic link - win_file: - path: C:\ansible test link - state: absent diff --git a/test/integration/targets/win_slurp/aliases b/test/integration/targets/win_slurp/aliases deleted file mode 100644 index 423ce39108..0000000000 --- a/test/integration/targets/win_slurp/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group2 diff --git a/test/integration/targets/win_slurp/defaults/main.yml b/test/integration/targets/win_slurp/defaults/main.yml deleted file mode 100644 index a229fef968..0000000000 --- a/test/integration/targets/win_slurp/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -test_win_slurp_dir: C:\ansible\win_slurp .ÅÑŚÌβŁÈ [$!@^&test(;)]
\ No newline at end of file diff --git a/test/integration/targets/win_slurp/handlers/main.yml b/test/integration/targets/win_slurp/handlers/main.yml deleted file mode 100644 index ced20a405c..0000000000 --- a/test/integration/targets/win_slurp/handlers/main.yml +++ /dev/null @@ -1,4 +0,0 @@ -- name: remove test directory - win_file: - path: '{{ test_win_slurp_dir }}' - state: absent diff --git a/test/integration/targets/win_slurp/tasks/main.yml b/test/integration/targets/win_slurp/tasks/main.yml deleted file mode 100644 index 1956c8a899..0000000000 --- a/test/integration/targets/win_slurp/tasks/main.yml +++ /dev/null @@ -1,97 +0,0 @@ -# test code for the slurp module when using winrm connection -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: create test directory - win_file: - path: '{{ test_win_slurp_dir }}' - state: directory - notify: remove test directory - -# removes reliance on win_copy, set back once win_copy supports glob like chars -- name: create test file - win_shell: | - $file = '{{ test_win_slurp_dir }}\slurp.txt' - if (Test-Path -LiteralPath $file) { - Remove-Item -LiteralPath $file -Force - } - Set-Content -LiteralPath $file -Value 'Slurp this!' - -- name: test slurping an existing file - slurp: - src: '{{ test_win_slurp_dir }}\slurp.txt' - register: slurp_existing - -- name: check slurp existing result - assert: - that: - - "slurp_existing.content == 'U2x1cnAgdGhpcyENCg=='" - - "slurp_existing.encoding == 'base64'" - - "slurp_existing is not changed" - - "slurp_existing is not failed" - -- name: test slurping a large binary file with path param and backslashes - slurp: - path: C:\Windows\explorer.exe - register: slurp_path_backslashes - no_log: true - -- name: check slurp result with path param and backslashes - assert: - that: - - "slurp_path_backslashes.content" - - "slurp_path_backslashes.encoding == 'base64'" - - "slurp_path_backslashes is not changed" - - "slurp_path_backslashes is not failed" - -- name: test slurping a non-existent file - slurp: - src: C:\this_file_should_not_exist.txt - register: slurp_missing - ignore_errors: true - -- name: check slurp missing result - assert: - that: - - "slurp_missing is failed" - - "slurp_missing.msg" - - "slurp_missing is not changed" - -- name: test slurping a directory - slurp: - src: '{{ test_win_slurp_dir }}\missing' - register: slurp_dir - ignore_errors: true - -- name: check slurp directory result - assert: - that: - - "slurp_dir is failed" - - "slurp_dir.msg" - - "slurp_dir is not changed" - -- name: test slurp with missing argument - action: slurp - register: slurp_no_args - ignore_errors: true - -- name: check slurp with missing argument result - assert: - that: - - "slurp_no_args is failed" - - "slurp_no_args.msg" - - "slurp_no_args is not changed" diff --git a/test/integration/targets/win_stat/aliases b/test/integration/targets/win_stat/aliases deleted file mode 100644 index 215e0b0692..0000000000 --- a/test/integration/targets/win_stat/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group4 diff --git a/test/integration/targets/win_stat/defaults/main.yml b/test/integration/targets/win_stat/defaults/main.yml deleted file mode 100644 index 9facc62557..0000000000 --- a/test/integration/targets/win_stat/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -win_stat_dir: '{{win_output_dir}}\win_stat' -win_stat_user: test-stat diff --git a/test/integration/targets/win_stat/library/test_symlink_file.ps1 b/test/integration/targets/win_stat/library/test_symlink_file.ps1 deleted file mode 100644 index 39f1f46afc..0000000000 --- a/test/integration/targets/win_stat/library/test_symlink_file.ps1 +++ /dev/null @@ -1,30 +0,0 @@ -#!powershell - -#Requires -Module Ansible.ModuleUtils.Legacy -#Requires -Module Ansible.ModuleUtils.LinkUtil - -$params = Parse-Args $args - -$state = Get-AnsibleParam -obj $params -name "state" -type "str" -default "present" -validateset "absent","present" -$src = Get-AnsibleParam -obj $params -name "src" -type "path" -failifempty $true -$target = Get-AnsibleParam -obj $params -name "target" -type "path" -failifempty $($state -eq "present") - -$result = @{ - changed = $false -} - -if ($state -eq "absent") { - if (Test-Path -Path $src) { - Load-LinkUtils - Remove-Link -link_path $src - $result.changed = $true - } -} else { - if (-not (Test-Path -Path $src)) { - Load-LinkUtils - New-Link -link_path $src -link_target $target -link_type "link" - $result.changed = $true - } -} - -Exit-Json -obj $result diff --git a/test/integration/targets/win_stat/tasks/main.yml b/test/integration/targets/win_stat/tasks/main.yml deleted file mode 100644 index a016cde655..0000000000 --- a/test/integration/targets/win_stat/tasks/main.yml +++ /dev/null @@ -1,115 +0,0 @@ -- name: make sure symlink file does not exist - test_symlink_file: - src: '{{win_stat_dir}}\file-link.txt' - state: absent - -- name: remove win_stat testing directories for clean slate - win_file: - path: '{{win_stat_dir}}' - state: absent - -# while most of the setup can be done with modules, it is quicker to do them -# all in bulk than with with_items to save each round trip over WinRM -- name: set test files and folders - win_shell: | - $ErrorActionPreference = "Stop" - $directories = @( - "folder", - "folder space", - "nested\nested", - "shared", - "hidden", - "link-dest", - "junction-dest" - ) - - foreach ($directory in $directories) { - New-Item -Path "{{win_stat_dir}}\$directory" -ItemType Directory - } - - $normal_content = "abc" - $normal_files = @( - "nested\file.ps1", - "nested\hard-target.txt", - "nested\read-only.ps1", - "nested\archive.ps1", - "nested\hidden.ps1", - "nested\nested\file.ps1", - "folder space\file.ps1", - "link-dest\file.txt" - ) - foreach ($file in $normal_files) { - New-Item -Path "{{win_stat_dir}}\$file" -ItemType File - [System.IO.File]::WriteAllText("{{win_stat_dir}}\$file", $normal_content) - } - - $share_stat = Get-WmiObject -Class Win32_Share -Filter "name='folder-share'" - if ($share_stat) { - $share_stat.Delete() - } - $wmi = [wmiClass] 'Win32_Share' - $wmi.Create("{{win_stat_dir}}\shared", "folder-share", 0) - - cmd.exe /c mklink /D "{{win_stat_dir}}\link" "{{win_stat_dir}}\link-dest" - cmd.exe /c mklink /H "{{win_stat_dir}}\nested\hard-link.ps1" "{{win_stat_dir}}\nested\hard-target.txt" - cmd.exe /c mklink /J "{{win_stat_dir}}\junction-link" "{{win_stat_dir}}\junction-dest" - cmd.exe /c mklink /D "{{win_stat_dir}}\nested\nested\link-rel" "..\..\link-dest" - cmd.exe /c mklink /D "{{win_stat_dir}}\outer-link" "{{win_stat_dir}}\nested\nested\link-rel" - - $date = Get-Date -Year 2016 -Month 11 -Day 1 -Hour 7 -Minute 10 -Second 5 -Millisecond 0 - Get-ChildItem -Path "{{win_stat_dir}}" -Recurse | ForEach-Object { - $_.CreationTime = $date - $_.LastAccessTime = $date - $_.LastWriteTime = $date - } - - $attributes = @{ - "hidden" = "Hidden" - "nested\read-only.ps1" = "ReadOnly" - "nested\archive.ps1" = "Archive" - "nested\hidden.ps1" = "Hidden" - } - - foreach ($attribute in $attributes.GetEnumerator()) { - $item = Get-Item -Path "{{win_stat_dir}}\$($attribute.Name)" - $file_attributes = $item.Attributes -split ',' - if ($file_attributes -notcontains $attribute.Value) { - $file_attributes += $attribute.Value - } - $item.Attributes = $file_attributes -join ',' - } - - # weird issue, need to access the file in anyway to get the correct date stats - Test-Path {{win_stat_dir}}\nested\hard-link.ps1 - -# mklink.exe and win_file cannot do this right now so we need a custom module -- name: create file symlink - test_symlink_file: - src: '{{win_stat_dir}}\file-link.txt' - target: '{{win_stat_dir}}\nested\file.ps1' - state: present - -- block: - - include_tasks: tests.yml - - always: - - name: make sure symlink file does not exist - test_symlink_file: - src: '{{win_stat_dir}}\file-link.txt' - state: absent - - - name: remove testing folder - win_file: - path: '{{win_stat_dir}}' - state: absent - - - name: ensure test user is deleted - win_user: - name: '{{win_stat_user}}' - state: absent - - - name: ensure test user profile is deleted - win_shell: rmdir /S /Q {{profile_dir_out.stdout_lines[0]}} - args: - executable: cmd.exe - when: win_stat_user in profile_dir_out.stdout_lines[0] diff --git a/test/integration/targets/win_stat/tasks/tests.yml b/test/integration/targets/win_stat/tasks/tests.yml deleted file mode 100644 index 2d690b9823..0000000000 --- a/test/integration/targets/win_stat/tasks/tests.yml +++ /dev/null @@ -1,646 +0,0 @@ ---- -- name: test win_stat module on file - win_stat: - path: '{{win_stat_dir}}\nested\file.ps1' - register: stat_file - -- name: check actual for file - assert: - that: - - stat_file.stat.attributes == 'Archive' - - stat_file.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - stat_file.stat.creationtime == 1477984205 - - stat_file.stat.exists == True - - stat_file.stat.extension == '.ps1' - - stat_file.stat.filename == 'file.ps1' - - stat_file.stat.hlnk_targets == [] - - stat_file.stat.isarchive == True - - stat_file.stat.isdir == False - - stat_file.stat.ishidden == False - - stat_file.stat.isjunction == False - - stat_file.stat.islnk == False - - stat_file.stat.isreadonly == False - - stat_file.stat.isreg == True - - stat_file.stat.isshared == False - - stat_file.stat.lastaccesstime == 1477984205 - - stat_file.stat.lastwritetime == 1477984205 - - stat_file.stat.nlink == 1 - - stat_file.stat.owner == 'BUILTIN\Administrators' - - stat_file.stat.path == win_stat_dir + '\\nested\\file.ps1' - - stat_file.stat.size == 3 - -- name: test win_stat module on file with sha256 - win_stat: - path: '{{win_stat_dir}}\nested\file.ps1' - checksum_algorithm: sha256 - register: stat_file_sha256 - -- name: check actual for file with sha256 - assert: - that: - - stat_file_sha256.stat.checksum == 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad' - -- name: test win_stat module on file with sha384 - win_stat: - path: '{{win_stat_dir}}\nested\file.ps1' - checksum_algorithm: sha384 - register: stat_file_sha384 - -- name: check actual for file with sha384 - assert: - that: - - stat_file_sha384.stat.checksum == 'cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7' - -- name: test win_stat module on file with sha512 - win_stat: - path: '{{win_stat_dir}}\nested\file.ps1' - checksum_algorithm: sha512 - register: stat_file_sha512 - -- name: check actual for file with sha512 - assert: - that: - - stat_file_sha512.stat.checksum == 'ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f' - -- name: test win_stat on hidden file - win_stat: - path: '{{win_stat_dir}}\nested\hidden.ps1' - register: stat_file_hidden - -- name: check actual for hidden file - assert: - that: - - stat_file_hidden.stat.attributes == 'Hidden, Archive' - - stat_file_hidden.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - stat_file_hidden.stat.creationtime == 1477984205 - - stat_file_hidden.stat.exists == True - - stat_file_hidden.stat.extension == '.ps1' - - stat_file_hidden.stat.filename == 'hidden.ps1' - - stat_file_hidden.stat.hlnk_targets == [] - - stat_file_hidden.stat.isarchive == True - - stat_file_hidden.stat.isdir == False - - stat_file_hidden.stat.ishidden == True - - stat_file_hidden.stat.isjunction == False - - stat_file_hidden.stat.islnk == False - - stat_file_hidden.stat.isreadonly == False - - stat_file_hidden.stat.isreg == True - - stat_file_hidden.stat.isshared == False - - stat_file_hidden.stat.lastaccesstime == 1477984205 - - stat_file_hidden.stat.lastwritetime == 1477984205 - - stat_file_hidden.stat.nlink == 1 - - stat_file_hidden.stat.owner == 'BUILTIN\Administrators' - - stat_file_hidden.stat.path == win_stat_dir + '\\nested\\hidden.ps1' - - stat_file_hidden.stat.size == 3 - -- name: test win_stat on readonly file - win_stat: - path: '{{win_stat_dir}}\nested\read-only.ps1' - register: stat_readonly - -- name: check actual for readonly file - assert: - that: - - stat_readonly.stat.attributes == 'ReadOnly, Archive' - - stat_readonly.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - stat_readonly.stat.creationtime == 1477984205 - - stat_readonly.stat.exists == True - - stat_readonly.stat.extension == '.ps1' - - stat_readonly.stat.filename == 'read-only.ps1' - - stat_readonly.stat.hlnk_targets == [] - - stat_readonly.stat.isarchive == True - - stat_readonly.stat.isdir == False - - stat_readonly.stat.ishidden == False - - stat_readonly.stat.isjunction == False - - stat_readonly.stat.islnk == False - - stat_readonly.stat.isreadonly == True - - stat_readonly.stat.isreg == True - - stat_readonly.stat.isshared == False - - stat_readonly.stat.lastaccesstime == 1477984205 - - stat_readonly.stat.lastwritetime == 1477984205 - - stat_readonly.stat.nlink == 1 - - stat_readonly.stat.owner == 'BUILTIN\Administrators' - - stat_readonly.stat.path == win_stat_dir + '\\nested\\read-only.ps1' - - stat_readonly.stat.size == 3 - -- name: test win_stat on hard link file - win_stat: - path: '{{win_stat_dir}}\nested\hard-link.ps1' - follow: True # just verifies we don't do any weird follow logic for hard links - register: stat_hard_link - -- name: check actual for hard link file - assert: - that: - - stat_hard_link.stat.attributes == 'Archive' - - stat_hard_link.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - stat_hard_link.stat.creationtime == 1477984205 - - stat_hard_link.stat.exists == True - - stat_hard_link.stat.extension == '.ps1' - - stat_hard_link.stat.filename == 'hard-link.ps1' - - stat_hard_link.stat.hlnk_targets == [ win_stat_dir + '\\nested\hard-target.txt' ] - - stat_hard_link.stat.isarchive == True - - stat_hard_link.stat.isdir == False - - stat_hard_link.stat.ishidden == False - - stat_hard_link.stat.isjunction == False - - stat_hard_link.stat.islnk == False - - stat_hard_link.stat.isreadonly == False - - stat_hard_link.stat.isshared == False - - stat_hard_link.stat.lastaccesstime == 1477984205 - - stat_hard_link.stat.lastwritetime == 1477984205 - - stat_hard_link.stat.nlink == 2 - - stat_hard_link.stat.owner == 'BUILTIN\Administrators' - - stat_hard_link.stat.path == win_stat_dir + '\\nested\\hard-link.ps1' - - stat_hard_link.stat.size == 3 - -- name: test win_stat on directory - win_stat: - path: '{{win_stat_dir}}\nested' - register: stat_directory - -- name: check actual for directory - assert: - that: - - stat_directory.stat.attributes == 'Directory' - - stat_directory.stat.checksum is not defined - - stat_directory.stat.creationtime == 1477984205 - - stat_directory.stat.exists == True - - stat_directory.stat.extension is not defined - - stat_directory.stat.filename == 'nested' - - stat_directory.stat.hlnk_targets == [] - - stat_directory.stat.isarchive == False - - stat_directory.stat.isdir == True - - stat_directory.stat.ishidden == False - - stat_directory.stat.isjunction == False - - stat_directory.stat.islnk == False - - stat_directory.stat.isreadonly == False - - stat_directory.stat.isreg == False - - stat_directory.stat.isshared == False - - stat_directory.stat.lastaccesstime == 1477984205 - - stat_directory.stat.lastwritetime == 1477984205 - - stat_directory.stat.nlink == 1 - - stat_directory.stat.owner == 'BUILTIN\Administrators' - - stat_directory.stat.path == win_stat_dir + '\\nested' - - stat_directory.stat.size == 24 - -- name: test win_stat on empty directory - win_stat: - path: '{{win_stat_dir}}\folder' - register: stat_directory_empty - -- name: check actual for empty directory - assert: - that: - - stat_directory_empty.stat.attributes == 'Directory' - - stat_directory_empty.stat.checksum is not defined - - stat_directory_empty.stat.creationtime == 1477984205 - - stat_directory_empty.stat.exists == True - - stat_directory_empty.stat.extension is not defined - - stat_directory_empty.stat.filename == 'folder' - - stat_directory_empty.stat.hlnk_targets == [] - - stat_directory_empty.stat.isarchive == False - - stat_directory_empty.stat.isdir == True - - stat_directory_empty.stat.ishidden == False - - stat_directory_empty.stat.isjunction == False - - stat_directory_empty.stat.islnk == False - - stat_directory_empty.stat.isreadonly == False - - stat_directory_empty.stat.isreg == False - - stat_directory_empty.stat.isshared == False - - stat_directory_empty.stat.lastaccesstime == 1477984205 - - stat_directory_empty.stat.lastwritetime == 1477984205 - - stat_directory_empty.stat.nlink == 1 - - stat_directory_empty.stat.owner == 'BUILTIN\Administrators' - - stat_directory_empty.stat.path == win_stat_dir + '\\folder' - - stat_directory_empty.stat.size == 0 - -- name: test win_stat on directory with space in name - win_stat: - path: '{{win_stat_dir}}\folder space' - register: stat_directory_space - -- name: check actual for directory with space in name - assert: - that: - - stat_directory_space.stat.attributes == 'Directory' - - stat_directory_space.stat.checksum is not defined - - stat_directory_space.stat.creationtime == 1477984205 - - stat_directory_space.stat.exists == True - - stat_directory_space.stat.extension is not defined - - stat_directory_space.stat.filename == 'folder space' - - stat_directory_space.stat.hlnk_targets == [] - - stat_directory_space.stat.isarchive == False - - stat_directory_space.stat.isdir == True - - stat_directory_space.stat.ishidden == False - - stat_directory_space.stat.isjunction == False - - stat_directory_space.stat.islnk == False - - stat_directory_space.stat.isreadonly == False - - stat_directory_space.stat.isreg == False - - stat_directory_space.stat.isshared == False - - stat_directory_space.stat.lastaccesstime == 1477984205 - - stat_directory_space.stat.lastwritetime == 1477984205 - - stat_directory_space.stat.nlink == 1 - - stat_directory_space.stat.owner == 'BUILTIN\Administrators' - - stat_directory_space.stat.path == win_stat_dir + '\\folder space' - - stat_directory_space.stat.size == 3 - -- name: test win_stat on hidden directory - win_stat: - path: '{{win_stat_dir}}\hidden' - register: stat_hidden - -- name: check actual for hidden directory - assert: - that: - - stat_hidden.stat.attributes == 'Hidden, Directory' - - stat_hidden.stat.checksum is not defined - - stat_hidden.stat.creationtime == 1477984205 - - stat_hidden.stat.exists == True - - stat_hidden.stat.extension is not defined - - stat_hidden.stat.filename == 'hidden' - - stat_hidden.stat.hlnk_targets == [] - - stat_hidden.stat.isarchive == False - - stat_hidden.stat.isdir == True - - stat_hidden.stat.ishidden == True - - stat_hidden.stat.isjunction == False - - stat_hidden.stat.islnk == False - - stat_hidden.stat.isreadonly == False - - stat_hidden.stat.isreg == False - - stat_hidden.stat.isshared == False - - stat_hidden.stat.lastaccesstime == 1477984205 - - stat_hidden.stat.lastwritetime == 1477984205 - - stat_hidden.stat.nlink == 1 - - stat_hidden.stat.owner == 'BUILTIN\Administrators' - - stat_hidden.stat.path == win_stat_dir + '\\hidden' - - stat_hidden.stat.size == 0 - -- name: test win_stat on shared directory - win_stat: - path: '{{win_stat_dir}}\shared' - register: stat_shared - -- name: check actual for shared directory - assert: - that: - - stat_shared.stat.attributes == 'Directory' - - stat_shared.stat.checksum is not defined - - stat_shared.stat.creationtime == 1477984205 - - stat_shared.stat.exists == True - - stat_shared.stat.extension is not defined - - stat_shared.stat.filename == 'shared' - - stat_shared.stat.hlnk_targets == [] - - stat_shared.stat.isarchive == False - - stat_shared.stat.isdir == True - - stat_shared.stat.ishidden == False - - stat_shared.stat.isjunction == False - - stat_shared.stat.islnk == False - - stat_shared.stat.isreadonly == False - - stat_shared.stat.isreg == False - - stat_shared.stat.isshared == True - - stat_shared.stat.lastaccesstime == 1477984205 - - stat_shared.stat.lastwritetime == 1477984205 - - stat_shared.stat.nlink == 1 - - stat_shared.stat.owner == 'BUILTIN\Administrators' - - stat_shared.stat.path == win_stat_dir + '\\shared' - - stat_shared.stat.sharename == 'folder-share' - - stat_shared.stat.size == 0 - -- name: test win_stat on directory symlink - win_stat: - path: '{{win_stat_dir}}\link' - register: stat_symlink - -- name: assert directory symlink actual - assert: - that: - - stat_symlink.stat.attributes == 'Directory, ReparsePoint' - - stat_symlink.stat.creationtime is defined - - stat_symlink.stat.exists == True - - stat_symlink.stat.filename == 'link' - - stat_symlink.stat.hlnk_targets == [] - - stat_symlink.stat.isarchive == False - - stat_symlink.stat.isdir == True - - stat_symlink.stat.ishidden == False - - stat_symlink.stat.islnk == True - - stat_symlink.stat.isjunction == False - - stat_symlink.stat.isreadonly == False - - stat_symlink.stat.isreg == False - - stat_symlink.stat.isshared == False - - stat_symlink.stat.lastaccesstime is defined - - stat_symlink.stat.lastwritetime is defined - - stat_symlink.stat.lnk_source == win_stat_dir + '\\link-dest' - - stat_symlink.stat.lnk_target == win_stat_dir + '\\link-dest' - - stat_symlink.stat.nlink == 1 - - stat_symlink.stat.owner == 'BUILTIN\\Administrators' - - stat_symlink.stat.path == win_stat_dir + '\\link' - - stat_symlink.stat.checksum is not defined - -- name: test win_stat on file symlink - win_stat: - path: '{{win_stat_dir}}\file-link.txt' - register: stat_file_symlink - -- name: assert file symlink actual - assert: - that: - - stat_file_symlink.stat.attributes == 'Archive, ReparsePoint' - - stat_file_symlink.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - stat_file_symlink.stat.creationtime is defined - - stat_file_symlink.stat.exists == True - - stat_file_symlink.stat.extension == '.txt' - - stat_file_symlink.stat.filename == 'file-link.txt' - - stat_file_symlink.stat.hlnk_targets == [] - - stat_file_symlink.stat.isarchive == True - - stat_file_symlink.stat.isdir == False - - stat_file_symlink.stat.ishidden == False - - stat_file_symlink.stat.isjunction == False - - stat_file_symlink.stat.islnk == True - - stat_file_symlink.stat.isreadonly == False - - stat_file_symlink.stat.isreg == False - - stat_file_symlink.stat.isshared == False - - stat_file_symlink.stat.lastaccesstime is defined - - stat_file_symlink.stat.lastwritetime is defined - - stat_file_symlink.stat.lnk_source == win_stat_dir + '\\nested\\file.ps1' - - stat_file_symlink.stat.lnk_target == win_stat_dir + '\\nested\\file.ps1' - - stat_file_symlink.stat.nlink == 1 - - stat_file_symlink.stat.owner == 'BUILTIN\\Administrators' - - stat_file_symlink.stat.path == win_stat_dir + '\\file-link.txt' - -- name: test win_stat of file symlink with follow - win_stat: - path: '{{win_stat_dir}}\file-link.txt' - follow: True - register: stat_file_symlink_follow - -- name: assert file system with follow actual - assert: - that: - - stat_file_symlink_follow.stat.attributes == 'Archive' - - stat_file_symlink_follow.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - stat_file_symlink_follow.stat.creationtime is defined - - stat_file_symlink_follow.stat.exists == True - - stat_file_symlink_follow.stat.extension == '.ps1' - - stat_file_symlink_follow.stat.filename == 'file.ps1' - - stat_file_symlink_follow.stat.hlnk_targets == [] - - stat_file_symlink_follow.stat.isarchive == True - - stat_file_symlink_follow.stat.isdir == False - - stat_file_symlink_follow.stat.ishidden == False - - stat_file_symlink_follow.stat.isjunction == False - - stat_file_symlink_follow.stat.islnk == False - - stat_file_symlink_follow.stat.isreadonly == False - - stat_file_symlink_follow.stat.isreg == True - - stat_file_symlink_follow.stat.isshared == False - - stat_file_symlink_follow.stat.lastaccesstime is defined - - stat_file_symlink_follow.stat.lastwritetime is defined - - stat_file_symlink_follow.stat.nlink == 1 - - stat_file_symlink_follow.stat.owner == 'BUILTIN\\Administrators' - - stat_file_symlink_follow.stat.path == win_stat_dir + '\\nested\\file.ps1' - -- name: test win_stat on relative symlink - win_stat: - path: '{{win_stat_dir}}\nested\nested\link-rel' - register: stat_rel_symlink - -- name: assert directory relative symlink actual - assert: - that: - - stat_rel_symlink.stat.attributes == 'Directory, ReparsePoint' - - stat_rel_symlink.stat.creationtime is defined - - stat_rel_symlink.stat.exists == True - - stat_rel_symlink.stat.filename == 'link-rel' - - stat_rel_symlink.stat.hlnk_targets == [] - - stat_rel_symlink.stat.isarchive == False - - stat_rel_symlink.stat.isdir == True - - stat_rel_symlink.stat.ishidden == False - - stat_rel_symlink.stat.isjunction == False - - stat_rel_symlink.stat.islnk == True - - stat_rel_symlink.stat.isreadonly == False - - stat_rel_symlink.stat.isreg == False - - stat_rel_symlink.stat.isshared == False - - stat_rel_symlink.stat.lastaccesstime is defined - - stat_rel_symlink.stat.lastwritetime is defined - - stat_rel_symlink.stat.lnk_source == win_stat_dir + '\\link-dest' - - stat_rel_symlink.stat.lnk_target == '..\\..\\link-dest' - - stat_rel_symlink.stat.nlink == 1 - - stat_rel_symlink.stat.owner == 'BUILTIN\\Administrators' - - stat_rel_symlink.stat.path == win_stat_dir + '\\nested\\nested\\link-rel' - - stat_rel_symlink.stat.checksum is not defined - -- name: test win_stat on relative multiple symlink with follow - win_stat: - path: '{{win_stat_dir}}\outer-link' - follow: True - register: stat_symlink_follow - -- name: assert directory relative symlink actual - assert: - that: - - stat_symlink_follow.stat.attributes == 'Directory' - - stat_symlink_follow.stat.creationtime is defined - - stat_symlink_follow.stat.exists == True - - stat_symlink_follow.stat.filename == 'link-dest' - - stat_symlink_follow.stat.hlnk_targets == [] - - stat_symlink_follow.stat.isarchive == False - - stat_symlink_follow.stat.isdir == True - - stat_symlink_follow.stat.ishidden == False - - stat_symlink_follow.stat.isjunction == False - - stat_symlink_follow.stat.islnk == False - - stat_symlink_follow.stat.isreadonly == False - - stat_symlink_follow.stat.isreg == False - - stat_symlink_follow.stat.isshared == False - - stat_symlink_follow.stat.lastaccesstime is defined - - stat_symlink_follow.stat.lastwritetime is defined - - stat_symlink_follow.stat.nlink == 1 - - stat_symlink_follow.stat.owner == 'BUILTIN\\Administrators' - - stat_symlink_follow.stat.path == win_stat_dir + '\\link-dest' - - stat_symlink_follow.stat.checksum is not defined - -- name: test win_stat on junction - win_stat: - path: '{{win_stat_dir}}\junction-link' - register: stat_junction_point - -- name: assert junction actual - assert: - that: - - stat_junction_point.stat.attributes == 'Directory, ReparsePoint' - - stat_junction_point.stat.creationtime is defined - - stat_junction_point.stat.exists == True - - stat_junction_point.stat.filename == 'junction-link' - - stat_junction_point.stat.hlnk_targets == [] - - stat_junction_point.stat.isarchive == False - - stat_junction_point.stat.isdir == True - - stat_junction_point.stat.ishidden == False - - stat_junction_point.stat.isjunction == True - - stat_junction_point.stat.islnk == False - - stat_junction_point.stat.isreadonly == False - - stat_junction_point.stat.isreg == False - - stat_junction_point.stat.isshared == False - - stat_junction_point.stat.lastaccesstime is defined - - stat_junction_point.stat.lastwritetime is defined - - stat_junction_point.stat.lnk_source == win_stat_dir + '\\junction-dest' - - stat_junction_point.stat.lnk_target == win_stat_dir + '\\junction-dest' - - stat_junction_point.stat.nlink == 1 - - stat_junction_point.stat.owner == 'BUILTIN\\Administrators' - - stat_junction_point.stat.path == win_stat_dir + '\\junction-link' - - stat_junction_point.stat.size == 0 - -- name: test win_stat on junction with follow - win_stat: - path: '{{win_stat_dir}}\junction-link' - follow: True - register: stat_junction_point_follow - -- name: assert junction with follow actual - assert: - that: - - stat_junction_point_follow.stat.attributes == 'Directory' - - stat_junction_point_follow.stat.creationtime is defined - - stat_junction_point_follow.stat.exists == True - - stat_junction_point_follow.stat.filename == 'junction-dest' - - stat_junction_point_follow.stat.hlnk_targets == [] - - stat_junction_point_follow.stat.isarchive == False - - stat_junction_point_follow.stat.isdir == True - - stat_junction_point_follow.stat.ishidden == False - - stat_junction_point_follow.stat.isjunction == False - - stat_junction_point_follow.stat.islnk == False - - stat_junction_point_follow.stat.isreadonly == False - - stat_junction_point_follow.stat.isreg == False - - stat_junction_point_follow.stat.isshared == False - - stat_junction_point_follow.stat.lastaccesstime is defined - - stat_junction_point_follow.stat.lastwritetime is defined - - stat_junction_point_follow.stat.nlink == 1 - - stat_junction_point_follow.stat.owner == 'BUILTIN\\Administrators' - - stat_junction_point_follow.stat.path == win_stat_dir + '\\junction-dest' - - stat_junction_point_follow.stat.size == 0 - -- name: test win_stat module non-existent path - win_stat: - path: '{{win_stat_dir}}\this_file_should_not_exist' - register: win_stat_missing - -- name: check win_stat missing result - assert: - that: - - not win_stat_missing.stat.exists - - win_stat_missing is not failed - - win_stat_missing is not changed - -- name: test win_stat module without path argument - win_stat: - register: win_stat_no_args - failed_when: "win_stat_no_args.msg != 'missing required arguments: path'" - -# https://github.com/ansible/ansible/issues/30258 -- name: get path of pagefile - win_shell: | - $pagefile = $null - $cs = Get-CimInstance -ClassName Win32_ComputerSystem - if ($cs.AutomaticManagedPagefile) { - $pagefile = "$($env:SystemRoot.Substring(0, 1)):\pagefile.sys" - } else { - $pf = Get-CimInstance -ClassName Win32_PageFileSetting - if ($pf -ne $null) { - $pagefile = $pf[0].Name - } - } - $pagefile - register: pagefile_path - -- name: get stat of pagefile - win_stat: - path: '{{pagefile_path.stdout_lines[0]}}' - get_checksum: no - register: pagefile_stat - when: pagefile_path.stdout_lines|count != 0 - -- name: assert get stat of pagefile - assert: - that: - - pagefile_stat.stat.exists == True - when: pagefile_path.stdout_lines|count != 0 - -# Tests with normal user -- set_fact: - gen_pw: password123! + {{ lookup('password', '/dev/null chars=ascii_letters,digits length=8') }} - -- name: create test user - win_user: - name: '{{win_stat_user}}' - password: '{{gen_pw}}' - update_password: always - groups: Users - -- name: get become user profile dir so we can clean it up later - vars: &become_vars - ansible_become_user: '{{win_stat_user}}' - ansible_become_password: '{{gen_pw}}' - ansible_become_method: runas - ansible_become: yes - win_shell: $env:USERPROFILE - register: profile_dir_out - -- name: ensure profile dir contains test username (eg, if become fails silently, prevent deletion of real user profile) - assert: - that: - - win_stat_user in profile_dir_out.stdout_lines[0] - -- name: test stat with non admin user on a normal file - vars: *become_vars - win_stat: - path: '{{win_stat_dir}}\nested\file.ps1' - register: user_file - -- name: asert test stat with non admin user on a normal file - assert: - that: - - user_file.stat.attributes == 'Archive' - - user_file.stat.checksum == 'a9993e364706816aba3e25717850c26c9cd0d89d' - - user_file.stat.creationtime == 1477984205 - - user_file.stat.exists == True - - user_file.stat.extension == '.ps1' - - user_file.stat.filename == 'file.ps1' - - user_file.stat.hlnk_targets == [] - - user_file.stat.isarchive == True - - user_file.stat.isdir == False - - user_file.stat.ishidden == False - - user_file.stat.isjunction == False - - user_file.stat.islnk == False - - user_file.stat.isreadonly == False - - user_file.stat.isreg == True - - user_file.stat.isshared == False - - user_file.stat.lastaccesstime == 1477984205 - - user_file.stat.lastwritetime == 1477984205 - - user_file.stat.nlink == 1 - - user_file.stat.owner == 'BUILTIN\\Administrators' - - user_file.stat.path == win_stat_dir + '\\nested\\file.ps1' - - user_file.stat.size == 3 - -- name: test stat on a symbolic link as normal user - vars: *become_vars - win_stat: - path: '{{win_stat_dir}}\link' - register: user_symlink - -- name: assert test stat on a symbolic link as normal user - assert: - that: - - user_symlink.stat.attributes == 'Directory, ReparsePoint' - - user_symlink.stat.creationtime is defined - - user_symlink.stat.exists == True - - user_symlink.stat.filename == 'link' - - user_symlink.stat.hlnk_targets == [] - - user_symlink.stat.isarchive == False - - user_symlink.stat.isdir == True - - user_symlink.stat.ishidden == False - - user_symlink.stat.islnk == True - - user_symlink.stat.isjunction == False - - user_symlink.stat.isreadonly == False - - user_symlink.stat.isreg == False - - user_symlink.stat.isshared == False - - user_symlink.stat.lastaccesstime is defined - - user_symlink.stat.lastwritetime is defined - - user_symlink.stat.lnk_source == win_stat_dir + '\\link-dest' - - user_symlink.stat.lnk_target == win_stat_dir + '\\link-dest' - - user_symlink.stat.nlink == 1 - - user_symlink.stat.owner == 'BUILTIN\\Administrators' - - user_symlink.stat.path == win_stat_dir + '\\link' - - user_symlink.stat.checksum is not defined diff --git a/test/integration/targets/win_tempfile/aliases b/test/integration/targets/win_tempfile/aliases deleted file mode 100644 index 423ce39108..0000000000 --- a/test/integration/targets/win_tempfile/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group2 diff --git a/test/integration/targets/win_tempfile/defaults/main.yml b/test/integration/targets/win_tempfile/defaults/main.yml deleted file mode 100644 index 824fe00bb1..0000000000 --- a/test/integration/targets/win_tempfile/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -test_tempfile_path: 'C:\ansible\win_tempfile .ÅÑŚÌβŁÈ [$!@^&test(;)]' diff --git a/test/integration/targets/win_tempfile/tasks/main.yml b/test/integration/targets/win_tempfile/tasks/main.yml deleted file mode 100644 index e989d1ada7..0000000000 --- a/test/integration/targets/win_tempfile/tasks/main.yml +++ /dev/null @@ -1,231 +0,0 @@ ---- -- name: get the current %TEMP% value - win_shell: '[System.IO.Path]::GetFullPath($env:TEMP)' - register: temp_value - -- name: register temp path value - set_fact: - temp_value: '{{ temp_value.stdout | trim }}' - - -- name: get raw %TEMP% value - win_shell: '$env:TEMP' - register: raw_temp_value - -- name: create temp file defaults check - win_tempfile: - register: create_tmp_file_defaults_check - check_mode: True - -- name: get stat of temp file defaults check - win_stat: - path: "{{create_tmp_file_defaults_check.path}}" - register: actual_create_tmp_file_defaults_check - -- name: assert create temp file defaults check - assert: - that: - - create_tmp_file_defaults_check is changed - - create_tmp_file_defaults_check.state == 'file' - - create_tmp_file_defaults_check.path.startswith(temp_value + '\\ansible.') - - actual_create_tmp_file_defaults_check.stat.exists == False - -- name: create temp file defaults - win_tempfile: - register: create_tmp_file_defaults - -- name: get stat of temp file defaults - win_stat: - path: "{{create_tmp_file_defaults.path}}" - register: actual_create_tmp_file_defaults - -- name: assert create temp file defaults - assert: - that: - - create_tmp_file_defaults is changed - - create_tmp_file_defaults.state == 'file' - - create_tmp_file_defaults.path.startswith(temp_value + '\\ansible.') - - actual_create_tmp_file_defaults.stat.exists == True - - actual_create_tmp_file_defaults.stat.isdir == False - -- name: create temp file defaults again - win_tempfile: - register: create_tmp_file_defaults_again - -- name: get stat of temp file defaults again - win_stat: - path: "{{create_tmp_file_defaults_again.path}}" - register: actual_create_tmp_file_defaults_again - -- name: assert create temp file defaults - assert: - that: - - create_tmp_file_defaults_again is changed - - create_tmp_file_defaults_again.state == 'file' - - create_tmp_file_defaults_again.path.startswith(temp_value + '\\ansible.') - - create_tmp_file_defaults_again.path != create_tmp_file_defaults.path - - actual_create_tmp_file_defaults_again.stat.exists == True - - actual_create_tmp_file_defaults_again.stat.isdir == False - -- name: create temp folder check - win_tempfile: - state: directory - register: create_tmp_folder_check - check_mode: True - -- name: get stat of temp folder check - win_stat: - path: "{{create_tmp_folder_check.path}}" - register: actual_create_tmp_folder_check - -- name: assert create temp folder check - assert: - that: - - create_tmp_folder_check is changed - - create_tmp_folder_check.state == 'directory' - - create_tmp_folder_check.path.startswith(temp_value + '\\ansible.') - - actual_create_tmp_folder_check.stat.exists == False - -- name: create temp folder - win_tempfile: - state: directory - register: create_tmp_folder - -- name: get stat of temp folder - win_stat: - path: "{{create_tmp_folder.path}}" - register: actual_create_tmp_folder - -- name: assert create temp folder - assert: - that: - - create_tmp_folder is changed - - create_tmp_folder.state == 'directory' - - create_tmp_folder.path.startswith(temp_value + '\\ansible.') - - actual_create_tmp_folder.stat.exists == True - - actual_create_tmp_folder.stat.isdir == True - -- name: create temp file with suffix - win_tempfile: - suffix: test-suffix - register: create_tmp_file_suffix - -- name: get stat of temp file with suffix - win_stat: - path: "{{create_tmp_file_suffix.path}}" - register: actual_creat_tmp_file_suffix - -- name: assert create temp file with suffix - assert: - that: - - create_tmp_file_suffix is changed - - create_tmp_file_suffix.state == 'file' - - create_tmp_file_suffix.path.startswith(temp_value + '\\ansible.') - - create_tmp_file_suffix.path.endswith('test-suffix') - - actual_creat_tmp_file_suffix.stat.exists == True - - actual_creat_tmp_file_suffix.stat.isdir == False - -- name: create temp file with different prefix - win_tempfile: - prefix: test-prefix - register: create_tmp_file_prefix - -- name: get stat of temp file with prefix - win_stat: - path: "{{create_tmp_file_prefix.path}}" - register: actual_creat_tmp_file_prefix - -- name: assert create temp file with prefix - assert: - that: - - create_tmp_file_prefix is changed - - create_tmp_file_prefix.state == 'file' - - create_tmp_file_prefix.path.startswith(temp_value + '\\test-prefix') - - actual_creat_tmp_file_prefix.stat.exists == True - - actual_creat_tmp_file_prefix.stat.isdir == False - -- name: create new temp file folder - win_file: - path: '{{test_tempfile_path}}\testing folder' - state: directory - -- block: - - name: create temp file with different path - win_tempfile: - path: '{{test_tempfile_path}}\testing folder' - register: create_tmp_file_difference_path - - - name: get stat of temp file with different path - win_stat: - path: "{{create_tmp_file_difference_path.path}}" - register: actual_creat_tmp_file_different_path - - - name: assert create temp file with different path - assert: - that: - - create_tmp_file_difference_path is changed - - create_tmp_file_difference_path.state == 'file' - - create_tmp_file_difference_path.path.startswith(test_tempfile_path + '\\testing folder\\ansible.') - - actual_creat_tmp_file_different_path.stat.exists == True - - actual_creat_tmp_file_different_path.stat.isdir == False - - - name: create temp file with DOS 8.3 short name - win_tempfile: - path: '{{ test_tempfile_path }}\TESTIN~1' - register: create_tmp_file_dos_path - - - name: get stat of temp file with different path - win_stat: - path: '{{ create_tmp_file_dos_path.path }}' - register: actual_create_tmp_file_dos_path - - - name: assert create temp file with different path - assert: - that: - - create_tmp_file_dos_path is changed - - create_tmp_file_dos_path.state == 'file' - - create_tmp_file_dos_path.path.startswith(test_tempfile_path + '\\testing folder\\ansible.') - - actual_create_tmp_file_dos_path.stat.exists == True - - actual_create_tmp_file_dos_path.stat.isdir == False - - always: - - name: delete temp file folder - win_file: - path: "{{test_tempfile_path}}" - state: absent - -- name: get current working directory - win_shell: $pwd.Path - register: current_dir - -- name: create directory for relative dir tests - win_file: - path: '{{ current_dir.stdout | trim }}\win_tempfile' - state: directory - -- block: - - name: create temp folder with relative path - win_tempfile: - path: win_tempfile - state: directory - register: create_relative - - - name: get stat of temp folder with relative path - win_stat: - path: '{{ create_relative.path }}' - register: actual_create_relative - - - name: assert create temp folder with relative path - assert: - that: - - create_relative is changed - - create_relative.state == 'directory' - - create_relative.path.startswith((current_dir.stdout | trim) + '\\win_tempfile\\ansible.') - - actual_create_relative.stat.exists == True - - actual_create_relative.stat.isdir == True - - always: - - name: remove relative directory tests - win_file: - path: '{{ current_dir.stdout | trim }}\win_tempfile' - state: absent diff --git a/test/integration/targets/win_template/aliases b/test/integration/targets/win_template/aliases deleted file mode 100644 index 1eed2ecfaf..0000000000 --- a/test/integration/targets/win_template/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group1 -shippable/windows/smoketest diff --git a/test/integration/targets/win_template/files/foo.dos.txt b/test/integration/targets/win_template/files/foo.dos.txt deleted file mode 100644 index b716eca026..0000000000 --- a/test/integration/targets/win_template/files/foo.dos.txt +++ /dev/null @@ -1,3 +0,0 @@ -BEGIN
-templated_var_loaded
-END
diff --git a/test/integration/targets/win_template/files/foo.unix.txt b/test/integration/targets/win_template/files/foo.unix.txt deleted file mode 100644 index d33849f2b5..0000000000 --- a/test/integration/targets/win_template/files/foo.unix.txt +++ /dev/null @@ -1,3 +0,0 @@ -BEGIN -templated_var_loaded -END diff --git a/test/integration/targets/win_template/meta/main.yml b/test/integration/targets/win_template/meta/main.yml deleted file mode 100644 index d328716dfa..0000000000 --- a/test/integration/targets/win_template/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_win_tests diff --git a/test/integration/targets/win_template/tasks/main.yml b/test/integration/targets/win_template/tasks/main.yml deleted file mode 100644 index 417aa89ab9..0000000000 --- a/test/integration/targets/win_template/tasks/main.yml +++ /dev/null @@ -1,291 +0,0 @@ -# test code for the template module -# (c) 2014, Michael DeHaan <michael.dehaan@gmail.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -# DOS TEMPLATE -- name: fill in a basic template (DOS) - win_template: - src: foo.j2 - dest: '{{ win_output_dir }}/foo.dos.templated' - register: template_result - -- name: verify that the file was marked as changed (DOS) - assert: - that: - - 'template_result is changed' - -- name: fill in a basic template again (DOS) - win_template: - src: foo.j2 - dest: '{{ win_output_dir }}/foo.dos.templated' - register: template_result2 - -- name: verify that the template was not changed (DOS) - assert: - that: - - 'template_result2 is not changed' - -# VERIFY DOS CONTENTS -- name: copy known good into place (DOS) - win_copy: - src: foo.dos.txt - dest: '{{ win_output_dir }}\\foo.dos.txt' - -- name: compare templated file to known good (DOS) - raw: fc.exe {{ win_output_dir }}\\foo.dos.templated {{ win_output_dir }}\\foo.dos.txt - register: diff_result - -- debug: - var: diff_result - -- name: verify templated file matches known good (DOS) - assert: - that: - - '"FC: no differences encountered" in diff_result.stdout' - - "diff_result.rc == 0" - -# UNIX TEMPLATE -- name: fill in a basic template (Unix) - win_template: - src: foo.j2 - dest: '{{ win_output_dir }}/foo.unix.templated' - newline_sequence: '\n' - register: template_result - -- name: verify that the file was marked as changed (Unix) - assert: - that: - - 'template_result is changed' - -- name: fill in a basic template again (Unix) - win_template: - src: foo.j2 - dest: '{{ win_output_dir }}/foo.unix.templated' - newline_sequence: '\n' - register: template_result2 - -- name: verify that the template was not changed (Unix) - assert: - that: - - 'template_result2 is not changed' - -# VERIFY UNIX CONTENTS -- name: copy known good into place (Unix) - win_copy: - src: foo.unix.txt - dest: '{{ win_output_dir }}\\foo.unix.txt' - -- name: compare templated file to known good (Unix) - raw: fc.exe {{ win_output_dir }}\\foo.unix.templated {{ win_output_dir }}\\foo.unix.txt - register: diff_result - -- debug: - var: diff_result - -- name: verify templated file matches known good (Unix) - assert: - that: - - '"FC: no differences encountered" in diff_result.stdout' - -# VERIFY DOS CONTENTS -- name: copy known good into place (DOS) - win_copy: - src: foo.dos.txt - dest: '{{ win_output_dir }}\\foo.dos.txt' - -- name: compare templated file to known good (DOS) - raw: fc.exe {{ win_output_dir }}\\foo.dos.templated {{ win_output_dir }}\\foo.dos.txt - register: diff_result - -- debug: - var: diff_result - -- name: verify templated file matches known good (DOS) - assert: - that: - - '"FC: no differences encountered" in diff_result.stdout' - -# TEST BACKUP -- name: test backup (check_mode) - win_template: - src: foo.j2 - dest: '{{ win_output_dir }}/foo.unix.templated' - backup: yes - register: cm_backup_result - check_mode: yes - -- name: verify that a backup_file was returned - assert: - that: - - cm_backup_result is changed - - cm_backup_result.backup_file is not none - -- name: test backup (normal mode) - win_template: - src: foo.j2 - dest: '{{ win_output_dir }}/foo.unix.templated' - backup: yes - register: nm_backup_result - -- name: check backup_file - win_stat: - path: '{{ nm_backup_result.backup_file }}' - register: backup_file - -- name: verify that a backup_file was returned - assert: - that: - - nm_backup_result is changed - - backup_file.stat.exists == true - -- name: create template dest directory - win_file: - path: '{{win_output_dir}}\directory' - state: directory - -- name: template src file to directory with backslash (check mode) - win_template: - src: foo.j2 - dest: '{{win_output_dir}}\directory\' - check_mode: yes - register: template_to_dir_backslash_check - -- name: get result of template src file to directory with backslash (check_mode) - win_stat: - path: '{{win_output_dir}}\directory\foo.j2' - register: template_to_dir_backslash_result_check - -- name: assert template src file to directory with backslash (check mode) - assert: - that: - - template_to_dir_backslash_check is changed - - not template_to_dir_backslash_result_check.stat.exists - -- name: template src file to directory with backslash - win_template: - src: foo.j2 - dest: '{{win_output_dir}}\directory\' - register: template_to_dir_backslash - -- name: get result of template src file to directory with backslash - win_stat: - path: '{{win_output_dir}}\directory\foo.j2' - register: template_to_dir_backslash_result - -- name: assert template src file to directory with backslash - assert: - that: - - template_to_dir_backslash is changed - - template_to_dir_backslash_result.stat.exists - - template_to_dir_backslash_result.stat.checksum == 'ed4f166b2937875ecad39c06648551f5af0b56d3' - -- name: template src file to directory with backslash (idempotent) - win_template: - src: foo.j2 - dest: '{{win_output_dir}}\directory\' - register: template_to_dir_backslash_again - -- name: assert template src file to directory with backslash (idempotent) - assert: - that: - - not template_to_dir_backslash_again is changed - -- name: template src file to directory (check mode) - win_template: - src: another_foo.j2 - dest: '{{win_output_dir}}\directory' - check_mode: yes - register: template_to_dir_check - -- name: get result of template src file to directory (check_mode) - win_stat: - path: '{{win_output_dir}}\directory\another_foo.j2' - register: template_to_dir_result_check - -- name: assert template src file to directory (check mode) - assert: - that: - - template_to_dir_check is changed - - not template_to_dir_result_check.stat.exists - -- name: template src file to directory - win_template: - src: another_foo.j2 - dest: '{{win_output_dir}}\directory' - register: template_to_dir - -- name: get result of template src file to directory - win_stat: - path: '{{win_output_dir}}\directory\another_foo.j2' - register: template_to_dir_result - -- name: assert template src file to directory with - assert: - that: - - template_to_dir is changed - - template_to_dir_result.stat.exists - - template_to_dir_result.stat.checksum == 'b10b6f27290d554a77da2457b2ccd7d6de86b920' - -- name: template src file to directory (idempotent) - win_template: - src: another_foo.j2 - dest: '{{win_output_dir}}\directory' - register: template_to_dir_again - -- name: assert template src file to directory (idempotent) - assert: - that: - - not template_to_dir_again is changed - -- name: template a file with utf-8 encoding - win_template: - src: foo.utf-8.j2 - dest: '{{ win_output_dir }}\foo.encoding.txt' - register: template_utf8 - -- name: slurp utf-8 templated file - slurp: - path: '{{ win_output_dir }}\foo.encoding.txt' - register: template_utf8_actual - -- name: get expected templated contents - set_fact: - expected_content: '{{ lookup("template", "foo.utf-8.j2") | trim }}' - -- name: assert template a file with utf-8 encoding - assert: - that: - - template_utf8 is changed - - template_utf8_actual.content | b64decode(encoding='utf-8') == expected_content + "\r\n" - -- name: template a file with windows-1252 encoding - win_template: - src: foo.utf-8.j2 - dest: '{{ win_output_dir }}\foo.encoding.txt' - output_encoding: windows-1252 - register: template_windows_1252 - -- name: slurp windows-1252 encoding - slurp: - path: '{{ win_output_dir }}\foo.encoding.txt' - register: template_windows_1252_actual - -- name: assert template a file with windows-1252 encoding - assert: - that: - - template_windows_1252 is changed - - template_windows_1252_actual.content | b64decode(encoding='windows-1252') == expected_content + "\r\n" diff --git a/test/integration/targets/win_template/templates/another_foo.j2 b/test/integration/targets/win_template/templates/another_foo.j2 deleted file mode 100644 index 4ee9bca2d7..0000000000 --- a/test/integration/targets/win_template/templates/another_foo.j2 +++ /dev/null @@ -1,3 +0,0 @@ -ABC -{{ templated_var }} -DEF diff --git a/test/integration/targets/win_template/templates/foo.j2 b/test/integration/targets/win_template/templates/foo.j2 deleted file mode 100644 index e6e3485216..0000000000 --- a/test/integration/targets/win_template/templates/foo.j2 +++ /dev/null @@ -1,3 +0,0 @@ -BEGIN -{{ templated_var }} -END diff --git a/test/integration/targets/win_template/templates/foo.utf-8.j2 b/test/integration/targets/win_template/templates/foo.utf-8.j2 deleted file mode 100644 index 65b95669b8..0000000000 --- a/test/integration/targets/win_template/templates/foo.utf-8.j2 +++ /dev/null @@ -1 +0,0 @@ -—café— - {{ templated_var }} diff --git a/test/integration/targets/win_template/templates/foo2.j2 b/test/integration/targets/win_template/templates/foo2.j2 deleted file mode 100644 index 710d55a736..0000000000 --- a/test/integration/targets/win_template/templates/foo2.j2 +++ /dev/null @@ -1,3 +0,0 @@ -BEGIN -[% templated_var %] -END diff --git a/test/integration/targets/win_template/vars/main.yml b/test/integration/targets/win_template/vars/main.yml deleted file mode 100644 index 1e8f64ccf4..0000000000 --- a/test/integration/targets/win_template/vars/main.yml +++ /dev/null @@ -1 +0,0 @@ -templated_var: templated_var_loaded diff --git a/test/integration/targets/win_updates/aliases b/test/integration/targets/win_updates/aliases deleted file mode 100644 index 98b74ac987..0000000000 --- a/test/integration/targets/win_updates/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group2 -unstable diff --git a/test/integration/targets/win_updates/defaults/main.yml b/test/integration/targets/win_updates/defaults/main.yml deleted file mode 100644 index 4946ccb037..0000000000 --- a/test/integration/targets/win_updates/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -win_updates_dir: '{{win_output_dir}}\win_updates' diff --git a/test/integration/targets/win_updates/tasks/main.yml b/test/integration/targets/win_updates/tasks/main.yml deleted file mode 100644 index 182090e98a..0000000000 --- a/test/integration/targets/win_updates/tasks/main.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -- name: ensure test folder exists - win_file: - path: '{{win_updates_dir}}' - state: directory - -- name: ensure WUA service is running - win_service: - name: wuauserv - state: started - start_mode: manual - -- block: - - include_tasks: tests.yml - - always: - - name: ensure test folder is deleted - win_file: - path: '{{win_updates_dir}}' - state: absent - - - name: ensure WUA service is running - win_service: - name: wuauserv - state: started - start_mode: manual diff --git a/test/integration/targets/win_updates/tasks/tests.yml b/test/integration/targets/win_updates/tasks/tests.yml deleted file mode 100644 index fe54a4b9c8..0000000000 --- a/test/integration/targets/win_updates/tasks/tests.yml +++ /dev/null @@ -1,96 +0,0 @@ ---- -- name: expect failure when state is not a valid option - win_updates: - state: invalid - register: invalid_state - failed_when: invalid_state.msg != 'state must be either installed, searched or downloaded' - -- name: ensure log file not present before tests - win_file: - path: '{{win_updates_dir}}/update.log' - state: absent - -- name: search for updates without log output - win_updates: - state: searched - category_names: - - CriticalUpdates - register: update_search_without_log - -- name: get stat of update without log file - win_stat: - path: '{{win_updates_dir}}/update.log' - register: update_search_without_log_actual - -- name: assert search for updates without log output - assert: - that: - - not update_search_without_log is changed - - update_search_without_log.reboot_required == False - - update_search_without_log.updates is defined - - update_search_without_log.installed_update_count is defined - - update_search_without_log.found_update_count is defined - - update_search_without_log_actual.stat.exists == False - -- name: search for updates with log output (check) - win_updates: - state: searched - category_names: CriticalUpdates - log_path: '{{win_updates_dir}}/update.log' - register: update_search_with_log_check - check_mode: yes - -- name: get stat of update log file (check) - win_stat: - path: '{{win_updates_dir}}/update.log' - register: update_search_with_log_check_actual - -- name: assert search for updates with log output - assert: - that: - - not update_search_with_log_check is changed - - update_search_with_log_check.reboot_required == False - - update_search_with_log_check.updates is defined - - update_search_with_log_check.installed_update_count is defined - - update_search_with_log_check.found_update_count is defined - - update_search_with_log_check_actual.stat.exists == False - -- name: search for updates with log output and use scheduled task - win_updates: - state: searched - category_names: - - CriticalUpdates - log_path: '{{win_updates_dir}}/update.log' - use_scheduled_task: yes - register: update_search_with_log - -- name: get stat of update log file - win_stat: - path: '{{win_updates_dir}}/update.log' - register: update_search_with_log_actual - -- name: assert search for updates with log output - assert: - that: - - not update_search_with_log is changed - - update_search_with_log.reboot_required == False - - update_search_with_log.updates is defined - - update_search_with_log.installed_update_count is defined - - update_search_with_log.found_update_count is defined - - update_search_with_log_actual.stat.exists - -- name: ensure WUA service is stopped for tests - win_service: - name: wuauserv - state: stopped - start_mode: disabled - -- name: expect failed when running with stopped WUA service - win_updates: - state: searched - category_names: - - CriticalUpdates - register: update_service_stopped_failed - failed_when: - - "'Failed to search for updates with criteria' not in update_service_stopped_failed.msg" - - "'The service cannot be started' not in update_service_stopped_failed.msg" diff --git a/test/integration/targets/win_uri/aliases b/test/integration/targets/win_uri/aliases deleted file mode 100644 index ab5e3056cb..0000000000 --- a/test/integration/targets/win_uri/aliases +++ /dev/null @@ -1,3 +0,0 @@ -shippable/windows/group6 -needs/httptester -skip/windows/2008 # httptester requires SSH which doesn't work with 2008 diff --git a/test/integration/targets/win_uri/meta/main.yml b/test/integration/targets/win_uri/meta/main.yml deleted file mode 100644 index 8b53e81a07..0000000000 --- a/test/integration/targets/win_uri/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: -- prepare_http_tests diff --git a/test/integration/targets/win_uri/tasks/main.yml b/test/integration/targets/win_uri/tasks/main.yml deleted file mode 100644 index d2ea71e994..0000000000 --- a/test/integration/targets/win_uri/tasks/main.yml +++ /dev/null @@ -1,547 +0,0 @@ ---- -# get with mismatch https -# get with mismatch https and ignore validation - -- name: get request without return_content - win_uri: - url: https://{{httpbin_host}}/get - return_content: no - register: get_request_without_content - -- name: assert get request without return_content - assert: - that: - - not get_request_without_content.changed - - get_request_without_content.content is not defined - - get_request_without_content.json is not defined - - get_request_without_content.status_code == 200 - -- name: get request with xml content - win_uri: - url: https://{{httpbin_host}}/xml - return_content: yes - register: get_request_with_xml_content - -- name: assert get request with xml content - assert: - that: - - not get_request_with_xml_content.changed - - get_request_with_xml_content.content is defined - - get_request_with_xml_content.json is not defined - - get_request_with_xml_content.status_code == 200 - -- name: get request with binary content - win_uri: - url: https://{{httpbin_host}}/image/png - return_content: yes - register: get_request_with_binary_content - -- name: assert get request with binary content - assert: - that: - - not get_request_with_binary_content.changed - - get_request_with_binary_content.content is defined - - get_request_with_binary_content.json is not defined - - get_request_with_xml_content.status_code == 200 - -- name: get request with return_content and dest (check mode) - win_uri: - url: https://{{httpbin_host}}/get - return_content: yes - dest: '{{ remote_tmp_dir }}\get.json' - register: get_request_with_dest_check - check_mode: yes - -- name: get stat of downloaded file (check mode) - win_stat: - path: '{{ remote_tmp_dir }}\get.json' - register: get_request_with_dest_actual_check - -- name: assert get request with return_content and dest (check mode) - assert: - that: - - get_request_with_dest_check.changed - - get_request_with_dest_check.content is defined - - get_request_with_dest_check.json is defined - - get_request_with_dest_actual_check.stat.exists == False - -- name: get request with return_content and dest - win_uri: - url: https://{{httpbin_host}}/base64/{{ '{"key":"value"}' | b64encode }} - return_content: yes - dest: '{{ remote_tmp_dir }}\get.json' - register: get_request_with_dest - -- name: get stat of downloaded file - win_stat: - path: '{{ remote_tmp_dir }}\get.json' - checksum_algorithm: sha1 - get_checksum: yes - register: get_request_with_dest_actual - -- name: assert get request with return_content and dest - assert: - that: - - get_request_with_dest.changed - - get_request_with_dest.content is defined - - get_request_with_dest.json is defined - - get_request_with_dest_actual.stat.exists == True - - get_request_with_dest_actual.stat.checksum == get_request_with_dest.content|hash('sha1') - -- name: get request with return_content and dest (idempotent) - win_uri: - url: https://{{httpbin_host}}/base64/{{ '{"key":"value"}' | b64encode }} - return_content: yes - dest: '{{ remote_tmp_dir }}\get.json' - register: get_request_with_dest_again - -- name: assert get request with return_content and dest (idempotent) - assert: - that: - - not get_request_with_dest_again.changed - -- name: test request with creates option should skip - win_uri: - url: https://{{httpbin_host}}/get - creates: '{{ remote_tmp_dir }}\get.json' - register: request_with_creates_skipped - -- name: assert test request with creates option should skip - assert: - that: - - not request_with_creates_skipped.changed - - request_with_creates_skipped.skipped - -- name: test request with creates option should not skip - win_uri: - url: https://{{httpbin_host}}/get - creates: '{{ remote_tmp_dir }}\fake.json' - register: request_with_creates_not_skipped - -- name: assert test request with creates option should not skip - assert: - that: - - not request_with_creates_not_skipped.changed - - request_with_creates_not_skipped.skipped is not defined - -- name: post request with return_content, dest and different content - win_uri: - url: https://{{httpbin_host}}/post - method: POST - content_type: application/json - body: '{"foo": "bar"}' - return_content: yes - dest: '{{ remote_tmp_dir }}\get.json' - register: post_request_with_different_content - -- name: get stat of downloaded file - win_stat: - path: '{{ remote_tmp_dir }}\get.json' - checksum_algorithm: sha1 - get_checksum: yes - register: post_request_with_different_content_actual - -- name: assert post request with return_content, dest and different content - assert: - that: - - post_request_with_different_content.changed - - post_request_with_different_content_actual.stat.exists == True - - post_request_with_different_content_actual.stat.checksum == post_request_with_different_content.content|hash('sha1') - -- name: test safe redirection of get - win_uri: - url: https://{{httpbin_host}}/redirect/2 - register: redirect_safe - -- name: assert safe redirection of get - assert: - that: - - redirect_safe.status_code == 200 - - redirect_safe.response_uri == 'https://' + httpbin_host + '/get' - -- name: test safe redirection of head - win_uri: - url: https://{{httpbin_host}}/redirect/2 - method: HEAD - register: redirect_safe_head - -- name: assert safe redirection of head - assert: - that: - - redirect_safe_head.status_code == 200 - - redirect_safe_head.response_uri == 'https://' + httpbin_host + '/get' - -- name: test safe redirection of put - win_uri: - url: https://{{httpbin_host}}/redirect-to?url=https://{{httpbin_host}}/put - body: data - status_code: 302 - method: PUT - register: redirect_safe_put - -- name: assert safe redirection of put - assert: - that: - - redirect_safe_put.status_code == 302 - - redirect_safe_put.response_uri == 'https://' + httpbin_host + '/redirect-to?url=https://' + httpbin_host + '/put' - -- name: test none redirection of get - win_uri: - url: https://{{httpbin_host}}/redirect/2 - status_code: 302 - follow_redirects: none - register: redirect_none - -- name: assert none redirection of get - assert: - that: - - redirect_none.status_code == 302 - - redirect_none.response_uri == 'https://' + httpbin_host + '/redirect/2' - -- name: test none redirection of put - win_uri: - url: https://{{httpbin_host}}/redirect-to?url=https://{{httpbin_host}}/put - body: data - status_code: 302 - method: PUT - follow_redirects: none - register: redirect_none_put - -- name: assert none redirection of put - assert: - that: - - redirect_none_put.status_code == 302 - - redirect_none_put.response_uri == 'https://' + httpbin_host + '/redirect-to?url=https://' + httpbin_host + '/put' - -- name: test all redirection of get - win_uri: - url: https://{{httpbin_host}}/redirect/2 - follow_redirects: all - register: redirect_all - -- name: assert all redirection of get - assert: - that: - - redirect_all.status_code == 200 - - redirect_all.response_uri == 'https://' + httpbin_host + '/get' - -- name: test all redirection of put - win_uri: - url: https://{{httpbin_host}}/redirect-to?url=https://{{httpbin_host}}/put - body: data - method: PUT - follow_redirects: all - register: redirect_all_put - -- name: assert all redirection of put - assert: - that: - - redirect_all_put.status_code == 200 - - redirect_all_put.response_uri == 'https://' + httpbin_host + '/put' - -- name: test exceeded maximum redirection - win_uri: - url: https://{{httpbin_host}}/redirect/5 - maximum_redirection: 4 - status_code: 302 - register: maximum_redirection - -- name: assert exceeded maximum redirection - assert: - that: - - maximum_redirection.status_code == 302 - - maximum_redirection.response_uri == 'https://' + httpbin_host + '/relative-redirect/1' - -- name: test basic auth - win_uri: - url: https://{{httpbin_host}}/basic-auth/user/passwd - user: user - password: passwd - register: basic_auth - -- name: assert test basic auth - assert: - that: - - not basic_auth.changed - - basic_auth.status_code == 200 - -- name: test basic auth with force auth - win_uri: - url: https://{{httpbin_host}}/hidden-basic-auth/user/passwd - user: user - password: passwd - force_basic_auth: yes - register: basic_auth_forced - -- name: assert test basic auth with forced auth - assert: - that: - - not basic_auth_forced.changed - - basic_auth_forced.status_code == 200 - -- name: test PUT - win_uri: - url: https://{{httpbin_host}}/put - method: PUT - body: foo=bar - return_content: yes - register: put_request - -- name: assert test PUT - assert: - that: - - not put_request.changed - - put_request.status_code == 200 - - put_request.json.data == 'foo=bar' - -- name: test OPTIONS - win_uri: - url: https://{{httpbin_host}}/ - method: OPTIONS - register: option_request - -- name: assert test OPTIONS - assert: - that: - - not option_request.changed - - option_request.status_code == 200 - - 'option_request.allow.split(", ")|sort == ["GET", "HEAD", "OPTIONS"]' - -# SNI Tests - -- name: validate status_codes are correct - win_uri: - url: https://{{httpbin_host}}/status/202 - status_code: - - 202 - - 418 - method: POST - body: foo - register: status_code_check - -- name: assert validate status_codes are correct - assert: - that: - - not status_code_check.changed - - status_code_check.status_code == 202 - -- name: send JSON body with dict type - win_uri: - url: https://{{httpbin_host}}/post - method: POST - body: - foo: bar - list: - - 1 - - 2 - dict: - foo: bar - headers: - 'Content-Type': 'text/json' - return_content: yes - register: json_as_dict - -- name: set fact of expected json dict - set_fact: - json_as_dict_value: - foo: bar - list: - - 1 - - 2 - dict: - foo: bar - -- name: assert send JSON body with dict type - assert: - that: - - not json_as_dict.changed - - json_as_dict.json.json == json_as_dict_value - - json_as_dict.status_code == 200 - -- name: send JSON body with 1 item in list - win_uri: - url: https://{{httpbin_host}}/post - method: POST - body: - - foo: bar - headers: - 'Content-Type': 'text/json' - return_content: yes - register: json_as_oneitemlist - -- name: set fact of expected json 1 item list - set_fact: - json_as_oneitemlist_value: - - foo: bar - -- name: assert send JSON body with 1 item in list - assert: - that: - - not json_as_oneitemlist.changed - - json_as_oneitemlist.json.json == json_as_oneitemlist_value - - json_as_oneitemlist.status_code == 200 - -- name: get request with custom headers - win_uri: - url: https://{{httpbin_host}}/get - headers: - Test-Header: hello - Another-Header: world - return_content: yes - register: get_custom_header - -- name: assert request with custom headers - assert: - that: - - not get_custom_header.changed - - get_custom_header.status_code == 200 - - get_custom_header.json.headers['Test-Header'] == 'hello' - - get_custom_header.json.headers['Another-Header'] == 'world' - -- name: Validate invalid method - win_uri: - url: https://{{ httpbin_host }}/anything - method: UNKNOWN - register: invalid_method - ignore_errors: yes - -- name: Assert invalid method fails - assert: - that: - - invalid_method is failure - - invalid_method.status_code == 405 - - invalid_method.status_description == 'METHOD NOT ALLOWED' - -# client cert auth tests - -- name: get request with timeout - win_uri: - url: https://{{httpbin_host}}/delay/10 - timeout: 5 - register: get_with_timeout_fail - failed_when: '"The operation has timed out" not in get_with_timeout_fail.msg' - -- name: connect to fakepath that does not exist - win_uri: - url: https://{{httpbin_host}}/fakepath - status_code: 404 - return_content: yes - register: invalid_path - -# verifies the return values are still set on a non 200 response -- name: assert connect to fakepath that does not exist - assert: - that: - - not invalid_path.changed - - invalid_path.status_code == 404 - - invalid_path.status_description == 'NOT FOUND' - - invalid_path.content is defined - - invalid_path.method == 'GET' - - invalid_path.connection is defined - -- name: post request with custom headers - win_uri: - url: https://{{httpbin_host}}/post - method: POST - headers: - Test-Header: hello - Another-Header: world - content_type: application/json - body: '{"foo": "bar"}' - return_content: yes - register: post_request_with_custom_headers - -- name: assert post with custom headers - assert: - that: - - not post_request_with_custom_headers.changed - - post_request_with_custom_headers.status_code == 200 - - post_request_with_custom_headers.json.headers['Content-Type'] == "application/json" - - post_request_with_custom_headers.json.headers['Test-Header'] == 'hello' - - post_request_with_custom_headers.json.headers['Another-Header'] == 'world' - -- name: validate status codes as list of strings - win_uri: - url: https://{{httpbin_host}}/status/202 - status_code: - - '202' - - '418' - method: POST - body: foo - return_content: yes - register: request_status_code_string - -- name: assert status codes as list of strings - assert: - that: - - not request_status_code_string.changed - - request_status_code_string.status_code == 202 - -- name: validate status codes as comma separated list - win_uri: - url: https://{{httpbin_host}}/status/202 - status_code: 202, 418 - method: POST - body: foo - return_content: yes - register: request_status_code_comma - -- name: assert status codes as comma separated list - assert: - that: - - not request_status_code_comma.changed - - request_status_code_comma.status_code == 202 - -# https://github.com/ansible/ansible/issues/55294 -- name: get json content that is an array - win_uri: - url: https://{{httpbin_host}}/base64/{{ '[{"abc":"def"}]' | b64encode }} - return_content: yes - register: content_array - -- name: assert content of json array - assert: - that: - - not content_array is changed - - content_array.content == '[{"abc":"def"}]' - - content_array.json == [{"abc":"def"}] - -- name: send request with explicit http_agent - win_uri: - url: https://{{httpbin_host}}/get - http_agent: test-agent - return_content: yes - register: http_agent_option - -- name: assert send request with explicit http_agent - assert: - that: - - http_agent_option.json.headers['User-Agent'] == 'test-agent' - -- name: send request with explicit User-Agent header - win_uri: - url: https://{{httpbin_host}}/get - headers: - User-Agent: test-agent - return_content: yes - register: http_agent_header - -- name: assert send request with explicit User-Agent header - assert: - that: - - http_agent_header.json.headers['User-Agent'] == 'test-agent' - -- name: send request with explicit http_agent and header (http_agent wins) - win_uri: - url: https://{{httpbin_host}}/get - http_agent: test-agent-option - headers: - User-Agent: test-agent-header - return_content: yes - register: http_agent_combo - -- name: assert send request with explicit http_agent and header (http_agent wins) - assert: - that: - - http_agent_combo.json.headers['User-Agent'] == 'test-agent-option' - - http_agent_combo.warnings[0] == "The 'User-Agent' header and the 'http_agent' was set, using the 'http_agent' for web request" diff --git a/test/integration/targets/win_user/aliases b/test/integration/targets/win_user/aliases deleted file mode 100644 index 6036e173f1..0000000000 --- a/test/integration/targets/win_user/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group7 diff --git a/test/integration/targets/win_user/defaults/main.yml b/test/integration/targets/win_user/defaults/main.yml deleted file mode 100644 index c6a18ed3a3..0000000000 --- a/test/integration/targets/win_user/defaults/main.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- - -test_win_user_name: test_win_user -test_win_user_password: "T35Tus3rP@ssW0rd" -test_win_user_password2: "pa55wOrd4te5tU53R!" diff --git a/test/integration/targets/win_user/files/lockout_user.ps1 b/test/integration/targets/win_user/files/lockout_user.ps1 deleted file mode 100644 index e15f13f3bf..0000000000 --- a/test/integration/targets/win_user/files/lockout_user.ps1 +++ /dev/null @@ -1,17 +0,0 @@ -trap -{ - Write-Error -ErrorRecord $_ - exit 1; -} - -$username = $args[0] -[void][system.reflection.assembly]::LoadWithPartialName('System.DirectoryServices.AccountManagement') -$pc = New-Object -TypeName System.DirectoryServices.AccountManagement.PrincipalContext 'Machine', $env:COMPUTERNAME -For ($i = 1; $i -le 10; $i++) { - try { - $pc.ValidateCredentials($username, 'b@DP@ssw0rd') - } - catch { - break - } -} diff --git a/test/integration/targets/win_user/tasks/main.yml b/test/integration/targets/win_user/tasks/main.yml deleted file mode 100644 index 072a381c9e..0000000000 --- a/test/integration/targets/win_user/tasks/main.yml +++ /dev/null @@ -1,34 +0,0 @@ ---- -- name: create test group that has a network logon denied - win_group: - name: win_user-test - state: present - -- name: add test group to SeDenyNetworkLogonRight - win_user_right: - name: SeDenyNetworkLogonRight - users: - - win_user-test - action: add - -- block: - - name: run tests - include_tasks: tests.yml - - always: - - name: remove SeDenyNetworkLogonRight on test group - win_user_right: - name: SeDenyNetworkLogonRight - users: - - win_user-test - action: remove - - - name: remove test group - win_group: - name: win_user-test - state: absent - - - name: remove the test user - win_user: - name: '{{ test_win_user_name }}' - state: absent diff --git a/test/integration/targets/win_user/tasks/tests.yml b/test/integration/targets/win_user/tasks/tests.yml deleted file mode 100644 index 1c36d32101..0000000000 --- a/test/integration/targets/win_user/tasks/tests.yml +++ /dev/null @@ -1,455 +0,0 @@ -# test code for the win_user module -# (c) 2014, Chris Church <chris@ninemoreminutes.com> - -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see <http://www.gnu.org/licenses/>. - -- name: remove existing test user if present - win_user: name="{{ test_win_user_name }}" state="absent" - register: win_user_remove_result - -- name: check user removal result - assert: - that: - - "win_user_remove_result.name" - - "win_user_remove_result.state == 'absent'" - -- name: try to remove test user again - win_user: name="{{ test_win_user_name }}" state="absent" - register: win_user_remove_result_again - -- name: check user removal result again - assert: - that: - - "win_user_remove_result_again is not changed" - - "win_user_remove_result_again.name" - - "win_user_remove_result_again.msg" - - "win_user_remove_result.state == 'absent'" - -- name: test missing user with query state - win_user: name="{{ test_win_user_name }}" state="query" - register: win_user_missing_query_result - -- name: check missing query result - assert: - that: - - "win_user_missing_query_result is not changed" - - "win_user_missing_query_result.name" - - "win_user_missing_query_result.msg" - - "win_user_missing_query_result.state == 'absent'" - -- name: test create user - win_user: name="{{ test_win_user_name }}" password="{{ test_win_user_password }}" fullname="Test User" description="Test user account" groups="Guests" - register: win_user_create_result - -- name: check user creation result - assert: - that: - - "win_user_create_result is changed" - - "win_user_create_result.name == '{{ test_win_user_name }}'" - - "win_user_create_result.fullname == 'Test User'" - - "win_user_create_result.description == 'Test user account'" - - "win_user_create_result.path" - - "win_user_create_result.state == 'present'" - -- name: update user full name and description - win_user: name="{{ test_win_user_name }}" fullname="Test Ansible User" description="Test user account created by Ansible" groups="" - register: win_user_update_result - -- name: check full name and description update result - assert: - that: - - "win_user_update_result is changed" - - "win_user_update_result.fullname == 'Test Ansible User'" - - "win_user_update_result.description == 'Test user account created by Ansible'" - -- name: update user full name and description again with same values - win_user: name="{{ test_win_user_name }}" fullname="Test Ansible User" description="Test user account created by Ansible" - register: win_user_update_result_again - -- name: check full name and description result again - assert: - that: - - "win_user_update_result_again is not changed" - - "win_user_update_result_again.fullname == 'Test Ansible User'" - - "win_user_update_result_again.description == 'Test user account created by Ansible'" - -- name: test again with no options or changes - win_user: name="{{ test_win_user_name }}" - register: win_user_nochange_result - -- name: check no changes result - assert: - that: - - "win_user_nochange_result is not changed" - -- name: test again with query state - win_user: name="{{ test_win_user_name }}" state="query" - register: win_user_query_result - -- name: check query result - assert: - that: - - "win_user_query_result is not changed" - - "win_user_query_result.state == 'present'" - - "win_user_query_result.name == '{{ test_win_user_name }}'" - - "win_user_query_result.fullname == 'Test Ansible User'" - - "win_user_query_result.description == 'Test user account created by Ansible'" - - "win_user_query_result.path" - - "win_user_query_result.sid" - - "win_user_query_result.groups == []" - -- name: change user password - win_user: name="{{ test_win_user_name }}" password="{{ test_win_user_password2 }}" - register: win_user_password_result - -- name: check password change result - assert: - that: - - "win_user_password_result is changed" - -- name: change user password again to same value - win_user: name="{{ test_win_user_name }}" password="{{ test_win_user_password2 }}" - register: win_user_password_result_again - -- name: check password change result again - assert: - that: - - "win_user_password_result_again is not changed" - -- name: check update_password=on_create for existing user - win_user: name="{{ test_win_user_name }}" password="ThisP@ssW0rdShouldNotBeUsed" update_password=on_create - register: win_user_nopasschange_result - -- name: check password change with on_create flag result - assert: - that: - - "win_user_nopasschange_result is not changed" - -- name: set password expired flag - win_user: name="{{ test_win_user_name }}" password_expired=yes - register: win_user_password_expired_result - -- name: check password expired result - assert: - that: - - "win_user_password_expired_result is changed" - - "win_user_password_expired_result.password_expired" - -- name: set password when expired - win_user: name="{{ test_win_user_name }}" password={{ test_win_user_password2 }} update_password=always - register: win_user_can_set_password_on_expired - -- name: check set password on expired result - assert: - that: - - win_user_can_set_password_on_expired is changed - -- name: set password expired flag again - win_user: name="{{ test_win_user_name }}" password_expired=yes - register: win_user_password_expired_result - -- name: check password expired result - assert: - that: - - "win_user_password_expired_result is changed" - - "win_user_password_expired_result.password_expired" - -- name: clear password expired flag - win_user: name="{{ test_win_user_name }}" password_expired=no - register: win_user_clear_password_expired_result - -- name: check clear password expired result - assert: - that: - - "win_user_clear_password_expired_result is changed" - - "not win_user_clear_password_expired_result.password_expired" - -- name: set password never expires flag - win_user: name="{{ test_win_user_name }}" password_never_expires=yes - register: win_user_password_never_expires_result - -- name: check password never expires result - assert: - that: - - "win_user_password_never_expires_result is changed" - - "win_user_password_never_expires_result.password_never_expires" - -- name: clear password never expires flag - win_user: name="{{ test_win_user_name }}" password_never_expires=no - register: win_user_clear_password_never_expires_result - -- name: check clear password never expires result - assert: - that: - - "win_user_clear_password_never_expires_result is changed" - - "not win_user_clear_password_never_expires_result.password_never_expires" - -- name: set user cannot change password flag - win_user: name="{{ test_win_user_name }}" user_cannot_change_password=yes - register: win_user_cannot_change_password_result - -- name: check user cannot change password result - assert: - that: - - "win_user_cannot_change_password_result is changed" - - "win_user_cannot_change_password_result.user_cannot_change_password" - -- name: clear user cannot change password flag - win_user: name="{{ test_win_user_name }}" user_cannot_change_password=no - register: win_user_can_change_password_result - -- name: check clear user cannot change password result - assert: - that: - - "win_user_can_change_password_result is changed" - - "not win_user_can_change_password_result.user_cannot_change_password" - -- name: set account disabled flag - win_user: name="{{ test_win_user_name }}" account_disabled=true - register: win_user_account_disabled_result - -- name: check account disabled result - assert: - that: - - "win_user_account_disabled_result is changed" - - "win_user_account_disabled_result.account_disabled" - -- name: set password on disabled account - win_user: name="{{ test_win_user_name }}" password={{ test_win_user_password2 }} update_password=always - register: win_user_can_set_password_on_disabled - -- name: check set password on disabled result - assert: - that: - - win_user_can_set_password_on_disabled is changed - - win_user_can_set_password_on_disabled.account_disabled - -- name: clear account disabled flag - win_user: name="{{ test_win_user_name }}" account_disabled=false - register: win_user_clear_account_disabled_result - -- name: check clear account disabled result - assert: - that: - - "win_user_clear_account_disabled_result is changed" - - "not win_user_clear_account_disabled_result.account_disabled" - -- name: attempt to set account locked flag - win_user: name="{{ test_win_user_name }}" account_locked=yes - register: win_user_set_account_locked_result - ignore_errors: true - -- name: verify that attempting to set account locked flag fails - assert: - that: - - "win_user_set_account_locked_result is failed" - - "win_user_set_account_locked_result is not changed" - -- name: attempt to lockout test account - script: lockout_user.ps1 "{{ test_win_user_name }}" - -- name: get user to check if account locked flag is set - win_user: name="{{ test_win_user_name }}" state="query" - register: win_user_account_locked_result - -- name: clear account locked flag if set - win_user: name="{{ test_win_user_name }}" account_locked=no - register: win_user_clear_account_locked_result - when: "win_user_account_locked_result.account_locked" - -- name: check clear account lockout result if account was locked - assert: - that: - - "win_user_clear_account_locked_result is changed" - - "not win_user_clear_account_locked_result.account_locked" - when: "win_user_account_locked_result.account_locked" - -- name: assign test user to a group - win_user: name="{{ test_win_user_name }}" groups="Users" - register: win_user_replace_groups_result - -- name: check assign user to group result - assert: - that: - - "win_user_replace_groups_result is changed" - - "win_user_replace_groups_result.groups|length == 1" - - "win_user_replace_groups_result.groups[0]['name'] == 'Users'" - -- name: assign test user to the same group - win_user: - name: "{{ test_win_user_name }}" - groups: ["Users"] - register: win_user_replace_groups_again_result - -- name: check assign user to group again result - assert: - that: - - "win_user_replace_groups_again_result is not changed" - -- name: add user to another group - win_user: name="{{ test_win_user_name }}" groups="Power Users" groups_action="add" - register: win_user_add_groups_result - -- name: check add user to another group result - assert: - that: - - "win_user_add_groups_result is changed" - - "win_user_add_groups_result.groups|length == 2" - - "win_user_add_groups_result.groups[0]['name'] in ('Users', 'Power Users')" - - "win_user_add_groups_result.groups[1]['name'] in ('Users', 'Power Users')" - -- name: add user to another group again - win_user: - name: "{{ test_win_user_name }}" - groups: "Power Users" - groups_action: add - register: win_user_add_groups_again_result - -- name: check add user to another group again result - assert: - that: - - "win_user_add_groups_again_result is not changed" - -- name: remove user from a group - win_user: name="{{ test_win_user_name }}" groups="Users" groups_action="remove" - register: win_user_remove_groups_result - -- name: check remove user from group result - assert: - that: - - "win_user_remove_groups_result is changed" - - "win_user_remove_groups_result.groups|length == 1" - - "win_user_remove_groups_result.groups[0]['name'] == 'Power Users'" - -- name: remove user from a group again - win_user: - name: "{{ test_win_user_name }}" - groups: - - "Users" - groups_action: remove - register: win_user_remove_groups_again_result - -- name: check remove user from group again result - assert: - that: - - "win_user_remove_groups_again_result is not changed" - -- name: reassign test user to multiple groups - win_user: name="{{ test_win_user_name }}" groups="Users, Guests" groups_action="replace" - register: win_user_reassign_groups_result - -- name: check reassign user groups result - assert: - that: - - "win_user_reassign_groups_result is changed" - - "win_user_reassign_groups_result.groups|length == 2" - - "win_user_reassign_groups_result.groups[0]['name'] in ('Users', 'Guests')" - - "win_user_reassign_groups_result.groups[1]['name'] in ('Users', 'Guests')" - -- name: reassign test user to multiple groups again - win_user: - name: "{{ test_win_user_name }}" - groups: - - "Users" - - "Guests" - groups_action: replace - register: win_user_reassign_groups_again_result - -- name: check reassign user groups again result - assert: - that: - - "win_user_reassign_groups_again_result is not changed" - -- name: remove user from all groups - win_user: name="{{ test_win_user_name }}" groups="" - register: win_user_remove_all_groups_result - -- name: check remove user from all groups result - assert: - that: - - "win_user_remove_all_groups_result is changed" - - "win_user_remove_all_groups_result.groups|length == 0" - -- name: remove user from all groups again - win_user: - name: "{{ test_win_user_name }}" - groups: [] - register: win_user_remove_all_groups_again_result - -- name: check remove user from all groups again result - assert: - that: - - "win_user_remove_all_groups_again_result is not changed" - -- name: assign user to invalid group - win_user: name="{{ test_win_user_name }}" groups="Userz" - register: win_user_invalid_group_result - ignore_errors: true - -- name: check invalid group result - assert: - that: - - "win_user_invalid_group_result is failed" - - "win_user_invalid_group_result.msg" - - win_user_invalid_group_result.msg is match("group 'Userz' not found") - -- name: remove test user when finished - win_user: name="{{ test_win_user_name }}" state="absent" - register: win_user_final_remove_result - -- name: check final user removal result - assert: - that: - - "win_user_final_remove_result is changed" - - "win_user_final_remove_result.name" - - "win_user_final_remove_result.msg" - - "win_user_final_remove_result.state == 'absent'" - -- name: test removed user with query state - win_user: name="{{ test_win_user_name }}" state="query" - register: win_user_removed_query_result - -- name: check removed query result - assert: - that: - - "win_user_removed_query_result is not changed" - - "win_user_removed_query_result.name" - - "win_user_removed_query_result.msg" - - "win_user_removed_query_result.state == 'absent'" - -# Tests the Test-Credential path where LogonUser fails if the user does not -# have the right for a network logon -- name: add new user that has the right SeDenyNetworkLogonRight - win_user: - name: '{{ test_win_user_name }}' - password: '{{ test_win_user_password2 }}' - state: present - groups: - - win_user-test - -- name: add new user that has the right SeDenyNetworkLogonRight (idempotent) - win_user: - name: '{{ test_win_user_name }}' - password: '{{ test_win_user_password2 }}' - state: present - groups: - - win_user-test - register: deny_network_idempotent - -- name: assert add new user that has the right SeDenyNetworkLogonRight (idempotent) - assert: - that: - - not deny_network_idempotent is changed diff --git a/test/integration/targets/win_user_right/aliases b/test/integration/targets/win_user_right/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_user_right/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_user_right/defaults/main.yml b/test/integration/targets/win_user_right/defaults/main.yml deleted file mode 100644 index 3db8c4f006..0000000000 --- a/test/integration/targets/win_user_right/defaults/main.yml +++ /dev/null @@ -1 +0,0 @@ -test_win_user_right_name: SeRelabelPrivilege diff --git a/test/integration/targets/win_user_right/library/test_get_right.ps1 b/test/integration/targets/win_user_right/library/test_get_right.ps1 deleted file mode 100644 index 977022e4db..0000000000 --- a/test/integration/targets/win_user_right/library/test_get_right.ps1 +++ /dev/null @@ -1,44 +0,0 @@ -#!powershell - -#Requires -Module Ansible.ModuleUtils.Legacy - -# basic script to get the lsit of users in a particular right -# this is quite complex to put as a simple script so this is -# just a simple module - -$ErrorActionPreference = 'Stop' - -$params = Parse-Args $args -supports_check_mode $false -$name = Get-AnsibleParam -obj $params -name "name" -type "str" -failifempty $true - -$result = @{ - changed = $false - users = @() -} - -Function Get-Username($sid) { - $object = New-Object System.Security.Principal.SecurityIdentifier($sid) - $user = $object.Translate([System.Security.Principal.NTAccount]) - $user.Value -} - -$secedit_ini_path = [IO.Path]::GetTempFileName() -&SecEdit.exe /export /cfg $secedit_ini_path /quiet -$secedit_ini = Get-Content -Path $secedit_ini_path -Remove-Item -Path $secedit_ini_path -Force - -foreach ($line in $secedit_ini) { - if ($line.ToLower().StartsWith("$($name.ToLower()) = ")) { - $right_split = $line -split "=" - $existing_users = $right_split[-1].Trim() -split "," - foreach ($user in $existing_users) { - if ($user.StartsWith("*S")) { - $result.users += Get-Username -sid $user.substring(1) - } else { - $result.users += $user - } - } - } -} - -Exit-Json $result diff --git a/test/integration/targets/win_user_right/tasks/main.yml b/test/integration/targets/win_user_right/tasks/main.yml deleted file mode 100644 index 8ab7ba3bb8..0000000000 --- a/test/integration/targets/win_user_right/tasks/main.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -- name: get current entries for right - test_get_right: - name: '{{test_win_user_right_name}}' - register: actual_users - -- name: get facts - setup: - -- block: - - name: ensure right is empty before test - win_user_right: - name: '{{test_win_user_right_name}}' - users: [] - action: set - - - name: run tests - include_tasks: tests.yml - - always: - - name: reset entries for test right - win_user_right: - name: '{{test_win_user_right_name}}' - users: '{{actual_users.users}}' - action: set diff --git a/test/integration/targets/win_user_right/tasks/tests.yml b/test/integration/targets/win_user_right/tasks/tests.yml deleted file mode 100644 index 649e8fbe35..0000000000 --- a/test/integration/targets/win_user_right/tasks/tests.yml +++ /dev/null @@ -1,390 +0,0 @@ ---- -- name: Look up built-in Administrator account name (-500 user whose domain == computer name) - raw: $machine_sid = (Get-CimInstance Win32_UserAccount -Filter "Domain='$env:COMPUTERNAME'")[0].SID -replace '(S-1-5-21-\d+-\d+-\d+)-\d+', '$1'; (Get-CimInstance Win32_UserAccount -Filter "SID='$machine_sid-500'").Name - check_mode: no - register: admin_account_result - -- set_fact: - admin_account_name: "{{ admin_account_result.stdout_lines[0] }}" - -- name: fail to set invalid right - win_user_right: - name: FailRight - users: '{{ admin_account_name }}' - register: fail_invalid_right - failed_when: fail_invalid_right.msg != 'the specified right FailRight is not a valid right' - -- name: fail with invalid username - win_user_right: - name: '{{test_win_user_right_name}}' - users: FakeUser - register: fail_invalid_user - failed_when: "'account_name FakeUser is not a valid account, cannot get SID' not in fail_invalid_user.msg" - -- name: remove from empty right check - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Administrators'] - action: remove - register: remove_empty_right_check - check_mode: yes - -- name: assert remove from empty right check - assert: - that: - - remove_empty_right_check is not changed - - remove_empty_right_check.added == [] - - remove_empty_right_check.removed == [] - -- name: remove from empty right - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Administrators'] - action: remove - register: remove_empty_right - check_mode: yes - -- name: assert remove from empty right - assert: - that: - - remove_empty_right is not changed - - remove_empty_right.added == [] - - remove_empty_right.removed == [] - -- name: set administrator check - win_user_right: - name: '{{test_win_user_right_name}}' - users: '{{ admin_account_name }}' - action: set - register: set_administrator_check - check_mode: yes - -- name: get actual set administrator check - test_get_right: - name: '{{test_win_user_right_name}}' - register: set_administrator_actual_check - -- name: assert set administrator check - assert: - that: - - set_administrator_check is changed - - set_administrator_check.added|count == 1 - - set_administrator_check.added[0]|upper == '{{ansible_hostname|upper}}\{{ admin_account_name|upper }}' - - set_administrator_check.removed == [] - - set_administrator_actual_check.users == [] - -- name: set administrator - win_user_right: - name: '{{test_win_user_right_name}}' - users: '{{ admin_account_name }}' - action: set - register: set_administrator - -- name: get actual set administrator - test_get_right: - name: '{{test_win_user_right_name}}' - register: set_administrator_actual - -- name: assert set administrator check - assert: - that: - - set_administrator is changed - - set_administrator.added|count == 1 - - set_administrator.added[0]|upper == '{{ansible_hostname|upper}}\{{ admin_account_name|upper }}' - - set_administrator.removed == [] - - set_administrator_actual.users == ['{{ admin_account_name }}'] - -- name: set administrator again - win_user_right: - name: '{{test_win_user_right_name}}' - users: '{{ admin_account_name }}' - action: set - register: set_administrator_again - -- name: assert set administrator check - assert: - that: - - set_administrator_again is not changed - - set_administrator_again.added == [] - - set_administrator_again.removed == [] - -- name: remove from right check - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Guests', '{{ansible_hostname}}\Users', '.\Backup Operators'] - action: remove - register: remove_right_check - check_mode: yes - -- name: get actual remove from right check - test_get_right: - name: '{{test_win_user_right_name}}' - register: remove_right_actual_check - -- name: assert remove from right check - assert: - that: - - remove_right_check is changed - - remove_right_check.removed|count == 1 - - remove_right_check.removed[0]|upper == '{{ansible_hostname|upper}}\{{ admin_account_name|upper }}' - - remove_right_check.added == [] - - remove_right_actual_check.users == ['{{ admin_account_name }}'] - -- name: remove from right - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Guests', '{{ansible_hostname}}\Users', '.\Backup Operators'] - action: remove - register: remove_right - -- name: get actual remove from right - test_get_right: - name: '{{test_win_user_right_name}}' - register: remove_right_actual - -- name: assert remove from right - assert: - that: - - remove_right is changed - - remove_right.removed|count == 1 - - remove_right.removed[0]|upper == '{{ansible_hostname|upper}}\{{ admin_account_name|upper }}' - - remove_right.added == [] - - remove_right_actual.users == [] - -- name: remove from right again - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Guests', '{{ansible_hostname}}\Users', '.\Backup Operators'] - action: remove - register: remove_right_again - -- name: assert remove from right - assert: - that: - - remove_right_again is not changed - - remove_right_again.removed == [] - - remove_right_again.added == [] - -- name: add to empty right check - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Administrators'] - action: add - register: add_right_on_empty_check - check_mode: yes - -- name: get actual add to empty right check - test_get_right: - name: '{{test_win_user_right_name}}' - register: add_right_on_empty_actual_check - -- name: assert add to empty right check - assert: - that: - - add_right_on_empty_check is changed - - add_right_on_empty_check.removed == [] - - add_right_on_empty_check.added|count == 2 - - add_right_on_empty_check.added[0]|upper == '{{ansible_hostname|upper}}\{{ admin_account_name|upper }}' - - add_right_on_empty_check.added[1] == 'BUILTIN\Administrators' - - add_right_on_empty_actual_check.users == [] - -- name: add to empty right - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Administrators'] - action: add - register: add_right_on_empty - -- name: get actual add to empty right - test_get_right: - name: '{{test_win_user_right_name}}' - register: add_right_on_empty_actual - -- name: assert add to empty right - assert: - that: - - add_right_on_empty is changed - - add_right_on_empty.removed == [] - - add_right_on_empty.added|count == 2 - - add_right_on_empty.added[0]|upper == '{{ansible_hostname|upper}}\{{ admin_account_name|upper }}' - - add_right_on_empty.added[1] == 'BUILTIN\Administrators' - - add_right_on_empty_actual.users == ["{{ admin_account_name }}", "BUILTIN\\Administrators"] - -- name: add to empty right again - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Administrators'] - action: add - register: add_right_on_empty_again - -- name: assert add to empty right - assert: - that: - - add_right_on_empty_again is not changed - - add_right_on_empty_again.removed == [] - - add_right_on_empty_again.added == [] - -- name: add to existing right check - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Guests', '{{ansible_hostname}}\Users'] - action: add - register: add_right_on_existing_check - check_mode: yes - -- name: get actual add to existing right check - test_get_right: - name: '{{test_win_user_right_name}}' - register: add_right_on_existing_actual_check - -- name: assert add to existing right check - assert: - that: - - add_right_on_existing_check is changed - - add_right_on_existing_check.removed == [] - - add_right_on_existing_check.added == ["BUILTIN\\Guests", "BUILTIN\\Users"] - - add_right_on_existing_actual_check.users == ["{{ admin_account_name }}", "BUILTIN\\Administrators"] - -- name: add to existing right - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Guests', '{{ansible_hostname}}\Users'] - action: add - register: add_right_on_existing - -- name: get actual add to existing right - test_get_right: - name: '{{test_win_user_right_name}}' - register: add_right_on_existing_actual - -- name: assert add to existing right - assert: - that: - - add_right_on_existing is changed - - add_right_on_existing.removed == [] - - add_right_on_existing.added == ["BUILTIN\\Guests", "BUILTIN\\Users"] - - add_right_on_existing_actual.users == ["{{ admin_account_name }}", "BUILTIN\\Administrators", "BUILTIN\\Users", "BUILTIN\\Guests"] - -- name: add to existing right again - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['{{ admin_account_name }}', 'Guests', '{{ansible_hostname}}\Users'] - action: add - register: add_right_on_existing_again - -- name: assert add to existing right - assert: - that: - - add_right_on_existing_again is not changed - - add_right_on_existing_again.removed == [] - - add_right_on_existing_again.added == [] - -- name: remove from existing check - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['Guests', '{{ admin_account_name }}'] - action: remove - register: remove_on_existing_check - check_mode: yes - -- name: get actual remove from existing check - test_get_right: - name: '{{test_win_user_right_name}}' - register: remove_on_existing_actual_check - -- name: assert remove from existing check - assert: - that: - - remove_on_existing_check is changed - - remove_on_existing_check.removed == ["BUILTIN\\Guests", "{{ansible_hostname}}\\{{ admin_account_name }}"] - - remove_on_existing_check.added == [] - - remove_on_existing_actual_check.users == ["{{ admin_account_name }}", "BUILTIN\\Administrators", "BUILTIN\\Users", "BUILTIN\\Guests"] - -- name: remove from existing - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['Guests', '{{ admin_account_name }}'] - action: remove - register: remove_on_existing - -- name: get actual remove from existing - test_get_right: - name: '{{test_win_user_right_name}}' - register: remove_on_existing_actual - -- name: assert remove from existing - assert: - that: - - remove_on_existing is changed - - remove_on_existing.removed == ["BUILTIN\\Guests", "{{ansible_hostname}}\\{{ admin_account_name }}"] - - remove_on_existing.added == [] - - remove_on_existing_actual.users == ["BUILTIN\\Administrators", "BUILTIN\\Users"] - -- name: remove from existing again - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['Guests', '{{ admin_account_name }}'] - action: remove - register: remove_on_existing_again - -- name: assert remove from existing again - assert: - that: - - remove_on_existing_again is not changed - - remove_on_existing_again.removed == [] - - remove_on_existing_again.added == [] - -- name: set to existing check - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['Administrators', 'SYSTEM', 'Backup Operators'] - action: set - register: set_on_existing_check - check_mode: yes - -- name: get actual set to existing check - test_get_right: - name: '{{test_win_user_right_name}}' - register: set_on_existing_actual_check - -- name: assert set to existing check - assert: - that: - - set_on_existing_check is changed - - set_on_existing_check.removed == ["BUILTIN\\Users"] - - set_on_existing_check.added == ["NT AUTHORITY\\SYSTEM", "BUILTIN\\Backup Operators"] - - set_on_existing_actual_check.users == ["BUILTIN\\Administrators", "BUILTIN\\Users"] - -- name: set to existing - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['Administrators', 'SYSTEM', 'Backup Operators'] - action: set - register: set_on_existing - -- name: get actual set to existing - test_get_right: - name: '{{test_win_user_right_name}}' - register: set_on_existing_actual - -- name: assert set to existing - assert: - that: - - set_on_existing is changed - - set_on_existing.removed == ["BUILTIN\\Users"] - - set_on_existing.added == ["NT AUTHORITY\\SYSTEM", "BUILTIN\\Backup Operators"] - - set_on_existing_actual.users == ["NT AUTHORITY\\SYSTEM", "BUILTIN\\Administrators", "BUILTIN\\Backup Operators"] - -- name: set to existing again - win_user_right: - name: '{{test_win_user_right_name}}' - users: ['Administrators', 'SYSTEM', 'Backup Operators'] - action: set - register: set_on_existing_again - -- name: assert set to existing - assert: - that: - - set_on_existing_again is not changed - - set_on_existing_again.removed == [] - - set_on_existing_again.added == [] diff --git a/test/integration/targets/win_wait_for/aliases b/test/integration/targets/win_wait_for/aliases deleted file mode 100644 index 11addc63ba..0000000000 --- a/test/integration/targets/win_wait_for/aliases +++ /dev/null @@ -1,2 +0,0 @@ -shippable/windows/group4 -unstable diff --git a/test/integration/targets/win_wait_for/defaults/main.yml b/test/integration/targets/win_wait_for/defaults/main.yml deleted file mode 100644 index 9e1155e329..0000000000 --- a/test/integration/targets/win_wait_for/defaults/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -test_win_wait_for_path: C:\ansible\win_wait_for -test_win_wait_for_port: 1234 diff --git a/test/integration/targets/win_wait_for/tasks/main.yml b/test/integration/targets/win_wait_for/tasks/main.yml deleted file mode 100644 index e7176e80bb..0000000000 --- a/test/integration/targets/win_wait_for/tasks/main.yml +++ /dev/null @@ -1,322 +0,0 @@ ---- -- name: ensure test folder is deleted for clean slate - win_file: - path: '{{test_win_wait_for_path}}' - state: absent - -- name: ensure test folder exists - win_file: - path: '{{test_win_wait_for_path}}' - state: directory - -- name: template out the test server - win_template: - src: http-server.ps1 - dest: '{{test_win_wait_for_path}}\http-server.ps1' - -# invalid arguments -- name: fail to set port and path - win_wait_for: - path: a - port: 0 - register: fail_port_and_path - failed_when: fail_port_and_path.msg != 'port and path parameter can not both be passed to win_wait_for' - -- name: fail to set exclude_hosts when state isn't drain - win_wait_for: - port: 0 - exclude_hosts: a - state: present - register: fail_exclude_hosts_not_drained - failed_when: fail_exclude_hosts_not_drained.msg != 'exclude_hosts should only be with state=drained' - -- name: fail to set state drained with path - win_wait_for: - path: a - state: drained - register: fail_path_drained - failed_when: fail_path_drained.msg != 'state=drained should only be used for checking a port in the win_wait_for module' - -- name: fail to set exclude_hosts with path - win_wait_for: - path: a - exclude_hosts: a - register: fail_path_exclude_hosts - failed_when: fail_path_exclude_hosts.msg != 'exclude_hosts should only be with state=drained' - -- name: fail to set search_regex with port - win_wait_for: - port: 0 - search_regex: a - register: fail_port_search_regex - failed_when: fail_port_search_regex.msg != 'regex should by used when checking a string in a file in the win_wait_for module' - -- name: fail to set exclude_hosts with port whens tate is not drained - win_wait_for: - port: 0 - exclude_hosts: a - state: present - register: fail_port_exclude_hosts_not_drained - failed_when: fail_port_exclude_hosts_not_drained.msg != 'exclude_hosts should only be with state=drained' - -# path tests -- name: timeout while waiting for file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: present - timeout: 5 - register: fail_timeout_file_present - ignore_errors: True - -- name: assert timeout while waiting for file - assert: - that: - - fail_timeout_file_present.msg == 'timeout while waiting for file ' + test_win_wait_for_path + '\\test.txt to be present' - - fail_timeout_file_present.wait_attempts == 5 - - fail_timeout_file_present.elapsed > 5 - -- name: wait for file to not exist - non existing file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - register: wait_remove_no_file - -- name: assert wait for file to not exist - non existing file - assert: - that: - - wait_remove_no_file.wait_attempts == 1 - -- name: create file for next test - win_file: - path: '{{test_win_wait_for_path}}\test.txt' - state: touch - -- name: run async task to remove file after a timeout - win_shell: Start-Sleep -Seconds 5; Remove-Item -Path '{{test_win_wait_for_path}}\test.txt' -Force - async: 30 - poll: 0 - -- name: wait for file to not exist - existing file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - register: wait_remove_existing_file - -- name: assert wait for file to not exist - existing file - assert: - that: - - wait_remove_existing_file.wait_attempts > 1 - -- name: run async task to create file after a timeout - win_shell: Start-Sleep -Seconds 5; New-Item -Path '{{test_win_wait_for_path}}\test.txt' -Type File - async: 30 - poll: 0 - -- name: wait for file to exist - non existing file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: present - register: wait_new_missing_file - -- name: assert wait for file to exist - non existing file - assert: - that: - - wait_new_missing_file.wait_attempts > 1 - -- name: wait for file to exist - existing file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: present - register: wait_new_existing_file - -- name: assert wait for file to exist - existing file - assert: - that: - - wait_new_existing_file.wait_attempts == 1 - -- name: timeout while waiting for file to not exist - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - timeout: 5 - register: fail_timeout_file_absent - ignore_errors: True - -- name: assert timeout while waiting for file to not exist - assert: - that: - - fail_timeout_file_absent.msg == 'timeout while waiting for file ' + test_win_wait_for_path + '\\test.txt to be absent' - - fail_timeout_file_absent.wait_attempts == 5 - - fail_timeout_file_absent.elapsed > 5 - -- name: run async task to populate file contents - win_shell: Start-Sleep -Seconds 5; Set-Content -Path '{{test_win_wait_for_path}}\test.txt' -Value 'hello world`r`nfile contents`r`nEnd line' - async: 30 - poll: 0 - -- name: wait for file contents to match regex - empty file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: present - search_regex: file c.* - register: wait_regex_match_new - -- name: assert wait for file contents to match regex - empty file - assert: - that: - - wait_regex_match_new.wait_attempts > 1 - -- name: wait for file contents to match regex - existing file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: present - search_regex: file c.* - register: wait_regex_match_existing - -- name: assert wait for file contents to match regex - existing file - assert: - that: - - wait_regex_match_existing.wait_attempts == 1 - -- name: run async task to clear file contents - win_shell: Start-Sleep -Seconds 5; Set-Content -Path '{{test_win_wait_for_path}}\test.txt' -Value 'hello world`r`nother contents for file`r`nEnd line' - async: 30 - poll: 0 - -- name: wait for file content to not match regex - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - search_regex: file c.* - register: wait_regex_match_absent_remove - -- name: assert wait for file content to not match regex - assert: - that: - - wait_regex_match_absent_remove.wait_attempts > 1 - -- name: wait for file content to not match regex - existing - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - search_regex: file c.* - register: wait_regex_match_absent_existing - -- name: assert wait for file content to not match regex - assert: - that: - - wait_regex_match_absent_existing.wait_attempts == 1 - -- name: remove file to test search_regex works on missing files - win_file: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - -- name: wait for file content to not match regex - missing file - win_wait_for: - path: '{{test_win_wait_for_path}}\test.txt' - state: absent - search_regex: file c.* - register: wait_regex_match_absent_missing - -- name: assert wait for file content to not match regex - missing file - assert: - that: - - wait_regex_match_absent_missing.wait_attempts == 1 - -# port tests -- name: timeout waiting for port to come online - win_wait_for: - port: '{{test_win_wait_for_port}}' - timeout: 5 - state: started - register: fail_timeout_port_online - ignore_errors: True - -- name: assert timeout while waiting for port to come online - assert: - that: - - "fail_timeout_port_online.msg == 'timeout while waiting for 127.0.0.1:' + test_win_wait_for_port|string + ' to start listening'" - - fail_timeout_port_online.wait_attempts > 1 - - fail_timeout_port_online.elapsed > 5 - -- name: run async task to start web server - win_shell: Start-Sleep -Seconds 5; {{test_win_wait_for_path}}\http-server.ps1 - async: 30 - poll: 0 - -- name: wait for port to come online - win_wait_for: - port: '{{test_win_wait_for_port}}' - state: started - register: wait_for_port_to_start - -- name: assert wait for port to come online - assert: - that: - - wait_for_port_to_start.wait_attempts > 1 - -- name: start web server - win_shell: '{{test_win_wait_for_path}}\http-server.ps1' - async: 30 - poll: 0 - -- name: wait for port that is already online - win_wait_for: - port: '{{test_win_wait_for_port}}' - state: started - register: wait_for_port_already_started - -- name: assert wait for port that is already online - assert: - that: - - wait_for_port_already_started.wait_attempts == 1 - -# add a manual wait to make sure the port is truly offline for next test -- name: wait for port to be offline - win_wait_for: - port: '{{test_win_wait_for_port}}' - state: stopped - -- name: wait for port that is already offline - win_wait_for: - port: '{{test_win_wait_for_port}}' - state: stopped - register: wait_for_port_already_stopped - -- name: assert wait for port that is already offline - assert: - that: - - wait_for_port_already_stopped.wait_attempts == 1 - -- name: start web server for offline port test - win_shell: '{{test_win_wait_for_path}}\http-server.ps1' - async: 30 - poll: 0 - -- name: wait for port to go offline - win_wait_for: - port: '{{test_win_wait_for_port}}' - state: stopped - register: wait_for_port_to_be_stopped - -- name: assert wait for port to go offline - assert: - that: - - wait_for_port_to_be_stopped.wait_attempts > 1 - -- name: wait for offline port to be drained - win_wait_for: - port: '{{test_win_wait_for_port}}' - state: drained - register: wait_for_drained_port_no_port - -- name: assert wait for offline port to be drained - assert: - that: - - wait_for_drained_port_no_port.wait_attempts == 1 - -- name: clear testing folder - win_file: - path: '{{test_win_wait_for_path}}' - state: absent diff --git a/test/integration/targets/win_wait_for/templates/http-server.ps1 b/test/integration/targets/win_wait_for/templates/http-server.ps1 deleted file mode 100644 index dd1f981809..0000000000 --- a/test/integration/targets/win_wait_for/templates/http-server.ps1 +++ /dev/null @@ -1,22 +0,0 @@ -$ErrorActionPreference = 'Stop' - -$port = {{test_win_wait_for_port}} - -$endpoint = New-Object -TypeName System.Net.IPEndPoint([System.Net.IPAddress]::Parse("0.0.0.0"), $port) -$listener = New-Object -TypeName System.Net.Sockets.TcpListener($endpoint) -$listener.Server.ReceiveTimeout = 3000 -$listener.Start() - -try { - while ($true) { - if (-not $listener.Pending()) { - Start-Sleep -Seconds 1 - } else { - $client = $listener.AcceptTcpClient() - $client.Close() - break - } - } -} finally { - $listener.Stop() -} diff --git a/test/integration/targets/win_whoami/aliases b/test/integration/targets/win_whoami/aliases deleted file mode 100644 index 3cf5b97e80..0000000000 --- a/test/integration/targets/win_whoami/aliases +++ /dev/null @@ -1 +0,0 @@ -shippable/windows/group3 diff --git a/test/integration/targets/win_whoami/tasks/main.yml b/test/integration/targets/win_whoami/tasks/main.yml deleted file mode 100644 index 404523abfa..0000000000 --- a/test/integration/targets/win_whoami/tasks/main.yml +++ /dev/null @@ -1,225 +0,0 @@ ---- -- name: run win_whoami with normal execution - win_whoami: - register: win_whoami_result - -- name: assert win_whoami with normal execution - assert: - that: - - not win_whoami_result is changed - - win_whoami_result.account.account_name is defined - - win_whoami_result.account.domain_name is defined - - win_whoami_result.account.sid is defined - - win_whoami_result.account.type == 'User' - - win_whoami_result.authentication_package is defined - - win_whoami_result.dns_domain_name is defined - - win_whoami_result.groups|count >= 1 - - win_whoami_result.groups[0].account_name is defined - - win_whoami_result.groups[0].attributes is defined - - win_whoami_result.groups[0].domain_name is defined - - win_whoami_result.groups[0].sid is defined - - win_whoami_result.groups[0].type is defined - - win_whoami_result.impersonation_level is defined - - win_whoami_result.label.account_name == 'High Mandatory Level' - - win_whoami_result.label.domain_name == 'Mandatory Label' - - win_whoami_result.label.sid == 'S-1-16-12288' - - win_whoami_result.label.type == 'Label' - - win_whoami_result.login_domain is defined - - win_whoami_result.login_time is defined - - win_whoami_result.logon_id is defined - - win_whoami_result.logon_server is defined - - win_whoami_result.logon_type.startswith('Network') - - win_whoami_result.privileges is defined - - win_whoami_result.rights|count >= 1 - - win_whoami_result.token_type == 'TokenPrimary' - - win_whoami_result.upn is defined - - win_whoami_result.user_flags is defined - -- name: run win_whoami with SYSTEM execution - win_whoami: - become: yes - become_method: runas - become_user: SYSTEM - register: win_whoami_result - -- name: assert win_whoami with SYSTEM execution - assert: - that: - - not win_whoami_result is changed - - win_whoami_result.account.account_name == 'SYSTEM' - - win_whoami_result.account.domain_name == 'NT AUTHORITY' - - win_whoami_result.account.sid == 'S-1-5-18' - - win_whoami_result.account.type == 'User' - - win_whoami_result.authentication_package is defined - - win_whoami_result.dns_domain_name is defined - - win_whoami_result.groups|count >= 1 - - win_whoami_result.groups[0].account_name is defined - - win_whoami_result.groups[0].attributes is defined - - win_whoami_result.groups[0].domain_name is defined - - win_whoami_result.groups[0].sid is defined - - win_whoami_result.groups[0].type is defined - - win_whoami_result.impersonation_level == 'SecurityAnonymous' - - win_whoami_result.label.account_name == 'System Mandatory Level' - - win_whoami_result.label.domain_name == 'Mandatory Label' - - win_whoami_result.label.sid == 'S-1-16-16384' - - win_whoami_result.label.type == 'Label' - - win_whoami_result.login_domain is defined - - win_whoami_result.login_time is defined - - win_whoami_result.logon_id is defined - - win_whoami_result.logon_server is defined - - win_whoami_result.logon_type == 'System' - - win_whoami_result.privileges is defined - - win_whoami_result.rights|count >= 1 - - win_whoami_result.token_type == 'TokenPrimary' - - win_whoami_result.upn is defined - - win_whoami_result.user_flags is defined - -- set_fact: - become_username: ansible_become - become_username_limited: ansible_limited - gen_pw: password123! + {{lookup('password', '/dev/null chars=ascii_letters,digits length=8')}} - -- name: ensure current user is not the become user - win_shell: whoami - register: whoami_out - failed_when: whoami_out.stdout_lines[0].endswith(become_username) or whoami_out.stdout_lines[0].endswith(become_username_limited) - -- name: create user - win_user: - name: '{{become_username}}' - password: '{{gen_pw}}' - update_password: always - groups: Administrators - register: become_user_info - -- name: create user limited - win_user: - name: '{{become_username_limited}}' - password: '{{gen_pw}}' - update_password: always - groups: Users - register: become_user_info_limited - -- block: - - name: get become user profile dir so we can clean it up later - vars: &become_vars - ansible_become_user: '{{become_username}}' - ansible_become_password: '{{gen_pw}}' - ansible_become_method: runas - ansible_become: yes - win_shell: $env:USERPROFILE - register: profile_dir_out - - - name: ensure profile dir contains test username (eg, if become fails silently, prevent deletion of real user profile) - assert: - that: - - become_username in profile_dir_out.stdout_lines[0] - - - name: get become user limited profile dir so we can clean it up later - vars: &become_vars_limited - ansible_become_user: '{{become_username_limited}}' - ansible_become_password: '{{gen_pw}}' - ansible_become_method: runas - ansible_become: yes - win_shell: $env:USERPROFILE - register: profile_dir_out_limited - - - name: ensure limited profile dir contains test username (eg, if become fails silently, prevent deletion of real user profile) - assert: - that: - - become_username_limited in profile_dir_out_limited.stdout_lines[0] - - - name: run win_whoami with become execution - win_whoami: - vars: *become_vars - register: win_whoami_result - - - name: assert win_whoami with become execution - assert: - that: - - not win_whoami_result is changed - - win_whoami_result.account.account_name == "ansible_become" - - win_whoami_result.account.domain_name is defined - - win_whoami_result.account.sid == become_user_info.sid - - win_whoami_result.account.type == 'User' - - win_whoami_result.authentication_package == "NTLM" - - win_whoami_result.dns_domain_name == "" - - win_whoami_result.groups|count >= 1 - - win_whoami_result.groups[0].account_name is defined - - win_whoami_result.groups[0].attributes is defined - - win_whoami_result.groups[0].domain_name is defined - - win_whoami_result.groups[0].sid is defined - - win_whoami_result.groups[0].type is defined - - win_whoami_result.impersonation_level is defined - - win_whoami_result.label.account_name == 'High Mandatory Level' - - win_whoami_result.label.domain_name == 'Mandatory Label' - - win_whoami_result.label.sid == 'S-1-16-12288' - - win_whoami_result.label.type == 'Label' - - win_whoami_result.login_domain is defined - - win_whoami_result.login_time is defined - - win_whoami_result.logon_id is defined - - win_whoami_result.logon_server is defined - - win_whoami_result.logon_type == "Interactive" - - win_whoami_result.privileges is defined - - '"SeInteractiveLogonRight" in win_whoami_result.rights' - - win_whoami_result.token_type == 'TokenPrimary' - - win_whoami_result.upn == '' - - win_whoami_result.user_flags is defined - - - name: run win_whoami with limited become execution - win_whoami: - vars: *become_vars_limited - register: win_whoami_result - - - name: assert win_whoami with limited become execution - assert: - that: - - not win_whoami_result is changed - - win_whoami_result.account.account_name == "ansible_limited" - - win_whoami_result.account.domain_name is defined - - win_whoami_result.account.sid == become_user_info_limited.sid - - win_whoami_result.account.type == 'User' - - win_whoami_result.authentication_package == "NTLM" - - win_whoami_result.dns_domain_name == "" - - win_whoami_result.groups|count >= 1 - - win_whoami_result.groups[0].account_name is defined - - win_whoami_result.groups[0].attributes is defined - - win_whoami_result.groups[0].domain_name is defined - - win_whoami_result.groups[0].sid is defined - - win_whoami_result.groups[0].type is defined - - win_whoami_result.impersonation_level is defined - - win_whoami_result.label.account_name == 'Medium Mandatory Level' - - win_whoami_result.label.domain_name == 'Mandatory Label' - - win_whoami_result.label.sid == 'S-1-16-8192' - - win_whoami_result.label.type == 'Label' - - win_whoami_result.login_domain is defined - - win_whoami_result.login_time is defined - - win_whoami_result.logon_id is defined - - win_whoami_result.logon_server is defined - - win_whoami_result.logon_type == "Interactive" - - win_whoami_result.privileges is defined - - win_whoami_result.rights == [] - - win_whoami_result.token_type == 'TokenPrimary' - - win_whoami_result.upn == '' - - win_whoami_result.user_flags is defined - - always: - - name: ensure test user is deleted - win_user: - name: '{{item}}' - state: absent - with_items: - - '{{become_username}}' - - '{{become_username_limited}}' - - - name: ensure test user profile is deleted - win_shell: rmdir /S /Q {{profile_dir_out.stdout_lines[0]}} - args: - executable: cmd.exe - when: become_username in profile_dir_out.stdout_lines[0] - - - name: ensure limited test user profile is deleted - win_shell: rmdir /S /Q {{profile_dir_out_limited.stdout_lines[0]}} - args: - executable: cmd.exe - when: become_username_limited in profile_dir_out_limited.stdout_lines[0] diff --git a/test/sanity/ignore.txt b/test/sanity/ignore.txt index 99383dc96e..46d8e9b4a5 100644 --- a/test/sanity/ignore.txt +++ b/test/sanity/ignore.txt @@ -3876,32 +3876,6 @@ lib/ansible/modules/web_infrastructure/ansible_tower/tower_user.py validate-modu lib/ansible/modules/web_infrastructure/ansible_tower/tower_workflow_launch.py validate-modules:doc-missing-type lib/ansible/modules/web_infrastructure/ansible_tower/tower_workflow_launch.py validate-modules:parameter-type-not-in-doc lib/ansible/modules/web_infrastructure/ansible_tower/tower_workflow_template.py validate-modules:doc-missing-type -lib/ansible/modules/windows/async_status.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/setup.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_acl_inheritance.ps1 pslint:PSAvoidTrailingWhitespace -lib/ansible/modules/windows/win_certificate_store.ps1 validate-modules:parameter-type-not-in-doc -lib/ansible/modules/windows/win_copy.ps1 pslint:PSUseApprovedVerbs -lib/ansible/modules/windows/win_dns_client.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_domain.ps1 pslint:PSAvoidUsingEmptyCatchBlock # Keep -lib/ansible/modules/windows/win_domain.ps1 pslint:PSUseApprovedVerbs -lib/ansible/modules/windows/win_domain_controller.ps1 pslint:PSAvoidGlobalVars # New PR -lib/ansible/modules/windows/win_domain_controller.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_domain_controller.ps1 pslint:PSUseApprovedVerbs -lib/ansible/modules/windows/win_domain_membership.ps1 pslint:PSAvoidGlobalVars # New PR -lib/ansible/modules/windows/win_domain_membership.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_domain_membership.ps1 pslint:PSUseApprovedVerbs -lib/ansible/modules/windows/win_dsc.ps1 pslint:PSAvoidUsingEmptyCatchBlock # Keep -lib/ansible/modules/windows/win_dsc.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_feature.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_find.ps1 pslint:PSAvoidUsingEmptyCatchBlock # Keep -lib/ansible/modules/windows/win_find.ps1 validate-modules:doc-elements-mismatch -lib/ansible/modules/windows/win_optional_feature.ps1 validate-modules:parameter-list-no-elements -lib/ansible/modules/windows/win_regedit.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_share.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_shell.ps1 pslint:PSUseApprovedVerbs -lib/ansible/modules/windows/win_updates.ps1 pslint:PSCustomUseLiteralPath -lib/ansible/modules/windows/win_uri.ps1 pslint:PSAvoidUsingEmptyCatchBlock # Keep -lib/ansible/modules/windows/win_wait_for.ps1 pslint:PSCustomUseLiteralPath lib/ansible/parsing/vault/__init__.py pylint:blacklisted-name lib/ansible/playbook/base.py pylint:blacklisted-name lib/ansible/playbook/collectionsearch.py required-and-default-attributes # https://github.com/ansible/ansible/issues/61460 @@ -4088,24 +4062,14 @@ test/integration/targets/wait_for/files/testserver.py future-import-boilerplate test/integration/targets/wait_for/files/testserver.py metaclass-boilerplate test/integration/targets/want_json_modules_posix/library/helloworld.py future-import-boilerplate test/integration/targets/want_json_modules_posix/library/helloworld.py metaclass-boilerplate -test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xSetReboot/ANSIBLE_xSetReboot.psm1 pslint!skip -test/integration/targets/win_dsc/files/xTestDsc/1.0.0/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 pslint!skip -test/integration/targets/win_dsc/files/xTestDsc/1.0.0/xTestDsc.psd1 pslint!skip -test/integration/targets/win_dsc/files/xTestDsc/1.0.1/DSCResources/ANSIBLE_xTestResource/ANSIBLE_xTestResource.psm1 pslint!skip -test/integration/targets/win_dsc/files/xTestDsc/1.0.1/xTestDsc.psd1 pslint!skip test/integration/targets/win_exec_wrapper/library/test_fail.ps1 pslint:PSCustomUseLiteralPath test/integration/targets/win_module_utils/library/legacy_only_new_way_win_line_ending.ps1 line-endings # Explicitly tests that we still work with Windows line endings test/integration/targets/win_module_utils/library/legacy_only_old_way_win_line_ending.ps1 line-endings # Explicitly tests that we still work with Windows line endings -test/integration/targets/win_ping/library/win_ping_syntax_error.ps1 pslint!skip -test/integration/targets/win_reboot/templates/post_reboot.ps1 pslint:PSCustomUseLiteralPath test/integration/targets/win_script/files/test_script.ps1 pslint:PSAvoidUsingWriteHost # Keep test/integration/targets/win_script/files/test_script_creates_file.ps1 pslint:PSAvoidUsingCmdletAliases test/integration/targets/win_script/files/test_script_removes_file.ps1 pslint:PSCustomUseLiteralPath test/integration/targets/win_script/files/test_script_with_args.ps1 pslint:PSAvoidUsingWriteHost # Keep test/integration/targets/win_script/files/test_script_with_splatting.ps1 pslint:PSAvoidUsingWriteHost # Keep -test/integration/targets/win_stat/library/test_symlink_file.ps1 pslint:PSCustomUseLiteralPath -test/integration/targets/win_template/files/foo.dos.txt line-endings -test/integration/targets/win_user_right/library/test_get_right.ps1 pslint:PSCustomUseLiteralPath test/integration/targets/windows-minimal/library/win_ping_syntax_error.ps1 pslint!skip test/lib/ansible_test/_data/requirements/constraints.txt test-constraints test/lib/ansible_test/_data/requirements/integration.cloud.azure.txt test-constraints diff --git a/test/units/plugins/action/fixtures/synchronize/basic/meta.yaml b/test/units/plugins/action/fixtures/synchronize/basic/meta.yaml deleted file mode 100644 index 7608ebfaf3..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic/meta.yaml +++ /dev/null @@ -1,17 +0,0 @@ -fixtures: - taskvars_in: taskvars_in.json - taskvars_out: taskvars_out.json -connection: - transport: 'ssh' -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'local'" - - "self._play_context.shell == 'sh'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'" diff --git a/test/units/plugins/action/fixtures/synchronize/basic/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/basic/task_args_out.json deleted file mode 100644 index 93ae7bbb5d..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic/task_args_out.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dest": "root@el6host:/tmp/deleteme", - "src": "/tmp/deleteme", - "_local_rsync_path": "rsync" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic/taskvars_in.json b/test/units/plugins/action/fixtures/synchronize/basic/taskvars_in.json deleted file mode 100644 index 9eb5d50ad1..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic/taskvars_in.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "el6host", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "ansible_host": "el6host", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic/taskvars_out.json b/test/units/plugins/action/fixtures/synchronize/basic/taskvars_out.json deleted file mode 100644 index 01ebee2529..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic/taskvars_out.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "::1" - ], - "all": [ - "el6host", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "el6host", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "::1" - ], - "all": [ - "el6host", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "ansible_host": "el6host", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__03600813b83569c710bf5cb2a040d6e01da927c6", - "ansible_python_interpreter": "/usr/bin/python", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become/meta.yaml b/test/units/plugins/action/fixtures/synchronize/basic_become/meta.yaml deleted file mode 100644 index 1ba3b4ab9b..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become/meta.yaml +++ /dev/null @@ -1,38 +0,0 @@ -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme - #rsync_path: rsync -_task: - become: True - become_method: None -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -connection: - transport: 'ssh' -_play_context: - become: True - become_method: sudo - remote_addr: el6host - remote_user: root -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'local'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - # this is a crucial aspect of this scenario ... - - "self.final_module_args['rsync_path'] == 'sudo rsync'" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'" - - "self.task.become == True" - - "self.task.become_user == None" - - "self._play_context.shell == 'sh'" - - "self._play_context.remote_addr == 'el6host'" - - "self._play_context.remote_user == 'root'" - - "self._play_context.become == False" - - "self._play_context.become_user == 'root'" - - "self._play_context.password == None" diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/basic_become/task_args_out.json deleted file mode 100644 index 27f8e2581c..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become/task_args_out.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dest": "root@el6host:/tmp/deleteme", - "src": "/tmp/deleteme", - "rsync_path": "sudo rsync", - "_local_rsync_path": "rsync" -} diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/basic_become/task_vars_in.json deleted file mode 100644 index 0f1f9784a7..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become/task_vars_in.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "el6host", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "ansible_host": "el6host", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/basic_become/task_vars_out.json deleted file mode 100644 index 75abced318..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become/task_vars_out.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "::1" - ], - "all": [ - "el6host", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "el6host", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "::1" - ], - "all": [ - "el6host", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "ansible_host": "el6host", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "ansible_python_interpreter": "/usr/bin/python", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/meta.yaml b/test/units/plugins/action/fixtures/synchronize/basic_become_cli/meta.yaml deleted file mode 100644 index 5e558012a5..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/meta.yaml +++ /dev/null @@ -1,38 +0,0 @@ -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme - #rsync_path: rsync -_task: - become: None - become_method: None -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -connection: - transport: 'ssh' -_play_context: - become: True - become_method: sudo - remote_addr: el6host - remote_user: root -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'local'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - # this is a crucial aspect of this scenario ... - - "self.final_module_args['rsync_path'] == 'sudo rsync'" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'" - - "self.task.become == None" - - "self.task.become_user == None" - - "self._play_context.shell == 'sh'" - - "self._play_context.remote_addr == 'el6host'" - - "self._play_context.remote_user == 'root'" - - "self._play_context.become == False" - - "self._play_context.become_user == 'root'" - - "self._play_context.password == None" diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_args_out.json deleted file mode 100644 index 27f8e2581c..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_args_out.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dest": "root@el6host:/tmp/deleteme", - "src": "/tmp/deleteme", - "rsync_path": "sudo rsync", - "_local_rsync_path": "rsync" -} diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_vars_in.json deleted file mode 100644 index 0f1f9784a7..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_vars_in.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "el6host", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "ansible_host": "el6host", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_vars_out.json deleted file mode 100644 index 75abced318..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_become_cli/task_vars_out.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "::1" - ], - "all": [ - "el6host", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "el6host", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "::1" - ], - "all": [ - "el6host", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host" - ], - "all": [ - "el6host" - ] - }, - "ansible_host": "el6host", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__b3ac1e6ebeed06f4be0c1edca3dca34036cf7f57", - "ansible_python_interpreter": "/usr/bin/python", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/meta.yaml b/test/units/plugins/action/fixtures/synchronize/basic_vagrant/meta.yaml deleted file mode 100644 index 7654cc6d77..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/meta.yaml +++ /dev/null @@ -1,29 +0,0 @@ -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -connection: - transport: 'ssh' -_play_context: - remote_addr: '127.0.0.1' - remote_user: vagrant -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'local'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - - "self.final_module_args['dest_port'] == 2202" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme'" - - "self._play_context.shell == 'sh'" - - "self._play_context.remote_addr == '127.0.0.1'" - - "self._play_context.remote_user == 'vagrant'" - - "self._play_context.become == False" - - "self._play_context.become_user == 'root'" - - "self._play_context.password == None" diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_args_out.json deleted file mode 100644 index 48ea779d06..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_args_out.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dest": "/tmp/deleteme", - "src": "/tmp/deleteme", - "private_key": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "dest_port": 2202, - "_local_rsync_path": "rsync" -} diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_vars_in.json deleted file mode 100644 index a43a2db4c7..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_vars_in.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "vagrant", - "ansible_play_hosts": [ - "default" - ], - "ansible_connection": "ssh", - "ansible_ssh_common_args": "", - "ansible_ssh_host": "127.0.0.1", - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "vars": { - "ansible_check_mode": false, - "environment": [], - "inventory_hostname": "default", - "inventory_file": null, - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "play_hosts": [ - "default" - ], - "ansible_play_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "ansible_ssh_port": 2202, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "vagrant" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "environment": [], - "ansible_current_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": null, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "ansible_port": 2202, - "ansible_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "ansible_host": "127.0.0.1", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "default", - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "vagrant", - "role_names": [], - "play_hosts": [ - "default" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_vars_out.json deleted file mode 100644 index 26ea5d46c1..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant/task_vars_out.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "vagrant", - "ansible_play_hosts": [ - "default" - ], - "ansible_connection": "ssh", - "ansible_ssh_common_args": "", - "ansible_ssh_host": "127.0.0.1", - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "vars": { - "ansible_check_mode": false, - "environment": [], - "inventory_hostname": "default", - "inventory_file": null, - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "play_hosts": [ - "default" - ], - "ansible_play_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default", - "::1" - ], - "all": [ - "default", - "::1" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "ansible_ssh_port": 2202, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "vagrant" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "environment": [], - "ansible_current_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default", - "::1" - ], - "all": [ - "default", - "::1" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": null, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "ansible_port": 2202, - "ansible_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "ansible_host": "127.0.0.1", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "default", - "omit": "__omit_place_holder__06c4a1b11530cabdf4248804078c1ddacfb88b5e", - "ansible_python_interpreter": "/usr/bin/python", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "vagrant", - "role_names": [], - "play_hosts": [ - "default" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/meta.yaml b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/meta.yaml deleted file mode 100644 index 242de9208c..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/meta.yaml +++ /dev/null @@ -1,32 +0,0 @@ -task: - #become: None -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -connection: - transport: 'ssh' -_play_context: - become: True - remote_addr: '127.0.0.1' - remote_user: vagrant -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'local'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - - "self.final_module_args['dest_port'] == 2202" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme'" - - "self._play_context.shell == 'sh'" - - "self._play_context.remote_addr == '127.0.0.1'" - - "self._play_context.remote_user == 'vagrant'" - - "self._play_context.become == False" - - "self._play_context.become_user == 'root'" - - "self._play_context.password == None" diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_args_out.json deleted file mode 100644 index 9c77ccf8ae..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_args_out.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dest": "/tmp/deleteme", - "src": "/tmp/deleteme", - "private_key": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "dest_port": 2202, - "_local_rsync_path": "rsync" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_vars_in.json deleted file mode 100644 index 1ecbda5b60..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_vars_in.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "vagrant", - "ansible_play_hosts": [ - "default" - ], - "ansible_connection": "ssh", - "ansible_ssh_common_args": "", - "ansible_ssh_host": "127.0.0.1", - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "vars": { - "ansible_check_mode": false, - "environment": [], - "inventory_hostname": "default", - "inventory_file": null, - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "play_hosts": [ - "default" - ], - "ansible_play_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "ansible_ssh_port": 2202, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "vagrant" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "environment": [], - "ansible_current_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": null, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "ansible_port": 2202, - "ansible_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "ansible_host": "127.0.0.1", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "default", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "vagrant", - "role_names": [], - "play_hosts": [ - "default" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_vars_out.json deleted file mode 100644 index a1cf5f28fc..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_become_cli/task_vars_out.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "vagrant", - "ansible_play_hosts": [ - "default" - ], - "ansible_connection": "ssh", - "ansible_ssh_common_args": "", - "ansible_ssh_host": "127.0.0.1", - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "vars": { - "ansible_check_mode": false, - "environment": [], - "inventory_hostname": "default", - "inventory_file": null, - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "play_hosts": [ - "default" - ], - "ansible_play_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default", - "::1" - ], - "all": [ - "default", - "::1" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "ansible_ssh_port": 2202, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "vagrant" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "environment": [], - "ansible_current_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default", - "::1" - ], - "all": [ - "default", - "::1" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": null, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "ansible_port": 2202, - "ansible_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "ansible_host": "127.0.0.1", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "default", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "ansible_python_interpreter": "/usr/bin/python", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "vagrant", - "role_names": [], - "play_hosts": [ - "default" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/meta.yaml b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/meta.yaml deleted file mode 100644 index 7654cc6d77..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/meta.yaml +++ /dev/null @@ -1,29 +0,0 @@ -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -connection: - transport: 'ssh' -_play_context: - remote_addr: '127.0.0.1' - remote_user: vagrant -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'local'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - - "self.final_module_args['dest_port'] == 2202" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme'" - - "self._play_context.shell == 'sh'" - - "self._play_context.remote_addr == '127.0.0.1'" - - "self._play_context.remote_user == 'vagrant'" - - "self._play_context.become == False" - - "self._play_context.become_user == 'root'" - - "self._play_context.password == None" diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_args_out.json deleted file mode 100644 index 9c77ccf8ae..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_args_out.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "dest": "/tmp/deleteme", - "src": "/tmp/deleteme", - "private_key": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "dest_port": 2202, - "_local_rsync_path": "rsync" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_vars_in.json deleted file mode 100644 index 1ecbda5b60..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_vars_in.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "vagrant", - "ansible_play_hosts": [ - "default" - ], - "ansible_connection": "ssh", - "ansible_ssh_common_args": "", - "ansible_ssh_host": "127.0.0.1", - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "vars": { - "ansible_check_mode": false, - "environment": [], - "inventory_hostname": "default", - "inventory_file": null, - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "play_hosts": [ - "default" - ], - "ansible_play_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "ansible_ssh_port": 2202, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "vagrant" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "environment": [], - "ansible_current_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": null, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "ansible_port": 2202, - "ansible_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "ansible_host": "127.0.0.1", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "default", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "vagrant", - "role_names": [], - "play_hosts": [ - "default" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_vars_out.json deleted file mode 100644 index a1cf5f28fc..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/basic_vagrant_sudo/task_vars_out.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "vagrant", - "ansible_play_hosts": [ - "default" - ], - "ansible_connection": "ssh", - "ansible_ssh_common_args": "", - "ansible_ssh_host": "127.0.0.1", - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "vars": { - "ansible_check_mode": false, - "environment": [], - "inventory_hostname": "default", - "inventory_file": null, - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "play_hosts": [ - "default" - ], - "ansible_play_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default", - "::1" - ], - "all": [ - "default", - "::1" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "ansible_ssh_port": 2202, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "vagrant" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "environment": [], - "ansible_current_hosts": [ - "default" - ], - "hostvars": { - "default": { - "inventory_file": null, - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "default", - "::1" - ], - "all": [ - "default", - "::1" - ] - }, - "ansible_ssh_port": 2202, - "inventory_hostname": "default", - "ansible_ssh_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "inventory_hostname_short": "default", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "ansible_ssh_host": "127.0.0.1", - "ansible_ssh_user": "vagrant", - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": null, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "ansible_port": 2202, - "ansible_private_key_file": "/home/jtanner/workspace/issues/AP-15905/.vagrant/machines/default/virtualbox/private_key", - "groups": { - "ungrouped": [ - "default" - ], - "all": [ - "default" - ] - }, - "ansible_ssh_port": 2202, - "ansible_host": "127.0.0.1", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "default", - "omit": "__omit_place_holder__c360b80aa60ddd99087425dcd3a2094cdd5b8474", - "ansible_python_interpreter": "/usr/bin/python", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905/.vagrant/provisioners/ansible/inventory", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "vagrant", - "role_names": [], - "play_hosts": [ - "default" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote/meta.yaml b/test/units/plugins/action/fixtures/synchronize/delegate_remote/meta.yaml deleted file mode 100644 index 1c55b2856a..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote/meta.yaml +++ /dev/null @@ -1,26 +0,0 @@ -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme -_task: - delegate_to: u1404 -_play_context: - shell: None - remote_addr: u1404 - remote_user: root -connection: - transport: 'ssh' -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'ssh'" - - "self._play_context.shell == None" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'" diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_args_out.json deleted file mode 100644 index 7b2ac0299d..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_args_out.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dest": "el6host:/tmp/deleteme", - "src": "/tmp/deleteme", - "_local_rsync_path": "rsync" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_vars_in.json deleted file mode 100644 index b8893eef85..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_vars_in.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "inventory_file": "inventory", - "role_names": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "u1404", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "role_names": [] - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_host": "u1404", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_vars_out.json deleted file mode 100644 index 0b551f041d..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote/task_vars_out.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "inventory_file": "inventory", - "role_names": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "u1404", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "role_names": [] - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_host": "u1404", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__2433ce0463ffd13b68850ce9cdd98a1cde088e22", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/meta.yaml b/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/meta.yaml deleted file mode 100644 index 28e35c9e32..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/meta.yaml +++ /dev/null @@ -1,33 +0,0 @@ -fixtures: - taskvars_in: task_vars_in.json - taskvars_out: task_vars_out.json -task_args: - src: /tmp/deleteme - dest: /tmp/deleteme -_task: - delegate_to: u1404 -_play_context: - become: True - become_user: None #if ! None|root, different testcase - become_method: su - shell: None - remote_addr: u1404 - remote_user: root -connection: - transport: 'ssh' -hostvars: - '127.0.0.1': {} - '::1': {} - 'localhost': {} -asserts: - - "hasattr(SAM._connection, 'ismock')" - - "SAM._connection.transport == 'ssh'" - - "self._play_context.shell == None" - - "self._play_context.remote_addr == 'u1404'" - - "self._play_context.remote_user == 'root'" - - "not self._play_context.become" - - "self._play_context.become_method == 'su'" - - "self.execute_called" - - "self.final_module_args['_local_rsync_path'] == 'rsync'" - - "self.final_module_args['src'] == '/tmp/deleteme'" - - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'" diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_args_out.json b/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_args_out.json deleted file mode 100644 index 57257dbd5b..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_args_out.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "dest": "el6host:/tmp/deleteme", - "src": "/tmp/deleteme", - "rsync_path": "sudo rsync", - "_local_rsync_path": "rsync" -} diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_vars_in.json b/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_vars_in.json deleted file mode 100644 index 634bcb3ffe..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_vars_in.json +++ /dev/null @@ -1,379 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "inventory_file": "inventory", - "role_names": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "u1404", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "role_names": [] - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_host": "u1404", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_vars_out.json b/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_vars_out.json deleted file mode 100644 index 54707ce830..0000000000 --- a/test/units/plugins/action/fixtures/synchronize/delegate_remote_su/task_vars_out.json +++ /dev/null @@ -1,387 +0,0 @@ -{ - "ansible_pipelining": false, - "ansible_docker_extra_args": "", - "ansible_scp_extra_args": "", - "ansible_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "ansible_connection": "smart", - "ansible_ssh_common_args": "", - "environment": [], - "inventory_hostname": "el6host", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "el6host", - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "inventory_file": "inventory", - "role_names": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "role_names": [], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "play_hosts": [ - "el6host" - ], - "ansible_play_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - }, - "ansible_accelerate_port": 5099, - "roledir": null, - "ansible_ssh_extra_args": "", - "ansible_ssh_host": "u1404", - "ansible_current_hosts": [ - "el6host" - ], - "hostvars": { - "el6host": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "el6host", - "inventory_hostname_short": "el6host", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - }, - "u1404": { - "inventory_file": "inventory", - "group_names": [ - "ungrouped" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404", - "::1" - ], - "all": [ - "el6host", - "u1404", - "::1" - ] - }, - "inventory_hostname": "u1404", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "ansible_check_mode": false, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - } - } - }, - "group_names": [ - "ungrouped" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_pipelining": false, - "inventory_file": "inventory", - "ansible_delegated_vars": { - "u1404": { - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "vars": { - "ansible_check_mode": false, - "inventory_hostname": "u1404", - "inventory_file": "inventory", - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "environment": [], - "ansible_ssh_user": "root", - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "group_names": [ - "ungrouped" - ], - "play_hosts": [ - "el6host" - ], - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "role_names": [] - }, - "inventory_hostname_short": "u1404", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "group_names": [ - "ungrouped" - ], - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "ansible_host": "u1404", - "environment": [], - "ansible_play_hosts": [ - "el6host" - ], - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_check_mode": false, - "play_hosts": [ - "el6host" - ], - "role_names": [], - "ansible_port": null, - "ansible_version": { - "major": 2, - "full": "2.2.0", - "string": "2.2.0", - "minor": 2, - "revision": 0 - }, - "ansible_ssh_user": "root" - } - }, - "ansible_module_compression": "ZIP_DEFLATED", - "ansible_failed_hosts": [], - "ansible_check_mode": false, - "groups": { - "ungrouped": [ - "el6host", - "u1404" - ], - "all": [ - "el6host", - "u1404" - ] - }, - "ansible_host": "u1404", - "ansible_shell_executable": "/bin/sh", - "inventory_hostname_short": "el6host", - "omit": "__omit_place_holder__32a8706cee222390e0d92197fb49cc967bfafb57", - "inventory_dir": "/home/jtanner/workspace/issues/AP-15905", - "playbook_dir": "/home/jtanner/workspace/issues/AP-15905", - "ansible_ssh_user": "root", - "role_names": [], - "play_hosts": [ - "el6host" - ], - "ansible_sftp_extra_args": "" -}
\ No newline at end of file diff --git a/test/units/plugins/action/test_win_updates.py b/test/units/plugins/action/test_win_updates.py deleted file mode 100644 index 021090c5e9..0000000000 --- a/test/units/plugins/action/test_win_updates.py +++ /dev/null @@ -1,154 +0,0 @@ -# -*- coding: utf-8 -*- -# (c) 2018, Jordan Borean <jborean@redhat.com> -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import pytest - -from units.compat.mock import patch, MagicMock -from ansible.plugins.action.win_updates import ActionModule -from ansible.plugins.become.runas import BecomeModule -from ansible.playbook.task import Task - - -@pytest.fixture() -def test_win_updates(): - task = MagicMock(Task) - task.args = {} - - connection = MagicMock() - connection.module_implementation_preferences = ('.ps1', '.exe', '') - - play_context = MagicMock() - play_context.check_mode = False - - plugin = ActionModule(task, connection, play_context, loader=None, templar=None, shared_loader_obj=None) - return plugin - - -class TestWinUpdatesActionPlugin(object): - - INVALID_OPTIONS = ( - ( - {"state": "invalid"}, - False, - "state must be either installed, searched or downloaded" - ), - ( - {"reboot": "nonsense"}, - False, - "cannot parse reboot as a boolean: The value 'nonsense' is not a " - "valid boolean." - ), - ( - {"reboot_timeout": "string"}, - False, - "reboot_timeout must be an integer" - ), - ( - {"reboot": True}, - True, - "async is not supported for this task when reboot=yes" - ) - ) - - # pylint bug: https://github.com/PyCQA/pylint/issues/511 - # pylint: disable=undefined-variable - @pytest.mark.parametrize('task_args, async_val, expected', - ((t, a, e) for t, a, e in INVALID_OPTIONS)) - def test_invalid_options(self, task_args, async_val, expected): - task = MagicMock(Task) - task.args = task_args - task.async_val = async_val - - connection = MagicMock() - play_context = MagicMock() - play_context.check_mode = False - - plugin = ActionModule(task, connection, play_context, loader=None, - templar=None, shared_loader_obj=None) - res = plugin.run() - assert res['failed'] - assert expected in res['msg'] - - def test_exec_with_become(self, test_win_updates): - test_become = os.urandom(8) - - set_become_mock = MagicMock() - test_win_updates._connection.become = test_become - test_win_updates._connection.set_become_plugin = set_become_mock - - with patch('ansible.plugins.action.ActionBase._execute_module', new=MagicMock()): - test_win_updates._execute_module_with_become('win_updates', {}, {}, True, False) - - # Asserts we don't override the become plugin. - assert set_become_mock.call_count == 1 - assert set_become_mock.mock_calls[0][1][0] == test_become - - def test_exec_with_become_no_plugin_set(self, test_win_updates): - set_become_mock = MagicMock() - test_win_updates._connection.become = None - test_win_updates._connection.set_become_plugin = set_become_mock - - with patch('ansible.plugins.action.ActionBase._execute_module', new=MagicMock()): - test_win_updates._execute_module_with_become('win_updates', {}, {}, True, False) - - assert set_become_mock.call_count == 2 - assert isinstance(set_become_mock.mock_calls[0][1][0], BecomeModule) - assert set_become_mock.mock_calls[0][1][0].name == 'runas' - assert set_become_mock.mock_calls[0][1][0].get_option('become_user') == 'SYSTEM' - assert set_become_mock.mock_calls[0][1][0].get_option('become_flags') == '' - assert set_become_mock.mock_calls[0][1][0].get_option('become_pass') is None - assert set_become_mock.mock_calls[1][1] == (None,) - - def test_exec_with_become_no_plugin_set_use_task(self, test_win_updates): - set_become_mock = MagicMock() - test_win_updates._connection.become = None - test_win_updates._connection.set_become_plugin = set_become_mock - - with patch('ansible.plugins.action.ActionBase._execute_module', new=MagicMock()): - test_win_updates._execute_module_with_become('win_updates', {}, {}, True, True) - - assert set_become_mock.call_count == 1 - assert set_become_mock.mock_calls[0][1][0] is None - - def test_module_exec_async_result(self, monkeypatch): - return_val = { - "ansible_async_watchdog_pid": 7584, - "ansible_job_id": "545519115287.9620", - "changed": True, - "finished": 0, - "results_file": r"C:\.ansible_async\545519115287.9620", - "started": 1 - } - mock_execute = MagicMock(return_value=return_val) - monkeypatch.setattr(ActionModule, '_execute_module', mock_execute) - - task = MagicMock(Task) - task.args = {} - task.async_val = 10 - - connection = MagicMock() - connection.module_implementation_preferences = ('.ps1', '.exe', '') - - play_context = MagicMock() - play_context.check_mode = False - play_context.become = True - play_context.become_method = 'runas' - play_context.become_user = 'SYSTEM' - - plugin = ActionModule(task, connection, play_context, loader=None, - templar=None, shared_loader_obj=None) - actual = plugin.run(None, {}) - - assert actual.get('failed') is None - assert actual['ansible_async_watchdog_pid'] == 7584 - assert actual['ansible_job_id'] == "545519115287.9620" - assert actual['changed'] is True - assert actual['finished'] == 0 - assert actual['results_file'] == r"C:\.ansible_async\545519115287.9620" - assert actual['started'] == 1 |