summaryrefslogtreecommitdiff
path: root/test/integration/roles/test_uri/tasks/main.yml
blob: 99c6048a59e181a61fad0a98d5492d3c00affab2 (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
# test code for the uri module
# (c) 2014, Leonid Evdokimov <leon@darkk.net.ru>

# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.

- name: set role facts
  set_fact:
    http_port: 15260
    files_dir: '{{ output_dir|expanduser }}/files'
    checkout_dir: '{{ output_dir }}/git'

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

- copy:
    src: "{{ item }}"
    dest: "{{files_dir}}/{{ item }}"
  with_sequence: start=0 end=4 format=pass%d.json

- copy:
    src: "{{ item }}"
    dest: "{{files_dir}}/{{ item }}"
  with_sequence: start=0 end=30 format=fail%d.json

- copy:
    src: "testserver.py"
    dest: "{{ output_dir }}/testserver.py"

- name: verify that python2 is installed so this test can continue
  shell: which python2
  register: py2

- name: start SimpleHTTPServer
  shell: cd {{ files_dir }} && {{ py2.stdout }} {{ output_dir}}/testserver.py {{ http_port }}
  async: 60 # this test set takes ~15 seconds to run
  poll: 0

- wait_for: port={{ http_port }}


- name: checksum pass_json
  stat: path={{ files_dir }}/{{ item }}.json get_checksum=yes
  register: pass_checksum
  with_sequence: start=0 end=4 format=pass%d

- name: fetch pass_json
  uri: return_content=yes url=http://localhost:{{ http_port }}/{{ item }}.json
  register: pass
  with_sequence: start=0 end=4 format=pass%d

- name: check pass_json
  assert:
    that:
      - '"json" in item.1'
      - item.0.stat.checksum == item.1.content | checksum
  with_together:
    - pass_checksum.results
    - pass.results


- name: checksum fail_json
  stat: path={{ files_dir }}/{{ item }}.json get_checksum=yes
  register: fail_checksum
  with_sequence: start=0 end=30 format=fail%d

- name: fetch fail_json
  uri: return_content=yes url=http://localhost:{{ http_port }}/{{ item }}.json
  register: fail
  with_sequence: start=0 end=30 format=fail%d

- name: check fail_json
  assert:
    that:
      - item.0.stat.checksum == item.1.content | checksum
      - '"json" not in item.1'
  with_together:
    - fail_checksum.results
    - fail.results

- name: test https fetch to a site with mismatched hostname and certificate
  uri:
    url: "https://kennethreitz.org/"
    dest: "{{ output_dir }}/shouldnotexist.html"
  ignore_errors: True
  register: result

- stat:
    path: "{{ output_dir }}/shouldnotexist.html"
  register: stat_result

- name: Assert that the file was not downloaded
  assert:
    that:
      - "result.failed == true"
      - "'certificate does not match ' in result.msg"
      - "stat_result.stat.exists == false"

- name: test https fetch to a site with mismatched hostname and certificate and validate_certs=no
  get_url:
    url: "https://kennethreitz.org/"
    dest: "{{ output_dir }}/kreitz.html"
    validate_certs: no
  register: result

- stat:
    path: "{{ output_dir }}/kreitz.html"
  register: stat_result

- name: Assert that the file was downloaded
  assert:
    that:
      - "result.changed == true"
      - "stat_result.stat.exists == true"