b7c6e0e4665fad80596e6b84d23f98952f3cc735
[vid.git] / vid-automation / src / test / java / org / onap / vid / api / AaiApiTest.java
1 package org.onap.vid.api;
2
3 import com.fasterxml.jackson.core.JsonProcessingException;
4 import com.google.common.collect.ImmutableList;
5 import com.google.common.collect.ImmutableMap;
6 import com.google.common.collect.ImmutableMultimap;
7 import net.javacrumbs.jsonunit.JsonAssert;
8 import net.javacrumbs.jsonunit.core.Configuration;
9 import net.javacrumbs.jsonunit.core.Option;
10 import org.apache.commons.text.StringEscapeUtils;
11 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
12 import org.onap.simulator.presetGenerator.presets.aai.*;
13 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
14 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
15 import org.onap.vid.model.aai.AaiResponse;
16 import org.onap.vid.model.mso.OperationalEnvironmentList;
17 import org.onap.vid.more.LoggerFormatTest;
18 import org.springframework.core.ParameterizedTypeReference;
19 import org.springframework.http.HttpMethod;
20 import org.springframework.http.HttpStatus;
21 import org.springframework.http.ResponseEntity;
22 import org.springframework.web.client.HttpClientErrorException;
23 import org.springframework.web.client.HttpServerErrorException;
24 import org.springframework.web.util.UriComponentsBuilder;
25 import org.testng.annotations.DataProvider;
26 import org.testng.annotations.Test;
27 import vid.automation.test.infra.FeatureTogglingTest;
28 import vid.automation.test.infra.Features;
29 import vid.automation.test.services.SimulatorApi;
30 import vid.automation.test.utils.TestHelper;
31
32 import java.io.IOException;
33 import java.lang.reflect.Method;
34 import java.net.URISyntaxException;
35 import java.util.List;
36 import java.util.UUID;
37
38 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
39 import static org.hamcrest.CoreMatchers.containsString;
40 import static org.hamcrest.MatcherAssert.assertThat;
41 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.*;
42 import static org.onap.simulator.presetGenerator.presets.ecompportal_att.EcompPortalPresetsUtils.getEcompPortalPresets;
43 import static org.testng.Assert.assertNotNull;
44 import static org.testng.Assert.assertTrue;
45 import static org.testng.AssertJUnit.assertEquals;
46 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.APPEND;
47 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
48 import static vid.automation.test.utils.TestHelper.GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS;
49
50 public class AaiApiTest extends BaseApiAaiTest {
51
52     private static final String AAI_HOMING_DATA_RESPONSE = "viewEdit/aaiHomingDataResponse.json";
53     public static final String GET_OPERATIONAL_ENVIRONMENTS_JSON = "get_operational_environments_aai.json";
54     public static final String GET_OPERATIONAL_ENVIRONMENTS_JSON_ERROR = "get_operational_environments_aai_error.json";
55     public static final String[] AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES = {"getServicesAaiErrorResp.json", "create_new_instance/aai_get_full_subscribers.json"};
56     public static final String[] AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES = {"getServicesAaiFineResp.json", "create_new_instance/aai_get_full_subscribers.json"};
57     public static final String AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON = "changeManagement/get_vnf_data_by_globalid_and_service_type.json";
58     public static final String OPERATIONAL_ENVIRONMENT_TYPE = "VNF";
59     public static final String OPERATIONAL_ENVIRONMENT_STATUS = "Activate";
60     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";
61     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";
62     public static final String GET_AAI_SERVIES_EXPECTED_RESULT = "{\n" +
63             "  \"services\": [{\n" +
64             "    \"uuid\": \"20c4431c-246d-11e7-93ae-92361f002671\",\n" +
65             "    \"invariantUUID\": \"78ca26d0-246d-11e7-93ae-92361f002671\",\n" +
66             "    \"name\": \"vSAMP10aDEV::base::module-0\",\n" +
67             "    \"version\": \"2\",\n" +
68             "    \"toscaModelURL\": null,\n" +
69             "    \"category\": \"resource\",\n" +
70             "    \"lifecycleState\": null,\n" +
71             "    \"lastUpdaterUserId\": null,\n" +
72             "    \"lastUpdaterFullName\": null,\n" +
73             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
74             "    \"artifacts\": null,\n" +
75             "    \"resources\": null\n" +
76             "  }, {\n" +
77             "    \"uuid\": \"797a6c41-0f80-4d35-a288-3920c4e06baa\",\n" +
78             "    \"invariantUUID\": \"5b607929-6088-4614-97ef-cac817508e0e\",\n" +
79             "    \"name\": \"CONTRAIL30_L2NODHCP\",\n" +
80             "    \"version\": \"1.0\",\n" +
81             "    \"toscaModelURL\": null,\n" +
82             "    \"category\": \"resource\",\n" +
83             "    \"lifecycleState\": null,\n" +
84             "    \"lastUpdaterUserId\": null,\n" +
85             "    \"lastUpdaterFullName\": null,\n" +
86             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_ERROR\",\n" +
87             "    \"artifacts\": null,\n" +
88             "    \"resources\": null\n" +
89             "  }, {\n" +
90             "    \"uuid\": \"f1bde010-cc5f-4765-941f-75f15b24f9fc\",\n" +
91             "    \"invariantUUID\": \"0143d57b-a517-4de9-a0a1-eb76db51f402\",\n" +
92             "    \"name\": \"BkVmxAv061917..base_vPE_AV..module-0\",\n" +
93             "    \"version\": \"2\",\n" +
94             "    \"toscaModelURL\": null,\n" +
95             "    \"category\": \"resource\",\n" +
96             "    \"lifecycleState\": null,\n" +
97             "    \"lastUpdaterUserId\": null,\n" +
98             "    \"lastUpdaterFullName\": null,\n" +
99             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
100             "    \"artifacts\": null,\n" +
101             "    \"resources\": null\n" +
102             "  }, {\n" +
103             "    \"uuid\": \"ipe-resource-id-ps-02\",\n" +
104             "    \"invariantUUID\": \"ipe-resource-id-ps-02\",\n" +
105             "    \"name\": \"abc\",\n" +
106             "    \"version\": \"v1.0\",\n" +
107             "    \"toscaModelURL\": null,\n" +
108             "    \"category\": \"resource\",\n" +
109             "    \"lifecycleState\": null,\n" +
110             "    \"lastUpdaterUserId\": null,\n" +
111             "    \"lastUpdaterFullName\": null,\n" +
112             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
113             "    \"artifacts\": null,\n" +
114             "    \"resources\": null\n" +
115             "  }, {\n" +
116             "    \"uuid\": \"lmoser410-connector-model-version-id\",\n" +
117             "    \"invariantUUID\": \"lmoser410-connector-model-id\",\n" +
118             "    \"name\": \"connector\",\n" +
119             "    \"version\": \"v1.0\",\n" +
120             "    \"toscaModelURL\": null,\n" +
121             "    \"category\": \"widget\",\n" +
122             "    \"lifecycleState\": null,\n" +
123             "    \"lastUpdaterUserId\": null,\n" +
124             "    \"lastUpdaterFullName\": null,\n" +
125             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
126             "    \"artifacts\": null,\n" +
127             "    \"resources\": null\n" +
128             "  }, {\n" +
129             "    \"uuid\": \"ff2ae348-214a-11e7-93ae-92361f002673\",\n" +
130             "    \"invariantUUID\": \"3a97db99-c4bb-498a-a13a-38f65f1ced3d\",\n" +
131             "    \"name\": \"vSAMP10aDEV::base::module-0\",\n" +
132             "    \"version\": \"1.0\",\n" +
133             "    \"toscaModelURL\": null,\n" +
134             "    \"category\": \"resource\",\n" +
135             "    \"lifecycleState\": null,\n" +
136             "    \"lastUpdaterUserId\": null,\n" +
137             "    \"lastUpdaterFullName\": null,\n" +
138             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
139             "    \"artifacts\": null,\n" +
140             "    \"resources\": null\n" +
141             "  }, {\n" +
142             "    \"uuid\": \"204c641a-3494-48c8-979a-86856f5fd32a\",\n" +
143             "    \"invariantUUID\": \"3c504d40-b847-424c-9d25-4fb7e0a3e994\",\n" +
144             "    \"name\": \"named-query-element\",\n" +
145             "    \"version\": \"1.0\",\n" +
146             "    \"toscaModelURL\": null,\n" +
147             "    \"category\": \"widget\",\n" +
148             "    \"lifecycleState\": null,\n" +
149             "    \"lastUpdaterUserId\": null,\n" +
150             "    \"lastUpdaterFullName\": null,\n" +
151             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
152             "    \"artifacts\": null,\n" +
153             "    \"resources\": null\n" +
154             "  }, {\n" +
155             "    \"uuid\": \"acba1f72-c6e0-477f-9426-ad190151e100\",\n" +
156             "    \"invariantUUID\": \"93e56950-cb19-44e6-ace4-8b50f2d02e45\",\n" +
157             "    \"name\": \"RG_6-19_Test\",\n" +
158             "    \"version\": \"1.0\",\n" +
159             "    \"toscaModelURL\": null,\n" +
160             "    \"category\": \"resource\",\n" +
161             "    \"lifecycleState\": null,\n" +
162             "    \"lastUpdaterUserId\": null,\n" +
163             "    \"lastUpdaterFullName\": null,\n" +
164             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
165             "    \"artifacts\": null,\n" +
166             "    \"resources\": null\n" +
167             "  }, {\n" +
168             "    \"uuid\": \"fc65e5e7-45c7-488a-b36d-f453ab3057fe\",\n" +
169             "    \"invariantUUID\": \"ee448504-ceee-47db-8e1b-742115f219db\",\n" +
170             "    \"name\": \"ciServicea268facd387e\",\n" +
171             "    \"version\": \"1.0\",\n" +
172             "    \"toscaModelURL\": null,\n" +
173             "    \"category\": \"service\",\n" +
174             "    \"lifecycleState\": null,\n" +
175             "    \"lastUpdaterUserId\": null,\n" +
176             "    \"lastUpdaterFullName\": null,\n" +
177             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
178             "    \"artifacts\": null,\n" +
179             "    \"resources\": null\n" +
180             "  }, {\n" +
181             "    \"uuid\": \"027948b6-25e2-4e39-b87d-d9f5797941de\",\n" +
182             "    \"invariantUUID\": \"56f2d0d3-7943-4159-bf01-b82692ec035e\",\n" +
183             "    \"name\": \"service_sanity_amir\",\n" +
184             "    \"version\": \"2.0\",\n" +
185             "    \"toscaModelURL\": null,\n" +
186             "    \"category\": \"service\",\n" +
187             "    \"lifecycleState\": null,\n" +
188             "    \"lastUpdaterUserId\": null,\n" +
189             "    \"lastUpdaterFullName\": null,\n" +
190             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
191             "    \"artifacts\": null,\n" +
192             "    \"resources\": null\n" +
193             "  }, {\n" +
194             "    \"uuid\": \"fbf96e3b-1804-4c89-bf5b-53acb7f2edc0\",\n" +
195             "    \"invariantUUID\": \"56f2d0d3-7943-4159-bf01-b82692ec035e\",\n" +
196             "    \"name\": \"service_sanity_amir\",\n" +
197             "    \"version\": \"3.0\",\n" +
198             "    \"toscaModelURL\": null,\n" +
199             "    \"category\": \"service\",\n" +
200             "    \"lifecycleState\": null,\n" +
201             "    \"lastUpdaterUserId\": null,\n" +
202             "    \"lastUpdaterFullName\": null,\n" +
203             "    \"distributionStatus\": \"DISTRIBUTION_COMPLETE_OK\",\n" +
204             "    \"artifacts\": null,\n" +
205             "    \"resources\": null\n" +
206             "  }],\n" +
207             "  \"readOnly\": false\n" +
208             "}";
209     private static final String AAI_GET_ACTIVE_NETWORKS = "/aai_get_active_networks";
210
211     private String getGetOperationEnvironmentsUri() {
212         return uri.toASCIIString() + "/get_operational_environments";
213     }
214
215     private String getAaiServicesUri() {
216         return uri.toASCIIString() + "/rest/models/services";
217     }
218
219     private String getGetOperationEnvironmentUriWithParameters() {
220         String url = getGetOperationEnvironmentsUri();
221         UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url)
222                 // Add query parameter
223                 .queryParam("operationalEnvironmentStatus", OPERATIONAL_ENVIRONMENT_STATUS)
224                 .queryParam("operationalEnvironmentType", OPERATIONAL_ENVIRONMENT_TYPE);
225
226         String urlWithParameters = builder.toUriString();
227         return urlWithParameters;
228
229     }
230
231     private AaiResponse<OperationalEnvironmentList> loginAndDoGetWithUrl(String url) {
232         ResponseEntity<AaiResponse<OperationalEnvironmentList>> responseEntity = restTemplate.exchange(
233                 url,
234                 HttpMethod.GET,
235                 null,
236                 new ParameterizedTypeReference<AaiResponse<OperationalEnvironmentList>>() {});
237         AaiResponse<OperationalEnvironmentList> response = responseEntity.getBody();
238         return response;
239     }
240
241     @Test
242     public void testErrorGetOperationalEnvironments() {
243         //Register required response
244         SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENTS_JSON_ERROR, APPEND);
245         String url = getGetOperationEnvironmentsUri();
246         AaiResponse<OperationalEnvironmentList> response = loginAndDoGetWithUrl(url);
247         assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), response.getHttpCode());
248         assertEquals("simulated error text", response.getErrorMessage());
249
250
251     }
252
253     //This test requires a simulator which runs on VID
254     @Test
255     public void testSuccessGetOperationalEnvironments() {
256         //Register required response
257         String uuidOfOperationalEnvironment = "f07ca256-96dd-40ad-b4d2-7a77e2a974ed";
258         SimulatorApi.registerExpectation(GET_OPERATIONAL_ENVIRONMENTS_JSON, ImmutableMap.of("UUID_of_Operational_Environment", uuidOfOperationalEnvironment), APPEND);
259         String url = getGetOperationEnvironmentUriWithParameters();
260         AaiResponse<OperationalEnvironmentList> response = loginAndDoGetWithUrl(url);
261         assertEquals(HttpStatus.OK.value(), response.getHttpCode());
262         OperationalEnvironmentList list = response.getT();
263         assertNotNull(list.getOperationalEnvironment());
264         assertEquals(2, list.getOperationalEnvironment().size());
265         assertEquals(uuidOfOperationalEnvironment, list.getOperationalEnvironment().get(0).getOperationalEnvironmentId());
266         assertEquals(1, list.getOperationalEnvironment().get(0).getRelationshipList().getRelationship().size());
267     }
268
269     @Test(dataProvider = "errorCodes")
270     public void getServicesWitErrorResponse(int errorCode) throws IOException, URISyntaxException {
271         TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
272         final String expectedResult = "{\"services\":[],\"readOnly\":false}";
273
274         callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_ERROR_SIMULATOR_RESPONSES,
275                 ImmutableMap.of("500", Integer.toString(errorCode), "ERROR_PAYLOAD", StringEscapeUtils.escapeJson(expectedResult)),
276                 getAaiServicesUri(), "", 200, expectedResult, HttpMethod.GET);
277
278     }
279
280     @Test
281     public void getServicesFineRequest() throws IOException, URISyntaxException {
282         TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
283         callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES,
284                 ImmutableMap.of(),
285                 getAaiServicesUri(), "", 200, GET_AAI_SERVIES_EXPECTED_RESULT, HttpMethod.GET);
286     }
287
288     @Test
289     public void whenGetServicesErrorResponse_badResponseIsNotCached() throws IOException, URISyntaxException {
290         TestHelper.resetAaiCache(GET_SERVICE_MODELS_BY_DISTRIBUTION_STATUS, restTemplate, uri);
291
292
293         final String expectedErrorResult = "{\"services\":[],\"readOnly\":false}";
294         //call AAI with bad response by clear exceptions from simulator, bad response shall not be cached
295         callAaiWithSimulatedErrorResponse(new String[]{}, ImmutableMap.of(), getAaiServicesUri(), "", 200, expectedErrorResult, HttpMethod.GET);
296
297         //call AAI with fine response
298         callAaiWithSimulatedErrorResponse(AAI_GET_SERVICES_FINE_SIMULATOR_RESPONSES,
299                 ImmutableMap.of(),
300                 getAaiServicesUri(), "", 200, GET_AAI_SERVIES_EXPECTED_RESULT, HttpMethod.GET);
301     }
302
303     @DataProvider
304     public static Object[][] errorCodes(Method test) {
305         return new Object[][]{
306                 {500},{505}, {400}, {401}, {405}
307         };
308     }
309
310     @Test
311     public void whenThrowExceptionInsAaiResponseErrorAreLogged() {
312         String notAJson = "not a json";
313         SimulatorApi.registerExpectationFromPreset(new PresetAAIBadBodyForGetServicesGet(notAJson), CLEAR_THEN_SET);
314         SimulatorApi.registerExpectationFromPresets(getEcompPortalPresets(), APPEND);
315         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), APPEND);
316
317         restTemplateErrorAgnostic.getForEntity(uri + "/aai_get_services", String.class);
318         String logLines = LoggerFormatTest.getLogLines("error", 15, 0, restTemplate, uri);
319
320         assertThat("not found in error log", logLines, containsString("Failed to parse aai response"));
321         assertThat("not found in error log", logLines, containsString(notAJson));
322         assertThat("not found in error log", logLines, containsString("GetServicesAAIRespone"));
323
324     }
325
326     @Test
327     public void portMirroringConfigData_givenValidAaiResponse_yieldCloudRegionId() {
328         SimulatorApi.registerExpectationFromPreset(new PresetAAICloudRegionAndSourceFromConfigurationPut("SOME-RANDOM-UUID", "THE-EXPECTED-REGION-ID"), CLEAR_THEN_SET);
329
330         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID", String.class);
331
332         final ImmutableMap<String, ImmutableMap<String, String>> expected = ImmutableMap.of(
333                 "SOME-RANDOM-UUID", ImmutableMap.of(
334                         "cloudRegionId", "THE-EXPECTED-REGION-ID"
335                 ));
336
337         assertResponse(expected, response);
338
339         /*
340         More tests:
341         [ ]  Error responses from AAI (404 etc): descriptive error response, including what tried and what happened
342         [ ]  malformed response from AAI: descriptive error response, including the payload
343         [ ]  empty/missing value for configurationId: client-error http code
344          */
345     }
346
347
348     @Test
349     public void portMirroringSourcePorts_validAAIResponseWithSinglePort_yieldCorrectPortData() {
350         SimulatorApi.registerExpectationFromPreset(
351                 new PresetAAIGetPortMirroringSourcePorts("CONFIGURATION-ID", "INTERFACE-ID", "INTERFACE-NAME", true),
352                 CLEAR_THEN_SET
353         );
354
355         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringSourcePorts?configurationIds=" + "CONFIGURATION-ID", String.class);
356
357         final ImmutableMap<String, ImmutableList> expected = ImmutableMap.of(
358                 "CONFIGURATION-ID", ImmutableList.of(ImmutableMap.of(
359                         "interfaceId", "INTERFACE-ID", "interfaceName", "INTERFACE-NAME", "isPortMirrored", true
360                 )));
361
362         assertResponse(expected, response);
363     }
364
365     @Test
366     public void portMirroringSourcePorts_nullValueForInterfaceId_yield200OkWithFineDescription() {
367         final PresetAAIGetPortMirroringSourcePorts preset = new PresetAAIGetPortMirroringSourcePorts("CONFIGURATION-ID", null, "INTERFACE-NAME", true);
368         SimulatorApi.registerExpectationFromPreset(
369                 preset,
370                 CLEAR_THEN_SET
371         );
372
373         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringSourcePorts?configurationIds=" + "CONFIGURATION-ID", String.class);
374
375         final ImmutableMap<String, ImmutableList<ImmutableMap>> expected = ImmutableMap.of(
376                 "CONFIGURATION-ID", ImmutableList.of(ImmutableMap.of(
377                         "errorDescription", "Value of 'interface-id' is missing.",
378                         "rawAaiResponse", preset.getResponseBody().toString()
379                 )));
380
381         assertResponse(expected, response);
382     }
383
384     @Test
385     public void portMirroringSourcePorts_given503ErrorAaiResponse_yield200OkWithErrorMsg() {
386         final PresetAAIGetPortMirroringSourcePortsError preset = new PresetAAIGetPortMirroringSourcePortsError("CONFIGURATION-ID", "INTERFACE-ID", "INTERFACE-NAME", true);
387         SimulatorApi.registerExpectationFromPreset(
388                 preset,
389                 CLEAR_THEN_SET
390         );
391
392         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringSourcePorts?configurationIds=" + "CONFIGURATION-ID", String.class);
393
394         final ImmutableMap<String, ImmutableList<ImmutableMap>> expected = ImmutableMap.of(
395                 "CONFIGURATION-ID", ImmutableList.of(ImmutableMap.of(
396                         "errorDescription", "Got 503 from aai",
397                         "rawAaiResponse", preset.getResponseBody()
398                 )));
399
400         assertResponse(expected, response);
401     }
402
403     @Test
404     public void portMirroringConfigData_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
405         SimulatorApi.clearAll();
406
407         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID", String.class);
408
409         final ImmutableMap<String, ImmutableMap<String, String>> expected = ImmutableMap.of(
410                 "SOME-RANDOM-UUID", ImmutableMap.of(
411                         "errorDescription", "Got 404 from aai",
412                         "rawAaiResponse", ""
413                 ));
414
415         assertResponse(expected, response);
416     }
417
418     @Test
419     public void getNetworkCollectionDetailsByServiceInstanceId_yieldValidResponse() {
420         SimulatorApi.clearAll();
421         final PresetAAIGetNetworkCollectionDetails presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetails("SOME-RANDOM-UUID");
422         SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
423         final String response = restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
424
425         assertResponse(GET_NETWORK_COLLECTION_EXPECTED_RESPONSE, response);
426     }
427
428     @Test
429     public void getNetworkCollectionDetailsByServiceInstanceId_responseWithExtraFields_yieldValidResponse() {
430         SimulatorApi.clearAll();
431         final PresetAAIGetNetworkCollectionDetailsInvalidRequest presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetailsInvalidRequest("SOME-RANDOM-UUID");
432         SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
433         final String response = restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
434
435         assertResponse(GET_NETWORK_COLLECTION_EXPECTED_RESPONSE, response);
436     }
437
438     @Test
439     public void getNetworkCollectionDetailsByServiceInstanceId_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
440         SimulatorApi.clearAll();
441         try {
442             restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
443         } catch (HttpClientErrorException e) {
444             assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
445         }
446     }
447
448     @Test
449     public void getNetworkCollectionDetailsByServiceInstanceId_responseWithRequiredMissing() {
450         SimulatorApi.clearAll();
451         final PresetAAIGetNetworkCollectionDetailsRequiredMissing presetAAIGetNetworkCollectionDetails = new PresetAAIGetNetworkCollectionDetailsRequiredMissing("SOME-RANDOM-UUID");
452         SimulatorApi.registerExpectationFromPreset(presetAAIGetNetworkCollectionDetails, CLEAR_THEN_SET);
453         try {
454             restTemplate.getForObject(uri + "/aai_get_network_collection_details/" + "SOME-RANDOM-UUID", String.class);
455         } catch (HttpServerErrorException e) {
456             assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
457         }
458     }
459
460     @Test
461     public void getGetInstanceGroupsByCloudRegion_yieldValidResponse() {
462         SimulatorApi.clearAll();
463         final PresetAAIGetInstanceGroupsByCloudRegion presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegion("CLOUD%20OWNER", "CLOUD-REGION-ID", "NETWORK%20FUNCTION");
464         SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
465         final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK FUNCTION", String.class);
466
467         assertResponse(GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE, response);
468     }
469
470     @Test
471     public void getGetInstanceGroupsByCloudRegion_responseWithExtraFields_yieldValidResponse() {
472         SimulatorApi.clearAll();
473         final PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegionInvalidRequest("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
474         SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
475         final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
476
477         assertResponse(GET_INSTANCE_GROUPS_BY_CLOUDREGION_EXPECTED_RESPONSE, response);
478     }
479
480     @Test
481     public void getGetInstanceGroupsByCloudRegion_given404ErrorAaiResponse_yield200OkWithErrorMsg() {
482         SimulatorApi.clearAll();
483         try {
484             restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
485         } catch (HttpClientErrorException e) {
486             assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
487         }
488     }
489
490     @Test
491     public void getGetInstanceGroupsByCloudRegion_responseWithRequiredMissing() {
492         SimulatorApi.clearAll();
493         final PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing presetAAIGetInstanceGroupsByCloudRegion = new PresetAAIGetInstanceGroupsByCloudRegionRequiredMissing("CLOUD-OWNER", "CLOUD-REGION-ID", "NETWORK-FUNCTION");
494         SimulatorApi.registerExpectationFromPreset(presetAAIGetInstanceGroupsByCloudRegion, CLEAR_THEN_SET);
495         try {
496             restTemplate.getForObject(uri + "/aai_get_instance_groups_by_cloudregion/" + "CLOUD-OWNER" + "/" + "CLOUD-REGION-ID" + "/" + "NETWORK-FUNCTION", String.class);
497         } catch (HttpServerErrorException e) {
498             assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, e.getStatusCode());
499         }
500     }
501
502     @Test
503     public void portMirroringConfigData_emptyIdOnAaiResponse_yieldError() {
504         final PresetAAICloudRegionAndSourceFromConfigurationPut presetAAIResponseWitnProblem = new PresetAAICloudRegionAndSourceFromConfigurationPut("SOME-RANDOM-UUID", "");
505         SimulatorApi.registerExpectationFromPreset(presetAAIResponseWitnProblem, CLEAR_THEN_SET);
506
507         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID", String.class);
508
509         final ImmutableMap<String, ImmutableMap<String, String>> expected = ImmutableMap.of(
510                 "SOME-RANDOM-UUID", ImmutableMap.of(
511                         "errorDescription", "Node 'properties.cloud-region-id' of node-type 'cloud-region' is blank",
512                         "rawAaiResponse", presetAAIResponseWitnProblem.getResponseBody().toString().replace(" ", "")
513                 ));
514
515         assertResponse(expected, response);
516     }
517
518     @Test
519     public void getGetRelatedInstanceGroupsByVnfId__yieldValidResponse() {
520         String vnfId = "some_vnf_id";
521         final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId(vnfId);
522         SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, CLEAR_THEN_SET);
523
524         final String response = restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + vnfId,
525                 String.class);
526
527         assertResponse("[{\"type\":\"instance-group\",\"name\":\"instance group name\"},{\"type\":\"instance-group\",\"name\":\"instance group name\"}]", response);
528     }
529
530     @Test
531     public void getHomingDataForVfModule(){
532         String vnfId= "0846287b-65bf-45a6-88f6-6a1af4149fac", vfModuleId= "a9b70ac0-5917-4203-a308-0e6920e6d09b";
533         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetHomingForVfModule(vnfId,vfModuleId), CLEAR_THEN_SET);
534         final String response = restTemplate.getForObject(uri + "/aai_get_homing_by_vfmodule/"+ vnfId +"/"+vfModuleId, String.class);
535         String exectedResponse = TestUtils.convertRequest(objectMapper, AAI_HOMING_DATA_RESPONSE);
536         assertResponse(exectedResponse,response);
537     }
538
539     @Test
540     public void getGetRelatedInstanceGroupsByVnfId__yield404NotFound() {
541         final PresetAAIGetRelatedInstanceGroupsByVnfId getRelatedInstanceGroupsByVnfId = new PresetAAIGetRelatedInstanceGroupsByVnfId("abcd");
542         SimulatorApi.registerExpectationFromPreset(getRelatedInstanceGroupsByVnfId, CLEAR_THEN_SET);
543         try {
544             restTemplate.getForObject(uri + "/aai_get_instance_groups_by_vnf_instance_id/" + "dcba", String.class);
545         } catch (HttpClientErrorException e) {
546             assertEquals(HttpStatus.NOT_FOUND, e.getStatusCode());
547         }
548
549     }
550
551     @Test
552     public void portMirroringConfigData_twoResponsesOneValidAndOneInvalid_yieldBothErrorAndOk() {
553         final PresetAAICloudRegionAndSourceFromConfigurationPut presetAAIResponseWitnProblem = new PresetAAICloudRegionAndSourceFromConfigurationPut("ANOTHER-RANDOM-UUID", "");
554         SimulatorApi.registerExpectationFromPreset(presetAAIResponseWitnProblem, CLEAR_THEN_SET);
555         SimulatorApi.registerExpectationFromPreset(new PresetAAICloudRegionAndSourceFromConfigurationPut("SOME-RANDOM-UUID", "THE-EXPECTED-REGION-ID"), APPEND);
556
557         final String response = restTemplate.getForObject(uri + "/aai_getPortMirroringConfigsData?configurationIds=" + "SOME-RANDOM-UUID,ANOTHER-RANDOM-UUID", String.class);
558
559         final ImmutableMap<String, ImmutableMap<String, Object>> expected = ImmutableMap.of(
560                 "SOME-RANDOM-UUID", ImmutableMap.of(
561                         "cloudRegionId", "THE-EXPECTED-REGION-ID"
562                 ),
563                 "ANOTHER-RANDOM-UUID", ImmutableMap.of(
564                         "errorDescription", "Node 'properties.cloud-region-id' of node-type 'cloud-region' is blank",
565                         "rawAaiResponse", presetAAIResponseWitnProblem.getResponseBody().toString().replace(" ", "")
566                 ));
567
568         assertResponse(expected, response);
569     }
570
571     @Test
572     @FeatureTogglingTest(Features.FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS)
573     public void networksToVlans_simpleRequest_responseIsCorrect() {
574         // Prepare randomized values
575         // Some of these random values are persisted to match with the
576         // cypress preset "aaiGetNetworksToVlansByServiceInstance.json".
577         String globalCustomerId = UUID.randomUUID().toString();
578         String sdcModelUuid = "5a3ad576-c01d-4bed-8194-0e72b4a3d020";
579         String serviceType = "vMOG";
580         int vlanIdOuter = 34612;
581         int vlanIdOuter2 = 8568012;
582         int vlanIdOuter3 = 4;
583
584         // build hierarchical presets:
585         //
586         //     service instance
587         //               ║
588         //               ╠═  network 1
589         //               ║      ╠═  vlan 1
590         //               ║      ╚═  vlan 2
591         //               ║
592         //               ╠═  network 2
593         //               ║      ╚═  vlan 3
594         //               ║
595         PresetAAIStandardQueryGet vlanTagPreset1 = ofVlanTag(vlanIdOuter);
596         PresetAAIStandardQueryGet vlanTagPreset2 = ofVlanTag(vlanIdOuter2);
597         PresetAAIStandardQueryGet vlanTagPreset3 = ofVlanTag(vlanIdOuter3);
598
599         PresetAAIStandardQueryGet l3NetworkPreset1 = ofL3Network("7989a6d2-ba10-4a5d-8f15-4520bc833090", "DDDEEEFFF", "Provider Network",
600                 ImmutableMultimap.of("vlan-tag", vlanTagPreset1.getReqPath(), "vlan-tag", vlanTagPreset2.getReqPath()), "Failed");
601         PresetAAIStandardQueryGet l3NetworkPreset2 = ofL3Network("e8e2332e-1f84-4237-bc97-3b5b842f52e4","GGGHHHIII", "Network",
602                 ImmutableMultimap.of("vlan-tag", vlanTagPreset3.getReqPath()), "Assigned");
603
604         PresetAAIStandardQueryGet serviceInstance = ofServiceInstance("9cdd1b2a-43a7-47bc-a88e-759ba2399f0b",
605                 "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", globalCustomerId, serviceType,
606                 ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath(), "l3-network", l3NetworkPreset2.getReqPath()));
607
608         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
609                 serviceInstance, l3NetworkPreset1, l3NetworkPreset2, vlanTagPreset1, vlanTagPreset2, vlanTagPreset3,
610                 new PresetSDCGetServiceMetadataGet(sdcModelUuid, UUID.randomUUID().toString(), "service-vl-with-5g-network-provider-alacarte.zip"),
611                 new PresetSDCGetServiceToscaModelGet(sdcModelUuid, "service-vl-with-5g-network-provider-alacarte.zip")
612         ), CLEAR_THEN_SET);
613
614         // THE TEST
615         final String response = restTemplate.getForObject(uri + "/aai/standardQuery/vlansByNetworks"
616                         + "?serviceInstanceId=" + serviceInstance.getInstanceId()
617                         + "&serviceType=" + serviceType
618                         + "&globalCustomerId=" + globalCustomerId
619                         + "&sdcModelUuid=" + sdcModelUuid
620                 , String.class);
621
622         assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
623                 getResourceAsString("serviceWithNetwork/aaiGetNetworksToVlansByServiceInstance.json"),
624                 response);
625     }
626
627     @Test
628     @FeatureTogglingTest(Features.FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS)
629     public void networksWithVlansToVnf_simpleRequest_responseIsCorrect() {
630         // Prepare randomized values
631         // Some of these random values are persisted to match with the
632         // cypress preset "aaiGetNetworksWithVlansToVnfByServiceInstance.json".
633         String globalCustomerId = UUID.randomUUID().toString();
634         String sdcModelUuid = "5a3ad576-c01d-4bed-8194-0e72b4a3d020";
635         String serviceType = "vMOG";
636         int vlanIdOuter = 34123;
637         int vlanIdOuter2 = 65540;
638         int vlanIdOuter3 = 12345;
639         int vlanIdOuter4 = 67890;
640         int vlanIdOuter5 = 417695;
641         int vlanIdOuter6 = 783243;
642
643         // build hierarchical presets:
644         //
645         //     service instance
646         //               ║
647         //               ╠═  vnf 1
648         //               ║    ╚═  network 1
649         //               ║          ╠═  vlan 1
650         //               ║          ╚═  vlan 2
651         //               ║    ╚═  network 2
652         //               ║          ╠═  vlan 3
653         //               ║          ╚═  vlan 4
654         //               ║
655         //               ╠═  vnf 2
656         //               ║    ╚═  network 3
657         //               ║          ╠═  vlan 5
658         //               ║          ╚═  vlan 6
659         //               ║
660         PresetAAIStandardQueryGet vlanTagPreset1 = ofVlanTag(vlanIdOuter);
661         PresetAAIStandardQueryGet vlanTagPreset2 = ofVlanTag(vlanIdOuter2);
662         PresetAAIStandardQueryGet vlanTagPreset3 = ofVlanTag(vlanIdOuter3);
663         PresetAAIStandardQueryGet vlanTagPreset4 = ofVlanTag(vlanIdOuter4);
664         PresetAAIStandardQueryGet vlanTagPreset5 = ofVlanTag(vlanIdOuter5);
665         PresetAAIStandardQueryGet vlanTagPreset6 = ofVlanTag(vlanIdOuter6);
666
667         PresetAAIStandardQueryGet l3NetworkPreset1 = ofL3Network("36517f3d-2bc2-48f5-aaf8-418520c54330","AAAAABBBBCCCC", "Provider Network",
668                 ImmutableMultimap.of("vlan-tag", vlanTagPreset1.getReqPath(), "vlan-tag", vlanTagPreset2.getReqPath()), "Assigned");
669
670         PresetAAIStandardQueryGet l3NetworkPreset2 = ofL3Network("12347f3d-2bc2-48f5-aaf8-418520c54330","DDDEEEE", "Provider Network",
671                 ImmutableMultimap.of("vlan-tag", vlanTagPreset3.getReqPath(), "vlan-tag", vlanTagPreset4.getReqPath()), "Created");
672
673         PresetAAIStandardQueryGet vnfPreset1 = ofVnf("c015cc0f-0f37-4488-aabf-53795fd93cd3",
674                 ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath() , "l3-network", l3NetworkPreset2.getReqPath()),
675                 defaultPlacement());
676
677         PresetAAIStandardQueryGet l3NetworkPreset3 = ofL3Network("12aa7f3d-2bc2-48f5-aaf8-418520c54330","XXXYYYZZZ", "Network",
678                 ImmutableMultimap.of("vlan-tag", vlanTagPreset5.getReqPath(), "vlan-tag", vlanTagPreset6.getReqPath()), "Created");
679
680         PresetAAIStandardQueryGet vnfPreset2 = ofVnf("c55da606-cf38-42c7-bc3c-be8e23b19299", ImmutableMultimap.of("l3-network", l3NetworkPreset3.getReqPath()),
681                 defaultPlacement());
682
683         PresetAAIStandardQueryGet serviceInstance = ofServiceInstance("9cdd1b2a-43a7-47bc-a88e-759ba2399f0b",
684                 "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", globalCustomerId, serviceType,
685                 ImmutableMultimap.of("generic-vnf", vnfPreset1.getReqPath(), "generic-vnf", vnfPreset2.getReqPath()));
686
687         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
688                 serviceInstance, vnfPreset1, vnfPreset2, l3NetworkPreset1, l3NetworkPreset2, l3NetworkPreset3, vlanTagPreset1, vlanTagPreset2, vlanTagPreset3, vlanTagPreset4, vlanTagPreset5, vlanTagPreset6,
689                 new PresetSDCGetServiceMetadataGet(sdcModelUuid, UUID.randomUUID().toString(), "service-vl-with-5g-network-provider-alacarte.zip"),
690                 new PresetSDCGetServiceToscaModelGet(sdcModelUuid, "service-vl-with-5g-network-provider-alacarte.zip")
691         ), CLEAR_THEN_SET);
692
693         // THE TEST
694         final String response = restTemplate.getForObject(uri + "/aai/standardQuery/vlansByNetworks"
695                         + "?serviceInstanceId=" + serviceInstance.getInstanceId()
696                         + "&serviceType=" + serviceType
697                         + "&globalCustomerId=" + globalCustomerId
698                         + "&sdcModelUuid=" + sdcModelUuid
699                 , String.class);
700
701         assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
702                 getResourceAsString("serviceWithNetwork/aaiGetNetworksWithVlansToVnfByServiceInstance.json"),
703                 response);
704     }
705
706     @Test
707     public void getVnfDataByGlobalIdAndServiceType() {
708
709         SimulatorApi.registerExpectation(AAI_VNFS_FOR_CHANGE_MANAGEMENT_JSON, APPEND);
710
711         String url = uri + "/get_vnf_data_by_globalid_and_service_type/a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb/vRichardson";
712
713         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
714 //reduced_vnf_data_by_globalid_and_service_type.json
715         assertTrue(false == response.getBody().contains("generic-vfmodule"));
716         assertResponse(JsonAssert.when(Option.IGNORING_ARRAY_ORDER),
717                 getResourceAsString("changeManagement/reduced_vnf_data_by_globalid_and_service_type.json"),
718                 response.getBody());
719
720     }
721
722     @Test
723     public void getVpnList() {
724         SimulatorApi.registerExpectationFromPreset(new PresetAAIGetVpnsByType(), CLEAR_THEN_SET);
725         String url = uri + "/aai_get_vpn_list";
726         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
727         String expected = getResourceAsString("viewEdit/aaiGetVpnList.json");
728         assertThat(response.getBody(), jsonEquals(expected).when(Option.IGNORING_ARRAY_ORDER).when(Option.IGNORING_EXTRA_FIELDS));
729     }
730
731     @DataProvider
732     public static Object[][] getActiveNetworkAaiStates() {
733         return new Object[][] {
734                 {1, "viewEdit/aaiGetActiveNetworks.json"},
735                 {2, "viewEdit/aaiGetActiveNetworks2.json"}
736         };
737     }
738
739     @Test(dataProvider = "getActiveNetworkAaiStates")
740     public void getActiveNetworks_givenSpecificAAIState_cypressPresetMatch(int state, String expectedResultFileName) {
741         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
742             new PresetAAIGetL3NetworksByCloudRegionSpecificState(state),
743             PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AUK51A_TO_ATT_NC
744         ), CLEAR_THEN_SET);
745         String url = uri + AAI_GET_ACTIVE_NETWORKS
746             + "?cloudRegion=" + AAIBaseGetL3NetworksByCloudRegionPreset.DEFAULT_CLOUD_REGION_ID
747             + "&tenantId=" + AAIBaseGetL3NetworksByCloudRegionPreset.DEFAULT_TENANT_ID;
748         String response = restTemplate.getForObject(url, String.class);
749         System.out.println("response = " + response);
750         String expected = getResourceAsString(expectedResultFileName);
751         assertThat(response, jsonEquals(expected));
752     }
753
754     @Test
755     public void getActiveNetworks() throws JsonProcessingException {
756         String networkRole = "Some role";
757         PresetAAIGetL3NetworksByCloudRegion presetAAIGetL3NetworksByCloudRegion = new PresetAAIGetL3NetworksByCloudRegion(networkRole);
758         List<BasePreset> presets = ImmutableList.of(
759                 presetAAIGetL3NetworksByCloudRegion,
760                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AUK51A_TO_ATT_NC
761         );
762         SimulatorApi.registerExpectationFromPresets(presets, CLEAR_THEN_SET);
763         String url = uri + AAI_GET_ACTIVE_NETWORKS +
764                 "?cloudRegion=" + presetAAIGetL3NetworksByCloudRegion.getCloudRegionId() +
765                 "&tenantId=" + presetAAIGetL3NetworksByCloudRegion.getTenantId() +
766                  "&networkRole=" + networkRole;
767         ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
768
769         assertResponse(JsonAssert.when(Option.IGNORING_EXTRA_FIELDS, Option.IGNORING_ARRAY_ORDER),
770                 presetAAIGetL3NetworksByCloudRegion.getActiveNetworksWithNameAndRelatedToVpnBindingAsJsonString(),
771                 response.getBody());
772     }
773
774     private void assertResponse(Object expected, String response) {
775         assertResponse(Configuration.empty(), expected, response);
776     }
777
778     private void assertResponse(Configuration configuration, Object expected, String response) {
779         try {
780             JsonAssert.assertJsonEquals(expected, response, configuration);
781         } catch (Exception | AssertionError e) {
782             System.err.println("response was: " + response);
783             throw e;
784         }
785     }
786 }