547 lines
15 KiB
YAML
547 lines
15 KiB
YAML
---
|
|
# get with mismatch https
|
|
# get with mismatch https and ignore validation
|
|
|
|
- name: get request without return_content
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
return_content: no
|
|
register: get_request_without_content
|
|
|
|
- name: assert get request without return_content
|
|
assert:
|
|
that:
|
|
- not get_request_without_content.changed
|
|
- get_request_without_content.content is not defined
|
|
- get_request_without_content.json is not defined
|
|
- get_request_without_content.status_code == 200
|
|
|
|
- name: get request with xml content
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/xml
|
|
return_content: yes
|
|
register: get_request_with_xml_content
|
|
|
|
- name: assert get request with xml content
|
|
assert:
|
|
that:
|
|
- not get_request_with_xml_content.changed
|
|
- get_request_with_xml_content.content is defined
|
|
- get_request_with_xml_content.json is not defined
|
|
- get_request_with_xml_content.status_code == 200
|
|
|
|
- name: get request with binary content
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/image/png
|
|
return_content: yes
|
|
register: get_request_with_binary_content
|
|
|
|
- name: assert get request with binary content
|
|
assert:
|
|
that:
|
|
- not get_request_with_binary_content.changed
|
|
- get_request_with_binary_content.content is defined
|
|
- get_request_with_binary_content.json is not defined
|
|
- get_request_with_xml_content.status_code == 200
|
|
|
|
- name: get request with return_content and dest (check mode)
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
return_content: yes
|
|
dest: '{{ remote_tmp_dir }}\get.json'
|
|
register: get_request_with_dest_check
|
|
check_mode: yes
|
|
|
|
- name: get stat of downloaded file (check mode)
|
|
win_stat:
|
|
path: '{{ remote_tmp_dir }}\get.json'
|
|
register: get_request_with_dest_actual_check
|
|
|
|
- name: assert get request with return_content and dest (check mode)
|
|
assert:
|
|
that:
|
|
- get_request_with_dest_check.changed
|
|
- get_request_with_dest_check.content is defined
|
|
- get_request_with_dest_check.json is defined
|
|
- get_request_with_dest_actual_check.stat.exists == False
|
|
|
|
- name: get request with return_content and dest
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/base64/{{ '{"key":"value"}' | b64encode }}
|
|
return_content: yes
|
|
dest: '{{ remote_tmp_dir }}\get.json'
|
|
register: get_request_with_dest
|
|
|
|
- name: get stat of downloaded file
|
|
win_stat:
|
|
path: '{{ remote_tmp_dir }}\get.json'
|
|
checksum_algorithm: sha1
|
|
get_checksum: yes
|
|
register: get_request_with_dest_actual
|
|
|
|
- name: assert get request with return_content and dest
|
|
assert:
|
|
that:
|
|
- get_request_with_dest.changed
|
|
- get_request_with_dest.content is defined
|
|
- get_request_with_dest.json is defined
|
|
- get_request_with_dest_actual.stat.exists == True
|
|
- get_request_with_dest_actual.stat.checksum == get_request_with_dest.content|hash('sha1')
|
|
|
|
- name: get request with return_content and dest (idempotent)
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/base64/{{ '{"key":"value"}' | b64encode }}
|
|
return_content: yes
|
|
dest: '{{ remote_tmp_dir }}\get.json'
|
|
register: get_request_with_dest_again
|
|
|
|
- name: assert get request with return_content and dest (idempotent)
|
|
assert:
|
|
that:
|
|
- not get_request_with_dest_again.changed
|
|
|
|
- name: test request with creates option should skip
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
creates: '{{ remote_tmp_dir }}\get.json'
|
|
register: request_with_creates_skipped
|
|
|
|
- name: assert test request with creates option should skip
|
|
assert:
|
|
that:
|
|
- not request_with_creates_skipped.changed
|
|
- request_with_creates_skipped.skipped
|
|
|
|
- name: test request with creates option should not skip
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
creates: '{{ remote_tmp_dir }}\fake.json'
|
|
register: request_with_creates_not_skipped
|
|
|
|
- name: assert test request with creates option should not skip
|
|
assert:
|
|
that:
|
|
- not request_with_creates_not_skipped.changed
|
|
- request_with_creates_not_skipped.skipped is not defined
|
|
|
|
- name: post request with return_content, dest and different content
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/post
|
|
method: POST
|
|
content_type: application/json
|
|
body: '{"foo": "bar"}'
|
|
return_content: yes
|
|
dest: '{{ remote_tmp_dir }}\get.json'
|
|
register: post_request_with_different_content
|
|
|
|
- name: get stat of downloaded file
|
|
win_stat:
|
|
path: '{{ remote_tmp_dir }}\get.json'
|
|
checksum_algorithm: sha1
|
|
get_checksum: yes
|
|
register: post_request_with_different_content_actual
|
|
|
|
- name: assert post request with return_content, dest and different content
|
|
assert:
|
|
that:
|
|
- post_request_with_different_content.changed
|
|
- post_request_with_different_content_actual.stat.exists == True
|
|
- post_request_with_different_content_actual.stat.checksum == post_request_with_different_content.content|hash('sha1')
|
|
|
|
- name: test safe redirection of get
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect/2
|
|
register: redirect_safe
|
|
|
|
- name: assert safe redirection of get
|
|
assert:
|
|
that:
|
|
- redirect_safe.status_code == 200
|
|
- redirect_safe.response_uri == 'https://' + httpbin_host + '/get'
|
|
|
|
- name: test safe redirection of head
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect/2
|
|
method: HEAD
|
|
register: redirect_safe_head
|
|
|
|
- name: assert safe redirection of head
|
|
assert:
|
|
that:
|
|
- redirect_safe_head.status_code == 200
|
|
- redirect_safe_head.response_uri == 'https://' + httpbin_host + '/get'
|
|
|
|
- name: test safe redirection of put
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect-to?url=https://{{httpbin_host}}/put
|
|
body: data
|
|
status_code: 302
|
|
method: PUT
|
|
register: redirect_safe_put
|
|
|
|
- name: assert safe redirection of put
|
|
assert:
|
|
that:
|
|
- redirect_safe_put.status_code == 302
|
|
- redirect_safe_put.response_uri == 'https://' + httpbin_host + '/redirect-to?url=https://' + httpbin_host + '/put'
|
|
|
|
- name: test none redirection of get
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect/2
|
|
status_code: 302
|
|
follow_redirects: none
|
|
register: redirect_none
|
|
|
|
- name: assert none redirection of get
|
|
assert:
|
|
that:
|
|
- redirect_none.status_code == 302
|
|
- redirect_none.response_uri == 'https://' + httpbin_host + '/redirect/2'
|
|
|
|
- name: test none redirection of put
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect-to?url=https://{{httpbin_host}}/put
|
|
body: data
|
|
status_code: 302
|
|
method: PUT
|
|
follow_redirects: none
|
|
register: redirect_none_put
|
|
|
|
- name: assert none redirection of put
|
|
assert:
|
|
that:
|
|
- redirect_none_put.status_code == 302
|
|
- redirect_none_put.response_uri == 'https://' + httpbin_host + '/redirect-to?url=https://' + httpbin_host + '/put'
|
|
|
|
- name: test all redirection of get
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect/2
|
|
follow_redirects: all
|
|
register: redirect_all
|
|
|
|
- name: assert all redirection of get
|
|
assert:
|
|
that:
|
|
- redirect_all.status_code == 200
|
|
- redirect_all.response_uri == 'https://' + httpbin_host + '/get'
|
|
|
|
- name: test all redirection of put
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect-to?url=https://{{httpbin_host}}/put
|
|
body: data
|
|
method: PUT
|
|
follow_redirects: all
|
|
register: redirect_all_put
|
|
|
|
- name: assert all redirection of put
|
|
assert:
|
|
that:
|
|
- redirect_all_put.status_code == 200
|
|
- redirect_all_put.response_uri == 'https://' + httpbin_host + '/put'
|
|
|
|
- name: test exceeded maximum redirection
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/redirect/5
|
|
maximum_redirection: 4
|
|
status_code: 302
|
|
register: maximum_redirection
|
|
|
|
- name: assert exceeded maximum redirection
|
|
assert:
|
|
that:
|
|
- maximum_redirection.status_code == 302
|
|
- maximum_redirection.response_uri == 'https://' + httpbin_host + '/relative-redirect/1'
|
|
|
|
- name: test basic auth
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/basic-auth/user/passwd
|
|
user: user
|
|
password: passwd
|
|
register: basic_auth
|
|
|
|
- name: assert test basic auth
|
|
assert:
|
|
that:
|
|
- not basic_auth.changed
|
|
- basic_auth.status_code == 200
|
|
|
|
- name: test basic auth with force auth
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/hidden-basic-auth/user/passwd
|
|
user: user
|
|
password: passwd
|
|
force_basic_auth: yes
|
|
register: basic_auth_forced
|
|
|
|
- name: assert test basic auth with forced auth
|
|
assert:
|
|
that:
|
|
- not basic_auth_forced.changed
|
|
- basic_auth_forced.status_code == 200
|
|
|
|
- name: test PUT
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/put
|
|
method: PUT
|
|
body: foo=bar
|
|
return_content: yes
|
|
register: put_request
|
|
|
|
- name: assert test PUT
|
|
assert:
|
|
that:
|
|
- not put_request.changed
|
|
- put_request.status_code == 200
|
|
- put_request.json.data == 'foo=bar'
|
|
|
|
- name: test OPTIONS
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/
|
|
method: OPTIONS
|
|
register: option_request
|
|
|
|
- name: assert test OPTIONS
|
|
assert:
|
|
that:
|
|
- not option_request.changed
|
|
- option_request.status_code == 200
|
|
- 'option_request.allow.split(", ")|sort == ["GET", "HEAD", "OPTIONS"]'
|
|
|
|
# SNI Tests
|
|
|
|
- name: validate status_codes are correct
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/status/202
|
|
status_code:
|
|
- 202
|
|
- 418
|
|
method: POST
|
|
body: foo
|
|
register: status_code_check
|
|
|
|
- name: assert validate status_codes are correct
|
|
assert:
|
|
that:
|
|
- not status_code_check.changed
|
|
- status_code_check.status_code == 202
|
|
|
|
- name: send JSON body with dict type
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/post
|
|
method: POST
|
|
body:
|
|
foo: bar
|
|
list:
|
|
- 1
|
|
- 2
|
|
dict:
|
|
foo: bar
|
|
headers:
|
|
'Content-Type': 'text/json'
|
|
return_content: yes
|
|
register: json_as_dict
|
|
|
|
- name: set fact of expected json dict
|
|
set_fact:
|
|
json_as_dict_value:
|
|
foo: bar
|
|
list:
|
|
- 1
|
|
- 2
|
|
dict:
|
|
foo: bar
|
|
|
|
- name: assert send JSON body with dict type
|
|
assert:
|
|
that:
|
|
- not json_as_dict.changed
|
|
- json_as_dict.json.json == json_as_dict_value
|
|
- json_as_dict.status_code == 200
|
|
|
|
- name: send JSON body with 1 item in list
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/post
|
|
method: POST
|
|
body:
|
|
- foo: bar
|
|
headers:
|
|
'Content-Type': 'text/json'
|
|
return_content: yes
|
|
register: json_as_oneitemlist
|
|
|
|
- name: set fact of expected json 1 item list
|
|
set_fact:
|
|
json_as_oneitemlist_value:
|
|
- foo: bar
|
|
|
|
- name: assert send JSON body with 1 item in list
|
|
assert:
|
|
that:
|
|
- not json_as_oneitemlist.changed
|
|
- json_as_oneitemlist.json.json == json_as_oneitemlist_value
|
|
- json_as_oneitemlist.status_code == 200
|
|
|
|
- name: get request with custom headers
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
headers:
|
|
Test-Header: hello
|
|
Another-Header: world
|
|
return_content: yes
|
|
register: get_custom_header
|
|
|
|
- name: assert request with custom headers
|
|
assert:
|
|
that:
|
|
- not get_custom_header.changed
|
|
- get_custom_header.status_code == 200
|
|
- get_custom_header.json.headers['Test-Header'] == 'hello'
|
|
- get_custom_header.json.headers['Another-Header'] == 'world'
|
|
|
|
- name: Validate invalid method
|
|
win_uri:
|
|
url: https://{{ httpbin_host }}/anything
|
|
method: UNKNOWN
|
|
register: invalid_method
|
|
ignore_errors: yes
|
|
|
|
- name: Assert invalid method fails
|
|
assert:
|
|
that:
|
|
- invalid_method is failure
|
|
- invalid_method.status_code == 405
|
|
- invalid_method.status_description == 'METHOD NOT ALLOWED'
|
|
|
|
# client cert auth tests
|
|
|
|
- name: get request with timeout
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/delay/10
|
|
timeout: 5
|
|
register: get_with_timeout_fail
|
|
failed_when: '"The operation has timed out" not in get_with_timeout_fail.msg'
|
|
|
|
- name: connect to fakepath that does not exist
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/fakepath
|
|
status_code: 404
|
|
return_content: yes
|
|
register: invalid_path
|
|
|
|
# verifies the return values are still set on a non 200 response
|
|
- name: assert connect to fakepath that does not exist
|
|
assert:
|
|
that:
|
|
- not invalid_path.changed
|
|
- invalid_path.status_code == 404
|
|
- invalid_path.status_description == 'NOT FOUND'
|
|
- invalid_path.content is defined
|
|
- invalid_path.method == 'GET'
|
|
- invalid_path.connection is defined
|
|
|
|
- name: post request with custom headers
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/post
|
|
method: POST
|
|
headers:
|
|
Test-Header: hello
|
|
Another-Header: world
|
|
content_type: application/json
|
|
body: '{"foo": "bar"}'
|
|
return_content: yes
|
|
register: post_request_with_custom_headers
|
|
|
|
- name: assert post with custom headers
|
|
assert:
|
|
that:
|
|
- not post_request_with_custom_headers.changed
|
|
- post_request_with_custom_headers.status_code == 200
|
|
- post_request_with_custom_headers.json.headers['Content-Type'] == "application/json"
|
|
- post_request_with_custom_headers.json.headers['Test-Header'] == 'hello'
|
|
- post_request_with_custom_headers.json.headers['Another-Header'] == 'world'
|
|
|
|
- name: validate status codes as list of strings
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/status/202
|
|
status_code:
|
|
- '202'
|
|
- '418'
|
|
method: POST
|
|
body: foo
|
|
return_content: yes
|
|
register: request_status_code_string
|
|
|
|
- name: assert status codes as list of strings
|
|
assert:
|
|
that:
|
|
- not request_status_code_string.changed
|
|
- request_status_code_string.status_code == 202
|
|
|
|
- name: validate status codes as comma separated list
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/status/202
|
|
status_code: 202, 418
|
|
method: POST
|
|
body: foo
|
|
return_content: yes
|
|
register: request_status_code_comma
|
|
|
|
- name: assert status codes as comma separated list
|
|
assert:
|
|
that:
|
|
- not request_status_code_comma.changed
|
|
- request_status_code_comma.status_code == 202
|
|
|
|
# https://github.com/ansible/ansible/issues/55294
|
|
- name: get json content that is an array
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/base64/{{ '[{"abc":"def"}]' | b64encode }}
|
|
return_content: yes
|
|
register: content_array
|
|
|
|
- name: assert content of json array
|
|
assert:
|
|
that:
|
|
- not content_array is changed
|
|
- content_array.content == '[{"abc":"def"}]'
|
|
- content_array.json == [{"abc":"def"}]
|
|
|
|
- name: send request with explicit http_agent
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
http_agent: test-agent
|
|
return_content: yes
|
|
register: http_agent_option
|
|
|
|
- name: assert send request with explicit http_agent
|
|
assert:
|
|
that:
|
|
- http_agent_option.json.headers['User-Agent'] == 'test-agent'
|
|
|
|
- name: send request with explicit User-Agent header
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
headers:
|
|
User-Agent: test-agent
|
|
return_content: yes
|
|
register: http_agent_header
|
|
|
|
- name: assert send request with explicit User-Agent header
|
|
assert:
|
|
that:
|
|
- http_agent_header.json.headers['User-Agent'] == 'test-agent'
|
|
|
|
- name: send request with explicit http_agent and header (http_agent wins)
|
|
win_uri:
|
|
url: https://{{httpbin_host}}/get
|
|
http_agent: test-agent-option
|
|
headers:
|
|
User-Agent: test-agent-header
|
|
return_content: yes
|
|
register: http_agent_combo
|
|
|
|
- name: assert send request with explicit http_agent and header (http_agent wins)
|
|
assert:
|
|
that:
|
|
- http_agent_combo.json.headers['User-Agent'] == 'test-agent-option'
|
|
- http_agent_combo.warnings[0] == "The 'User-Agent' header and the 'http_agent' was set, using the 'http_agent' for web request"
|