Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uri integration tests #11014

Merged
merged 3 commits into from
May 21, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions test/integration/non_destructive.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
- { role: test_authorized_key, tags: test_authorized_key }
- { role: test_get_url, tags: test_get_url }
- { role: test_embedded_module, tags: test_embedded_module }
- { role: test_uri, tags: test_uri }
# Turn on test_binary when we start testing v2
#- { role: test_binary, tags: test_binary }

9 changes: 9 additions & 0 deletions test/integration/roles/test_uri/files/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
The files were taken from http://www.json.org/JSON_checker/
> If the JSON_checker is working correctly, it must accept all of the pass*.json files and reject all of the fail*.json files.

Difference with JSON_checker dataset:
- *${n}.json renamed to *${n-1}.json to be 0-based
- fail0.json renamed to pass3.json as python json module allows JSON payload to be string
- fail17.json renamed to pass4.json as python json module has no problems with deep structures
- fail32.json renamed to fail0.json to fill gap
- fail31.json renamed to fail17.json to fill gap
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["mismatch"}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Unclosed array"
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail10.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Illegal expression": 1 + 2}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail11.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Illegal invocation": alert()}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail12.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Numbers cannot have leading zeroes": 013}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail13.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Numbers cannot be hex": 0x14}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail14.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Illegal backslash escape: \x15"]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail15.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[\naked]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail16.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Illegal backslash escape: \017"]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail17.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Comma instead if closing brace": true,
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail18.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Missing colon" null}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail19.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Double colon":: null}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{unquoted_key: "keys must be quoted"}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail20.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Comma instead of colon", null}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail21.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Colon instead of comma": false]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail22.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Bad value", truth]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail23.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
['single quote']
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail24.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[" tab character in string "]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail25.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["tab\ character\ in\ string\ "]
2 changes: 2 additions & 0 deletions test/integration/roles/test_uri/files/fail26.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
["line
break"]
2 changes: 2 additions & 0 deletions test/integration/roles/test_uri/files/fail27.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
["line\
break"]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail28.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[0e]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail29.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[0e+]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["extra comma",]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail30.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[0e+-1]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["double extra comma",,]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail5.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ , "<-- missing value"]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail6.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Comma after the close"],
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail7.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
["Extra close"]]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail8.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Extra comma": true,}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/fail9.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"Extra value after close": true} "misplaced quoted value"
58 changes: 58 additions & 0 deletions test/integration/roles/test_uri/files/pass0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
[
"JSON Test Pattern pass1",
{"object with 1 member":["array with 1 element"]},
{},
[],
-42,
true,
false,
null,
{
"integer": 1234567890,
"real": -9876.543210,
"e": 0.123456789e-12,
"E": 1.234567890E+34,
"": 23456789012E66,
"zero": 0,
"one": 1,
"space": " ",
"quote": "\"",
"backslash": "\\",
"controls": "\b\f\n\r\t",
"slash": "/ & \/",
"alpha": "abcdefghijklmnopqrstuvwyz",
"ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
"digit": "0123456789",
"0123456789": "digit",
"special": "`1~!@#$%^&*()_+-={':[,]}|;.</>?",
"hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
"true": true,
"false": false,
"null": null,
"array":[ ],
"object":{ },
"address": "50 St. James Street",
"url": "http://www.JSON.org/",
"comment": "// /* <!-- --",
"# -- --> */": " ",
" s p a c e d " :[1,2 , 3

,

4 , 5 , 6 ,7 ],"compact":[1,2,3,4,5,6,7],
"jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
"quotes": "&#34; \u0022 %22 0x22 034 &#x22;",
"\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
: "A key can be any string"
},
0.5 ,98.6
,
99.44
,

1066,
1e1,
0.1e1,
1e-1,
1e00,2e+00,2e-00
,"rosebud"]
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/pass1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
6 changes: 6 additions & 0 deletions test/integration/roles/test_uri/files/pass2.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"JSON Test Pattern pass3": {
"The outermost value": "must be an object or array.",
"In this test": "It is an object."
}
}
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/pass3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"A JSON payload should be an object or array, not a string."
1 change: 1 addition & 0 deletions test/integration/roles/test_uri/files/pass4.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
2 changes: 2 additions & 0 deletions test/integration/roles/test_uri/meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dependencies:
- prepare_tests
89 changes: 89 additions & 0 deletions test/integration/roles/test_uri/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# 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

- 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 }} -m SimpleHTTPServer {{ 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