summaryrefslogtreecommitdiff
path: root/test/integration/roles/test_win_command/tasks/main.yml
blob: 31c172f714e6b74389dbee4ba019603eb32600a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
- name: execute a command
  win_command: whoami /groups
  register: cmdout

- name: validate result
  assert:
    that:
    - cmdout|success
    - cmdout|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'
    - cmdout.warnings == []

- name: execute something nonexistent
  win_command: bogus_command1234
  register: cmdout
  ignore_errors: true

- name: validate result
  assert:
    that:
    - cmdout|failed
    - not cmdout|changed
    - cmdout.cmd == 'bogus_command1234'
    - cmdout.rc == 2
    - cmdout.msg is search('cannot find the file specified')

- 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|success
    - cmdout|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 "]
    - cmdout.warnings == []

- 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|success
    - cmdout|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|skipped
    - cmdout.msg is search('exists')

- 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|success
    - cmdout|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|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|failed
    - 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")