ranger/orm/tests/unit/fms/test_flavors.py
Nicholas Jones dac751d04b Merge diverged code
Change-Id: I7a88d9bec69371bec1004572a4fa87cdfbbf1f28
2018-05-08 11:50:06 -05:00

456 lines
14 KiB
Python
Executable File

import copy
import requests
from orm.common.orm_common.injector import injector
from orm.services.flavor_manager.fms_rest.controllers.v1.orm.flavors import flavors
from orm.services.flavor_manager.fms_rest.data.wsme import models
from orm.services.flavor_manager.fms_rest.logic.error_base import ErrorStatus
from orm.tests.unit.fms import FunctionalTest
from orm.tests.unit.fms import test_utils
from mock import MagicMock, patch
utils_mock = None
flavor_logic_mock = None
return_error = 0
class TestFlavorController(FunctionalTest):
def setUp(self):
FunctionalTest.setUp(self)
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
injector.override_injected_dependency(('utils', get_utils_mock()))
def tearDown(self):
FunctionalTest.tearDown(self)
def test_create_flavor(self):
# given
requests.post = MagicMock(return_value=ResponseMock(201, "created"))
global return_error
return_error = 0
# when
response = self.app.post_json('/v1/orm/flavors', FLAVOR_JSON)
# assert
assert response.status_int == 201
assert utils_mock.audit_trail.called
assert flavor_logic_mock.create_flavor.called
def test_create_flavor_predefined_id(self):
# given
requests.post = MagicMock(return_value=ResponseMock(201, "created"))
test_json = copy.deepcopy(FLAVOR_JSON)
test_json['flavor']['id'] = 'test'
global return_error
return_error = 0
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
injector.override_injected_dependency(('utils', get_utils_mock()))
# when
response = self.app.post_json('/v1/orm/flavors', test_json)
# assert
self.assertEqual(response.status_int, 201)
def test_create_flavor_existing_predefined_id(self):
# given
requests.post = MagicMock(return_value=ResponseMock(201, "created"))
test_json = copy.deepcopy(FLAVOR_JSON)
test_json['flavor']['id'] = 'test'
global return_error
return_error = 1
injector.override_injected_dependency(('utils', get_utils_mock()))
# when
response = self.app.post_json('/v1/orm/flavors', test_json,
expect_errors=True)
# assert
# self.assertEqual(response.status_int, 409)
def test_create_flavor_fail(self):
# given
global return_error
return_error = 1
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.post = MagicMock(return_value=ResponseMock(400, "failed"))
# when
response = self.app.post_json('/v1/orm/flavors', FLAVOR_JSON,
expect_errors=True)
# assert
self.assertEqual(response.status_int, 409)
# Following tests not providing consistent results
# @patch.object(flavors, 'di')
# def test_create_flavor_duplicate_entry(self, mock_di):
# my_mock = MagicMock()
# my_mock.create_flavor = MagicMock(
# side_effect=sqlalchemy.exc.IntegrityError(
# 'a', 'b',
# 'Duplicate entry \'flavor\' for key \'name_idx\''))
# mock_di.resolver.unpack = MagicMock(
# return_value=(my_mock, MagicMock(),))
#
# response = self.app.post_json('/v1/orm/flavors', FLAVOR_JSON,
# expect_errors=True)
#
# self.assertEqual(response.status_int, 409)
#
# @patch.object(flavors, 'di')
# def test_create_flavor_other_error(self, mock_di):
# my_mock = MagicMock()
# my_mock.create_flavor = MagicMock(
# side_effect=sqlalchemy.exc.IntegrityError(
# 'a', 'b',
# 'test \'flavor\' for key \'name_idx\''))
# mock_di.resolver.unpack = MagicMock(
# return_value=(my_mock, MagicMock(),))
#
# response = self.app.post_json('/v1/orm/flavors', FLAVOR_JSON,
# expect_errors=True)
#
# self.assertEqual(response.status_int, 409)
@patch.object(flavors, 'err_utils')
def test_create_flavor_bad_request(self, mock_err_utils):
# given
global return_error
return_error = 2
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.post = MagicMock(return_value=ResponseMock(400, "failed"))
mock_err_utils.get_error = test_utils.get_error
# when
response = self.app.post_json('/v1/orm/flavors', FLAVOR_JSON,
expect_errors=True)
# assert
self.assertEqual(response.status_int, 409)
def test_update_flavor(self):
# given
global return_error
return_error = 1
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.put = MagicMock()
# when
response = self.app.put_json('/v1/orm/flavors/some_id', FLAVOR_JSON,
expect_errors=True)
# assert
# self.assertEqual(response.status_int, 405)
def test_get_flavor(self):
# given
global return_error
return_error = 0
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock(return_value=ResponseMock(200, "updated"))
# when
response = self.app.get('/v1/orm/flavors/some_id')
# assert
assert flavor_logic_mock.get_flavor_by_uuid_or_name.called
def test_get_flavor_fail(self):
# given
global return_error
return_error = 1
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock()
# when
response = self.app.get('/v1/orm/flavors/some_id', expect_errors=True)
# assert
self.assertEqual(response.status_int, 500)
def test_get_flavor_bad_request(self):
# given
global return_error
return_error = 2
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock()
# when
response = self.app.get('/v1/orm/flavors/some_id', expect_errors=True)
# assert
# self.assertEqual(response.status_int, 404)
# 8/8/16 Bug DE226006 - This bug fix is to return 405 for every attempt
# to delete flavor.
def test_delete_flavor(self):
# given
global return_error
return_error = 0
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.delete = MagicMock()
# when
response = self.app.delete('/v1/orm/flavors/some_id',
expect_errors=True)
# assert
self.assertEqual(response.status_int, 204)
def test_delete_flavor_fail(self):
# given
global return_error
return_error = 1
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.delete = MagicMock()
# when
response = self.app.delete('/v1/orm/flavors/some_id',
expect_errors=True)
# assert
self.assertEqual(response.status_int, 500)
@patch.object(flavors, 'err_utils')
def test_delete_flavor_bad_request(self, mock_err_utils):
# given
global return_error
return_error = 2
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.delete = MagicMock()
mock_err_utils.get_error = test_utils.get_error
# when
response = self.app.delete('/v1/orm/flavors/some_id',
expect_errors=True)
# assert
self.assertEqual(response.status_int, 409)
def test_get_all_flavor(self):
# given
global return_error
return_error = 0
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock(return_value=ResponseMock(200, "updated"))
# when
response = self.app.get('/v1/orm/flavors?region=SAN1')
# assert
assert flavor_logic_mock.get_flavor_list_by_params.called
def test_get_all_flavor_fail(self):
# given
global return_error
return_error = 1
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock()
# when
response = self.app.get('/v1/orm/flavors?region=region',
expect_errors=True)
# assert
self.assertEqual(response.status_int, 500)
def test_get_by_vm_type(self):
# given
global return_error
return_error = 0
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock(return_value=ResponseMock(200, "updated"))
# when
response = self.app.get('/v1/orm/flavors?vm_type=TEST_VM_TYPE')
# assert
assert flavor_logic_mock.get_flavor_list_by_params.called
def test_get_by_vnf_name(self):
# given
global return_error
return_error = 0
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock(return_value=ResponseMock(200, "updated"))
# when
response = self.app.get('/v1/orm/flavors?vnf_name=TEST_VNF_NAME')
# assert
assert flavor_logic_mock.get_flavor_list_by_params.called
def test_get_all_flavor_bad_request(self):
# given
global return_error
return_error = 2
injector.override_injected_dependency(
('flavor_logic', get_flavor_logic_mock()))
requests.get = MagicMock()
# when
response = self.app.get('/v1/orm/flavors?region=region',
expect_errors=True)
# assert
# self.assertEqual(response.status_int, 404)
class ResponseMock:
def __init__(self, status_code=200, message=""):
self.status_code = status_code
self.message = message
def json(self):
return {'uuid': 'test'}
def get_flavor_logic_mock():
global flavor_logic_mock
flavor_logic_mock = MagicMock()
if return_error == 0:
flavor_logic_mock.update_flavor.return_value = RET_FLAVOR_JSON
flavor_logic_mock.create_flavor.return_value = RET_FLAVOR_JSON
flavor_logic_mock.get_flavor_by_uuid.return_value = RET_FLAVOR_JSON
flavor_logic_mock.get_flavor_by_uuid_or_name.return_value = \
RET_FLAVOR_JSON
flavor_logic_mock.get_flavor_list_by_params.return_value = FILTER_RET
elif return_error == 1:
flavor_logic_mock.update_flavor.side_effect = SystemError()
flavor_logic_mock.create_flavor.side_effect = SystemError()
flavor_logic_mock.get_flavor_by_uuid.side_effect = SystemError()
flavor_logic_mock.get_flavor_by_uuid_or_name.side_effect = \
SystemError()
flavor_logic_mock.get_flavor_list_by_params.side_effect = SystemError()
flavor_logic_mock.delete_flavor_by_uuid.side_effect = SystemError()
else:
flavor_logic_mock.update_flavor.side_effect = ErrorStatus(
status_code=404)
flavor_logic_mock.create_flavor.side_effect = ErrorStatus(
status_code=404)
flavor_logic_mock.get_flavor_by_uuid.side_effect = ErrorStatus(
status_code=404)
flavor_logic_mock.get_flavor_list_by_params.side_effect = ErrorStatus(
status_code=404)
flavor_logic_mock.delete_flavor_by_uuid.side_effect = ErrorStatus(
status_code=409)
flavor_logic_mock.get_flavor_by_uuid_or_name.side_effect = ErrorStatus(
status_code=404)
return flavor_logic_mock
def get_utils_mock():
global utils_mock
utils_mock = MagicMock()
utils_mock.make_transid.return_value = 'some_trans_id'
utils_mock.audit_trail.return_value = None
utils_mock.make_uuid.return_value = 'some_uuid'
if return_error:
utils_mock.create_existing_uuid.side_effect = TypeError('test')
else:
utils_mock.create_existing_uuid.return_value = 'some_uuid'
return utils_mock
FLAVOR_JSON = {
"flavor": {
"description": "A standard 2GB Ram 2 vCPUs 50GB Disk, Flavor",
"series": "nv",
"ram": "05",
"vcpus": "2",
"disk": "50",
"swap": "1024",
"ephemeral": "0",
"extra-specs": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
},
"options": {
"option2": "valueoption2",
"option3": "valueoption3",
"option1": "valueoption1"
},
"tag": {
"tags1": "valuetags1",
"tags2": "valuetags2",
"tags3": "valuetags3"
},
"regions": [
{"name": "0", "type": "single"},
{"name": "1", "type": "single"}
],
"visibility": "private",
"tenants": [
"4f7b9561-af8b-4cc0-87e2-319270dad49e",
"070be05e-26e2-4519-a46d-224cbf8558f4"
],
"status": "complete"
}
}
RET_FLAVOR_JSON = models.FlavorWrapper(
models.Flavor(
description="A standard 2GB Ram 2 vCPUs 50GB Disk, Flavor",
series="nv",
ram="05",
vcpus="2",
disk="50",
swap="1024",
ephemeral="0",
extra_specs={
"key1": "value1"
},
tag={
"tags1": "valuetags1"
},
options={
"option1": "valueoption1"
},
regions=[models.Region(name='1')],
visibility="private",
tenants=[
"4f7b9561-af8b-4cc0-87e2-319270dad49e",
"070be05e-26e2-4519-a46d-224cbf8558f4"
],
status="complete"
)
)
# FILTER_RET = [models.Flavor()]
FILTER_RET = models.FlavorListFullResponse()
FILTER_RET.flavors.append(
models.Flavor(name='1', id='1', description='1'))