98c6dafa94da93348d440fd56240f3daa131dec9
[vid.git] / vid-automation / src / test / java / org / onap / vid / api / AaiApiTest.java
1 package org.onap.vid.api;
2
3 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
4 import static org.hamcrest.CoreMatchers.containsString;
5 import static org.hamcrest.CoreMatchers.is;
6 import static org.hamcrest.MatcherAssert.assertThat;
7 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.defaultPlacement;
8 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofL3Network;
9 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofServiceInstance;
10 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofVlanTag;
11 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.ofVnf;
12 import static org.onap.simulator.presetGenerator.presets.aai.PresetBaseAAICustomQuery.FORMAT.SIMPLE;
13 import static org.onap.simulator.presetGenerator.presets.ecompportal_att.EcompPortalPresetsUtils.getEcompPortalPresets;
14 import static org.testng.Assert.assertNotNull;
15 import static org.testng.Assert.assertTrue;
16 import static org.testng.AssertJUnit.assertEquals;
17 import static vid.automation.test.Constants.RegisterToSimulator.SearchForServiceInstance.GET_SUBSCRIBERS_FOR_CUSTOMER_CRAIG_ROBERTS;
18 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
19 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
20 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
21 import static vid.automation.test.utils.TestHelper.GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS;
22
23 import com.fasterxml.jackson.core.JsonProcessingException;
24 import com.fasterxml.jackson.databind.JsonNode;
25 import com.fasterxml.jackson.databind.node.ArrayNode;
26 import com.google.common.collect.ImmutableList;
27 import com.google.common.collect.ImmutableMap;
28 import com.google.common.collect.ImmutableMultimap;
29 import java.io.IOException;
30 import java.lang.reflect.Method;
31 import java.net.URISyntaxException;
32 import java.util.List;
33 import java.util.UUID;
34 import net.javacrumbs.jsonunit.JsonAssert;
35 import net.javacrumbs.jsonunit.core.Configuration;
36 import net.javacrumbs.jsonunit.core.Option;
37 import org.apache.commons.text.StringEscapeUtils;
38 import org.apache.http.client.utils.URIBuilder;
39 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
40 import org.onap.simulator.presetGenerator.presets.aai.AAIBaseGetL3NetworksByCloudRegionPreset;
41 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIBadBodyForGetServicesGet;
42 import org.onap.simulator.presetGenerator.presets.aai.PresetAAICloudRegionAndSourceFromConfigurationPut;
43 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIFilterServiceInstanceById;
44 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
45 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetHomingForVfModule;
46 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegion;
47 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest;
48 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing;
49 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetL3NetworksByCloudRegion;
50 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetL3NetworksByCloudRegionSpecificState;
51 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetModelsByOwningEntity;
52 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetNetworkCollectionDetails;
53 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetNetworkCollectionDetailsInvalidRequest;
54 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetNetworkCollectionDetailsRequiredMissing;
55 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetPortMirroringSourcePorts;
56 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetPortMirroringSourcePortsError;
57 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetRelatedInstanceGroupsByVnfId;
58 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetServiceInstanceBySubscriberIdAndServiceTypeAndSIID;
59 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
60 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetVpnsByType;
61 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIModelVersionsByInvariantId;
62 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIServiceInstanceDSLPut;
63 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet;
64 import org.onap.simulator.presetGenerator.presets.aai.PresetBaseAAICustomQuery;
65 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
66 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
67 import org.onap.vid.model.aai.AaiResponse;
68 import org.onap.vid.model.mso.OperationalEnvironmentList;
69 import org.onap.vid.more.LoggerFormatTest;
70 import org.onap.vid.more.LoggerFormatTest.LogName;
71 import org.springframework.core.ParameterizedTypeReference;
72 import org.springframework.http.HttpMethod;
73 import org.springframework.http.HttpStatus;
74 import org.springframework.http.ResponseEntity;
75 import org.springframework.web.client.HttpClientErrorException;
76 import org.springframework.web.client.HttpServerErrorException;
77 import org.springframework.web.util.UriComponentsBuilder;
78 import org.testng.AssertJUnit;
79 import org.testng.annotations.DataProvider;
80 import org.testng.annotations.Test;
81 import vid.automation.test.infra.FeatureTogglingTest;
82 import vid.automation.test.infra.Features;
83 import vid.automation.test.services.SimulatorApi;
84 import vid.automation.test.utils.TestHelper;
85
86 public class AaiApiTest extends BaseApiAaiTest {
87
88     private static final String AAI_HOMING_DATA_RESPONSE = "viewEdit/aaiHomingDataResponse.json";
89     public static final String GET_OPERATIONAL_ENVIRONMENTS_JSON = "get_operational_environments_aai.json";
90     public static final String GET_OPERATIONAL_ENVIRONMENTS_JSON_ERROR = "get_operational_environments_aai_error.json";
91     public static final String[] AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES = {"getServicesAaiErrorResp.json", "create_new_instance/aai_get_full_subscribers.json"};
92     public static final String[] AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES = {"getServicesAaiFineResp.json", "create_new_instance/aai_get_full_subscribers.json"};
93     public static final String AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON = "changeManagement/get_vnf_data_by_globalid_and_service_type.json";
94     public static final String AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON_BY_PARAMS = "registration_to_simulator/changeManagement/get_vnf_data_by_globalid_and_service_type_reduced_response.json";
95     public static final String OPERATIONAL_ENVIRONMENT_TYPE = "VNF";
96     public static final String OPERATIONAL_ENVIRONMENT_STATUS = "Activate";
97     public static final String GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE = "{\"results\":[{\"instance-group\":{\"id\":\"AAI-12002-test3-vm230w\",\"description\":\"a9DEa0kpY\",\"instance-group-role\":\"JZmha7QSS4tJ\",\"model-invariant-id\":\"model-id3\",\"model-version-id\":\"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\"instance-group-type\":\"type\",\"resource-version\":\"1520888659539\",\"instance-group-name\":\"wKmBXiO1xm8bK\",\"instance-group-function\":\"testfunction2\",\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"AAI-12002-vm230w\"},{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"AAI-region-vm230w\"}],\"relatedToPropertyList\":[{\"property-key\":\"cloud-region.owner-defined-type\",\"property-value\":null}],\"related-to\":\"cloud-region\",\"related-link\":\"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\"relationship-label\":\"org.onap.relationships.inventory.Uses\",\"relationship-data\":[{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"AAI-12002-vm230w\"},{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"AAI-region-vm230w\"}],\"related-to-property\":[{\"property-key\":\"cloud-region.owner-defined-type\",\"property-value\":null}]}]}}},{\"instance-group\":{\"id\":\"AAI-12002-test1-vm230w\",\"description\":\"a9DEa0kpY\",\"instance-group-role\":\"JZmha7QSS4tJ\",\"model-invariant-id\":\"model-id1\",\"model-version-id\":\"a0efd5fc-f7be-4502-936a-a6c6392b958f\",\"instance-group-type\":\"type\",\"resource-version\":\"1520886467989\",\"instance-group-name\":\"wKmBXiO1xm8bK\",\"instance-group-function\":\"testfunction2\",\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"AAI-12002-vm230w\"},{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"AAI-region-vm230w\"}],\"relatedToPropertyList\":[{\"property-key\":\"cloud-region.owner-defined-type\",\"property-value\":null}],\"related-to\":\"cloud-region\",\"related-link\":\"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\"relationship-label\":\"org.onap.relationships.inventory.Uses\",\"relationship-data\":[{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"AAI-12002-vm230w\"},{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"AAI-region-vm230w\"}],\"related-to-property\":[{\"property-key\":\"cloud-region.owner-defined-type\",\"property-value\":null}]}]}}},{\"instance-group\":{\"id\":\"AAI-12002-test2-vm230w\",\"description\":\"a9DEa0kpY\",\"instance-group-role\":\"JZmha7QSS4tJ\",\"model-invariant-id\":\"model-id2\",\"model-version-id\":\"version2\",\"instance-group-type\":\"type\",\"resource-version\":\"1520888629970\",\"instance-group-name\":\"wKmBXiO1xm8bK\",\"instance-group-function\":\"testfunction2\",\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"AAI-12002-vm230w\"},{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"AAI-region-vm230w\"}],\"relatedToPropertyList\":[{\"property-key\":\"cloud-region.owner-defined-type\",\"property-value\":null}],\"related-to\":\"cloud-region\",\"related-link\":\"/aai/v13/cloud-infrastructure/cloud-regions/cloud-region/AAI-12002-vm230w/AAI-region-vm230w\",\"relationship-label\":\"org.onap.relationships.inventory.Uses\",\"relationship-data\":[{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"AAI-12002-vm230w\"},{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"AAI-region-vm230w\"}],\"related-to-property\":[{\"property-key\":\"cloud-region.owner-defined-type\",\"property-value\":null}]}]}}}]}\n";
98     public static final String GET_NETWORK_COLLECTION_EXPECTED_RESPONSE = "{\"results\":{\"collection\":{\"collection-id\":\"collection-1-2018-rs804s\",\"model-invariant-id\":\"5761e0a7-defj777\",\"model-version-id\":\"5761e0a7-defj232\",\"collection-name\":\"collection-name\",\"collection-type\":\"L3-NETWORK\",\"collection-role\":\"SUB-INTERFACE\",\"collection-function\":\"collection-function\",\"collection-customization-id\":\"custom-unique-data-id\",\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"customer.global-customer-id\",\"relationship-value\":\"customer-1-2017-rs804s\"},{\"relationship-key\":\"service-subscription.service-type\",\"relationship-value\":\"service-value7-rs804s\"},{\"relationship-key\":\"service-instance.service-instance-id\",\"relationship-value\":\"2UJZZ01777-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"service-instance.service-instance-name\",\"property-value\":null}],\"related-to\":\"service-instance\",\"related-link\":\"/aai/v13/business/customers/customer/customer-1-2017-rs804s/service-subscriptions/service-subscription/service-value7-rs804s/service-instances/service-instance/2UJZZ01777-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"customer.global-customer-id\",\"relationship-value\":\"customer-1-2017-rs804s\"},{\"relationship-key\":\"service-subscription.service-type\",\"relationship-value\":\"service-value7-rs804s\"},{\"relationship-key\":\"service-instance.service-instance-id\",\"relationship-value\":\"2UJZZ01777-rs804s\"}],\"related-to-property\":[{\"property-key\":\"service-instance.service-instance-name\",\"property-value\":null}]},{\"relationDataList\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}],\"related-to\":\"instance-group\",\"related-link\":\"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"related-to-property\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}]}]},\"resource-version\":\"1521662811309\"},\"networks\":[{\"network-id\":\"l3network-id-rs804s\",\"network-name\":\"oam-net\",\"network-type\":\"Tenant_Layer_3\",\"network-role\":\"RosemaProtectedOam.OAM\",\"network-technology\":\"Contrail\",\"is-bound-to-vpn\":false,\"resource-version\":\"1521662814627\",\"orchestration-status\":\"Created\",\"is-provider-network\":false,\"is-shared-network\":false,\"is-external-network\":false,\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}],\"related-to\":\"instance-group\",\"related-link\":\"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"related-to-property\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}]}]}},{\"network-id\":\"l3network-id-3-rs804s\",\"network-name\":\"oam-net\",\"network-type\":\"Tenant_Layer_3\",\"network-role\":\"RosemaProtectedOam.OAM\",\"network-technology\":\"Contrail\",\"is-bound-to-vpn\":false,\"resource-version\":\"1521662816043\",\"orchestration-status\":\"Created\",\"is-provider-network\":false,\"is-shared-network\":false,\"is-external-network\":false,\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}],\"related-to\":\"instance-group\",\"related-link\":\"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"related-to-property\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}]}]}},{\"network-id\":\"l3network-id-2-rs804s\",\"network-name\":\"oam-net\",\"network-type\":\"Tenant_Layer_3\",\"network-role\":\"RosemaProtectedOam.OAM\",\"network-technology\":\"Contrail\",\"is-bound-to-vpn\":false,\"resource-version\":\"1521662815304\",\"orchestration-status\":\"Created\",\"is-provider-network\":false,\"is-shared-network\":false,\"is-external-network\":false,\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}],\"related-to\":\"instance-group\",\"related-link\":\"/aai/v13/network/instance-groups/instance-group/instanceGroup-2018-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"instance-group.id\",\"relationship-value\":\"instanceGroup-2018-rs804s\"}],\"related-to-property\":[{\"property-key\":\"instance-group.description\",\"property-value\":\"zr6h\"},{\"property-key\":\"instance-group.instance-group-name\",\"property-value\":\"wKmBXiO1xm8bK\"}]}]}}],\"service-instance\":{\"service-instance-id\":\"2UJZZ01777-rs804s\",\"resource-version\":\"1521662813382\",\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"collection.collection-id\",\"relationship-value\":\"collection-1-2018-rs804s\"}],\"relatedToPropertyList\":null,\"related-to\":\"collection\",\"related-link\":\"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"collection.collection-id\",\"relationship-value\":\"collection-1-2018-rs804s\"}],\"related-to-property\":null}]}},\"instance-group\":{\"id\":\"instanceGroup-2018-rs804s\",\"description\":\"zr6h\",\"instance-group-role\":\"JZmha7QSS4tJ\",\"model-invariant-id\":\"5761e0a7-defj777\",\"model-version-id\":\"5761e0a7-defj22\",\"instance-group-type\":\"7DDjOdNL\",\"resource-version\":\"1521662814023\",\"instance-group-name\":\"wKmBXiO1xm8bK\",\"instance-group-function\":\"testfunction2\",\"relationship-list\":{\"relationship\":[{\"relationDataList\":[{\"relationship-key\":\"l3-network.network-id\",\"relationship-value\":\"l3network-id-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"l3-network.network-name\",\"property-value\":\"oam-net\"}],\"related-to\":\"l3-network\",\"related-link\":\"/aai/v13/network/l3-networks/l3-network/l3network-id-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"l3-network.network-id\",\"relationship-value\":\"l3network-id-rs804s\"}],\"related-to-property\":[{\"property-key\":\"l3-network.network-name\",\"property-value\":\"oam-net\"}]},{\"relationDataList\":[{\"relationship-key\":\"collection.collection-id\",\"relationship-value\":\"collection-1-2018-rs804s\"}],\"relatedToPropertyList\":null,\"related-to\":\"collection\",\"related-link\":\"/aai/v13/network/collections/collection/collection-1-2018-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"collection.collection-id\",\"relationship-value\":\"collection-1-2018-rs804s\"}],\"related-to-property\":null},{\"relationDataList\":[{\"relationship-key\":\"l3-network.network-id\",\"relationship-value\":\"l3network-id-3-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"l3-network.network-name\",\"property-value\":\"oam-net\"}],\"related-to\":\"l3-network\",\"related-link\":\"/aai/v13/network/l3-networks/l3-network/l3network-id-3-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"l3-network.network-id\",\"relationship-value\":\"l3network-id-3-rs804s\"}],\"related-to-property\":[{\"property-key\":\"l3-network.network-name\",\"property-value\":\"oam-net\"}]},{\"relationDataList\":[{\"relationship-key\":\"l3-network.network-id\",\"relationship-value\":\"l3network-id-2-rs804s\"}],\"relatedToPropertyList\":[{\"property-key\":\"l3-network.network-name\",\"property-value\":\"oam-net\"}],\"related-to\":\"l3-network\",\"related-link\":\"/aai/v13/network/l3-networks/l3-network/l3network-id-2-rs804s\",\"relationship-label\":\"org.onap.relationships.inventory.MemberOf\",\"relationship-data\":[{\"relationship-key\":\"l3-network.network-id\",\"relationship-value\":\"l3network-id-2-rs804s\"}],\"related-to-property\":[{\"property-key\":\"l3-network.network-name\",\"property-value\":\"oam-net\"}]}]}}}}\n";
99
100     public static final String GET_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE = "{\"results\": [{\"customer\": {\"global-customer-id\": \"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\",\"subscriber-name\": \"Mobility\",\"subscriber-type\": \"INFRA\",\"resource-version\": \"1602518417955\",\"related-nodes\": [{\"service-subscription\": {\"service-type\": \"VPMS\",\"resource-version\": \"1629183620246\",\"related-nodes\": [{\"service-instance\": {\"service-instance-id\": \"5d942bc7-3acf-4e35-836a-393619ebde66\",\"service-instance-name\": \"dpa2actsf5001v_Port_Mirroring_dpa2a_SVC\",\"service-type\": \"PORT-MIRROR\",\"service-role\": \"VPROBE\",\"environment-context\": \"General_Revenue-Bearing\",\"workload-context\": \"Production\",\"model-invariant-id\": \"0757d856-a9c6-450d-b494-e1c0a4aab76f\",\"model-version-id\": \"a9088517-efe8-4bed-9c54-534462cb08c2\",\"resource-version\": \"1615330529236\",\"selflink\": \"SOME_SELF_LINK\",\"orchestration-status\": \"Active\"}}]}}]}}]}";
101     public static final String GET_SEARCH_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE = "{\"service-instances\":[{\"serviceInstanceId\":\"5d942bc7-3acf-4e35-836a-393619ebde66\",\"serviceType\":\"VPMS\",\"serviceInstanceName\":\"dpa2actsf5001v_Port_Mirroring_dpa2a_SVC\",\"subscriberName\":\"Mobility\",\"aaiModelInvariantId\":\"0757d856-a9c6-450d-b494-e1c0a4aab76f\",\"aaiModelVersionId\":\"a9088517-efe8-4bed-9c54-534462cb08c2\",\"owningEntityId\":null,\"isPermitted\":false,\"globalCustomerId\":\"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb\"}]}";
102
103     public static final String GET_AAI_SERVIES_EXPECTED_RESULT = "{\n" +
104             "  \"services\": [{\n" +
105             "    \"uuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\n" +
106             "    \"invariantUUID\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\n" +
107             "    \"name\": \"vSAMP10aDEV::base::module-0\",\n" +
108             "    \"version\": \"2\",\n" +
109             "    \"toscaModelURL\": null,\n" +
110             "    \"category\": \"resource\",\n" +
111             "    \"lifecycleState\": null,\n" +
112             "    \"lastUpdaterUserId\": null,\n" +
113             "    \"lastUpdaterFullName\": null,\n" +
114             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
115             "    \"orchestrationType\": null,\n" +
116             "    \"isInstantiationTemplateExists\": false,\n" +
117             "    \"artifacts\": null,\n" +
118             "    \"resources\": null\n" +
119             "  }, {\n" +
120             "    \"uuid\": \"797a6c41-0f80-4d35-a288-3920c4e06baa\",\n" +
121             "    \"invariantUUID\": \"5b607929-6088-4614-97ef-cac817508e0e\",\n" +
122             "    \"name\": \"CONTRAIL30_L2NODHCP\",\n" +
123             "    \"version\": \"1.0\",\n" +
124             "    \"toscaModelURL\": null,\n" +
125             "    \"category\": \"resource\",\n" +
126             "    \"lifecycleState\": null,\n" +
127             "    \"lastUpdaterUserId\": null,\n" +
128             "    \"lastUpdaterFullName\": null,\n" +
129             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_ERROR\",\n" +
130             "    \"orchestrationType\": null,\n" +
131             "    \"isInstantiationTemplateExists\": false,\n" +
132             "    \"artifacts\": null,\n" +
133             "    \"resources\": null\n" +
134             "  }, {\n" +
135             "    \"uuid\": \"f1bde010-cc5f-4765-941f-75f15b24f9fc\",\n" +
136             "    \"invariantUUID\": \"0143d57b-a517-4de9-a0a1-eb76db51f402\",\n" +
137             "    \"name\": \"BkVmxAv061917..base_vPE_AV..module-0\",\n" +
138             "    \"version\": \"2\",\n" +
139             "    \"toscaModelURL\": null,\n" +
140             "    \"category\": \"resource\",\n" +
141             "    \"lifecycleState\": null,\n" +
142             "    \"lastUpdaterUserId\": null,\n" +
143             "    \"lastUpdaterFullName\": null,\n" +
144             "    \"orchestrationType\": null,\n" +
145             "    \"isInstantiationTemplateExists\": false,\n" +
146             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
147             "    \"artifacts\": null,\n" +
148             "    \"resources\": null\n" +
149             "  }, {\n" +
150             "    \"uuid\": \"ipe-resource-id-ps-02\",\n" +
151             "    \"invariantUUID\": \"ipe-resource-id-ps-02\",\n" +
152             "    \"name\": \"abc\",\n" +
153             "    \"version\": \"v1.0\",\n" +
154             "    \"toscaModelURL\": null,\n" +
155             "    \"category\": \"resource\",\n" +
156             "    \"lifecycleState\": null,\n" +
157             "    \"lastUpdaterUserId\": null,\n" +
158             "    \"lastUpdaterFullName\": null,\n" +
159             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
160             "    \"orchestrationType\": null,\n" +
161             "    \"isInstantiationTemplateExists\": false,\n" +
162             "    \"artifacts\": null,\n" +
163             "    \"resources\": null\n" +
164             "  }, {\n" +
165             "    \"uuid\": \"lmoser410-connector-model-version-id\",\n" +
166             "    \"invariantUUID\": \"lmoser410-connector-model-id\",\n" +
167             "    \"name\": \"connector\",\n" +
168             "    \"version\": \"v1.0\",\n" +
169             "    \"toscaModelURL\": null,\n" +
170             "    \"category\": \"widget\",\n" +
171             "    \"lifecycleState\": null,\n" +
172             "    \"lastUpdaterUserId\": null,\n" +
173             "    \"lastUpdaterFullName\": null,\n" +
174             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
175             "    \"orchestrationType\": null,\n" +
176             "    \"isInstantiationTemplateExists\": false,\n" +
177             "    \"artifacts\": null,\n" +
178             "    \"resources\": null\n" +
179             "  }, {\n" +
180             "    \"uuid\": \"ff2ae348-214a-11e7-93ae-92361f002673\",\n" +
181             "    \"invariantUUID\": \"3a97db99-c4bb-498a-a13a-38f65f1ced3d\",\n" +
182             "    \"name\": \"vSAMP10aDEV::base::module-0\",\n" +
183             "    \"version\": \"1.0\",\n" +
184             "    \"toscaModelURL\": null,\n" +
185             "    \"category\": \"resource\",\n" +
186             "    \"lifecycleState\": null,\n" +
187             "    \"lastUpdaterUserId\": null,\n" +
188             "    \"lastUpdaterFullName\": null,\n" +
189             "    \"orchestrationType\": null,\n" +
190             "    \"isInstantiationTemplateExists\": false,\n" +
191             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
192             "    \"artifacts\": null,\n" +
193             "    \"resources\": null\n" +
194             "  }, {\n" +
195             "    \"uuid\": \"204c641a-3494-48c8-979a-86856f5fd32a\",\n" +
196             "    \"invariantUUID\": \"3c504d40-b847-424c-9d25-4fb7e0a3e994\",\n" +
197             "    \"name\": \"named-query-element\",\n" +
198             "    \"version\": \"1.0\",\n" +
199             "    \"toscaModelURL\": null,\n" +
200             "    \"category\": \"widget\",\n" +
201             "    \"lifecycleState\": null,\n" +
202             "    \"lastUpdaterUserId\": null,\n" +
203             "    \"lastUpdaterFullName\": null,\n" +
204             "    \"orchestrationType\": null,\n" +
205             "    \"isInstantiationTemplateExists\": false,\n" +
206             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
207             "    \"artifacts\": null,\n" +
208             "    \"resources\": null\n" +
209             "  }, {\n" +
210             "    \"uuid\": \"acba1f72-c6e0-477f-9426-ad190151e100\",\n" +
211             "    \"invariantUUID\": \"93e56950-cb19-44e6-ace4-8b50f2d02e45\",\n" +
212             "    \"name\": \"RG_6-19_Test\",\n" +
213             "    \"version\": \"1.0\",\n" +
214             "    \"toscaModelURL\": null,\n" +
215             "    \"category\": \"resource\",\n" +
216             "    \"lifecycleState\": null,\n" +
217             "    \"lastUpdaterUserId\": null,\n" +
218             "    \"lastUpdaterFullName\": null,\n" +
219             "    \"orchestrationType\": null,\n" +
220             "    \"isInstantiationTemplateExists\": false,\n" +
221             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
222             "    \"artifacts\": null,\n" +
223             "    \"resources\": null\n" +
224             "  }, {\n" +
225             "    \"uuid\": \"fc65e5e7-45c7-488a-b36d-f453ab3057fe\",\n" +
226             "    \"invariantUUID\": \"ee448504-ceee-47db-8e1b-742115f219db\",\n" +
227             "    \"name\": \"ciServicea268facd387e\",\n" +
228             "    \"version\": \"1.0\",\n" +
229             "    \"toscaModelURL\": null,\n" +
230             "    \"category\": \"service\",\n" +
231             "    \"lifecycleState\": null,\n" +
232             "    \"lastUpdaterUserId\": null,\n" +
233             "    \"lastUpdaterFullName\": null,\n" +
234             "    \"orchestrationType\": null,\n" +
235             "    \"isInstantiationTemplateExists\": false,\n" +
236             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
237             "    \"artifacts\": null,\n" +
238             "    \"resources\": null\n" +
239             "  }, {\n" +
240             "    \"uuid\": \"027948b6-25e2-4e39-b87d-d9f5797941de\",\n" +
241             "    \"invariantUUID\": \"56f2d0d3-7943-4159-bf01-b82692ec035e\",\n" +
242             "    \"name\": \"service_sanity_amir\",\n" +
243             "    \"version\": \"2.0\",\n" +
244             "    \"toscaModelURL\": null,\n" +
245             "    \"category\": \"service\",\n" +
246             "    \"lifecycleState\": null,\n" +
247             "    \"lastUpdaterUserId\": null,\n" +
248             "    \"lastUpdaterFullName\": null,\n" +
249             "    \"orchestrationType\": null,\n" +
250             "    \"isInstantiationTemplateExists\": false,\n" +
251             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
252             "    \"artifacts\": null,\n" +
253             "    \"resources\": null\n" +
254             "  }, {\n" +
255             "    \"uuid\": \"fbf96e3b-1804-4c89-bf5b-53acb7f2edc0\",\n" +
256             "    \"invariantUUID\": \"56f2d0d3-7943-4159-bf01-b82692ec035e\",\n" +
257             "    \"name\": \"service_sanity_amir\",\n" +
258             "    \"version\": \"3.0\",\n" +
259             "    \"toscaModelURL\": null,\n" +
260             "    \"category\": \"service\",\n" +
261             "    \"lifecycleState\": null,\n" +
262             "    \"lastUpdaterUserId\": null,\n" +
263             "    \"lastUpdaterFullName\": null,\n" +
264             "    \"orchestrationType\": null,\n" +
265             "    \"isInstantiationTemplateExists\": false,\n" +
266             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
267             "    \"artifacts\": null,\n" +
268             "    \"resources\": null\n" +
269             "  }],\n" +
270             "  \"readOnly\": false\n" +
271             "}";
272     private static final String AAI_GET_ACTIVE_NETWORKS = "/aai_get_active_networks";
273
274     private String getGetOperationEnvironmentsUri() {
275         return uri.toASCIIString() + "/get_operational_environments";
276     }
277
278     private String getAaiServicesUri() {
279         return uri.toASCIIString() + "/rest/models/services";
280     }
281
282     private String getGetOperationEnvironmentUriWithParameters() {
283         String url = getGetOperationEnvironmentsUri();
284         UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
285                 // Add query parameter
286                 .queryParam("operationalEnvironmentStatus", OPERATIONAL_ENVIRONMENT_STATUS)
287                 .queryParam("operationalEnvironmentType", OPERATIONAL_ENVIRONMENT_TYPE);
288
289         String urlWithParameters = builder.toUriString();
290         return urlWithParameters;
291
292     }
293
294     private AaiResponse<OperationalEnvironmentList> loginAndDoGetWithUrl(String url) {
295         ResponseEntity<AaiResponse<OperationalEnvironmentList>> responseEntity = restTemplate.exchange(
296                 url,
297                 HttpMethod.GET,
298                 null,
299                 new ParameterizedTypeReference<AaiResponse<OperationalEnvironmentList>>() {});
300         AaiResponse<OperationalEnvironmentList> response = responseEntity.getBody();
301         return response;
302     }
303
304     @Test
305     public void testErrorGetOperationalEnvironments() {
306         //Register required response
307         SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENTS_JSON_ERROR, APPEND);
308         String url = getGetOperationEnvironmentsUri();
309         AaiResponse<OperationalEnvironmentList> response = loginAndDoGetWithUrl(url);
310         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), response.getHttpCode());
311         assertEquals("simulated error text", response.getErrorMessage());
312
313
314     }
315
316     //This test requires a simulator which runs on VID
317     @Test
318     public void testSuccessGetOperationalEnvironments() {
319         //Register required response
320         String uuidOfOperationalEnvironment = "f07ca256-96dd-40ad-b4d2-7a77e2a974ed";
321         SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENTS_JSON, ImmutableMap.of("UUID_of_Operational_Environment", uuidOfOperationalEnvironment), APPEND);
322         String url = getGetOperationEnvironmentUriWithParameters();
323         AaiResponse<OperationalEnvironmentList> response = loginAndDoGetWithUrl(url);
324         assertEquals(HttpStatus.OK.value(), response.getHttpCode());
325         OperationalEnvironmentList list = response.getT();
326         assertNotNull(list.getOperationalEnvironment());
327         assertEquals(2, list.getOperationalEnvironment().size());
328         assertEquals(uuidOfOperationalEnvironment, list.getOperationalEnvironment().get(0).getOperationalEnvironmentId());
329         assertEquals(1, list.getOperationalEnvironment().get(0).getRelationshipList().getRelationship().size());
330     }
331
332     @Test(dataProvider = "errorCodes")
333     public void getServicesWitErrorResponse(int errorCode) throws IOException, URISyntaxException {
334         TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
335         final String expectedResult = "{\"services\":[],\"readOnly\":false}";
336
337         callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES,
338                 ImmutableMap.of("500", Integer.toString(errorCode), "ERROR_PAYLOAD", StringEscapeUtils.escapeJson(expectedResult)),
339                 getAaiServicesUri(), "", 200, expectedResult, HttpMethod.GET);
340
341     }
342
343     @Test
344     public void getServicesFineRequest() throws IOException, URISyntaxException {
345         TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
346         callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES,
347                 ImmutableMap.of(),
348                 getAaiServicesUri(), "", 200, GET_AAI_SERVIES_EXPECTED_RESULT, HttpMethod.GET);
349     }
350
351     @Test
352     public void whenGetServicesErrorResponse_badResponseIsNotCached() throws IOException, URISyntaxException {
353         TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
354
355
356         final String expectedErrorResult = "{\"services\":[],\"readOnly\":false}";
357         //call AAI with bad response by clear exceptions from simulator, bad response shall not be cached
358         callAaiWithSimulatedErrorResponse(new String[]{}, ImmutableMap.of(), getAaiServicesUri(), "", 200, expectedErrorResult, HttpMethod.GET);
359
360         //call AAI with fine response
361         callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES,
362                 ImmutableMap.of(),
363                 getAaiServicesUri(), "", 200, GET_AAI_SERVIES_EXPECTED_RESULT, HttpMethod.GET);
364     }
365
366     @DataProvider
367     public static Object[][] errorCodes(Method test) {
368         return new Object[][]{
369                 {500},{505}, {400}, {401}, {405}
370         };
371     }
372
373     @Test
374     public void whenThrowExceptionInsAaiResponseErrorAreLogged() {
375         String notAJson = "not a json";
376         SimulatorApi.registerExpectationFromPreset(new PresetAAIBadBodyForGetServicesGet(notAJson), CLEAR_THEN_SET);
377         SimulatorApi.registerExpectationFromPresets(getEcompPortalPresets(), APPEND);
378         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), APPEND);
379
380         restTemplateErrorAgnostic.getForEntity(uri + "/aai_get_services", String.class);
381         String logLines = LoggerFormatTest.getLogLines(LogName.error, 15, 0, restTemplate, uri);
382
383         assertThat("not found in error log", logLines, containsString("Failed to parse aai response"));
384         assertThat("not found in error log", logLines, containsString(notAJson));
385         assertThat("not found in error log", logLines, containsString("GetServicesAAIRespone"));
386
387     }
388
389     @Test
390     public void portMirroringConfigData_givenValidAaiResponse_yieldCloudRegionId() {
391         SimulatorApi.registerExpectationFromPreset(new PresetAAICloudRegionAndSourceFromConfigurationPut("SOME-RANDOM-UUID", "THE-EXPECTED-REGION-ID"), CLEAR_THEN_SET);
392
393         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID", String.class);
394
395         final ImmutableMap<String, ImmutableMap<String, String>> expected = ImmutableMap.of(
396                 "SOME-RANDOM-UUID", ImmutableMap.of(
397                         "cloudRegionId", "THE-EXPECTED-REGION-ID"
398                 ));
399
400         assertResponse(expected, response);
401
402         /*
403         More tests:
404         [ ]  Error responses from AAI (404 etc): descriptive error response, including what tried and what happened
405         [ ]  malformed response from AAI: descriptive error response, including the payload
406         [ ]  empty/missing value for configurationId: client-error http code
407          */
408     }
409
410
411     @Test
412     public void portMirroringSourcePorts_validAAIResponseWithSinglePort_yieldCorrectPortData() {
413         SimulatorApi.registerExpectationFromPreset(
414                 new PresetAAIGetPortMirroringSourcePorts("CONFIGURATION-ID", "INTERFACE-ID", "INTERFACE-NAME", true),
415                 CLEAR_THEN_SET
416         );
417
418         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringSourcePorts?configurationIds=" + "CONFIGURATION-ID", String.class);
419
420         final ImmutableMap<String, ImmutableList> expected = ImmutableMap.of(
421                 "CONFIGURATION-ID", ImmutableList.of(ImmutableMap.of(
422                         "interfaceId", "INTERFACE-ID", "interfaceName", "INTERFACE-NAME", "isPortMirrored", true
423                 )));
424
425         assertResponse(expected, response);
426     }
427
428     @Test
429     public void portMirroringSourcePorts_nullValueForInterfaceId_yield200OkWithFineDescription() {
430         final PresetAAIGetPortMirroringSourcePorts preset = new PresetAAIGetPortMirroringSourcePorts("CONFIGURATION-ID", null, "INTERFACE-NAME", true);
431         SimulatorApi.registerExpectationFromPreset(
432                 preset,
433                 CLEAR_THEN_SET
434         );
435
436         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringSourcePorts?configurationIds=" + "CONFIGURATION-ID", String.class);
437
438         final ImmutableMap<String, ImmutableList<ImmutableMap>> expected = ImmutableMap.of(
439                 "CONFIGURATION-ID", ImmutableList.of(ImmutableMap.of(
440                         "errorDescription", "Value of 'interface-id' is missing.",
441                         "rawAaiResponse", preset.getResponseBody().toString()
442                 )));
443
444         assertResponse(expected, response);
445     }
446
447     @Test
448     public void portMirroringSourcePorts_given503ErrorAaiResponse_yield200OkWithErrorMsg() {
449         final PresetAAIGetPortMirroringSourcePortsError preset = new PresetAAIGetPortMirroringSourcePortsError("CONFIGURATION-ID", "INTERFACE-ID", "INTERFACE-NAME", true);
450         SimulatorApi.registerExpectationFromPreset(
451                 preset,
452                 CLEAR_THEN_SET
453         );
454
455         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringSourcePorts?configurationIds=" + "CONFIGURATION-ID", String.class);
456
457         final ImmutableMap<String, ImmutableList<ImmutableMap>> expected = ImmutableMap.of(
458                 "CONFIGURATION-ID", ImmutableList.of(ImmutableMap.of(
459                         "errorDescription", "Got 503 from aai",
460                         "rawAaiResponse", preset.getResponseBody()
461                 )));
462
463         assertResponse(expected, response);
464     }
465
466     @Test
467     public void portMirroringConfigData_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
468         SimulatorApi.clearAll();
469
470         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID", String.class);
471
472         final ImmutableMap<String, ImmutableMap<String, String>> expected = ImmutableMap.of(
473                 "SOME-RANDOM-UUID", ImmutableMap.of(
474                         "errorDescription", "Got 404 from aai",
475                         "rawAaiResponse", ""
476                 ));
477
478         assertResponse(expected, response);
479     }
480
481     @Test
482     public void getNetworkCollectionDetailsByServiceInstanceId_yieldValidResponse() {
483         SimulatorApi.clearAll();
484         final PresetAAIGetNetworkCollectionDetails presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetails("SOME-RANDOM-UUID");
485         SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
486         final String response = restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
487
488         assertResponse(GET_NETWORK_COLLECTION_EXPECTED_RESPONSE, response);
489     }
490
491     @Test
492     public void getNetworkCollectionDetailsByServiceInstanceId_responseWithExtraFields_yieldValidResponse() {
493         SimulatorApi.clearAll();
494         final PresetAAIGetNetworkCollectionDetailsInvalidRequest presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetailsInvalidRequest("SOME-RANDOM-UUID");
495         SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
496         final String response = restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
497
498         assertResponse(GET_NETWORK_COLLECTION_EXPECTED_RESPONSE, response);
499     }
500
501     @Test
502     public void getNetworkCollectionDetailsByServiceInstanceId_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
503         SimulatorApi.clearAll();
504         try {
505             restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
506         } catch (HttpClientErrorException e) {
507             assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
508         }
509     }
510
511     @Test
512     public void getNetworkCollectionDetailsByServiceInstanceId_responseWithRequiredMissing() {
513         SimulatorApi.clearAll();
514         final PresetAAIGetNetworkCollectionDetailsRequiredMissing presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetailsRequiredMissing("SOME-RANDOM-UUID");
515         SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
516         try {
517             restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
518         } catch (HttpServerErrorException e) {
519             assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
520         }
521     }
522
523     @Test
524     public void getGetInstanceGroupsByCloudRegion_yieldValidResponse() {
525         SimulatorApi.clearAll();
526         final PresetAAIGetInstanceGroupsByCloudRegion presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegion("CLOUD%20OWNER", "CLOUD-REGION-ID", "NETWORK%20FUNCTION");
527         SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
528         final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK FUNCTION", String.class);
529
530         assertResponse(GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE, response);
531     }
532
533     @Test
534     public void getGetInstanceGroupsByCloudRegion_responseWithExtraFields_yieldValidResponse() {
535         SimulatorApi.clearAll();
536         final PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
537         SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
538         final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
539
540         assertResponse(GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE, response);
541     }
542
543     @Test
544     public void getGetInstanceGroupsByCloudRegion_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
545         SimulatorApi.clearAll();
546         try {
547             restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
548         } catch (HttpClientErrorException e) {
549             assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
550         }
551     }
552
553     @Test
554     public void getGetInstanceGroupsByCloudRegion_responseWithRequiredMissing() {
555         SimulatorApi.clearAll();
556         final PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
557         SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
558         try {
559             restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
560         } catch (HttpServerErrorException e) {
561             assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
562         }
563     }
564
565     @Test
566     public void portMirroringConfigData_emptyIdOnAaiResponse_yieldError() {
567         final PresetAAICloudRegionAndSourceFromConfigurationPut presetAAIResponseWitnProblem = new PresetAAICloudRegionAndSourceFromConfigurationPut("SOME-RANDOM-UUID", "");
568         SimulatorApi.registerExpectationFromPreset(presetAAIResponseWitnProblem, CLEAR_THEN_SET);
569
570         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID", String.class);
571
572         final ImmutableMap<String, ImmutableMap<String, String>> expected = ImmutableMap.of(
573                 "SOME-RANDOM-UUID", ImmutableMap.of(
574                         "errorDescription", "Node 'properties.cloud-region-id' of node-type 'cloud-region' is blank",
575                         "rawAaiResponse", presetAAIResponseWitnProblem.getResponseBody().toString().replace(" ", "")
576                 ));
577
578         assertResponse(expected, response);
579     }
580
581     @Test
582     public void getGetRelatedInstanceGroupsByVnfId__yieldValidResponse() {
583         String vnfId = "some_vnf_id";
584         final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId(vnfId);
585         SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, CLEAR_THEN_SET);
586
587         final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + vnfId,
588                 String.class);
589
590         assertResponse("[{\"type\":\"instance-group\",\"name\":\"instance group name\"},{\"type\":\"instance-group\",\"name\":\"instance group name\"}]", response);
591     }
592
593     @Test
594     public void getHomingDataForVfModule(){
595         String vnfId= "0846287b-65bf-45a6-88f6-6a1af4149fac", vfModuleId= "a9b70ac0-5917-4203-a308-0e6920e6d09b";
596         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetHomingForVfModule(vnfId,vfModuleId), CLEAR_THEN_SET);
597         final String response = restTemplate.getForObject(uri + "/aai_get_homing_by_vfmodule/"+ vnfId +"/"+vfModuleId, String.class);
598         String exectedResponse = TestUtils.convertRequest(objectMapper, AAI_HOMING_DATA_RESPONSE);
599         assertResponse(exectedResponse,response);
600     }
601
602     @Test
603     public void getGetRelatedInstanceGroupsByVnfId__yield404NotFound() {
604         final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId("abcd");
605         SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, CLEAR_THEN_SET);
606         try {
607             restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + "dcba", String.class);
608         } catch (HttpClientErrorException e) {
609             assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
610         }
611
612     }
613
614     @Test
615     public void portMirroringConfigData_twoResponsesOneValidAndOneInvalid_yieldBothErrorAndOk() {
616         final PresetAAICloudRegionAndSourceFromConfigurationPut presetAAIResponseWitnProblem = new PresetAAICloudRegionAndSourceFromConfigurationPut("ANOTHER-RANDOM-UUID", "");
617         SimulatorApi.registerExpectationFromPreset(presetAAIResponseWitnProblem, CLEAR_THEN_SET);
618         SimulatorApi.registerExpectationFromPreset(new PresetAAICloudRegionAndSourceFromConfigurationPut("SOME-RANDOM-UUID", "THE-EXPECTED-REGION-ID"), APPEND);
619
620         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID,ANOTHER-RANDOM-UUID", String.class);
621
622         final ImmutableMap<String, ImmutableMap<String, Object>> expected = ImmutableMap.of(
623                 "SOME-RANDOM-UUID", ImmutableMap.of(
624                         "cloudRegionId", "THE-EXPECTED-REGION-ID"
625                 ),
626                 "ANOTHER-RANDOM-UUID", ImmutableMap.of(
627                         "errorDescription", "Node 'properties.cloud-region-id' of node-type 'cloud-region' is blank",
628                         "rawAaiResponse", presetAAIResponseWitnProblem.getResponseBody().toString().replace(" ", "")
629                 ));
630
631         assertResponse(expected, response);
632     }
633
634     @Test
635     @FeatureTogglingTest(Features.FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS)
636     public void networksToVlans_simpleRequest_responseIsCorrect() {
637         // Prepare randomized values
638         // Some of these random values are persisted to match with the
639         // cypress preset "aaiGetNetworksToVlansByServiceInstance.json".
640         String globalCustomerId = UUID.randomUUID().toString();
641         String sdcModelUuid = "5a3ad576-c01d-4bed-8194-0e72b4a3d020";
642         String serviceType = "vMOG";
643         int vlanIdOuter = 34612;
644         int vlanIdOuter2 = 8568012;
645         int vlanIdOuter3 = 4;
646
647         // build hierarchical presets:
648         //
649         //     service instance
650         //               ║
651         //               ╠═  network 1
652         //               ║      ╠═  vlan 1
653         //               ║      ╚═  vlan 2
654         //               ║
655         //               ╠═  network 2
656         //               ║      ╚═  vlan 3
657         //               ║
658         PresetAAIStandardQueryGet vlanTagPreset1 = ofVlanTag(vlanIdOuter);
659         PresetAAIStandardQueryGet vlanTagPreset2 = ofVlanTag(vlanIdOuter2);
660         PresetAAIStandardQueryGet vlanTagPreset3 = ofVlanTag(vlanIdOuter3);
661
662         PresetAAIStandardQueryGet l3NetworkPreset1 = ofL3Network("7989a6d2-ba10-4a5d-8f15-4520bc833090", "DDDEEEFFF", "Provider Network",
663                 ImmutableMultimap.of("vlan-tag", vlanTagPreset1.getReqPath(), "vlan-tag", vlanTagPreset2.getReqPath()), "Failed");
664         PresetAAIStandardQueryGet l3NetworkPreset2 = ofL3Network("e8e2332e-1f84-4237-bc97-3b5b842f52e4","GGGHHHIII", "Network",
665                 ImmutableMultimap.of("vlan-tag", vlanTagPreset3.getReqPath()), "Assigned");
666
667         PresetAAIStandardQueryGet serviceInstance = ofServiceInstance("9cdd1b2a-43a7-47bc-a88e-759ba2399f0b",
668                 "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", globalCustomerId, serviceType,
669                 ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath(), "l3-network", l3NetworkPreset2.getReqPath()));
670
671         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
672                 serviceInstance, l3NetworkPreset1, l3NetworkPreset2, vlanTagPreset1, vlanTagPreset2, vlanTagPreset3,
673                 new PresetSDCGetServiceMetadataGet(sdcModelUuid, UUID.randomUUID().toString(), "service-vl-with-5g-network-provider-alacarte.zip"),
674                 new PresetSDCGetServiceToscaModelGet(sdcModelUuid, "service-vl-with-5g-network-provider-alacarte.zip")
675         ), CLEAR_THEN_SET);
676
677         // THE TEST
678         final String response = restTemplate.getForObject(uri + "/aai/standardQuery/vlansByNetworks"
679                         + "?serviceInstanceId=" + serviceInstance.getInstanceId()
680                         + "&serviceType=" + serviceType
681                         + "&globalCustomerId=" + globalCustomerId
682                         + "&sdcModelUuid=" + sdcModelUuid
683                 , String.class);
684
685         assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
686                 getResourceAsString("serviceWithNetwork/aaiGetNetworksToVlansByServiceInstance.json"),
687                 response);
688     }
689
690     @Test
691     @FeatureTogglingTest(Features.FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS)
692     public void networksWithVlansToVnf_simpleRequest_responseIsCorrect() {
693         // Prepare randomized values
694         // Some of these random values are persisted to match with the
695         // cypress preset "aaiGetNetworksWithVlansToVnfByServiceInstance.json".
696         String globalCustomerId = UUID.randomUUID().toString();
697         String sdcModelUuid = "5a3ad576-c01d-4bed-8194-0e72b4a3d020";
698         String serviceType = "vMOG";
699         int vlanIdOuter = 34123;
700         int vlanIdOuter2 = 65540;
701         int vlanIdOuter3 = 12345;
702         int vlanIdOuter4 = 67890;
703         int vlanIdOuter5 = 417695;
704         int vlanIdOuter6 = 783243;
705
706         // build hierarchical presets:
707         //
708         //     service instance
709         //               ║
710         //               ╠═  vnf 1
711         //               ║    ╚═  network 1
712         //               ║          ╠═  vlan 1
713         //               ║          ╚═  vlan 2
714         //               ║    ╚═  network 2
715         //               ║          ╠═  vlan 3
716         //               ║          ╚═  vlan 4
717         //               ║
718         //               ╠═  vnf 2
719         //               ║    ╚═  network 3
720         //               ║          ╠═  vlan 5
721         //               ║          ╚═  vlan 6
722         //               ║
723         PresetAAIStandardQueryGet vlanTagPreset1 = ofVlanTag(vlanIdOuter);
724         PresetAAIStandardQueryGet vlanTagPreset2 = ofVlanTag(vlanIdOuter2);
725         PresetAAIStandardQueryGet vlanTagPreset3 = ofVlanTag(vlanIdOuter3);
726         PresetAAIStandardQueryGet vlanTagPreset4 = ofVlanTag(vlanIdOuter4);
727         PresetAAIStandardQueryGet vlanTagPreset5 = ofVlanTag(vlanIdOuter5);
728         PresetAAIStandardQueryGet vlanTagPreset6 = ofVlanTag(vlanIdOuter6);
729
730         PresetAAIStandardQueryGet l3NetworkPreset1 = ofL3Network("36517f3d-2bc2-48f5-aaf8-418520c54330","AAAAABBBBCCCC", "Provider Network",
731                 ImmutableMultimap.of("vlan-tag", vlanTagPreset1.getReqPath(), "vlan-tag", vlanTagPreset2.getReqPath()), "Assigned");
732
733         PresetAAIStandardQueryGet l3NetworkPreset2 = ofL3Network("12347f3d-2bc2-48f5-aaf8-418520c54330","DDDEEEE", "Provider Network",
734                 ImmutableMultimap.of("vlan-tag", vlanTagPreset3.getReqPath(), "vlan-tag", vlanTagPreset4.getReqPath()), "Created");
735
736         PresetAAIStandardQueryGet vnfPreset1 = ofVnf("c015cc0f-0f37-4488-aabf-53795fd93cd3",
737                 ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath() , "l3-network", l3NetworkPreset2.getReqPath()),
738                 defaultPlacement());
739
740         PresetAAIStandardQueryGet l3NetworkPreset3 = ofL3Network("12aa7f3d-2bc2-48f5-aaf8-418520c54330","XXXYYYZZZ", "Network",
741                 ImmutableMultimap.of("vlan-tag", vlanTagPreset5.getReqPath(), "vlan-tag", vlanTagPreset6.getReqPath()), "Created");
742
743         PresetAAIStandardQueryGet vnfPreset2 = ofVnf("c55da606-cf38-42c7-bc3c-be8e23b19299", ImmutableMultimap.of("l3-network", l3NetworkPreset3.getReqPath()),
744                 defaultPlacement());
745
746         PresetAAIStandardQueryGet serviceInstance = ofServiceInstance("9cdd1b2a-43a7-47bc-a88e-759ba2399f0b",
747                 "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", globalCustomerId, serviceType,
748                 ImmutableMultimap.of("generic-vnf", vnfPreset1.getReqPath(), "generic-vnf", vnfPreset2.getReqPath()));
749
750         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
751                 serviceInstance, vnfPreset1, vnfPreset2, l3NetworkPreset1, l3NetworkPreset2, l3NetworkPreset3, vlanTagPreset1, vlanTagPreset2, vlanTagPreset3, vlanTagPreset4, vlanTagPreset5, vlanTagPreset6,
752                 new PresetSDCGetServiceMetadataGet(sdcModelUuid, UUID.randomUUID().toString(), "service-vl-with-5g-network-provider-alacarte.zip"),
753                 new PresetSDCGetServiceToscaModelGet(sdcModelUuid, "service-vl-with-5g-network-provider-alacarte.zip")
754         ), CLEAR_THEN_SET);
755
756         // THE TEST
757         final String response = restTemplate.getForObject(uri + "/aai/standardQuery/vlansByNetworks"
758                         + "?serviceInstanceId=" + serviceInstance.getInstanceId()
759                         + "&serviceType=" + serviceType
760                         + "&globalCustomerId=" + globalCustomerId
761                         + "&sdcModelUuid=" + sdcModelUuid
762                 , String.class);
763
764         assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
765                 getResourceAsString("serviceWithNetwork/aaiGetNetworksWithVlansToVnfByServiceInstance.json"),
766                 response);
767     }
768
769     @FeatureTogglingTest(value = Features.FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG, flagActive = false)
770     @Test
771     public void getVnfDataByGlobalIdAndServiceType() {
772
773         SimulatorApi.registerExpectationFromPreset(new PresetBaseAAICustomQuery(
774             SIMPLE,
775             "business/customers/customer/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/service-subscriptions/service-subscription/vRichardson/service-instances",
776             "query/vnf-topology-fromServiceInstance"
777         ) {
778             @Override
779             public Object getResponseBody() {
780                 return getResourceAsString(
781                     "registration_to_simulator/changeManagement/get_vnf_data_by_globalid_and_service_type_response.json");
782             }
783         }, CLEAR_THEN_SET);
784
785         String url = uri + "/get_vnf_data_by_globalid_and_service_type/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/vRichardson";
786
787         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
788
789         assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
790                 getResourceAsString("registration_to_simulator/changeManagement/get_vnf_data_by_globalid_and_service_type_response.json"),
791                 response.getBody());
792     }
793
794     @Test
795     public void whenCallAaiThroughAAIRestInterface_thenRequestRecordedInMetricsLog() {
796         registerExpectationFromPresets(ImmutableList.of(
797             new PresetAAIGetVpnsByType(),
798             new PresetAAIGetSubscribersGet()
799         ),CLEAR_THEN_SET);
800         String internalPath = "/aai_get_vpn_list";
801         String url = uri + internalPath;
802         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
803         final String requestId = response.getHeaders().getFirst("X-ECOMP-RequestID-echo");
804         LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, requestId,"/network/vpn-bindings" , 1);
805         LoggerFormatTest.verifyExistenceOfIncomingReqsInAuditLogs(restTemplate, uri, requestId, internalPath);
806     }
807
808     @Test
809     public void getVpnList() {
810         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetVpnsByType(), CLEAR_THEN_SET);
811         String url = uri + "/aai_get_vpn_list";
812         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
813         String expected = getResourceAsString("viewEdit/aaiGetVpnList.json");
814         assertThat(response.getBody(), jsonEquals(expected).when(Option.IGNORING_ARRAY_ORDER).when(Option.IGNORING_EXTRA_FIELDS));
815     }
816
817     @DataProvider
818     public static Object[][] getActiveNetworkAaiStates() {
819         return new Object[][] {
820                 {1, "viewEdit/aaiGetActiveNetworks.json"},
821                 {2, "viewEdit/aaiGetActiveNetworks2.json"}
822         };
823     }
824
825     @Test(dataProvider = "getActiveNetworkAaiStates")
826     public void getActiveNetworks_givenSpecificAAIState_cypressPresetMatch(int state, String expectedResultFileName) {
827         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
828             new PresetAAIGetL3NetworksByCloudRegionSpecificState(state),
829             PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AUK51A_TO_ATT_NC
830         ), CLEAR_THEN_SET);
831         String url = uri + AAI_GET_ACTIVE_NETWORKS
832             + "?cloudRegion=" + AAIBaseGetL3NetworksByCloudRegionPreset.DEFAULT_CLOUD_REGION_ID
833             + "&tenantId=" + AAIBaseGetL3NetworksByCloudRegionPreset.DEFAULT_TENANT_ID;
834         String response = restTemplate.getForObject(url, String.class);
835         System.out.println("response = " + response);
836         String expected = getResourceAsString(expectedResultFileName);
837         assertThat(response, jsonEquals(expected));
838     }
839
840     @Test
841     public void getActiveNetworks() throws JsonProcessingException {
842         String networkRole = "Some role";
843         PresetAAIGetL3NetworksByCloudRegion presetAAIGetL3NetworksByCloudRegion = new PresetAAIGetL3NetworksByCloudRegion(networkRole);
844         List<BasePreset> presets = ImmutableList.of(
845                 presetAAIGetL3NetworksByCloudRegion,
846                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AUK51A_TO_ATT_NC
847         );
848         SimulatorApi.registerExpectationFromPresets(presets, CLEAR_THEN_SET);
849         String url = uri + AAI_GET_ACTIVE_NETWORKS +
850                 "?cloudRegion=" + presetAAIGetL3NetworksByCloudRegion.getCloudRegionId() +
851                 "&tenantId=" + presetAAIGetL3NetworksByCloudRegion.getTenantId() +
852                  "&networkRole=" + networkRole;
853         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
854
855         assertResponse(JsonAssert.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER),
856                 presetAAIGetL3NetworksByCloudRegion.getActiveNetworksWithNameAndRelatedToVpnBindingAsJsonString(),
857                 response.getBody());
858     }
859
860     @Test
861     public void getNewestModelVersionByInvariant() throws JsonProcessingException {
862         String invariantId = "f6342be5-d66b-4d03-a1aa-c82c3094c4ea";
863
864         SimulatorApi.registerExpectationFromPreset(new PresetAAIModelVersionsByInvariantId(), CLEAR_THEN_SET );
865
866         String url = uri +
867                 "/aai_get_newest_model_version_by_invariant/" + invariantId;
868         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
869
870         assertTrue(response.toString().contains("the-newest-version"));
871     }
872
873     @Test
874     public void getNewestModelVersionByInvariant_modelNotExist_thenEmptyResponse() {
875         String invariantId = "f6342be5-d66b-4d03-a1aa-c82c3094c4ea";
876
877         SimulatorApi.registerExpectationFromPreset(new PresetAAIModelVersionsByInvariantId(), CLEAR_THEN_SET );
878
879         String url = uri +
880                 "/aai_get_newest_model_version_by_invariant/" + "model-not-exist";
881         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
882
883         assertTrue(response.getStatusCode().is2xxSuccessful());
884         AssertJUnit.assertNull(response.getBody());
885     }
886
887     @Test
888     @FeatureTogglingTest(Features.FLAG_FLASH_REDUCED_RESPONSE_CHANGEMG)
889     public void getVnfsWithCustomQueryNewReducedResponse() throws URISyntaxException {
890
891         String globalCustomerId = "globalCustomerId1-360-as988q";
892         String serviceType = "TEST1-360";
893         String nfRole = "test360";
894         SimulatorApi.registerExpectationFromPreset(new PresetBaseAAICustomQuery(
895             SIMPLE,
896             "/business/customers/customer/" + globalCustomerId + "/service-subscriptions/service-subscription/"
897                 + serviceType + "/service-instances",
898             "query/vnfs-fromServiceInstance-filter?nfRole=" + nfRole
899             ) {
900             @Override
901             public Object getResponseBody() {
902                 return getResourceAsString(
903                     AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON_BY_PARAMS);
904             }
905         }, CLEAR_THEN_SET);
906         URIBuilder urlBuilder  = new URIBuilder(uri + "/get_vnf_data_by_globalid_and_service_type/" + globalCustomerId + "/" + serviceType);
907         urlBuilder.addParameter("nfRole", nfRole);
908         ResponseEntity<String> response = restTemplate.getForEntity(urlBuilder.build().toString(), String.class);
909         assertTrue(response.getStatusCode().is2xxSuccessful());
910         assertThat(response.getBody(), jsonEquals(getResourceAsString(AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON_BY_PARAMS)));
911     }
912
913     @Test
914     public void searchServiceInstancesBySubscriber_serviceInstanceOfAnotherSubscriber_authIsFollowingFeatureToggle() {
915         String craigRobertsSubscriberId = "31739f3e-526b-11e6-beb8-9e71128cae77";
916         String aServiceOwningEntityId = "f160c875-ddd1-4ef5-84d8-d098784daa3a";
917         String currentUserAuthorizedOwningEntityId = "d61e6f2d-12fa-4cc2-91df-7c244011d6fc";
918
919         SimulatorApi.registerExpectation(GET_SUBSCRIBERS_FOR_CUSTOMER_CRAIG_ROBERTS,
920             ImmutableMap.of(aServiceOwningEntityId, currentUserAuthorizedOwningEntityId), CLEAR_THEN_SET);
921
922         searchServicesAndAssertIsPermitted("subscriberId=" + craigRobertsSubscriberId, "4ea864f2-b946-473a-b51c-51a7c10b8391");
923     }
924
925     @Test
926     public void searchServiceInstancesByOwningEntity_serviceInstanceOfAnotherSubscriber_authIsFollowingFeatureToggle() {
927         String owningEntityName = "someOwning";
928         String owningEntityId = "SILVIA ROBBINS"; // this will need to change with translateOwningEntityNameToOwningEntityId
929
930         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetModelsByOwningEntity(owningEntityName, owningEntityId, "fakeSubscriberId"), CLEAR_THEN_SET);
931
932         searchServicesAndAssertIsPermitted("owningEntity=" + owningEntityName, "af9d52f9-13b2-4657-a198-463677f82dc0");
933     }
934
935     private void searchServicesAndAssertIsPermitted(String queryParams, String aServiceInstanceId) {
936         boolean expectedPermission = Features.FLAG_2006_USER_PERMISSIONS_BY_OWNING_ENTITY.isActive();
937
938         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), APPEND);
939
940         JsonNode serviceInstancesResult = restTemplate
941             .getForObject(uri + "/search_service_instances?" + queryParams, JsonNode.class);
942
943         assertThat(serviceInstancesResult.path("service-instances").isArray(), is(true));
944
945         ArrayNode servicesArray = ((ArrayNode) serviceInstancesResult.path("service-instances"));
946
947         JsonNode aServiceResult = Streams.fromIterator(servicesArray.iterator())
948             .filter(it -> it.path("serviceInstanceId").asText().equals(aServiceInstanceId))
949             .findAny()
950             .orElseThrow(() -> new AssertionError("could not find serviceInstanceId=" + aServiceInstanceId));
951
952         assertThat(aServiceResult.toString(),
953             aServiceResult.path("isPermitted").booleanValue(), is(expectedPermission));
954     }
955
956     private void assertResponse(Object expected, String response) {
957         assertResponse(Configuration.empty(), expected, response);
958     }
959
960     private void assertResponse(Configuration configuration, Object expected, String response) {
961         try {
962             JsonAssert.assertJsonEquals(expected, response, configuration);
963         } catch (Exception | AssertionError e) {
964             System.err.println("response was: " + response);
965             throw e;
966         }
967     }
968
969     @Test
970     public void getServiceInstanceBySubscriberAndServiceIdentifierAndSubscriberName_dsl_givenValidAaiResponse() {
971         SimulatorApi.clearAll();
972         String globalCustomerId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
973         String serviceIdentifier = "5d942bc7-3acf-4e35-836a-393619ebde66";
974         String serviceIdentifierType = "Service Instance Id";
975         String serviceType = "TYLER SILVIA";
976         SimulatorApi.registerExpectationFromPreset(new PresetAAIServiceInstanceDSLPut(
977             globalCustomerId,serviceIdentifier,serviceIdentifierType), CLEAR_THEN_SET);
978         SimulatorApi.registerExpectationFromPreset(new PresetAAIFilterServiceInstanceById(
979             globalCustomerId,serviceType,serviceIdentifier), APPEND);
980         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetServiceInstanceBySubscriberIdAndServiceTypeAndSIID(
981             globalCustomerId,serviceType,serviceIdentifier), APPEND);
982         final String response = restTemplate.getForObject(
983             uri + "/aai_get_service_instance_by_id_and_type"+ "/" + globalCustomerId + "/" + serviceIdentifier + "/" + serviceIdentifierType + "/Mobility" ,
984             String.class);
985         assertResponse(GET_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE, response);
986     }
987
988     @Test
989     public void getServiceInstanceBySubscriberAndServiceIdentifierWithoutSubscriberName_dsl_givenValidAaiResponse() {
990         SimulatorApi.clearAll();
991         String globalCustomerId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
992         String serviceIdentifier = "5d942bc7-3acf-4e35-836a-393619ebde66";
993         String serviceIdentifierType = "Service Instance Id";
994         String serviceType = "TYLER SILVIA";
995         SimulatorApi.registerExpectationFromPreset(new PresetAAIServiceInstanceDSLPut(
996             globalCustomerId,serviceIdentifier,serviceIdentifierType), CLEAR_THEN_SET);
997         SimulatorApi.registerExpectationFromPreset(new PresetAAIFilterServiceInstanceById(
998             globalCustomerId,serviceType,serviceIdentifier), APPEND);
999         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetServiceInstanceBySubscriberIdAndServiceTypeAndSIID(
1000             globalCustomerId,serviceType,serviceIdentifier), APPEND);
1001         final String response = restTemplate.getForObject(
1002             uri + "/aai_get_service_instance_by_id_and_type"+ "/" + globalCustomerId + "/" + serviceIdentifier + "/" + serviceIdentifierType ,
1003             String.class);
1004         assertResponse(GET_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE, response);
1005     }
1006
1007     @Test
1008     public void getServiceInstanceBySubscriberAndServiceIdentifierWithSubscriberName_dsl_givenValidAaiResponse() {
1009         SimulatorApi.clearAll();
1010         String globalCustomerId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
1011         String serviceIdentifier = "5d942bc7-3acf-4e35-836a-393619ebde66";
1012         String serviceIdentifierType = "Service Instance Id";
1013         String serviceType = "TYLER SILVIA";
1014         String subscriberName = "Mobility";
1015         SimulatorApi.registerExpectationFromPreset(new PresetAAIServiceInstanceDSLPut(
1016             globalCustomerId,serviceIdentifier,serviceIdentifierType), CLEAR_THEN_SET);
1017         SimulatorApi.registerExpectationFromPreset(new PresetAAIFilterServiceInstanceById(
1018             globalCustomerId,serviceType,serviceIdentifier), APPEND);
1019         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetServiceInstanceBySubscriberIdAndServiceTypeAndSIID(
1020             globalCustomerId,serviceType,serviceIdentifier), APPEND);
1021         final String response = restTemplate.getForObject(
1022             uri + "/aai_get_service_instance_by_id_and_type"+ "/" + globalCustomerId + "/" + serviceIdentifier + "/" + serviceIdentifierType + "/" + subscriberName ,
1023             String.class);
1024         assertResponse(GET_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE, response);
1025     }
1026
1027     @Test
1028     public void searchServiceInstanceByIdentifierType_id_dsl_givenValidAaiResponse() {
1029         SimulatorApi.clearAll();
1030         String globalCustomerId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
1031         String serviceInstanceIdentifier = "5d942bc7-3acf-4e35-836a-393619ebde66";
1032         String serviceInstanceIdentifierType = "Service Instance Id";
1033
1034         SimulatorApi.registerExpectationFromPreset(new PresetAAIServiceInstanceDSLPut(
1035             globalCustomerId,serviceInstanceIdentifier,serviceInstanceIdentifierType), CLEAR_THEN_SET);
1036         String path = "/search_service_instances?subscriberId="+globalCustomerId+
1037             "&serviceInstanceIdentifier="+serviceInstanceIdentifier+
1038             "&serviceInstanceIdentifierType="+serviceInstanceIdentifierType+"";
1039         final String response = restTemplate.getForObject( uri + path, String.class);
1040         assertResponse(GET_SEARCH_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE, response);
1041
1042     }
1043
1044     @Test
1045     public void searchServiceInstanceByIdentifierType_name_dsl_givenValidAaiResponse() {
1046         SimulatorApi.clearAll();
1047         String globalCustomerId = "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb";
1048         String serviceInstanceIdentifierType = "Service Instance Name";
1049         String serviceInstanceIdentifier = "dpa2actsf5001v_Port_Mirroring_dpa2a_SVC";
1050
1051         SimulatorApi.registerExpectationFromPreset(new PresetAAIServiceInstanceDSLPut(
1052             globalCustomerId,serviceInstanceIdentifier,serviceInstanceIdentifierType), CLEAR_THEN_SET);
1053         String path = "/search_service_instances?subscriberId="+globalCustomerId+
1054             "&serviceInstanceIdentifier="+serviceInstanceIdentifier+
1055             "&serviceInstanceIdentifierType="+serviceInstanceIdentifierType+"";
1056         final String response = restTemplate.getForObject( uri + path, String.class);
1057         assertResponse(GET_SEARCH_SERVICE_INSTANCE_BY_SUBSCRIBER_DSL_EXPECTED_RESPONSE, response);
1058     }
1059
1060 }