예제 #1
0
 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))
예제 #2
0
    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")
예제 #3
0
    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')
예제 #4
0
 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))
예제 #5
0
파일: test_api.py 프로젝트: ddiss/manila
 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))
예제 #6
0
 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))
예제 #7
0
 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))
예제 #8
0
 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)
예제 #9
0
 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)
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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')
예제 #13
0
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)
예제 #14
0
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)
예제 #15
0
 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')
예제 #16
0
 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')
예제 #17
0
 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')
예제 #18
0
 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)
예제 #19
0
 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)
예제 #20
0
 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)
예제 #21
0
 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)
예제 #22
0
 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')
예제 #23
0
 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')
예제 #24
0
 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')
예제 #25
0
 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)
예제 #26
0
 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()
예제 #27
0
 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')
예제 #28
0
 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')
예제 #29
0
 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')
예제 #30
0
 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()
예제 #31
0
파일: test_api.py 프로젝트: ddiss/manila
 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))