Example #1
0
    def test_create_with_source_sg_snapshot_id_with_members_error(self):
        snap = fake_share_group_snapshot(
            "fake_source_share_group_snapshot_id",
            status=constants.STATUS_AVAILABLE)
        member = stubs.stub_share_group_snapshot_member('fake_member_id')
        member_2 = stubs.stub_share_group_snapshot_member('fake_member2_id')
        share = stubs.stub_share('fakeshareid')
        fake_share_type_mapping = {'share_type_id': self.fake_share_type['id']}
        orig_share_group = fake_share_group(
            'fakeorigid',
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_AVAILABLE,
            share_network_id='fake_network_id',
            share_server_id='fake_server_id')
        share_group = fake_share_group(
            'fakeid',
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_CREATING,
            share_network_id='fake_network_id',
            share_server_id='fake_server_id')
        expected_values = share_group.copy()
        for name in ('id', 'created_at', 'share_network_id',
                     'share_server_id'):
            expected_values.pop(name, None)
        expected_values['source_share_group_snapshot_id'] = snap['id']
        expected_values['share_types'] = [self.fake_share_type['id']]
        expected_values['share_network_id'] = 'fake_network_id'
        expected_values['share_server_id'] = 'fake_server_id'

        self.mock_object(db_driver, 'share_group_snapshot_get',
                         mock.Mock(return_value=snap))
        self.mock_object(db_driver, 'share_group_get',
                         mock.Mock(return_value=orig_share_group))
        self.mock_object(db_driver, 'share_network_get')
        self.mock_object(db_driver, 'share_instance_get',
                         mock.Mock(return_value=share))
        self.mock_object(db_driver, 'share_group_create',
                         mock.Mock(return_value=share_group))
        self.mock_object(db_driver, 'share_get',
                         mock.Mock(return_value=stubs.stub_share('fakeshare')))
        self.mock_object(share_types, 'get_share_type',
                         mock.Mock(return_value={
                             "id": self.fake_share_type['id']}))
        self.mock_object(db_driver, 'share_group_snapshot_members_get_all',
                         mock.Mock(return_value=[member, member_2]))
        self.mock_object(self.share_api, 'create',
                         mock.Mock(side_effect=[None, exception.Error]))
        self.mock_object(db_driver, 'share_group_destroy')

        self.assertRaises(exception.Error, self.api.create, self.context,
                          source_share_group_snapshot_id=snap['id'])

        db_driver.share_group_create.assert_called_once_with(
            self.context, expected_values)
        self.assertEqual(2, self.share_api.create.call_count)
        self.assertEqual(1, db_driver.share_group_destroy.call_count)
Example #2
0
    def test_create_cgsnapshot_with_two_members(self):
        cg = fake_cg(
            "fake_cg_id",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            status=constants.STATUS_AVAILABLE,
        )
        snap = fake_cgsnapshot(
            "fakeid",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            consistency_group_id=cg["id"],
            status=constants.STATUS_CREATING,
        )
        share = stubs.stub_share("fake_share_id", status=constants.STATUS_AVAILABLE)
        share_2 = stubs.stub_share("fake_share2_id", status=constants.STATUS_AVAILABLE)
        expected_values = snap.copy()
        for name in ("id", "created_at"):
            expected_values.pop(name, None)
        expected_member_1_values = {
            "cgsnapshot_id": snap["id"],
            "user_id": self.context.user_id,
            "project_id": self.context.project_id,
            "status": constants.STATUS_CREATING,
            "size": share["size"],
            "share_proto": share["share_proto"],
            "share_type_id": share["share_type_id"],
            "share_id": share["id"],
            "share_instance_id": mock.ANY,
        }
        expected_member_2_values = {
            "cgsnapshot_id": snap["id"],
            "user_id": self.context.user_id,
            "project_id": self.context.project_id,
            "status": constants.STATUS_CREATING,
            "size": share_2["size"],
            "share_proto": share_2["share_proto"],
            "share_type_id": share_2["share_type_id"],
            "share_id": share_2["id"],
            "share_instance_id": mock.ANY,
        }
        self.mock_object(db_driver, "consistency_group_get", mock.Mock(return_value=cg))
        self.mock_object(db_driver, "cgsnapshot_create", mock.Mock(return_value=snap))
        self.mock_object(db_driver, "share_get_all_by_consistency_group_id", mock.Mock(return_value=[share, share_2]))
        self.mock_object(db_driver, "cgsnapshot_member_create", mock.Mock())

        self.api.create_cgsnapshot(self.context, consistency_group_id=cg["id"])

        db_driver.consistency_group_get.assert_called_once_with(self.context, cg["id"])
        db_driver.cgsnapshot_create.assert_called_once_with(self.context, expected_values)

        db_driver.cgsnapshot_member_create.assert_any_call(self.context, expected_member_1_values)
        db_driver.cgsnapshot_member_create.assert_any_call(self.context, expected_member_2_values)
        self.share_rpcapi.create_cgsnapshot.assert_called_once_with(self.context, snap, cg["host"])
Example #3
0
    def test_share_create_from_snapshot_not_supported(self, microversion):
        # This create operation should work, because the 1.0 API doesn't check
        # create_share_from_snapshot_support.

        parent_share_net = 444
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "snapshot_id": 333,
            "share_network_id": parent_share_net
        }
        create_mock = mock.Mock(return_value=stubs.stub_share(
            '1',
            display_name=shr['name'],
            display_description=shr['description'],
            size=shr['size'],
            share_proto=shr['share_proto'].upper(),
            snapshot_id=shr['snapshot_id'],
            instance=dict(availability_zone=shr['availability_zone'],
                          share_network_id=shr['share_network_id'])))
        self.mock_object(share_api.API, 'create', create_mock)
        self.mock_object(share_api.API, 'get_snapshot',
                         stubs.stub_snapshot_get)
        parent_share = stubs.stub_share(
            '1',
            instance={'share_network_id': parent_share_net},
            create_share_from_snapshot_support=False)
        self.mock_object(share_api.API, 'get',
                         mock.Mock(return_value=parent_share))
        self.mock_object(share_api.API, 'get_share_network',
                         mock.Mock(return_value={'id': parent_share_net}))
        self.mock_object(db,
                         'share_network_subnet_get_by_availability_zone_id')

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares', version=microversion)

        res_dict = self.controller.create(req, body)

        self.mock_policy_check.assert_called_once_with(
            req.environ['manila.context'], self.resource_name, 'create')
        expected = self._get_expected_share_detailed_response(shr)
        expected['share'].pop('snapshot_support')
        self.assertDictEqual(expected, res_dict)
        # pylint: disable=unsubscriptable-object
        self.assertEqual(parent_share_net,
                         create_mock.call_args[1]['share_network_id'])
Example #4
0
    def test_share_create_from_snapshot_with_share_net_equals_parent(self):
        parent_share_net = 444
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "snapshot_id": 333,
            "share_network_id": parent_share_net
        }
        create_mock = mock.Mock(return_value=stubs.stub_share(
            '1',
            display_name=shr['name'],
            display_description=shr['description'],
            size=shr['size'],
            share_proto=shr['share_proto'].upper(),
            availability_zone=shr['availability_zone'],
            snapshot_id=shr['snapshot_id'],
            share_network_id=shr['share_network_id']))
        self.stubs.Set(share_api.API, 'create', create_mock)
        self.stubs.Set(share_api.API, 'get_snapshot', stubs.stub_snapshot_get)
        self.stubs.Set(
            share_api.API, 'get',
            mock.Mock(return_value={'share_network_id': parent_share_net}))
        self.stubs.Set(share_api.API, 'get_share_network',
                       mock.Mock(return_value={'id': parent_share_net}))

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares')
        res_dict = self.controller.create(req, body)
        expected = self._get_expected_share_detailed_response(shr)
        self.assertEqual(res_dict, expected)
        self.assertEqual(create_mock.call_args[1]['share_network_id'],
                         parent_share_net)
Example #5
0
    def test_share_create_from_snapshot_with_share_net_equals_parent(self):
        parent_share_net = 444
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "snapshot_id": 333,
            "share_network_id": parent_share_net
        }
        create_mock = mock.Mock(return_value=stubs.stub_share('1',
                                display_name=shr['name'],
                                display_description=shr['description'],
                                size=shr['size'],
                                share_proto=shr['share_proto'].upper(),
                                availability_zone=shr['availability_zone'],
                                snapshot_id=shr['snapshot_id'],
                                share_network_id=shr['share_network_id']))
        self.mock_object(share_api.API, 'create', create_mock)
        self.mock_object(share_api.API, 'get_snapshot',
                         stubs.stub_snapshot_get)
        self.mock_object(share_api.API, 'get', mock.Mock(
            return_value={'share_network_id': parent_share_net}))
        self.mock_object(share_api.API, 'get_share_network', mock.Mock(
            return_value={'id': parent_share_net}))

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares')
        res_dict = self.controller.create(req, body)
        expected = self._get_expected_share_detailed_response(shr)
        expected['share'].pop('snapshot_support')
        self.assertEqual(res_dict, expected)
        self.assertEqual(create_mock.call_args[1]['share_network_id'],
                         parent_share_net)
Example #6
0
    def _get_fake_share(self):

        fake_share = {
            'share_type_id': 'fake_share_type_id',
            'share_type': {
                'name': 'fake_share_type_name',
            },
            'export_location': 'fake_export_location',
            'export_locations': ['fake_export_location'],
            'access_rules_status': 'fake_rule_status',
            'instance': {
                'share_type': {
                    'name': 'fake_share_type_name',
                },
                'share_type_id': 'fake_share_type_id',
                'progress': '100%',
            },
            'replication_type': 'fake_replication_type',
            'has_replicas': False,
            'user_id': 'fake_userid',
            'snapshot_support': True,
            'create_share_from_snapshot_support': True,
            'revert_to_snapshot_support': True,
            'progress': '100%',
        }
        return stubs.stub_share('fake_id', **fake_share)
Example #7
0
 def test_share_create_from_snapshot_without_share_net_no_parent(self):
     shr = {
         "size": 100,
         "name": "Share Test Name",
         "description": "Share Test Desc",
         "share_proto": "fakeproto",
         "availability_zone": "zone1:host1",
         "snapshot_id": 333,
         "share_network_id": None,
     }
     create_mock = mock.Mock(return_value=stubs.stub_share(
         '1',
         display_name=shr['name'],
         display_description=shr['description'],
         size=shr['size'],
         share_proto=shr['share_proto'].upper(),
         availability_zone=shr['availability_zone'],
         snapshot_id=shr['snapshot_id'],
         share_network_id=shr['share_network_id']))
     self.mock_object(share_api.API, 'create', create_mock)
     body = {"share": copy.deepcopy(shr)}
     req = fakes.HTTPRequest.blank('/shares')
     res_dict = self.controller.create(req, body)
     expected = self._get_expected_share_detailed_response(shr)
     expected['share'].pop('snapshot_support')
     self.assertEqual(expected, res_dict)
Example #8
0
    def test_share_create_with_share_net(self):
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "share_network_id": "fakenetid"
        }
        create_mock = mock.Mock(return_value=stubs.stub_share('1',
                                display_name=shr['name'],
                                display_description=shr['description'],
                                size=shr['size'],
                                share_proto=shr['share_proto'].upper(),
                                availability_zone=shr['availability_zone'],
                                share_network_id=shr['share_network_id']))
        self.mock_object(share_api.API, 'create', create_mock)
        self.mock_object(share_api.API, 'get_share_network', mock.Mock(
            return_value={'id': 'fakenetid'}))
        self.mock_object(
            db, 'share_network_subnet_get_by_availability_zone_id',
            mock.Mock(return_value={'id': 'fakesubnetid'}))

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/v1/fake/shares')
        res_dict = self.controller.create(req, body)

        self.mock_policy_check.assert_called_once_with(
            req.environ['manila.context'], self.resource_name, 'create')
        expected = self._get_expected_share_detailed_response(shr)
        expected['share'].pop('snapshot_support')
        self.assertEqual(expected, res_dict)
        # pylint: disable=unsubscriptable-object
        self.assertEqual("fakenetid",
                         create_mock.call_args[1]['share_network_id'])
Example #9
0
    def test_share_create_with_share_net(self):
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "share_network_id": "fakenetid"
        }
        create_mock = mock.Mock(return_value=stubs.stub_share('1',
                                display_name=shr['name'],
                                display_description=shr['description'],
                                size=shr['size'],
                                share_proto=shr['share_proto'].upper(),
                                availability_zone=shr['availability_zone'],
                                share_network_id=shr['share_network_id']))
        self.stubs.Set(share_api.API, 'create', create_mock)
        self.stubs.Set(share_api.API, 'get_share_network', mock.Mock(
            return_value={'id': 'fakenetid'}))

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares')
        res_dict = self.controller.create(req, body)

        expected = self._get_expected_share_detailed_response(shr)
        self.assertEqual(expected, res_dict)
        self.assertEqual(create_mock.call_args[1]['share_network_id'],
                         "fakenetid")
Example #10
0
 def setUp(self):
     super(self.__class__, self).setUp()
     self.controller = shares.ShareController()
     self.mock_object(db, 'availability_zone_get')
     self.mock_object(share_api.API, 'get_all', stubs.stub_get_all_shares)
     self.mock_object(share_api.API, 'get', stubs.stub_share_get)
     self.mock_object(share_api.API, 'update', stubs.stub_share_update)
     self.mock_object(share_api.API, 'delete', stubs.stub_share_delete)
     self.mock_object(share_api.API, 'get_snapshot',
                      stubs.stub_snapshot_get)
     self.maxDiff = None
     self.share = {
         "size": 100,
         "display_name": "Share Test Name",
         "display_description": "Share Test Desc",
         "share_proto": "fakeproto",
         "availability_zone": "zone1:host1",
         "is_public": False,
     }
     self.create_mock = mock.Mock(return_value=stubs.stub_share(
         '1',
         display_name=self.share['display_name'],
         display_description=self.share['display_description'],
         size=100,
         share_proto=self.share['share_proto'].upper(),
         availability_zone=self.share['availability_zone']))
     self.vt = {
         'id': 'fake_volume_type_id',
         'name': 'fake_volume_type_name',
     }
     CONF.set_default("default_share_type", None)
Example #11
0
    def test_share_create_from_snapshot_without_share_net_no_parent(self):
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "snapshot_id": 333,
            "share_network_id": None,
        }
        create_mock = mock.Mock(return_value=stubs.stub_share('1',
                                display_name=shr['name'],
                                display_description=shr['description'],
                                size=shr['size'],
                                share_proto=shr['share_proto'].upper(),
                                availability_zone=shr['availability_zone'],
                                snapshot_id=shr['snapshot_id'],
                                share_network_id=shr['share_network_id']))
        self.mock_object(share_api.API, 'create', create_mock)
        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares')

        res_dict = self.controller.create(req, body)

        self.mock_policy_check.assert_called_once_with(
            req.environ['manila.context'], self.resource_name, 'create')
        expected = self._get_expected_share_detailed_response(shr)
        expected['share'].pop('snapshot_support')
        self.assertEqual(expected, res_dict)
Example #12
0
 def setUp(self):
     super(ShareApiTest, self).setUp()
     self.controller = shares.ShareController()
     self.mock_object(db, 'availability_zone_get')
     self.mock_object(share_api.API, 'get_all',
                      stubs.stub_get_all_shares)
     self.mock_object(share_api.API, 'get',
                      stubs.stub_share_get)
     self.mock_object(share_api.API, 'update', stubs.stub_share_update)
     self.mock_object(share_api.API, 'delete', stubs.stub_share_delete)
     self.mock_object(share_api.API, 'get_snapshot',
                      stubs.stub_snapshot_get)
     self.maxDiff = None
     self.share = {
         "size": 100,
         "display_name": "Share Test Name",
         "display_description": "Share Test Desc",
         "share_proto": "fakeproto",
         "availability_zone": "zone1:host1",
         "is_public": False,
     }
     self.create_mock = mock.Mock(
         return_value=stubs.stub_share(
             '1',
             display_name=self.share['display_name'],
             display_description=self.share['display_description'],
             size=100,
             share_proto=self.share['share_proto'].upper(),
             availability_zone=self.share['availability_zone'])
     )
     self.vt = {
         'id': 'fake_volume_type_id',
         'name': 'fake_volume_type_name',
     }
     CONF.set_default("default_share_type", None)
Example #13
0
    def test_share_create_from_snapshot_not_supported(self, microversion):
        # This create operation should work, because the 1.0 API doesn't check
        # create_share_from_snapshot_support.

        parent_share_net = 444
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "snapshot_id": 333,
            "share_network_id": parent_share_net
        }
        create_mock = mock.Mock(return_value=stubs.stub_share('1',
                                display_name=shr['name'],
                                display_description=shr['description'],
                                size=shr['size'],
                                share_proto=shr['share_proto'].upper(),
                                snapshot_id=shr['snapshot_id'],
                                instance=dict(
                                    availability_zone=shr['availability_zone'],
                                    share_network_id=shr['share_network_id'])))
        self.mock_object(share_api.API, 'create', create_mock)
        self.mock_object(share_api.API, 'get_snapshot',
                         stubs.stub_snapshot_get)
        parent_share = stubs.stub_share(
            '1', instance={'share_network_id': parent_share_net},
            create_share_from_snapshot_support=False)
        self.mock_object(share_api.API, 'get', mock.Mock(
            return_value=parent_share))
        self.mock_object(share_api.API, 'get_share_network', mock.Mock(
            return_value={'id': parent_share_net}))

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares', version=microversion)

        res_dict = self.controller.create(req, body)

        self.mock_policy_check.assert_called_once_with(
            req.environ['manila.context'], self.resource_name, 'create')
        expected = self._get_expected_share_detailed_response(shr)
        expected['share'].pop('snapshot_support')
        self.assertDictEqual(expected, res_dict)
        self.assertEqual(parent_share_net,
                         create_mock.call_args[1]['share_network_id'])
Example #14
0
 def test_share_delete_in_consistency_group_param_not_provided(self):
     fake_share = stubs.stub_share('fake_share',
                                   consistency_group_id='fake_cg_id')
     self.mock_object(share_api.API, 'get',
                      mock.Mock(return_value=fake_share))
     req = fakes.HTTPRequest.blank('/shares/1')
     self.assertRaises(webob.exc.HTTPBadRequest,
                       self.controller.delete, req, 1)
Example #15
0
 def test_share_delete_in_consistency_group_param_not_provided(self):
     fake_share = stubs.stub_share('fake_share',
                                   consistency_group_id='fake_cg_id')
     self.mock_object(share_api.API, 'get',
                      mock.Mock(return_value=fake_share))
     req = fakes.HTTPRequest.blank('/shares/1')
     self.assertRaises(webob.exc.HTTPBadRequest, self.controller.delete,
                       req, 1)
Example #16
0
    def test_create_with_source_share_group_snapshot_id(self):
        snap = fake_share_group_snapshot(
            "fake_source_share_group_snapshot_id",
            status=constants.STATUS_AVAILABLE)
        fake_share_type_mapping = {'share_type_id': self.fake_share_type['id']}
        orig_share_group = fake_share_group(
            'fakeorigid', user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_AVAILABLE,
            host='fake_original_host',
            share_network_id='fake_network_id',
            share_server_id='fake_server_id')

        share_group = fake_share_group(
            'fakeid', user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_CREATING,
            host='fake_original_host',
            share_network_id='fake_network_id',
            share_server_id='fake_server_id')
        expected_values = share_group.copy()
        for name in ('id', 'created_at', 'share_network_id',
                     'share_server_id'):
            expected_values.pop(name, None)
        expected_values['source_share_group_snapshot_id'] = snap['id']
        expected_values['share_types'] = [self.fake_share_type['id']]
        expected_values['share_network_id'] = 'fake_network_id'
        expected_values['share_server_id'] = 'fake_server_id'

        self.mock_object(
            db_driver, 'share_group_snapshot_get',
            mock.Mock(return_value=snap))
        self.mock_object(
            db_driver, 'share_group_get',
            mock.Mock(return_value=orig_share_group))
        self.mock_object(
            db_driver, 'share_group_create',
            mock.Mock(return_value=share_group))
        self.mock_object(
            db_driver, 'share_get',
            mock.Mock(return_value=stubs.stub_share('fake_share')))
        self.mock_object(
            share_types, 'get_share_type',
            mock.Mock(return_value={"id": self.fake_share_type['id']}))
        self.mock_object(db_driver, 'share_network_get')
        self.mock_object(
            db_driver, 'share_group_snapshot_members_get_all',
            mock.Mock(return_value=[]))

        self.api.create(
            self.context, source_share_group_snapshot_id=snap['id'])

        db_driver.share_group_create.assert_called_once_with(
            self.context, expected_values)
        self.share_rpcapi.create_share_group.assert_called_once_with(
            self.context, share_group, orig_share_group['host'])
Example #17
0
 def test_share_delete_in_consistency_group(self):
     fake_share = stubs.stub_share('fake_share',
                                   consistency_group_id='fake_cg_id')
     self.mock_object(share_api.API, 'get',
                      mock.Mock(return_value=fake_share))
     req = fakes.HTTPRequest.blank(
         '/shares/1?consistency_group_id=fake_cg_id')
     resp = self.controller.delete(req, 1)
     self.assertEqual(202, resp.status_int)
Example #18
0
 def test_share_delete_in_consistency_group(self):
     fake_share = stubs.stub_share('fake_share',
                                   consistency_group_id='fake_cg_id')
     self.mock_object(share_api.API, 'get',
                      mock.Mock(return_value=fake_share))
     req = fakes.HTTPRequest.blank(
         '/shares/1?consistency_group_id=fake_cg_id')
     resp = self.controller.delete(req, 1)
     self.assertEqual(resp.status_int, 202)
Example #19
0
    def test_share_create_from_snapshot_with_share_net_equals_parent(self):
        parent_share_net = 444
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "snapshot_id": 333,
            "share_network_id": parent_share_net
        }
        create_mock = mock.Mock(return_value=stubs.stub_share(
            '1',
            display_name=shr['name'],
            display_description=shr['description'],
            size=shr['size'],
            share_proto=shr['share_proto'].upper(),
            snapshot_id=shr['snapshot_id'],
            instance=dict(availability_zone=shr['availability_zone'],
                          share_network_id=shr['share_network_id'])))
        self.mock_object(share_api.API, 'create', create_mock)
        self.mock_object(share_api.API, 'get_snapshot',
                         stubs.stub_snapshot_get)
        parent_share = stubs.stub_share(
            '1',
            instance={'share_network_id': parent_share_net},
            create_share_from_snapshot_support=True)
        self.mock_object(share_api.API, 'get',
                         mock.Mock(return_value=parent_share))
        self.mock_object(share_api.API, 'get_share_network',
                         mock.Mock(return_value={'id': parent_share_net}))

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares')

        res_dict = self.controller.create(req, body)

        self.mock_policy_check.assert_called_once_with(
            req.environ['manila.context'], self.resource_name, 'create')
        expected = self._get_expected_share_detailed_response(shr)
        expected['share'].pop('snapshot_support')
        self.assertEqual(expected, res_dict)
        self.assertEqual(parent_share_net,
                         create_mock.call_args[1]['share_network_id'])
Example #20
0
    def test_create_share_group_snapshot_error_creating_member(self):
        share_group = fake_share_group(
            'fake_group_id', user_id=self.context.user_id,
            project_id=self.context.project_id,
            status=constants.STATUS_AVAILABLE)
        snap = fake_share_group_snapshot(
            'fakeid', user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_group_id=share_group['id'],
            status=constants.STATUS_CREATING)
        share = stubs.stub_share(
            'fake_share_id', status=constants.STATUS_AVAILABLE)
        expected_values = snap.copy()
        for name in ('id', 'created_at'):
            expected_values.pop(name, None)
        expected_member_values = {
            'share_group_snapshot_id': snap['id'],
            'user_id': self.context.user_id,
            'project_id': self.context.project_id,
            'status': constants.STATUS_CREATING,
            'size': share['size'],
            'share_proto': share['share_proto'],
            'share_id': share['id'],
            'share_instance_id': mock.ANY,
        }
        self.mock_object(
            db_driver, 'share_group_get',
            mock.Mock(return_value=share_group))
        self.mock_object(
            db_driver, 'share_group_snapshot_create',
            mock.Mock(return_value=snap))
        self.mock_object(db_driver, 'share_group_snapshot_destroy')
        self.mock_object(
            db_driver, 'share_group_snapshot_member_create',
            mock.Mock(side_effect=exception.Error))
        self.mock_object(
            db_driver, 'share_get_all_by_share_group_id',
            mock.Mock(return_value=[share]))

        self.assertRaises(
            exception.Error,
            self.api.create_share_group_snapshot,
            self.context, share_group_id=share_group['id'])

        db_driver.share_group_get.assert_called_once_with(
            self.context, share_group['id'])
        db_driver.share_group_snapshot_create.assert_called_once_with(
            self.context, expected_values)
        db_driver.share_group_snapshot_member_create.assert_called_once_with(
            self.context, expected_member_values)
        db_driver.share_group_snapshot_destroy.assert_called_once_with(
            self.context, snap['id'])
Example #21
0
    def setUp(self):
        super(ShareAPITest, self).setUp()
        self.controller = shares.ShareController()
        self.mock_object(db, 'availability_zone_get')
        self.mock_object(share_api.API, 'get_all',
                         stubs.stub_get_all_shares)
        self.mock_object(share_api.API, 'get',
                         stubs.stub_share_get)
        self.mock_object(share_api.API, 'update', stubs.stub_share_update)
        self.mock_object(share_api.API, 'delete', stubs.stub_share_delete)
        self.mock_object(share_api.API, 'get_snapshot',
                         stubs.stub_snapshot_get)
        self.mock_object(share_types, 'get_share_type',
                         stubs.stub_share_type_get)
        self.mock_object(
            common, 'validate_public_share_policy',
            mock.Mock(side_effect=lambda *args, **kwargs: args[1]))
        self.resource_name = self.controller.resource_name
        self.mock_policy_check = self.mock_object(policy, 'check_policy')
        self.maxDiff = None
        self.share = {
            "size": 100,
            "display_name": "Share Test Name",
            "display_description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "is_public": False,
        }
        self.create_mock = mock.Mock(
            return_value=stubs.stub_share(
                '1',
                display_name=self.share['display_name'],
                display_description=self.share['display_description'],
                size=100,
                share_proto=self.share['share_proto'].upper(),
                availability_zone=self.share['availability_zone'])
        )
        self.vt = {
            'id': 'fake_volume_type_id',
            'name': 'fake_volume_type_name',
            'required_extra_specs': {
                'driver_handles_share_servers': 'False'
            },
            'extra_specs': {
                'driver_handles_share_servers': 'False'
            }
        }

        CONF.set_default("default_share_type", None)
Example #22
0
    def setUp(self):
        super(ShareAPITest, self).setUp()
        self.controller = shares.ShareController()
        self.mock_object(db, 'availability_zone_get')
        self.mock_object(share_api.API, 'get_all',
                         stubs.stub_get_all_shares)
        self.mock_object(share_api.API, 'get',
                         stubs.stub_share_get)
        self.mock_object(share_api.API, 'update', stubs.stub_share_update)
        self.mock_object(share_api.API, 'delete', stubs.stub_share_delete)
        self.mock_object(share_api.API, 'get_snapshot',
                         stubs.stub_snapshot_get)
        self.mock_object(share_types, 'get_share_type',
                         stubs.stub_share_type_get)
        self.mock_object(
            common, 'validate_public_share_policy',
            mock.Mock(side_effect=lambda *args, **kwargs: args[1]))
        self.resource_name = self.controller.resource_name
        self.mock_policy_check = self.mock_object(policy, 'check_policy')
        self.maxDiff = None
        self.share = {
            "size": 100,
            "display_name": "Share Test Name",
            "display_description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1",
            "is_public": False,
        }
        self.create_mock = mock.Mock(
            return_value=stubs.stub_share(
                '1',
                display_name=self.share['display_name'],
                display_description=self.share['display_description'],
                size=100,
                share_proto=self.share['share_proto'].upper(),
                availability_zone=self.share['availability_zone'])
        )
        self.vt = {
            'id': 'fake_volume_type_id',
            'name': 'fake_volume_type_name',
            'required_extra_specs': {
                'driver_handles_share_servers': 'False'
            },
            'extra_specs': {
                'driver_handles_share_servers': 'False'
            }
        }

        CONF.set_default("default_share_type", None)
Example #23
0
    def test_create_with_source_cgsnapshot_id_with_members_error(self):
        snap = fake_cgsnapshot("fake_source_cgsnapshot_id", status=constants.STATUS_AVAILABLE)
        member = stubs.stub_cgsnapshot_member("fake_member_id")
        member_2 = stubs.stub_cgsnapshot_member("fake_member2_id")
        share = stubs.stub_share("fakeshareid")
        fake_share_type_mapping = {"share_type_id": "fake_share_type_id"}
        orig_cg = fake_cg(
            "fakeorigid",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_AVAILABLE,
            share_network_id="fake_network_id",
            share_server_id="fake_server_id",
        )

        cg = fake_cg(
            "fakeid",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_CREATING,
            share_network_id="fake_network_id",
            share_server_id="fake_server_id",
        )
        expected_values = cg.copy()
        for name in ("id", "created_at", "share_network_id", "share_server_id"):
            expected_values.pop(name, None)
        expected_values["source_cgsnapshot_id"] = snap["id"]
        expected_values["share_types"] = ["fake_share_type_id"]
        expected_values["share_network_id"] = "fake_network_id"
        expected_values["share_server_id"] = "fake_server_id"

        self.mock_object(db_driver, "cgsnapshot_get", mock.Mock(return_value=snap))
        self.mock_object(db_driver, "consistency_group_get", mock.Mock(return_value=orig_cg))
        self.mock_object(db_driver, "share_network_get")
        self.mock_object(db_driver, "share_instance_get", mock.Mock(return_value=share))
        self.mock_object(db_driver, "consistency_group_create", mock.Mock(return_value=cg))
        self.mock_object(share_types, "get_share_type", mock.Mock(return_value={"id": "fake_share_type_id"}))
        self.mock_object(db_driver, "cgsnapshot_members_get_all", mock.Mock(return_value=[member, member_2]))
        self.mock_object(self.share_api, "create", mock.Mock(side_effect=[None, exception.Error]))
        self.mock_object(db_driver, "consistency_group_destroy")

        self.assertRaises(exception.Error, self.api.create, self.context, source_cgsnapshot_id=snap["id"])

        db_driver.consistency_group_create.assert_called_once_with(self.context, expected_values)
        self.assertEqual(2, self.share_api.create.call_count)
        self.assertEqual(1, db_driver.consistency_group_destroy.call_count)
Example #24
0
    def test_create_cgsnapshot_with_member_share_in_creating(self):
        cg = fake_cg(
            "fake_cg_id",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            status=constants.STATUS_AVAILABLE,
        )
        share = stubs.stub_share("fake_share_id", status=constants.STATUS_CREATING)
        self.mock_object(db_driver, "consistency_group_get", mock.Mock(return_value=cg))
        self.mock_object(db_driver, "share_get_all_by_consistency_group_id", mock.Mock(return_value=[share]))

        self.assertRaises(
            exception.InvalidConsistencyGroup, self.api.create_cgsnapshot, self.context, consistency_group_id=cg["id"]
        )

        db_driver.consistency_group_get.assert_called_once_with(self.context, cg["id"])
Example #25
0
    def test_create_with_source_cgsnapshot_id_with_member(self):
        snap = fake_cgsnapshot("fake_source_cgsnapshot_id", status=constants.STATUS_AVAILABLE)
        share = stubs.stub_share("fakeshareid")
        member = stubs.stub_cgsnapshot_member("fake_member_id")
        fake_share_type_mapping = {"share_type_id": "fake_share_type_id"}
        orig_cg = fake_cg(
            "fakeorigid",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_AVAILABLE,
            share_network_id="fake_network_id",
            share_server_id="fake_server_id",
        )

        cg = fake_cg(
            "fakeid",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_types=[fake_share_type_mapping],
            status=constants.STATUS_CREATING,
            share_network_id="fake_network_id",
            share_server_id="fake_server_id",
        )
        expected_values = cg.copy()
        for name in ("id", "created_at", "fake_network_id", "fake_share_server_id"):
            expected_values.pop(name, None)
        expected_values["source_cgsnapshot_id"] = snap["id"]
        expected_values["share_types"] = ["fake_share_type_id"]
        expected_values["share_network_id"] = "fake_network_id"
        expected_values["share_server_id"] = "fake_server_id"

        self.mock_object(db_driver, "cgsnapshot_get", mock.Mock(return_value=snap))
        self.mock_object(db_driver, "consistency_group_get", mock.Mock(return_value=orig_cg))
        self.mock_object(db_driver, "consistency_group_create", mock.Mock(return_value=cg))
        self.mock_object(share_types, "get_share_type", mock.Mock(return_value={"id": "fake_share_type_id"}))
        self.mock_object(db_driver, "share_network_get")
        self.mock_object(db_driver, "share_instance_get", mock.Mock(return_value=share))
        self.mock_object(db_driver, "cgsnapshot_members_get_all", mock.Mock(return_value=[member]))
        self.mock_object(self.share_api, "create")

        self.api.create(self.context, source_cgsnapshot_id=snap["id"])

        db_driver.consistency_group_create.assert_called_once_with(self.context, expected_values)
        self.assertTrue(self.share_api.create.called)
        self.share_rpcapi.create_consistency_group.assert_called_once_with(self.context, cg, orig_cg["host"])
Example #26
0
    def _get_fake_share(self):

        fake_share = {
            'share_type_id': 'fake_share_type_id',
            'share_type': {
                'name': 'fake_share_type_name',
            },
            'export_location': 'fake_export_location',
            'export_locations': ['fake_export_location'],
            'access_rules_status': 'fake_rule_status',
            'instance': {},
            'replication_type': 'fake_replication_type',
            'has_replicas': False,
            'user_id': 'fake_userid',
            'snapshot_support': True,
            'create_share_from_snapshot_support': True,
            'revert_to_snapshot_support': True,
        }
        return stubs.stub_share('fake_id', **fake_share)
Example #27
0
    def test_create_share_group_snapshot_with_member_share_in_creating(self):
        share_group = fake_share_group(
            'fake_group_id', user_id=self.context.user_id,
            project_id=self.context.project_id,
            status=constants.STATUS_AVAILABLE)
        share = stubs.stub_share(
            'fake_share_id', status=constants.STATUS_CREATING)
        self.mock_object(
            db_driver, 'share_group_get', mock.Mock(return_value=share_group))
        self.mock_object(
            db_driver, 'share_get_all_by_share_group_id',
            mock.Mock(return_value=[share]))

        self.assertRaises(
            exception.InvalidShareGroup,
            self.api.create_share_group_snapshot,
            self.context, share_group_id=share_group['id'])

        db_driver.share_group_get.assert_called_once_with(
            self.context, share_group['id'])
Example #28
0
    def test_create_cgsnapshot_error_creating_member(self):
        cg = fake_cg(
            "fake_cg_id",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            status=constants.STATUS_AVAILABLE,
        )
        snap = fake_cgsnapshot(
            "fakeid",
            user_id=self.context.user_id,
            project_id=self.context.project_id,
            consistency_group_id=cg["id"],
            status=constants.STATUS_CREATING,
        )
        share = stubs.stub_share("fake_share_id", status=constants.STATUS_AVAILABLE)
        expected_values = snap.copy()
        for name in ("id", "created_at"):
            expected_values.pop(name, None)
        expected_member_values = {
            "cgsnapshot_id": snap["id"],
            "user_id": self.context.user_id,
            "project_id": self.context.project_id,
            "status": constants.STATUS_CREATING,
            "size": share["size"],
            "share_proto": share["share_proto"],
            "share_type_id": share["share_type_id"],
            "share_id": share["id"],
            "share_instance_id": mock.ANY,
        }
        self.mock_object(db_driver, "consistency_group_get", mock.Mock(return_value=cg))
        self.mock_object(db_driver, "cgsnapshot_create", mock.Mock(return_value=snap))
        self.mock_object(db_driver, "cgsnapshot_destroy")
        self.mock_object(db_driver, "cgsnapshot_member_create", mock.Mock(side_effect=exception.Error))
        self.mock_object(db_driver, "share_get_all_by_consistency_group_id", mock.Mock(return_value=[share]))

        self.assertRaises(exception.Error, self.api.create_cgsnapshot, self.context, consistency_group_id=cg["id"])

        db_driver.consistency_group_get.assert_called_once_with(self.context, cg["id"])
        db_driver.cgsnapshot_create.assert_called_once_with(self.context, expected_values)
        db_driver.cgsnapshot_member_create.assert_called_once_with(self.context, expected_member_values)
        db_driver.cgsnapshot_destroy.assert_called_once_with(self.context, snap["id"])
Example #29
0
    def test_share_create(self):
        shr = {
            "size": 100,
            "name": "Share Test Name",
            "description": "Share Test Desc",
            "share_proto": "fakeproto",
            "availability_zone": "zone1:host1"
        }
        create_mock = mock.Mock(return_value=stubs.stub_share(
            '1',
            display_name=shr['name'],
            display_description=shr['description'],
            size=100,
            share_proto=shr['share_proto'].upper(),
            availability_zone=shr['availability_zone']))
        self.stubs.Set(share_api.API, 'create', create_mock)

        body = {"share": copy.deepcopy(shr)}
        req = fakes.HTTPRequest.blank('/shares')
        res_dict = self.controller.create(req, body)

        expected = self._get_expected_share_detailed_response(shr)
        self.assertEqual(expected, res_dict)
Example #30
0
    def test_create_share_group_snapshot_with_two_members(self):
        share_group = fake_share_group(
            'fake_group_id', user_id=self.context.user_id,
            project_id=self.context.project_id,
            status=constants.STATUS_AVAILABLE)
        snap = fake_share_group_snapshot(
            'fakeid', user_id=self.context.user_id,
            project_id=self.context.project_id,
            share_group_id=share_group['id'],
            status=constants.STATUS_CREATING)
        share = stubs.stub_share(
            'fake_share_id', status=constants.STATUS_AVAILABLE)
        share_2 = stubs.stub_share(
            'fake_share2_id', status=constants.STATUS_AVAILABLE)
        expected_values = snap.copy()
        for name in ('id', 'created_at'):
            expected_values.pop(name, None)
        expected_member_1_values = {
            'share_group_snapshot_id': snap['id'],
            'user_id': self.context.user_id,
            'project_id': self.context.project_id,
            'status': constants.STATUS_CREATING,
            'size': share['size'],
            'share_proto': share['share_proto'],
            'share_id': share['id'],
            'share_instance_id': mock.ANY,
        }
        expected_member_2_values = {
            'share_group_snapshot_id': snap['id'],
            'user_id': self.context.user_id,
            'project_id': self.context.project_id,
            'status': constants.STATUS_CREATING,
            'size': share_2['size'],
            'share_proto': share_2['share_proto'],
            'share_id': share_2['id'],
            'share_instance_id': mock.ANY,
        }
        self.mock_object(
            db_driver, 'share_group_get',
            mock.Mock(return_value=share_group))
        self.mock_object(
            db_driver, 'share_group_snapshot_create',
            mock.Mock(return_value=snap))
        self.mock_object(
            db_driver, 'share_get_all_by_share_group_id',
            mock.Mock(return_value=[share, share_2]))
        self.mock_object(db_driver, 'share_group_snapshot_member_create')

        self.api.create_share_group_snapshot(
            self.context, share_group_id=share_group['id'])

        db_driver.share_group_get.assert_called_once_with(
            self.context, share_group['id'])
        db_driver.share_group_snapshot_create.assert_called_once_with(
            self.context, expected_values)
        db_driver.share_group_snapshot_member_create.assert_any_call(
            self.context, expected_member_1_values)
        db_driver.share_group_snapshot_member_create.assert_any_call(
            self.context, expected_member_2_values)
        self.share_rpcapi.create_share_group_snapshot.assert_called_once_with(
            self.context, snap, share_group['host'])