SUpport for add group Region
Change-Id: Ic46046bda95d827e04425e35ba4fefa815255518
This commit is contained in:
parent
de80916bf6
commit
0f4ca0abd2
@ -15,6 +15,7 @@ from orm.services.customer_manager.cms_rest.model.GroupModels import (
|
||||
GroupResultWrapper,
|
||||
GroupSummary,
|
||||
GroupSummaryResponse,
|
||||
RegionResultWrapper,
|
||||
RoleResultWrapper,
|
||||
UserResultWrapper)
|
||||
|
||||
@ -279,6 +280,55 @@ class GroupLogic(object):
|
||||
datamanager.rollback()
|
||||
raise
|
||||
|
||||
def add_regions(self, group_id, regions, transaction_id):
|
||||
datamanager = DataManager()
|
||||
group_region = datamanager.get_record('groups_region')
|
||||
try:
|
||||
sql_group = datamanager.get_group_by_uuid_or_name(group_id)
|
||||
if sql_group is None:
|
||||
raise ErrorStatus(
|
||||
404,
|
||||
"group with id {} does not exist".format(group_id))
|
||||
default_users = []
|
||||
|
||||
self.add_regions_to_db(regions, group_id, datamanager,
|
||||
default_users)
|
||||
|
||||
datamanager.commit()
|
||||
|
||||
datamanager.session.expire(sql_group)
|
||||
|
||||
sql_group = datamanager.get_group_by_uuid_or_name(group_id)
|
||||
|
||||
group_dict = sql_group.get_proxy_dict()
|
||||
|
||||
for region in group_dict["regions"]:
|
||||
new_region = next((r for r in regions
|
||||
if r.name == region["name"]), None)
|
||||
if new_region:
|
||||
region["action"] = "create"
|
||||
else:
|
||||
region["action"] = "modify"
|
||||
|
||||
timestamp = utils.get_time_human()
|
||||
RdsProxy.send_group_dict(group_dict, transaction_id, "POST")
|
||||
|
||||
base_link = '{0}{1}/'.format(conf.server.host_ip,
|
||||
request.path)
|
||||
|
||||
result_regions = [{'id': region.name, 'added': timestamp,
|
||||
'links': {'self': base_link + region.name}} for
|
||||
region in regions]
|
||||
region_result_wrapper = RegionResultWrapper(
|
||||
transaction_id=transaction_id, regions=result_regions)
|
||||
|
||||
return region_result_wrapper
|
||||
except Exception as exp:
|
||||
datamanager.rollback()
|
||||
raise
|
||||
finally:
|
||||
datamanager.close()
|
||||
|
||||
def delete_region(self, group_id, region_id, transaction_id,
|
||||
on_success_by_rds, force_delete):
|
||||
datamanager = DataManager()
|
||||
|
170
orm/tests/unit/cms/test_group_regions.py
Executable file
170
orm/tests/unit/cms/test_group_regions.py
Executable file
@ -0,0 +1,170 @@
|
||||
import mock
|
||||
import requests
|
||||
|
||||
from wsme.exc import ClientSideError
|
||||
|
||||
from orm.services.customer_manager.cms_rest.controllers.v1.orm.group \
|
||||
import regions
|
||||
from orm.services.customer_manager.cms_rest.logic.error_base import ErrorStatus
|
||||
from orm.services.customer_manager.cms_rest.model import GroupModels
|
||||
from orm.tests.unit.cms import FunctionalTest
|
||||
|
||||
group_logic_mock = None
|
||||
|
||||
|
||||
class TestRegionController(FunctionalTest):
|
||||
def setUp(self):
|
||||
FunctionalTest.setUp(self)
|
||||
|
||||
regions.authentication = mock.MagicMock()
|
||||
|
||||
regions.GroupLogic = get_mock_group_logic
|
||||
|
||||
regions.GroupLogic.return_error = 0
|
||||
|
||||
regions.utils = mock.MagicMock()
|
||||
regions.utils.make_transid.return_value = 'some_trans_id'
|
||||
regions.utils.audit_trail.return_value = None
|
||||
regions.utils.make_uuid.return_value = 'some_uuid'
|
||||
|
||||
regions.err_utils = mock.MagicMock()
|
||||
|
||||
def tearDown(self):
|
||||
FunctionalTest.tearDown(self)
|
||||
|
||||
def test_add_regions(self):
|
||||
# given
|
||||
requests.post = mock.MagicMock(return_value=ResponseMock(200))
|
||||
|
||||
# when
|
||||
response = self.app.post_json('/v1/orm/groups/{group id}/regions/',
|
||||
REGION_JSON)
|
||||
|
||||
# assert
|
||||
assert response.status_int == 200
|
||||
assert regions.utils.audit_trail.called
|
||||
assert group_logic_mock.add_regions.called
|
||||
|
||||
def test_add_regions_fail(self):
|
||||
# given
|
||||
requests.post = mock.MagicMock()
|
||||
|
||||
regions.GroupLogic.return_error = 1
|
||||
|
||||
regions.err_utils.get_error = mock.MagicMock(
|
||||
return_value=ClientSideError("blabla", 500))
|
||||
|
||||
# when
|
||||
response = self.app.post_json('/v1/orm/groups/{group id}/regions/',
|
||||
REGION_JSON, expect_errors=True)
|
||||
|
||||
# assert
|
||||
self.assertEqual(response.status_int, 500)
|
||||
|
||||
def test_add_regions_fail_bad(self):
|
||||
# given
|
||||
requests.post = mock.MagicMock()
|
||||
|
||||
regions.GroupLogic.return_error = 2
|
||||
|
||||
regions.err_utils.get_error = mock.MagicMock(
|
||||
return_value=ClientSideError("blabla", 404))
|
||||
|
||||
# when
|
||||
response = self.app.post_json('/v1/orm/groups/{group id}/regions/',
|
||||
REGION_JSON, expect_errors=True)
|
||||
|
||||
# assert
|
||||
self.assertEqual(response.status_int, 404)
|
||||
|
||||
@mock.patch.object(regions, 'request')
|
||||
def test_delete_regions(self, request):
|
||||
# given
|
||||
requests.delete = mock.MagicMock(return_value=ResponseMock(200))
|
||||
request.headers = {'X-RANGER-Requester': "rds_resource_service_proxy"}
|
||||
# when
|
||||
response = self.app.delete(
|
||||
'/v1/orm/groups/{group id}/regions/{region_id}')
|
||||
|
||||
# assert
|
||||
assert response.status_int == 204
|
||||
assert regions.utils.audit_trail.called
|
||||
assert group_logic_mock.delete_region.called
|
||||
|
||||
def test_delete_regions_fail_bad(self):
|
||||
# given
|
||||
requests.delete = mock.MagicMock()
|
||||
|
||||
regions.GroupLogic.return_error = 1
|
||||
|
||||
regions.err_utils.get_error = mock.MagicMock(
|
||||
return_value=ClientSideError("blabla", 500))
|
||||
|
||||
# when
|
||||
response = self.app.delete(
|
||||
'/v1/orm/groups/{group id}/regions/{region_id}',
|
||||
expect_errors=True)
|
||||
|
||||
# assert
|
||||
self.assertEqual(response.status_int, 500)
|
||||
|
||||
@mock.patch.object(regions, 'request')
|
||||
def test_delete_regions_fail(self, request):
|
||||
# given
|
||||
requests.delete = mock.MagicMock()
|
||||
|
||||
regions.GroupLogic.return_error = 2
|
||||
request.headers = {'X-RANGER-Requester': "rds_resource_service_proxy"}
|
||||
regions.err_utils.get_error = mock.MagicMock(
|
||||
return_value=ClientSideError("blabla", 404))
|
||||
|
||||
# when
|
||||
response = self.app.delete(
|
||||
'/v1/orm/groups/{group id}/regions/{region_id}',
|
||||
expect_errors=True)
|
||||
|
||||
# assert
|
||||
self.assertEqual(response.status_int, 404)
|
||||
|
||||
def test_get(self):
|
||||
# given
|
||||
requests.get = mock.MagicMock(return_value=ResponseMock(200))
|
||||
|
||||
# when
|
||||
response = self.app.get('/v1/orm/groups/some_id/regions/some_id')
|
||||
|
||||
# assert
|
||||
assert response.status_int == 200
|
||||
|
||||
|
||||
def get_mock_group_logic():
|
||||
global group_logic_mock
|
||||
group_logic_mock = mock.MagicMock()
|
||||
|
||||
if regions.GroupLogic.return_error == 0:
|
||||
res = GroupModels.RegionResultWrapper(transaction_id='1', regions=[])
|
||||
group_logic_mock.add_regions.return_value = res
|
||||
|
||||
elif regions.CustomerLogic.return_error == 1:
|
||||
group_logic_mock.add_regions.side_effect = SystemError()
|
||||
group_logic_mock.delete_region.side_effect = SystemError()
|
||||
|
||||
else:
|
||||
group_logic_mock.add_regions.side_effect = ErrorStatus(status_code=404)
|
||||
group_logic_mock.delete_region.side_effect = ErrorStatus(
|
||||
status_code=404)
|
||||
|
||||
return group_logic_mock
|
||||
|
||||
|
||||
class ResponseMock:
|
||||
def __init__(self, status_code=200):
|
||||
self.status_code = status_code
|
||||
|
||||
|
||||
REGION_JSON = [
|
||||
{
|
||||
"name": "SAN1",
|
||||
"type": "single",
|
||||
}
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user