summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/wait_for/tasks/main.yml
blob: f71ddbda6b0226ff64be8f0849c286ef6d296a7a (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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
---
- name: test wait_for with delegate_to
  wait_for:
    timeout: 2
  delegate_to: localhost
  register: waitfor

- assert:
    that:
      - waitfor is successful
      - waitfor.elapsed >= 2

- name: setup create a directory to serve files from
  file:
    dest: "{{ files_dir }}"
    state: directory

- name: setup webserver
  copy:
    src: "testserver.py"
    dest: "{{ remote_tmp_dir }}/testserver.py"

- name: setup a path
  file:
    path: "{{ remote_tmp_dir }}/wait_for_file"
    state: touch

- name: setup remove a file after 3s
  shell: sleep 3 && rm {{ remote_tmp_dir }}/wait_for_file
  async: 20
  poll: 0

- name: test for absent path
  wait_for:
    path: "{{ remote_tmp_dir }}/wait_for_file"
    state: absent
    timeout: 20
  register: waitfor
- name: verify test for absent path
  assert:
    that:
      - waitfor is successful
      - waitfor.path == "{{ remote_tmp_dir | expanduser }}/wait_for_file"
      - waitfor.elapsed >= 2
      - waitfor.elapsed <= 15

- name: setup create a file after 3s
  shell: sleep 3 && touch {{ remote_tmp_dir }}/wait_for_file
  async: 20
  poll: 0

- name: test for present path
  wait_for:
    path:  "{{ remote_tmp_dir }}/wait_for_file"
    timeout: 5
  register: waitfor
- name: verify test for absent path
  assert:
    that:
      - waitfor is successful
      - waitfor.path == "{{ remote_tmp_dir | expanduser }}/wait_for_file"
      - waitfor.elapsed >= 2
      - waitfor.elapsed <= 15

- name: setup write keyword to file after 3s
  shell: sleep 3 && echo completed > {{remote_tmp_dir}}/wait_for_keyword
  async: 20
  poll: 0

- name: test wait for keyword in file
  wait_for:
    path: "{{remote_tmp_dir}}/wait_for_keyword"
    search_regex: completed
    timeout: 5
  register: waitfor

- name: verify test wait for keyword in file
  assert:
    that:
      - waitfor is successful
      - "waitfor.search_regex == 'completed'"
      - waitfor.elapsed >= 2
      - waitfor.elapsed <= 15

- name: setup write keyword to file after 3s
  shell: sleep 3 && echo "completed data 123" > {{remote_tmp_dir}}/wait_for_keyword
  async: 20
  poll: 0

- name: test wait for keyword in file with match groups
  wait_for:
    path: "{{remote_tmp_dir}}/wait_for_keyword"
    search_regex: completed (?P<foo>\w+) ([0-9]+)
    timeout: 5
  register: waitfor

- name: verify test wait for keyword in file with match groups
  assert:
    that:
    - waitfor is successful
    - waitfor.elapsed >= 2
    - waitfor.elapsed <= 15
    - waitfor['match_groupdict'] | length == 1
    - waitfor['match_groupdict']['foo'] == 'data'
    - waitfor['match_groups'] == ['data', '123']

- name: write non-ascii file
  script: write_utf16.py "{{remote_tmp_dir}}/utf16.txt"
  args:
    executable: '{{ ansible_facts.python.executable }}'

- name: test non-ascii file
  wait_for:
    path: "{{remote_tmp_dir}}/utf16.txt"
    search_regex: completed

- name: test wait for port timeout
  wait_for:
    port: 12121
    timeout: 3
  register: waitfor
  ignore_errors: true
- name: verify test wait for port timeout
  assert:
    that:
      - waitfor is failed
      - waitfor.elapsed == 3
      - "waitfor.msg == 'Timeout when waiting for 127.0.0.1:12121'"

- name: test fail with custom msg
  wait_for:
    port: 12121
    msg: fail with custom message
    timeout: 3
  register: waitfor
  ignore_errors: true
- name: verify test fail with custom msg
  assert:
    that:
      - waitfor is failed
      - waitfor.elapsed == 3
      - "waitfor.msg == 'fail with custom message'"

- name: setup start SimpleHTTPServer
  shell: sleep 3 && cd {{ files_dir }} && {{ ansible_python.executable }} {{ remote_tmp_dir}}/testserver.py {{ http_port }}
  async: 120 # this test set can take ~1m to run on FreeBSD (via Shippable)
  poll: 0

- name: test wait for port with sleep
  wait_for:
    port: "{{ http_port }}"
    sleep: 3
  register: waitfor
- name: verify test wait for port sleep
  assert:
    that:
      - waitfor is successful
      - waitfor is not changed
      - "waitfor.port == {{ http_port }}"

- name: install psutil using pip (non-Linux only)
  pip:
    name: psutil==5.8.0
  when: ansible_system != 'Linux'

- name: Copy zombie.py
  copy:
    src: zombie.py
    dest: "{{ remote_tmp_dir }}"

- name: Create zombie process
  shell: "{{ ansible_python.executable }} {{ remote_tmp_dir }}/zombie"
  async: 90
  poll: 0

- name: test wait for port drained
  wait_for:
    port: "{{ http_port }}"
    state: drained
  register: waitfor

- name: verify test wait for port
  assert:
    that:
      - waitfor is successful
      - waitfor is not changed
      - "waitfor.port == {{ http_port }}"

- name: test wait_for with delay
  wait_for:
    timeout: 2
    delay: 2
  register: waitfor

- name: verify test wait_for with delay
  assert:
    that:
      - waitfor is successful
      - waitfor.elapsed >= 4