win_wait_for_process: Fixes and integration tests (#44801)

* win_wait_for_process: Add integration tests

* Disable reporting changes

* Added more tests checking PID

* Various improvements

This PR includes:
- Use Get-Process instead of CIM Win32_Process
- Rewrite of process filter logic (speedup)
- Fix error messages
- Fixes to documentation, examples and return output

* win_wait_for_process: Limit to PowerShell 4 and higher

* Improve RESULT documentation

* Last minute fixes for CI

* Catch Powershell exceptions

* Increase timeout to make tests more stable
This commit is contained in:
Dag Wieers 2018-08-31 03:13:51 +02:00 committed by GitHub
commit dbe30cc050
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 368 additions and 123 deletions

View file

@ -0,0 +1 @@
shippable/windows/group4

View file

@ -0,0 +1,200 @@
---
- name: Get powershell version
win_shell: $PSVersionTable.PSVersion.Major
register: powershell_version
- name: Ensure Spooler service is started
win_service:
name: Spooler
state: started
- name: Wait for non-existing process to not exist
win_wait_for_process:
process_name_exact:
- ansible_foobar
timeout: 30
state: absent
register: absent_nonexisting_process
- assert:
that:
- absent_nonexisting_process is success
- absent_nonexisting_process is not changed
- absent_nonexisting_process.elapsed > 0
- absent_nonexisting_process.elapsed < 30
- absent_nonexisting_process.matched_processes|length == 0
- name: Wait for non-existing process until timeout
win_wait_for_process:
process_name_exact: ansible_foobar
timeout: 30
state: present
ignore_errors: yes
register: present_nonexisting_process
- assert:
that:
- present_nonexisting_process is failed
- present_nonexisting_process is not changed
- present_nonexisting_process.elapsed > 30
- present_nonexisting_process.msg == 'Timed out while waiting for process(es) to start'
- present_nonexisting_process.matched_processes|length == 0
- name: Wait for existing process to exist
win_wait_for_process:
process_name_exact: spoolsv
timeout: 30
state: present
register: present_existing_process
- assert:
that:
- present_existing_process is success
- present_existing_process is not changed
- present_existing_process.elapsed > 0
- present_existing_process.elapsed < 30
- present_existing_process.matched_processes|length > 0
- name: Wait for existing process until timeout
win_wait_for_process:
process_name_exact:
- spoolsv
timeout: 30
state: absent
ignore_errors: yes
register: absent_existing_process
- assert:
that:
- absent_existing_process is failed
- absent_existing_process is not changed
- absent_existing_process.elapsed > 30
- absent_existing_process.matched_processes|length > 0
- absent_existing_process.msg == 'Timeout while waiting for process(es) to stop'
- name: Wait for existing process to exist (using owner)
win_wait_for_process:
process_name_exact: spoolsv
owner: SYSTEM
timeout: 30
state: present
ignore_errors: yes
register: present_existing_owner_process
- assert:
that:
- present_existing_owner_process is success
- present_existing_owner_process is not changed
- present_existing_owner_process.elapsed > 0
- present_existing_owner_process.elapsed < 30
- present_existing_owner_process.matched_processes|length > 0
when: powershell_version.stdout_lines[0]|int >= 4
- assert:
that:
- present_existing_owner_process is failed
- present_existing_owner_process is not changed
- present_existing_owner_process.elapsed == 0
- present_existing_owner_process.matched_processes|length == 0
- present_existing_owner_process.msg == "This version of Powershell does not support filtering processes by 'owner'."
when: powershell_version.stdout_lines[0]|int < 4
- name: Wait for Spooler service to stop
win_wait_for_process:
process_name_exact:
- spoolsv
timeout: 60
state: absent
async: 30
poll: 0
register: spoolsv_process
- name: Stop the Spooler service
win_service:
name: Spooler
force_dependent_services: yes
state: stopped
- name: Check on async task
async_status:
jid: '{{ spoolsv_process.ansible_job_id }}'
until: absent_spoolsv_process is finished
retries: 20
register: absent_spoolsv_process
- assert:
that:
- absent_spoolsv_process is success
- absent_spoolsv_process is not changed
- absent_spoolsv_process is finished
- absent_spoolsv_process.elapsed > 0
- absent_spoolsv_process.elapsed < 30
- absent_spoolsv_process.matched_processes|length == 1
- name: Wait for Spooler service to start
win_wait_for_process:
process_name_exact: spoolsv
timeout: 60
state: present
async: 60
poll: 0
register: spoolsv_process
- name: Start the spooler service
win_service:
name: Spooler
force_dependent_services: yes
state: started
- name: Check on async task
async_status:
jid: '{{ spoolsv_process.ansible_job_id }}'
until: present_spoolsv_process is finished
retries: 10
register: present_spoolsv_process
- assert:
that:
- present_spoolsv_process is success
- present_spoolsv_process is not changed
- present_spoolsv_process is finished
- present_spoolsv_process.elapsed > 0
- present_spoolsv_process.elapsed < 60
- present_spoolsv_process.matched_processes|length == 1
- name: Start a new long-running process
win_shell: |
Start-Sleep -Seconds 15
async: 40
poll: 0
register: sleep_pid
- name: Wait for PID to start
win_wait_for_process:
pid: '{{ sleep_pid.ansible_async_watchdog_pid }}'
timeout: 20
state: present
register: present_sleep_pid
- assert:
that:
- present_sleep_pid is success
- present_sleep_pid is not changed
- present_sleep_pid.elapsed > 0
- present_sleep_pid.elapsed < 15
- present_sleep_pid.matched_processes|length == 1
- name: Wait for PID to stop
win_wait_for_process:
pid: '{{ sleep_pid.ansible_async_watchdog_pid }}'
timeout: 20
state: absent
register: absent_sleep_pid
- assert:
that:
- absent_sleep_pid is success
- absent_sleep_pid is not changed
- absent_sleep_pid.elapsed > 0
- absent_sleep_pid.elapsed < 15
- absent_sleep_pid.matched_processes|length == 1