def test_share_metadata_get(self): metadata = {'a': 'b', 'c': 'd'} share_id = str(uuid.uuid4()) db_driver.share_create(self.context, {'id': share_id, 'metadata': metadata}) self.assertEqual(metadata, db_driver.share_metadata_get(self.context, share_id))
def test_create_from_snapshot_available(self): date = datetime.datetime(1, 1, 1, 1, 1, 1) self.mock_utcnow.return_value = date snapshot = fake_snapshot("fakesnapshotid", share_id="fakeshare_id", status="available") share = fake_share( "fakeid", user_id=self.context.user_id, project_id=self.context.project_id, snapshot_id=snapshot["id"], status="creating", ) options = share.copy() for name in ("id", "export_location", "host", "launched_at", "terminated_at"): options.pop(name, None) request_spec = { "share_properties": options, "share_proto": share["share_proto"], "share_id": share["id"], "snapshot_id": share["snapshot_id"], } self.mox.StubOutWithMock(db_driver, "share_create") db_driver.share_create(self.context, options).AndReturn(share) self.scheduler_rpcapi.create_share( self.context, mox.IgnoreArg(), share["id"], share["snapshot_id"], request_spec=request_spec, filter_properties={}, ) self.mox.ReplayAll() self.api.create(self.context, "nfs", "1", "fakename", "fakedesc", snapshot=snapshot, availability_zone="fakeaz")
def test_create_from_snapshot_available(self): date = datetime.datetime(1, 1, 1, 1, 1, 1) self.mock_utcnow.return_value = date snapshot = fake_snapshot('fakesnapshotid', share_id='fakeshare_id', status='available') share = fake_share('fakeid', user_id=self.context.user_id, project_id=self.context.project_id, snapshot_id=snapshot['id'], status='creating') options = share.copy() for name in ('id', 'export_location', 'host', 'launched_at', 'terminated_at'): options.pop(name, None) request_spec = {'share_properties': options, 'share_proto': share['share_proto'], 'share_id': share['id'], 'volume_type': None, 'snapshot_id': share['snapshot_id'], } self.mox.StubOutWithMock(db_driver, 'share_create') db_driver.share_create(self.context, options).AndReturn(share) self.scheduler_rpcapi.create_share(self.context, mox.IgnoreArg(), share['id'], share['snapshot_id'], request_spec=request_spec, filter_properties={}) self.mox.ReplayAll() self.api.create(self.context, 'nfs', '1', 'fakename', 'fakedesc', snapshot=snapshot, availability_zone='fakeaz')
def test_share_metadata_update_delete(self): metadata1 = {"a": "1", "c": "2"} metadata2 = {"a": "3", "d": "4"} should_be = metadata2 share_id = str(uuid.uuid4()) db_driver.share_create(self.context, {"id": share_id, "metadata": metadata1}) db_driver.share_metadata_update(self.context, share_id, metadata2, True) self.assertEqual(should_be, db_driver.share_metadata_get(self.context, share_id))
def test_share_metadata_update_delete(self): metadata1 = {'a': '1', 'c': '2'} metadata2 = {'a': '3', 'd': '4'} should_be = metadata2 share_id = str(uuid.uuid4()) db_driver.share_create(self.context, {'id': share_id, 'metadata': metadata1}) db_driver.share_metadata_update(self.context, share_id, metadata2, True) self.assertEqual(should_be, db_driver.share_metadata_get(self.context, share_id))
def test_member_force_delete_share(self): share = db.share_create(self.admin_context, {'size': 1}) req = webob.Request.blank('/v1/fake/shares/%s/action' % share['id']) req.method = 'POST' req.headers['content-type'] = 'application/json' req.body = jsonutils.dumps({'os-force_delete': {}}) req.environ['manila.context'] = self.member_context resp = req.get_response(app()) self.assertEqual(resp.status_int, 403)
def setUp(self): super(ShareMetaDataTest, self).setUp() self.share_api = api.API() self.share_controller = shares.ShareController() self.controller = share_metadata.ShareMetadataController() self.ctxt = context.RequestContext("admin", "fake", True) self.origin_metadata = {"key1": "value1", "key2": "value2", "key3": "value3"} self.share = db.share_create(self.ctxt, {}) self.share_id = self.share["id"] self.url = "/shares/%s/metadata" % self.share_id db.share_metadata_update(self.ctxt, self.share_id, self.origin_metadata, delete=False)
def _create_share(status="creating", size=0, snapshot_id=None): """Create a share object.""" share = {} share['share_proto'] = "NFS" share['size'] = size share['snapshot_id'] = snapshot_id share['user_id'] = 'fake' share['project_id'] = 'fake' share['availability_zone'] = CONF.storage_availability_zone share['status'] = status share['host'] = CONF.host return db.share_create(context.get_admin_context(), share)
def test_reset_status_as_admin(self): # current status is available share = db.share_create(self.admin_context, {'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'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # request is accepted self.assertEqual(resp.status_int, 202) share = db.share_get(self.admin_context, share['id']) # status changed to 'error' self.assertEqual(share['status'], 'error')
def create_share_without_instance(**kwargs): share = { 'share_proto': "NFS", 'size': 0, 'snapshot_id': None, 'share_network_id': None, 'share_server_id': None, 'user_id': 'fake', 'project_id': 'fake', 'metadata': {}, 'availability_zone': 'fake_availability_zone', 'status': constants.STATUS_CREATING, 'host': 'fake_host' } share.update(copy.deepcopy(kwargs)) return db.share_create(context.get_admin_context(), share, False)
def test_malformed_reset_status_body(self): # current status is available share = db.share_create(self.admin_context, {'status': 'available'}) req = webob.Request.blank('/v1/fake/shares/%s/action' % share['id']) req.method = 'POST' req.headers['content-type'] = 'application/json' # malformed request body req.body = jsonutils.dumps({'os-reset_status': {'x-status': 'bad'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # bad request self.assertEqual(resp.status_int, 400) share = db.share_get(self.admin_context, share['id']) # status is still 'available' self.assertEqual(share['status'], 'available')
def setUp(self): super(ShareMetaDataTest, self).setUp() self.share_api = api.API() self.share_controller = shares.ShareController() self.controller = share_metadata.ShareMetadataController() self.ctxt = context.RequestContext('admin', 'fake', True) self.origin_metadata = { "key1": "value1", "key2": "value2", "key3": "value3", } self.share = db.share_create(self.ctxt, {}) self.share_id = self.share['id'] self.url = '/shares/%s/metadata' % self.share_id db.share_metadata_update( self.ctxt, self.share_id, self.origin_metadata, delete=False)
def _create_share(status="creating", size=0, snapshot_id=None, share_network_id=None, share_server_id=None): """Create a share object.""" share = {} share['share_proto'] = "NFS" share['size'] = size share['snapshot_id'] = snapshot_id share['share_network_id'] = share_network_id share['share_server_id'] = share_server_id share['user_id'] = 'fake' share['project_id'] = 'fake' share['metadata'] = {'fake_key': 'fake_value'} share['availability_zone'] = 'fake_availability_zone' share['status'] = status share['host'] = 'fake_host' return db.share_create(context.get_admin_context(), share)
def test_invalid_status_for_share(self): # current status is 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' # 'invalid' is not a valid status req.body = jsonutils.dumps({'os-reset_status': {'status': 'invalid'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # bad request self.assertEqual(resp.status_int, 400) share = db.share_get(self.admin_context, share['id']) # status is still 'available' self.assertEqual(share['status'], constants.STATUS_AVAILABLE)
def test_reset_status_as_non_admin(self): # current status is 'error' share = db.share_create(context.get_admin_context(), {'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': constants.STATUS_AVAILABLE}}) # non-admin context req.environ['manila.context'] = self.member_context resp = req.get_response(app()) # request is not authorized self.assertEqual(resp.status_int, 403) share = db.share_get(context.get_admin_context(), share['id']) # status is still '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'}) 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'}}) # non-admin context req.environ['manila.context'] = self.member_context resp = req.get_response(app()) # request is not authorized 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')
def test_invalid_status_for_share(self): # admin context ctx = context.RequestContext('admin', 'fake', True) # current status is available share = db.share_create(ctx, {'status': 'available'}) req = webob.Request.blank('/v2/fake/shares/%s/action' % share['id']) req.method = 'POST' req.headers['content-type'] = 'application/json' # 'invalid' is not a valid status req.body = jsonutils.dumps({'os-reset_status': {'status': 'invalid'}}) # attach admin context to request req.environ['manila.context'] = ctx resp = req.get_response(app()) # bad request self.assertEqual(resp.status_int, 400) share = db.share_get(ctx, share['id']) # status is still 'available' self.assertEqual(share['status'], 'available')
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']}) 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'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # request is accepted 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')
def _create_share(status="creating", size=0, snapshot_id=None, share_network_id=None, share_server_id=None): """Create a share object.""" share = {} share['share_proto'] = "NFS" share['size'] = size share['snapshot_id'] = snapshot_id share['share_network_id'] = share_network_id share['share_server_id'] = share_server_id share['user_id'] = 'fake' share['project_id'] = 'fake' share['metadata'] = {'fake_key': 'fake_value'} share['availability_zone'] = CONF.storage_availability_zone share['status'] = status share['host'] = CONF.host return db.share_create(context.get_admin_context(), share)
def setUp(self): self.context = context.get_admin_context() shr = {} shr['host'] = 'fake_host' shr['availability_zone'] = CONF.storage_availability_zone shr['status'] = "available" share = db.share_create(self.context, shr) acs = {} acs['access_type'] = "ip" acs['access_to'] = "123.123.123.123" acs['share_id'] = share['id'] access = db.share_access_create(self.context, acs) snap = {} snap['share_id'] = share['id'] snapshot = db.share_snapshot_create(self.context, snap) self.fake_share = jsonutils.to_primitive(share) self.fake_access = jsonutils.to_primitive(access) self.fake_snapshot = jsonutils.to_primitive(snapshot) super(ShareRpcAPITestCase, self).setUp()
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']}) req = webob.Request.blank('/v1/fake/snapshots/%s/action' % snapshot['id']) req.method = 'POST' req.headers['content-type'] = 'application/json' # 'attaching' is not a valid status for snapshots req.body = jsonutils.dumps({'os-reset_status': {'status': 'attaching'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # request is accepted 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')
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'] }) 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'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # request is accepted 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')
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'] }) req = webob.Request.blank('/v1/fake/snapshots/%s/action' % snapshot['id']) req.method = 'POST' req.headers['content-type'] = 'application/json' # 'attaching' is not a valid status for snapshots req.body = jsonutils.dumps({'os-reset_status': {'status': 'attaching'}}) # attach admin context to request req.environ['manila.context'] = self.admin_context resp = req.get_response(app()) # request is accepted 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')
def setUp(self): super(ShareRpcAPITestCase, self).setUp() self.context = context.get_admin_context() shr = {} shr['host'] = 'fake_host' shr['availability_zone'] = CONF.storage_availability_zone shr['status'] = "available" share = db.share_create(self.context, shr) acs = {} acs['access_type'] = "ip" acs['access_to'] = "123.123.123.123" acs['share_id'] = share['id'] access = db.share_access_create(self.context, acs) snap = {} snap['share_id'] = share['id'] snapshot = db.share_snapshot_create(self.context, snap) server = {'id': 'fake_share_server_id', 'host': 'fake_host'} share_server = db.share_server_create(self.context, server) self.fake_share = jsonutils.to_primitive(share) self.fake_access = jsonutils.to_primitive(access) self.fake_snapshot = jsonutils.to_primitive(snapshot) self.fake_share_server = jsonutils.to_primitive(share_server) self.ctxt = context.RequestContext('fake_user', 'fake_project') self.rpcapi = share_rpcapi.ShareAPI()
def test_share_metadata_get(self): metadata = {"a": "b", "c": "d"} share_id = str(uuid.uuid4()) db_driver.share_create(self.context, {"id": share_id, "metadata": metadata}) self.assertEqual(metadata, db_driver.share_metadata_get(self.context, share_id))