Merge "Transform share and share servers statuses to lowercase"

This commit is contained in:
Jenkins 2015-06-03 15:27:27 +00:00 committed by Gerrit Code Review
commit 2d1dacfdaf
18 changed files with 326 additions and 221 deletions

View File

@ -125,7 +125,7 @@ class ManageNFSShareTest(base.BaseSharesAdminTest):
def test_manage_retry(self):
# Manage share with invalid parameters
share = None
parameters = [(self.st_invalid['share_type']['id'], 'MANAGE_ERROR'),
parameters = [(self.st_invalid['share_type']['id'], 'manage_error'),
(self.st['share_type']['id'], 'available')]
for share_type_id, status in parameters:

View File

@ -18,6 +18,7 @@ from webob import exc
from manila.api import extensions
from manila.api.openstack import wsgi
from manila.common import constants
from manila import db
from manila import exception
from manila import share
@ -31,11 +32,11 @@ class AdminController(wsgi.Controller):
collection = None
valid_status = set([
'creating',
'available',
'deleting',
'error',
'error_deleting',
constants.STATUS_CREATING,
constants.STATUS_AVAILABLE,
constants.STATUS_DELETING,
constants.STATUS_ERROR,
constants.STATUS_ERROR_DELETING,
])
def __init__(self, *args, **kwargs):
@ -85,7 +86,7 @@ class AdminController(wsgi.Controller):
@wsgi.action('os-force_delete')
def _force_delete(self, req, id, body):
"""Delete a resource, bypassing the check that it must be available."""
"""Delete a resource, bypassing the check for status."""
context = req.environ['manila.context']
self.authorize(context, 'force_delete')
try:

View File

@ -50,9 +50,7 @@ class ShareUnmanageController(wsgi.Controller):
"that are created on top of share servers "
"(created with share-networks).")
raise exc.HTTPForbidden(explanation=msg)
# NOTE(vponomaryov): use 'upper' translation because share
# statuses not always used from common place yet.
elif share['status'].upper() in constants.TRANSITIONAL_STATUSES:
elif share['status'] in constants.TRANSITIONAL_STATUSES:
msg = _("Share with transitional state can not be unmanaged. "
"Share '%(s_id)s' is in '%(state)s' state.") % dict(
state=share['status'], s_id=share['id'])

View File

@ -13,28 +13,25 @@
# License for the specific language governing permissions and limitations
# under the License.
STATUS_NEW = 'NEW'
STATUS_CREATING = 'CREATING'
STATUS_DELETING = 'DELETING'
STATUS_DELETED = 'DELETED'
STATUS_ERROR = 'ERROR'
STATUS_ERROR_DELETING = 'ERROR_DELETING'
STATUS_AVAILABLE = 'AVAILABLE'
STATUS_ACTIVE = 'ACTIVE'
STATUS_INACTIVE = 'INACTIVE'
STATUS_ACTIVATING = 'ACTIVATING'
STATUS_DEACTIVATING = 'DEACTIVATING'
STATUS_MANAGING = 'MANAGE_STARTING'
STATUS_MANAGE_ERROR = 'MANAGE_ERROR'
STATUS_UNMANAGING = 'UNMANAGE_STARTING'
STATUS_UNMANAGE_ERROR = 'UNMANAGE_ERROR'
STATUS_UNMANAGED = 'UNMANAGED'
STATUS_EXTENDING = 'EXTENDING'
STATUS_EXTENDING_ERROR = 'EXTENDING_ERROR'
STATUS_NEW = 'new'
STATUS_CREATING = 'creating'
STATUS_DELETING = 'deleting'
STATUS_DELETED = 'deleted'
STATUS_ERROR = 'error'
STATUS_ERROR_DELETING = 'error_deleting'
STATUS_AVAILABLE = 'available'
STATUS_ACTIVE = 'active'
STATUS_INACTIVE = 'inactive'
STATUS_MANAGING = 'manage_starting'
STATUS_MANAGE_ERROR = 'manage_error'
STATUS_UNMANAGING = 'unmanage_starting'
STATUS_UNMANAGE_ERROR = 'unmanage_error'
STATUS_UNMANAGED = 'unmanaged'
STATUS_EXTENDING = 'extending'
STATUS_EXTENDING_ERROR = 'extending_error'
TRANSITIONAL_STATUSES = (
STATUS_CREATING, STATUS_DELETING,
STATUS_ACTIVATING, STATUS_DEACTIVATING,
STATUS_MANAGING, STATUS_UNMANAGING,
STATUS_EXTENDING,
)

View File

@ -0,0 +1,53 @@
# Copyright 2015 Mirantis 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.
"""Transform statuses to lowercase
Revision ID: 3db9992c30f3
Revises: 533646c7af38
Create Date: 2015-05-28 19:30:35.645773
"""
# revision identifiers, used by Alembic.
revision = '3db9992c30f3'
down_revision = '533646c7af38'
from alembic import op
import sqlalchemy as sa
from manila.db.sqlalchemy import models
def upgrade():
# NOTE(vponomaryov): shares has some statuses as uppercase, so
# transform them in addition to statuses of share servers.
for model in (models.Share, models.ShareServer):
_transform_case(model, make_upper=False)
def downgrade():
# NOTE(vponomaryov): transform share server statuses to uppercase and
# leave share statuses as is.
_transform_case(models.ShareServer, make_upper=True)
def _transform_case(model, make_upper):
connection = op.get_bind()
session = sa.orm.Session(bind=connection.connect())
case = sa.func.upper if make_upper else sa.func.lower
session.query(model).update(
{model.status: case(model.status)}, synchronize_session='fetch')
session.commit()

View File

@ -284,11 +284,11 @@ class ShareMetadata(BASE, ManilaBase):
class ShareAccessMapping(BASE, ManilaBase):
"""Represents access to NFS."""
STATE_NEW = 'new'
STATE_ACTIVE = 'active'
STATE_DELETING = 'deleting'
STATE_DELETED = 'deleted'
STATE_ERROR = 'error'
STATE_NEW = constants.STATUS_NEW
STATE_ACTIVE = constants.STATUS_ACTIVE
STATE_DELETING = constants.STATUS_DELETING
STATE_DELETED = constants.STATUS_DELETED
STATE_ERROR = constants.STATUS_ERROR
__tablename__ = 'share_access_map'
id = Column(String(36), primary_key=True)

View File

@ -73,8 +73,8 @@ class API(base.Base):
self._check_metadata_properties(context, metadata)
if snapshot is not None:
if snapshot['status'] != 'available':
msg = _("status must be 'available'")
if snapshot['status'] != constants.STATUS_AVAILABLE:
msg = _("status must be '%s'") % constants.STATUS_AVAILABLE
raise exception.InvalidShareSnapshot(reason=msg)
if not size:
size = snapshot['size']
@ -175,7 +175,7 @@ class API(base.Base):
'share_network_id': share_network_id,
'availability_zone': availability_zone,
'metadata': metadata,
'status': "creating",
'status': constants.STATUS_CREATING,
'scheduled_at': timeutils.utcnow(),
'display_name': name,
'display_description': description,
@ -306,8 +306,10 @@ class API(base.Base):
QUOTAS.commit(context, reservations, project_id=project_id)
return
if not (force or share['status'] in ["available", "error"]):
msg = _("Share status must be available or error")
statuses = (constants.STATUS_AVAILABLE, constants.STATUS_ERROR)
if not (force or share['status'] in statuses):
msg = _("Share status must be one of %(statuses)s") % {
"statuses": statuses}
raise exception.InvalidShare(reason=msg)
snapshots = self.db.share_snapshot_get_all_for_share(context, share_id)
@ -316,8 +318,9 @@ class API(base.Base):
raise exception.InvalidShare(reason=msg)
now = timeutils.utcnow()
share = self.db.share_update(context, share_id, {'status': 'deleting',
'terminated_at': now})
share = self.db.share_update(
context, share_id, {'status': constants.STATUS_DELETING,
'terminated_at': now})
self.share_rpcapi.delete_share(context, share)
@ -350,8 +353,9 @@ class API(base.Base):
force=False):
policy.check_policy(context, 'share', 'create_snapshot', share)
if ((not force) and (share['status'] != "available")):
msg = _("must be available")
if ((not force) and (share['status'] != constants.STATUS_AVAILABLE)):
msg = _("Source share status must be "
"%s") % constants.STATUS_AVAILABLE
raise exception.InvalidShare(reason=msg)
size = share['size']
@ -388,7 +392,7 @@ class API(base.Base):
'size': share['size'],
'user_id': context.user_id,
'project_id': context.project_id,
'status': "creating",
'status': constants.STATUS_CREATING,
'progress': '0%',
'share_size': share['size'],
'display_name': name,
@ -410,12 +414,14 @@ class API(base.Base):
@policy.wrap_check_policy('share')
def delete_snapshot(self, context, snapshot, force=False):
if not (force or snapshot['status'] in ["available", "error"]):
msg = _("Share Snapshot status must be 'available' or 'error'.")
statuses = (constants.STATUS_AVAILABLE, constants.STATUS_ERROR)
if not (force or snapshot['status'] in statuses):
msg = _("Share Snapshot status must be one of %(statuses)s.") % {
"statuses": statuses}
raise exception.InvalidShareSnapshot(reason=msg)
self.db.share_snapshot_update(context, snapshot['id'],
{'status': 'deleting'})
{'status': constants.STATUS_DELETING})
share = self.db.share_get(context, snapshot['share_id'])
self.share_rpcapi.delete_snapshot(context, snapshot, share['host'])
@ -557,8 +563,8 @@ class API(base.Base):
if not share['host']:
msg = _("Share host is None")
raise exception.InvalidShare(reason=msg)
if share['status'] not in ["available"]:
msg = _("Share status must be available")
if share['status'] != constants.STATUS_AVAILABLE:
msg = _("Share status must be %s") % constants.STATUS_AVAILABLE
raise exception.InvalidShare(reason=msg)
policy.check_policy(ctx, 'share', 'allow_access')
values = {
@ -567,11 +573,11 @@ class API(base.Base):
'access_to': access_to,
'access_level': access_level,
}
access = [a for a in self.db.share_access_get_all_by_type_and_access(
ctx, share['id'], access_type, access_to) if a['state'] != 'error']
if access:
raise exception.ShareAccessExists(access_type=access_type,
access=access_to)
for access in self.db.share_access_get_all_by_type_and_access(
ctx, share['id'], access_type, access_to):
if access['state'] != constants.STATUS_ERROR:
raise exception.ShareAccessExists(access_type=access_type,
access=access_to)
if access_level not in constants.ACCESS_LEVELS + (None, ):
msg = _("Invalid share access level: %s.") % access_level
raise exception.InvalidShareAccess(reason=msg)
@ -586,8 +592,8 @@ class API(base.Base):
if not share['host']:
msg = _("Share host is None")
raise exception.InvalidShare(reason=msg)
if share['status'] not in ["available"]:
msg = _("Share status must be available")
if share['status'] != constants.STATUS_AVAILABLE:
msg = _("Share status must be %s") % constants.STATUS_AVAILABLE
raise exception.InvalidShare(reason=msg)
# Then check state of the access rule
@ -598,7 +604,9 @@ class API(base.Base):
{'state': access.STATE_DELETING})
self.share_rpcapi.deny_access(ctx, share, access)
else:
msg = _("Access policy should be active or in error state")
msg = _("Access policy should be %(active)s or in %(error)s "
"state") % {"active": constants.STATUS_ACTIVE,
"error": constants.STATUS_ERROR}
raise exception.InvalidShareAccess(reason=msg)
# update share state and send message to manager
@ -679,13 +687,11 @@ class API(base.Base):
def extend(self, context, share, new_size):
policy.check_policy(context, 'share', 'extend')
status = six.text_type(share['status']).upper()
if status != constants.STATUS_AVAILABLE:
if share['status'] != constants.STATUS_AVAILABLE:
msg_params = {
'valid_status': constants.STATUS_AVAILABLE,
'share_id': share['id'],
'status': status,
'status': share['status'],
}
msg = _("Share %(share_id)s status must be '%(valid_status)s' "
"to extend, but current status is: "

View File

@ -439,7 +439,8 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
t = time.time()
while time.time() - t < self.configuration.max_time_to_attach:
volume = self.volume_api.get(context, volume['id'])
if volume['status'] in ('available', 'error'):
if volume['status'] in (const.STATUS_AVAILABLE,
const.STATUS_ERROR):
break
time.sleep(1)
else:
@ -467,9 +468,9 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
t = time.time()
while time.time() - t < self.configuration.max_time_to_create_volume:
if volume['status'] == 'available':
if volume['status'] == const.STATUS_AVAILABLE:
break
if volume['status'] == 'error':
if volume['status'] == const.STATUS_ERROR:
raise exception.ManilaException(_('Failed to create volume'))
time.sleep(1)
volume = self.volume_api.get(context, volume['id'])
@ -562,9 +563,9 @@ class GenericShareDriver(driver.ExecuteMixin, driver.ShareDriver):
self.admin_context, volume['id'], volume_snapshot_name, '')
t = time.time()
while time.time() - t < self.configuration.max_time_to_create_volume:
if volume_snapshot['status'] == 'available':
if volume_snapshot['status'] == const.STATUS_AVAILABLE:
break
if volume_snapshot['status'] == 'error':
if volume_snapshot['status'] == const.STATUS_ERROR:
raise exception.ManilaException(_('Failed to create volume '
'snapshot'))
time.sleep(1)

View File

@ -155,7 +155,7 @@ class ShareManager(manager.SchedulerDependentManager):
shares = self.db.share_get_all_by_host(ctxt, self.host)
LOG.debug("Re-exporting %s shares", len(shares))
for share in shares:
if share['status'] != 'available':
if share['status'] != constants.STATUS_AVAILABLE:
LOG.info(
_LI("Share %(name)s: skipping export, because it has "
"'%(status)s' status."),
@ -279,7 +279,8 @@ class ShareManager(manager.SchedulerDependentManager):
share_network_id = share_ref.get('share_network_id', None)
if share_network_id and not self.driver.driver_handles_share_servers:
self.db.share_update(context, share_id, {'status': 'error'})
self.db.share_update(
context, share_id, {'status': constants.STATUS_ERROR})
raise exception.ManilaException(
"Driver does not expect share-network to be provided "
"with current configuration.")
@ -304,7 +305,7 @@ class ShareManager(manager.SchedulerDependentManager):
LOG.error(_LE("Share server %s does not exist."),
parent_share_server_id)
self.db.share_update(context, share_id,
{'status': 'error'})
{'status': constants.STATUS_ERROR})
elif share_network_id:
try:
share_server, share_ref = self._provide_share_server_for_share(
@ -314,7 +315,7 @@ class ShareManager(manager.SchedulerDependentManager):
LOG.error(_LE("Failed to get share server"
" for share creation."))
self.db.share_update(context, share_id,
{'status': 'error'})
{'status': constants.STATUS_ERROR})
else:
share_server = None
@ -351,11 +352,12 @@ class ShareManager(manager.SchedulerDependentManager):
'can not be written to db because it '
'contains %s and it is not a dictionary.'),
detail_data)
self.db.share_update(context, share_id, {'status': 'error'})
self.db.share_update(
context, share_id, {'status': constants.STATUS_ERROR})
else:
LOG.info(_LI("Share created successfully."))
self.db.share_update(context, share_id,
{'status': 'available',
{'status': constants.STATUS_AVAILABLE,
'launched_at': timeutils.utcnow()})
def manage_share(self, context, share_id, driver_options):
@ -382,7 +384,7 @@ class ShareManager(manager.SchedulerDependentManager):
})
share_update.update({
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'launched_at': timeutils.utcnow(),
})
@ -490,8 +492,10 @@ class ShareManager(manager.SchedulerDependentManager):
share_server=share_server)
except Exception:
with excutils.save_and_reraise_exception():
self.db.share_update(context, share_id,
{'status': 'error_deleting'})
self.db.share_update(
context,
share_id,
{'status': constants.STATUS_ERROR_DELETING})
try:
reservations = QUOTAS.reserve(context,
project_id=project_id,
@ -552,13 +556,14 @@ class ShareManager(manager.SchedulerDependentManager):
except Exception:
with excutils.save_and_reraise_exception():
self.db.share_snapshot_update(context,
snapshot_ref['id'],
{'status': 'error'})
self.db.share_snapshot_update(
context,
snapshot_ref['id'],
{'status': constants.STATUS_ERROR})
self.db.share_snapshot_update(context,
snapshot_ref['id'],
{'status': 'available',
{'status': constants.STATUS_AVAILABLE,
'progress': '100%'})
return snapshot_id
@ -579,12 +584,16 @@ class ShareManager(manager.SchedulerDependentManager):
self.driver.delete_snapshot(context, snapshot_ref,
share_server=share_server)
except exception.ShareSnapshotIsBusy:
self.db.share_snapshot_update(context, snapshot_ref['id'],
{'status': 'available'})
self.db.share_snapshot_update(
context,
snapshot_ref['id'],
{'status': constants.STATUS_AVAILABLE})
except Exception:
with excutils.save_and_reraise_exception():
self.db.share_snapshot_update(context, snapshot_ref['id'],
{'status': 'error_deleting'})
self.db.share_snapshot_update(
context,
snapshot_ref['id'],
{'status': constants.STATUS_ERROR_DELETING})
else:
self.db.share_snapshot_destroy(context, snapshot_id)
try:

View File

@ -17,6 +17,7 @@ from oslo_config import cfg
from oslo_serialization import jsonutils
import webob
from manila.common import constants
from manila import context
from manila import db
from manila import exception
@ -47,12 +48,14 @@ class AdminActionsTest(test.TestCase):
def test_reset_status_as_admin(self):
# current status is available
share = db.share_create(self.admin_context, {'status': 'available'})
share = db.share_create(
self.admin_context, {'status': constants.STATUS_AVAILABLE})
req = webob.Request.blank('/v1/fake/shares/%s/action' % share['id'])
req.method = 'POST'
req.headers['content-type'] = 'application/json'
# request status of 'error'
req.body = jsonutils.dumps({'os-reset_status': {'status': 'error'}})
req.body = jsonutils.dumps(
{'os-reset_status': {'status': constants.STATUS_ERROR}})
# attach admin context to request
req.environ['manila.context'] = self.admin_context
resp = req.get_response(app())
@ -60,18 +63,18 @@ class AdminActionsTest(test.TestCase):
self.assertEqual(resp.status_int, 202)
share = db.share_get(self.admin_context, share['id'])
# status changed to 'error'
self.assertEqual(share['status'], 'error')
self.assertEqual(share['status'], constants.STATUS_ERROR)
def test_reset_status_as_non_admin(self):
# current status is 'error'
share = db.share_create(context.get_admin_context(),
{'status': 'error'})
{'status': constants.STATUS_ERROR})
req = webob.Request.blank('/v1/fake/shares/%s/action' % share['id'])
req.method = 'POST'
req.headers['content-type'] = 'application/json'
# request changing status to available
req.body = jsonutils.dumps({'os-reset_status': {'status':
'available'}})
req.body = jsonutils.dumps(
{'os-reset_status': {'status': constants.STATUS_AVAILABLE}})
# non-admin context
req.environ['manila.context'] = self.member_context
resp = req.get_response(app())
@ -79,11 +82,12 @@ class AdminActionsTest(test.TestCase):
self.assertEqual(resp.status_int, 403)
share = db.share_get(context.get_admin_context(), share['id'])
# status is still 'error'
self.assertEqual(share['status'], 'error')
self.assertEqual(share['status'], constants.STATUS_ERROR)
def test_malformed_reset_status_body(self):
# current status is available
share = db.share_create(self.admin_context, {'status': 'available'})
share = db.share_create(
self.admin_context, {'status': constants.STATUS_AVAILABLE})
req = webob.Request.blank('/v1/fake/shares/%s/action' % share['id'])
req.method = 'POST'
req.headers['content-type'] = 'application/json'
@ -96,11 +100,12 @@ class AdminActionsTest(test.TestCase):
self.assertEqual(resp.status_int, 400)
share = db.share_get(self.admin_context, share['id'])
# status is still 'available'
self.assertEqual(share['status'], 'available')
self.assertEqual(share['status'], constants.STATUS_AVAILABLE)
def test_invalid_status_for_share(self):
# current status is available
share = db.share_create(self.admin_context, {'status': 'available'})
share = db.share_create(
self.admin_context, {'status': constants.STATUS_AVAILABLE})
req = webob.Request.blank('/v1/fake/shares/%s/action' % share['id'])
req.method = 'POST'
req.headers['content-type'] = 'application/json'
@ -113,7 +118,7 @@ class AdminActionsTest(test.TestCase):
self.assertEqual(resp.status_int, 400)
share = db.share_get(self.admin_context, share['id'])
# status is still 'available'
self.assertEqual(share['status'], 'available')
self.assertEqual(share['status'], constants.STATUS_AVAILABLE)
def test_reset_status_for_missing_share(self):
# missing-share-id
@ -122,8 +127,8 @@ class AdminActionsTest(test.TestCase):
req.method = 'POST'
req.headers['content-type'] = 'application/json'
# malformed request body
req.body = jsonutils.dumps({'os-reset_status': {'status':
'available'}})
req.body = jsonutils.dumps(
{'os-reset_status': {'status': constants.STATUS_AVAILABLE}})
# attach admin context to request
req.environ['manila.context'] = self.admin_context
resp = req.get_response(app())
@ -137,17 +142,17 @@ class AdminActionsTest(test.TestCase):
def test_snapshot_reset_status(self):
# snapshot in 'error_deleting'
share = db.share_create(self.admin_context, {})
snapshot = db.share_snapshot_create(self.admin_context,
{
'status': 'error_deleting',
'share_id': share['id']
})
snapshot = db.share_snapshot_create(
self.admin_context,
{'status': constants.STATUS_ERROR_DELETING,
'share_id': share['id']})
req = webob.Request.blank('/v1/fake/snapshots/%s/action' %
snapshot['id'])
req.method = 'POST'
req.headers['content-type'] = 'application/json'
# request status of 'error'
req.body = jsonutils.dumps({'os-reset_status': {'status': 'error'}})
req.body = jsonutils.dumps(
{'os-reset_status': {'status': constants.STATUS_ERROR}})
# attach admin context to request
req.environ['manila.context'] = self.admin_context
resp = req.get_response(app())
@ -155,16 +160,14 @@ class AdminActionsTest(test.TestCase):
self.assertEqual(resp.status_int, 202)
snapshot = db.share_snapshot_get(self.admin_context, snapshot['id'])
# status changed to 'error'
self.assertEqual(snapshot['status'], 'error')
self.assertEqual(snapshot['status'], constants.STATUS_ERROR)
def test_invalid_status_for_snapshot(self):
# snapshot in 'available'
share = db.share_create(self.admin_context, {})
snapshot = db.share_snapshot_create(self.admin_context,
{
'status': 'available',
'share_id': share['id']
})
snapshot = db.share_snapshot_create(
self.admin_context,
{'status': constants.STATUS_AVAILABLE, 'share_id': share['id']})
req = webob.Request.blank('/v1/fake/snapshots/%s/action' %
snapshot['id'])
req.method = 'POST'
@ -179,7 +182,7 @@ class AdminActionsTest(test.TestCase):
self.assertEqual(resp.status_int, 400)
snapshot = db.share_snapshot_get(self.admin_context, snapshot['id'])
# status is still 'available'
self.assertEqual(snapshot['status'], 'available')
self.assertEqual(snapshot['status'], constants.STATUS_AVAILABLE)
def test_admin_force_delete_share(self):
share = db.share_create(self.admin_context, {'size': 1})

View File

@ -15,6 +15,7 @@
import datetime
from manila.common import constants
from manila import exception as exc
FAKE_UUID = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
@ -106,7 +107,7 @@ def stub_volume_get_all_by_project(self, context, search_opts=None):
def stub_snapshot(id, **kwargs):
snapshot = {'id': id,
'volume_id': 12,
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'volume_size': 100,
'created_at': None,
'display_name': 'Default name',

View File

@ -22,6 +22,7 @@ import webob
from manila.api import common
from manila.api.v1 import shares
from manila.common import constants
from manila import context
from manila import exception
from manila.share import api as share_api
@ -368,7 +369,7 @@ class ShareApiTest(test.TestCase):
def _share_list_summary_with_search_opts(self, use_admin_context):
search_opts = {
'name': 'fake_name',
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'share_server_id': 'fake_share_server_id',
'share_type_id': 'fake_share_type_id',
'snapshot_id': 'fake_snapshot_id',
@ -457,7 +458,7 @@ class ShareApiTest(test.TestCase):
def _share_list_detail_with_search_opts(self, use_admin_context):
search_opts = {
'name': 'fake_name',
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'share_server_id': 'fake_share_server_id',
'share_type_id': 'fake_share_type_id',
'snapshot_id': 'fake_snapshot_id',
@ -482,7 +483,7 @@ class ShareApiTest(test.TestCase):
{
'id': 'id2',
'display_name': 'n2',
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'snapshot_id': 'fake_snapshot_id',
'share_type_id': 'fake_share_type_id',
'host': 'fake_host',

View File

@ -26,6 +26,7 @@ import ddt
import mock
from oslo_config import cfg
from manila.common import constants
from manila import context
from manila import exception
from manila.share import configuration as config
@ -83,10 +84,10 @@ class GlusterfsNativeShareDriverTestCase(test.TestCase):
self.glusterfs_server2_volumes = 'manila-share-2-2G\nshare2'
self.share1 = new_share(
export_location=self.glusterfs_target1,
status="available")
status=constants.STATUS_AVAILABLE)
self.share2 = new_share(
export_location=self.glusterfs_target2,
status="available")
status=constants.STATUS_AVAILABLE)
gmgr = glusterfs.GlusterManager
self.gmgr1 = gmgr(self.glusterfs_server1, self._execute, None, None,
has_volume=False)

View File

@ -109,25 +109,25 @@ def fake_access(id, **kwargs):
_FAKE_LIST_OF_ALL_SHARES = [
{
'name': 'foo',
'status': 'active',
'status': constants.STATUS_AVAILABLE,
'project_id': 'fake_pid_1',
'share_server_id': 'fake_server_1',
},
{
'name': 'bar',
'status': 'error',
'status': constants.STATUS_ERROR,
'project_id': 'fake_pid_2',
'share_server_id': 'fake_server_2',
},
{
'name': 'foo',
'status': 'active',
'status': constants.STATUS_AVAILABLE,
'project_id': 'fake_pid_2',
'share_server_id': 'fake_server_3',
},
{
'name': 'bar',
'status': 'error',
'status': constants.STATUS_ERROR,
'project_id': 'fake_pid_2',
'share_server_id': 'fake_server_3',
},
@ -137,25 +137,25 @@ _FAKE_LIST_OF_ALL_SHARES = [
_FAKE_LIST_OF_ALL_SNAPSHOTS = [
{
'name': 'foo',
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'project_id': 'fake_pid_1',
'share_id': 'fake_server_1',
},
{
'name': 'bar',
'status': 'error',
'status': constants.STATUS_ERROR,
'project_id': 'fake_pid_2',
'share_id': 'fake_server_2',
},
{
'name': 'foo',
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'project_id': 'fake_pid_2',
'share_id': 'fake_share_id_3',
},
{
'name': 'bar',
'status': 'error',
'status': constants.STATUS_ERROR,
'project_id': 'fake_pid_2',
'share_id': 'fake_share_id_3',
},
@ -276,7 +276,7 @@ class ShareAPITestCase(test.TestCase):
ctx = context.RequestContext('fake_uid', 'fake_pid_2', is_admin=True)
self.mock_object(db_driver, 'share_get_all_by_project',
mock.Mock(return_value=_FAKE_LIST_OF_ALL_SHARES[1:]))
shares = self.api.get_all(ctx, {'status': 'active'})
shares = self.api.get_all(ctx, {'status': constants.STATUS_AVAILABLE})
share_api.policy.check_policy.assert_has_calls([
mock.call(ctx, 'share', 'get_all'),
])
@ -290,7 +290,8 @@ class ShareAPITestCase(test.TestCase):
ctx = context.RequestContext('fake_uid', 'fake_pid_2', is_admin=True)
self.mock_object(db_driver, 'share_get_all',
mock.Mock(return_value=_FAKE_LIST_OF_ALL_SHARES))
shares = self.api.get_all(ctx, {'status': 'error', 'all_tenants': 1})
shares = self.api.get_all(
ctx, {'status': constants.STATUS_ERROR, 'all_tenants': 1})
share_api.policy.check_policy.assert_has_calls([
mock.call(ctx, 'share', 'get_all'),
])
@ -317,7 +318,8 @@ class ShareAPITestCase(test.TestCase):
ctx = context.RequestContext('fake_uid', 'fake_pid_2', is_admin=False)
self.mock_object(db_driver, 'share_get_all_by_project',
mock.Mock(return_value=_FAKE_LIST_OF_ALL_SHARES[1:]))
shares = self.api.get_all(ctx, {'name': 'bar', 'status': 'error'})
shares = self.api.get_all(
ctx, {'name': 'bar', 'status': constants.STATUS_ERROR})
share_api.policy.check_policy.assert_has_calls([
mock.call(ctx, 'share', 'get_all'),
])
@ -330,7 +332,8 @@ class ShareAPITestCase(test.TestCase):
self.assertEqual(shares, _FAKE_LIST_OF_ALL_SHARES[1::2])
# one item expected, two filtered
shares = self.api.get_all(ctx, {'name': 'foo', 'status': 'active'})
shares = self.api.get_all(
ctx, {'name': 'foo', 'status': constants.STATUS_AVAILABLE})
self.assertEqual(shares, _FAKE_LIST_OF_ALL_SHARES[2::4])
share_api.policy.check_policy.assert_has_calls([
mock.call(ctx, 'share', 'get_all'),
@ -466,7 +469,8 @@ class ShareAPITestCase(test.TestCase):
share = fake_share('fakeid',
user_id=self.context.user_id,
project_id=self.context.project_id,
status='creating', is_public=is_public)
status=constants.STATUS_CREATING,
is_public=is_public)
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
'terminated_at'):
@ -491,7 +495,7 @@ class ShareAPITestCase(test.TestCase):
share = fake_share('fakeid',
user_id=self.context.user_id,
project_id=self.context.project_id,
status='creating')
status=constants.STATUS_CREATING)
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
'terminated_at'):
@ -515,8 +519,10 @@ class ShareAPITestCase(test.TestCase):
None, '', 'fake', 'nfsfake', 'cifsfake', 'glusterfsfake', 'hdfsfake')
def test_create_share_invalid_protocol(self, proto):
options = fake_share(
'fakeid', user_id=self.context.user_id,
project_id=self.context.project_id, status='creating')
'fakeid',
user_id=self.context.user_id,
project_id=self.context.project_id,
status=constants.STATUS_CREATING)
for name in ('id', 'export_location', 'host', 'launched_at',
'terminated_at'):
options.pop(name, None)
@ -542,7 +548,7 @@ class ShareAPITestCase(test.TestCase):
share = fake_share('fakeid',
user_id=self.context.user_id,
project_id=self.context.project_id,
status='creating')
status=constants.STATUS_CREATING)
self.mock_object(db_driver, 'share_create',
mock.Mock(return_value=share))
self.mock_object(db_driver, 'share_export_locations_update')
@ -619,7 +625,7 @@ class ShareAPITestCase(test.TestCase):
'id': 'fakeid',
'host': 'fake',
'size': '1',
'status': 'available',
'status': constants.STATUS_AVAILABLE,
'user_id': self.context.user_id,
'project_id': self.context.project_id,
}
@ -638,17 +644,17 @@ class ShareAPITestCase(test.TestCase):
def test_create_snapshot(self):
date = datetime.datetime(1, 1, 1, 1, 1, 1)
timeutils.utcnow.return_value = date
share = fake_share('fakeid', status='available')
share = fake_share('fakeid', status=constants.STATUS_AVAILABLE)
snapshot = fake_snapshot('fakesnapshotid',
share_id=share['id'],
status='creating')
status=constants.STATUS_CREATING)
fake_name = 'fakename'
fake_desc = 'fakedesc'
options = {
'share_id': share['id'],
'user_id': self.context.user_id,
'project_id': self.context.project_id,
'status': "creating",
'status': constants.STATUS_CREATING,
'progress': '0%',
'share_size': share['size'],
'size': 1,
@ -702,7 +708,7 @@ class ShareAPITestCase(test.TestCase):
share = fake_share('fakeid')
snapshot = fake_snapshot('fakesnapshotid',
share_id=share['id'],
status='available')
status=constants.STATUS_AVAILABLE)
with mock.patch.object(db_driver, 'share_get',
mock.Mock(return_value=share)):
self.api.delete_snapshot(self.context, snapshot)
@ -711,14 +717,16 @@ class ShareAPITestCase(test.TestCase):
share_api.policy.check_policy.assert_called_once_with(
self.context, 'share', 'delete_snapshot', snapshot)
db_driver.share_snapshot_update.assert_called_once_with(
self.context, snapshot['id'], {'status': 'deleting'})
self.context,
snapshot['id'],
{'status': constants.STATUS_DELETING})
db_driver.share_get.assert_called_once_with(
self.context, snapshot['share_id'])
def test_delete_snapshot_wrong_status(self):
snapshot = fake_snapshot('fakesnapshotid',
share_id='fakeshareid',
status='creating')
status=constants.STATUS_CREATING)
self.assertRaises(exception.InvalidShareSnapshot,
self.api.delete_snapshot,
self.context,
@ -727,7 +735,7 @@ class ShareAPITestCase(test.TestCase):
self.context, 'share', 'delete_snapshot', snapshot)
def test_create_snapshot_if_share_not_available(self):
share = fake_share('fakeid', status='error')
share = fake_share('fakeid', status=constants.STATUS_ERROR)
self.assertRaises(exception.InvalidShare,
self.api.create_snapshot,
self.context,
@ -747,15 +755,15 @@ class ShareAPITestCase(test.TestCase):
original_share = fake_share('fake_original_id',
user_id=self.context.user_id,
project_id=self.context.project_id,
status='available')
status=constants.STATUS_AVAILABLE)
snapshot = fake_snapshot('fakesnapshotid',
share_id=original_share['id'],
status='available')
status=constants.STATUS_AVAILABLE)
share = fake_share('fakeid',
user_id=self.context.user_id,
project_id=self.context.project_id,
snapshot_id=snapshot['id'],
status='creating')
status=constants.STATUS_CREATING)
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
'terminated_at'):
@ -804,15 +812,15 @@ class ShareAPITestCase(test.TestCase):
original_share = fake_share('fake_original_id',
user_id=self.context.user_id,
project_id=self.context.project_id,
status='available')
status=constants.STATUS_AVAILABLE)
snapshot = fake_snapshot('fakesnapshotid',
share_id=original_share['id'],
status='available')
status=constants.STATUS_AVAILABLE)
share = fake_share('fakeid',
user_id=self.context.user_id,
project_id=self.context.project_id,
snapshot_id=snapshot['id'],
status='creating')
status=constants.STATUS_CREATING)
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
'terminated_at'):
@ -862,11 +870,12 @@ class ShareAPITestCase(test.TestCase):
share_id = 'fake_share_id'
snapshot = fake_snapshot('fakesnapshotid',
share_id=share_id,
status='available')
status=constants.STATUS_AVAILABLE)
share_type = {'id': 'fake_share_type'}
share = fake_share(share_id, user_id=self.context.user_id,
project_id=self.context.project_id,
snapshot_id=snapshot['id'], status='creating',
snapshot_id=snapshot['id'],
status=constants.STATUS_CREATING,
share_type_id=share_type['id'])
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
@ -919,11 +928,12 @@ class ShareAPITestCase(test.TestCase):
share_id = 'fake_share_id'
snapshot = fake_snapshot('fakesnapshotid',
share_id=share_id,
status='available')
status=constants.STATUS_AVAILABLE)
share_type = {'id': 'fake_share_type'}
share = fake_share(share_id, user_id=self.context.user_id,
project_id=self.context.project_id,
snapshot_id=snapshot['id'], status='creating',
snapshot_id=snapshot['id'],
status=constants.STATUS_CREATING,
share_type_id=share_type['id'][1:])
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
@ -963,14 +973,15 @@ class ShareAPITestCase(test.TestCase):
user_id=self.context.user_id,
project_id=self.context.project_id,
share_type_id='fake_share_type_id',
status='available')
status=constants.STATUS_AVAILABLE)
share_id = 'fake_share_id'
snapshot = fake_snapshot('fakesnapshotid',
share_id=original_share['id'],
status='available')
status=constants.STATUS_AVAILABLE)
share = fake_share(share_id, user_id=self.context.user_id,
project_id=self.context.project_id,
snapshot_id=snapshot['id'], status='creating',
snapshot_id=snapshot['id'],
status=constants.STATUS_CREATING,
share_type_id=original_share['share_type_id'])
options = share.copy()
for name in ('id', 'export_location', 'host', 'launched_at',
@ -1030,14 +1041,15 @@ class ShareAPITestCase(test.TestCase):
def test_create_from_snapshot_not_available(self):
snapshot = fake_snapshot('fakesnapshotid',
share_id='fakeshare_id',
status='error')
status=constants.STATUS_ERROR)
self.assertRaises(exception.InvalidShareSnapshot, self.api.create,
self.context, 'nfs', '1', 'fakename',
'fakedesc', snapshot=snapshot,
availability_zone='fakeaz')
def test_create_from_snapshot_larger_size(self):
snapshot = fake_snapshot(1, size=100, status='available')
snapshot = fake_snapshot(
1, size=100, status=constants.STATUS_AVAILABLE)
self.assertRaises(exception.InvalidInput, self.api.create,
self.context, 'nfs', 1, 'fakename', 'fakedesc',
availability_zone='fakeaz', snapshot=snapshot)
@ -1057,7 +1069,7 @@ class ShareAPITestCase(test.TestCase):
timeutils.utcnow.return_value = date
share = fake_share('fakeid', status=status,
share_server_id=share_server_id)
options = {'status': 'deleting', 'terminated_at': date}
options = {'status': constants.STATUS_DELETING, 'terminated_at': date}
deleting_share = share.copy()
deleting_share.update(options)
self.mock_object(db_driver, 'share_update',
@ -1066,7 +1078,7 @@ class ShareAPITestCase(test.TestCase):
return share, deleting_share, options
@ddt.data('available', 'error')
@ddt.data(constants.STATUS_AVAILABLE, constants.STATUS_ERROR)
def test_delete(self, status):
share_server_id = 'fake-ss-id'
share, deleting_share, options = self._setup_delete_mocks(
@ -1083,7 +1095,7 @@ class ShareAPITestCase(test.TestCase):
def test_delete_share_without_share_server(self):
share, deleting_share, options = self._setup_delete_mocks(
'available', share_server_id=None)
constants.STATUS_AVAILABLE, share_server_id=None)
self.api.delete(self.context, share)
@ -1207,7 +1219,7 @@ class ShareAPITestCase(test.TestCase):
@ddt.data(None, 'rw', 'ro')
def test_allow_access(self, level):
share = fake_share('fakeid', status='available')
share = fake_share('fakeid', status=constants.STATUS_AVAILABLE)
values = {
'share_id': share['id'],
'access_type': 'fakeacctype',
@ -1228,13 +1240,13 @@ class ShareAPITestCase(test.TestCase):
self.context, 'share', 'allow_access')
def test_allow_access_invalid_access_level(self):
share = fake_share('fakeid', status='available')
share = fake_share('fakeid', status=constants.STATUS_AVAILABLE)
self.assertRaises(exception.InvalidShareAccess, self.api.allow_access,
self.context, share, 'fakeacctype', 'fakeaccto',
'ab')
def test_allow_access_status_not_available(self):
share = fake_share('fakeid', status='error')
share = fake_share('fakeid', status=constants.STATUS_ERROR)
self.assertRaises(exception.InvalidShare, self.api.allow_access,
self.context, share, 'fakeacctype', 'fakeaccto')
@ -1245,7 +1257,7 @@ class ShareAPITestCase(test.TestCase):
@mock.patch.object(db_driver, 'share_access_delete', mock.Mock())
def test_deny_access_error(self):
share = fake_share('fakeid', status='available')
share = fake_share('fakeid', status=constants.STATUS_AVAILABLE)
access = fake_access('fakaccid', state='fakeerror')
self.api.deny_access(self.context, share, access)
share_api.policy.check_policy.assert_called_once_with(
@ -1255,7 +1267,7 @@ class ShareAPITestCase(test.TestCase):
@mock.patch.object(db_driver, 'share_access_update', mock.Mock())
def test_deny_access_active(self):
share = fake_share('fakeid', status='available')
share = fake_share('fakeid', status=constants.STATUS_AVAILABLE)
access = fake_access('fakaccid', state='fakeactive')
self.api.deny_access(self.context, share, access)
db_driver.share_access_update.assert_called_once_with(
@ -1266,7 +1278,7 @@ class ShareAPITestCase(test.TestCase):
self.context, share, access)
def test_deny_access_not_active_not_error(self):
share = fake_share('fakeid', status='available')
share = fake_share('fakeid', status=constants.STATUS_AVAILABLE)
access = fake_access('fakaccid', state='fakenew')
self.assertRaises(exception.InvalidShareAccess, self.api.deny_access,
self.context, share, access)
@ -1274,7 +1286,7 @@ class ShareAPITestCase(test.TestCase):
self.context, 'share', 'deny_access')
def test_deny_access_status_not_available(self):
share = fake_share('fakeid', status='error')
share = fake_share('fakeid', status=constants.STATUS_ERROR)
self.assertRaises(exception.InvalidShare, self.api.deny_access,
self.context, share, 'fakeacc')
share_api.policy.check_policy.assert_called_once_with(

View File

@ -38,9 +38,9 @@ from manila import utils
class FakeAccessRule(object):
def __init__(self, **kwargs):
self.STATE_ACTIVE = 'active'
self.STATE_NEW = 'new'
self.STATE_ERROR = 'error'
self.STATE_ACTIVE = constants.STATUS_ACTIVE
self.STATE_NEW = constants.STATUS_NEW
self.STATE_ERROR = constants.STATUS_ERROR
self.access_type = 'fake_type'
self.id = 'fake_id'
for k, v in kwargs.items():
@ -105,13 +105,13 @@ class ShareManagerTestCase(test.TestCase):
return db.share_access_create(context.get_admin_context(), access)
@staticmethod
def _create_share_server(state='ACTIVE', share_network_id=None, host=None,
def _create_share_server(state=None, share_network_id=None, host=None,
backend_details=None):
"""Create a share server object."""
srv = {}
srv['host'] = host
srv['share_network_id'] = share_network_id
srv['status'] = state
srv['status'] = state or constants.STATUS_ACTIVE
share_srv = db.share_server_create(context.get_admin_context(), srv)
if backend_details:
db.share_server_backend_details_set(
@ -180,13 +180,15 @@ class ShareManagerTestCase(test.TestCase):
access_type='fake_access_type', access='fake_access')
shares = [
{'id': 'fake_id_1', 'status': 'available', },
{'id': 'fake_id_2', 'status': 'error', 'name': 'fake_name_2'},
{'id': 'fake_id_3', 'status': 'in-use', 'name': 'fake_name_3'},
{'id': 'fake_id_1', 'status': constants.STATUS_AVAILABLE},
{'id': 'fake_id_2',
'status': constants.STATUS_ERROR,
'name': 'fake_name_2'},
{'id': 'fake_id_3', 'status': 'fake', 'name': 'fake_name_3'},
]
rules = [
FakeAccessRule(state='active'),
FakeAccessRule(state='error'),
FakeAccessRule(state=constants.STATUS_ACTIVE),
FakeAccessRule(state=constants.STATUS_ERROR),
]
fake_export_locations = ['fake/path/1', 'fake/path']
share_server = 'fake_share_server_type_does_not_matter'
@ -244,9 +246,15 @@ class ShareManagerTestCase(test.TestCase):
raise exception.ManilaException(message="Fake raise")
shares = [
{'id': 'fake_id_1', 'status': 'available', 'name': 'fake_name_1'},
{'id': 'fake_id_2', 'status': 'error', 'name': 'fake_name_2'},
{'id': 'fake_id_3', 'status': 'available', 'name': 'fake_name_3'},
{'id': 'fake_id_1',
'status': constants.STATUS_AVAILABLE,
'name': 'fake_name_1'},
{'id': 'fake_id_2',
'status': constants.STATUS_ERROR,
'name': 'fake_name_2'},
{'id': 'fake_id_3',
'status': constants.STATUS_AVAILABLE,
'name': 'fake_name_3'},
]
share_server = 'fake_share_server_type_does_not_matter'
self.mock_object(self.share_manager.db,
@ -297,13 +305,19 @@ class ShareManagerTestCase(test.TestCase):
raise exception.ManilaException(message="Fake raise")
shares = [
{'id': 'fake_id_1', 'status': 'available', 'name': 'fake_name_1'},
{'id': 'fake_id_2', 'status': 'error', 'name': 'fake_name_2'},
{'id': 'fake_id_3', 'status': 'available', 'name': 'fake_name_3'},
{'id': 'fake_id_1',
'status': constants.STATUS_AVAILABLE,
'name': 'fake_name_1'},
{'id': 'fake_id_2',
'status': constants.STATUS_ERROR,
'name': 'fake_name_2'},
{'id': 'fake_id_3',
'status': constants.STATUS_AVAILABLE,
'name': 'fake_name_3'},
]
rules = [
FakeAccessRule(state='active'),
FakeAccessRule(state='error'),
FakeAccessRule(state=constants.STATUS_ACTIVE),
FakeAccessRule(state=constants.STATUS_ERROR),
]
share_server = 'fake_share_server_type_does_not_matter'
self.mock_object(self.share_manager.db,
@ -383,7 +397,7 @@ class ShareManagerTestCase(test.TestCase):
share_id).id)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'available')
self.assertEqual(shr['status'], constants.STATUS_AVAILABLE)
self.assertEqual(shr['share_server_id'], server['id'])
def test_create_share_from_snapshot_with_server_not_found(self):
@ -403,7 +417,7 @@ class ShareManagerTestCase(test.TestCase):
)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'error')
self.assertEqual(shr['status'], constants.STATUS_ERROR)
def test_create_share_from_snapshot(self):
"""Test share can be created from snapshot."""
@ -418,7 +432,7 @@ class ShareManagerTestCase(test.TestCase):
share_id).id)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'available')
self.assertEqual(shr['status'], constants.STATUS_AVAILABLE)
self.assertTrue(len(shr['export_location']) > 0)
self.assertEqual(2, len(shr['export_locations']))
@ -444,7 +458,7 @@ class ShareManagerTestCase(test.TestCase):
snapshot_id).share_id)
snap = db.share_snapshot_get(self.context, snapshot_id)
self.assertEqual(snap['status'], 'available')
self.assertEqual(snap['status'], constants.STATUS_AVAILABLE)
self.share_manager.delete_snapshot(self.context, snapshot_id)
self.assertRaises(exception.NotFound,
@ -473,14 +487,15 @@ class ShareManagerTestCase(test.TestCase):
self.context, share_id, snapshot_id)
snap = db.share_snapshot_get(self.context, snapshot_id)
self.assertEqual(snap['status'], 'error')
self.assertEqual(snap['status'], constants.STATUS_ERROR)
self.assertRaises(exception.NotFound,
self.share_manager.delete_snapshot,
self.context, snapshot_id)
self.assertEqual('error_deleting', db.share_snapshot_get(
self.context, snapshot_id).status)
self.assertEqual(
constants.STATUS_ERROR_DELETING,
db.share_snapshot_get(self.context, snapshot_id).status)
self.share_manager.driver.create_snapshot.assert_called_once_with(
self.context, utils.IsAMatcher(models.ShareSnapshot),
share_server=None)
@ -497,14 +512,14 @@ class ShareManagerTestCase(test.TestCase):
self.mock_object(self.share_manager.driver, "delete_snapshot",
mock.Mock(side_effect=_raise_share_snapshot_is_busy))
share = self._create_share(status='ACTIVE')
share = self._create_share(status=constants.STATUS_ACTIVE)
snapshot = self._create_snapshot(share_id=share['id'])
snapshot_id = snapshot['id']
self.share_manager.delete_snapshot(self.context, snapshot_id)
snap = db.share_snapshot_get(self.context, snapshot_id)
self.assertEqual(snap['status'], 'available')
self.assertEqual(snap['status'], constants.STATUS_AVAILABLE)
self.share_manager.driver.delete_snapshot.assert_called_once_with(
utils.IsAMatcher(context.RequestContext),
utils.IsAMatcher(models.ShareSnapshot),
@ -531,7 +546,7 @@ class ShareManagerTestCase(test.TestCase):
utils.IsAMatcher(context.RequestContext), share_id)
self.share_manager.db.share_update.assert_called_once_with(
utils.IsAMatcher(context.RequestContext), share_id,
{'status': 'error'})
{'status': constants.STATUS_ERROR})
def test_create_share_with_share_network_server_not_exists(self):
"""Test share can be created without share server."""
@ -598,7 +613,7 @@ class ShareManagerTestCase(test.TestCase):
mock.call(
utils.IsAMatcher(context.RequestContext),
fake_share['id'],
{'status': 'error'},
{'status': constants.STATUS_ERROR},
)
])
self.share_manager._setup_server.assert_called_once_with(
@ -616,7 +631,7 @@ class ShareManagerTestCase(test.TestCase):
share_id
)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'error')
self.assertEqual(shr['status'], constants.STATUS_ERROR)
def test_create_share_with_share_network_server_exists(self):
"""Test share can be created with existing share server."""
@ -635,7 +650,7 @@ class ShareManagerTestCase(test.TestCase):
share_id).id)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'available')
self.assertEqual(shr['status'], constants.STATUS_AVAILABLE)
self.assertEqual(shr['share_server_id'], share_srv['id'])
self.assertTrue(len(shr['export_location']) > 0)
self.assertEqual(1, len(shr['export_locations']))
@ -665,7 +680,7 @@ class ShareManagerTestCase(test.TestCase):
share = self._create_share(share_network_id=share_net['id'])
self._create_share_server(
share_network_id=share_net['id'], host=self.share_manager.host,
state='ERROR')
state=constants.STATUS_ERROR)
share_id = share['id']
fake_server = {'id': 'fake_srv_id'}
self.mock_object(db, 'share_server_create',
@ -678,7 +693,7 @@ class ShareManagerTestCase(test.TestCase):
self.assertEqual(share_id, db.share_get(context.get_admin_context(),
share_id).id)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'available')
self.assertEqual(shr['status'], constants.STATUS_AVAILABLE)
self.assertEqual(shr['share_server_id'], 'fake_srv_id')
db.share_server_create.assert_called_once_with(
utils.IsAMatcher(context.RequestContext), mock.ANY)
@ -704,14 +719,14 @@ class ShareManagerTestCase(test.TestCase):
share_id)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'error')
self.assertEqual(shr['status'], constants.STATUS_ERROR)
self.assertRaises(exception.NotFound,
self.share_manager.delete_share,
self.context,
share_id)
shr = db.share_get(self.context, share_id)
self.assertEqual(shr['status'], 'error_deleting')
self.assertEqual(shr['status'], constants.STATUS_ERROR_DELETING)
self.share_manager.driver.create_share.assert_called_once_with(
utils.IsAMatcher(context.RequestContext),
utils.IsAMatcher(models.Share),
@ -844,7 +859,8 @@ class ShareManagerTestCase(test.TestCase):
else:
self.assertFalse(
self.share_manager.db.share_export_locations_update.called)
valid_share_data = {'status': 'available', 'launched_at': mock.ANY}
valid_share_data = {
'status': constants.STATUS_AVAILABLE, 'launched_at': mock.ANY}
valid_share_data.update(driver_data)
self.share_manager.db.share_update.assert_called_once_with(
utils.IsAMatcher(context.RequestContext),
@ -1138,7 +1154,7 @@ class ShareManagerTestCase(test.TestCase):
access_id)
acs = db.share_access_get(self.context, access_id)
self.assertEqual(acs['state'], 'error')
self.assertEqual(acs['state'], constants.STATUS_ERROR)
self.assertRaises(exception.NotFound,
self.share_manager.deny_access,
@ -1146,7 +1162,7 @@ class ShareManagerTestCase(test.TestCase):
access_id)
acs = db.share_access_get(self.context, access_id)
self.assertEqual(acs['state'], 'error')
self.assertEqual(acs['state'], constants.STATUS_ERROR)
def test_setup_server(self):
# Setup required test data
@ -1373,13 +1389,16 @@ class ShareManagerTestCase(test.TestCase):
for k, v in details.items()]
self.assertEqual(expected, details_mock.call_args_list)
self.share_manager.db.share_server_update.assert_called_once_with(
self.context, share_server['id'], {'status': 'ERROR'})
self.context,
share_server['id'],
{'status': constants.STATUS_ERROR})
self.share_manager.driver.deallocate_network.assert_called_once_with(
self.context, share_server['id']
)
def test_ensure_share_has_pool_with_only_host(self):
fake_share = {'status': 'available', 'host': 'host1', 'id': 1}
fake_share = {
'status': constants.STATUS_AVAILABLE, 'host': 'host1', 'id': 1}
host = self.share_manager._ensure_share_has_pool(context.
get_admin_context(),
fake_share)
@ -1387,7 +1406,7 @@ class ShareManagerTestCase(test.TestCase):
def test_ensure_share_has_pool_with_full_pool_name(self):
fake_share = {'host': 'host1#pool0', 'id': 1,
'status': 'available'}
'status': constants.STATUS_AVAILABLE}
fake_share_expected_value = 'pool0'
host = self.share_manager._ensure_share_has_pool(context.
get_admin_context(),
@ -1396,7 +1415,7 @@ class ShareManagerTestCase(test.TestCase):
def test_ensure_share_has_pool_unable_to_fetch_share(self):
fake_share = {'host': 'host@backend', 'id': 1,
'status': 'available'}
'status': constants.STATUS_AVAILABLE}
with mock.patch.object(self.share_manager.driver, 'get_pool',
side_effect=Exception):
with mock.patch.object(manager, 'LOG') as mock_LOG:

View File

@ -22,6 +22,7 @@ from oslo_config import cfg
from oslo_serialization import jsonutils
import six
from manila.common import constants
from manila import context
from manila import db
from manila.share import rpcapi as share_rpcapi
@ -38,7 +39,7 @@ class ShareRpcAPITestCase(test.TestCase):
shr = {}
shr['host'] = 'fake_host'
shr['availability_zone'] = CONF.storage_availability_zone
shr['status'] = "available"
shr['status'] = constants.STATUS_AVAILABLE
share = db.share_create(self.context, shr)
acs = {}
acs['access_type'] = "ip"

View File

@ -17,6 +17,7 @@
from oslo_utils import uuidutils
from manila.common import constants
from manila import context
from manila import db
from manila import exception
@ -36,7 +37,7 @@ class ShareServerTableTestCase(test.TestCase):
values = {
'share_network_id': uuidutils.generate_uuid(),
'host': 'host1',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
return db.share_server_create(self.ctxt, values)
@ -44,7 +45,7 @@ class ShareServerTableTestCase(test.TestCase):
values = {
'share_network_id': 'fake-share-net-id',
'host': 'hostname',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE
}
expected = self._create_share_server(values)
server = db.share_server_get(self.ctxt, expected['id'])
@ -62,7 +63,7 @@ class ShareServerTableTestCase(test.TestCase):
values = {
'share_network_id': 'fake-share-net-id',
'host': 'hostname',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
server = self._create_share_server(values)
self.assertTrue(server['id'])
@ -87,7 +88,7 @@ class ShareServerTableTestCase(test.TestCase):
update = {
'share_network_id': 'update_net',
'host': 'update_host',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
server = self._create_share_server()
updated_server = db.share_server_update(self.ctxt, server['id'],
@ -108,17 +109,17 @@ class ShareServerTableTestCase(test.TestCase):
valid = {
'share_network_id': '1',
'host': 'host1',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
invalid = {
'share_network_id': '1',
'host': 'host1',
'status': 'ERROR'
'status': constants.STATUS_ERROR,
}
other = {
'share_network_id': '2',
'host': 'host2',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
valid = self._create_share_server(valid)
self._create_share_server(invalid)
@ -139,17 +140,17 @@ class ShareServerTableTestCase(test.TestCase):
srv1 = {
'share_network_id': '1',
'host': 'host1',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
srv2 = {
'share_network_id': '1',
'host': 'host1',
'status': 'ERROR'
'status': constants.STATUS_ERROR,
}
srv3 = {
'share_network_id': '2',
'host': 'host2',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
servers = db.share_server_get_all(self.ctxt)
self.assertEqual(len(servers), 0)
@ -188,7 +189,7 @@ class ShareServerTableTestCase(test.TestCase):
values = {
'share_network_id': 'fake-share-net-id',
'host': 'hostname',
'status': 'ACTIVE'
'status': constants.STATUS_ACTIVE,
}
details = {
'value1': '1',

View File

@ -21,6 +21,7 @@ from oslo_config import cfg
from oslo_utils import timeutils
import testtools
from manila.common import constants
from manila import context
from manila import db
from manila.db.sqlalchemy import api as sqa_api
@ -51,7 +52,7 @@ class QuotaIntegrationTestCase(test.TestCase):
share['user_id'] = self.user_id
share['project_id'] = self.project_id
share['size'] = size
share['status'] = 'available'
share['status'] = constants.STATUS_AVAILABLE
share['host'] = 'fake_host'
return db.share_create(self.context, share)
@ -62,7 +63,7 @@ class QuotaIntegrationTestCase(test.TestCase):
snapshot['share_id'] = share['id']
snapshot['share_size'] = share['size']
snapshot['host'] = share['host']
snapshot['status'] = 'available'
snapshot['status'] = constants.STATUS_AVAILABLE
return db.share_snapshot_create(self.context, snapshot)
@testtools.skip("SQLAlchemy sqlite insert bug")