From 0a7f44ad0769d95ab83f6ec6c4f2536354d2c2e5 Mon Sep 17 00:00:00 2001 From: Valeriy Ponomaryov Date: Thu, 28 May 2015 21:14:27 +0300 Subject: [PATCH] Transform share and share servers statuses to lowercase We have several entities in Manila that do have statuses: - Shares - Snapshots - Share Servers - Share Access Rules But some share and all share server statuses use uppercase for it. Make all of them consistent and transform them to lowercase. Add migrations for it. Also, remove two unused statuses and reuse all statuses from common place. Change-Id: I53e6a768c98977d3d94e761349b7446a9dfb4936 Closes-Bug: #1459598 --- .../api/share/admin/test_share_manage.py | 2 +- manila/api/contrib/admin_actions.py | 13 +- manila/api/contrib/share_unmanage.py | 4 +- manila/common/constants.py | 35 +++--- ...92c30f3_transform_statuses_to_lowercase.py | 53 +++++++++ manila/db/sqlalchemy/models.py | 10 +- manila/share/api.py | 60 +++++----- manila/share/drivers/generic.py | 11 +- manila/share/manager.py | 43 ++++--- .../tests/api/contrib/test_admin_actions.py | 55 +++++---- manila/tests/api/v1/stubs.py | 3 +- manila/tests/api/v1/test_shares.py | 7 +- .../share/drivers/test_glusterfs_native.py | 5 +- manila/tests/share/test_api.py | 112 ++++++++++-------- manila/tests/share/test_manager.py | 103 +++++++++------- manila/tests/share/test_rpcapi.py | 3 +- manila/tests/test_db.py | 23 ++-- manila/tests/test_quota.py | 5 +- 18 files changed, 326 insertions(+), 221 deletions(-) create mode 100644 manila/db/migrations/alembic/versions/3db9992c30f3_transform_statuses_to_lowercase.py diff --git a/contrib/tempest/tempest/api/share/admin/test_share_manage.py b/contrib/tempest/tempest/api/share/admin/test_share_manage.py index 5c2a7fca..5acd41b8 100644 --- a/contrib/tempest/tempest/api/share/admin/test_share_manage.py +++ b/contrib/tempest/tempest/api/share/admin/test_share_manage.py @@ -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: diff --git a/manila/api/contrib/admin_actions.py b/manila/api/contrib/admin_actions.py index d42764b4..daa644b6 100644 --- a/manila/api/contrib/admin_actions.py +++ b/manila/api/contrib/admin_actions.py @@ -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: diff --git a/manila/api/contrib/share_unmanage.py b/manila/api/contrib/share_unmanage.py index 420271d8..e1d13560 100644 --- a/manila/api/contrib/share_unmanage.py +++ b/manila/api/contrib/share_unmanage.py @@ -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']) diff --git a/manila/common/constants.py b/manila/common/constants.py index 1b8a83e6..96ad205f 100644 --- a/manila/common/constants.py +++ b/manila/common/constants.py @@ -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, ) diff --git a/manila/db/migrations/alembic/versions/3db9992c30f3_transform_statuses_to_lowercase.py b/manila/db/migrations/alembic/versions/3db9992c30f3_transform_statuses_to_lowercase.py new file mode 100644 index 00000000..2dd02f25 --- /dev/null +++ b/manila/db/migrations/alembic/versions/3db9992c30f3_transform_statuses_to_lowercase.py @@ -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() diff --git a/manila/db/sqlalchemy/models.py b/manila/db/sqlalchemy/models.py index 8f39f9e4..67906679 100644 --- a/manila/db/sqlalchemy/models.py +++ b/manila/db/sqlalchemy/models.py @@ -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) diff --git a/manila/share/api.py b/manila/share/api.py index 83751136..53deff0f 100644 --- a/manila/share/api.py +++ b/manila/share/api.py @@ -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: " diff --git a/manila/share/drivers/generic.py b/manila/share/drivers/generic.py index 77ececec..a78e1742 100644 --- a/manila/share/drivers/generic.py +++ b/manila/share/drivers/generic.py @@ -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) diff --git a/manila/share/manager.py b/manila/share/manager.py index bd2c6e8d..115ec2f4 100644 --- a/manila/share/manager.py +++ b/manila/share/manager.py @@ -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: diff --git a/manila/tests/api/contrib/test_admin_actions.py b/manila/tests/api/contrib/test_admin_actions.py index 1cd9c77a..21c24846 100644 --- a/manila/tests/api/contrib/test_admin_actions.py +++ b/manila/tests/api/contrib/test_admin_actions.py @@ -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}) diff --git a/manila/tests/api/v1/stubs.py b/manila/tests/api/v1/stubs.py index 11d4548f..6d91e5ed 100644 --- a/manila/tests/api/v1/stubs.py +++ b/manila/tests/api/v1/stubs.py @@ -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', diff --git a/manila/tests/api/v1/test_shares.py b/manila/tests/api/v1/test_shares.py index 09eea8e0..11937b4c 100644 --- a/manila/tests/api/v1/test_shares.py +++ b/manila/tests/api/v1/test_shares.py @@ -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', diff --git a/manila/tests/share/drivers/test_glusterfs_native.py b/manila/tests/share/drivers/test_glusterfs_native.py index 08f58648..bb09e767 100644 --- a/manila/tests/share/drivers/test_glusterfs_native.py +++ b/manila/tests/share/drivers/test_glusterfs_native.py @@ -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) diff --git a/manila/tests/share/test_api.py b/manila/tests/share/test_api.py index f568e330..f9febb1d 100644 --- a/manila/tests/share/test_api.py +++ b/manila/tests/share/test_api.py @@ -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( diff --git a/manila/tests/share/test_manager.py b/manila/tests/share/test_manager.py index e4458696..ea71e1e5 100644 --- a/manila/tests/share/test_manager.py +++ b/manila/tests/share/test_manager.py @@ -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: diff --git a/manila/tests/share/test_rpcapi.py b/manila/tests/share/test_rpcapi.py index 5b0d2da8..0bf88bdf 100644 --- a/manila/tests/share/test_rpcapi.py +++ b/manila/tests/share/test_rpcapi.py @@ -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" diff --git a/manila/tests/test_db.py b/manila/tests/test_db.py index 262e2f52..dbed6300 100644 --- a/manila/tests/test_db.py +++ b/manila/tests/test_db.py @@ -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', diff --git a/manila/tests/test_quota.py b/manila/tests/test_quota.py index 717ef25a..3b6c3bec 100644 --- a/manila/tests/test_quota.py +++ b/manila/tests/test_quota.py @@ -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")