ranger/orm/tests/unit/rds/services/test_create_resource.py
Chi Lo 8366b10bef Add customer's domain attribute in CMS API call
When CMS API call is made for either create and update customer, a

A new optional customer domain field is introduced for CMS API call
to create or update customer. The customer domain value will be used
by Rds to set the customer and users domain value when generating the
heat template.  In the event customer domain is not provided by the
CMS API call, a default value will be retrieved from the config file.

Change-Id: I58dbae760d56b756b72c5d9eaf7c0b61cf193847
2020-09-01 09:15:04 -07:00

584 lines
22 KiB
Python
Executable File

"""create resource unittest module."""
import unittest
from unittest.mock import patch
from orm.common.orm_common.model.models import (ResourceStatusModel,
ResourceMetaData,
StatusModel)
from orm.services.resource_distributor.rds.services import resource as ResourceService
result = ResourceStatusModel(
status="success", timestamp="123456789", region="name",
transaction_id=5, resource_id="1",
ord_notifier="", err_msg="123", err_code="12", operation="create",
resource_extra_metadata=[ResourceMetaData(checksum=1, virtual_size=2, size=3)]
)
uuid = "uuid-12345"
class InputData(object):
"""mock class."""
def __init__(self, resource_id, resource_type,
targets, operation="create",
transaction_id="", model="",
external_transaction_id=""):
"""init function.
: param resource_id:
: param resource_type:
: param targets:
: param operation:
: param transaction_id:
: param model:
: param external_transaction_id:
"""
self.resource_id = resource_id
self.targets = targets
self.resource_type = resource_type
self.operation = operation
self.transaction_id = transaction_id
self.model = model
self.external_transaction_id = external_transaction_id
class CreateResource(unittest.TestCase):
"""create resource test."""
@patch.object(ResourceService.regionResourceIdStatus, 'add_status',
return_value=None)
@patch.object(ResourceService, '_submit_template_data', return_value=[1, 2])
@patch.object(ResourceService, '_create_template_data', return_value=[1, 2])
@patch.object(ResourceService.regionResourceIdStatus,
'get_regions_by_status_resource_id', return_value=None)
@patch.object(ResourceService.uuid_utils, 'get_random_uuid',
side_effect=Exception("uuid general exception"))
def test_create_customer_not_valid_uuid_gen(self, tranid, result, sotdata,
sotupload, database):
"""uuid gen raise an error."""
status_model = StatusModel(status=[result])
status_model.regions = None
result.return_value = status_model
with self.assertRaises(ResourceService.ErrorMessage):
resource_id = ResourceService.main(jsondata, uuid,
'customer', 'create')
@patch.object(ResourceService.regionResourceIdStatus,
'add_status', return_value=None)
@patch.object(ResourceService.yaml_customer_builder,
'yamlbuilder', return_value=["anystring"])
@patch.object(ResourceService.regionResourceIdStatus,
'get_regions_by_status_resource_id', return_value=None)
@patch.object(ResourceService.uuid_utils, 'get_random_uuid',
return_value='uuid-gen-123456')
def test_create_flavor_data_check(self,
tranid, result,
yamlbuilder, database):
"""check list creating."""
input_data = InputData(
transaction_id='497ab942-1ac0-11e6-82f3-005056a5129b',
resource_type='customer',
resource_id='1e24981a-fa51-11e5-86aa-5e5517507c66',
operation='create',
targets=targets
)
input_data.user_data = {'user_domain': 'default', 'user_id': 'user1'}
status_model = StatusModel(status=[result])
status_model.regions = None
result.return_value = status_model
result = ResourceService._create_template_data(input_data)
self.assertEqual(result, target_list)
# @patch.object(ResourceService.regionResourceIdStatus,
# 'get_regions_by_status_resource_id',
# return_value=StatusModel(status=[result]))
# def test_delete_flavor_conflict(self, databasemock):
# """check delete flavor with conflict."""
# with self.assertRaises(ResourceService.ConflictValue):
# ResourceService.main(flavorjsondata, uuid, 'flavor', 'delete')
@patch.object(ResourceService.regionResourceIdStatus,
'add_status', return_value=None)
@patch.object(ResourceService, '_submit_template_data', return_value=[1, 2])
@patch.object(ResourceService, '_create_template_data', return_value=[1, 2])
@patch.object(ResourceService.regionResourceIdStatus,
'get_regions_by_status_resource_id', return_value=None)
@patch.object(ResourceService.uuid_utils, 'get_random_uuid',
side_effect=Exception("uuid general exception"))
def test_delete_flavor_not_valid_uuid_gen(self, tranid, result, sotdata,
sotupload, database):
"""delete flavor uuid gen raise an error."""
status_model = StatusModel(status=[result])
status_model.regions = None
result.return_value = status_model
with self.assertRaises(ResourceService.ErrorMessage):
resource_id = ResourceService.main(flavorjsondata, uuid,
'flavor', 'delete')
def test_get_inputs_from_resource_type(self):
input_data = ResourceService._get_inputs_from_resource_type(jsondata,
'customer',
'uuid-12345')
assert (input_data.__dict__ == input_data_resource)
def test_get_inputs_from_resource_type_image(self):
input_data = ResourceService._get_inputs_from_resource_type(json_data_image,
'image',
'uuid-12345')
assert (input_data.__dict__ == expected_image_input_data)
def test_unknown_resource_type(self):
with self.assertRaises(ResourceService.ErrorMessage):
input_data = ResourceService._get_inputs_from_resource_type(jsondata,
'unknown',
'uuid-12345')
jsondata = {
"uuid": "1e24981a-fa51-11e5-86aa-5e5517507c66", "default_region":
{
"quotas":
[
{
"compute": {
"instances": "10",
"ram": "10",
"keypairs": "10"
},
"storage": {"gigabytes": "10",
"snapshots": "10",
"volumes": "10"
},
"network": {
"router": "10",
"floatingip": "10",
"port": "10",
"network": "10",
"subnet": "10"
}}],
"users":
[
{
"id": "userId1zzzz",
"roles":
[
"adminzzzz",
"otherzzzzz"
]
},
{"id": "userId2zzz",
"roles":
[
"storagezzzzz"
]
}
],
"name": "regionnamezzzz",
"action": "delete",
},
"description": "this is a description",
"enabled": 1,
"regions":
[
{
"quotas":
[],
"users":
[
{
"id": "userId1",
"roles":
[
"admin",
"other"
]
},
{"id": "userId2",
"roles":
[
"storage"
]
}
],
"name": "regionname",
"action": "create"
},
{
"quotas":
[
{
"compute":
{
"instances": "10",
"ram": "10",
"keypairs": "10"
},
"storage":
{
"gigabytes": "10",
"snapshots": "10",
"volumes": "10"
},
"network":
{
"router": "10",
"floatingip": "10",
"port": "10",
"network": "10",
"subnet": "10"
}
}
],
"users":
[],
"name": "regionnametest",
"action": "delete"
}
],
"name": "welcome_man"
}
flavorjsondata = {
"status": "complete",
"profile": "P2",
"regions": [
{
"name": "North1",
"action": "create"
},
{
"name": "North2",
"action": "delete"
}
],
"description": "First flavor for AMAR",
"ram": 64,
"visibility": "public",
"extra_specs": {
"key1": "value1",
"key2": "value2",
"keyx": "valuex"
},
"vcpus": 2,
"swap": 0,
"tenants": [
{
"tenant_id": "abcd-efgh-ijkl-4567"
},
{
"tenant_id": "abcd-efgh-ijkl-4567"
}
],
"disk": 512,
"empheral": 1,
"id": "uuid-uuid-uuid-uuid",
"name": "Nice Flavor"
}
json_data = {
"uuid": "1e24981a-fa51-11e5-86aa-5e5517507c66",
"default_region": {
"users": [
{
"id": "userId1zzzz",
"roles": [
"adminzzzz",
"otherzzzzz"
]
},
{
"id": "userId2zzz",
"roles": [
"storagezzzzz"
]
}
],
"name": "regionnamezzzz",
"action": "create",
"quotas": [
{
"storage": {
"gigabytes": "111",
"volumes": "111",
"snapshots": "111"
},
"compute": {
"instances": "111",
"ram": "111",
"keypairs": "111"
},
"network": {
"port": "111",
"router": "111",
"subnet": "111",
"network": "111",
"floatingip": "111"
}
}
]
},
"description": "this is a description",
"enabled": 1,
"regions": [
{
"users": [
{
"id": "userId1",
"roles": [
"admin",
"other"
]
},
{
"id": "userId2",
"roles": [
"storage"
]
}
],
"name": "regionname",
"action": "delete",
"quotas": []
},
{
"users": [],
"name": "regionnametest",
"action": "modify",
"quotas": [
{
"storage": {
"gigabytes": "10",
"volumes": "10",
"snapshots": "10"
},
"compute": {
"instances": "10",
"ram": "10",
"keypairs": "10"
},
"network": {
"port": "10",
"router": "10",
"subnet": "10",
"network": "10",
"floatingip": "10"
}
}
]
}
],
"name": "welcome_man"
}
target_list = [{'region_id': 'regionname',
'resource_type': 'customer',
'resource_name': '1e24981a-fa51-11e5-86aa-5e5517507c66',
'template_data': ['anystring'],
'operation': 'create'},
{'region_id': 'regionnametest',
'resource_name': '1e24981a-fa51-11e5-86aa-5e5517507c66',
'resource_type': 'customer',
'template_data': 'delete',
'operation': 'delete'}]
targets = [{'name': 'regionname', "action": "create",
'users': [{'id': 'userId1', 'roles': ['admin', 'other']},
{'id': 'userId2', 'roles': ['storage']}],
'domain_name': 'default',
'quotas': []},
{'name': 'regionnametest', "action": "delete",
'users': [],
'domain_name': 'default',
'quotas': [{'storage': {'gigabytes': '10', 'volumes': '10',
'snapshots': '10'},
'compute': {'instances': '10', 'ram': '10',
'keypairs': '10'},
'network': {'port': '10',
'router': '10',
'subnet': '10',
'network': '10',
'floatingip': '10'}}]}]
json_data_image = {
"internal_id": 1,
"id": "uuu1id12-uuid-uuid-uuid",
"name": "Ubuntu",
"enabled": 1,
"protected": 1,
"url": "https://mirrors.it.att.com/images/image-name",
"visibility": "public",
"disk_format": "raw",
"container_format": "bare",
"min_disk": 2,
"min_ram": 0,
"regions": [
{
"name": "North",
"type": "single",
"action": "delete",
"image_internal_id": 1
},
{
"name": "North",
"action": "create",
"type": "single",
"image_internal_id": 1
}
],
"image_properties": [
{
"key_name": "Key1",
"key_value": "Key1.value",
"image_internal_id": 1
},
{
"key_name": "Key2",
"key_value": "Key2.value",
"image_internal_id": 1
}
],
"image_tenant": [
{
"tenant_id": "abcd-efgh-ijkl-4567",
"image_internal_id": 1
},
{
"tenant_id": "abcd-efgh-ijkl-4567",
"image_internal_id": 1
}
],
"image_tags": [
{
"tag": "abcd-efgh-ijkl-4567",
"image_internal_id": 1
},
{
"tag": "abcd-efgh-ijkl-4567",
"image_internal_id": 1
}
],
"status": "complete",
}
input_data_resource = {'resource_id': '1e24981a-fa51-11e5-86aa-5e5517507c66',
'targets': [
{'action': 'create', 'quotas': [],
'name': 'regionname',
'users': [
{'id': 'userId1', 'roles': ['admin', 'other']},
{'id': 'userId2', 'roles': ['storage']}]},
{'action': 'delete',
'quotas': [{
'storage': {
'gigabytes': '10',
'volumes': '10',
'snapshots': '10'},
'compute': {
'instances': '10',
'ram': '10',
'keypairs': '10'},
'network': {
'subnet': '10',
'router': '10',
'port': '10',
'network': '10',
'floatingip': '10'}}],
'name': 'regionnametest',
'users': []}],
'resource_type': 'customer',
'model': {
'uuid': '1e24981a-fa51-11e5-86aa-5e5517507c66',
'default_region': {'action': 'delete',
'quotas': [{'storage': {
'gigabytes': '10',
'volumes': '10',
'snapshots': '10'},
'compute': {
'instances': '10',
'ram': '10',
'keypairs': '10'},
'network': {
'subnet': '10',
'router': '10',
'port': '10',
'network': '10',
'floatingip': '10'}}],
'name': 'regionnamezzzz',
'users': [
{'id': 'userId1zzzz',
'roles': ['adminzzzz',
'otherzzzzz']},
{'id': 'userId2zzz',
'roles': [
'storagezzzzz']}]},
'description': 'this is a description',
'enabled': 1, 'regions': [
{'action': 'create', 'quotas': [],
'name': 'regionname',
'users': [{'id': 'userId1',
'roles': ['admin', 'other']},
{'id': 'userId2',
'roles': ['storage']}]},
{'action': 'delete',
'quotas': [{'storage': {'gigabytes': '10',
'volumes': '10',
'snapshots': '10'},
'compute': {'instances': '10',
'ram': '10',
'keypairs': '10'},
'network': {'subnet': '10',
'router': '10',
'port': '10',
'network': '10',
'floatingip': '10'}}],
'name': 'regionnametest', 'users': []}],
'name': 'welcome_man'},
'external_transaction_id': 'uuid-12345',
'operation': 'create',
'transaction_id': ''}
expected_image_input_data = {
'resource_id': 'uuu1id12-uuid-uuid-uuid',
'targets': [
{
'action': 'delete', 'image_internal_id': 1,
'type': 'single', 'name': 'North'},
{
'action': 'create', 'image_internal_id': 1,
'type': 'single', 'name': 'North'}],
'resource_type': 'image',
'model': {
'status': 'complete', 'name': 'Ubuntu',
'internal_id': 1,
'url': 'https://mirrors.it.att.com/images/image-name',
'disk_format': 'raw', 'min_ram': 0,
'enabled': 1, 'visibility': 'public',
'image_tags': [
{'image_internal_id': 1, 'tag': 'abcd-efgh-ijkl-4567'},
{'image_internal_id': 1, 'tag': 'abcd-efgh-ijkl-4567'}],
'regions': [
{
'action': 'delete', 'image_internal_id': 1,
'type': 'single', 'name': 'North'},
{
'action': 'create', 'image_internal_id': 1,
'type': 'single', 'name': 'North'}],
'image_properties': [
{
'key_name': 'Key1',
'key_value': 'Key1.value',
'image_internal_id': 1},
{
'key_name': 'Key2',
'key_value': 'Key2.value',
'image_internal_id': 1}],
'protected': 1, 'image_tenant': [
{'tenant_id': 'abcd-efgh-ijkl-4567', 'image_internal_id': 1},
{'tenant_id': 'abcd-efgh-ijkl-4567', 'image_internal_id': 1}],
'container_format': 'bare',
'min_disk': 2,
'id': 'uuu1id12-uuid-uuid-uuid'},
'external_transaction_id': 'uuid-12345',
'operation': 'create', 'transaction_id': ''}