diff options
Diffstat (limited to 'test/integration/targets/wait_for')
-rw-r--r-- | test/integration/targets/wait_for/aliases | 2 | ||||
-rw-r--r-- | test/integration/targets/wait_for/files/testserver.py | 16 | ||||
-rw-r--r-- | test/integration/targets/wait_for/files/zombie.py | 13 | ||||
-rw-r--r-- | test/integration/targets/wait_for/meta/main.yml | 2 | ||||
-rw-r--r-- | test/integration/targets/wait_for/tasks/main.yml | 177 | ||||
-rw-r--r-- | test/integration/targets/wait_for/vars/main.yml | 4 |
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' |