mirror of https://github.com/ansible/ansible.git
win_uri: fixes (#35487)
* win_uri: moved away from Invoke-WebRequest and fixed multiple issues * fixes from reviewpull/35832/head
parent
63fdc3f08f
commit
a0178b79f1
@ -1,36 +0,0 @@
|
|||||||
param (
|
|
||||||
[int]$port = 8000
|
|
||||||
)
|
|
||||||
|
|
||||||
$listener = New-Object Net.HttpListener
|
|
||||||
$listener.Prefixes.Add("http://+:$port/")
|
|
||||||
$listener.Start()
|
|
||||||
|
|
||||||
try {
|
|
||||||
while ($listener.IsListening) {
|
|
||||||
# process received request
|
|
||||||
$context = $listener.GetContext()
|
|
||||||
$Request = $context.Request
|
|
||||||
$Response = $context.Response
|
|
||||||
#$Response.Headers.Add("Content-Type","text/plain")
|
|
||||||
|
|
||||||
$received = '{0} {1}' -f $Request.httpmethod, $Request.url.localpath
|
|
||||||
|
|
||||||
# is there HTML content for this URL?
|
|
||||||
$html = $htmlcontents[$received]
|
|
||||||
if ($html -eq $null) {
|
|
||||||
$Response.statuscode = 404
|
|
||||||
$html = 'Oops, the page is not available!'
|
|
||||||
}
|
|
||||||
|
|
||||||
# return the HTML to the caller
|
|
||||||
$buffer = [Text.Encoding]::UTF8.GetBytes($html)
|
|
||||||
$Response.ContentLength64 = $buffer.length
|
|
||||||
$Response.OutputStream.Write($buffer, 0, $buffer.length)
|
|
||||||
|
|
||||||
$Response.Close()
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
$listener.Stop()
|
|
||||||
$listener.Close()
|
|
||||||
}
|
|
||||||
@ -0,0 +1 @@
|
|||||||
|
windows/ci/group4
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
test_uri_path: C:\ansible\win_uri
|
||||||
|
httpbin_host: httpbin.org
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
- name: create test directory
|
||||||
|
win_file:
|
||||||
|
path: '{{test_uri_path}}'
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- include_tasks: test.yml
|
||||||
|
|
||||||
|
always:
|
||||||
|
- name: cleanup test directory
|
||||||
|
win_file:
|
||||||
|
path: '{{test_uri_path}}'
|
||||||
|
state: absent
|
||||||
@ -0,0 +1,298 @@
|
|||||||
|
---
|
||||||
|
# get with mismatch https
|
||||||
|
# get with mismatch https and ignore validation
|
||||||
|
|
||||||
|
- name: get request without return_content
|
||||||
|
win_uri:
|
||||||
|
url: http://{{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: http://{{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: http://{{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: http://{{httpbin_host}}/get
|
||||||
|
return_content: yes
|
||||||
|
dest: '{{test_uri_path}}\get.json'
|
||||||
|
register: get_request_with_dest_check
|
||||||
|
check_mode: yes
|
||||||
|
|
||||||
|
- name: get stat of downloaded file (check mode)
|
||||||
|
win_stat:
|
||||||
|
path: '{{test_uri_path}}\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: http://{{httpbin_host}}/get
|
||||||
|
return_content: yes
|
||||||
|
dest: '{{test_uri_path}}\get.json'
|
||||||
|
register: get_request_with_dest
|
||||||
|
|
||||||
|
- name: get stat of downloaded file
|
||||||
|
win_stat:
|
||||||
|
path: '{{test_uri_path}}\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: http://{{httpbin_host}}/get
|
||||||
|
return_content: yes
|
||||||
|
dest: '{{test_uri_path}}\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: post request with return_content, dest and different content
|
||||||
|
win_uri:
|
||||||
|
url: http://{{httpbin_host}}/post
|
||||||
|
method: POST
|
||||||
|
content_type: application/json
|
||||||
|
body: '{"foo": "bar"}'
|
||||||
|
return_content: yes
|
||||||
|
dest: '{{test_uri_path}}\get.json'
|
||||||
|
register: post_request_with_different_content
|
||||||
|
|
||||||
|
- name: get stat of downloaded file
|
||||||
|
win_stat:
|
||||||
|
path: '{{test_uri_path}}\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 redirect without follow_redirects
|
||||||
|
win_uri:
|
||||||
|
url: http://{{httpbin_host}}/redirect/2
|
||||||
|
follow_redirects: none
|
||||||
|
status_code: 302
|
||||||
|
register: redirect_without_follow
|
||||||
|
|
||||||
|
- name: assert redirect without follow_redirects
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not redirect_without_follow.changed
|
||||||
|
- redirect_without_follow.location|default("") == '/relative-redirect/1'
|
||||||
|
- redirect_without_follow.status_code == 302
|
||||||
|
|
||||||
|
- name: test redirect with follow_redirects
|
||||||
|
win_uri:
|
||||||
|
url: http://{{httpbin_host}}/redirect/2
|
||||||
|
follow_redirects: all
|
||||||
|
register: redirect_with_follow
|
||||||
|
|
||||||
|
- name: assert redirect with follow_redirects
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not redirect_with_follow.changed
|
||||||
|
- redirect_with_follow.location is not defined
|
||||||
|
- redirect_with_follow.status_code == 200
|
||||||
|
- redirect_with_follow.response_uri == 'http://{{httpbin_host}}/get'
|
||||||
|
|
||||||
|
- name: get request with redirect of TLS
|
||||||
|
win_uri:
|
||||||
|
url: https://{{httpbin_host}}/redirect/2
|
||||||
|
follow_redirects: all
|
||||||
|
register: redirect_with_follow_tls
|
||||||
|
|
||||||
|
- name: assert redirect with redirect of TLS
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not redirect_with_follow_tls.changed
|
||||||
|
- redirect_with_follow_tls.location is not defined
|
||||||
|
- redirect_with_follow_tls.status_code == 200
|
||||||
|
- redirect_with_follow_tls.response_uri == 'https://{{httpbin_host}}/get'
|
||||||
|
|
||||||
|
- name: test basic auth
|
||||||
|
win_uri:
|
||||||
|
url: http://{{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: http://{{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: http://{{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: http://{{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: http://{{httpbin_host}}/status/202
|
||||||
|
status_code:
|
||||||
|
- 202
|
||||||
|
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: http://{{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: get request with custom headers
|
||||||
|
win_uri:
|
||||||
|
url: http://{{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'
|
||||||
|
|
||||||
|
# client cert auth tests
|
||||||
|
|
||||||
|
- name: get request with timeout
|
||||||
|
win_uri:
|
||||||
|
url: http://{{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'
|
||||||
Loading…
Reference in New Issue