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)
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"])
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'])
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)
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)
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)
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)
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'])
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")
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)
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)
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)
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'])
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)
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'])
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)
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)
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'])
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'])
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)
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)
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"])
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"])
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)
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'])
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"])
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)
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'])