Use rfc3986 library to validate URL paths and URIs
More work needs to be done in rfc3986 to give the user more control over what they consider to be a valid URI in the context of RFC 3986. For example, a previous incarnation of these tests checked that "1" and "abc" were invalid when according to the RFC they are. Update the API samples and tests to use valid URIs DocImpact Change-Id: I288fbaead64990db1053b7a11e82904611b8498f
This commit is contained in:
@@ -5,6 +5,6 @@
|
||||
"architecture": "x86",
|
||||
"version": "8.0",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"url": "xxxxxxxxxxxx"
|
||||
"url": "http://example.com/path/to/resource"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -5,5 +5,5 @@
|
||||
<architecture>x86</architecture>
|
||||
<version>8.0</version>
|
||||
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
|
||||
<url>xxxxxxxxxxxx</url>
|
||||
</agent>
|
||||
<url>http://example.com/path/to/resource</url>
|
||||
</agent>
|
||||
|
@@ -5,7 +5,7 @@
|
||||
"hypervisor": "hypervisor",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"os": "os",
|
||||
"url": "xxxxxxxxxxxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "8.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,10 +1,10 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<agent>
|
||||
<url>xxxxxxxxxxxx</url>
|
||||
<url>http://example.com/path/to/resource</url>
|
||||
<hypervisor>hypervisor</hypervisor>
|
||||
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
|
||||
<version>8.0</version>
|
||||
<architecture>x86</architecture>
|
||||
<os>os</os>
|
||||
<agent_id>1</agent_id>
|
||||
</agent>
|
||||
</agent>
|
||||
|
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"para": {
|
||||
"url": "xxx://xxxx/xxx/xxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"version": "7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<para>
|
||||
<version>7.0</version>
|
||||
<url>xxx://xxxx/xxx/xxx</url>
|
||||
<url>http://example.com/path/to/resource</url>
|
||||
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
|
||||
</para>
|
||||
</para>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"agent": {
|
||||
"agent_id": "1",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"url": "xxx://xxxx/xxx/xxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<agent>
|
||||
<url>xxx://xxxx/xxx/xxx</url>
|
||||
<url>http://example.com/path/to/resource</url>
|
||||
<version>7.0</version>
|
||||
<agent_id>1</agent_id>
|
||||
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
|
||||
</agent>
|
||||
</agent>
|
||||
|
@@ -6,8 +6,8 @@
|
||||
"hypervisor": "hypervisor",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"os": "os",
|
||||
"url": "xxxxxxxxxxxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "8.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<agents>
|
||||
<agent url="xxxxxxxxxxxx" hypervisor="hypervisor" md5hash="add6bb58e139be103324d04d82d8f545" version="8.0" architecture="x86" os="os" agent_id="1"/>
|
||||
</agents>
|
||||
<agent url="http://example.com/path/to/resource" hypervisor="hypervisor" md5hash="add6bb58e139be103324d04d82d8f545" version="8.0" architecture="x86" os="os" agent_id="1"/>
|
||||
</agents>
|
||||
|
@@ -5,6 +5,6 @@
|
||||
"architecture": "x86",
|
||||
"version": "8.0",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"url": "xxxxxxxxxxxx"
|
||||
"url": "http://example.com/path/to/resource"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -5,7 +5,7 @@
|
||||
"hypervisor": "hypervisor",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"os": "os",
|
||||
"url": "xxxxxxxxxxxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "8.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"agent": {
|
||||
"url": "xxx://xxxx/xxx/xxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"version": "7.0"
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"agent": {
|
||||
"agent_id": 1,
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"url": "xxx://xxxx/xxx/xxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,8 +6,8 @@
|
||||
"hypervisor": "hypervisor",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"os": "os",
|
||||
"url": "xxxxxxxxxxxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "8.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@@ -17,6 +17,7 @@ Internal implementation of request Body validating middleware.
|
||||
"""
|
||||
|
||||
import jsonschema
|
||||
import rfc3986
|
||||
import six
|
||||
|
||||
from nova import exception
|
||||
@@ -40,6 +41,12 @@ def _validate_uuid_format(instance):
|
||||
return uuidutils.is_uuid_like(instance)
|
||||
|
||||
|
||||
@jsonschema.FormatChecker.cls_checks('uri')
|
||||
def _validate_uri(instance):
|
||||
return rfc3986.is_valid_uri(instance, require_scheme=True,
|
||||
require_authority=True)
|
||||
|
||||
|
||||
class _SchemaValidator(object):
|
||||
"""A validator class
|
||||
|
||||
|
@@ -14,8 +14,8 @@
|
||||
# under the License.
|
||||
|
||||
import base64
|
||||
import re
|
||||
|
||||
import rfc3986
|
||||
import six
|
||||
|
||||
from nova.openstack.common import log as logging
|
||||
@@ -24,21 +24,6 @@ from nova.openstack.common import log as logging
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _get_path_validator_regex():
|
||||
# rfc3986 path validator regex from
|
||||
# http://jmrware.com/articles/2009/uri_regexp/URI_regex.html
|
||||
pchar = "([A-Za-z0-9\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})"
|
||||
path = "((/{pchar}*)*|"
|
||||
path += "/({pchar}+(/{pchar}*)*)?|"
|
||||
path += "{pchar}+(/{pchar}*)*|"
|
||||
path += "{pchar}+(/{pchar}*)*|)"
|
||||
path = path.format(pchar=pchar)
|
||||
return re.compile(path)
|
||||
|
||||
|
||||
VALIDATE_PATH_RE = _get_path_validator_regex()
|
||||
|
||||
|
||||
def validate_str(max_length=None):
|
||||
|
||||
def _do(val):
|
||||
@@ -69,7 +54,9 @@ def validate_url_path(val):
|
||||
if not validate_str()(val):
|
||||
return False
|
||||
|
||||
return VALIDATE_PATH_RE.match(val).end() == len(val)
|
||||
uri = rfc3986.URIReference(None, None, val, None, None)
|
||||
|
||||
return uri.path_is_valid() and val.startswith('/')
|
||||
|
||||
|
||||
def validate_image_path(val):
|
||||
|
@@ -24,25 +24,25 @@ from nova import test
|
||||
fake_agents_list = [{'hypervisor': 'kvm', 'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'id': 1},
|
||||
{'hypervisor': 'kvm', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx1',
|
||||
'url': 'http://example.com/path/to/resource1',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f546',
|
||||
'id': 2},
|
||||
{'hypervisor': 'xen', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx2',
|
||||
'url': 'http://example.com/path/to/resource2',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f547',
|
||||
'id': 3},
|
||||
{'hypervisor': 'xen', 'os': 'win',
|
||||
'architecture': 'power',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx3',
|
||||
'url': 'http://example.com/path/to/resource3',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f548',
|
||||
'id': 4},
|
||||
]
|
||||
@@ -106,13 +106,13 @@ class AgentsTest(test.NoDBTestCase):
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
response = {'agent': {'hypervisor': 'kvm',
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'agent_id': 1}}
|
||||
res_dict = self.controller.create(req, body)
|
||||
@@ -151,7 +151,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
body['agent'][key] = 'x' * 256
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
@@ -185,25 +185,25 @@ class AgentsTest(test.NoDBTestCase):
|
||||
agents_list = [{'hypervisor': 'kvm', 'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'agent_id': 1},
|
||||
{'hypervisor': 'kvm', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx1',
|
||||
'url': 'http://example.com/path/to/resource1',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f546',
|
||||
'agent_id': 2},
|
||||
{'hypervisor': 'xen', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx2',
|
||||
'url': 'http://example.com/path/to/resource2',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f547',
|
||||
'agent_id': 3},
|
||||
{'hypervisor': 'xen', 'os': 'win',
|
||||
'architecture': 'power',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx3',
|
||||
'url': 'http://example.com/path/to/resource3',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f548',
|
||||
'agent_id': 4},
|
||||
]
|
||||
@@ -215,13 +215,13 @@ class AgentsTest(test.NoDBTestCase):
|
||||
response = [{'hypervisor': 'kvm', 'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'agent_id': 1},
|
||||
{'hypervisor': 'kvm', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx1',
|
||||
'url': 'http://example.com/path/to/resource1',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f546',
|
||||
'agent_id': 2},
|
||||
]
|
||||
@@ -230,11 +230,11 @@ class AgentsTest(test.NoDBTestCase):
|
||||
def test_agents_update(self):
|
||||
req = FakeRequest()
|
||||
body = {'para': {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
response = {'agent': {'agent_id': 1,
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
res_dict = self.controller.update(req, 1, body)
|
||||
self.assertEqual(res_dict, response)
|
||||
@@ -258,7 +258,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
def _test_agents_update_with_invalid_length(self, key):
|
||||
req = FakeRequest()
|
||||
body = {'para': {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
body['para'][key] = 'x' * 256
|
||||
self.assertRaises(webob.exc.HTTPBadRequest,
|
||||
|
@@ -23,25 +23,25 @@ from nova import test
|
||||
fake_agents_list = [{'hypervisor': 'kvm', 'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'id': 1},
|
||||
{'hypervisor': 'kvm', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx1',
|
||||
'url': 'http://example.com/path/to/resource1',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f546',
|
||||
'id': 2},
|
||||
{'hypervisor': 'xen', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx2',
|
||||
'url': 'http://example.com/path/to/resource2',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f547',
|
||||
'id': 3},
|
||||
{'hypervisor': 'xen', 'os': 'win',
|
||||
'architecture': 'power',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx3',
|
||||
'url': 'http://example.com/path/to/resource3',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f548',
|
||||
'id': 4},
|
||||
]
|
||||
@@ -109,13 +109,13 @@ class AgentsTest(test.NoDBTestCase):
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
response = {'agent': {'hypervisor': 'kvm',
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'agent_id': 1}}
|
||||
res_dict = self.controller.create(req, body=body)
|
||||
@@ -130,7 +130,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
self.assertRaises(exc.HTTPConflict, self.controller.create, req,
|
||||
body=body)
|
||||
@@ -141,7 +141,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx'}}
|
||||
'url': 'http://example.com/path/to/resource'}}
|
||||
self.assertRaises(exception.ValidationError, self.controller.create,
|
||||
req, body=body)
|
||||
|
||||
@@ -160,7 +160,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
body = {'agent': {'hypervisor': 'kvm',
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
self.assertRaises(exception.ValidationError, self.controller.create,
|
||||
req, body=body)
|
||||
@@ -170,7 +170,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
body = {'agent': {'hypervisor': 'kvm',
|
||||
'os': 'win',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
self.assertRaises(exception.ValidationError, self.controller.create,
|
||||
req, body=body)
|
||||
@@ -180,7 +180,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
body = {'agent': {'hypervisor': 'kvm',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
self.assertRaises(exception.ValidationError, self.controller.create,
|
||||
req, body=body)
|
||||
@@ -190,7 +190,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
body = {'agent': {'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
self.assertRaises(exception.ValidationError, self.controller.create,
|
||||
req, body=body)
|
||||
@@ -213,7 +213,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
body['agent'][key] = 'x' * 256
|
||||
self.assertRaises(exception.ValidationError, self.controller.create,
|
||||
@@ -247,25 +247,25 @@ class AgentsTest(test.NoDBTestCase):
|
||||
agents_list = [{'hypervisor': 'kvm', 'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'agent_id': 1},
|
||||
{'hypervisor': 'kvm', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx1',
|
||||
'url': 'http://example.com/path/to/resource1',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f546',
|
||||
'agent_id': 2},
|
||||
{'hypervisor': 'xen', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx2',
|
||||
'url': 'http://example.com/path/to/resource2',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f547',
|
||||
'agent_id': 3},
|
||||
{'hypervisor': 'xen', 'os': 'win',
|
||||
'architecture': 'power',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx3',
|
||||
'url': 'http://example.com/path/to/resource3',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f548',
|
||||
'agent_id': 4},
|
||||
]
|
||||
@@ -277,13 +277,13 @@ class AgentsTest(test.NoDBTestCase):
|
||||
response = [{'hypervisor': 'kvm', 'os': 'win',
|
||||
'architecture': 'x86',
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545',
|
||||
'agent_id': 1},
|
||||
{'hypervisor': 'kvm', 'os': 'linux',
|
||||
'architecture': 'x86',
|
||||
'version': '16.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx1',
|
||||
'url': 'http://example.com/path/to/resource1',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f546',
|
||||
'agent_id': 2},
|
||||
]
|
||||
@@ -292,11 +292,11 @@ class AgentsTest(test.NoDBTestCase):
|
||||
def test_agents_update(self):
|
||||
req = FakeRequest()
|
||||
body = {'agent': {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
response = {'agent': {'agent_id': 1,
|
||||
'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
res_dict = self.controller.update(req, 1, body=body)
|
||||
self.assertEqual(res_dict, response)
|
||||
@@ -304,7 +304,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
def test_agents_update_without_md5hash(self):
|
||||
req = FakeRequest()
|
||||
body = {'agent': {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx'}}
|
||||
'url': 'http://example.com/path/to/resource'}}
|
||||
self.assertRaises(exception.ValidationError, self.controller.update,
|
||||
req, 1, body=body)
|
||||
|
||||
@@ -335,7 +335,7 @@ class AgentsTest(test.NoDBTestCase):
|
||||
def _test_agents_update_with_invalid_length(self, key):
|
||||
req = FakeRequest()
|
||||
body = {'agent': {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}}
|
||||
body['agent'][key] = 'x' * 256
|
||||
self.assertRaises(exception.ValidationError, self.controller.update,
|
||||
|
@@ -1378,7 +1378,7 @@ class AgentsJsonTest(ApiSampleTestBaseV2):
|
||||
def setUp(self):
|
||||
super(AgentsJsonTest, self).setUp()
|
||||
|
||||
fake_agents_list = [{'url': 'xxxxxxxxxxxx',
|
||||
fake_agents_list = [{'url': 'http://example.com/path/to/resource',
|
||||
'hypervisor': 'hypervisor',
|
||||
'architecture': 'x86',
|
||||
'os': 'os',
|
||||
@@ -1419,7 +1419,7 @@ class AgentsJsonTest(ApiSampleTestBaseV2):
|
||||
|
||||
def test_agent_create(self):
|
||||
# Creates a new agent build.
|
||||
project = {'url': 'xxxxxxxxxxxx',
|
||||
project = {'url': 'http://example.com/path/to/resource',
|
||||
'hypervisor': 'hypervisor',
|
||||
'architecture': 'x86',
|
||||
'os': 'os',
|
||||
@@ -1435,7 +1435,7 @@ class AgentsJsonTest(ApiSampleTestBaseV2):
|
||||
def test_agent_list(self):
|
||||
# Return a list of all agent builds.
|
||||
response = self._do_get('os-agents')
|
||||
project = {'url': 'xxxxxxxxxxxx',
|
||||
project = {'url': 'http://example.com/path/to/resource',
|
||||
'hypervisor': 'hypervisor',
|
||||
'architecture': 'x86',
|
||||
'os': 'os',
|
||||
@@ -1449,7 +1449,7 @@ class AgentsJsonTest(ApiSampleTestBaseV2):
|
||||
# Update an existing agent build.
|
||||
agent_id = 1
|
||||
subs = {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}
|
||||
response = self._do_put('os-agents/%s' % agent_id,
|
||||
'agent-update-put-req', subs)
|
||||
|
@@ -5,7 +5,7 @@
|
||||
"hypervisor": "hypervisor",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"os": "os",
|
||||
"url": "xxxxxxxxxxxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "8.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
"agent": {
|
||||
"agent_id": 1,
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"url": "xxx://xxxx/xxx/xxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "7.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,8 +6,8 @@
|
||||
"hypervisor": "hypervisor",
|
||||
"md5hash": "add6bb58e139be103324d04d82d8f545",
|
||||
"os": "os",
|
||||
"url": "xxxxxxxxxxxx",
|
||||
"url": "http://example.com/path/to/resource",
|
||||
"version": "8.0"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
@@ -24,7 +24,7 @@ class AgentsJsonTest(api_sample_base.ApiSampleTestBaseV3):
|
||||
def setUp(self):
|
||||
super(AgentsJsonTest, self).setUp()
|
||||
|
||||
fake_agents_list = [{'url': 'xxxxxxxxxxxx',
|
||||
fake_agents_list = [{'url': 'http://example.com/path/to/resource',
|
||||
'hypervisor': 'hypervisor',
|
||||
'architecture': 'x86',
|
||||
'os': 'os',
|
||||
@@ -65,7 +65,7 @@ class AgentsJsonTest(api_sample_base.ApiSampleTestBaseV3):
|
||||
|
||||
def test_agent_create(self):
|
||||
# Creates a new agent build.
|
||||
project = {'url': 'xxxxxxxxxxxx',
|
||||
project = {'url': 'http://example.com/path/to/resource',
|
||||
'hypervisor': 'hypervisor',
|
||||
'architecture': 'x86',
|
||||
'os': 'os',
|
||||
@@ -85,7 +85,7 @@ class AgentsJsonTest(api_sample_base.ApiSampleTestBaseV3):
|
||||
# Update an existing agent build.
|
||||
agent_id = 1
|
||||
subs = {'version': '7.0',
|
||||
'url': 'xxx://xxxx/xxx/xxx',
|
||||
'url': 'http://example.com/path/to/resource',
|
||||
'md5hash': 'add6bb58e139be103324d04d82d8f545'}
|
||||
response = self._do_put('os-agents/%s' % agent_id,
|
||||
'agent-update-put-req', subs)
|
||||
|
@@ -692,6 +692,64 @@ class UuidTestCase(APIValidationTestCase):
|
||||
expected_detail=detail)
|
||||
|
||||
|
||||
class UriTestCase(APIValidationTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(UriTestCase, self).setUp()
|
||||
schema = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'foo': {
|
||||
'type': 'string',
|
||||
'format': 'uri',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@validation.schema(request_body_schema=schema)
|
||||
def post(body):
|
||||
return 'Validation succeeded.'
|
||||
|
||||
self.post = post
|
||||
|
||||
def test_validate_uri(self):
|
||||
self.assertEqual('Validation succeeded.',
|
||||
self.post(
|
||||
body={'foo': 'http://localhost:8774/v2/servers'}
|
||||
))
|
||||
self.assertEqual('Validation succeeded.',
|
||||
self.post(
|
||||
body={'foo': 'http://[::1]:8774/v2/servers'}
|
||||
))
|
||||
|
||||
def test_validate_uri_fails(self):
|
||||
base_detail = ("Invalid input for field/attribute foo. Value: {0}. "
|
||||
"'{0}' is not a 'uri'")
|
||||
invalid_uri = 'http://localhost:8774/v2/servers##'
|
||||
self.check_validation_error(self.post,
|
||||
body={'foo': invalid_uri},
|
||||
expected_detail=base_detail.format(
|
||||
invalid_uri))
|
||||
|
||||
invalid_uri = 'http://[fdf8:01]:8774/v2/servers'
|
||||
self.check_validation_error(self.post,
|
||||
body={'foo': invalid_uri},
|
||||
expected_detail=base_detail.format(
|
||||
invalid_uri))
|
||||
|
||||
invalid_uri = '1'
|
||||
self.check_validation_error(self.post,
|
||||
body={'foo': invalid_uri},
|
||||
expected_detail=base_detail.format(
|
||||
invalid_uri))
|
||||
|
||||
invalid_uri = 'abc'
|
||||
self.check_validation_error(self.post,
|
||||
body={'foo': invalid_uri},
|
||||
expected_detail=base_detail.format(
|
||||
invalid_uri))
|
||||
|
||||
|
||||
class Ipv4TestCase(APIValidationTestCase):
|
||||
|
||||
def setUp(self):
|
||||
|
@@ -37,3 +37,4 @@ pycadf>=0.5.1
|
||||
oslo.messaging>=1.4.0.0a3
|
||||
oslo.i18n>=0.1.0 # Apache-2.0
|
||||
lockfile>=0.8
|
||||
rfc3986>=0.2.0 # Apache-2.0
|
||||
|
Reference in New Issue
Block a user