243 lines
8.0 KiB
Python
Executable File
243 lines
8.0 KiB
Python
Executable File
import mock
|
|
import requests
|
|
|
|
from wsme.exc import ClientSideError
|
|
|
|
from orm.services.customer_manager.cms_rest.controllers.v1.orm.customer import regions
|
|
from orm.services.customer_manager.cms_rest.logic.error_base import ErrorStatus
|
|
from orm.services.customer_manager.cms_rest.model import Models
|
|
from orm.tests.unit.cms import FunctionalTest
|
|
|
|
customer_logic_mock = None
|
|
|
|
|
|
class TestRegionController(FunctionalTest):
|
|
def setUp(self):
|
|
FunctionalTest.setUp(self)
|
|
|
|
regions.authentication = mock.MagicMock()
|
|
|
|
regions.CustomerLogic = get_mock_customer_logic
|
|
regions.CustomerLogic.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/customers/{customer id}/regions/', REGION_JSON)
|
|
|
|
# assert
|
|
assert response.status_int == 200
|
|
assert regions.utils.audit_trail.called
|
|
assert customer_logic_mock.add_regions.called
|
|
|
|
def test_add_regions_fail(self):
|
|
# given
|
|
requests.post = mock.MagicMock()
|
|
|
|
regions.CustomerLogic.return_error = 1
|
|
|
|
regions.err_utils.get_error = mock.MagicMock(return_value=ClientSideError("blabla",
|
|
500))
|
|
|
|
# when
|
|
response = self.app.post_json('/v1/orm/customers/{customer id}/regions/', REGION_JSON, expect_errors=True)
|
|
|
|
# assert
|
|
self.assertEqual(response.status_int, 500)
|
|
|
|
def test_replace_regions_specific_region(self):
|
|
regions.err_utils.get_error = mock.MagicMock(return_value=ClientSideError("blabla",
|
|
405))
|
|
|
|
response = self.app.put_json(
|
|
'/v1/orm/customers/{customer id}/regions/test', REGION_JSON,
|
|
expect_errors=True)
|
|
self.assertEqual(response.status_int, 405)
|
|
|
|
def test_add_regions_fail_bad(self):
|
|
# given
|
|
requests.post = mock.MagicMock()
|
|
|
|
regions.CustomerLogic.return_error = 2
|
|
|
|
regions.err_utils.get_error = mock.MagicMock(return_value=ClientSideError("blabla",
|
|
404))
|
|
|
|
# when
|
|
response = self.app.post_json('/v1/orm/customers/{customer id}/regions/', REGION_JSON, expect_errors=True)
|
|
|
|
# assert
|
|
self.assertEqual(response.status_int, 404)
|
|
|
|
def test_replace_regions(self):
|
|
# given
|
|
requests.put = mock.MagicMock(return_value=ResponseMock(200))
|
|
|
|
# when
|
|
response = self.app.put_json('/v1/orm/customers/{customer id}/regions/', REGION_JSON)
|
|
|
|
# assert
|
|
assert response.status_int == 200
|
|
assert regions.utils.audit_trail.called
|
|
assert customer_logic_mock.replace_regions.called
|
|
|
|
def test_replace_regions_fail(self):
|
|
# given
|
|
requests.put = mock.MagicMock()
|
|
|
|
regions.CustomerLogic.return_error = 1
|
|
|
|
regions.err_utils.get_error = mock.MagicMock(return_value=ClientSideError("blabla",
|
|
500))
|
|
|
|
# when
|
|
response = self.app.put_json('/v1/orm/customers/{customer id}/regions/', REGION_JSON, expect_errors=True)
|
|
|
|
# assert
|
|
self.assertEqual(response.status_int, 500)
|
|
|
|
def test_replace_regions_fail_bad(self):
|
|
# given
|
|
requests.put = mock.MagicMock()
|
|
|
|
regions.CustomerLogic.return_error = 2
|
|
|
|
regions.err_utils.get_error = mock.MagicMock(return_value=ClientSideError("blabla",
|
|
404))
|
|
|
|
# when
|
|
response = self.app.put_json('/v1/orm/customers/{customer 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/customers/{customer id}/regions/{region_id}')
|
|
|
|
# assert
|
|
assert response.status_int == 204
|
|
assert regions.utils.audit_trail.called
|
|
assert customer_logic_mock.delete_region.called
|
|
|
|
def test_delete_regions_fail_bad(self):
|
|
# given
|
|
requests.delete = mock.MagicMock()
|
|
|
|
regions.CustomerLogic.return_error = 1
|
|
|
|
regions.err_utils.get_error = mock.MagicMock(return_value=ClientSideError("blabla",
|
|
500))
|
|
|
|
# when
|
|
response = self.app.delete('/v1/orm/customers/{customer 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.CustomerLogic.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/customers/{customer 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/customers/some_id/regions/some_id')
|
|
|
|
# assert
|
|
assert response.status_int == 200
|
|
|
|
|
|
def get_mock_customer_logic():
|
|
global customer_logic_mock
|
|
customer_logic_mock = mock.MagicMock()
|
|
|
|
if regions.CustomerLogic.return_error == 0:
|
|
res = Models.RegionResultWrapper(transaction_id='1', regions=[])
|
|
|
|
customer_logic_mock.add_regions.return_value = res
|
|
customer_logic_mock.replace_regions.return_value = res
|
|
|
|
elif regions.CustomerLogic.return_error == 1:
|
|
customer_logic_mock.add_regions.side_effect = SystemError()
|
|
customer_logic_mock.replace_regions.side_effect = SystemError()
|
|
customer_logic_mock.delete_region.side_effect = SystemError()
|
|
|
|
else:
|
|
customer_logic_mock.add_regions.side_effect = ErrorStatus(status_code=404)
|
|
customer_logic_mock.replace_regions.side_effect = ErrorStatus(status_code=404)
|
|
customer_logic_mock.delete_region.side_effect = ErrorStatus(status_code=404)
|
|
|
|
return customer_logic_mock
|
|
|
|
|
|
class ResponseMock:
|
|
def __init__(self, status_code=200):
|
|
self.status_code = status_code
|
|
|
|
|
|
REGION_JSON = [
|
|
{
|
|
"name": "SAN1",
|
|
"type": "single",
|
|
"quotas": [
|
|
{
|
|
"compute": [
|
|
{
|
|
"instances": "10",
|
|
"injected-files": "10",
|
|
"key-pairs": "10",
|
|
"ram": "10"
|
|
}
|
|
],
|
|
"storage": [
|
|
{
|
|
"gigabytes": "10",
|
|
"snapshots": "10",
|
|
"volumes": "10"
|
|
}
|
|
],
|
|
"network": [
|
|
{
|
|
"floating-ips": "10",
|
|
"networks": "10",
|
|
"ports": "10",
|
|
"routers": "10",
|
|
"subnets": "10"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|