Merge "Implement query param schema for host index"
This commit is contained in:
commit
22a790ef45
|
@ -40,6 +40,7 @@ class HostController(wsgi.Controller):
|
|||
super(HostController, self).__init__()
|
||||
|
||||
@wsgi.Controller.api_version("2.1", "2.42")
|
||||
@validation.query_schema(hosts.index_query)
|
||||
@extensions.expected_errors(())
|
||||
def index(self, req):
|
||||
"""Returns a dict in the format
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from nova.api.validation import parameter_types
|
||||
|
||||
update = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
|
@ -34,3 +36,15 @@ update = {
|
|||
},
|
||||
'additionalProperties': False
|
||||
}
|
||||
|
||||
index_query = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'zone': parameter_types.multi_params({'type': 'string'})
|
||||
},
|
||||
# NOTE(gmann): This is kept True to keep backward compatibility.
|
||||
# As of now Schema validation stripped out the additional parameters and
|
||||
# does not raise 400. In the future, we may block the additional parameters
|
||||
# by bump in Microversion.
|
||||
'additionalProperties': True
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ import mock
|
|||
import testtools
|
||||
import webob.exc
|
||||
|
||||
from nova.api.openstack import api_version_request as api_version
|
||||
from nova.api.openstack.compute import hosts as os_hosts_v21
|
||||
from nova.compute import power_state
|
||||
from nova.compute import vm_states
|
||||
|
@ -129,12 +128,6 @@ def _create_instance_dict(**kwargs):
|
|||
return inst
|
||||
|
||||
|
||||
class FakeRequestWithNovaZone(object):
|
||||
environ = {"nova.context": context_maker.get_admin_context()}
|
||||
GET = {"zone": "nova"}
|
||||
api_version_request = api_version.APIVersionRequest('2.1')
|
||||
|
||||
|
||||
class HostTestCaseV21(test.TestCase):
|
||||
"""Test Case for hosts."""
|
||||
validation_ex = exception.ValidationError
|
||||
|
@ -178,6 +171,49 @@ class HostTestCaseV21(test.TestCase):
|
|||
hosts = result['hosts']
|
||||
self.assertEqual(fake_hosts.HOST_LIST, hosts)
|
||||
|
||||
def test_list_host_with_multi_filter(self):
|
||||
query_string = 'zone=nova1&zone=nova'
|
||||
req = fakes.HTTPRequest.blank('', use_admin_context=True,
|
||||
query_string=query_string)
|
||||
result = self.controller.index(req)
|
||||
self.assertIn('hosts', result)
|
||||
hosts = result['hosts']
|
||||
self.assertEqual(fake_hosts.HOST_LIST_NOVA_ZONE, hosts)
|
||||
|
||||
def test_list_host_query_allow_negative_int_as_string(self):
|
||||
req = fakes.HTTPRequest.blank('', use_admin_context=True,
|
||||
query_string='zone=-1')
|
||||
result = self.controller.index(req)
|
||||
self.assertIn('hosts', result)
|
||||
hosts = result['hosts']
|
||||
self.assertEqual([], hosts)
|
||||
|
||||
def test_list_host_query_allow_int_as_string(self):
|
||||
req = fakes.HTTPRequest.blank('', use_admin_context=True,
|
||||
query_string='zone=123')
|
||||
result = self.controller.index(req)
|
||||
self.assertIn('hosts', result)
|
||||
hosts = result['hosts']
|
||||
self.assertEqual([], hosts)
|
||||
|
||||
def test_list_host_with_unknown_filter(self):
|
||||
query_string = 'unknown_filter=abc'
|
||||
req = fakes.HTTPRequest.blank('', use_admin_context=True,
|
||||
query_string=query_string)
|
||||
result = self.controller.index(req)
|
||||
self.assertIn('hosts', result)
|
||||
hosts = result['hosts']
|
||||
self.assertEqual(fake_hosts.HOST_LIST, hosts)
|
||||
|
||||
def test_list_host_with_hypervisor_and_additional_filter(self):
|
||||
query_string = 'zone=nova&additional_filter=nova2'
|
||||
req = fakes.HTTPRequest.blank('', use_admin_context=True,
|
||||
query_string=query_string)
|
||||
result = self.controller.index(req)
|
||||
self.assertIn('hosts', result)
|
||||
hosts = result['hosts']
|
||||
self.assertEqual(fake_hosts.HOST_LIST_NOVA_ZONE, hosts)
|
||||
|
||||
def test_disable_host(self):
|
||||
self._test_host_update('host_c1', 'status', 'disable', 'disabled')
|
||||
self._test_host_update('host_c2', 'status', 'disable', 'enabled')
|
||||
|
@ -383,7 +419,10 @@ class HostTestCaseV21(test.TestCase):
|
|||
self.controller.show, self.req, s_ref['host'])
|
||||
|
||||
def test_list_hosts_with_zone(self):
|
||||
result = self.controller.index(FakeRequestWithNovaZone())
|
||||
query_string = 'zone=nova'
|
||||
req = fakes.HTTPRequest.blank('', use_admin_context=True,
|
||||
query_string=query_string)
|
||||
result = self.controller.index(req)
|
||||
self.assertIn('hosts', result)
|
||||
hosts = result['hosts']
|
||||
self.assertEqual(fake_hosts.HOST_LIST_NOVA_ZONE, hosts)
|
||||
|
|
Loading…
Reference in New Issue