diff --git a/test/integration/targets/win_command/tasks/main.yml b/test/integration/targets/win_command/tasks/main.yml index 98f39b3c27f..31c172f714e 100644 --- a/test/integration/targets/win_command/tasks/main.yml +++ b/test/integration/targets/win_command/tasks/main.yml @@ -124,11 +124,14 @@ - cmdout|failed - cmdout.rc == 254 -- name: write large buffer to stdout - win_command: powershell /c "$ba = New-Object byte[] 16384; (New-Object System.Random 32).NextBytes($ba); [Convert]::ToBase64String($ba) | Write-Output" +- 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 -# TODO: fix small buffer deadlock on large write to stderr before stdout has been consumed -#- name: write large buffer to stderr -# win_shell: $ba = New-Object byte[] 16384; (New-Object System.Random 32).NextBytes($ba); [Convert]::ToBase64String($ba) | Write-Error; Write-Output test -# register: cmdout \ No newline at end of file +- 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") diff --git a/test/integration/targets/win_shell/tasks/main.yml b/test/integration/targets/win_shell/tasks/main.yml index 12e9870b9c6..9998f4c456e 100644 --- a/test/integration/targets/win_shell/tasks/main.yml +++ b/test/integration/targets/win_shell/tasks/main.yml @@ -165,11 +165,14 @@ - shellout.stdout_lines == ["line1 ", "line2"] - shellout.stderr == "" -- name: write large buffer to stdout - win_shell: $ba = New-Object byte[] 16384; (New-Object System.Random 32).NextBytes($ba); [Convert]::ToBase64String($ba) | Write-Output +- 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 -# TODO: fix small buffer deadlock on large write to stderr before stdout has been consumed -#- name: write large buffer to stderr -# win_shell: $ba = New-Object byte[] 16384; (New-Object System.Random 32).NextBytes($ba); [Convert]::ToBase64String($ba) | Write-Error; Write-Output test -# register: shellout \ No newline at end of file +- 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")