950e693697
Fix the UUID entry for the newly added service attribute and udpate the unit tests appropriately. This makes the UUID entry in the service object not nullable and fixes up the unit tests to work properly. Also introduces a unit test specifically for the online migration api in the db. Closes-Bug: #1727091 Change-Id: I17d3a873cfc8f056c2d31f6c8710489785998d3c
135 lines
5.1 KiB
Python
135 lines
5.1 KiB
Python
# Copyright (c) 2015 Hitachi Data Systems, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import mock
|
|
|
|
import oslo_messaging
|
|
|
|
from cinder.api.contrib import capabilities
|
|
from cinder import context
|
|
from cinder import exception
|
|
from cinder import test
|
|
from cinder.tests.unit.api import fakes
|
|
from cinder.tests.unit import fake_constants as fake
|
|
|
|
|
|
def rpcapi_get_capabilities(self, context, host, discover):
|
|
capabilities = dict(
|
|
vendor_name='OpenStack',
|
|
volume_backend_name='lvm',
|
|
pool_name='pool',
|
|
driver_version='2.0.0',
|
|
storage_protocol='iSCSI',
|
|
display_name='Capabilities of Cinder LVM driver',
|
|
description='These are volume type options provided by '
|
|
'Cinder LVM driver, blah, blah.',
|
|
replication_targets=[],
|
|
visibility='public',
|
|
properties=dict(
|
|
compression=dict(
|
|
title='Compression',
|
|
description='Enables compression.',
|
|
type='boolean'),
|
|
qos=dict(
|
|
title='QoS',
|
|
description='Enables QoS.',
|
|
type='boolean'),
|
|
replication=dict(
|
|
title='Replication',
|
|
description='Enables replication.',
|
|
type='boolean'),
|
|
thin_provisioning=dict(
|
|
title='Thin Provisioning',
|
|
description='Sets thin provisioning.',
|
|
type='boolean'),
|
|
)
|
|
)
|
|
return capabilities
|
|
|
|
|
|
class CapabilitiesAPITest(test.TestCase):
|
|
def setUp(self):
|
|
super(CapabilitiesAPITest, self).setUp()
|
|
self.flags(host='fake')
|
|
self.controller = capabilities.CapabilitiesController()
|
|
self.ctxt = context.RequestContext(fake.USER_ID, fake.PROJECT_ID, True)
|
|
|
|
@mock.patch('cinder.db.service_get_all')
|
|
@mock.patch('cinder.volume.rpcapi.VolumeAPI.get_capabilities',
|
|
rpcapi_get_capabilities)
|
|
def test_capabilities_summary(self, mock_services):
|
|
mock_services.return_value = [
|
|
{'name': 'fake', 'host': 'fake_host',
|
|
'uuid': 'a3a593da-7f8d-4bb7-8b4c-f2bc1e0b4824'}]
|
|
req = fakes.HTTPRequest.blank('/fake/capabilities/fake')
|
|
req.environ['cinder.context'] = self.ctxt
|
|
res = self.controller.show(req, 'fake')
|
|
|
|
expected = {
|
|
'namespace': 'OS::Storage::Capabilities::fake_host',
|
|
'vendor_name': 'OpenStack',
|
|
'volume_backend_name': 'lvm',
|
|
'pool_name': 'pool',
|
|
'driver_version': '2.0.0',
|
|
'storage_protocol': 'iSCSI',
|
|
'display_name': 'Capabilities of Cinder LVM driver',
|
|
'description': 'These are volume type options provided by '
|
|
'Cinder LVM driver, blah, blah.',
|
|
'visibility': 'public',
|
|
'replication_targets': [],
|
|
'properties': {
|
|
'compression': {
|
|
'title': 'Compression',
|
|
'description': 'Enables compression.',
|
|
'type': 'boolean'},
|
|
'qos': {
|
|
'title': 'QoS',
|
|
'description': 'Enables QoS.',
|
|
'type': 'boolean'},
|
|
'replication': {
|
|
'title': 'Replication',
|
|
'description': 'Enables replication.',
|
|
'type': 'boolean'},
|
|
'thin_provisioning': {
|
|
'title': 'Thin Provisioning',
|
|
'description': 'Sets thin provisioning.',
|
|
'type': 'boolean'},
|
|
}
|
|
}
|
|
|
|
self.assertDictEqual(expected, res)
|
|
|
|
@mock.patch('cinder.db.service_get_all')
|
|
@mock.patch('cinder.volume.rpcapi.VolumeAPI.get_capabilities')
|
|
def test_get_capabilities_rpc_timeout(self, mock_rpc, mock_services):
|
|
mock_rpc.side_effect = oslo_messaging.MessagingTimeout
|
|
mock_services.return_value = [
|
|
{'name': 'fake',
|
|
'uuid': 'a3a593da-7f8d-4bb7-8b4c-f2bc1e0b4824'}]
|
|
|
|
req = fakes.HTTPRequest.blank('/fake/capabilities/fake')
|
|
req.environ['cinder.context'] = self.ctxt
|
|
self.assertRaises(exception.RPCTimeout,
|
|
self.controller.show, req, 'fake')
|
|
|
|
@mock.patch('cinder.db.service_get_all')
|
|
def test_get_capabilities_service_not_found(self, mock_services):
|
|
mock_services.return_value = []
|
|
|
|
req = fakes.HTTPRequest.blank('/fake/capabilities/fake')
|
|
req.environ['cinder.context'] = self.ctxt
|
|
self.assertRaises(exception.NotFound,
|
|
self.controller.show, req, 'fake')
|