107 lines
4.5 KiB
Python
107 lines
4.5 KiB
Python
# Copyright 2020 Red Hat, 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.
|
|
|
|
from unittest import mock
|
|
import uuid
|
|
|
|
from cinder import context
|
|
from cinder.tests.functional.api import client
|
|
from cinder.tests.functional import functional_helpers
|
|
|
|
|
|
class DefaultVolumeTypesTest(functional_helpers._FunctionalTestBase):
|
|
_vol_type_name = 'functional_test_type'
|
|
_osapi_version = '3.62'
|
|
|
|
def setUp(self):
|
|
super(DefaultVolumeTypesTest, self).setUp()
|
|
self.volume_type = self.api.create_type(self._vol_type_name)
|
|
self.project = self.FakeProject()
|
|
# Need to mock out Keystone so the functional tests don't require other
|
|
# services
|
|
_keystone_client = mock.MagicMock()
|
|
_keystone_client.version = 'v3'
|
|
_keystone_client.projects.get.side_effect = self._get_project
|
|
_keystone_client_get = mock.patch(
|
|
'cinder.api.api_utils._keystone_client',
|
|
lambda *args, **kwargs: _keystone_client)
|
|
_keystone_client_get.start()
|
|
self.addCleanup(_keystone_client_get.stop)
|
|
|
|
def _get_project(self, project_id, *args, **kwargs):
|
|
return self.project
|
|
|
|
class FakeProject(object):
|
|
def __init__(self, name=None):
|
|
self.id = uuid.uuid4().hex
|
|
self.name = name
|
|
self.description = 'fake project description'
|
|
self.domain_id = 'default'
|
|
|
|
@mock.patch.object(context.RequestContext, 'authorize')
|
|
def test_default_type_set(self, mock_authorize):
|
|
default_type = self.api.set_default_type(
|
|
self.project.id, {'volume_type': self._vol_type_name})
|
|
self.assertEqual(self.project.id, default_type['project_id'])
|
|
self.assertEqual(self.volume_type['id'],
|
|
default_type['volume_type_id'])
|
|
|
|
@mock.patch.object(context.RequestContext, 'authorize')
|
|
def test_default_type_get(self, mock_authorize):
|
|
self.api.set_default_type(self.project.id,
|
|
{'volume_type': self._vol_type_name})
|
|
default_type = self.api.get_default_type(project_id=self.project.id)
|
|
|
|
self.assertEqual(self.project.id, default_type['project_id'])
|
|
self.assertEqual(self.volume_type['id'],
|
|
default_type['volume_type_id'])
|
|
|
|
@mock.patch.object(context.RequestContext, 'authorize')
|
|
def test_default_type_get_all(self, mock_authorize):
|
|
self.api.set_default_type(self.project.id,
|
|
{'volume_type': self._vol_type_name})
|
|
default_types = self.api.get_default_type()
|
|
|
|
self.assertEqual(1, len(default_types))
|
|
self.assertEqual(self.project.id, default_types[0]['project_id'])
|
|
self.assertEqual(self.volume_type['id'],
|
|
default_types[0]['volume_type_id'])
|
|
|
|
@mock.patch.object(context.RequestContext, 'authorize')
|
|
def test_default_type_unset(self, mock_authorize):
|
|
self.api.set_default_type(self.project.id,
|
|
{'volume_type': self._vol_type_name})
|
|
|
|
default_types = self.api.get_default_type()
|
|
self.assertEqual(1, len(default_types))
|
|
self.api.unset_default_type(self.project.id)
|
|
default_types = self.api.get_default_type()
|
|
self.assertEqual(0, len(default_types))
|
|
|
|
@mock.patch.object(context.RequestContext, 'authorize')
|
|
def test_default_type_set_volume_type_not_found(self, mock_authorize):
|
|
self.assertRaises(client.OpenStackApiException400,
|
|
self.api.set_default_type,
|
|
self.project.id,
|
|
{'volume_type': 'fake_type'})
|
|
|
|
@mock.patch.object(context.RequestContext, 'authorize')
|
|
def test_cannot_delete_project_default_type(self, mock_authorize):
|
|
default_type = self.api.set_default_type(
|
|
self.project.id, {'volume_type': self._vol_type_name})
|
|
self.assertRaises(client.OpenStackApiException400,
|
|
self.api.delete_type,
|
|
default_type['volume_type_id'])
|