summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Tartaglia <me@andreatartaglia.com>2017-05-02 09:01:53 +0100
committerJohn R Barker <john@johnrbarker.com>2017-05-02 09:01:53 +0100
commit4e4fc9cb4cda6a8af13b50a8661358f77d3634c1 (patch)
tree86859988c08b511fc3ca95d69d7a1f656ee68f88
parent93de12884455f27d92a0e2bcaa21a446521060d8 (diff)
downloadansible-4e4fc9cb4cda6a8af13b50a8661358f77d3634c1.tar.gz
Added test for 'RETURN' field in validate-modules (#23322)
* Added test for 'RETURN' field in validate-modules * print the field being tested. Useful when the RETURN structure is complex. * Fixed schema after CI traceback fail * Fixed list_string_types * Fixed line in 319 code for RETURN
-rw-r--r--docs/docsite/rst/dev_guide/testing_validate-modules.rst2
-rw-r--r--test/sanity/validate-modules/schema.py27
-rwxr-xr-xtest/sanity/validate-modules/validate-modules8
3 files changed, 34 insertions, 3 deletions
diff --git a/docs/docsite/rst/dev_guide/testing_validate-modules.rst b/docs/docsite/rst/dev_guide/testing_validate-modules.rst
index fdd3e98c78..2499410487 100644
--- a/docs/docsite/rst/dev_guide/testing_validate-modules.rst
+++ b/docs/docsite/rst/dev_guide/testing_validate-modules.rst
@@ -132,6 +132,8 @@ Errors
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
| 318 | Module deprecated, but DOCUMENTATION.deprecated is missing |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
+| 319 | ``RETURN`` fragments missing or invalid |
++---------+--------------------------------------------------------------------------------------------------------------------------------------------+
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
| **4xx** | **Syntax** |
+---------+--------------------------------------------------------------------------------------------------------------------------------------------+
diff --git a/test/sanity/validate-modules/schema.py b/test/sanity/validate-modules/schema.py
index ffef4922a8..008e53bc06 100644
--- a/test/sanity/validate-modules/schema.py
+++ b/test/sanity/validate-modules/schema.py
@@ -57,6 +57,30 @@ option_schema = Schema(
# for example in Python 3: {str: option_schema}
list_dict_option_schema = [{str_type: option_schema} for str_type in string_types]
+
+def return_schema(data):
+
+ return_schema_dict = {
+ Required('description'): Any(list, *string_types),
+ Required('returned'): Any(*string_types),
+ Required('type'): Any('string', 'list', 'boolean', 'dict', 'complex', 'bool', 'float', 'int', 'dictionary', 'str'),
+ 'sample': Any(None, list, dict, int, float, *string_types),
+ 'example': Any(None, list, dict, int, float, *string_types)
+ }
+ if isinstance(data, dict):
+ if 'type' in data and (data['type'] == 'complex'):
+ # This will just check if the schema has a 'contains' value.
+ # It won't recursively validate the contents of the 'contains' field
+ additional_schema = {
+ Required('contains'): Any(dict, list, *string_types)
+ }
+ return_schema_dict.update(additional_schema)
+
+ return Schema(
+ return_schema_dict,
+ extra=PREVENT_EXTRA
+ )
+
def doc_schema(module_name):
if module_name.startswith('_'):
module_name = module_name[1:]
@@ -77,6 +101,7 @@ def doc_schema(module_name):
extra=PREVENT_EXTRA
)
+
def metadata_schema(deprecated):
valid_status = Any('stableinterface', 'preview', 'deprecated', 'removed')
if deprecated:
@@ -94,7 +119,7 @@ def metadata_schema(deprecated):
# Things to add soon
####################
-# 1) Validate RETURN, including `contains` if `type: complex`
+# 1) Recursively validate `type: complex` fields
# This will improve documentation, though require fair amount of module tidyup
# Possible Future Enhancements
diff --git a/test/sanity/validate-modules/validate-modules b/test/sanity/validate-modules/validate-modules
index 3f3f8bbc7e..717b7b9537 100755
--- a/test/sanity/validate-modules/validate-modules
+++ b/test/sanity/validate-modules/validate-modules
@@ -41,7 +41,7 @@ from ansible.utils.plugin_docs import BLACKLIST, get_docstring
from module_args import get_argument_spec
-from schema import doc_schema, option_schema, metadata_schema
+from schema import doc_schema, option_schema, metadata_schema, return_schema
from utils import CaptureStd, parse_yaml
from voluptuous.humanize import humanize_error
@@ -696,9 +696,13 @@ class ModuleValidator(Validator):
else:
self.warnings.append((312, 'No RETURN provided'))
else:
- _, errors, traces = parse_yaml(doc_info['RETURN']['value'],
+ data, errors, traces = parse_yaml(doc_info['RETURN']['value'],
doc_info['RETURN']['lineno'],
self.name, 'RETURN')
+
+ if data:
+ for ret_key in data:
+ self._validate_docs_schema(data[ret_key], return_schema(data[ret_key]), 'RETURN.%s' % ret_key, 319)
self.errors.extend([(313, error) for error in errors])
self.traces.extend(traces)