summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/wait_for
diff options
context:
space:
mode:
Diffstat (limited to 'test/integration/targets/wait_for')
-rw-r--r--test/integration/targets/wait_for/aliases2
-rw-r--r--test/integration/targets/wait_for/files/testserver.py16
-rw-r--r--test/integration/targets/wait_for/files/zombie.py13
-rw-r--r--test/integration/targets/wait_for/meta/main.yml2
-rw-r--r--test/integration/targets/wait_for/tasks/main.yml177
-rw-r--r--test/integration/targets/wait_for/vars/main.yml4
6 files changed, 214 insertions, 0 deletions
diff --git a/test/integration/targets/wait_for/aliases b/test/integration/targets/wait_for/aliases
new file mode 100644
index 00000000..a4c92ef8
--- /dev/null
+++ b/test/integration/targets/wait_for/aliases
@@ -0,0 +1,2 @@
+destructive
+shippable/posix/group1
diff --git a/test/integration/targets/wait_for/files/testserver.py b/test/integration/targets/wait_for/files/testserver.py
new file mode 100644
index 00000000..1f6f1187
--- /dev/null
+++ b/test/integration/targets/wait_for/files/testserver.py
@@ -0,0 +1,16 @@
+import sys
+
+if __name__ == '__main__':
+ if sys.version_info[0] >= 3:
+ import http.server
+ import socketserver
+ PORT = int(sys.argv[1])
+ Handler = http.server.SimpleHTTPRequestHandler
+ httpd = socketserver.TCPServer(("", PORT), Handler)
+ httpd.serve_forever()
+ else:
+ import mimetypes
+ mimetypes.init()
+ mimetypes.add_type('application/json', '.json')
+ import SimpleHTTPServer
+ SimpleHTTPServer.test()
diff --git a/test/integration/targets/wait_for/files/zombie.py b/test/integration/targets/wait_for/files/zombie.py
new file mode 100644
index 00000000..913074eb
--- /dev/null
+++ b/test/integration/targets/wait_for/files/zombie.py
@@ -0,0 +1,13 @@
+from __future__ import absolute_import, division, print_function
+__metaclass__ = type
+
+import os
+import sys
+import time
+
+child_pid = os.fork()
+
+if child_pid > 0:
+ time.sleep(60)
+else:
+ sys.exit()
diff --git a/test/integration/targets/wait_for/meta/main.yml b/test/integration/targets/wait_for/meta/main.yml
new file mode 100644
index 00000000..07faa217
--- /dev/null
+++ b/test/integration/targets/wait_for/meta/main.yml
@@ -0,0 +1,2 @@
+dependencies:
+ - prepare_tests
diff --git a/test/integration/targets/wait_for/tasks/main.yml b/test/integration/targets/wait_for/tasks/main.yml
new file mode 100644
index 00000000..67e07786
--- /dev/null
+++ b/test/integration/targets/wait_for/tasks/main.yml
@@ -0,0 +1,177 @@
+---
+- 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: "{{ output_dir }}/testserver.py"
+
+- name: setup a path
+ file:
+ path: "{{ output_dir }}/wait_for_file"
+ state: touch
+
+- name: setup remove a file after 3s
+ shell: sleep 3 && rm {{ output_dir }}/wait_for_file
+ async: 20
+ poll: 0
+
+- name: test for absent path
+ wait_for:
+ path: "{{ output_dir }}/wait_for_file"
+ state: absent
+ timeout: 20
+ register: waitfor
+- name: verify test for absent path
+ assert:
+ that:
+ - waitfor is successful
+ - waitfor.path == "{{ output_dir | expanduser }}/wait_for_file"
+ - waitfor.elapsed >= 2
+ - waitfor.elapsed <= 15
+
+- name: setup create a file after 3s
+ shell: sleep 3 && touch {{ output_dir }}/wait_for_file
+ async: 20
+ poll: 0
+
+- name: test for present path
+ wait_for:
+ path: "{{ output_dir }}/wait_for_file"
+ timeout: 5
+ register: waitfor
+- name: verify test for absent path
+ assert:
+ that:
+ - waitfor is successful
+ - waitfor.path == "{{ output_dir | expanduser }}/wait_for_file"
+ - waitfor.elapsed >= 2
+ - waitfor.elapsed <= 15
+
+- name: setup write keyword to file after 3s
+ shell: sleep 3 && echo completed > {{output_dir}}/wait_for_keyword
+ async: 20
+ poll: 0
+
+- name: test wait for keyword in file
+ wait_for:
+ path: "{{output_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" > {{output_dir}}/wait_for_keyword
+ async: 20
+ poll: 0
+
+- name: test wait for keyword in file with match groups
+ wait_for:
+ path: "{{output_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: 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 }} {{ output_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
+ when: ansible_system != 'Linux'
+
+- name: Copy zombie.py
+ copy:
+ src: zombie.py
+ dest: "{{ output_dir }}"
+
+- name: Create zombie process
+ shell: "{{ ansible_python.executable }} {{ output_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 }}"
diff --git a/test/integration/targets/wait_for/vars/main.yml b/test/integration/targets/wait_for/vars/main.yml
new file mode 100644
index 00000000..c2732948
--- /dev/null
+++ b/test/integration/targets/wait_for/vars/main.yml
@@ -0,0 +1,4 @@
+---
+http_port: 15261
+files_dir: '{{ output_dir|expanduser }}/files'
+checkout_dir: '{{ output_dir }}/git'