-{
- "generic-vnf": [
+[
+ {
+ "vnf-id": "vnf-id",
+ "vnf-name": "vnf-name",
+ "vnf-type": "vpe",
+ "prov-status": "prov-status",
+ "equipment-role": "equipment-role",
+ "resource-version": "resource-version-id",
+ "relationship-list": {
+ "relationship": [
{
- "vnf-id": "vnf-id",
- "vnf-name": "vnf-name",
- "vnf-type": "vpe",
- "prov-status": "prov-status",
- "equipment-role": "equipment-role",
- "resource-version": "resource-version-id",
- "relationship-list": {
- "relationship": [
- {
- "related-to": "service-instance",
- "related-link": "service-instance-link",
- "relationship-data": [
- {
- "relationship-key": "customer.global-customer-id",
- "relationship-value": "customer-id"
- },
- {
- "relationship-key": "service-subscription.service-type",
- "relationship-value": "service-type"
- },
- {
- "relationship-key": "service-instance.service-instance-id",
- "relationship-value": "service-instance-id"
- }
- ]
- },
- {
- "related-to": "vserver",
- "related-link": "vserver-id",
- "relationship-data": [
- {
- "relationship-key": "cloud-region.cloud-owner",
- "relationship-value": "cloud-owner"
- },
- {
- "relationship-key": "cloud-region.cloud-region-id",
- "relationship-value": "cloud-region-id"
- }
- ]
- }
-
- ]
- }
+ "related-to": "service-instance",
+ "related-link": "/aai/v10/service-instance-link",
+ "relationship-data": [
+ {
+ "relationship-key": "customer.global-customer-id",
+ "relationship-value": "customer-123"
+ },
+ {
+ "relationship-key": "service-subscription.service-type",
+ "relationship-value": "service-type"
+ },
+ {
+ "relationship-key": "service-instance.service-instance-id",
+ "relationship-value": "service-instance-id"
+ }
+ ]
+ },
+ {
+ "related-to": "vserver",
+ "related-link": "/aai/v10/vserver-id",
+ "relationship-data": [
+ {
+ "relationship-key": "cloud-region.cloud-owner",
+ "relationship-value": "cloud-owner"
+ },
+ {
+ "relationship-key": "cloud-region.cloud-region-id",
+ "relationship-value": "cloud-region-id"
+ }
+ ]
}
+
]
-}
\ No newline at end of file
+ }
+ }
+]
req_response.ok = True
req_response.json.return_value = req_json
- complex_json_file = './conductor/tests/unit/data/plugins/inventory_provider/_get_complex_host_name.json'
+ complex_json_file = './conductor/tests/unit/data/plugins/inventory_provider/_get_complex.json'
complex_json = json.loads(open(complex_json_file).read())
self.mock_get_request = mock.patch.object(AAI, '_request', return_value=req_response)
regions_response_file = './conductor/tests/unit/data/plugins/inventory_provider/regions.json'
regions_response = json.loads(open(regions_response_file).read())
+ demand_service_response_file = './conductor/tests/unit/data/plugins/inventory_provider/resolve_demand_service_response.json'
+ demand_service_response = json.loads(open(demand_service_response_file).read())
+
+ complex_json_file = './conductor/tests/unit/data/plugins/inventory_provider/_get_complex.json'
+ complex_json = json.loads(open(complex_json_file).read())
+
req_response = mock.MagicMock()
req_response.status_code = 200
req_response.ok = True
- req_response.json.return_value = generic_vnf_list
+ req_response.json.return_value = demand_service_response
- self.mock_first_level_service_call = mock.patch.object(AAI, 'first_level_service_call', return_value=req_response)
+ self.mock_first_level_service_call = mock.patch.object(AAI, 'first_level_service_call', return_value=generic_vnf_list)
self.mock_first_level_service_call.start()
self.mock_get_regions = mock.patch.object(AAI, '_get_regions', return_value=regions_response)
self.mock_get_regions.start()
- self.maxDiff = None
- self.assertEqual({u'demand_name': [{'sriov_automation': 'false', 'longitude': u'30.12', 'inventory_type': 'cloud', 'inventory_provider': 'aai', 'cloud_owner': u'cloud-owner', 'cloud_region_version': u'1.0', 'service_resource_id': u'service-resource-id-123', 'city': u'Middletown', 'state': u'NJ', 'country': u'USA', 'existing_placement': 'false', 'location_type': 'att_aic', 'location_id': u'region-name', 'complex_name': u'complex-name', 'latitude': u'50.34', 'candidate_id': u'region-name', 'cost': 2.0, 'physical_location_id': u'complex-id', 'region': u'USA'}]} ,
- self.aai_ep.resolve_demands(demands_list))
-
+ self.mock_get_regions = mock.patch.object(AAI, '_request', return_value=req_response)
+ self.mock_get_regions.start()
- #check_network_roles
+ self.mock_get_complex = mock.patch.object(AAI, '_get_complex', return_value=complex_json)
+ self.mock_get_complex.start()
+ self.maxDiff = None
+ self.assertEqual({u'demand_name': [{'candidate_id': u'service-instance-id','city': None,'cloud_owner': u'cloud-owner','cloud_region_version': '','complex_name': None,'cost': 1.0,'country': u'USA','existing_placement': 'false','host_id': u'vnf-name','inventory_provider': 'aai','inventory_type': 'service','latitude': u'28.543251','location_id': u'cloud-region-id','location_type': 'att_aic','longitude': u'-81.377112','physical_location_id': 'test-id','region': u'SE','service_resource_id': '','sriov_automation': 'false','state': None},{'candidate_id': u'region-name','city': u'Middletown','cloud_owner': u'cloud-owner','cloud_region_version': u'1.0','complex_name': u'complex-name','cost': 2.0,'country': u'USA','existing_placement': 'false','inventory_provider': 'aai','inventory_type': 'cloud','latitude': u'50.34','location_id': u'region-name','location_type': 'att_aic','longitude': u'30.12','physical_location_id': u'complex-id','region': u'USA','service_resource_id': u'service-resource-id-123','sriov_automation': 'false','state': u'NJ'}]} ,
+ self.aai_ep.resolve_demands(demands_list))
def test_get_complex(self):
self.mock_get_request.start()
self.assertEqual({u'city': u'Middletown', u'latitude': u'28.543251', u'longitude': u'-81.377112', u'country': u'USA', u'region': u'SE'} ,
- self.aai_ep._get_complex("/v10/complex/complex_id", "complex_id"))
\ No newline at end of file
+ self.aai_ep._get_complex("/v10/complex/complex_id", "complex_id"))
+
+
+ def test_check_network_roles(self):
+
+ network_role_json_file = './conductor/tests/unit/data/plugins/inventory_provider/_request_network_role.json'
+ network_role_json = json.loads(open(network_role_json_file).read())
+
+ response = mock.MagicMock()
+ response.status_code = 200
+ response.ok = True
+ response.json.return_value = network_role_json
+
+ self.mock_get_request = mock.patch.object(AAI, '_request', return_value=response)
+ self.mock_get_request.start()
+ self.assertEqual(set(['test-cloud-value']) ,
+ self.aai_ep.check_network_roles("network_role_id"))
+
+
+ def test_check_candidate_role(self):
+
+ candidate_role_json_file = './conductor/tests/unit/data/plugins/inventory_provider/_request_candidate_role.json'
+ candidate_role_json = json.loads(open(candidate_role_json_file).read())
+
+ response = mock.MagicMock()
+ response.status_code = 200
+ response.ok = True
+ response.json.return_value = candidate_role_json
+
+ self.mock_get_request = mock.patch.object(AAI, '_request', return_value=response)
+ self.mock_get_request.start()
+
+ self.assertEqual("test-role",
+ self.aai_ep.check_candidate_role("candidate_host_id"))
+
+ def test_match_inventory_attributes(self):
+ template_attributes = dict()
+ template_attributes['attr-1'] = ['attr-1-value1', 'attr-1-value2']
+
+ inventory_attributes = dict()
+ inventory_attributes['attr-1'] = 'attr-1-value1'
+
+ self.assertEqual(True,
+ self.aai_ep.match_inventory_attributes(template_attributes, inventory_attributes, "candidate-id"))
+
+ template_attributes['attr-1'] = {
+ 'not': ['attr-1-value2']
+ }
+ self.assertEqual(True,
+ self.aai_ep.match_inventory_attributes(template_attributes, inventory_attributes,
+ "candidate-id"))
+
+ template_attributes['attr-1'] = {
+ 'not': ['attr-1-value1']
+ }
+ self.assertEqual(False,
+ self.aai_ep.match_inventory_attributes(template_attributes, inventory_attributes,
+ "candidate-id"))
+
+ def test_refresh_cache(self):
+ regions_response_file = './conductor/tests/unit/data/plugins/inventory_provider/cache_regions.json'
+ regions_response = json.loads(open(regions_response_file).read())
+
+ complex_json_file = './conductor/tests/unit/data/plugins/inventory_provider/_get_complex.json'
+ complex_json = json.loads(open(complex_json_file).read())
+
+ response = mock.MagicMock()
+ response.status_code = 200
+ response.ok = True
+ response.json.return_value = regions_response
+
+ self.mock_get_regions = mock.patch.object(AAI, '_request', return_value=response)
+ self.mock_get_regions.start()
+
+ self.mock_get_complex = mock.patch.object(AAI, '_get_complex', return_value=complex_json)
+ self.mock_get_complex.start()
+
+ self.assertEqual(None,
+ self.aai_ep._refresh_cache())
\ No newline at end of file